diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2026-07-10 11:24:56 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2026-07-10 11:24:56 +0800 |
| commit | 1767d390fbf3d0c65389de46caf0b6d43ef3b6ad (patch) | |
| tree | 0f5e01cd7c7a05abb6b1c7472d7f00f49caf02cc /na/fs/chardev.cc | |
| parent | 63dc025705f6533b91fb1a7d26e6ed864efd9900 (diff) | |
| download | lume-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.cc | 43 |
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; +} |
