diff options
author | n_hibma <n_hibma@FreeBSD.org> | 1999-11-19 13:13:28 +0000 |
---|---|---|
committer | n_hibma <n_hibma@FreeBSD.org> | 1999-11-19 13:13:28 +0000 |
commit | 7ce247ec07aa4a318c2186aca94d3d2995cce951 (patch) | |
tree | de61cfe9364aeea075971cf48a1ddd4b335ccc8d /sys | |
parent | 1ffa510a3799f094fb27fd9242357502815d343d (diff) | |
download | FreeBSD-src-7ce247ec07aa4a318c2186aca94d3d2995cce951.zip FreeBSD-src-7ce247ec07aa4a318c2186aca94d3d2995cce951.tar.gz |
Make the event creation work
- Create the /dev/usb event queue device node.
- Add usbread to the cdevsw.
- Also hide the many minor() behind a USBUNIT macro.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/usb/usb.c | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/sys/dev/usb/usb.c b/sys/dev/usb/usb.c index 5005a4d..ef37b4e 100644 --- a/sys/dev/usb/usb.c +++ b/sys/dev/usb/usb.c @@ -68,7 +68,8 @@ #include <dev/usb/usbdi.h> #include <dev/usb/usbdi_util.h> -#define USB_DEV_MINOR 255 +#define USBUNIT(d) (minor(d)) /* usb_discover device nodes, kthread */ +#define USB_DEV_MINOR 255 /* event queue device */ #if defined(__FreeBSD__) MALLOC_DEFINE(M_USB, "USB", "USB"); @@ -126,7 +127,7 @@ int usbpoll __P((dev_t, int, struct proc *)); struct cdevsw usb_cdevsw = { /* open */ usbopen, /* close */ usbclose, - /* read */ noread, + /* read */ usbread, /* write */ nowrite, /* ioctl */ usbioctl, /* poll */ usbpoll, @@ -142,8 +143,10 @@ struct cdevsw usb_cdevsw = { #endif static usbd_status usb_discover __P((struct usb_softc *)); +#if defined(__NetBSD__) || defined(__OpenBSD__) static void usb_create_event_thread __P((void *)); static void usb_event_thread __P((void *)); +#endif #define USB_MAX_EVENTS 50 struct usb_event_q { @@ -182,7 +185,8 @@ USB_ATTACH(usb) #endif usbd_device_handle dev; usbd_status err; - + static int global_init_done = 0; + #if defined(__NetBSD__) || defined(__OpenBSD__) printf("\n"); #elif defined(__FreeBSD__) @@ -229,6 +233,11 @@ USB_ATTACH(usb) #if defined(__FreeBSD__) make_dev(&usb_cdevsw, device_get_unit(self), UID_ROOT, GID_OPERATOR, 0644, "usb%d", device_get_unit(self)); + if (!global_init_done) { + make_dev(&usb_cdevsw, USB_DEV_MINOR, UID_ROOT, GID_OPERATOR, + 0644, "usb"); + global_init_done = 1; + } #endif USB_ATTACH_SUCCESS_RETURN; @@ -294,7 +303,7 @@ usbopen(dev, flag, mode, p) int flag, mode; struct proc *p; { - int unit = minor(dev); + int unit = USBUNIT(dev); struct usb_softc *sc; if (unit == USB_DEV_MINOR) { @@ -303,14 +312,14 @@ usbopen(dev, flag, mode, p) usb_dev_open = 1; usb_async_proc = 0; return (0); - } - - USB_GET_SC_OPEN(usb, unit, sc); + } else { + USB_GET_SC_OPEN(usb, unit, sc); - if (sc->sc_dying) - return (EIO); + if (sc->sc_dying) + return (EIO); - return (0); + return (0); + } } int @@ -320,10 +329,11 @@ usbread(dev, uio, flag) int flag; { struct usb_event ue; + int unit = USBUNIT(dev); int s, error, n; - if (minor(dev) != USB_DEV_MINOR) - return (ENXIO); + if (unit != USB_DEV_MINOR) + return (ENODEV); if (uio->uio_resid != sizeof(struct usb_event)) return (EINVAL); @@ -355,7 +365,7 @@ usbclose(dev, flag, mode, p) int flag, mode; struct proc *p; { - int unit = minor(dev); + int unit = USBUNIT(dev); if (unit == USB_DEV_MINOR) { usb_async_proc = 0; @@ -374,7 +384,7 @@ usbioctl(devt, cmd, data, flag, p) struct proc *p; { struct usb_softc *sc; - int unit = minor(devt); + int unit = USBUNIT(devt); if (unit == USB_DEV_MINOR) { switch (cmd) { @@ -504,8 +514,9 @@ usbpoll(dev, events, p) struct proc *p; { int revents, mask, s; + int unit = USBUNIT(dev); - if (minor(dev) == USB_DEV_MINOR) { + if (unit == USB_DEV_MINOR) { revents = 0; mask = POLLIN | POLLRDNORM; @@ -521,7 +532,6 @@ usbpoll(dev, events, p) #if defined(__FreeBSD__) /* This part should be deleted when kthreads is available */ struct usb_softc *sc; - int unit = minor(dev); USB_GET_SC(usb, unit, sc); |