From c943b90543cc75d87098ce7c1afc8b942443866e Mon Sep 17 00:00:00 2001 From: Taylor R Campbell Date: Sat, 19 Mar 2022 14:46:44 +0000 Subject: [PATCH 39/39] driver(9): New types dev_*_t for device driver devsw operations. These will serve to replace the archaic and kludgey dev_type_* macros which should've been typedefs all along. --- sys/sys/conf.h | 85 ++++++++++++++++++++++++++------------------ sys/uvm/uvm_device.c | 2 +- 2 files changed, 51 insertions(+), 36 deletions(-) diff --git a/sys/sys/conf.h b/sys/sys/conf.h index 23c65819ddcf..bc54e715e230 100644 --- a/sys/sys/conf.h +++ b/sys/sys/conf.h @@ -116,22 +116,37 @@ const struct cdevsw *cdevsw_lookup(dev_t); devmajor_t bdevsw_lookup_major(const struct bdevsw *); devmajor_t cdevsw_lookup_major(const struct cdevsw *); -#define dev_type_open(n) int n (dev_t, int, int, struct lwp *) -#define dev_type_cancel(n) int n (dev_t, int, int, struct lwp *) -#define dev_type_close(n) int n (dev_t, int, int, struct lwp *) -#define dev_type_read(n) int n (dev_t, struct uio *, int) -#define dev_type_write(n) int n (dev_t, struct uio *, int) -#define dev_type_ioctl(n) \ - int n (dev_t, u_long, void *, int, struct lwp *) -#define dev_type_stop(n) void n (struct tty *, int) -#define dev_type_tty(n) struct tty * n (dev_t) -#define dev_type_poll(n) int n (dev_t, int, struct lwp *) -#define dev_type_mmap(n) paddr_t n (dev_t, off_t, int) -#define dev_type_strategy(n) void n (struct buf *) -#define dev_type_dump(n) int n (dev_t, daddr_t, void *, size_t) -#define dev_type_size(n) int n (dev_t) -#define dev_type_kqfilter(n) int n (dev_t, struct knote *) -#define dev_type_discard(n) int n (dev_t, off_t, off_t) +typedef int dev_open_t(dev_t, int, int, struct lwp *); +typedef int dev_cancel_t(dev_t, int, int, struct lwp *); +typedef int dev_close_t(dev_t, int, int, struct lwp *); +typedef int dev_read_t(dev_t, struct uio *, int); +typedef int dev_write_t(dev_t, struct uio *, int); +typedef int dev_ioctl_t(dev_t, u_long, void *, int, struct lwp *); +typedef void dev_stop_t(struct tty *, int); +typedef struct tty *dev_tty_t(dev_t); +typedef int dev_poll_t(dev_t, int, struct lwp *); +typedef paddr_t dev_mmap_t(dev_t, off_t, int); +typedef void dev_strategy_t(struct buf *); +typedef int dev_dump_t(dev_t, daddr_t, void *, size_t); +typedef int dev_size_t(dev_t); +typedef int dev_kqfilter_t(dev_t, struct knote *); +typedef int dev_discard_t(dev_t, off_t, off_t); + +#define dev_type_open(n) dev_open_t n +#define dev_type_cancel(n) dev_cancel_t n +#define dev_type_close(n) dev_close_t n +#define dev_type_read(n) dev_read_t n +#define dev_type_write(n) dev_write_t n +#define dev_type_ioctl(n) dev_ioctl_t n +#define dev_type_stop(n) dev_stop_t n +#define dev_type_tty(n) dev_tty_t n +#define dev_type_poll(n) dev_poll_t n +#define dev_type_mmap(n) dev_mmap_t n +#define dev_type_strategy(n) dev_strategy_t n +#define dev_type_dump(n) dev_dump_t n +#define dev_type_size(n) dev_size_t n +#define dev_type_kqfilter(n) dev_kqfilter_t n +#define dev_type_discard(n) dev_discard_t n int devenodev(dev_t, ...); int deveopnotsupp(dev_t, ...); @@ -140,30 +155,30 @@ int ttyenodev(struct tty *, ...); void ttyvenodev(struct tty *, ...); void ttyvnullop(struct tty *, ...); -#define noopen ((dev_type_open((*)))devenodev) -#define noclose ((dev_type_close((*)))devenodev) -#define noread ((dev_type_read((*)))devenodev) -#define nowrite ((dev_type_write((*)))devenodev) -#define noioctl ((dev_type_ioctl((*)))devenodev) -#define nostop ((dev_type_stop((*)))ttyvenodev) +#define noopen ((dev_open_t *)devenodev) +#define noclose ((dev_close_t *)devenodev) +#define noread ((dev_read_t *)devenodev) +#define nowrite ((dev_write_t *)devenodev) +#define noioctl ((dev_ioctl_t *)devenodev) +#define nostop ((dev_stop_t *)ttyvenodev) #define notty NULL #define nopoll seltrue paddr_t nommap(dev_t, off_t, int); -#define nodump ((dev_type_dump((*)))devenodev) +#define nodump ((dev_dump_t *)devenodev) #define nosize NULL #define nokqfilter seltrue_kqfilter -#define nodiscard ((dev_type_discard((*)))devenodev) - -#define nullopen ((dev_type_open((*)))devnullop) -#define nullclose ((dev_type_close((*)))devnullop) -#define nullread ((dev_type_read((*)))devnullop) -#define nullwrite ((dev_type_write((*)))devnullop) -#define nullioctl ((dev_type_ioctl((*)))devnullop) -#define nullstop ((dev_type_stop((*)))ttyvnullop) -#define nullpoll ((dev_type_poll((*)))devnullop) -#define nulldump ((dev_type_dump((*)))devnullop) -#define nullkqfilter ((dev_type_kqfilter((*)))deveopnotsupp) -#define nulldiscard ((dev_type_discard((*)))devnullop) +#define nodiscard ((dev_discard_t *)devenodev) + +#define nullopen ((dev_open_t *)devnullop) +#define nullclose ((dev_close_t *)devnullop) +#define nullread ((dev_read_t *)devnullop) +#define nullwrite ((dev_write_t *)devnullop) +#define nullioctl ((dev_ioctl_t *)devnullop) +#define nullstop ((dev_stop_t *)ttyvnullop) +#define nullpoll ((dev_poll_t *)devnullop) +#define nulldump ((dev_dump_t *)devnullop) +#define nullkqfilter ((dev_kqfilter_t *)deveopnotsupp) +#define nulldiscard ((dev_discard_t *)devnullop) /* device access wrappers. */ diff --git a/sys/uvm/uvm_device.c b/sys/uvm/uvm_device.c index e894dd6fdcde..cb995069797e 100644 --- a/sys/uvm/uvm_device.c +++ b/sys/uvm/uvm_device.c @@ -112,7 +112,7 @@ udv_attach(dev_t device, vm_prot_t accessprot, { struct uvm_device *udv, *lcv; const struct cdevsw *cdev; - dev_type_mmap((*mapfn)); + dev_mmap_t *mapfn; UVMHIST_FUNC(__func__); UVMHIST_CALLARGS(maphist, "(device=%#jx)", device,0,0,0);