diff options
| author | Josef Karthauser <joe@FreeBSD.org> | 2002-11-13 15:15:22 +0000 |
|---|---|---|
| committer | Josef Karthauser <joe@FreeBSD.org> | 2002-11-13 15:15:22 +0000 |
| commit | fc2be7e249d9ed0549df966829ffb3647af65a4a (patch) | |
| tree | 443481abb6ae0ad6026555fbf55587be8ef9523a /sys/dev/usb | |
| parent | 625bcaea6229cbdd72dde46e79bc12e5141d2e2f (diff) | |
Notes
Diffstat (limited to 'sys/dev/usb')
| -rw-r--r-- | sys/dev/usb/usb.c | 4 | ||||
| -rw-r--r-- | sys/dev/usb/usb.h | 36 | ||||
| -rw-r--r-- | sys/dev/usb/usb_subr.c | 14 |
3 files changed, 34 insertions, 20 deletions
diff --git a/sys/dev/usb/usb.c b/sys/dev/usb/usb.c index 5447d3681865..8de1ea22736e 100644 --- a/sys/dev/usb/usb.c +++ b/sys/dev/usb/usb.c @@ -646,8 +646,8 @@ usbd_add_event(int type, usbd_device_handle dev) return; } ueq->ue.ue_type = type; - ueq->ue.ue_cookie = dev->cookie; - usbd_fill_deviceinfo(dev, &ueq->ue.ue_device); + ueq->ue.u.ue_driver.ue_cookie = dev->cookie; + usbd_fill_deviceinfo(dev, &ueq->ue.u.ue_device); microtime(&thetime); TIMEVAL_TO_TIMESPEC(&thetime, &ueq->ue.ue_time); SIMPLEQ_INSERT_TAIL(&usb_events, ueq, next); diff --git a/sys/dev/usb/usb.h b/sys/dev/usb/usb.h index 4d34011c24f0..d0803656588f 100644 --- a/sys/dev/usb/usb.h +++ b/sys/dev/usb/usb.h @@ -66,8 +66,7 @@ MALLOC_DECLARE(M_USBHC); /* these three defines are used by usbd to autoload the usb kld */ #define USB_KLD "usb" -#define USB_OHCI "ohci/usb" -#define USB_UHCI "uhci/usb" +#define USB_UHUB "usb/uhub" /* root hub */ #define USB_MAX_DEVICES 128 #define USB_START_ADDR 0 @@ -598,13 +597,14 @@ struct usb_ctl_report_desc { u_char ucrd_data[1024]; /* filled data size will vary */ }; -#define MAXDEVNAMES 4 -#define MAXDEVNAMELEN 10 +typedef struct { u_int32_t cookie; } usb_event_cookie_t; + +#define USB_MAX_DEVNAMES 4 +#define USB_MAX_DEVNAMELEN 16 struct usb_device_info { u_int8_t udi_bus; u_int8_t udi_addr; /* device address */ - char udi_devnames[MAXDEVNAMES][MAXDEVNAMELEN]; - /* device names */ + usb_event_cookie_t udi_cookie; char udi_product[USB_MAX_STRING_LEN]; char udi_vendor[USB_MAX_STRING_LEN]; char udi_release[8]; @@ -618,6 +618,7 @@ struct usb_device_info { u_int8_t udi_lowspeed; int udi_power; /* power consumption in mA, 0 if selfpowered */ int udi_nports; + char udi_devnames[USB_MAX_DEVNAMES][USB_MAX_DEVNAMELEN]; u_int8_t udi_ports[16];/* hub only: addresses of devices on ports */ #define USB_PORT_ENABLED 0xff #define USB_PORT_SUSPENDED 0xfe @@ -634,15 +635,28 @@ struct usb_device_stats { u_long uds_requests[4]; /* indexed by transfer type UE_* */ }; -typedef struct { u_int32_t cookie; } usb_event_cookie_t; /* Events that can be read from /dev/usb */ struct usb_event { int ue_type; -#define USB_EVENT_ATTACH 1 -#define USB_EVENT_DETACH 2 - struct usb_device_info ue_device; +#define USB_EVENT_CTRLR_ATTACH 1 +#define USB_EVENT_CTRLR_DETACH 2 +#define USB_EVENT_DEVICE_ATTACH 3 +#define USB_EVENT_DEVICE_DETACH 4 +#define USB_EVENT_DRIVER_ATTACH 5 +#define USB_EVENT_DRIVER_DETACH 6 +#define USB_EVENT_IS_ATTACH(n) ((n) == USB_EVENT_CTRLR_ATTACH || (n) == USB_EVENT_DEVICE_ATTACH || (n) == USB_EVENT_DRIVER_ATTACH) +#define USB_EVENT_IS_DETACH(n) ((n) == USB_EVENT_CTRLR_DETACH || (n) == USB_EVENT_DEVICE_DETACH || (n) == USB_EVENT_DRIVER_DETACH) struct timespec ue_time; - usb_event_cookie_t ue_cookie; + union { + struct { + int ue_bus; + } ue_ctrlr; + struct usb_device_info ue_device; + struct { + usb_event_cookie_t ue_cookie; + char ue_devname[16]; + } ue_driver; + } u; }; /* USB controller */ diff --git a/sys/dev/usb/usb_subr.c b/sys/dev/usb/usb_subr.c index 167f11e50949..e55e7905e5a3 100644 --- a/sys/dev/usb/usb_subr.c +++ b/sys/dev/usb/usb_subr.c @@ -1002,7 +1002,7 @@ usbd_new_device(device_ptr_t parent, usbd_bus_handle bus, int depth, return (err); } - usbd_add_event(USB_EVENT_ATTACH, dev); + usbd_add_event(USB_EVENT_DEVICE_ATTACH, dev); return (USBD_NORMAL_COMPLETION); } @@ -1129,15 +1129,15 @@ usbd_fill_deviceinfo(usbd_device_handle dev, struct usb_device_info *di) if (dev->subdevs) { for (i = 0; dev->subdevs[i] && - i < MAXDEVNAMES; i++) { + i < USB_MAX_DEVNAMES; i++) { strncpy(di->udi_devnames[i], USBDEVPTRNAME(dev->subdevs[i]), - MAXDEVNAMELEN); - di->udi_devnames[i][MAXDEVNAMELEN-1] = '\0'; /* terminate */ + USB_MAX_DEVNAMELEN); + di->udi_devnames[i][USB_MAX_DEVNAMELEN-1] = '\0'; /* terminate */ } } else { i = 0; } - for (/*i is set */; i < MAXDEVNAMES; i++) + for (/*i is set */; i < USB_MAX_DEVNAMES; i++) di->udi_devnames[i][0] = 0; /* empty */ usbd_devinfo_vp(dev, di->udi_vendor, di->udi_product); @@ -1239,7 +1239,7 @@ usb_disconnect_port(struct usbd_port *up, device_ptr_t parent) return; } - usbd_add_event(USB_EVENT_DETACH, dev); + usbd_add_event(USB_EVENT_DEVICE_DETACH, dev); if (dev->subdevs != NULL) { DPRINTFN(3,("usb_disconnect_port: disconnect subdevs\n")); @@ -1259,7 +1259,7 @@ usb_disconnect_port(struct usbd_port *up, device_ptr_t parent) } } - /*usbd_add_event(USB_EVENT_DETACH, dev);*/ + /*usbd_add_event(USB_EVENT_DEVICE_DETACH, dev);*/ dev->bus->devices[dev->address] = NULL; up->device = NULL; usb_free_device(dev); |
