diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/usb.h | 137 | ||||
-rw-r--r-- | include/linux/usb/Kbuild | 1 | ||||
-rw-r--r-- | include/linux/usb/atmel_usba_udc.h | 2 | ||||
-rw-r--r-- | include/linux/usb/audio.h | 6 | ||||
-rw-r--r-- | include/linux/usb/cdc.h | 94 | ||||
-rw-r--r-- | include/linux/usb/ch11.h | 167 | ||||
-rw-r--r-- | include/linux/usb/ch9.h | 16 | ||||
-rw-r--r-- | include/linux/usb/composite.h | 1 | ||||
-rw-r--r-- | include/linux/usb/ehci_def.h | 6 | ||||
-rw-r--r-- | include/linux/usb/functionfs.h | 199 | ||||
-rw-r--r-- | include/linux/usb/g_hid.h | 32 | ||||
-rw-r--r-- | include/linux/usb/gadget.h | 6 | ||||
-rw-r--r-- | include/linux/usb/gadgetfs.h | 2 | ||||
-rw-r--r-- | include/linux/usb/hcd.h | 625 | ||||
-rw-r--r-- | include/linux/usb/langwell_udc.h | 2 | ||||
-rw-r--r-- | include/linux/usb/musb.h | 40 | ||||
-rw-r--r-- | include/linux/usb/ncm.h | 114 | ||||
-rw-r--r-- | include/linux/usb/net2280.h | 6 | ||||
-rw-r--r-- | include/linux/usb/quirks.h | 4 | ||||
-rw-r--r-- | include/linux/usb/rndis_host.h | 66 | ||||
-rw-r--r-- | include/linux/usb/serial.h | 36 | ||||
-rw-r--r-- | include/linux/usb/ulpi.h | 140 | ||||
-rw-r--r-- | include/linux/usb/usbnet.h | 40 | ||||
-rw-r--r-- | include/linux/usb/wusb-wa.h | 2 | ||||
-rw-r--r-- | include/linux/wait.h | 149 |
25 files changed, 1741 insertions, 152 deletions
diff --git a/include/linux/usb.h b/include/linux/usb.h index 739f1fd1cc15..d5922a877994 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -45,27 +45,14 @@ struct wusb_dev; | |||
45 | 45 | ||
46 | struct ep_device; | 46 | struct ep_device; |
47 | 47 | ||
48 | /* For SS devices */ | ||
49 | /** | ||
50 | * struct usb_host_ss_ep_comp - Valid for SuperSpeed devices only | ||
51 | * @desc: endpoint companion descriptor, wMaxPacketSize in native byteorder | ||
52 | * @extra: descriptors following this endpoint companion descriptor | ||
53 | * @extralen: how many bytes of "extra" are valid | ||
54 | */ | ||
55 | struct usb_host_ss_ep_comp { | ||
56 | struct usb_ss_ep_comp_descriptor desc; | ||
57 | unsigned char *extra; /* Extra descriptors */ | ||
58 | int extralen; | ||
59 | }; | ||
60 | |||
61 | /** | 48 | /** |
62 | * struct usb_host_endpoint - host-side endpoint descriptor and queue | 49 | * struct usb_host_endpoint - host-side endpoint descriptor and queue |
63 | * @desc: descriptor for this endpoint, wMaxPacketSize in native byteorder | 50 | * @desc: descriptor for this endpoint, wMaxPacketSize in native byteorder |
51 | * @ss_ep_comp: SuperSpeed companion descriptor for this endpoint | ||
64 | * @urb_list: urbs queued to this endpoint; maintained by usbcore | 52 | * @urb_list: urbs queued to this endpoint; maintained by usbcore |
65 | * @hcpriv: for use by HCD; typically holds hardware dma queue head (QH) | 53 | * @hcpriv: for use by HCD; typically holds hardware dma queue head (QH) |
66 | * with one or more transfer descriptors (TDs) per urb | 54 | * with one or more transfer descriptors (TDs) per urb |
67 | * @ep_dev: ep_device for sysfs info | 55 | * @ep_dev: ep_device for sysfs info |
68 | * @ss_ep_comp: companion descriptor information for this endpoint | ||
69 | * @extra: descriptors following this endpoint in the configuration | 56 | * @extra: descriptors following this endpoint in the configuration |
70 | * @extralen: how many bytes of "extra" are valid | 57 | * @extralen: how many bytes of "extra" are valid |
71 | * @enabled: URBs may be submitted to this endpoint | 58 | * @enabled: URBs may be submitted to this endpoint |
@@ -74,11 +61,11 @@ struct usb_host_ss_ep_comp { | |||
74 | * descriptor within an active interface in a given USB configuration. | 61 | * descriptor within an active interface in a given USB configuration. |
75 | */ | 62 | */ |
76 | struct usb_host_endpoint { | 63 | struct usb_host_endpoint { |
77 | struct usb_endpoint_descriptor desc; | 64 | struct usb_endpoint_descriptor desc; |
65 | struct usb_ss_ep_comp_descriptor ss_ep_comp; | ||
78 | struct list_head urb_list; | 66 | struct list_head urb_list; |
79 | void *hcpriv; | 67 | void *hcpriv; |
80 | struct ep_device *ep_dev; /* For sysfs info */ | 68 | struct ep_device *ep_dev; /* For sysfs info */ |
81 | struct usb_host_ss_ep_comp *ss_ep_comp; /* For SS devices */ | ||
82 | 69 | ||
83 | unsigned char *extra; /* Extra descriptors */ | 70 | unsigned char *extra; /* Extra descriptors */ |
84 | int extralen; | 71 | int extralen; |
@@ -109,8 +96,8 @@ enum usb_interface_condition { | |||
109 | /** | 96 | /** |
110 | * struct usb_interface - what usb device drivers talk to | 97 | * struct usb_interface - what usb device drivers talk to |
111 | * @altsetting: array of interface structures, one for each alternate | 98 | * @altsetting: array of interface structures, one for each alternate |
112 | * setting that may be selected. Each one includes a set of | 99 | * setting that may be selected. Each one includes a set of |
113 | * endpoint configurations. They will be in no particular order. | 100 | * endpoint configurations. They will be in no particular order. |
114 | * @cur_altsetting: the current altsetting. | 101 | * @cur_altsetting: the current altsetting. |
115 | * @num_altsetting: number of altsettings defined. | 102 | * @num_altsetting: number of altsettings defined. |
116 | * @intf_assoc: interface association descriptor | 103 | * @intf_assoc: interface association descriptor |
@@ -197,8 +184,6 @@ struct usb_interface { | |||
197 | struct work_struct reset_ws; /* for resets in atomic context */ | 184 | struct work_struct reset_ws; /* for resets in atomic context */ |
198 | }; | 185 | }; |
199 | #define to_usb_interface(d) container_of(d, struct usb_interface, dev) | 186 | #define to_usb_interface(d) container_of(d, struct usb_interface, dev) |
200 | #define interface_to_usbdev(intf) \ | ||
201 | container_of(intf->dev.parent, struct usb_device, dev) | ||
202 | 187 | ||
203 | static inline void *usb_get_intfdata(struct usb_interface *intf) | 188 | static inline void *usb_get_intfdata(struct usb_interface *intf) |
204 | { | 189 | { |
@@ -215,7 +200,7 @@ void usb_put_intf(struct usb_interface *intf); | |||
215 | 200 | ||
216 | /* this maximum is arbitrary */ | 201 | /* this maximum is arbitrary */ |
217 | #define USB_MAXINTERFACES 32 | 202 | #define USB_MAXINTERFACES 32 |
218 | #define USB_MAXIADS USB_MAXINTERFACES/2 | 203 | #define USB_MAXIADS (USB_MAXINTERFACES/2) |
219 | 204 | ||
220 | /** | 205 | /** |
221 | * struct usb_interface_cache - long-term representation of a device interface | 206 | * struct usb_interface_cache - long-term representation of a device interface |
@@ -425,7 +410,6 @@ struct usb_tt; | |||
425 | * @connect_time: time device was first connected | 410 | * @connect_time: time device was first connected |
426 | * @do_remote_wakeup: remote wakeup should be enabled | 411 | * @do_remote_wakeup: remote wakeup should be enabled |
427 | * @reset_resume: needs reset instead of resume | 412 | * @reset_resume: needs reset instead of resume |
428 | * @autosuspend_disabled: autosuspend disabled by the user | ||
429 | * @wusb_dev: if this is a Wireless USB device, link to the WUSB | 413 | * @wusb_dev: if this is a Wireless USB device, link to the WUSB |
430 | * specific data for the device. | 414 | * specific data for the device. |
431 | * @slot_id: Slot ID assigned by xHCI | 415 | * @slot_id: Slot ID assigned by xHCI |
@@ -436,7 +420,7 @@ struct usb_tt; | |||
436 | */ | 420 | */ |
437 | struct usb_device { | 421 | struct usb_device { |
438 | int devnum; | 422 | int devnum; |
439 | char devpath [16]; | 423 | char devpath[16]; |
440 | u32 route; | 424 | u32 route; |
441 | enum usb_device_state state; | 425 | enum usb_device_state state; |
442 | enum usb_device_speed speed; | 426 | enum usb_device_speed speed; |
@@ -469,7 +453,7 @@ struct usb_device { | |||
469 | unsigned persist_enabled:1; | 453 | unsigned persist_enabled:1; |
470 | unsigned have_langid:1; | 454 | unsigned have_langid:1; |
471 | unsigned authorized:1; | 455 | unsigned authorized:1; |
472 | unsigned authenticated:1; | 456 | unsigned authenticated:1; |
473 | unsigned wusb:1; | 457 | unsigned wusb:1; |
474 | int string_langid; | 458 | int string_langid; |
475 | 459 | ||
@@ -501,13 +485,17 @@ struct usb_device { | |||
501 | 485 | ||
502 | unsigned do_remote_wakeup:1; | 486 | unsigned do_remote_wakeup:1; |
503 | unsigned reset_resume:1; | 487 | unsigned reset_resume:1; |
504 | unsigned autosuspend_disabled:1; | ||
505 | #endif | 488 | #endif |
506 | struct wusb_dev *wusb_dev; | 489 | struct wusb_dev *wusb_dev; |
507 | int slot_id; | 490 | int slot_id; |
508 | }; | 491 | }; |
509 | #define to_usb_device(d) container_of(d, struct usb_device, dev) | 492 | #define to_usb_device(d) container_of(d, struct usb_device, dev) |
510 | 493 | ||
494 | static inline struct usb_device *interface_to_usbdev(struct usb_interface *intf) | ||
495 | { | ||
496 | return to_usb_device(intf->dev.parent); | ||
497 | } | ||
498 | |||
511 | extern struct usb_device *usb_get_dev(struct usb_device *dev); | 499 | extern struct usb_device *usb_get_dev(struct usb_device *dev); |
512 | extern void usb_put_dev(struct usb_device *dev); | 500 | extern void usb_put_dev(struct usb_device *dev); |
513 | 501 | ||
@@ -522,12 +510,11 @@ extern int usb_lock_device_for_reset(struct usb_device *udev, | |||
522 | extern int usb_reset_device(struct usb_device *dev); | 510 | extern int usb_reset_device(struct usb_device *dev); |
523 | extern void usb_queue_reset_device(struct usb_interface *dev); | 511 | extern void usb_queue_reset_device(struct usb_interface *dev); |
524 | 512 | ||
525 | extern struct usb_device *usb_find_device(u16 vendor_id, u16 product_id); | ||
526 | 513 | ||
527 | /* USB autosuspend and autoresume */ | 514 | /* USB autosuspend and autoresume */ |
528 | #ifdef CONFIG_USB_SUSPEND | 515 | #ifdef CONFIG_USB_SUSPEND |
529 | extern int usb_enable_autosuspend(struct usb_device *udev); | 516 | extern void usb_enable_autosuspend(struct usb_device *udev); |
530 | extern int usb_disable_autosuspend(struct usb_device *udev); | 517 | extern void usb_disable_autosuspend(struct usb_device *udev); |
531 | 518 | ||
532 | extern int usb_autopm_get_interface(struct usb_interface *intf); | 519 | extern int usb_autopm_get_interface(struct usb_interface *intf); |
533 | extern void usb_autopm_put_interface(struct usb_interface *intf); | 520 | extern void usb_autopm_put_interface(struct usb_interface *intf); |
@@ -572,6 +559,16 @@ static inline void usb_mark_last_busy(struct usb_device *udev) | |||
572 | /* for drivers using iso endpoints */ | 559 | /* for drivers using iso endpoints */ |
573 | extern int usb_get_current_frame_number(struct usb_device *usb_dev); | 560 | extern int usb_get_current_frame_number(struct usb_device *usb_dev); |
574 | 561 | ||
562 | /* Sets up a group of bulk endpoints to support multiple stream IDs. */ | ||
563 | extern int usb_alloc_streams(struct usb_interface *interface, | ||
564 | struct usb_host_endpoint **eps, unsigned int num_eps, | ||
565 | unsigned int num_streams, gfp_t mem_flags); | ||
566 | |||
567 | /* Reverts a group of bulk endpoints back to not using stream IDs. */ | ||
568 | extern void usb_free_streams(struct usb_interface *interface, | ||
569 | struct usb_host_endpoint **eps, unsigned int num_eps, | ||
570 | gfp_t mem_flags); | ||
571 | |||
575 | /* used these for multi-interface device registration */ | 572 | /* used these for multi-interface device registration */ |
576 | extern int usb_driver_claim_interface(struct usb_driver *driver, | 573 | extern int usb_driver_claim_interface(struct usb_driver *driver, |
577 | struct usb_interface *iface, void *priv); | 574 | struct usb_interface *iface, void *priv); |
@@ -667,7 +664,7 @@ static inline int usb_make_path(struct usb_device *dev, char *buf, size_t size) | |||
667 | * This macro is used to create a struct usb_device_id that matches a | 664 | * This macro is used to create a struct usb_device_id that matches a |
668 | * specific device. | 665 | * specific device. |
669 | */ | 666 | */ |
670 | #define USB_DEVICE(vend,prod) \ | 667 | #define USB_DEVICE(vend, prod) \ |
671 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE, \ | 668 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE, \ |
672 | .idVendor = (vend), \ | 669 | .idVendor = (vend), \ |
673 | .idProduct = (prod) | 670 | .idProduct = (prod) |
@@ -958,17 +955,25 @@ extern int usb_disabled(void); | |||
958 | #define URB_ISO_ASAP 0x0002 /* iso-only, urb->start_frame | 955 | #define URB_ISO_ASAP 0x0002 /* iso-only, urb->start_frame |
959 | * ignored */ | 956 | * ignored */ |
960 | #define URB_NO_TRANSFER_DMA_MAP 0x0004 /* urb->transfer_dma valid on submit */ | 957 | #define URB_NO_TRANSFER_DMA_MAP 0x0004 /* urb->transfer_dma valid on submit */ |
961 | #define URB_NO_SETUP_DMA_MAP 0x0008 /* urb->setup_dma valid on submit */ | ||
962 | #define URB_NO_FSBR 0x0020 /* UHCI-specific */ | 958 | #define URB_NO_FSBR 0x0020 /* UHCI-specific */ |
963 | #define URB_ZERO_PACKET 0x0040 /* Finish bulk OUT with short packet */ | 959 | #define URB_ZERO_PACKET 0x0040 /* Finish bulk OUT with short packet */ |
964 | #define URB_NO_INTERRUPT 0x0080 /* HINT: no non-error interrupt | 960 | #define URB_NO_INTERRUPT 0x0080 /* HINT: no non-error interrupt |
965 | * needed */ | 961 | * needed */ |
966 | #define URB_FREE_BUFFER 0x0100 /* Free transfer buffer with the URB */ | 962 | #define URB_FREE_BUFFER 0x0100 /* Free transfer buffer with the URB */ |
967 | 963 | ||
964 | /* The following flags are used internally by usbcore and HCDs */ | ||
968 | #define URB_DIR_IN 0x0200 /* Transfer from device to host */ | 965 | #define URB_DIR_IN 0x0200 /* Transfer from device to host */ |
969 | #define URB_DIR_OUT 0 | 966 | #define URB_DIR_OUT 0 |
970 | #define URB_DIR_MASK URB_DIR_IN | 967 | #define URB_DIR_MASK URB_DIR_IN |
971 | 968 | ||
969 | #define URB_DMA_MAP_SINGLE 0x00010000 /* Non-scatter-gather mapping */ | ||
970 | #define URB_DMA_MAP_PAGE 0x00020000 /* HCD-unsupported S-G */ | ||
971 | #define URB_DMA_MAP_SG 0x00040000 /* HCD-supported S-G */ | ||
972 | #define URB_MAP_LOCAL 0x00080000 /* HCD-local-memory mapping */ | ||
973 | #define URB_SETUP_MAP_SINGLE 0x00100000 /* Setup packet DMA mapped */ | ||
974 | #define URB_SETUP_MAP_LOCAL 0x00200000 /* HCD-local setup packet */ | ||
975 | #define URB_DMA_SG_COMBINED 0x00400000 /* S-G entries were combined */ | ||
976 | |||
972 | struct usb_iso_packet_descriptor { | 977 | struct usb_iso_packet_descriptor { |
973 | unsigned int offset; | 978 | unsigned int offset; |
974 | unsigned int length; /* expected length */ | 979 | unsigned int length; /* expected length */ |
@@ -1045,12 +1050,8 @@ typedef void (*usb_complete_t)(struct urb *); | |||
1045 | * @setup_packet: Only used for control transfers, this points to eight bytes | 1050 | * @setup_packet: Only used for control transfers, this points to eight bytes |
1046 | * of setup data. Control transfers always start by sending this data | 1051 | * of setup data. Control transfers always start by sending this data |
1047 | * to the device. Then transfer_buffer is read or written, if needed. | 1052 | * to the device. Then transfer_buffer is read or written, if needed. |
1048 | * @setup_dma: For control transfers with URB_NO_SETUP_DMA_MAP set, the | 1053 | * @setup_dma: DMA pointer for the setup packet. The caller must not use |
1049 | * device driver has provided this DMA address for the setup packet. | 1054 | * this field; setup_packet must point to a valid buffer. |
1050 | * The host controller driver should use this in preference to | ||
1051 | * setup_packet, but the HCD may chose to ignore the address if it must | ||
1052 | * copy the setup packet into internal structures. Therefore, setup_packet | ||
1053 | * must always point to a valid buffer. | ||
1054 | * @start_frame: Returns the initial frame for isochronous transfers. | 1055 | * @start_frame: Returns the initial frame for isochronous transfers. |
1055 | * @number_of_packets: Lists the number of ISO transfer buffers. | 1056 | * @number_of_packets: Lists the number of ISO transfer buffers. |
1056 | * @interval: Specifies the polling interval for interrupt or isochronous | 1057 | * @interval: Specifies the polling interval for interrupt or isochronous |
@@ -1082,13 +1083,14 @@ typedef void (*usb_complete_t)(struct urb *); | |||
1082 | * bounce buffer or talking to an IOMMU), | 1083 | * bounce buffer or talking to an IOMMU), |
1083 | * although they're cheap on commodity x86 and ppc hardware. | 1084 | * although they're cheap on commodity x86 and ppc hardware. |
1084 | * | 1085 | * |
1085 | * Alternatively, drivers may pass the URB_NO_xxx_DMA_MAP transfer flags, | 1086 | * Alternatively, drivers may pass the URB_NO_TRANSFER_DMA_MAP transfer flag, |
1086 | * which tell the host controller driver that no such mapping is needed since | 1087 | * which tells the host controller driver that no such mapping is needed for |
1088 | * the transfer_buffer since | ||
1087 | * the device driver is DMA-aware. For example, a device driver might | 1089 | * the device driver is DMA-aware. For example, a device driver might |
1088 | * allocate a DMA buffer with usb_alloc_coherent() or call usb_buffer_map(). | 1090 | * allocate a DMA buffer with usb_alloc_coherent() or call usb_buffer_map(). |
1089 | * When these transfer flags are provided, host controller drivers will | 1091 | * When this transfer flag is provided, host controller drivers will |
1090 | * attempt to use the dma addresses found in the transfer_dma and/or | 1092 | * attempt to use the dma address found in the transfer_dma |
1091 | * setup_dma fields rather than determining a dma address themselves. | 1093 | * field rather than determining a dma address themselves. |
1092 | * | 1094 | * |
1093 | * Note that transfer_buffer must still be set if the controller | 1095 | * Note that transfer_buffer must still be set if the controller |
1094 | * does not support DMA (as indicated by bus.uses_dma) and when talking | 1096 | * does not support DMA (as indicated by bus.uses_dma) and when talking |
@@ -1111,11 +1113,9 @@ typedef void (*usb_complete_t)(struct urb *); | |||
1111 | * should always terminate with a short packet, even if it means adding an | 1113 | * should always terminate with a short packet, even if it means adding an |
1112 | * extra zero length packet. | 1114 | * extra zero length packet. |
1113 | * | 1115 | * |
1114 | * Control URBs must provide a setup_packet. The setup_packet and | 1116 | * Control URBs must provide a valid pointer in the setup_packet field. |
1115 | * transfer_buffer may each be mapped for DMA or not, independently of | 1117 | * Unlike the transfer_buffer, the setup_packet may not be mapped for DMA |
1116 | * the other. The transfer_flags bits URB_NO_TRANSFER_DMA_MAP and | 1118 | * beforehand. |
1117 | * URB_NO_SETUP_DMA_MAP indicate which buffers have already been mapped. | ||
1118 | * URB_NO_SETUP_DMA_MAP is ignored for non-control URBs. | ||
1119 | * | 1119 | * |
1120 | * Interrupt URBs must provide an interval, saying how often (in milliseconds | 1120 | * Interrupt URBs must provide an interval, saying how often (in milliseconds |
1121 | * or, for highspeed devices, 125 microsecond units) | 1121 | * or, for highspeed devices, 125 microsecond units) |
@@ -1186,14 +1186,15 @@ struct urb { | |||
1186 | * current owner */ | 1186 | * current owner */ |
1187 | struct list_head anchor_list; /* the URB may be anchored */ | 1187 | struct list_head anchor_list; /* the URB may be anchored */ |
1188 | struct usb_anchor *anchor; | 1188 | struct usb_anchor *anchor; |
1189 | struct usb_device *dev; /* (in) pointer to associated device */ | 1189 | struct usb_device *dev; /* (in) pointer to associated device */ |
1190 | struct usb_host_endpoint *ep; /* (internal) pointer to endpoint */ | 1190 | struct usb_host_endpoint *ep; /* (internal) pointer to endpoint */ |
1191 | unsigned int pipe; /* (in) pipe information */ | 1191 | unsigned int pipe; /* (in) pipe information */ |
1192 | unsigned int stream_id; /* (in) stream ID */ | ||
1192 | int status; /* (return) non-ISO status */ | 1193 | int status; /* (return) non-ISO status */ |
1193 | unsigned int transfer_flags; /* (in) URB_SHORT_NOT_OK | ...*/ | 1194 | unsigned int transfer_flags; /* (in) URB_SHORT_NOT_OK | ...*/ |
1194 | void *transfer_buffer; /* (in) associated data buffer */ | 1195 | void *transfer_buffer; /* (in) associated data buffer */ |
1195 | dma_addr_t transfer_dma; /* (in) dma addr for transfer_buffer */ | 1196 | dma_addr_t transfer_dma; /* (in) dma addr for transfer_buffer */ |
1196 | struct usb_sg_request *sg; /* (in) scatter gather buffer list */ | 1197 | struct scatterlist *sg; /* (in) scatter gather buffer list */ |
1197 | int num_sgs; /* (in) number of entries in the sg list */ | 1198 | int num_sgs; /* (in) number of entries in the sg list */ |
1198 | u32 transfer_buffer_length; /* (in) data buffer length */ | 1199 | u32 transfer_buffer_length; /* (in) data buffer length */ |
1199 | u32 actual_length; /* (return) actual transfer length */ | 1200 | u32 actual_length; /* (return) actual transfer length */ |
@@ -1371,18 +1372,6 @@ void *usb_alloc_coherent(struct usb_device *dev, size_t size, | |||
1371 | void usb_free_coherent(struct usb_device *dev, size_t size, | 1372 | void usb_free_coherent(struct usb_device *dev, size_t size, |
1372 | void *addr, dma_addr_t dma); | 1373 | void *addr, dma_addr_t dma); |
1373 | 1374 | ||
1374 | /* Compatible macros while we switch over */ | ||
1375 | static inline void *usb_buffer_alloc(struct usb_device *dev, size_t size, | ||
1376 | gfp_t mem_flags, dma_addr_t *dma) | ||
1377 | { | ||
1378 | return usb_alloc_coherent(dev, size, mem_flags, dma); | ||
1379 | } | ||
1380 | static inline void usb_buffer_free(struct usb_device *dev, size_t size, | ||
1381 | void *addr, dma_addr_t dma) | ||
1382 | { | ||
1383 | return usb_free_coherent(dev, size, addr, dma); | ||
1384 | } | ||
1385 | |||
1386 | #if 0 | 1375 | #if 0 |
1387 | struct urb *usb_buffer_map(struct urb *urb); | 1376 | struct urb *usb_buffer_map(struct urb *urb); |
1388 | void usb_buffer_dmasync(struct urb *urb); | 1377 | void usb_buffer_dmasync(struct urb *urb); |
@@ -1467,8 +1456,6 @@ struct usb_sg_request { | |||
1467 | 1456 | ||
1468 | struct usb_device *dev; | 1457 | struct usb_device *dev; |
1469 | int pipe; | 1458 | int pipe; |
1470 | struct scatterlist *sg; | ||
1471 | int nents; | ||
1472 | 1459 | ||
1473 | int entries; | 1460 | int entries; |
1474 | struct urb **urbs; | 1461 | struct urb **urbs; |
@@ -1536,23 +1523,31 @@ static inline unsigned int __create_pipe(struct usb_device *dev, | |||
1536 | } | 1523 | } |
1537 | 1524 | ||
1538 | /* Create various pipes... */ | 1525 | /* Create various pipes... */ |
1539 | #define usb_sndctrlpipe(dev,endpoint) \ | 1526 | #define usb_sndctrlpipe(dev, endpoint) \ |
1540 | ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint)) | 1527 | ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint)) |
1541 | #define usb_rcvctrlpipe(dev,endpoint) \ | 1528 | #define usb_rcvctrlpipe(dev, endpoint) \ |
1542 | ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) | 1529 | ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) |
1543 | #define usb_sndisocpipe(dev,endpoint) \ | 1530 | #define usb_sndisocpipe(dev, endpoint) \ |
1544 | ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint)) | 1531 | ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint)) |
1545 | #define usb_rcvisocpipe(dev,endpoint) \ | 1532 | #define usb_rcvisocpipe(dev, endpoint) \ |
1546 | ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) | 1533 | ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) |
1547 | #define usb_sndbulkpipe(dev,endpoint) \ | 1534 | #define usb_sndbulkpipe(dev, endpoint) \ |
1548 | ((PIPE_BULK << 30) | __create_pipe(dev, endpoint)) | 1535 | ((PIPE_BULK << 30) | __create_pipe(dev, endpoint)) |
1549 | #define usb_rcvbulkpipe(dev,endpoint) \ | 1536 | #define usb_rcvbulkpipe(dev, endpoint) \ |
1550 | ((PIPE_BULK << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) | 1537 | ((PIPE_BULK << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) |
1551 | #define usb_sndintpipe(dev,endpoint) \ | 1538 | #define usb_sndintpipe(dev, endpoint) \ |
1552 | ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint)) | 1539 | ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint)) |
1553 | #define usb_rcvintpipe(dev,endpoint) \ | 1540 | #define usb_rcvintpipe(dev, endpoint) \ |
1554 | ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) | 1541 | ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) |
1555 | 1542 | ||
1543 | static inline struct usb_host_endpoint * | ||
1544 | usb_pipe_endpoint(struct usb_device *dev, unsigned int pipe) | ||
1545 | { | ||
1546 | struct usb_host_endpoint **eps; | ||
1547 | eps = usb_pipein(pipe) ? dev->ep_in : dev->ep_out; | ||
1548 | return eps[usb_pipeendpoint(pipe)]; | ||
1549 | } | ||
1550 | |||
1556 | /*-------------------------------------------------------------------------*/ | 1551 | /*-------------------------------------------------------------------------*/ |
1557 | 1552 | ||
1558 | static inline __u16 | 1553 | static inline __u16 |
diff --git a/include/linux/usb/Kbuild b/include/linux/usb/Kbuild index 29fd73b0bffc..51410e0200cf 100644 --- a/include/linux/usb/Kbuild +++ b/include/linux/usb/Kbuild | |||
@@ -1,6 +1,7 @@ | |||
1 | header-y += audio.h | 1 | header-y += audio.h |
2 | header-y += cdc.h | 2 | header-y += cdc.h |
3 | header-y += ch9.h | 3 | header-y += ch9.h |
4 | header-y += ch11.h | ||
4 | header-y += gadgetfs.h | 5 | header-y += gadgetfs.h |
5 | header-y += midi.h | 6 | header-y += midi.h |
6 | header-y += g_printer.h | 7 | header-y += g_printer.h |
diff --git a/include/linux/usb/atmel_usba_udc.h b/include/linux/usb/atmel_usba_udc.h index baf41c8616e9..ba99af275a31 100644 --- a/include/linux/usb/atmel_usba_udc.h +++ b/include/linux/usb/atmel_usba_udc.h | |||
@@ -15,7 +15,7 @@ struct usba_ep_data { | |||
15 | 15 | ||
16 | struct usba_platform_data { | 16 | struct usba_platform_data { |
17 | int vbus_pin; | 17 | int vbus_pin; |
18 | int vbus_pin_inverted; | 18 | int vbus_pin_inverted; |
19 | int num_ep; | 19 | int num_ep; |
20 | struct usba_ep_data ep[0]; | 20 | struct usba_ep_data ep[0]; |
21 | }; | 21 | }; |
diff --git a/include/linux/usb/audio.h b/include/linux/usb/audio.h index c0ef18dc2da7..5d646c388752 100644 --- a/include/linux/usb/audio.h +++ b/include/linux/usb/audio.h | |||
@@ -101,7 +101,7 @@ struct uac_ac_header_descriptor_v1 { | |||
101 | #define UAC_DT_AC_HEADER_SIZE(n) (8 + (n)) | 101 | #define UAC_DT_AC_HEADER_SIZE(n) (8 + (n)) |
102 | 102 | ||
103 | /* As above, but more useful for defining your own descriptors: */ | 103 | /* As above, but more useful for defining your own descriptors: */ |
104 | #define DECLARE_UAC_AC_HEADER_DESCRIPTOR(n) \ | 104 | #define DECLARE_UAC_AC_HEADER_DESCRIPTOR(n) \ |
105 | struct uac_ac_header_descriptor_v1_##n { \ | 105 | struct uac_ac_header_descriptor_v1_##n { \ |
106 | __u8 bLength; \ | 106 | __u8 bLength; \ |
107 | __u8 bDescriptorType; \ | 107 | __u8 bDescriptorType; \ |
@@ -169,7 +169,7 @@ struct uac_output_terminal_descriptor_v1 { | |||
169 | #define UAC_DT_FEATURE_UNIT_SIZE(ch) (7 + ((ch) + 1) * 2) | 169 | #define UAC_DT_FEATURE_UNIT_SIZE(ch) (7 + ((ch) + 1) * 2) |
170 | 170 | ||
171 | /* As above, but more useful for defining your own descriptors: */ | 171 | /* As above, but more useful for defining your own descriptors: */ |
172 | #define DECLARE_UAC_FEATURE_UNIT_DESCRIPTOR(ch) \ | 172 | #define DECLARE_UAC_FEATURE_UNIT_DESCRIPTOR(ch) \ |
173 | struct uac_feature_unit_descriptor_##ch { \ | 173 | struct uac_feature_unit_descriptor_##ch { \ |
174 | __u8 bLength; \ | 174 | __u8 bLength; \ |
175 | __u8 bDescriptorType; \ | 175 | __u8 bDescriptorType; \ |
@@ -378,7 +378,7 @@ struct uac_format_type_i_discrete_descriptor { | |||
378 | __u8 tSamFreq[][3]; | 378 | __u8 tSamFreq[][3]; |
379 | } __attribute__ ((packed)); | 379 | } __attribute__ ((packed)); |
380 | 380 | ||
381 | #define DECLARE_UAC_FORMAT_TYPE_I_DISCRETE_DESC(n) \ | 381 | #define DECLARE_UAC_FORMAT_TYPE_I_DISCRETE_DESC(n) \ |
382 | struct uac_format_type_i_discrete_descriptor_##n { \ | 382 | struct uac_format_type_i_discrete_descriptor_##n { \ |
383 | __u8 bLength; \ | 383 | __u8 bLength; \ |
384 | __u8 bDescriptorType; \ | 384 | __u8 bDescriptorType; \ |
diff --git a/include/linux/usb/cdc.h b/include/linux/usb/cdc.h index c24124a42ce5..c117a68d04a7 100644 --- a/include/linux/usb/cdc.h +++ b/include/linux/usb/cdc.h | |||
@@ -18,6 +18,7 @@ | |||
18 | #define USB_CDC_SUBCLASS_MDLM 0x0a | 18 | #define USB_CDC_SUBCLASS_MDLM 0x0a |
19 | #define USB_CDC_SUBCLASS_OBEX 0x0b | 19 | #define USB_CDC_SUBCLASS_OBEX 0x0b |
20 | #define USB_CDC_SUBCLASS_EEM 0x0c | 20 | #define USB_CDC_SUBCLASS_EEM 0x0c |
21 | #define USB_CDC_SUBCLASS_NCM 0x0d | ||
21 | 22 | ||
22 | #define USB_CDC_PROTO_NONE 0 | 23 | #define USB_CDC_PROTO_NONE 0 |
23 | 24 | ||
@@ -49,6 +50,7 @@ | |||
49 | #define USB_CDC_MDLM_DETAIL_TYPE 0x13 /* mdlm_detail_desc */ | 50 | #define USB_CDC_MDLM_DETAIL_TYPE 0x13 /* mdlm_detail_desc */ |
50 | #define USB_CDC_DMM_TYPE 0x14 | 51 | #define USB_CDC_DMM_TYPE 0x14 |
51 | #define USB_CDC_OBEX_TYPE 0x15 | 52 | #define USB_CDC_OBEX_TYPE 0x15 |
53 | #define USB_CDC_NCM_TYPE 0x1a | ||
52 | 54 | ||
53 | /* "Header Functional Descriptor" from CDC spec 5.2.3.1 */ | 55 | /* "Header Functional Descriptor" from CDC spec 5.2.3.1 */ |
54 | struct usb_cdc_header_desc { | 56 | struct usb_cdc_header_desc { |
@@ -174,6 +176,15 @@ struct usb_cdc_obex_desc { | |||
174 | __le16 bcdVersion; | 176 | __le16 bcdVersion; |
175 | } __attribute__ ((packed)); | 177 | } __attribute__ ((packed)); |
176 | 178 | ||
179 | /* "NCM Control Model Functional Descriptor" */ | ||
180 | struct usb_cdc_ncm_desc { | ||
181 | __u8 bLength; | ||
182 | __u8 bDescriptorType; | ||
183 | __u8 bDescriptorSubType; | ||
184 | |||
185 | __le16 bcdNcmVersion; | ||
186 | __u8 bmNetworkCapabilities; | ||
187 | } __attribute__ ((packed)); | ||
177 | /*-------------------------------------------------------------------------*/ | 188 | /*-------------------------------------------------------------------------*/ |
178 | 189 | ||
179 | /* | 190 | /* |
@@ -197,6 +208,17 @@ struct usb_cdc_obex_desc { | |||
197 | #define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER 0x42 | 208 | #define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER 0x42 |
198 | #define USB_CDC_SET_ETHERNET_PACKET_FILTER 0x43 | 209 | #define USB_CDC_SET_ETHERNET_PACKET_FILTER 0x43 |
199 | #define USB_CDC_GET_ETHERNET_STATISTIC 0x44 | 210 | #define USB_CDC_GET_ETHERNET_STATISTIC 0x44 |
211 | #define USB_CDC_GET_NTB_PARAMETERS 0x80 | ||
212 | #define USB_CDC_GET_NET_ADDRESS 0x81 | ||
213 | #define USB_CDC_SET_NET_ADDRESS 0x82 | ||
214 | #define USB_CDC_GET_NTB_FORMAT 0x83 | ||
215 | #define USB_CDC_SET_NTB_FORMAT 0x84 | ||
216 | #define USB_CDC_GET_NTB_INPUT_SIZE 0x85 | ||
217 | #define USB_CDC_SET_NTB_INPUT_SIZE 0x86 | ||
218 | #define USB_CDC_GET_MAX_DATAGRAM_SIZE 0x87 | ||
219 | #define USB_CDC_SET_MAX_DATAGRAM_SIZE 0x88 | ||
220 | #define USB_CDC_GET_CRC_MODE 0x89 | ||
221 | #define USB_CDC_SET_CRC_MODE 0x8a | ||
200 | 222 | ||
201 | /* Line Coding Structure from CDC spec 6.2.13 */ | 223 | /* Line Coding Structure from CDC spec 6.2.13 */ |
202 | struct usb_cdc_line_coding { | 224 | struct usb_cdc_line_coding { |
@@ -247,4 +269,76 @@ struct usb_cdc_notification { | |||
247 | __le16 wLength; | 269 | __le16 wLength; |
248 | } __attribute__ ((packed)); | 270 | } __attribute__ ((packed)); |
249 | 271 | ||
272 | /*-------------------------------------------------------------------------*/ | ||
273 | |||
274 | /* | ||
275 | * Class Specific structures and constants | ||
276 | * | ||
277 | * CDC NCM parameter structure, CDC NCM subclass 6.2.1 | ||
278 | * | ||
279 | */ | ||
280 | |||
281 | struct usb_cdc_ncm_ntb_parameter { | ||
282 | __le16 wLength; | ||
283 | __le16 bmNtbFormatSupported; | ||
284 | __le32 dwNtbInMaxSize; | ||
285 | __le16 wNdpInDivisor; | ||
286 | __le16 wNdpInPayloadRemainder; | ||
287 | __le16 wNdpInAlignment; | ||
288 | __le16 wPadding1; | ||
289 | __le32 dwNtbOutMaxSize; | ||
290 | __le16 wNdpOutDivisor; | ||
291 | __le16 wNdpOutPayloadRemainder; | ||
292 | __le16 wNdpOutAlignment; | ||
293 | __le16 wPadding2; | ||
294 | } __attribute__ ((packed)); | ||
295 | |||
296 | /* | ||
297 | * CDC NCM transfer headers, CDC NCM subclass 3.2 | ||
298 | */ | ||
299 | |||
300 | #define NCM_NTH16_SIGN 0x484D434E /* NCMH */ | ||
301 | #define NCM_NTH32_SIGN 0x686D636E /* ncmh */ | ||
302 | |||
303 | struct usb_cdc_ncm_nth16 { | ||
304 | __le32 dwSignature; | ||
305 | __le16 wHeaderLength; | ||
306 | __le16 wSequence; | ||
307 | __le16 wBlockLength; | ||
308 | __le16 wFpIndex; | ||
309 | } __attribute__ ((packed)); | ||
310 | |||
311 | struct usb_cdc_ncm_nth32 { | ||
312 | __le32 dwSignature; | ||
313 | __le16 wHeaderLength; | ||
314 | __le16 wSequence; | ||
315 | __le32 dwBlockLength; | ||
316 | __le32 dwFpIndex; | ||
317 | } __attribute__ ((packed)); | ||
318 | |||
319 | /* | ||
320 | * CDC NCM datagram pointers, CDC NCM subclass 3.3 | ||
321 | */ | ||
322 | |||
323 | #define NCM_NDP16_CRC_SIGN 0x314D434E /* NCM1 */ | ||
324 | #define NCM_NDP16_NOCRC_SIGN 0x304D434E /* NCM0 */ | ||
325 | #define NCM_NDP32_CRC_SIGN 0x316D636E /* ncm1 */ | ||
326 | #define NCM_NDP32_NOCRC_SIGN 0x306D636E /* ncm0 */ | ||
327 | |||
328 | struct usb_cdc_ncm_ndp16 { | ||
329 | __le32 dwSignature; | ||
330 | __le16 wLength; | ||
331 | __le16 wNextFpIndex; | ||
332 | __u8 data[0]; | ||
333 | } __attribute__ ((packed)); | ||
334 | |||
335 | struct usb_cdc_ncm_ndp32 { | ||
336 | __le32 dwSignature; | ||
337 | __le16 wLength; | ||
338 | __le16 wReserved6; | ||
339 | __le32 dwNextFpIndex; | ||
340 | __le32 dwReserved12; | ||
341 | __u8 data[0]; | ||
342 | } __attribute__ ((packed)); | ||
343 | |||
250 | #endif /* __LINUX_USB_CDC_H */ | 344 | #endif /* __LINUX_USB_CDC_H */ |
diff --git a/include/linux/usb/ch11.h b/include/linux/usb/ch11.h new file mode 100644 index 000000000000..119194c85d10 --- /dev/null +++ b/include/linux/usb/ch11.h | |||
@@ -0,0 +1,167 @@ | |||
1 | /* | ||
2 | * This file holds Hub protocol constants and data structures that are | ||
3 | * defined in chapter 11 (Hub Specification) of the USB 2.0 specification. | ||
4 | * | ||
5 | * It is used/shared between the USB core, the HCDs and couple of other USB | ||
6 | * drivers. | ||
7 | */ | ||
8 | |||
9 | #ifndef __LINUX_CH11_H | ||
10 | #define __LINUX_CH11_H | ||
11 | |||
12 | #include <linux/types.h> /* __u8 etc */ | ||
13 | |||
14 | /* | ||
15 | * Hub request types | ||
16 | */ | ||
17 | |||
18 | #define USB_RT_HUB (USB_TYPE_CLASS | USB_RECIP_DEVICE) | ||
19 | #define USB_RT_PORT (USB_TYPE_CLASS | USB_RECIP_OTHER) | ||
20 | |||
21 | /* | ||
22 | * Hub class requests | ||
23 | * See USB 2.0 spec Table 11-16 | ||
24 | */ | ||
25 | #define HUB_CLEAR_TT_BUFFER 8 | ||
26 | #define HUB_RESET_TT 9 | ||
27 | #define HUB_GET_TT_STATE 10 | ||
28 | #define HUB_STOP_TT 11 | ||
29 | |||
30 | /* | ||
31 | * Hub Class feature numbers | ||
32 | * See USB 2.0 spec Table 11-17 | ||
33 | */ | ||
34 | #define C_HUB_LOCAL_POWER 0 | ||
35 | #define C_HUB_OVER_CURRENT 1 | ||
36 | |||
37 | /* | ||
38 | * Port feature numbers | ||
39 | * See USB 2.0 spec Table 11-17 | ||
40 | */ | ||
41 | #define USB_PORT_FEAT_CONNECTION 0 | ||
42 | #define USB_PORT_FEAT_ENABLE 1 | ||
43 | #define USB_PORT_FEAT_SUSPEND 2 /* L2 suspend */ | ||
44 | #define USB_PORT_FEAT_OVER_CURRENT 3 | ||
45 | #define USB_PORT_FEAT_RESET 4 | ||
46 | #define USB_PORT_FEAT_L1 5 /* L1 suspend */ | ||
47 | #define USB_PORT_FEAT_POWER 8 | ||
48 | #define USB_PORT_FEAT_LOWSPEED 9 /* Should never be used */ | ||
49 | #define USB_PORT_FEAT_C_CONNECTION 16 | ||
50 | #define USB_PORT_FEAT_C_ENABLE 17 | ||
51 | #define USB_PORT_FEAT_C_SUSPEND 18 | ||
52 | #define USB_PORT_FEAT_C_OVER_CURRENT 19 | ||
53 | #define USB_PORT_FEAT_C_RESET 20 | ||
54 | #define USB_PORT_FEAT_TEST 21 | ||
55 | #define USB_PORT_FEAT_INDICATOR 22 | ||
56 | #define USB_PORT_FEAT_C_PORT_L1 23 | ||
57 | |||
58 | /* | ||
59 | * Hub Status and Hub Change results | ||
60 | * See USB 2.0 spec Table 11-19 and Table 11-20 | ||
61 | */ | ||
62 | struct usb_port_status { | ||
63 | __le16 wPortStatus; | ||
64 | __le16 wPortChange; | ||
65 | } __attribute__ ((packed)); | ||
66 | |||
67 | /* | ||
68 | * wPortStatus bit field | ||
69 | * See USB 2.0 spec Table 11-21 | ||
70 | */ | ||
71 | #define USB_PORT_STAT_CONNECTION 0x0001 | ||
72 | #define USB_PORT_STAT_ENABLE 0x0002 | ||
73 | #define USB_PORT_STAT_SUSPEND 0x0004 | ||
74 | #define USB_PORT_STAT_OVERCURRENT 0x0008 | ||
75 | #define USB_PORT_STAT_RESET 0x0010 | ||
76 | #define USB_PORT_STAT_L1 0x0020 | ||
77 | /* bits 6 to 7 are reserved */ | ||
78 | #define USB_PORT_STAT_POWER 0x0100 | ||
79 | #define USB_PORT_STAT_LOW_SPEED 0x0200 | ||
80 | #define USB_PORT_STAT_HIGH_SPEED 0x0400 | ||
81 | #define USB_PORT_STAT_TEST 0x0800 | ||
82 | #define USB_PORT_STAT_INDICATOR 0x1000 | ||
83 | /* bits 13 to 15 are reserved */ | ||
84 | #define USB_PORT_STAT_SUPER_SPEED 0x8000 /* Linux-internal */ | ||
85 | |||
86 | /* | ||
87 | * wPortChange bit field | ||
88 | * See USB 2.0 spec Table 11-22 | ||
89 | * Bits 0 to 4 shown, bits 5 to 15 are reserved | ||
90 | */ | ||
91 | #define USB_PORT_STAT_C_CONNECTION 0x0001 | ||
92 | #define USB_PORT_STAT_C_ENABLE 0x0002 | ||
93 | #define USB_PORT_STAT_C_SUSPEND 0x0004 | ||
94 | #define USB_PORT_STAT_C_OVERCURRENT 0x0008 | ||
95 | #define USB_PORT_STAT_C_RESET 0x0010 | ||
96 | #define USB_PORT_STAT_C_L1 0x0020 | ||
97 | |||
98 | /* | ||
99 | * wHubCharacteristics (masks) | ||
100 | * See USB 2.0 spec Table 11-13, offset 3 | ||
101 | */ | ||
102 | #define HUB_CHAR_LPSM 0x0003 /* D1 .. D0 */ | ||
103 | #define HUB_CHAR_COMPOUND 0x0004 /* D2 */ | ||
104 | #define HUB_CHAR_OCPM 0x0018 /* D4 .. D3 */ | ||
105 | #define HUB_CHAR_TTTT 0x0060 /* D6 .. D5 */ | ||
106 | #define HUB_CHAR_PORTIND 0x0080 /* D7 */ | ||
107 | |||
108 | struct usb_hub_status { | ||
109 | __le16 wHubStatus; | ||
110 | __le16 wHubChange; | ||
111 | } __attribute__ ((packed)); | ||
112 | |||
113 | /* | ||
114 | * Hub Status & Hub Change bit masks | ||
115 | * See USB 2.0 spec Table 11-19 and Table 11-20 | ||
116 | * Bits 0 and 1 for wHubStatus and wHubChange | ||
117 | * Bits 2 to 15 are reserved for both | ||
118 | */ | ||
119 | #define HUB_STATUS_LOCAL_POWER 0x0001 | ||
120 | #define HUB_STATUS_OVERCURRENT 0x0002 | ||
121 | #define HUB_CHANGE_LOCAL_POWER 0x0001 | ||
122 | #define HUB_CHANGE_OVERCURRENT 0x0002 | ||
123 | |||
124 | |||
125 | /* | ||
126 | * Hub descriptor | ||
127 | * See USB 2.0 spec Table 11-13 | ||
128 | */ | ||
129 | |||
130 | #define USB_DT_HUB (USB_TYPE_CLASS | 0x09) | ||
131 | #define USB_DT_HUB_NONVAR_SIZE 7 | ||
132 | |||
133 | struct usb_hub_descriptor { | ||
134 | __u8 bDescLength; | ||
135 | __u8 bDescriptorType; | ||
136 | __u8 bNbrPorts; | ||
137 | __le16 wHubCharacteristics; | ||
138 | __u8 bPwrOn2PwrGood; | ||
139 | __u8 bHubContrCurrent; | ||
140 | /* add 1 bit for hub status change; round to bytes */ | ||
141 | __u8 DeviceRemovable[(USB_MAXCHILDREN + 1 + 7) / 8]; | ||
142 | __u8 PortPwrCtrlMask[(USB_MAXCHILDREN + 1 + 7) / 8]; | ||
143 | } __attribute__ ((packed)); | ||
144 | |||
145 | |||
146 | /* port indicator status selectors, tables 11-7 and 11-25 */ | ||
147 | #define HUB_LED_AUTO 0 | ||
148 | #define HUB_LED_AMBER 1 | ||
149 | #define HUB_LED_GREEN 2 | ||
150 | #define HUB_LED_OFF 3 | ||
151 | |||
152 | enum hub_led_mode { | ||
153 | INDICATOR_AUTO = 0, | ||
154 | INDICATOR_CYCLE, | ||
155 | /* software blinks for attention: software, hardware, reserved */ | ||
156 | INDICATOR_GREEN_BLINK, INDICATOR_GREEN_BLINK_OFF, | ||
157 | INDICATOR_AMBER_BLINK, INDICATOR_AMBER_BLINK_OFF, | ||
158 | INDICATOR_ALT_BLINK, INDICATOR_ALT_BLINK_OFF | ||
159 | } __attribute__ ((packed)); | ||
160 | |||
161 | /* Transaction Translator Think Times, in bits */ | ||
162 | #define HUB_TTTT_8_BITS 0x00 | ||
163 | #define HUB_TTTT_16_BITS 0x20 | ||
164 | #define HUB_TTTT_24_BITS 0x40 | ||
165 | #define HUB_TTTT_32_BITS 0x60 | ||
166 | |||
167 | #endif /* __LINUX_CH11_H */ | ||
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h index e58369ff8168..da2ed77d3e8d 100644 --- a/include/linux/usb/ch9.h +++ b/include/linux/usb/ch9.h | |||
@@ -191,6 +191,8 @@ struct usb_ctrlrequest { | |||
191 | #define USB_DT_WIRE_ADAPTER 0x21 | 191 | #define USB_DT_WIRE_ADAPTER 0x21 |
192 | #define USB_DT_RPIPE 0x22 | 192 | #define USB_DT_RPIPE 0x22 |
193 | #define USB_DT_CS_RADIO_CONTROL 0x23 | 193 | #define USB_DT_CS_RADIO_CONTROL 0x23 |
194 | /* From the T10 UAS specification */ | ||
195 | #define USB_DT_PIPE_USAGE 0x24 | ||
194 | /* From the USB 3.0 spec */ | 196 | /* From the USB 3.0 spec */ |
195 | #define USB_DT_SS_ENDPOINT_COMP 0x30 | 197 | #define USB_DT_SS_ENDPOINT_COMP 0x30 |
196 | 198 | ||
@@ -475,7 +477,7 @@ static inline int usb_endpoint_xfer_isoc( | |||
475 | static inline int usb_endpoint_is_bulk_in( | 477 | static inline int usb_endpoint_is_bulk_in( |
476 | const struct usb_endpoint_descriptor *epd) | 478 | const struct usb_endpoint_descriptor *epd) |
477 | { | 479 | { |
478 | return (usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd)); | 480 | return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd); |
479 | } | 481 | } |
480 | 482 | ||
481 | /** | 483 | /** |
@@ -488,7 +490,7 @@ static inline int usb_endpoint_is_bulk_in( | |||
488 | static inline int usb_endpoint_is_bulk_out( | 490 | static inline int usb_endpoint_is_bulk_out( |
489 | const struct usb_endpoint_descriptor *epd) | 491 | const struct usb_endpoint_descriptor *epd) |
490 | { | 492 | { |
491 | return (usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd)); | 493 | return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd); |
492 | } | 494 | } |
493 | 495 | ||
494 | /** | 496 | /** |
@@ -501,7 +503,7 @@ static inline int usb_endpoint_is_bulk_out( | |||
501 | static inline int usb_endpoint_is_int_in( | 503 | static inline int usb_endpoint_is_int_in( |
502 | const struct usb_endpoint_descriptor *epd) | 504 | const struct usb_endpoint_descriptor *epd) |
503 | { | 505 | { |
504 | return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd)); | 506 | return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd); |
505 | } | 507 | } |
506 | 508 | ||
507 | /** | 509 | /** |
@@ -514,7 +516,7 @@ static inline int usb_endpoint_is_int_in( | |||
514 | static inline int usb_endpoint_is_int_out( | 516 | static inline int usb_endpoint_is_int_out( |
515 | const struct usb_endpoint_descriptor *epd) | 517 | const struct usb_endpoint_descriptor *epd) |
516 | { | 518 | { |
517 | return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd)); | 519 | return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd); |
518 | } | 520 | } |
519 | 521 | ||
520 | /** | 522 | /** |
@@ -527,7 +529,7 @@ static inline int usb_endpoint_is_int_out( | |||
527 | static inline int usb_endpoint_is_isoc_in( | 529 | static inline int usb_endpoint_is_isoc_in( |
528 | const struct usb_endpoint_descriptor *epd) | 530 | const struct usb_endpoint_descriptor *epd) |
529 | { | 531 | { |
530 | return (usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd)); | 532 | return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd); |
531 | } | 533 | } |
532 | 534 | ||
533 | /** | 535 | /** |
@@ -540,7 +542,7 @@ static inline int usb_endpoint_is_isoc_in( | |||
540 | static inline int usb_endpoint_is_isoc_out( | 542 | static inline int usb_endpoint_is_isoc_out( |
541 | const struct usb_endpoint_descriptor *epd) | 543 | const struct usb_endpoint_descriptor *epd) |
542 | { | 544 | { |
543 | return (usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd)); | 545 | return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd); |
544 | } | 546 | } |
545 | 547 | ||
546 | /*-------------------------------------------------------------------------*/ | 548 | /*-------------------------------------------------------------------------*/ |
@@ -556,6 +558,8 @@ struct usb_ss_ep_comp_descriptor { | |||
556 | } __attribute__ ((packed)); | 558 | } __attribute__ ((packed)); |
557 | 559 | ||
558 | #define USB_DT_SS_EP_COMP_SIZE 6 | 560 | #define USB_DT_SS_EP_COMP_SIZE 6 |
561 | /* Bits 4:0 of bmAttributes if this is a bulk endpoint */ | ||
562 | #define USB_SS_MAX_STREAMS(p) (1 << (p & 0x1f)) | ||
559 | 563 | ||
560 | /*-------------------------------------------------------------------------*/ | 564 | /*-------------------------------------------------------------------------*/ |
561 | 565 | ||
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h index 738ea1a691cb..139353efad34 100644 --- a/include/linux/usb/composite.h +++ b/include/linux/usb/composite.h | |||
@@ -326,6 +326,7 @@ struct usb_composite_dev { | |||
326 | 326 | ||
327 | /* private: */ | 327 | /* private: */ |
328 | /* internals */ | 328 | /* internals */ |
329 | unsigned int suspended:1; | ||
329 | struct usb_device_descriptor desc; | 330 | struct usb_device_descriptor desc; |
330 | struct list_head configs; | 331 | struct list_head configs; |
331 | struct usb_composite_driver *driver; | 332 | struct usb_composite_driver *driver; |
diff --git a/include/linux/usb/ehci_def.h b/include/linux/usb/ehci_def.h index af4b86f3aca3..80287af2a738 100644 --- a/include/linux/usb/ehci_def.h +++ b/include/linux/usb/ehci_def.h | |||
@@ -45,7 +45,7 @@ struct ehci_caps { | |||
45 | #define HCC_CANPARK(p) ((p)&(1 << 2)) /* true: can park on async qh */ | 45 | #define HCC_CANPARK(p) ((p)&(1 << 2)) /* true: can park on async qh */ |
46 | #define HCC_PGM_FRAMELISTLEN(p) ((p)&(1 << 1)) /* true: periodic_size changes*/ | 46 | #define HCC_PGM_FRAMELISTLEN(p) ((p)&(1 << 1)) /* true: periodic_size changes*/ |
47 | #define HCC_64BIT_ADDR(p) ((p)&(1)) /* true: can use 64-bit addr */ | 47 | #define HCC_64BIT_ADDR(p) ((p)&(1)) /* true: can use 64-bit addr */ |
48 | u8 portroute [8]; /* nibbles for routing - offset 0xC */ | 48 | u8 portroute[8]; /* nibbles for routing - offset 0xC */ |
49 | } __attribute__ ((packed)); | 49 | } __attribute__ ((packed)); |
50 | 50 | ||
51 | 51 | ||
@@ -92,14 +92,14 @@ struct ehci_regs { | |||
92 | /* ASYNCLISTADDR: offset 0x18 */ | 92 | /* ASYNCLISTADDR: offset 0x18 */ |
93 | u32 async_next; /* address of next async queue head */ | 93 | u32 async_next; /* address of next async queue head */ |
94 | 94 | ||
95 | u32 reserved [9]; | 95 | u32 reserved[9]; |
96 | 96 | ||
97 | /* CONFIGFLAG: offset 0x40 */ | 97 | /* CONFIGFLAG: offset 0x40 */ |
98 | u32 configured_flag; | 98 | u32 configured_flag; |
99 | #define FLAG_CF (1<<0) /* true: we'll support "high speed" */ | 99 | #define FLAG_CF (1<<0) /* true: we'll support "high speed" */ |
100 | 100 | ||
101 | /* PORTSC: offset 0x44 */ | 101 | /* PORTSC: offset 0x44 */ |
102 | u32 port_status [0]; /* up to N_PORTS */ | 102 | u32 port_status[0]; /* up to N_PORTS */ |
103 | /* 31:23 reserved */ | 103 | /* 31:23 reserved */ |
104 | #define PORT_WKOC_E (1<<22) /* wake on overcurrent (enable) */ | 104 | #define PORT_WKOC_E (1<<22) /* wake on overcurrent (enable) */ |
105 | #define PORT_WKDISC_E (1<<21) /* wake on disconnect (enable) */ | 105 | #define PORT_WKDISC_E (1<<21) /* wake on disconnect (enable) */ |
diff --git a/include/linux/usb/functionfs.h b/include/linux/usb/functionfs.h new file mode 100644 index 000000000000..a34a2a043b21 --- /dev/null +++ b/include/linux/usb/functionfs.h | |||
@@ -0,0 +1,199 @@ | |||
1 | #ifndef __LINUX_FUNCTIONFS_H__ | ||
2 | #define __LINUX_FUNCTIONFS_H__ 1 | ||
3 | |||
4 | |||
5 | #include <linux/types.h> | ||
6 | #include <linux/ioctl.h> | ||
7 | |||
8 | #include <linux/usb/ch9.h> | ||
9 | |||
10 | |||
11 | enum { | ||
12 | FUNCTIONFS_DESCRIPTORS_MAGIC = 1, | ||
13 | FUNCTIONFS_STRINGS_MAGIC = 2 | ||
14 | }; | ||
15 | |||
16 | |||
17 | #ifndef __KERNEL__ | ||
18 | |||
19 | /* Descriptor of an non-audio endpoint */ | ||
20 | struct usb_endpoint_descriptor_no_audio { | ||
21 | __u8 bLength; | ||
22 | __u8 bDescriptorType; | ||
23 | |||
24 | __u8 bEndpointAddress; | ||
25 | __u8 bmAttributes; | ||
26 | __le16 wMaxPacketSize; | ||
27 | __u8 bInterval; | ||
28 | } __attribute__((packed)); | ||
29 | |||
30 | |||
31 | /* | ||
32 | * All numbers must be in little endian order. | ||
33 | */ | ||
34 | |||
35 | struct usb_functionfs_descs_head { | ||
36 | __le32 magic; | ||
37 | __le32 length; | ||
38 | __le32 fs_count; | ||
39 | __le32 hs_count; | ||
40 | } __attribute__((packed)); | ||
41 | |||
42 | /* | ||
43 | * Descriptors format: | ||
44 | * | ||
45 | * | off | name | type | description | | ||
46 | * |-----+-----------+--------------+--------------------------------------| | ||
47 | * | 0 | magic | LE32 | FUNCTIONFS_{FS,HS}_DESCRIPTORS_MAGIC | | ||
48 | * | 4 | lenght | LE32 | length of the whole data chunk | | ||
49 | * | 8 | fs_count | LE32 | number of full-speed descriptors | | ||
50 | * | 12 | hs_count | LE32 | number of high-speed descriptors | | ||
51 | * | 16 | fs_descrs | Descriptor[] | list of full-speed descriptors | | ||
52 | * | | hs_descrs | Descriptor[] | list of high-speed descriptors | | ||
53 | * | ||
54 | * descs are just valid USB descriptors and have the following format: | ||
55 | * | ||
56 | * | off | name | type | description | | ||
57 | * |-----+-----------------+------+--------------------------| | ||
58 | * | 0 | bLength | U8 | length of the descriptor | | ||
59 | * | 1 | bDescriptorType | U8 | descriptor type | | ||
60 | * | 2 | payload | | descriptor's payload | | ||
61 | */ | ||
62 | |||
63 | struct usb_functionfs_strings_head { | ||
64 | __le32 magic; | ||
65 | __le32 length; | ||
66 | __le32 str_count; | ||
67 | __le32 lang_count; | ||
68 | } __attribute__((packed)); | ||
69 | |||
70 | /* | ||
71 | * Strings format: | ||
72 | * | ||
73 | * | off | name | type | description | | ||
74 | * |-----+------------+-----------------------+----------------------------| | ||
75 | * | 0 | magic | LE32 | FUNCTIONFS_STRINGS_MAGIC | | ||
76 | * | 4 | length | LE32 | length of the data chunk | | ||
77 | * | 8 | str_count | LE32 | number of strings | | ||
78 | * | 12 | lang_count | LE32 | number of languages | | ||
79 | * | 16 | stringtab | StringTab[lang_count] | table of strings per lang | | ||
80 | * | ||
81 | * For each language there is one stringtab entry (ie. there are lang_count | ||
82 | * stringtab entires). Each StringTab has following format: | ||
83 | * | ||
84 | * | off | name | type | description | | ||
85 | * |-----+---------+-------------------+------------------------------------| | ||
86 | * | 0 | lang | LE16 | language code | | ||
87 | * | 2 | strings | String[str_count] | array of strings in given language | | ||
88 | * | ||
89 | * For each string ther is one strings entry (ie. there are str_count | ||
90 | * string entries). Each String is a NUL terminated string encoded in | ||
91 | * UTF-8. | ||
92 | */ | ||
93 | |||
94 | #endif | ||
95 | |||
96 | |||
97 | /* | ||
98 | * Events are delivered on the ep0 file descriptor, when the user mode driver | ||
99 | * reads from this file descriptor after writing the descriptors. Don't | ||
100 | * stop polling this descriptor. | ||
101 | */ | ||
102 | |||
103 | enum usb_functionfs_event_type { | ||
104 | FUNCTIONFS_BIND, | ||
105 | FUNCTIONFS_UNBIND, | ||
106 | |||
107 | FUNCTIONFS_ENABLE, | ||
108 | FUNCTIONFS_DISABLE, | ||
109 | |||
110 | FUNCTIONFS_SETUP, | ||
111 | |||
112 | FUNCTIONFS_SUSPEND, | ||
113 | FUNCTIONFS_RESUME | ||
114 | }; | ||
115 | |||
116 | /* NOTE: this structure must stay the same size and layout on | ||
117 | * both 32-bit and 64-bit kernels. | ||
118 | */ | ||
119 | struct usb_functionfs_event { | ||
120 | union { | ||
121 | /* SETUP: packet; DATA phase i/o precedes next event | ||
122 | *(setup.bmRequestType & USB_DIR_IN) flags direction */ | ||
123 | struct usb_ctrlrequest setup; | ||
124 | } __attribute__((packed)) u; | ||
125 | |||
126 | /* enum usb_functionfs_event_type */ | ||
127 | __u8 type; | ||
128 | __u8 _pad[3]; | ||
129 | } __attribute__((packed)); | ||
130 | |||
131 | |||
132 | /* Endpoint ioctls */ | ||
133 | /* The same as in gadgetfs */ | ||
134 | |||
135 | /* IN transfers may be reported to the gadget driver as complete | ||
136 | * when the fifo is loaded, before the host reads the data; | ||
137 | * OUT transfers may be reported to the host's "client" driver as | ||
138 | * complete when they're sitting in the FIFO unread. | ||
139 | * THIS returns how many bytes are "unclaimed" in the endpoint fifo | ||
140 | * (needed for precise fault handling, when the hardware allows it) | ||
141 | */ | ||
142 | #define FUNCTIONFS_FIFO_STATUS _IO('g', 1) | ||
143 | |||
144 | /* discards any unclaimed data in the fifo. */ | ||
145 | #define FUNCTIONFS_FIFO_FLUSH _IO('g', 2) | ||
146 | |||
147 | /* resets endpoint halt+toggle; used to implement set_interface. | ||
148 | * some hardware (like pxa2xx) can't support this. | ||
149 | */ | ||
150 | #define FUNCTIONFS_CLEAR_HALT _IO('g', 3) | ||
151 | |||
152 | /* Specific for functionfs */ | ||
153 | |||
154 | /* | ||
155 | * Returns reverse mapping of an interface. Called on EP0. If there | ||
156 | * is no such interface returns -EDOM. If function is not active | ||
157 | * returns -ENODEV. | ||
158 | */ | ||
159 | #define FUNCTIONFS_INTERFACE_REVMAP _IO('g', 128) | ||
160 | |||
161 | /* | ||
162 | * Returns real bEndpointAddress of an endpoint. If function is not | ||
163 | * active returns -ENODEV. | ||
164 | */ | ||
165 | #define FUNCTIONFS_ENDPOINT_REVMAP _IO('g', 129) | ||
166 | |||
167 | |||
168 | #ifdef __KERNEL__ | ||
169 | |||
170 | struct ffs_data; | ||
171 | struct usb_composite_dev; | ||
172 | struct usb_configuration; | ||
173 | |||
174 | |||
175 | static int functionfs_init(void) __attribute__((warn_unused_result)); | ||
176 | static void functionfs_cleanup(void); | ||
177 | |||
178 | static int functionfs_bind(struct ffs_data *ffs, struct usb_composite_dev *cdev) | ||
179 | __attribute__((warn_unused_result, nonnull)); | ||
180 | static void functionfs_unbind(struct ffs_data *ffs) | ||
181 | __attribute__((nonnull)); | ||
182 | |||
183 | static int functionfs_add(struct usb_composite_dev *cdev, | ||
184 | struct usb_configuration *c, | ||
185 | struct ffs_data *ffs) | ||
186 | __attribute__((warn_unused_result, nonnull)); | ||
187 | |||
188 | |||
189 | static int functionfs_ready_callback(struct ffs_data *ffs) | ||
190 | __attribute__((warn_unused_result, nonnull)); | ||
191 | static void functionfs_closed_callback(struct ffs_data *ffs) | ||
192 | __attribute__((nonnull)); | ||
193 | static int functionfs_check_dev_callback(const char *dev_name) | ||
194 | __attribute__((warn_unused_result, nonnull)); | ||
195 | |||
196 | |||
197 | #endif | ||
198 | |||
199 | #endif | ||
diff --git a/include/linux/usb/g_hid.h b/include/linux/usb/g_hid.h new file mode 100644 index 000000000000..50f5745df28c --- /dev/null +++ b/include/linux/usb/g_hid.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * g_hid.h -- Header file for USB HID gadget driver | ||
3 | * | ||
4 | * Copyright (C) 2010 Fabien Chouteau <fabien.chouteau@barco.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | #ifndef __LINUX_USB_G_HID_H | ||
22 | #define __LINUX_USB_G_HID_H | ||
23 | |||
24 | struct hidg_func_descriptor { | ||
25 | unsigned char subclass; | ||
26 | unsigned char protocol; | ||
27 | unsigned short report_length; | ||
28 | unsigned short report_desc_length; | ||
29 | unsigned char report_desc[]; | ||
30 | }; | ||
31 | |||
32 | #endif /* __LINUX_USB_G_HID_H */ | ||
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index f4b7ca516cdd..d3ef42d7d2f0 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h | |||
@@ -494,9 +494,13 @@ static inline void set_gadget_data(struct usb_gadget *gadget, void *data) | |||
494 | { dev_set_drvdata(&gadget->dev, data); } | 494 | { dev_set_drvdata(&gadget->dev, data); } |
495 | static inline void *get_gadget_data(struct usb_gadget *gadget) | 495 | static inline void *get_gadget_data(struct usb_gadget *gadget) |
496 | { return dev_get_drvdata(&gadget->dev); } | 496 | { return dev_get_drvdata(&gadget->dev); } |
497 | static inline struct usb_gadget *dev_to_usb_gadget(struct device *dev) | ||
498 | { | ||
499 | return container_of(dev, struct usb_gadget, dev); | ||
500 | } | ||
497 | 501 | ||
498 | /* iterates the non-control endpoints; 'tmp' is a struct usb_ep pointer */ | 502 | /* iterates the non-control endpoints; 'tmp' is a struct usb_ep pointer */ |
499 | #define gadget_for_each_ep(tmp,gadget) \ | 503 | #define gadget_for_each_ep(tmp, gadget) \ |
500 | list_for_each_entry(tmp, &(gadget)->ep_list, ep_list) | 504 | list_for_each_entry(tmp, &(gadget)->ep_list, ep_list) |
501 | 505 | ||
502 | 506 | ||
diff --git a/include/linux/usb/gadgetfs.h b/include/linux/usb/gadgetfs.h index 612102e4d75e..0bb12e0d4f8f 100644 --- a/include/linux/usb/gadgetfs.h +++ b/include/linux/usb/gadgetfs.h | |||
@@ -19,7 +19,7 @@ | |||
19 | #define __LINUX_USB_GADGETFS_H | 19 | #define __LINUX_USB_GADGETFS_H |
20 | 20 | ||
21 | #include <linux/types.h> | 21 | #include <linux/types.h> |
22 | #include <asm/ioctl.h> | 22 | #include <linux/ioctl.h> |
23 | 23 | ||
24 | #include <linux/usb/ch9.h> | 24 | #include <linux/usb/ch9.h> |
25 | 25 | ||
diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h new file mode 100644 index 000000000000..2e3a4ea1a3da --- /dev/null +++ b/include/linux/usb/hcd.h | |||
@@ -0,0 +1,625 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2001-2002 by David Brownell | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms of the GNU General Public License as published by the | ||
6 | * Free Software Foundation; either version 2 of the License, or (at your | ||
7 | * option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, but | ||
10 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | ||
11 | * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
12 | * for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software Foundation, | ||
16 | * Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef __USB_CORE_HCD_H | ||
20 | #define __USB_CORE_HCD_H | ||
21 | |||
22 | #ifdef __KERNEL__ | ||
23 | |||
24 | #include <linux/rwsem.h> | ||
25 | |||
26 | #define MAX_TOPO_LEVEL 6 | ||
27 | |||
28 | /* This file contains declarations of usbcore internals that are mostly | ||
29 | * used or exposed by Host Controller Drivers. | ||
30 | */ | ||
31 | |||
32 | /* | ||
33 | * USB Packet IDs (PIDs) | ||
34 | */ | ||
35 | #define USB_PID_EXT 0xf0 /* USB 2.0 LPM ECN */ | ||
36 | #define USB_PID_OUT 0xe1 | ||
37 | #define USB_PID_ACK 0xd2 | ||
38 | #define USB_PID_DATA0 0xc3 | ||
39 | #define USB_PID_PING 0xb4 /* USB 2.0 */ | ||
40 | #define USB_PID_SOF 0xa5 | ||
41 | #define USB_PID_NYET 0x96 /* USB 2.0 */ | ||
42 | #define USB_PID_DATA2 0x87 /* USB 2.0 */ | ||
43 | #define USB_PID_SPLIT 0x78 /* USB 2.0 */ | ||
44 | #define USB_PID_IN 0x69 | ||
45 | #define USB_PID_NAK 0x5a | ||
46 | #define USB_PID_DATA1 0x4b | ||
47 | #define USB_PID_PREAMBLE 0x3c /* Token mode */ | ||
48 | #define USB_PID_ERR 0x3c /* USB 2.0: handshake mode */ | ||
49 | #define USB_PID_SETUP 0x2d | ||
50 | #define USB_PID_STALL 0x1e | ||
51 | #define USB_PID_MDATA 0x0f /* USB 2.0 */ | ||
52 | |||
53 | /*-------------------------------------------------------------------------*/ | ||
54 | |||
55 | /* | ||
56 | * USB Host Controller Driver (usb_hcd) framework | ||
57 | * | ||
58 | * Since "struct usb_bus" is so thin, you can't share much code in it. | ||
59 | * This framework is a layer over that, and should be more sharable. | ||
60 | * | ||
61 | * @authorized_default: Specifies if new devices are authorized to | ||
62 | * connect by default or they require explicit | ||
63 | * user space authorization; this bit is settable | ||
64 | * through /sys/class/usb_host/X/authorized_default. | ||
65 | * For the rest is RO, so we don't lock to r/w it. | ||
66 | */ | ||
67 | |||
68 | /*-------------------------------------------------------------------------*/ | ||
69 | |||
70 | struct usb_hcd { | ||
71 | |||
72 | /* | ||
73 | * housekeeping | ||
74 | */ | ||
75 | struct usb_bus self; /* hcd is-a bus */ | ||
76 | struct kref kref; /* reference counter */ | ||
77 | |||
78 | const char *product_desc; /* product/vendor string */ | ||
79 | char irq_descr[24]; /* driver + bus # */ | ||
80 | |||
81 | struct timer_list rh_timer; /* drives root-hub polling */ | ||
82 | struct urb *status_urb; /* the current status urb */ | ||
83 | #ifdef CONFIG_USB_SUSPEND | ||
84 | struct work_struct wakeup_work; /* for remote wakeup */ | ||
85 | #endif | ||
86 | |||
87 | /* | ||
88 | * hardware info/state | ||
89 | */ | ||
90 | const struct hc_driver *driver; /* hw-specific hooks */ | ||
91 | |||
92 | /* Flags that need to be manipulated atomically */ | ||
93 | unsigned long flags; | ||
94 | #define HCD_FLAG_HW_ACCESSIBLE 0x00000001 | ||
95 | #define HCD_FLAG_SAW_IRQ 0x00000002 | ||
96 | |||
97 | unsigned rh_registered:1;/* is root hub registered? */ | ||
98 | |||
99 | /* The next flag is a stopgap, to be removed when all the HCDs | ||
100 | * support the new root-hub polling mechanism. */ | ||
101 | unsigned uses_new_polling:1; | ||
102 | unsigned poll_rh:1; /* poll for rh status? */ | ||
103 | unsigned poll_pending:1; /* status has changed? */ | ||
104 | unsigned wireless:1; /* Wireless USB HCD */ | ||
105 | unsigned authorized_default:1; | ||
106 | unsigned has_tt:1; /* Integrated TT in root hub */ | ||
107 | |||
108 | int irq; /* irq allocated */ | ||
109 | void __iomem *regs; /* device memory/io */ | ||
110 | u64 rsrc_start; /* memory/io resource start */ | ||
111 | u64 rsrc_len; /* memory/io resource length */ | ||
112 | unsigned power_budget; /* in mA, 0 = no limit */ | ||
113 | |||
114 | /* bandwidth_mutex should be taken before adding or removing | ||
115 | * any new bus bandwidth constraints: | ||
116 | * 1. Before adding a configuration for a new device. | ||
117 | * 2. Before removing the configuration to put the device into | ||
118 | * the addressed state. | ||
119 | * 3. Before selecting a different configuration. | ||
120 | * 4. Before selecting an alternate interface setting. | ||
121 | * | ||
122 | * bandwidth_mutex should be dropped after a successful control message | ||
123 | * to the device, or resetting the bandwidth after a failed attempt. | ||
124 | */ | ||
125 | struct mutex bandwidth_mutex; | ||
126 | |||
127 | |||
128 | #define HCD_BUFFER_POOLS 4 | ||
129 | struct dma_pool *pool[HCD_BUFFER_POOLS]; | ||
130 | |||
131 | int state; | ||
132 | # define __ACTIVE 0x01 | ||
133 | # define __SUSPEND 0x04 | ||
134 | # define __TRANSIENT 0x80 | ||
135 | |||
136 | # define HC_STATE_HALT 0 | ||
137 | # define HC_STATE_RUNNING (__ACTIVE) | ||
138 | # define HC_STATE_QUIESCING (__SUSPEND|__TRANSIENT|__ACTIVE) | ||
139 | # define HC_STATE_RESUMING (__SUSPEND|__TRANSIENT) | ||
140 | # define HC_STATE_SUSPENDED (__SUSPEND) | ||
141 | |||
142 | #define HC_IS_RUNNING(state) ((state) & __ACTIVE) | ||
143 | #define HC_IS_SUSPENDED(state) ((state) & __SUSPEND) | ||
144 | |||
145 | /* more shared queuing code would be good; it should support | ||
146 | * smarter scheduling, handle transaction translators, etc; | ||
147 | * input size of periodic table to an interrupt scheduler. | ||
148 | * (ohci 32, uhci 1024, ehci 256/512/1024). | ||
149 | */ | ||
150 | |||
151 | /* The HC driver's private data is stored at the end of | ||
152 | * this structure. | ||
153 | */ | ||
154 | unsigned long hcd_priv[0] | ||
155 | __attribute__ ((aligned(sizeof(unsigned long)))); | ||
156 | }; | ||
157 | |||
158 | /* 2.4 does this a bit differently ... */ | ||
159 | static inline struct usb_bus *hcd_to_bus(struct usb_hcd *hcd) | ||
160 | { | ||
161 | return &hcd->self; | ||
162 | } | ||
163 | |||
164 | static inline struct usb_hcd *bus_to_hcd(struct usb_bus *bus) | ||
165 | { | ||
166 | return container_of(bus, struct usb_hcd, self); | ||
167 | } | ||
168 | |||
169 | struct hcd_timeout { /* timeouts we allocate */ | ||
170 | struct list_head timeout_list; | ||
171 | struct timer_list timer; | ||
172 | }; | ||
173 | |||
174 | /*-------------------------------------------------------------------------*/ | ||
175 | |||
176 | |||
177 | struct hc_driver { | ||
178 | const char *description; /* "ehci-hcd" etc */ | ||
179 | const char *product_desc; /* product/vendor string */ | ||
180 | size_t hcd_priv_size; /* size of private data */ | ||
181 | |||
182 | /* irq handler */ | ||
183 | irqreturn_t (*irq) (struct usb_hcd *hcd); | ||
184 | |||
185 | int flags; | ||
186 | #define HCD_MEMORY 0x0001 /* HC regs use memory (else I/O) */ | ||
187 | #define HCD_LOCAL_MEM 0x0002 /* HC needs local memory */ | ||
188 | #define HCD_USB11 0x0010 /* USB 1.1 */ | ||
189 | #define HCD_USB2 0x0020 /* USB 2.0 */ | ||
190 | #define HCD_USB3 0x0040 /* USB 3.0 */ | ||
191 | #define HCD_MASK 0x0070 | ||
192 | |||
193 | /* called to init HCD and root hub */ | ||
194 | int (*reset) (struct usb_hcd *hcd); | ||
195 | int (*start) (struct usb_hcd *hcd); | ||
196 | |||
197 | /* NOTE: these suspend/resume calls relate to the HC as | ||
198 | * a whole, not just the root hub; they're for PCI bus glue. | ||
199 | */ | ||
200 | /* called after suspending the hub, before entering D3 etc */ | ||
201 | int (*pci_suspend)(struct usb_hcd *hcd); | ||
202 | |||
203 | /* called after entering D0 (etc), before resuming the hub */ | ||
204 | int (*pci_resume)(struct usb_hcd *hcd, bool hibernated); | ||
205 | |||
206 | /* cleanly make HCD stop writing memory and doing I/O */ | ||
207 | void (*stop) (struct usb_hcd *hcd); | ||
208 | |||
209 | /* shutdown HCD */ | ||
210 | void (*shutdown) (struct usb_hcd *hcd); | ||
211 | |||
212 | /* return current frame number */ | ||
213 | int (*get_frame_number) (struct usb_hcd *hcd); | ||
214 | |||
215 | /* manage i/o requests, device state */ | ||
216 | int (*urb_enqueue)(struct usb_hcd *hcd, | ||
217 | struct urb *urb, gfp_t mem_flags); | ||
218 | int (*urb_dequeue)(struct usb_hcd *hcd, | ||
219 | struct urb *urb, int status); | ||
220 | |||
221 | /* hw synch, freeing endpoint resources that urb_dequeue can't */ | ||
222 | void (*endpoint_disable)(struct usb_hcd *hcd, | ||
223 | struct usb_host_endpoint *ep); | ||
224 | |||
225 | /* (optional) reset any endpoint state such as sequence number | ||
226 | and current window */ | ||
227 | void (*endpoint_reset)(struct usb_hcd *hcd, | ||
228 | struct usb_host_endpoint *ep); | ||
229 | |||
230 | /* root hub support */ | ||
231 | int (*hub_status_data) (struct usb_hcd *hcd, char *buf); | ||
232 | int (*hub_control) (struct usb_hcd *hcd, | ||
233 | u16 typeReq, u16 wValue, u16 wIndex, | ||
234 | char *buf, u16 wLength); | ||
235 | int (*bus_suspend)(struct usb_hcd *); | ||
236 | int (*bus_resume)(struct usb_hcd *); | ||
237 | int (*start_port_reset)(struct usb_hcd *, unsigned port_num); | ||
238 | |||
239 | /* force handover of high-speed port to full-speed companion */ | ||
240 | void (*relinquish_port)(struct usb_hcd *, int); | ||
241 | /* has a port been handed over to a companion? */ | ||
242 | int (*port_handed_over)(struct usb_hcd *, int); | ||
243 | |||
244 | /* CLEAR_TT_BUFFER completion callback */ | ||
245 | void (*clear_tt_buffer_complete)(struct usb_hcd *, | ||
246 | struct usb_host_endpoint *); | ||
247 | |||
248 | /* xHCI specific functions */ | ||
249 | /* Called by usb_alloc_dev to alloc HC device structures */ | ||
250 | int (*alloc_dev)(struct usb_hcd *, struct usb_device *); | ||
251 | /* Called by usb_disconnect to free HC device structures */ | ||
252 | void (*free_dev)(struct usb_hcd *, struct usb_device *); | ||
253 | /* Change a group of bulk endpoints to support multiple stream IDs */ | ||
254 | int (*alloc_streams)(struct usb_hcd *hcd, struct usb_device *udev, | ||
255 | struct usb_host_endpoint **eps, unsigned int num_eps, | ||
256 | unsigned int num_streams, gfp_t mem_flags); | ||
257 | /* Reverts a group of bulk endpoints back to not using stream IDs. | ||
258 | * Can fail if we run out of memory. | ||
259 | */ | ||
260 | int (*free_streams)(struct usb_hcd *hcd, struct usb_device *udev, | ||
261 | struct usb_host_endpoint **eps, unsigned int num_eps, | ||
262 | gfp_t mem_flags); | ||
263 | |||
264 | /* Bandwidth computation functions */ | ||
265 | /* Note that add_endpoint() can only be called once per endpoint before | ||
266 | * check_bandwidth() or reset_bandwidth() must be called. | ||
267 | * drop_endpoint() can only be called once per endpoint also. | ||
268 | * A call to xhci_drop_endpoint() followed by a call to | ||
269 | * xhci_add_endpoint() will add the endpoint to the schedule with | ||
270 | * possibly new parameters denoted by a different endpoint descriptor | ||
271 | * in usb_host_endpoint. A call to xhci_add_endpoint() followed by a | ||
272 | * call to xhci_drop_endpoint() is not allowed. | ||
273 | */ | ||
274 | /* Allocate endpoint resources and add them to a new schedule */ | ||
275 | int (*add_endpoint)(struct usb_hcd *, struct usb_device *, | ||
276 | struct usb_host_endpoint *); | ||
277 | /* Drop an endpoint from a new schedule */ | ||
278 | int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, | ||
279 | struct usb_host_endpoint *); | ||
280 | /* Check that a new hardware configuration, set using | ||
281 | * endpoint_enable and endpoint_disable, does not exceed bus | ||
282 | * bandwidth. This must be called before any set configuration | ||
283 | * or set interface requests are sent to the device. | ||
284 | */ | ||
285 | int (*check_bandwidth)(struct usb_hcd *, struct usb_device *); | ||
286 | /* Reset the device schedule to the last known good schedule, | ||
287 | * which was set from a previous successful call to | ||
288 | * check_bandwidth(). This reverts any add_endpoint() and | ||
289 | * drop_endpoint() calls since that last successful call. | ||
290 | * Used for when a check_bandwidth() call fails due to resource | ||
291 | * or bandwidth constraints. | ||
292 | */ | ||
293 | void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *); | ||
294 | /* Returns the hardware-chosen device address */ | ||
295 | int (*address_device)(struct usb_hcd *, struct usb_device *udev); | ||
296 | /* Notifies the HCD after a hub descriptor is fetched. | ||
297 | * Will block. | ||
298 | */ | ||
299 | int (*update_hub_device)(struct usb_hcd *, struct usb_device *hdev, | ||
300 | struct usb_tt *tt, gfp_t mem_flags); | ||
301 | int (*reset_device)(struct usb_hcd *, struct usb_device *); | ||
302 | }; | ||
303 | |||
304 | extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb); | ||
305 | extern int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb, | ||
306 | int status); | ||
307 | extern void usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb); | ||
308 | |||
309 | extern int usb_hcd_submit_urb(struct urb *urb, gfp_t mem_flags); | ||
310 | extern int usb_hcd_unlink_urb(struct urb *urb, int status); | ||
311 | extern void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, | ||
312 | int status); | ||
313 | extern void usb_hcd_flush_endpoint(struct usb_device *udev, | ||
314 | struct usb_host_endpoint *ep); | ||
315 | extern void usb_hcd_disable_endpoint(struct usb_device *udev, | ||
316 | struct usb_host_endpoint *ep); | ||
317 | extern void usb_hcd_reset_endpoint(struct usb_device *udev, | ||
318 | struct usb_host_endpoint *ep); | ||
319 | extern void usb_hcd_synchronize_unlinks(struct usb_device *udev); | ||
320 | extern int usb_hcd_alloc_bandwidth(struct usb_device *udev, | ||
321 | struct usb_host_config *new_config, | ||
322 | struct usb_host_interface *old_alt, | ||
323 | struct usb_host_interface *new_alt); | ||
324 | extern int usb_hcd_get_frame_number(struct usb_device *udev); | ||
325 | |||
326 | extern struct usb_hcd *usb_create_hcd(const struct hc_driver *driver, | ||
327 | struct device *dev, const char *bus_name); | ||
328 | extern struct usb_hcd *usb_get_hcd(struct usb_hcd *hcd); | ||
329 | extern void usb_put_hcd(struct usb_hcd *hcd); | ||
330 | extern int usb_add_hcd(struct usb_hcd *hcd, | ||
331 | unsigned int irqnum, unsigned long irqflags); | ||
332 | extern void usb_remove_hcd(struct usb_hcd *hcd); | ||
333 | |||
334 | struct platform_device; | ||
335 | extern void usb_hcd_platform_shutdown(struct platform_device *dev); | ||
336 | |||
337 | #ifdef CONFIG_PCI | ||
338 | struct pci_dev; | ||
339 | struct pci_device_id; | ||
340 | extern int usb_hcd_pci_probe(struct pci_dev *dev, | ||
341 | const struct pci_device_id *id); | ||
342 | extern void usb_hcd_pci_remove(struct pci_dev *dev); | ||
343 | extern void usb_hcd_pci_shutdown(struct pci_dev *dev); | ||
344 | |||
345 | #ifdef CONFIG_PM_SLEEP | ||
346 | extern const struct dev_pm_ops usb_hcd_pci_pm_ops; | ||
347 | #endif | ||
348 | #endif /* CONFIG_PCI */ | ||
349 | |||
350 | /* pci-ish (pdev null is ok) buffer alloc/mapping support */ | ||
351 | int hcd_buffer_create(struct usb_hcd *hcd); | ||
352 | void hcd_buffer_destroy(struct usb_hcd *hcd); | ||
353 | |||
354 | void *hcd_buffer_alloc(struct usb_bus *bus, size_t size, | ||
355 | gfp_t mem_flags, dma_addr_t *dma); | ||
356 | void hcd_buffer_free(struct usb_bus *bus, size_t size, | ||
357 | void *addr, dma_addr_t dma); | ||
358 | |||
359 | /* generic bus glue, needed for host controllers that don't use PCI */ | ||
360 | extern irqreturn_t usb_hcd_irq(int irq, void *__hcd); | ||
361 | |||
362 | extern void usb_hc_died(struct usb_hcd *hcd); | ||
363 | extern void usb_hcd_poll_rh_status(struct usb_hcd *hcd); | ||
364 | |||
365 | /* The D0/D1 toggle bits ... USE WITH CAUTION (they're almost hcd-internal) */ | ||
366 | #define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> (ep)) & 1) | ||
367 | #define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << (ep))) | ||
368 | #define usb_settoggle(dev, ep, out, bit) \ | ||
369 | ((dev)->toggle[out] = ((dev)->toggle[out] & ~(1 << (ep))) | \ | ||
370 | ((bit) << (ep))) | ||
371 | |||
372 | /* -------------------------------------------------------------------------- */ | ||
373 | |||
374 | /* Enumeration is only for the hub driver, or HCD virtual root hubs */ | ||
375 | extern struct usb_device *usb_alloc_dev(struct usb_device *parent, | ||
376 | struct usb_bus *, unsigned port); | ||
377 | extern int usb_new_device(struct usb_device *dev); | ||
378 | extern void usb_disconnect(struct usb_device **); | ||
379 | |||
380 | extern int usb_get_configuration(struct usb_device *dev); | ||
381 | extern void usb_destroy_configuration(struct usb_device *dev); | ||
382 | |||
383 | /*-------------------------------------------------------------------------*/ | ||
384 | |||
385 | /* | ||
386 | * HCD Root Hub support | ||
387 | */ | ||
388 | |||
389 | #include <linux/usb/ch11.h> | ||
390 | |||
391 | /* | ||
392 | * As of USB 2.0, full/low speed devices are segregated into trees. | ||
393 | * One type grows from USB 1.1 host controllers (OHCI, UHCI etc). | ||
394 | * The other type grows from high speed hubs when they connect to | ||
395 | * full/low speed devices using "Transaction Translators" (TTs). | ||
396 | * | ||
397 | * TTs should only be known to the hub driver, and high speed bus | ||
398 | * drivers (only EHCI for now). They affect periodic scheduling and | ||
399 | * sometimes control/bulk error recovery. | ||
400 | */ | ||
401 | |||
402 | struct usb_device; | ||
403 | |||
404 | struct usb_tt { | ||
405 | struct usb_device *hub; /* upstream highspeed hub */ | ||
406 | int multi; /* true means one TT per port */ | ||
407 | unsigned think_time; /* think time in ns */ | ||
408 | |||
409 | /* for control/bulk error recovery (CLEAR_TT_BUFFER) */ | ||
410 | spinlock_t lock; | ||
411 | struct list_head clear_list; /* of usb_tt_clear */ | ||
412 | struct work_struct clear_work; | ||
413 | }; | ||
414 | |||
415 | struct usb_tt_clear { | ||
416 | struct list_head clear_list; | ||
417 | unsigned tt; | ||
418 | u16 devinfo; | ||
419 | struct usb_hcd *hcd; | ||
420 | struct usb_host_endpoint *ep; | ||
421 | }; | ||
422 | |||
423 | extern int usb_hub_clear_tt_buffer(struct urb *urb); | ||
424 | extern void usb_ep0_reinit(struct usb_device *); | ||
425 | |||
426 | /* (shifted) direction/type/recipient from the USB 2.0 spec, table 9.2 */ | ||
427 | #define DeviceRequest \ | ||
428 | ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8) | ||
429 | #define DeviceOutRequest \ | ||
430 | ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8) | ||
431 | |||
432 | #define InterfaceRequest \ | ||
433 | ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) | ||
434 | |||
435 | #define EndpointRequest \ | ||
436 | ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) | ||
437 | #define EndpointOutRequest \ | ||
438 | ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) | ||
439 | |||
440 | /* class requests from the USB 2.0 hub spec, table 11-15 */ | ||
441 | /* GetBusState and SetHubDescriptor are optional, omitted */ | ||
442 | #define ClearHubFeature (0x2000 | USB_REQ_CLEAR_FEATURE) | ||
443 | #define ClearPortFeature (0x2300 | USB_REQ_CLEAR_FEATURE) | ||
444 | #define GetHubDescriptor (0xa000 | USB_REQ_GET_DESCRIPTOR) | ||
445 | #define GetHubStatus (0xa000 | USB_REQ_GET_STATUS) | ||
446 | #define GetPortStatus (0xa300 | USB_REQ_GET_STATUS) | ||
447 | #define SetHubFeature (0x2000 | USB_REQ_SET_FEATURE) | ||
448 | #define SetPortFeature (0x2300 | USB_REQ_SET_FEATURE) | ||
449 | |||
450 | |||
451 | /*-------------------------------------------------------------------------*/ | ||
452 | |||
453 | /* | ||
454 | * Generic bandwidth allocation constants/support | ||
455 | */ | ||
456 | #define FRAME_TIME_USECS 1000L | ||
457 | #define BitTime(bytecount) (7 * 8 * bytecount / 6) /* with integer truncation */ | ||
458 | /* Trying not to use worst-case bit-stuffing | ||
459 | * of (7/6 * 8 * bytecount) = 9.33 * bytecount */ | ||
460 | /* bytecount = data payload byte count */ | ||
461 | |||
462 | #define NS_TO_US(ns) ((ns + 500L) / 1000L) | ||
463 | /* convert & round nanoseconds to microseconds */ | ||
464 | |||
465 | |||
466 | /* | ||
467 | * Full/low speed bandwidth allocation constants/support. | ||
468 | */ | ||
469 | #define BW_HOST_DELAY 1000L /* nanoseconds */ | ||
470 | #define BW_HUB_LS_SETUP 333L /* nanoseconds */ | ||
471 | /* 4 full-speed bit times (est.) */ | ||
472 | |||
473 | #define FRAME_TIME_BITS 12000L /* frame = 1 millisecond */ | ||
474 | #define FRAME_TIME_MAX_BITS_ALLOC (90L * FRAME_TIME_BITS / 100L) | ||
475 | #define FRAME_TIME_MAX_USECS_ALLOC (90L * FRAME_TIME_USECS / 100L) | ||
476 | |||
477 | /* | ||
478 | * Ceiling [nano/micro]seconds (typical) for that many bytes at high speed | ||
479 | * ISO is a bit less, no ACK ... from USB 2.0 spec, 5.11.3 (and needed | ||
480 | * to preallocate bandwidth) | ||
481 | */ | ||
482 | #define USB2_HOST_DELAY 5 /* nsec, guess */ | ||
483 | #define HS_NSECS(bytes) (((55 * 8 * 2083) \ | ||
484 | + (2083UL * (3 + BitTime(bytes))))/1000 \ | ||
485 | + USB2_HOST_DELAY) | ||
486 | #define HS_NSECS_ISO(bytes) (((38 * 8 * 2083) \ | ||
487 | + (2083UL * (3 + BitTime(bytes))))/1000 \ | ||
488 | + USB2_HOST_DELAY) | ||
489 | #define HS_USECS(bytes) NS_TO_US(HS_NSECS(bytes)) | ||
490 | #define HS_USECS_ISO(bytes) NS_TO_US(HS_NSECS_ISO(bytes)) | ||
491 | |||
492 | extern long usb_calc_bus_time(int speed, int is_input, | ||
493 | int isoc, int bytecount); | ||
494 | |||
495 | /*-------------------------------------------------------------------------*/ | ||
496 | |||
497 | extern void usb_set_device_state(struct usb_device *udev, | ||
498 | enum usb_device_state new_state); | ||
499 | |||
500 | /*-------------------------------------------------------------------------*/ | ||
501 | |||
502 | /* exported only within usbcore */ | ||
503 | |||
504 | extern struct list_head usb_bus_list; | ||
505 | extern struct mutex usb_bus_list_lock; | ||
506 | extern wait_queue_head_t usb_kill_urb_queue; | ||
507 | |||
508 | extern int usb_find_interface_driver(struct usb_device *dev, | ||
509 | struct usb_interface *interface); | ||
510 | |||
511 | #define usb_endpoint_out(ep_dir) (!((ep_dir) & USB_DIR_IN)) | ||
512 | |||
513 | #ifdef CONFIG_PM | ||
514 | extern void usb_root_hub_lost_power(struct usb_device *rhdev); | ||
515 | extern int hcd_bus_suspend(struct usb_device *rhdev, pm_message_t msg); | ||
516 | extern int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg); | ||
517 | #endif /* CONFIG_PM */ | ||
518 | |||
519 | #ifdef CONFIG_USB_SUSPEND | ||
520 | extern void usb_hcd_resume_root_hub(struct usb_hcd *hcd); | ||
521 | #else | ||
522 | static inline void usb_hcd_resume_root_hub(struct usb_hcd *hcd) | ||
523 | { | ||
524 | return; | ||
525 | } | ||
526 | #endif /* CONFIG_USB_SUSPEND */ | ||
527 | |||
528 | |||
529 | /* | ||
530 | * USB device fs stuff | ||
531 | */ | ||
532 | |||
533 | #ifdef CONFIG_USB_DEVICEFS | ||
534 | |||
535 | /* | ||
536 | * these are expected to be called from the USB core/hub thread | ||
537 | * with the kernel lock held | ||
538 | */ | ||
539 | extern void usbfs_update_special(void); | ||
540 | extern int usbfs_init(void); | ||
541 | extern void usbfs_cleanup(void); | ||
542 | |||
543 | #else /* CONFIG_USB_DEVICEFS */ | ||
544 | |||
545 | static inline void usbfs_update_special(void) {} | ||
546 | static inline int usbfs_init(void) { return 0; } | ||
547 | static inline void usbfs_cleanup(void) { } | ||
548 | |||
549 | #endif /* CONFIG_USB_DEVICEFS */ | ||
550 | |||
551 | /*-------------------------------------------------------------------------*/ | ||
552 | |||
553 | #if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE) | ||
554 | |||
555 | struct usb_mon_operations { | ||
556 | void (*urb_submit)(struct usb_bus *bus, struct urb *urb); | ||
557 | void (*urb_submit_error)(struct usb_bus *bus, struct urb *urb, int err); | ||
558 | void (*urb_complete)(struct usb_bus *bus, struct urb *urb, int status); | ||
559 | /* void (*urb_unlink)(struct usb_bus *bus, struct urb *urb); */ | ||
560 | }; | ||
561 | |||
562 | extern struct usb_mon_operations *mon_ops; | ||
563 | |||
564 | static inline void usbmon_urb_submit(struct usb_bus *bus, struct urb *urb) | ||
565 | { | ||
566 | if (bus->monitored) | ||
567 | (*mon_ops->urb_submit)(bus, urb); | ||
568 | } | ||
569 | |||
570 | static inline void usbmon_urb_submit_error(struct usb_bus *bus, struct urb *urb, | ||
571 | int error) | ||
572 | { | ||
573 | if (bus->monitored) | ||
574 | (*mon_ops->urb_submit_error)(bus, urb, error); | ||
575 | } | ||
576 | |||
577 | static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb, | ||
578 | int status) | ||
579 | { | ||
580 | if (bus->monitored) | ||
581 | (*mon_ops->urb_complete)(bus, urb, status); | ||
582 | } | ||
583 | |||
584 | int usb_mon_register(struct usb_mon_operations *ops); | ||
585 | void usb_mon_deregister(void); | ||
586 | |||
587 | #else | ||
588 | |||
589 | static inline void usbmon_urb_submit(struct usb_bus *bus, struct urb *urb) {} | ||
590 | static inline void usbmon_urb_submit_error(struct usb_bus *bus, struct urb *urb, | ||
591 | int error) {} | ||
592 | static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb, | ||
593 | int status) {} | ||
594 | |||
595 | #endif /* CONFIG_USB_MON || CONFIG_USB_MON_MODULE */ | ||
596 | |||
597 | /*-------------------------------------------------------------------------*/ | ||
598 | |||
599 | /* hub.h ... DeviceRemovable in 2.4.2-ac11, gone in 2.4.10 */ | ||
600 | /* bleech -- resurfaced in 2.4.11 or 2.4.12 */ | ||
601 | #define bitmap DeviceRemovable | ||
602 | |||
603 | |||
604 | /*-------------------------------------------------------------------------*/ | ||
605 | |||
606 | /* random stuff */ | ||
607 | |||
608 | #define RUN_CONTEXT (in_irq() ? "in_irq" \ | ||
609 | : (in_interrupt() ? "in_interrupt" : "can sleep")) | ||
610 | |||
611 | |||
612 | /* This rwsem is for use only by the hub driver and ehci-hcd. | ||
613 | * Nobody else should touch it. | ||
614 | */ | ||
615 | extern struct rw_semaphore ehci_cf_port_reset_rwsem; | ||
616 | |||
617 | /* Keep track of which host controller drivers are loaded */ | ||
618 | #define USB_UHCI_LOADED 0 | ||
619 | #define USB_OHCI_LOADED 1 | ||
620 | #define USB_EHCI_LOADED 2 | ||
621 | extern unsigned long usb_hcds_loaded; | ||
622 | |||
623 | #endif /* __KERNEL__ */ | ||
624 | |||
625 | #endif /* __USB_CORE_HCD_H */ | ||
diff --git a/include/linux/usb/langwell_udc.h b/include/linux/usb/langwell_udc.h index c949178a6530..2d2d1bbad9d2 100644 --- a/include/linux/usb/langwell_udc.h +++ b/include/linux/usb/langwell_udc.h | |||
@@ -181,7 +181,7 @@ struct langwell_op_regs { | |||
181 | #define PORTS_PIC (BIT(15) | BIT(14)) /* port indicator control */ | 181 | #define PORTS_PIC (BIT(15) | BIT(14)) /* port indicator control */ |
182 | #define PORTS_PO BIT(13) /* port owner */ | 182 | #define PORTS_PO BIT(13) /* port owner */ |
183 | #define PORTS_PP BIT(12) /* port power */ | 183 | #define PORTS_PP BIT(12) /* port power */ |
184 | #define PORTS_LS (BIT(11) | BIT(10)) /* line status */ | 184 | #define PORTS_LS (BIT(11) | BIT(10)) /* line status */ |
185 | #define PORTS_SLP BIT(9) /* suspend using L1 */ | 185 | #define PORTS_SLP BIT(9) /* suspend using L1 */ |
186 | #define PORTS_PR BIT(8) /* port reset */ | 186 | #define PORTS_PR BIT(8) /* port reset */ |
187 | #define PORTS_SUSP BIT(7) /* suspend */ | 187 | #define PORTS_SUSP BIT(7) /* suspend */ |
diff --git a/include/linux/usb/musb.h b/include/linux/usb/musb.h index 7acef0234c0e..ee2dd1d506ed 100644 --- a/include/linux/usb/musb.h +++ b/include/linux/usb/musb.h | |||
@@ -22,12 +22,47 @@ enum musb_mode { | |||
22 | 22 | ||
23 | struct clk; | 23 | struct clk; |
24 | 24 | ||
25 | enum musb_fifo_style { | ||
26 | FIFO_RXTX, | ||
27 | FIFO_TX, | ||
28 | FIFO_RX | ||
29 | } __attribute__ ((packed)); | ||
30 | |||
31 | enum musb_buf_mode { | ||
32 | BUF_SINGLE, | ||
33 | BUF_DOUBLE | ||
34 | } __attribute__ ((packed)); | ||
35 | |||
36 | struct musb_fifo_cfg { | ||
37 | u8 hw_ep_num; | ||
38 | enum musb_fifo_style style; | ||
39 | enum musb_buf_mode mode; | ||
40 | u16 maxpacket; | ||
41 | }; | ||
42 | |||
43 | #define MUSB_EP_FIFO(ep, st, m, pkt) \ | ||
44 | { \ | ||
45 | .hw_ep_num = ep, \ | ||
46 | .style = st, \ | ||
47 | .mode = m, \ | ||
48 | .maxpacket = pkt, \ | ||
49 | } | ||
50 | |||
51 | #define MUSB_EP_FIFO_SINGLE(ep, st, pkt) \ | ||
52 | MUSB_EP_FIFO(ep, st, BUF_SINGLE, pkt) | ||
53 | |||
54 | #define MUSB_EP_FIFO_DOUBLE(ep, st, pkt) \ | ||
55 | MUSB_EP_FIFO(ep, st, BUF_DOUBLE, pkt) | ||
56 | |||
25 | struct musb_hdrc_eps_bits { | 57 | struct musb_hdrc_eps_bits { |
26 | const char name[16]; | 58 | const char name[16]; |
27 | u8 bits; | 59 | u8 bits; |
28 | }; | 60 | }; |
29 | 61 | ||
30 | struct musb_hdrc_config { | 62 | struct musb_hdrc_config { |
63 | struct musb_fifo_cfg *fifo_cfg; /* board fifo configuration */ | ||
64 | unsigned fifo_cfg_size; /* size of the fifo configuration */ | ||
65 | |||
31 | /* MUSB configuration-specific details */ | 66 | /* MUSB configuration-specific details */ |
32 | unsigned multipoint:1; /* multipoint device */ | 67 | unsigned multipoint:1; /* multipoint device */ |
33 | unsigned dyn_fifo:1 __deprecated; /* supports dynamic fifo sizing */ | 68 | unsigned dyn_fifo:1 __deprecated; /* supports dynamic fifo sizing */ |
@@ -51,8 +86,9 @@ struct musb_hdrc_config { | |||
51 | 86 | ||
52 | struct musb_hdrc_eps_bits *eps_bits __deprecated; | 87 | struct musb_hdrc_eps_bits *eps_bits __deprecated; |
53 | #ifdef CONFIG_BLACKFIN | 88 | #ifdef CONFIG_BLACKFIN |
54 | /* A GPIO controlling VRSEL in Blackfin */ | 89 | /* A GPIO controlling VRSEL in Blackfin */ |
55 | unsigned int gpio_vrsel; | 90 | unsigned int gpio_vrsel; |
91 | unsigned int gpio_vrsel_active; | ||
56 | #endif | 92 | #endif |
57 | 93 | ||
58 | }; | 94 | }; |
diff --git a/include/linux/usb/ncm.h b/include/linux/usb/ncm.h new file mode 100644 index 000000000000..006d1064c8b2 --- /dev/null +++ b/include/linux/usb/ncm.h | |||
@@ -0,0 +1,114 @@ | |||
1 | /* | ||
2 | * USB CDC NCM auxiliary definitions | ||
3 | */ | ||
4 | |||
5 | #ifndef __LINUX_USB_NCM_H | ||
6 | #define __LINUX_USB_NCM_H | ||
7 | |||
8 | #include <linux/types.h> | ||
9 | #include <linux/usb/cdc.h> | ||
10 | #include <asm/unaligned.h> | ||
11 | |||
12 | #define NCM_NTB_MIN_IN_SIZE 2048 | ||
13 | #define NCM_NTB_MIN_OUT_SIZE 2048 | ||
14 | |||
15 | #define NCM_CONTROL_TIMEOUT (5 * 1000) | ||
16 | |||
17 | /* bmNetworkCapabilities */ | ||
18 | |||
19 | #define NCM_NCAP_ETH_FILTER (1 << 0) | ||
20 | #define NCM_NCAP_NET_ADDRESS (1 << 1) | ||
21 | #define NCM_NCAP_ENCAP_COMM (1 << 2) | ||
22 | #define NCM_NCAP_MAX_DGRAM (1 << 3) | ||
23 | #define NCM_NCAP_CRC_MODE (1 << 4) | ||
24 | |||
25 | /* | ||
26 | * Here are options for NCM Datagram Pointer table (NDP) parser. | ||
27 | * There are 2 different formats: NDP16 and NDP32 in the spec (ch. 3), | ||
28 | * in NDP16 offsets and sizes fields are 1 16bit word wide, | ||
29 | * in NDP32 -- 2 16bit words wide. Also signatures are different. | ||
30 | * To make the parser code the same, put the differences in the structure, | ||
31 | * and switch pointers to the structures when the format is changed. | ||
32 | */ | ||
33 | |||
34 | struct ndp_parser_opts { | ||
35 | u32 nth_sign; | ||
36 | u32 ndp_sign; | ||
37 | unsigned nth_size; | ||
38 | unsigned ndp_size; | ||
39 | unsigned ndplen_align; | ||
40 | /* sizes in u16 units */ | ||
41 | unsigned dgram_item_len; /* index or length */ | ||
42 | unsigned block_length; | ||
43 | unsigned fp_index; | ||
44 | unsigned reserved1; | ||
45 | unsigned reserved2; | ||
46 | unsigned next_fp_index; | ||
47 | }; | ||
48 | |||
49 | #define INIT_NDP16_OPTS { \ | ||
50 | .nth_sign = NCM_NTH16_SIGN, \ | ||
51 | .ndp_sign = NCM_NDP16_NOCRC_SIGN, \ | ||
52 | .nth_size = sizeof(struct usb_cdc_ncm_nth16), \ | ||
53 | .ndp_size = sizeof(struct usb_cdc_ncm_ndp16), \ | ||
54 | .ndplen_align = 4, \ | ||
55 | .dgram_item_len = 1, \ | ||
56 | .block_length = 1, \ | ||
57 | .fp_index = 1, \ | ||
58 | .reserved1 = 0, \ | ||
59 | .reserved2 = 0, \ | ||
60 | .next_fp_index = 1, \ | ||
61 | } | ||
62 | |||
63 | |||
64 | #define INIT_NDP32_OPTS { \ | ||
65 | .nth_sign = NCM_NTH32_SIGN, \ | ||
66 | .ndp_sign = NCM_NDP32_NOCRC_SIGN, \ | ||
67 | .nth_size = sizeof(struct usb_cdc_ncm_nth32), \ | ||
68 | .ndp_size = sizeof(struct usb_cdc_ncm_ndp32), \ | ||
69 | .ndplen_align = 8, \ | ||
70 | .dgram_item_len = 2, \ | ||
71 | .block_length = 2, \ | ||
72 | .fp_index = 2, \ | ||
73 | .reserved1 = 1, \ | ||
74 | .reserved2 = 2, \ | ||
75 | .next_fp_index = 2, \ | ||
76 | } | ||
77 | |||
78 | static inline void put_ncm(__le16 **p, unsigned size, unsigned val) | ||
79 | { | ||
80 | switch (size) { | ||
81 | case 1: | ||
82 | put_unaligned_le16((u16)val, *p); | ||
83 | break; | ||
84 | case 2: | ||
85 | put_unaligned_le32((u32)val, *p); | ||
86 | |||
87 | break; | ||
88 | default: | ||
89 | BUG(); | ||
90 | } | ||
91 | |||
92 | *p += size; | ||
93 | } | ||
94 | |||
95 | static inline unsigned get_ncm(__le16 **p, unsigned size) | ||
96 | { | ||
97 | unsigned tmp; | ||
98 | |||
99 | switch (size) { | ||
100 | case 1: | ||
101 | tmp = get_unaligned_le16(*p); | ||
102 | break; | ||
103 | case 2: | ||
104 | tmp = get_unaligned_le32(*p); | ||
105 | break; | ||
106 | default: | ||
107 | BUG(); | ||
108 | } | ||
109 | |||
110 | *p += size; | ||
111 | return tmp; | ||
112 | } | ||
113 | |||
114 | #endif /* __LINUX_USB_NCM_H */ | ||
diff --git a/include/linux/usb/net2280.h b/include/linux/usb/net2280.h index 96ca549a778d..148b8fa5b1a2 100644 --- a/include/linux/usb/net2280.h +++ b/include/linux/usb/net2280.h | |||
@@ -353,7 +353,7 @@ struct net2280_dma_regs { /* [11.7] */ | |||
353 | #define DMA_TRANSACTION_DONE_INTERRUPT 24 | 353 | #define DMA_TRANSACTION_DONE_INTERRUPT 24 |
354 | #define DMA_ABORT 1 | 354 | #define DMA_ABORT 1 |
355 | #define DMA_START 0 | 355 | #define DMA_START 0 |
356 | u32 _unused0 [2]; | 356 | u32 _unused0[2]; |
357 | /* offset 0x0190, 0x01b0, 0x01d0, 0x01f0, */ | 357 | /* offset 0x0190, 0x01b0, 0x01d0, 0x01f0, */ |
358 | u32 dmacount; | 358 | u32 dmacount; |
359 | #define VALID_BIT 31 | 359 | #define VALID_BIT 31 |
@@ -374,7 +374,7 @@ struct net2280_dep_regs { /* [11.8] */ | |||
374 | u32 dep_cfg; | 374 | u32 dep_cfg; |
375 | /* offset 0x0204, 0x0214, 0x224, 0x234, 0x244 */ | 375 | /* offset 0x0204, 0x0214, 0x224, 0x234, 0x244 */ |
376 | u32 dep_rsp; | 376 | u32 dep_rsp; |
377 | u32 _unused [2]; | 377 | u32 _unused[2]; |
378 | } __attribute__ ((packed)); | 378 | } __attribute__ ((packed)); |
379 | 379 | ||
380 | /* configurable endpoint registers, BAR0 + 0x0300 ... array of seven structs | 380 | /* configurable endpoint registers, BAR0 + 0x0300 ... array of seven structs |
@@ -437,7 +437,7 @@ struct net2280_ep_regs { /* [11.9] */ | |||
437 | /* offset 0x0310, 0x0330, 0x0350, 0x0370, 0x0390, 0x03b0, 0x03d0 */ | 437 | /* offset 0x0310, 0x0330, 0x0350, 0x0370, 0x0390, 0x03b0, 0x03d0 */ |
438 | u32 ep_avail; | 438 | u32 ep_avail; |
439 | u32 ep_data; | 439 | u32 ep_data; |
440 | u32 _unused0 [2]; | 440 | u32 _unused0[2]; |
441 | } __attribute__ ((packed)); | 441 | } __attribute__ ((packed)); |
442 | 442 | ||
443 | #endif /* __LINUX_USB_NET2280_H */ | 443 | #endif /* __LINUX_USB_NET2280_H */ |
diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h index 0a555dd131fc..16b7f3347545 100644 --- a/include/linux/usb/quirks.h +++ b/include/linux/usb/quirks.h | |||
@@ -22,4 +22,8 @@ | |||
22 | /*device will morph if reset, don't use reset for handling errors */ | 22 | /*device will morph if reset, don't use reset for handling errors */ |
23 | #define USB_QUIRK_RESET_MORPHS 0x00000010 | 23 | #define USB_QUIRK_RESET_MORPHS 0x00000010 |
24 | 24 | ||
25 | /* device has more interface descriptions than the bNumInterfaces count, | ||
26 | and can't handle talking to these interfaces */ | ||
27 | #define USB_QUIRK_HONOR_BNUMINTERFACES 0x00000020 | ||
28 | |||
25 | #endif /* __LINUX_USB_QUIRKS_H */ | 29 | #endif /* __LINUX_USB_QUIRKS_H */ |
diff --git a/include/linux/usb/rndis_host.h b/include/linux/usb/rndis_host.h index 1ef1ebc2b04f..05ef52861988 100644 --- a/include/linux/usb/rndis_host.h +++ b/include/linux/usb/rndis_host.h | |||
@@ -34,10 +34,10 @@ | |||
34 | struct rndis_msg_hdr { | 34 | struct rndis_msg_hdr { |
35 | __le32 msg_type; /* RNDIS_MSG_* */ | 35 | __le32 msg_type; /* RNDIS_MSG_* */ |
36 | __le32 msg_len; | 36 | __le32 msg_len; |
37 | // followed by data that varies between messages | 37 | /* followed by data that varies between messages */ |
38 | __le32 request_id; | 38 | __le32 request_id; |
39 | __le32 status; | 39 | __le32 status; |
40 | // ... and more | 40 | /* ... and more */ |
41 | } __attribute__ ((packed)); | 41 | } __attribute__ ((packed)); |
42 | 42 | ||
43 | /* MS-Windows uses this strange size, but RNDIS spec says 1024 minimum */ | 43 | /* MS-Windows uses this strange size, but RNDIS spec says 1024 minimum */ |
@@ -92,67 +92,67 @@ struct rndis_msg_hdr { | |||
92 | 92 | ||
93 | struct rndis_data_hdr { | 93 | struct rndis_data_hdr { |
94 | __le32 msg_type; /* RNDIS_MSG_PACKET */ | 94 | __le32 msg_type; /* RNDIS_MSG_PACKET */ |
95 | __le32 msg_len; // rndis_data_hdr + data_len + pad | 95 | __le32 msg_len; /* rndis_data_hdr + data_len + pad */ |
96 | __le32 data_offset; // 36 -- right after header | 96 | __le32 data_offset; /* 36 -- right after header */ |
97 | __le32 data_len; // ... real packet size | 97 | __le32 data_len; /* ... real packet size */ |
98 | 98 | ||
99 | __le32 oob_data_offset; // zero | 99 | __le32 oob_data_offset; /* zero */ |
100 | __le32 oob_data_len; // zero | 100 | __le32 oob_data_len; /* zero */ |
101 | __le32 num_oob; // zero | 101 | __le32 num_oob; /* zero */ |
102 | __le32 packet_data_offset; // zero | 102 | __le32 packet_data_offset; /* zero */ |
103 | 103 | ||
104 | __le32 packet_data_len; // zero | 104 | __le32 packet_data_len; /* zero */ |
105 | __le32 vc_handle; // zero | 105 | __le32 vc_handle; /* zero */ |
106 | __le32 reserved; // zero | 106 | __le32 reserved; /* zero */ |
107 | } __attribute__ ((packed)); | 107 | } __attribute__ ((packed)); |
108 | 108 | ||
109 | struct rndis_init { /* OUT */ | 109 | struct rndis_init { /* OUT */ |
110 | // header and: | 110 | /* header and: */ |
111 | __le32 msg_type; /* RNDIS_MSG_INIT */ | 111 | __le32 msg_type; /* RNDIS_MSG_INIT */ |
112 | __le32 msg_len; // 24 | 112 | __le32 msg_len; /* 24 */ |
113 | __le32 request_id; | 113 | __le32 request_id; |
114 | __le32 major_version; // of rndis (1.0) | 114 | __le32 major_version; /* of rndis (1.0) */ |
115 | __le32 minor_version; | 115 | __le32 minor_version; |
116 | __le32 max_transfer_size; | 116 | __le32 max_transfer_size; |
117 | } __attribute__ ((packed)); | 117 | } __attribute__ ((packed)); |
118 | 118 | ||
119 | struct rndis_init_c { /* IN */ | 119 | struct rndis_init_c { /* IN */ |
120 | // header and: | 120 | /* header and: */ |
121 | __le32 msg_type; /* RNDIS_MSG_INIT_C */ | 121 | __le32 msg_type; /* RNDIS_MSG_INIT_C */ |
122 | __le32 msg_len; | 122 | __le32 msg_len; |
123 | __le32 request_id; | 123 | __le32 request_id; |
124 | __le32 status; | 124 | __le32 status; |
125 | __le32 major_version; // of rndis (1.0) | 125 | __le32 major_version; /* of rndis (1.0) */ |
126 | __le32 minor_version; | 126 | __le32 minor_version; |
127 | __le32 device_flags; | 127 | __le32 device_flags; |
128 | __le32 medium; // zero == 802.3 | 128 | __le32 medium; /* zero == 802.3 */ |
129 | __le32 max_packets_per_message; | 129 | __le32 max_packets_per_message; |
130 | __le32 max_transfer_size; | 130 | __le32 max_transfer_size; |
131 | __le32 packet_alignment; // max 7; (1<<n) bytes | 131 | __le32 packet_alignment; /* max 7; (1<<n) bytes */ |
132 | __le32 af_list_offset; // zero | 132 | __le32 af_list_offset; /* zero */ |
133 | __le32 af_list_size; // zero | 133 | __le32 af_list_size; /* zero */ |
134 | } __attribute__ ((packed)); | 134 | } __attribute__ ((packed)); |
135 | 135 | ||
136 | struct rndis_halt { /* OUT (no reply) */ | 136 | struct rndis_halt { /* OUT (no reply) */ |
137 | // header and: | 137 | /* header and: */ |
138 | __le32 msg_type; /* RNDIS_MSG_HALT */ | 138 | __le32 msg_type; /* RNDIS_MSG_HALT */ |
139 | __le32 msg_len; | 139 | __le32 msg_len; |
140 | __le32 request_id; | 140 | __le32 request_id; |
141 | } __attribute__ ((packed)); | 141 | } __attribute__ ((packed)); |
142 | 142 | ||
143 | struct rndis_query { /* OUT */ | 143 | struct rndis_query { /* OUT */ |
144 | // header and: | 144 | /* header and: */ |
145 | __le32 msg_type; /* RNDIS_MSG_QUERY */ | 145 | __le32 msg_type; /* RNDIS_MSG_QUERY */ |
146 | __le32 msg_len; | 146 | __le32 msg_len; |
147 | __le32 request_id; | 147 | __le32 request_id; |
148 | __le32 oid; | 148 | __le32 oid; |
149 | __le32 len; | 149 | __le32 len; |
150 | __le32 offset; | 150 | __le32 offset; |
151 | /*?*/ __le32 handle; // zero | 151 | /*?*/ __le32 handle; /* zero */ |
152 | } __attribute__ ((packed)); | 152 | } __attribute__ ((packed)); |
153 | 153 | ||
154 | struct rndis_query_c { /* IN */ | 154 | struct rndis_query_c { /* IN */ |
155 | // header and: | 155 | /* header and: */ |
156 | __le32 msg_type; /* RNDIS_MSG_QUERY_C */ | 156 | __le32 msg_type; /* RNDIS_MSG_QUERY_C */ |
157 | __le32 msg_len; | 157 | __le32 msg_len; |
158 | __le32 request_id; | 158 | __le32 request_id; |
@@ -162,18 +162,18 @@ struct rndis_query_c { /* IN */ | |||
162 | } __attribute__ ((packed)); | 162 | } __attribute__ ((packed)); |
163 | 163 | ||
164 | struct rndis_set { /* OUT */ | 164 | struct rndis_set { /* OUT */ |
165 | // header and: | 165 | /* header and: */ |
166 | __le32 msg_type; /* RNDIS_MSG_SET */ | 166 | __le32 msg_type; /* RNDIS_MSG_SET */ |
167 | __le32 msg_len; | 167 | __le32 msg_len; |
168 | __le32 request_id; | 168 | __le32 request_id; |
169 | __le32 oid; | 169 | __le32 oid; |
170 | __le32 len; | 170 | __le32 len; |
171 | __le32 offset; | 171 | __le32 offset; |
172 | /*?*/ __le32 handle; // zero | 172 | /*?*/ __le32 handle; /* zero */ |
173 | } __attribute__ ((packed)); | 173 | } __attribute__ ((packed)); |
174 | 174 | ||
175 | struct rndis_set_c { /* IN */ | 175 | struct rndis_set_c { /* IN */ |
176 | // header and: | 176 | /* header and: */ |
177 | __le32 msg_type; /* RNDIS_MSG_SET_C */ | 177 | __le32 msg_type; /* RNDIS_MSG_SET_C */ |
178 | __le32 msg_len; | 178 | __le32 msg_len; |
179 | __le32 request_id; | 179 | __le32 request_id; |
@@ -181,14 +181,14 @@ struct rndis_set_c { /* IN */ | |||
181 | } __attribute__ ((packed)); | 181 | } __attribute__ ((packed)); |
182 | 182 | ||
183 | struct rndis_reset { /* IN */ | 183 | struct rndis_reset { /* IN */ |
184 | // header and: | 184 | /* header and: */ |
185 | __le32 msg_type; /* RNDIS_MSG_RESET */ | 185 | __le32 msg_type; /* RNDIS_MSG_RESET */ |
186 | __le32 msg_len; | 186 | __le32 msg_len; |
187 | __le32 reserved; | 187 | __le32 reserved; |
188 | } __attribute__ ((packed)); | 188 | } __attribute__ ((packed)); |
189 | 189 | ||
190 | struct rndis_reset_c { /* OUT */ | 190 | struct rndis_reset_c { /* OUT */ |
191 | // header and: | 191 | /* header and: */ |
192 | __le32 msg_type; /* RNDIS_MSG_RESET_C */ | 192 | __le32 msg_type; /* RNDIS_MSG_RESET_C */ |
193 | __le32 msg_len; | 193 | __le32 msg_len; |
194 | __le32 status; | 194 | __le32 status; |
@@ -196,7 +196,7 @@ struct rndis_reset_c { /* OUT */ | |||
196 | } __attribute__ ((packed)); | 196 | } __attribute__ ((packed)); |
197 | 197 | ||
198 | struct rndis_indicate { /* IN (unrequested) */ | 198 | struct rndis_indicate { /* IN (unrequested) */ |
199 | // header and: | 199 | /* header and: */ |
200 | __le32 msg_type; /* RNDIS_MSG_INDICATE */ | 200 | __le32 msg_type; /* RNDIS_MSG_INDICATE */ |
201 | __le32 msg_len; | 201 | __le32 msg_len; |
202 | __le32 status; | 202 | __le32 status; |
@@ -208,14 +208,14 @@ struct rndis_indicate { /* IN (unrequested) */ | |||
208 | } __attribute__ ((packed)); | 208 | } __attribute__ ((packed)); |
209 | 209 | ||
210 | struct rndis_keepalive { /* OUT (optionally IN) */ | 210 | struct rndis_keepalive { /* OUT (optionally IN) */ |
211 | // header and: | 211 | /* header and: */ |
212 | __le32 msg_type; /* RNDIS_MSG_KEEPALIVE */ | 212 | __le32 msg_type; /* RNDIS_MSG_KEEPALIVE */ |
213 | __le32 msg_len; | 213 | __le32 msg_len; |
214 | __le32 request_id; | 214 | __le32 request_id; |
215 | } __attribute__ ((packed)); | 215 | } __attribute__ ((packed)); |
216 | 216 | ||
217 | struct rndis_keepalive_c { /* IN (optionally OUT) */ | 217 | struct rndis_keepalive_c { /* IN (optionally OUT) */ |
218 | // header and: | 218 | /* header and: */ |
219 | __le32 msg_type; /* RNDIS_MSG_KEEPALIVE_C */ | 219 | __le32 msg_type; /* RNDIS_MSG_KEEPALIVE_C */ |
220 | __le32 msg_len; | 220 | __le32 msg_len; |
221 | __le32 request_id; | 221 | __le32 request_id; |
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h index 0a458b861933..84a4c44c208b 100644 --- a/include/linux/usb/serial.h +++ b/include/linux/usb/serial.h | |||
@@ -35,6 +35,9 @@ enum port_dev_state { | |||
35 | PORT_UNREGISTERING, | 35 | PORT_UNREGISTERING, |
36 | }; | 36 | }; |
37 | 37 | ||
38 | /* USB serial flags */ | ||
39 | #define USB_SERIAL_WRITE_BUSY 0 | ||
40 | |||
38 | /** | 41 | /** |
39 | * usb_serial_port: structure for the specific ports of a device. | 42 | * usb_serial_port: structure for the specific ports of a device. |
40 | * @serial: pointer back to the struct usb_serial owner of this port. | 43 | * @serial: pointer back to the struct usb_serial owner of this port. |
@@ -49,7 +52,7 @@ enum port_dev_state { | |||
49 | * @interrupt_out_size: the size of the interrupt_out_buffer, in bytes. | 52 | * @interrupt_out_size: the size of the interrupt_out_buffer, in bytes. |
50 | * @interrupt_out_urb: pointer to the interrupt out struct urb for this port. | 53 | * @interrupt_out_urb: pointer to the interrupt out struct urb for this port. |
51 | * @interrupt_out_endpointAddress: endpoint address for the interrupt out pipe | 54 | * @interrupt_out_endpointAddress: endpoint address for the interrupt out pipe |
52 | * for this port. | 55 | * for this port. |
53 | * @bulk_in_buffer: pointer to the bulk in buffer for this port. | 56 | * @bulk_in_buffer: pointer to the bulk in buffer for this port. |
54 | * @bulk_in_size: the size of the bulk_in_buffer, in bytes. | 57 | * @bulk_in_size: the size of the bulk_in_buffer, in bytes. |
55 | * @read_urb: pointer to the bulk in struct urb for this port. | 58 | * @read_urb: pointer to the bulk in struct urb for this port. |
@@ -60,13 +63,17 @@ enum port_dev_state { | |||
60 | * @write_urb: pointer to the bulk out struct urb for this port. | 63 | * @write_urb: pointer to the bulk out struct urb for this port. |
61 | * @write_fifo: kfifo used to buffer outgoing data | 64 | * @write_fifo: kfifo used to buffer outgoing data |
62 | * @write_urb_busy: port`s writing status | 65 | * @write_urb_busy: port`s writing status |
66 | * @bulk_out_buffers: pointers to the bulk out buffers for this port | ||
67 | * @write_urbs: pointers to the bulk out urbs for this port | ||
68 | * @write_urbs_free: status bitmap the for bulk out urbs | ||
69 | * @tx_bytes: number of bytes currently in host stack queues | ||
63 | * @bulk_out_endpointAddress: endpoint address for the bulk out pipe for this | 70 | * @bulk_out_endpointAddress: endpoint address for the bulk out pipe for this |
64 | * port. | 71 | * port. |
72 | * @flags: usb serial port flags | ||
65 | * @write_wait: a wait_queue_head_t used by the port. | 73 | * @write_wait: a wait_queue_head_t used by the port. |
66 | * @work: work queue entry for the line discipline waking up. | 74 | * @work: work queue entry for the line discipline waking up. |
67 | * @throttled: nonzero if the read urb is inactive to throttle the device | 75 | * @throttled: nonzero if the read urb is inactive to throttle the device |
68 | * @throttle_req: nonzero if the tty wants to throttle us | 76 | * @throttle_req: nonzero if the tty wants to throttle us |
69 | * @console: attached usb serial console | ||
70 | * @dev: pointer to the serial device | 77 | * @dev: pointer to the serial device |
71 | * | 78 | * |
72 | * This structure is used by the usb-serial core and drivers for the specific | 79 | * This structure is used by the usb-serial core and drivers for the specific |
@@ -97,16 +104,19 @@ struct usb_serial_port { | |||
97 | struct urb *write_urb; | 104 | struct urb *write_urb; |
98 | struct kfifo write_fifo; | 105 | struct kfifo write_fifo; |
99 | int write_urb_busy; | 106 | int write_urb_busy; |
107 | |||
108 | unsigned char *bulk_out_buffers[2]; | ||
109 | struct urb *write_urbs[2]; | ||
110 | unsigned long write_urbs_free; | ||
100 | __u8 bulk_out_endpointAddress; | 111 | __u8 bulk_out_endpointAddress; |
101 | 112 | ||
102 | int tx_bytes_flight; | 113 | int tx_bytes; |
103 | int urbs_in_flight; | ||
104 | 114 | ||
115 | unsigned long flags; | ||
105 | wait_queue_head_t write_wait; | 116 | wait_queue_head_t write_wait; |
106 | struct work_struct work; | 117 | struct work_struct work; |
107 | char throttled; | 118 | char throttled; |
108 | char throttle_req; | 119 | char throttle_req; |
109 | char console; | ||
110 | unsigned long sysrq; /* sysrq timeout */ | 120 | unsigned long sysrq; /* sysrq timeout */ |
111 | struct device dev; | 121 | struct device dev; |
112 | enum port_dev_state dev_state; | 122 | enum port_dev_state dev_state; |
@@ -181,6 +191,8 @@ static inline void usb_set_serial_data(struct usb_serial *serial, void *data) | |||
181 | * @id_table: pointer to a list of usb_device_id structures that define all | 191 | * @id_table: pointer to a list of usb_device_id structures that define all |
182 | * of the devices this structure can support. | 192 | * of the devices this structure can support. |
183 | * @num_ports: the number of different ports this device will have. | 193 | * @num_ports: the number of different ports this device will have. |
194 | * @bulk_in_size: bytes to allocate for bulk-in buffer (0 = end-point size) | ||
195 | * @bulk_out_size: bytes to allocate for bulk-out buffer (0 = end-point size) | ||
184 | * @calc_num_ports: pointer to a function to determine how many ports this | 196 | * @calc_num_ports: pointer to a function to determine how many ports this |
185 | * device has dynamically. It will be called after the probe() | 197 | * device has dynamically. It will be called after the probe() |
186 | * callback is called, but before attach() | 198 | * callback is called, but before attach() |
@@ -223,7 +235,9 @@ struct usb_serial_driver { | |||
223 | struct device_driver driver; | 235 | struct device_driver driver; |
224 | struct usb_driver *usb_driver; | 236 | struct usb_driver *usb_driver; |
225 | struct usb_dynids dynids; | 237 | struct usb_dynids dynids; |
226 | int max_in_flight_urbs; | 238 | |
239 | size_t bulk_in_size; | ||
240 | size_t bulk_out_size; | ||
227 | 241 | ||
228 | int (*probe)(struct usb_serial *serial, const struct usb_device_id *id); | 242 | int (*probe)(struct usb_serial *serial, const struct usb_device_id *id); |
229 | int (*attach)(struct usb_serial *serial); | 243 | int (*attach)(struct usb_serial *serial); |
@@ -269,6 +283,11 @@ struct usb_serial_driver { | |||
269 | void (*write_int_callback)(struct urb *urb); | 283 | void (*write_int_callback)(struct urb *urb); |
270 | void (*read_bulk_callback)(struct urb *urb); | 284 | void (*read_bulk_callback)(struct urb *urb); |
271 | void (*write_bulk_callback)(struct urb *urb); | 285 | void (*write_bulk_callback)(struct urb *urb); |
286 | /* Called by the generic read bulk callback */ | ||
287 | void (*process_read_urb)(struct urb *urb); | ||
288 | /* Called by the generic write implementation */ | ||
289 | int (*prepare_write_buffer)(struct usb_serial_port *port, | ||
290 | void *dest, size_t size); | ||
272 | }; | 291 | }; |
273 | #define to_usb_serial_driver(d) \ | 292 | #define to_usb_serial_driver(d) \ |
274 | container_of(d, struct usb_serial_driver, driver) | 293 | container_of(d, struct usb_serial_driver, driver) |
@@ -318,8 +337,11 @@ extern void usb_serial_generic_disconnect(struct usb_serial *serial); | |||
318 | extern void usb_serial_generic_release(struct usb_serial *serial); | 337 | extern void usb_serial_generic_release(struct usb_serial *serial); |
319 | extern int usb_serial_generic_register(int debug); | 338 | extern int usb_serial_generic_register(int debug); |
320 | extern void usb_serial_generic_deregister(void); | 339 | extern void usb_serial_generic_deregister(void); |
321 | extern void usb_serial_generic_resubmit_read_urb(struct usb_serial_port *port, | 340 | extern int usb_serial_generic_submit_read_urb(struct usb_serial_port *port, |
322 | gfp_t mem_flags); | 341 | gfp_t mem_flags); |
342 | extern void usb_serial_generic_process_read_urb(struct urb *urb); | ||
343 | extern int usb_serial_generic_prepare_write_buffer(struct usb_serial_port *port, | ||
344 | void *dest, size_t size); | ||
323 | extern int usb_serial_handle_sysrq_char(struct tty_struct *tty, | 345 | extern int usb_serial_handle_sysrq_char(struct tty_struct *tty, |
324 | struct usb_serial_port *port, | 346 | struct usb_serial_port *port, |
325 | unsigned int ch); | 347 | unsigned int ch); |
diff --git a/include/linux/usb/ulpi.h b/include/linux/usb/ulpi.h index 20675c6ebc4d..2369d07c3c87 100644 --- a/include/linux/usb/ulpi.h +++ b/include/linux/usb/ulpi.h | |||
@@ -1,6 +1,146 @@ | |||
1 | /* | ||
2 | * ulpi.h -- ULPI defines and function prorotypes | ||
3 | * | ||
4 | * Copyright (C) 2010 Nokia Corporation | ||
5 | * | ||
6 | * This software is distributed under the terms of the GNU General | ||
7 | * Public License ("GPL") as published by the Free Software Foundation, | ||
8 | * version 2 of that License. | ||
9 | */ | ||
10 | |||
1 | #ifndef __LINUX_USB_ULPI_H | 11 | #ifndef __LINUX_USB_ULPI_H |
2 | #define __LINUX_USB_ULPI_H | 12 | #define __LINUX_USB_ULPI_H |
3 | 13 | ||
14 | /*-------------------------------------------------------------------------*/ | ||
15 | |||
16 | /* | ||
17 | * Macros for Set and Clear | ||
18 | * See ULPI 1.1 specification to find the registers with Set and Clear offsets | ||
19 | */ | ||
20 | #define ULPI_SET(a) (a + 1) | ||
21 | #define ULPI_CLR(a) (a + 2) | ||
22 | |||
23 | /*-------------------------------------------------------------------------*/ | ||
24 | |||
25 | /* | ||
26 | * Register Map | ||
27 | */ | ||
28 | #define ULPI_VENDOR_ID_LOW 0x00 | ||
29 | #define ULPI_VENDOR_ID_HIGH 0x01 | ||
30 | #define ULPI_PRODUCT_ID_LOW 0x02 | ||
31 | #define ULPI_PRODUCT_ID_HIGH 0x03 | ||
32 | #define ULPI_FUNC_CTRL 0x04 | ||
33 | #define ULPI_IFC_CTRL 0x07 | ||
34 | #define ULPI_OTG_CTRL 0x0a | ||
35 | #define ULPI_USB_INT_EN_RISE 0x0d | ||
36 | #define ULPI_USB_INT_EN_FALL 0x10 | ||
37 | #define ULPI_USB_INT_STS 0x13 | ||
38 | #define ULPI_USB_INT_LATCH 0x14 | ||
39 | #define ULPI_DEBUG 0x15 | ||
40 | #define ULPI_SCRATCH 0x16 | ||
41 | /* Optional Carkit Registers */ | ||
42 | #define ULPI_CARCIT_CTRL 0x19 | ||
43 | #define ULPI_CARCIT_INT_DELAY 0x1c | ||
44 | #define ULPI_CARCIT_INT_EN 0x1d | ||
45 | #define ULPI_CARCIT_INT_STS 0x20 | ||
46 | #define ULPI_CARCIT_INT_LATCH 0x21 | ||
47 | #define ULPI_CARCIT_PLS_CTRL 0x22 | ||
48 | /* Other Optional Registers */ | ||
49 | #define ULPI_TX_POS_WIDTH 0x25 | ||
50 | #define ULPI_TX_NEG_WIDTH 0x26 | ||
51 | #define ULPI_POLARITY_RECOVERY 0x27 | ||
52 | /* Access Extended Register Set */ | ||
53 | #define ULPI_ACCESS_EXTENDED 0x2f | ||
54 | /* Vendor Specific */ | ||
55 | #define ULPI_VENDOR_SPECIFIC 0x30 | ||
56 | /* Extended Registers */ | ||
57 | #define ULPI_EXT_VENDOR_SPECIFIC 0x80 | ||
58 | |||
59 | /*-------------------------------------------------------------------------*/ | ||
60 | |||
61 | /* Function Control */ | ||
62 | #define ULPI_FUNC_CTRL_XCVRSEL (1 << 0) | ||
63 | #define ULPI_FUNC_CTRL_XCVRSEL_MASK (3 << 0) | ||
64 | #define ULPI_FUNC_CTRL_HIGH_SPEED (0 << 0) | ||
65 | #define ULPI_FUNC_CTRL_FULL_SPEED (1 << 0) | ||
66 | #define ULPI_FUNC_CTRL_LOW_SPEED (2 << 0) | ||
67 | #define ULPI_FUNC_CTRL_FS4LS (3 << 0) | ||
68 | #define ULPI_FUNC_CTRL_TERMSELECT (1 << 2) | ||
69 | #define ULPI_FUNC_CTRL_OPMODE (1 << 3) | ||
70 | #define ULPI_FUNC_CTRL_OPMODE_MASK (3 << 3) | ||
71 | #define ULPI_FUNC_CTRL_OPMODE_NORMAL (0 << 3) | ||
72 | #define ULPI_FUNC_CTRL_OPMODE_NONDRIVING (1 << 3) | ||
73 | #define ULPI_FUNC_CTRL_OPMODE_DISABLE_NRZI (2 << 3) | ||
74 | #define ULPI_FUNC_CTRL_OPMODE_NOSYNC_NOEOP (3 << 3) | ||
75 | #define ULPI_FUNC_CTRL_RESET (1 << 5) | ||
76 | #define ULPI_FUNC_CTRL_SUSPENDM (1 << 6) | ||
77 | |||
78 | /* Interface Control */ | ||
79 | #define ULPI_IFC_CTRL_6_PIN_SERIAL_MODE (1 << 0) | ||
80 | #define ULPI_IFC_CTRL_3_PIN_SERIAL_MODE (1 << 1) | ||
81 | #define ULPI_IFC_CTRL_CARKITMODE (1 << 2) | ||
82 | #define ULPI_IFC_CTRL_CLOCKSUSPENDM (1 << 3) | ||
83 | #define ULPI_IFC_CTRL_AUTORESUME (1 << 4) | ||
84 | #define ULPI_IFC_CTRL_EXTERNAL_VBUS (1 << 5) | ||
85 | #define ULPI_IFC_CTRL_PASSTHRU (1 << 6) | ||
86 | #define ULPI_IFC_CTRL_PROTECT_IFC_DISABLE (1 << 7) | ||
87 | |||
88 | /* OTG Control */ | ||
89 | #define ULPI_OTG_CTRL_ID_PULLUP (1 << 0) | ||
90 | #define ULPI_OTG_CTRL_DP_PULLDOWN (1 << 1) | ||
91 | #define ULPI_OTG_CTRL_DM_PULLDOWN (1 << 2) | ||
92 | #define ULPI_OTG_CTRL_DISCHRGVBUS (1 << 3) | ||
93 | #define ULPI_OTG_CTRL_CHRGVBUS (1 << 4) | ||
94 | #define ULPI_OTG_CTRL_DRVVBUS (1 << 5) | ||
95 | #define ULPI_OTG_CTRL_DRVVBUS_EXT (1 << 6) | ||
96 | #define ULPI_OTG_CTRL_EXTVBUSIND (1 << 7) | ||
97 | |||
98 | /* USB Interrupt Enable Rising, | ||
99 | * USB Interrupt Enable Falling, | ||
100 | * USB Interrupt Status and | ||
101 | * USB Interrupt Latch | ||
102 | */ | ||
103 | #define ULPI_INT_HOST_DISCONNECT (1 << 0) | ||
104 | #define ULPI_INT_VBUS_VALID (1 << 1) | ||
105 | #define ULPI_INT_SESS_VALID (1 << 2) | ||
106 | #define ULPI_INT_SESS_END (1 << 3) | ||
107 | #define ULPI_INT_IDGRD (1 << 4) | ||
108 | |||
109 | /* Debug */ | ||
110 | #define ULPI_DEBUG_LINESTATE0 (1 << 0) | ||
111 | #define ULPI_DEBUG_LINESTATE1 (1 << 1) | ||
112 | |||
113 | /* Carkit Control */ | ||
114 | #define ULPI_CARKIT_CTRL_CARKITPWR (1 << 0) | ||
115 | #define ULPI_CARKIT_CTRL_IDGNDDRV (1 << 1) | ||
116 | #define ULPI_CARKIT_CTRL_TXDEN (1 << 2) | ||
117 | #define ULPI_CARKIT_CTRL_RXDEN (1 << 3) | ||
118 | #define ULPI_CARKIT_CTRL_SPKLEFTEN (1 << 4) | ||
119 | #define ULPI_CARKIT_CTRL_SPKRIGHTEN (1 << 5) | ||
120 | #define ULPI_CARKIT_CTRL_MICEN (1 << 6) | ||
121 | |||
122 | /* Carkit Interrupt Enable */ | ||
123 | #define ULPI_CARKIT_INT_EN_IDFLOAT_RISE (1 << 0) | ||
124 | #define ULPI_CARKIT_INT_EN_IDFLOAT_FALL (1 << 1) | ||
125 | #define ULPI_CARKIT_INT_EN_CARINTDET (1 << 2) | ||
126 | #define ULPI_CARKIT_INT_EN_DP_RISE (1 << 3) | ||
127 | #define ULPI_CARKIT_INT_EN_DP_FALL (1 << 4) | ||
128 | |||
129 | /* Carkit Interrupt Status and | ||
130 | * Carkit Interrupt Latch | ||
131 | */ | ||
132 | #define ULPI_CARKIT_INT_IDFLOAT (1 << 0) | ||
133 | #define ULPI_CARKIT_INT_CARINTDET (1 << 1) | ||
134 | #define ULPI_CARKIT_INT_DP (1 << 2) | ||
135 | |||
136 | /* Carkit Pulse Control*/ | ||
137 | #define ULPI_CARKIT_PLS_CTRL_TXPLSEN (1 << 0) | ||
138 | #define ULPI_CARKIT_PLS_CTRL_RXPLSEN (1 << 1) | ||
139 | #define ULPI_CARKIT_PLS_CTRL_SPKRLEFT_BIASEN (1 << 2) | ||
140 | #define ULPI_CARKIT_PLS_CTRL_SPKRRIGHT_BIASEN (1 << 3) | ||
141 | |||
142 | /*-------------------------------------------------------------------------*/ | ||
143 | |||
4 | struct otg_transceiver *otg_ulpi_create(struct otg_io_access_ops *ops, | 144 | struct otg_transceiver *otg_ulpi_create(struct otg_io_access_ops *ops, |
5 | unsigned int flags); | 145 | unsigned int flags); |
6 | 146 | ||
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h index df1e83dd9a54..7ae27a473818 100644 --- a/include/linux/usb/usbnet.h +++ b/include/linux/usb/usbnet.h | |||
@@ -43,7 +43,7 @@ struct usbnet { | |||
43 | /* protocol/interface state */ | 43 | /* protocol/interface state */ |
44 | struct net_device *net; | 44 | struct net_device *net; |
45 | int msg_enable; | 45 | int msg_enable; |
46 | unsigned long data [5]; | 46 | unsigned long data[5]; |
47 | u32 xid; | 47 | u32 xid; |
48 | u32 hard_mtu; /* count any extra framing */ | 48 | u32 hard_mtu; /* count any extra framing */ |
49 | size_t rx_urb_size; /* size for rx urbs */ | 49 | size_t rx_urb_size; /* size for rx urbs */ |
@@ -148,8 +148,8 @@ struct driver_info { | |||
148 | * much everything except custom framing and chip-specific stuff. | 148 | * much everything except custom framing and chip-specific stuff. |
149 | */ | 149 | */ |
150 | extern int usbnet_probe(struct usb_interface *, const struct usb_device_id *); | 150 | extern int usbnet_probe(struct usb_interface *, const struct usb_device_id *); |
151 | extern int usbnet_suspend (struct usb_interface *, pm_message_t ); | 151 | extern int usbnet_suspend(struct usb_interface *, pm_message_t); |
152 | extern int usbnet_resume (struct usb_interface *); | 152 | extern int usbnet_resume(struct usb_interface *); |
153 | extern void usbnet_disconnect(struct usb_interface *); | 153 | extern void usbnet_disconnect(struct usb_interface *); |
154 | 154 | ||
155 | 155 | ||
@@ -165,8 +165,8 @@ struct cdc_state { | |||
165 | struct usb_interface *data; | 165 | struct usb_interface *data; |
166 | }; | 166 | }; |
167 | 167 | ||
168 | extern int usbnet_generic_cdc_bind (struct usbnet *, struct usb_interface *); | 168 | extern int usbnet_generic_cdc_bind(struct usbnet *, struct usb_interface *); |
169 | extern void usbnet_cdc_unbind (struct usbnet *, struct usb_interface *); | 169 | extern void usbnet_cdc_unbind(struct usbnet *, struct usb_interface *); |
170 | 170 | ||
171 | /* CDC and RNDIS support the same host-chosen packet filters for IN transfers */ | 171 | /* CDC and RNDIS support the same host-chosen packet filters for IN transfers */ |
172 | #define DEFAULT_FILTER (USB_CDC_PACKET_TYPE_BROADCAST \ | 172 | #define DEFAULT_FILTER (USB_CDC_PACKET_TYPE_BROADCAST \ |
@@ -189,29 +189,31 @@ struct skb_data { /* skb->cb is one of these */ | |||
189 | size_t length; | 189 | size_t length; |
190 | }; | 190 | }; |
191 | 191 | ||
192 | extern int usbnet_open (struct net_device *net); | 192 | extern int usbnet_open(struct net_device *net); |
193 | extern int usbnet_stop (struct net_device *net); | 193 | extern int usbnet_stop(struct net_device *net); |
194 | extern netdev_tx_t usbnet_start_xmit (struct sk_buff *skb, | 194 | extern netdev_tx_t usbnet_start_xmit(struct sk_buff *skb, |
195 | struct net_device *net); | 195 | struct net_device *net); |
196 | extern void usbnet_tx_timeout (struct net_device *net); | 196 | extern void usbnet_tx_timeout(struct net_device *net); |
197 | extern int usbnet_change_mtu (struct net_device *net, int new_mtu); | 197 | extern int usbnet_change_mtu(struct net_device *net, int new_mtu); |
198 | 198 | ||
199 | extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *); | 199 | extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *); |
200 | extern int usbnet_get_ethernet_addr(struct usbnet *, int); | 200 | extern int usbnet_get_ethernet_addr(struct usbnet *, int); |
201 | extern void usbnet_defer_kevent (struct usbnet *, int); | 201 | extern void usbnet_defer_kevent(struct usbnet *, int); |
202 | extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); | 202 | extern void usbnet_skb_return(struct usbnet *, struct sk_buff *); |
203 | extern void usbnet_unlink_rx_urbs(struct usbnet *); | 203 | extern void usbnet_unlink_rx_urbs(struct usbnet *); |
204 | 204 | ||
205 | extern void usbnet_pause_rx(struct usbnet *); | 205 | extern void usbnet_pause_rx(struct usbnet *); |
206 | extern void usbnet_resume_rx(struct usbnet *); | 206 | extern void usbnet_resume_rx(struct usbnet *); |
207 | extern void usbnet_purge_paused_rxq(struct usbnet *); | 207 | extern void usbnet_purge_paused_rxq(struct usbnet *); |
208 | 208 | ||
209 | extern int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd); | 209 | extern int usbnet_get_settings(struct net_device *net, |
210 | extern int usbnet_set_settings (struct net_device *net, struct ethtool_cmd *cmd); | 210 | struct ethtool_cmd *cmd); |
211 | extern u32 usbnet_get_link (struct net_device *net); | 211 | extern int usbnet_set_settings(struct net_device *net, |
212 | extern u32 usbnet_get_msglevel (struct net_device *); | 212 | struct ethtool_cmd *cmd); |
213 | extern void usbnet_set_msglevel (struct net_device *, u32); | 213 | extern u32 usbnet_get_link(struct net_device *net); |
214 | extern void usbnet_get_drvinfo (struct net_device *, struct ethtool_drvinfo *); | 214 | extern u32 usbnet_get_msglevel(struct net_device *); |
215 | extern void usbnet_set_msglevel(struct net_device *, u32); | ||
216 | extern void usbnet_get_drvinfo(struct net_device *, struct ethtool_drvinfo *); | ||
215 | extern int usbnet_nway_reset(struct net_device *net); | 217 | extern int usbnet_nway_reset(struct net_device *net); |
216 | 218 | ||
217 | #endif /* __LINUX_USB_USBNET_H */ | 219 | #endif /* __LINUX_USB_USBNET_H */ |
diff --git a/include/linux/usb/wusb-wa.h b/include/linux/usb/wusb-wa.h index fb7c359bdfba..f9dec37f617b 100644 --- a/include/linux/usb/wusb-wa.h +++ b/include/linux/usb/wusb-wa.h | |||
@@ -87,7 +87,7 @@ enum rpipe_crs { | |||
87 | * FIXME: explain rpipes | 87 | * FIXME: explain rpipes |
88 | */ | 88 | */ |
89 | struct usb_rpipe_descriptor { | 89 | struct usb_rpipe_descriptor { |
90 | u8 bLength; | 90 | u8 bLength; |
91 | u8 bDescriptorType; | 91 | u8 bDescriptorType; |
92 | __le16 wRPipeIndex; | 92 | __le16 wRPipeIndex; |
93 | __le16 wRequests; | 93 | __le16 wRequests; |
diff --git a/include/linux/wait.h b/include/linux/wait.h index 76d96d035ea0..0836ccc57121 100644 --- a/include/linux/wait.h +++ b/include/linux/wait.h | |||
@@ -376,6 +376,155 @@ do { \ | |||
376 | __ret; \ | 376 | __ret; \ |
377 | }) | 377 | }) |
378 | 378 | ||
379 | |||
380 | #define __wait_event_interruptible_locked(wq, condition, exclusive, irq) \ | ||
381 | ({ \ | ||
382 | int __ret = 0; \ | ||
383 | DEFINE_WAIT(__wait); \ | ||
384 | if (exclusive) \ | ||
385 | __wait.flags |= WQ_FLAG_EXCLUSIVE; \ | ||
386 | do { \ | ||
387 | if (likely(list_empty(&__wait.task_list))) \ | ||
388 | __add_wait_queue_tail(&(wq), &__wait); \ | ||
389 | set_current_state(TASK_INTERRUPTIBLE); \ | ||
390 | if (signal_pending(current)) { \ | ||
391 | __ret = -ERESTARTSYS; \ | ||
392 | break; \ | ||
393 | } \ | ||
394 | if (irq) \ | ||
395 | spin_unlock_irq(&(wq).lock); \ | ||
396 | else \ | ||
397 | spin_unlock(&(wq).lock); \ | ||
398 | schedule(); \ | ||
399 | if (irq) \ | ||
400 | spin_lock_irq(&(wq).lock); \ | ||
401 | else \ | ||
402 | spin_lock(&(wq).lock); \ | ||
403 | } while (!(condition)); \ | ||
404 | __remove_wait_queue(&(wq), &__wait); \ | ||
405 | __set_current_state(TASK_RUNNING); \ | ||
406 | __ret; \ | ||
407 | }) | ||
408 | |||
409 | |||
410 | /** | ||
411 | * wait_event_interruptible_locked - sleep until a condition gets true | ||
412 | * @wq: the waitqueue to wait on | ||
413 | * @condition: a C expression for the event to wait for | ||
414 | * | ||
415 | * The process is put to sleep (TASK_INTERRUPTIBLE) until the | ||
416 | * @condition evaluates to true or a signal is received. | ||
417 | * The @condition is checked each time the waitqueue @wq is woken up. | ||
418 | * | ||
419 | * It must be called with wq.lock being held. This spinlock is | ||
420 | * unlocked while sleeping but @condition testing is done while lock | ||
421 | * is held and when this macro exits the lock is held. | ||
422 | * | ||
423 | * The lock is locked/unlocked using spin_lock()/spin_unlock() | ||
424 | * functions which must match the way they are locked/unlocked outside | ||
425 | * of this macro. | ||
426 | * | ||
427 | * wake_up_locked() has to be called after changing any variable that could | ||
428 | * change the result of the wait condition. | ||
429 | * | ||
430 | * The function will return -ERESTARTSYS if it was interrupted by a | ||
431 | * signal and 0 if @condition evaluated to true. | ||
432 | */ | ||
433 | #define wait_event_interruptible_locked(wq, condition) \ | ||
434 | ((condition) \ | ||
435 | ? 0 : __wait_event_interruptible_locked(wq, condition, 0, 0)) | ||
436 | |||
437 | /** | ||
438 | * wait_event_interruptible_locked_irq - sleep until a condition gets true | ||
439 | * @wq: the waitqueue to wait on | ||
440 | * @condition: a C expression for the event to wait for | ||
441 | * | ||
442 | * The process is put to sleep (TASK_INTERRUPTIBLE) until the | ||
443 | * @condition evaluates to true or a signal is received. | ||
444 | * The @condition is checked each time the waitqueue @wq is woken up. | ||
445 | * | ||
446 | * It must be called with wq.lock being held. This spinlock is | ||
447 | * unlocked while sleeping but @condition testing is done while lock | ||
448 | * is held and when this macro exits the lock is held. | ||
449 | * | ||
450 | * The lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq() | ||
451 | * functions which must match the way they are locked/unlocked outside | ||
452 | * of this macro. | ||
453 | * | ||
454 | * wake_up_locked() has to be called after changing any variable that could | ||
455 | * change the result of the wait condition. | ||
456 | * | ||
457 | * The function will return -ERESTARTSYS if it was interrupted by a | ||
458 | * signal and 0 if @condition evaluated to true. | ||
459 | */ | ||
460 | #define wait_event_interruptible_locked_irq(wq, condition) \ | ||
461 | ((condition) \ | ||
462 | ? 0 : __wait_event_interruptible_locked(wq, condition, 0, 1)) | ||
463 | |||
464 | /** | ||
465 | * wait_event_interruptible_exclusive_locked - sleep exclusively until a condition gets true | ||
466 | * @wq: the waitqueue to wait on | ||
467 | * @condition: a C expression for the event to wait for | ||
468 | * | ||
469 | * The process is put to sleep (TASK_INTERRUPTIBLE) until the | ||
470 | * @condition evaluates to true or a signal is received. | ||
471 | * The @condition is checked each time the waitqueue @wq is woken up. | ||
472 | * | ||
473 | * It must be called with wq.lock being held. This spinlock is | ||
474 | * unlocked while sleeping but @condition testing is done while lock | ||
475 | * is held and when this macro exits the lock is held. | ||
476 | * | ||
477 | * The lock is locked/unlocked using spin_lock()/spin_unlock() | ||
478 | * functions which must match the way they are locked/unlocked outside | ||
479 | * of this macro. | ||
480 | * | ||
481 | * The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag | ||
482 | * set thus when other process waits process on the list if this | ||
483 | * process is awaken further processes are not considered. | ||
484 | * | ||
485 | * wake_up_locked() has to be called after changing any variable that could | ||
486 | * change the result of the wait condition. | ||
487 | * | ||
488 | * The function will return -ERESTARTSYS if it was interrupted by a | ||
489 | * signal and 0 if @condition evaluated to true. | ||
490 | */ | ||
491 | #define wait_event_interruptible_exclusive_locked(wq, condition) \ | ||
492 | ((condition) \ | ||
493 | ? 0 : __wait_event_interruptible_locked(wq, condition, 1, 0)) | ||
494 | |||
495 | /** | ||
496 | * wait_event_interruptible_exclusive_locked_irq - sleep until a condition gets true | ||
497 | * @wq: the waitqueue to wait on | ||
498 | * @condition: a C expression for the event to wait for | ||
499 | * | ||
500 | * The process is put to sleep (TASK_INTERRUPTIBLE) until the | ||
501 | * @condition evaluates to true or a signal is received. | ||
502 | * The @condition is checked each time the waitqueue @wq is woken up. | ||
503 | * | ||
504 | * It must be called with wq.lock being held. This spinlock is | ||
505 | * unlocked while sleeping but @condition testing is done while lock | ||
506 | * is held and when this macro exits the lock is held. | ||
507 | * | ||
508 | * The lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq() | ||
509 | * functions which must match the way they are locked/unlocked outside | ||
510 | * of this macro. | ||
511 | * | ||
512 | * The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag | ||
513 | * set thus when other process waits process on the list if this | ||
514 | * process is awaken further processes are not considered. | ||
515 | * | ||
516 | * wake_up_locked() has to be called after changing any variable that could | ||
517 | * change the result of the wait condition. | ||
518 | * | ||
519 | * The function will return -ERESTARTSYS if it was interrupted by a | ||
520 | * signal and 0 if @condition evaluated to true. | ||
521 | */ | ||
522 | #define wait_event_interruptible_exclusive_locked_irq(wq, condition) \ | ||
523 | ((condition) \ | ||
524 | ? 0 : __wait_event_interruptible_locked(wq, condition, 1, 1)) | ||
525 | |||
526 | |||
527 | |||
379 | #define __wait_event_killable(wq, condition, ret) \ | 528 | #define __wait_event_killable(wq, condition, ret) \ |
380 | do { \ | 529 | do { \ |
381 | DEFINE_WAIT(__wait); \ | 530 | DEFINE_WAIT(__wait); \ |