Files
mkrtos-real/mkrtos_user/user/drv/lib/mk_drv/mk_drv.c
2024-11-17 10:30:06 +08:00

63 lines
1.3 KiB
C

#include <mk_drv.h>
#include <malloc.h>
#include <assert.h>
#include <string.h>
#include <errno.h>
#include <stdio.h>
static slist_head_t drv_list_head;
void mk_drv_init(void)
{
slist_init(&drv_list_head);
printf("%s init.\n", __func__);
}
static bool_t mk_drv_match(mk_drv_compatible_t *compat, const char *dev_name)
{
while (compat && compat->compatible && dev_name)
{
if (strcmp(compat->compatible, dev_name) == 0)
{
return TRUE;
}
compat++;
}
return FALSE;
}
int mk_drv_mach_dev(int (*hook_mach)(mk_drv_t *drv, const char *dev_name, void *data),
const char *compat_name, const char *dev_name, void *data)
{
assert(hook_mach);
mk_drv_t *pos;
slist_foreach(pos, &drv_list_head, node)
{
if (mk_drv_match(pos->compatilbe, compat_name) == TRUE)
{
return hook_mach(pos, dev_name, data);
}
}
return -ENOENT;
}
int mk_drv_register(mk_drv_t *drv)
{
slist_init(&drv->node);
printf("register drv:%s\n", drv->compatilbe->compatible);
slist_add(&drv_list_head, &drv->node);
// TODO:循环匹配设备树(当前默认驱动必须比设备先注册)
// TODO:检查驱动名字是否冲突
return 0;
}
int mk_drv_unregister(mk_drv_t *drv)
{
// TODO:取消注册,解除绑定
return -1;
}