|
|
| version 1.6, 2004/05/13 23:49:25 | version 1.7, 2004/05/19 22:53:02 |
|---|---|
| Line 50 | Line 50 |
| struct tty; | struct tty; |
| struct disk; | struct disk; |
| struct vnode; | struct vnode; |
| struct lwkt_port; | |
| struct specinfo { | struct specinfo { |
| u_int si_flags; | u_int si_flags; |
| Line 59 struct specinfo { | Line 60 struct specinfo { |
| char si_name[SPECNAMELEN + 1]; | char si_name[SPECNAMELEN + 1]; |
| void *si_drv1; | void *si_drv1; |
| void *si_drv2; | void *si_drv2; |
| struct cdevsw *si_devsw; /* cached */ | struct cdevsw *si_devsw; /* direct device switch */ |
| struct lwkt_port *si_port; /* direct port dispatch */ | |
| int si_iosize_max; /* maximum I/O size (for physio &al) */ | int si_iosize_max; /* maximum I/O size (for physio &al) */ |
| int si_refs; | |
| union { | union { |
| struct { | struct { |
| struct tty *__sit_tty; | struct tty *__sit_tty; |
| Line 75 struct specinfo { | Line 78 struct specinfo { |
| }; | }; |
| #define SI_STASHED 0x0001 /* created in stashed storage */ | #define SI_STASHED 0x0001 /* created in stashed storage */ |
| #define SI_HASHED 0x0002 /* in (maj,min) hash table */ | |
| #define SI_ADHOC 0x0004 /* created via make_adhoc_dev() or udev2dev() */ | |
| #define si_tty __si_u.__si_tty.__sit_tty | #define si_tty __si_u.__si_tty.__sit_tty |
| #define si_disk __si_u.__si_disk.__sid_disk | #define si_disk __si_u.__si_disk.__sid_disk |
| Line 82 struct specinfo { | Line 87 struct specinfo { |
| #define si_bsize_phys __si_u.__si_disk.__sid_bsize_phys | #define si_bsize_phys __si_u.__si_disk.__sid_bsize_phys |
| #define si_bsize_best __si_u.__si_disk.__sid_bsize_best | #define si_bsize_best __si_u.__si_disk.__sid_bsize_best |
| /* | #define CDEVSW_ALL_MINORS 0 /* mask of 0 always matches 0 */ |
| * Exported shorthand | |
| */ | |
| #define v_hashchain v_rdev->si_hlist | |
| #define v_specmountpoint v_rdev->si_mountpoint | |
| /* | /* |
| * Special device management | * Special device management |
| Line 129 typedef int d_close_t (dev_t dev, int ff | Line 130 typedef int d_close_t (dev_t dev, int ff |
| typedef void d_strategy_t (struct buf *bp); | typedef void d_strategy_t (struct buf *bp); |
| typedef int d_ioctl_t (dev_t dev, u_long cmd, caddr_t data, | typedef int d_ioctl_t (dev_t dev, u_long cmd, caddr_t data, |
| int fflag, d_thread_t *td); | int fflag, d_thread_t *td); |
| typedef int d_dump_t (dev_t dev); | typedef int d_dump_t (dev_t dev, u_int count, u_int blkno, u_int secsize); |
| typedef int d_psize_t (dev_t dev); | typedef int d_psize_t (dev_t dev); |
| typedef int d_read_t (dev_t dev, struct uio *uio, int ioflag); | typedef int d_read_t (dev_t dev, struct uio *uio, int ioflag); |
| Line 204 struct cdevsw { | Line 205 struct cdevsw { |
| d_dump_t *old_dump; | d_dump_t *old_dump; |
| d_psize_t *old_psize; | d_psize_t *old_psize; |
| d_kqfilter_t *old_kqfilter; | d_kqfilter_t *old_kqfilter; |
| void (*old_dummy1)(void); /* expansion space */ | |
| void (*old_dummy2)(void); | |
| void (*old_dummy3)(void); | |
| void (*old_dummy4)(void); | |
| int d_refs; /* ref count */ | |
| void *d_data; /* custom driver data */ | |
| }; | |
| struct cdevlink { | |
| struct cdevlink *next; | |
| u_int mask; | |
| u_int match; | |
| struct cdevsw *devsw; | |
| }; | }; |
| /* | /* |
| Line 250 d_close_t noclose; | Line 264 d_close_t noclose; |
| d_read_t noread; | d_read_t noread; |
| d_write_t nowrite; | d_write_t nowrite; |
| d_ioctl_t noioctl; | d_ioctl_t noioctl; |
| d_clone_t noclone; | |
| d_mmap_t nommap; | d_mmap_t nommap; |
| d_kqfilter_t nokqfilter; | d_kqfilter_t nokqfilter; |
| #define nostrategy ((d_strategy_t *)NULL) | d_strategy_t nostrategy; |
| #define nopoll seltrue | d_poll_t nopoll; |
| d_psize_t nopsize; | |
| d_dump_t nodump; | d_dump_t nodump; |
| #define NUMCDEVSW 256 | #define NUMCDEVSW 256 |
| /* | |
| * nopsize is little used, so not worth having dummy functions for. | |
| */ | |
| #define nopsize ((d_psize_t *)NULL) | |
| d_open_t nullopen; | d_open_t nullopen; |
| d_close_t nullclose; | d_close_t nullclose; |
| Line 287 static moduledata_t name##_mod = { \ | Line 297 static moduledata_t name##_mod = { \ |
| }; \ | }; \ |
| DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE) | DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE) |
| void compile_devsw(struct cdevsw *devsw); | extern struct cdevsw dead_cdevsw; |
| int cdevsw_add (struct cdevsw *new); | |
| struct lwkt_port *cdevsw_add_override (struct cdevsw *new, struct lwkt_port *port); | void compile_devsw(struct cdevsw *); |
| int cdevsw_add (struct cdevsw *, u_int mask, u_int match); | |
| struct cdevsw *cdevsw_add_override (dev_t, u_int mask, u_int match); | |
| struct lwkt_port *cdevsw_dev_override(dev_t dev, struct lwkt_port *port); | struct lwkt_port *cdevsw_dev_override(dev_t dev, struct lwkt_port *port); |
| int cdevsw_remove (struct cdevsw *old); | int cdevsw_remove (struct cdevsw *, u_int mask, u_int match); |
| struct cdevsw *cdevsw_get (int x, int y); | |
| void cdevsw_release (struct cdevsw *); | |
| int count_dev (dev_t dev); | int count_dev (dev_t dev); |
| int count_udev (udev_t dev); | |
| void destroy_dev (dev_t dev); | void destroy_dev (dev_t dev); |
| void destroy_all_dev (struct cdevsw *, u_int mask, u_int match); | |
| void release_dev (dev_t dev); | |
| dev_t reference_dev (dev_t dev); | |
| struct cdevsw *devsw (dev_t dev); | struct cdevsw *devsw (dev_t dev); |
| const char *devtoname (dev_t dev); | const char *devtoname (dev_t dev); |
| void freedev (dev_t dev); | void freedev (dev_t dev); |
| int iszerodev (dev_t dev); | int iszerodev (dev_t dev); |
| dev_t make_dev (struct cdevsw *devsw, int minor, uid_t uid, gid_t gid, int perms, const char *fmt, ...) __printflike(6, 7); | dev_t make_dev (struct cdevsw *devsw, int minor, uid_t uid, gid_t gid, int perms, const char *fmt, ...) __printflike(6, 7); |
| dev_t make_adhoc_dev (struct cdevsw *devsw, int minor); | |
| dev_t make_sub_dev (dev_t dev, int minor); | |
| int lminor (dev_t dev); | int lminor (dev_t dev); |
| void setconf (void); | void setconf (void); |
| dev_t getdiskbyname(char *name); | dev_t getdiskbyname(char *name); |
| int dev_is_good(dev_t dev); | |
| /* | /* |
| * XXX: This included for when DEVFS resurfaces | * XXX: This included for when DEVFS resurfaces |