feat: capability list to enable greater flexibility of devices
[lunaix-os.git] / lunaix-os / kernel / device / capability.c
diff --git a/lunaix-os/kernel/device/capability.c b/lunaix-os/kernel/device/capability.c
new file mode 100644 (file)
index 0000000..b31f914
--- /dev/null
@@ -0,0 +1,32 @@
+#include <lunaix/device.h>
+#include <lunaix/mm/valloc.h>
+
+struct capability_meta*
+alloc_capability(int cap, unsigned int size) 
+{
+    struct capability_meta* cm = (struct capability_meta*)vzalloc(size);
+
+    cm->cap_type = cap;
+
+    return cm;
+}
+
+void
+device_grant_capability(struct device* dev, struct capability_meta* cap)
+{
+    llist_append(&dev->capabilities, &cap->caps);
+}
+
+struct capability_meta*
+device_get_capability(struct device* dev, unsigned int cap_type)
+{
+    struct capability_meta *pos, *n;
+
+    llist_for_each(pos, n, &dev->capabilities, caps) {
+        if (pos->cap_type == cap_type){
+            return pos;
+        }
+    }
+
+    return NULL;
+}
\ No newline at end of file