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; +} |