feat: nearly complete POSIX.1-2008 compliant terminal interface implementation
[lunaix-os.git] / lunaix-os / kernel / device / device.c
index b25a9c203594bab14d2d2892ca04bbe39d5e5796..cce51b19dbec4aaf9c3bbc9b94a0e8bddc18b018 100644 (file)
@@ -8,7 +8,7 @@
 #include <lunaix/syscall.h>
 #include <lunaix/syscall_utils.h>
 
-#include <klibc/stdio.h>
+#include <klibc/strfmt.h>
 #include <klibc/string.h>
 
 static DEFINE_LLIST(root_list);
@@ -20,8 +20,7 @@ struct devclass default_devclass = {};
 void
 device_setname_vargs(struct device* dev, char* fmt, va_list args)
 {
-    size_t strlen =
-      __ksprintf_internal(dev->name_val, fmt, DEVICE_NAME_SIZE, args);
+    size_t strlen = ksnprintfv(dev->name_val, fmt, DEVICE_NAME_SIZE, args);
 
     dev->name = HSTR(dev->name_val, strlen);
 
@@ -70,6 +69,7 @@ device_create(struct device* dev,
 
     llist_init_head(&dev->children);
     mutex_init(&dev->lock);
+    iopoll_init_evt_q(&dev->pollers);
 }
 
 struct device*
@@ -201,6 +201,13 @@ device_cast(void* obj)
     return NULL;
 }
 
+void
+device_alert_poller(struct device* dev, int poll_evt)
+{
+    dev->poll_evflags = poll_evt;
+    iopoll_wake_pollers(&dev->pollers);
+}
+
 __DEFINE_LXSYSCALL3(int, ioctl, int, fd, int, req, va_list, args)
 {
     int errno = -1;