From d6104baa618686f7f0f0f36216394b60553ac14a Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Tue, 21 May 2024 22:18:52 -0400 Subject: kernel: devfs: Add support for close hook Signed-off-by: Ian Moffett --- sys/fs/devfs.c | 23 ++++++++++++++++++++++- sys/include/sys/device.h | 1 + 2 files changed, 23 insertions(+), 1 deletion(-) (limited to 'sys') diff --git a/sys/fs/devfs.c b/sys/fs/devfs.c index d7944aa..7fcdbad 100644 --- a/sys/fs/devfs.c +++ b/sys/fs/devfs.c @@ -177,6 +177,26 @@ vop_open(struct vnode *vp) return dev->open(dev); } +static int +vop_close(struct vnode *vp) +{ + struct device_node *node; + struct device *dev; + + if (vp == NULL) { + return -EIO; + } + + node = vp->data; + dev = device_fetch(node->major, node->minor); + + if (dev->close == NULL) { + return -EIO; + } + + return dev->close(dev); +} + static int devfs_init(struct fs_info *info, struct vnode *source) { @@ -270,5 +290,6 @@ struct vfsops g_devfs_ops = { struct vops g_devfs_vops = { .vget = vop_vget, .read = vop_read, - .open = vop_open + .open = vop_open, + .close = vop_close }; diff --git a/sys/include/sys/device.h b/sys/include/sys/device.h index 69e367f..1bca4a8 100644 --- a/sys/include/sys/device.h +++ b/sys/include/sys/device.h @@ -43,6 +43,7 @@ struct device { int(*read)(struct device *dev, struct sio_txn *sio); int(*ioctl)(struct device *dev, uint32_t cmd, uintptr_t arg); int(*open)(struct device *dev); + int(*close)(struct device *dev); paddr_t(*mmap)(struct device *dev, off_t off, vm_prot_t prot); TAILQ_ENTRY(device) link; }; -- cgit v1.2.3