summaryrefslogtreecommitdiff
path: root/na/fs/chardev.cc
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-07-10 11:24:56 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-07-10 11:24:56 +0800
commit1767d390fbf3d0c65389de46caf0b6d43ef3b6ad (patch)
tree0f5e01cd7c7a05abb6b1c7472d7f00f49caf02cc /na/fs/chardev.cc
parent63dc025705f6533b91fb1a7d26e6ed864efd9900 (diff)
downloadlume-1767d390fbf3d0c65389de46caf0b6d43ef3b6ad.tar.gz
lume-1767d390fbf3d0c65389de46caf0b6d43ef3b6ad.tar.xz
feat: establish bootable new architecture checkpoint
Replace the compressed boot path with a relocatable higher-half RISC-V entry, expand memory and SMP support, and add the driver, TTY, VFS, exec, signal, syscall, initramfs, and self-test infrastructure needed for a bootable kernel checkpoint.
Diffstat (limited to 'na/fs/chardev.cc')
-rw-r--r--na/fs/chardev.cc43
1 files changed, 43 insertions, 0 deletions
diff --git a/na/fs/chardev.cc b/na/fs/chardev.cc
new file mode 100644
index 0000000..fa96276
--- /dev/null
+++ b/na/fs/chardev.cc
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/* Copyright (C) 2026 Richard Qin */
+
+/*
+ * chardev.cc — Character device registry
+ *
+ * Simple linked list of registered cdevs, searched by dev number.
+ */
+
+#include <lume/chardev.h>
+#include <lume/list.h>
+#include <lume/klog.h>
+#include <kernel/sync/spinlock.h>
+
+static list_node g_cdev_list;
+static Spinlock g_cdev_lock;
+
+void cdev_init()
+{
+ list_init(&g_cdev_list);
+}
+
+void cdev_register(cdev* dev)
+{
+ LockGuard guard(g_cdev_lock);
+ list_init(&dev->list);
+ list_add_tail(&dev->list, &g_cdev_list);
+ printk("[cdev] registered '%s' (%d,%d)\n",
+ dev->name, MAJOR(dev->dev), MINOR(dev->dev));
+}
+
+cdev* cdev_find(uint32 dev_nr)
+{
+ LockGuard guard(g_cdev_lock);
+ list_node* pos;
+ for (pos = g_cdev_list.prev; pos != &g_cdev_list; pos = pos->prev) {
+ cdev* cd = container_of(pos, cdev, list);
+ if (cd->dev == dev_nr) {
+ return cd;
+ }
+ }
+ return nullptr;
+}