diff options
Diffstat (limited to 'sys/dev/usb/usbdivar.h')
-rw-r--r-- | sys/dev/usb/usbdivar.h | 81 |
1 files changed, 47 insertions, 34 deletions
diff --git a/sys/dev/usb/usbdivar.h b/sys/dev/usb/usbdivar.h index 9fd4931567e..ad013bedc34 100644 --- a/sys/dev/usb/usbdivar.h +++ b/sys/dev/usb/usbdivar.h @@ -1,5 +1,5 @@ -/* $OpenBSD: usbdivar.h,v 1.6 1999/11/07 21:30:20 fgsch Exp $ */ -/* $NetBSD: usbdivar.h,v 1.38 1999/10/25 10:51:46 augustss Exp $ */ +/* $OpenBSD: usbdivar.h,v 1.7 2000/03/26 08:39:46 aaron Exp $ */ +/* $NetBSD: usbdivar.h,v 1.47 2000/02/22 11:30:56 augustss Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -41,7 +41,7 @@ /* From usb_mem.h */ DECLARE_USB_DMA_T; -struct usbd_request; +struct usbd_xfer; struct usbd_pipe; struct usbd_endpoint { @@ -51,19 +51,23 @@ struct usbd_endpoint { struct usbd_bus_methods { usbd_status (*open_pipe)__P((struct usbd_pipe *pipe)); + void (*soft_intr)__P((struct usbd_bus *)); void (*do_poll)__P((struct usbd_bus *)); usbd_status (*allocm)__P((struct usbd_bus *, usb_dma_t *, u_int32_t bufsize)); void (*freem)__P((struct usbd_bus *, usb_dma_t *)); + struct usbd_xfer * (*allocx)__P((struct usbd_bus *)); + void (*freex)__P((struct usbd_bus *, + struct usbd_xfer *)); }; struct usbd_pipe_methods { - usbd_status (*transfer)__P((usbd_request_handle reqh)); - usbd_status (*start)__P((usbd_request_handle reqh)); - void (*abort)__P((usbd_request_handle reqh)); + usbd_status (*transfer)__P((usbd_xfer_handle xfer)); + usbd_status (*start)__P((usbd_xfer_handle xfer)); + void (*abort)__P((usbd_xfer_handle xfer)); void (*close)__P((usbd_pipe_handle pipe)); void (*cleartoggle)__P((usbd_pipe_handle pipe)); - void (*done)__P((usbd_request_handle reqh)); + void (*done)__P((usbd_xfer_handle xfer)); }; struct usbd_port { @@ -101,31 +105,38 @@ struct usbd_bus { struct usb_device_stats stats; int intr_context; u_int no_intrs; + int usbrev; /* USB revision */ +#define USBREV_UNKNOWN 0 +#define USBREV_PRE_1_0 1 +#define USBREV_1_0 2 +#define USBREV_1_1 3 +#define USBREV_STR { "unknown", "pre 1.0", "1.0", "1.1" } + #if defined(__NetBSD__) || defined(__OpenBSD__) bus_dma_tag_t dmatag; /* DMA tag */ #endif }; struct usbd_device { - struct usbd_bus *bus; - struct usbd_pipe *default_pipe; - u_int8_t address; - u_int8_t depth; - u_int8_t lowspeed; - u_int16_t power; - u_int8_t self_powered; - int config; - int langid; /* language to use for strings */ + struct usbd_bus *bus; /* our controller */ + struct usbd_pipe *default_pipe; /* pipe 0 */ + u_int8_t address; /* device address */ + u_int8_t config; /* current configuration # */ + u_int8_t depth; /* distance from root hub */ + u_int8_t lowspeed; /* lowspeed flag */ + u_int8_t self_powered; /* flag for self powered */ + u_int16_t power; /* mA the device uses */ + int16_t langid; /* language for strings */ #define USBD_NOLANG (-1) - usb_event_cookie_t cookie; /* unique connection id */ - struct usbd_port *powersrc; - struct usbd_endpoint def_ep; /* for pipe 0 */ - usb_endpoint_descriptor_t def_ep_desc; /* for pipe 0 */ - struct usbd_interface *ifaces; - usb_device_descriptor_t ddesc; - usb_config_descriptor_t *cdesc; /* full config descr */ - struct usbd_quirks *quirks; - struct usbd_hub *hub; /* only if this is a hub */ + usb_event_cookie_t cookie; /* unique connection id */ + struct usbd_port *powersrc; /* upstream hub port, or 0 */ + struct usbd_endpoint def_ep; /* for pipe 0 */ + usb_endpoint_descriptor_t def_ep_desc; /* for pipe 0 */ + struct usbd_interface *ifaces; /* array of all interfaces */ + usb_device_descriptor_t ddesc; /* device descriptor */ + usb_config_descriptor_t *cdesc; /* full config descr */ + struct usbd_quirks *quirks; /* device quirks, always set */ + struct usbd_hub *hub; /* only if this is a hub */ device_ptr_t *subdevs; /* sub-devices, 0 terminated */ }; @@ -145,17 +156,18 @@ struct usbd_pipe { struct usbd_endpoint *endpoint; int refcnt; char running; - SIMPLEQ_HEAD(, usbd_request) queue; + SIMPLEQ_HEAD(, usbd_xfer) queue; LIST_ENTRY(usbd_pipe) next; - usbd_request_handle intrreqh; /* used for repeating requests */ + usbd_xfer_handle intrxfer; /* used for repeating requests */ char repeat; + int interval; /* Filled by HC driver. */ struct usbd_pipe_methods *methods; }; -struct usbd_request { +struct usbd_xfer { struct usbd_pipe *pipe; void *priv; void *buffer; @@ -183,10 +195,10 @@ struct usbd_request { #define URQ_AUTO_DMABUF 0x10 #define URQ_DEV_DMABUF 0x20 - SIMPLEQ_ENTRY(usbd_request) next; + SIMPLEQ_ENTRY(usbd_xfer) next; void *hcpriv; /* private use by the HC driver */ - int hcprivint; /* ditto */ + int hcprivint; #if defined(__FreeBSD__) struct callout_handle timo_handle; @@ -204,7 +216,7 @@ usbd_status usbd_reset_port __P((usbd_device_handle dev, int port, usb_port_status_t *ps)); usbd_status usbd_setup_pipe __P((usbd_device_handle dev, usbd_interface_handle iface, - struct usbd_endpoint *, + struct usbd_endpoint *, int, usbd_pipe_handle *pipe)); usbd_status usbd_new_device __P((device_ptr_t parent, usbd_bus_handle bus, int depth, @@ -217,13 +229,13 @@ usbd_status usbd_fill_iface_data __P((usbd_device_handle dev, int i, int a)); void usb_free_device __P((usbd_device_handle)); -usbd_status usb_insert_transfer __P((usbd_request_handle reqh)); -void usb_transfer_complete __P((usbd_request_handle reqh)); +usbd_status usb_insert_transfer __P((usbd_xfer_handle xfer)); +void usb_transfer_complete __P((usbd_xfer_handle xfer)); void usb_disconnect_port __P((struct usbd_port *up, device_ptr_t)); /* Routines from usb.c */ -int usb_bus_count __P((void)); void usb_needs_explore __P((usbd_bus_handle)); +void usb_schedsoftintr __P((struct usbd_bus *)); #ifdef DIAGNOSTIC #define SPLUSBCHECK \ @@ -231,6 +243,7 @@ void usb_needs_explore __P((usbd_bus_handle)); extern int cold; \ if (!cold && _s != _su) printf("SPLUSBCHECK failed 0x%x!=0x%x, %s:%d\n", \ _s, _su, __FILE__, __LINE__); \ + splx(_s); \ } while (0) #else #define SPLUSBCHECK |