git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
feat: (twimap) provide an easy way for mapping kernel objects into filesystem
[lunaix-os.git]
/
lunaix-os
/
kernel
/
device
/
device.c
diff --git
a/lunaix-os/kernel/device/device.c
b/lunaix-os/kernel/device/device.c
index 1512e6f1cb56bf2fc8f402a6243413524140a60d..beb1f18050b15097bb02d5696b037a8a8f32e5a6 100644
(file)
--- a/
lunaix-os/kernel/device/device.c
+++ b/
lunaix-os/kernel/device/device.c
@@
-19,6
+19,9
@@
device_add(struct device* parent,
if (parent) {
assert((parent->dev_type & DEV_MSKIF) == DEV_IFCAT);
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 =
}
size_t strlen =
@@
-31,7
+34,7
@@
device_add(struct device* parent,
dev->dev_type = type;
hstr_rehash(&dev->name, HSTR_FULL_HASH);
dev->dev_type = type;
hstr_rehash(&dev->name, HSTR_FULL_HASH);
- llist_
append(&root_list, &dev->siblings
);
+ llist_
init_head(&dev->children
);
return dev;
}
return dev;
}
@@
-90,9
+93,9
@@
device_getbyid(struct llist_header* devlist, dev_t id)
}
struct device*
}
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)
{
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*
}
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);
{
struct hstr hname = HSTR(name, len);
hstr_rehash(&hname, HSTR_FULL_HASH);
- return device_getbyhname(
devlist
, &hname);
+ return device_getbyhname(
root_dev
, &hname);
}
void
}
void
@@
-121,9
+124,9
@@
device_remove(struct device* dev)
}
struct device*
}
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)
struct device *pos, *n;
int off = 0;
llist_for_each(pos, n, devlist, siblings)