diff options
Diffstat (limited to 'src/gsmd/vendor.c')
| -rw-r--r-- | src/gsmd/vendor.c | 39 | 
1 files changed, 39 insertions, 0 deletions
diff --git a/src/gsmd/vendor.c b/src/gsmd/vendor.c new file mode 100644 index 0000000..d577e98 --- /dev/null +++ b/src/gsmd/vendor.c @@ -0,0 +1,39 @@ +#include <errno.h> + +#include <common/linux_list.h> + +#include "gsmd.h" + +#include <gsmd/gsmd.h> +#include <gsmd/vendorplugin.h> + +static LLIST_HEAD(vendorpl_list); + +int gsmd_vendor_plugin_register(struct gsmd_vendor_plugin *pl) +{ +	llist_add(&pl->list, &vendorpl_list); + +	return 0; +} + +void gsmd_vendor_plugin_unregister(struct gsmd_vendor_plugin *pl) +{ +	llist_del(&pl->list); +} + +int gsmd_vendor_plugin_find(struct gsmd *g) +{ +	struct gsmd_vendor_plugin *pl; + +	if (g->vendorpl) +		return -EEXIST; +	 +	llist_for_each_entry(pl, &vendorpl_list, list) { +		if (pl->detect(g) == 1) { +			g->vendorpl = pl; +			return 1; +		} +	} + +	return 0; +}  | 
