summaryrefslogtreecommitdiff
path: root/sys/dev/usb
diff options
context:
space:
mode:
authorJosef Karthauser <joe@FreeBSD.org>2002-11-13 15:15:22 +0000
committerJosef Karthauser <joe@FreeBSD.org>2002-11-13 15:15:22 +0000
commitfc2be7e249d9ed0549df966829ffb3647af65a4a (patch)
tree443481abb6ae0ad6026555fbf55587be8ef9523a /sys/dev/usb
parent625bcaea6229cbdd72dde46e79bc12e5141d2e2f (diff)
Notes
Diffstat (limited to 'sys/dev/usb')
-rw-r--r--sys/dev/usb/usb.c4
-rw-r--r--sys/dev/usb/usb.h36
-rw-r--r--sys/dev/usb/usb_subr.c14
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);