diff options
author | n_hibma <n_hibma@FreeBSD.org> | 1999-11-21 17:30:42 +0000 |
---|---|---|
committer | n_hibma <n_hibma@FreeBSD.org> | 1999-11-21 17:30:42 +0000 |
commit | 17c7f61500a8e5621699b65fdd58b835ac989513 (patch) | |
tree | 02b3b31338a30b76377dd22d22bd7a15bee64a30 /sys | |
parent | 183c85e4b413f7c0d1c90772ccb22075f5e49bed (diff) | |
download | FreeBSD-src-17c7f61500a8e5621699b65fdd58b835ac989513.zip FreeBSD-src-17c7f61500a8e5621699b65fdd58b835ac989513.tar.gz |
Addition of new fields to the usb_devinfo struct to enable the new
and shiny usbd daemon to handle events.
usb_port.h:
- Add a macro to retrieve the unit number from a USBBASEDEVICE
usb.h, usb_subr.c:
- Add fields to the device_info struct.
usb_subr.c:
- Fill in the new fields.
- Remove the notification of the event up a bit to make sure all the
information is still available to fill the usb_devinfo struct.
This requires recompilation of usbdevs (src/usr.sbin/usbdevs) and the
ezdownload/ezupload (ports/misc/ezload) utilities in any case.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/usb/usb.h | 24 | ||||
-rw-r--r-- | sys/dev/usb/usb_port.h | 3 | ||||
-rw-r--r-- | sys/dev/usb/usb_subr.c | 12 |
3 files changed, 26 insertions, 13 deletions
diff --git a/sys/dev/usb/usb.h b/sys/dev/usb/usb.h index 0d4703b..6cc6a45 100644 --- a/sys/dev/usb/usb.h +++ b/sys/dev/usb/usb.h @@ -477,17 +477,21 @@ struct usb_ctl_report_desc { }; struct usb_device_info { - u_int8_t addr; /* device address */ - char product[USB_MAX_STRING_LEN]; - char vendor[USB_MAX_STRING_LEN]; - char release[8]; - u_int16_t productNo; - u_int16_t vendorNo; - u_int8_t class; - u_int8_t config; - u_int8_t lowspeed; + u_int8_t bus; /* bus number */ + u_int8_t addr; /* device address */ + char product[USB_MAX_STRING_LEN]; /* iProduct */ + char vendor[USB_MAX_STRING_LEN]; /* iManufacturer */ + char release[8]; /* string of releaseNo*/ + u_int16_t productNo; /* idProduct */ + u_int16_t vendorNo; /* idVendor */ + u_int16_t releaseNo; /* bcdDevice */ + u_int8_t class; /* bDeviceClass */ + u_int8_t subclass; /* bDeviceSubclass */ + u_int8_t protocol; /* bDeviceProtocol */ + u_int8_t config; /* config index */ + u_int8_t lowspeed; /* lowsped yes/no */ int power; /* power consumption in mA, 0 if selfpowered */ - int nports; + int nports; /* 0 if not hub */ u_int8_t ports[16];/* hub only: addresses of devices on ports */ #define USB_PORT_ENABLED 0xff #define USB_PORT_SUSPENDED 0xfe diff --git a/sys/dev/usb/usb_port.h b/sys/dev/usb/usb_port.h index 82e072d..65de2fc 100644 --- a/sys/dev/usb/usb_port.h +++ b/sys/dev/usb/usb_port.h @@ -65,6 +65,7 @@ typedef struct device *device_ptr_t; #define USBDEV(bdev) (&(bdev)) #define USBDEVNAME(bdev) ((bdev).dv_xname) #define USBDEVPTRNAME(bdevptr) ((bdevptr)->dv_xname) +#define USBDEVUNIT(bdev) ((bdev).dv_unit) #define DECLARE_USB_DMA_T \ struct usb_dma_block; \ @@ -177,6 +178,7 @@ typedef struct device device_ptr_t; #define USBDEV(bdev) (&(bdev)) #define USBDEVNAME(bdev) ((bdev).dv_xname) #define USBDEVPTRNAME(bdevptr) ((bdevptr)->dv_xname) +#define USBDEVUNIT(bdev) ((bdev).dv_unit) #define DECLARE_USB_DMA_T \ struct usb_dma_block; \ @@ -271,6 +273,7 @@ __CONCAT(dname,_detach)(self, flags) \ #define USBDEV(bdev) (bdev) #define USBDEVNAME(bdev) device_get_nameunit(bdev) #define USBDEVPTRNAME(bdev) device_get_nameunit(bdev) +#define USBDEVUNIT(bdev) device_get_unit(bdev) #define DECLARE_USB_DMA_T typedef void * usb_dma_t diff --git a/sys/dev/usb/usb_subr.c b/sys/dev/usb/usb_subr.c index b985a5e..d37c7e7 100644 --- a/sys/dev/usb/usb_subr.c +++ b/sys/dev/usb/usb_subr.c @@ -1138,15 +1138,20 @@ usbd_fill_deviceinfo(dev, di) struct usbd_port *p; int i, err, s; - di->config = dev->config; + di->bus = USBDEVUNIT(dev->bus->bdev); + di->addr = dev->address; usbd_devinfo_vp(dev, di->vendor, di->product); usbd_printBCD(di->release, UGETW(dev->ddesc.bcdDevice)); di->vendorNo = UGETW(dev->ddesc.idVendor); di->productNo = UGETW(dev->ddesc.idProduct); + di->releaseNo = UGETW(dev->ddesc.bcdDevice); di->class = dev->ddesc.bDeviceClass; + di->subclass = dev->ddesc.bDeviceSubClass; + di->protocol = dev->ddesc.bDeviceProtocol; + di->config = dev->config; di->power = dev->self_powered ? 0 : dev->power; di->lowspeed = dev->lowspeed; - di->addr = dev->address; + if (dev->hub) { for (i = 0; i < sizeof(di->ports) / sizeof(di->ports[0]) && @@ -1237,6 +1242,8 @@ usb_disconnect_port(up, parent) return; } + usbd_add_event(USB_EVENT_DETACH, dev); + if (dev->subdevs != NULL) { for (i = 0; dev->subdevs[i]; i++) { if (!dev->subdevs[i]) /* skip empty elements */ @@ -1257,7 +1264,6 @@ usb_disconnect_port(up, parent) } } - usbd_add_event(USB_EVENT_DETACH, dev); dev->bus->devices[dev->address] = 0; up->device = 0; usb_free_device(dev); |