X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/5ea8e2ba737f903db81d49b56778e883634512a5..a4ec38a4c7ef61b04b92d34637c846a8e2e95f7f:/lunaix-os/kernel/device/device.c diff --git a/lunaix-os/kernel/device/device.c b/lunaix-os/kernel/device/device.c index 0990c56..beb1f18 100644 --- a/lunaix-os/kernel/device/device.c +++ b/lunaix-os/kernel/device/device.c @@ -19,10 +19,13 @@ device_add(struct device* parent, if (parent) { assert((parent->dev_type & DEV_MSKIF) == DEV_IFCAT); + llist_append(&parent->children, &dev->siblings); + } else { + llist_append(&root_list, &dev->siblings); } size_t strlen = - __sprintf_internal(dev->name_val, name_fmt, DEVICE_NAME_SIZE, args); + __ksprintf_internal(dev->name_val, name_fmt, DEVICE_NAME_SIZE, args); dev->dev_id = devid++; dev->name = HSTR(dev->name_val, strlen); @@ -31,7 +34,7 @@ device_add(struct device* parent, dev->dev_type = type; hstr_rehash(&dev->name, HSTR_FULL_HASH); - llist_append(&root_list, &dev->siblings); + llist_init_head(&dev->children); return dev; } @@ -90,9 +93,9 @@ device_getbyid(struct llist_header* devlist, dev_t id) } struct device* -device_getbyhname(struct llist_header* devlist, struct hstr* name) +device_getbyhname(struct device* root_dev, struct hstr* name) { - devlist = devlist ? devlist : &root_list; + struct llist_header* devlist = root_dev ? &root_dev->children : &root_list; struct device *pos, *n; llist_for_each(pos, n, devlist, siblings) { @@ -105,12 +108,12 @@ device_getbyhname(struct llist_header* devlist, struct hstr* name) } struct device* -device_getbyname(struct llist_header* devlist, const char* name, size_t len) +device_getbyname(struct device* root_dev, const char* name, size_t len) { struct hstr hname = HSTR(name, len); hstr_rehash(&hname, HSTR_FULL_HASH); - return device_getbyhname(devlist, &hname); + return device_getbyhname(root_dev, &hname); } void @@ -121,9 +124,9 @@ device_remove(struct device* dev) } struct device* -device_getbyoffset(struct llist_header* devlist, int offset) +device_getbyoffset(struct device* root_dev, int offset) { - devlist = devlist ? devlist : &root_list; + struct llist_header* devlist = root_dev ? &root_dev->children : &root_list; struct device *pos, *n; int off = 0; llist_for_each(pos, n, devlist, siblings)