X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/96cf56ea15a22b8b362aac6c3ab202d2608e9151..96e23fa3c6eabf8a6efebac24b740c5d4a2a1050:/lunaix-os/kernel/device.c diff --git a/lunaix-os/kernel/device.c b/lunaix-os/kernel/device.c deleted file mode 100644 index 017f3b3..0000000 --- a/lunaix-os/kernel/device.c +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include -#include -#include - -struct llist_header dev_list; - -static struct twifs_node* dev_root; - -int -__dev_read(struct v_inode* inode, void* buffer, size_t len, size_t fpos); - -int -__dev_write(struct v_inode* inode, void* buffer, size_t len, size_t fpos); - -void -device_init() -{ - dev_root = twifs_toplevel_node("dev", 3, 0); - - llist_init_head(&dev_list); -} - -struct device* -__device_add(struct device* parent, - void* underlay, - char* name_fmt, - uint32_t type, - va_list args) -{ - struct device* dev = vzalloc(sizeof(struct device)); - - size_t strlen = - __sprintf_internal(dev->name_val, name_fmt, DEVICE_NAME_SIZE, args); - - dev->name = HSTR(dev->name_val, strlen); - dev->parent = parent; - dev->underlay = underlay; - - hstr_rehash(&dev->name, HSTR_FULL_HASH); - llist_append(&dev_list, &dev->dev_list); - - struct twifs_node* dev_node = - twifs_file_node(dev_root, dev->name_val, strlen, type); - dev_node->data = dev; - dev_node->ops.read = __dev_read; - dev_node->ops.write = __dev_write; - - dev->fs_node = dev_node; - - return dev; -} - -struct device* -device_addseq(struct device* parent, void* underlay, char* name_fmt, ...) -{ - va_list args; - va_start(args, name_fmt); - - struct device* dev = - __device_add(parent, underlay, name_fmt, VFS_IFSEQDEV, args); - - va_end(args); - return dev; -} - -struct device* -device_addvol(struct device* parent, void* underlay, char* name_fmt, ...) -{ - va_list args; - va_start(args, name_fmt); - - struct device* dev = - __device_add(parent, underlay, name_fmt, VFS_IFVOLDEV, args); - - va_end(args); - return dev; -} - -int -__dev_read(struct v_inode* inode, void* buffer, size_t len, size_t fpos) -{ - struct twifs_node* dev_node = (struct twifs_node*)inode->data; - struct device* dev = (struct device*)dev_node->data; - - if (!dev->read) { - return ENOTSUP; - } - return dev->read(dev, buffer, fpos, len); -} - -int -__dev_write(struct v_inode* inode, void* buffer, size_t len, size_t fpos) -{ - struct twifs_node* dev_node = (struct twifs_node*)inode->data; - struct device* dev = (struct device*)dev_node->data; - - if (!dev->write) { - return ENOTSUP; - } - return dev->write(dev, buffer, fpos, len); -} - -void -device_remove(struct device* dev) -{ - llist_delete(&dev->dev_list); - twifs_rm_node((struct twifs_node*)dev->fs_node); - vfree(dev); -} \ No newline at end of file