diff options
Diffstat (limited to 'include/linux/usb.h')
-rw-r--r-- | include/linux/usb.h | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/include/linux/usb.h b/include/linux/usb.h index 8c9f053111bb..739f1fd1cc15 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -1055,7 +1055,8 @@ typedef void (*usb_complete_t)(struct urb *); | |||
1055 | * @number_of_packets: Lists the number of ISO transfer buffers. | 1055 | * @number_of_packets: Lists the number of ISO transfer buffers. |
1056 | * @interval: Specifies the polling interval for interrupt or isochronous | 1056 | * @interval: Specifies the polling interval for interrupt or isochronous |
1057 | * transfers. The units are frames (milliseconds) for full and low | 1057 | * transfers. The units are frames (milliseconds) for full and low |
1058 | * speed devices, and microframes (1/8 millisecond) for highspeed ones. | 1058 | * speed devices, and microframes (1/8 millisecond) for highspeed |
1059 | * and SuperSpeed devices. | ||
1059 | * @error_count: Returns the number of ISO transfers that reported errors. | 1060 | * @error_count: Returns the number of ISO transfers that reported errors. |
1060 | * @context: For use in completion functions. This normally points to | 1061 | * @context: For use in completion functions. This normally points to |
1061 | * request-specific driver context. | 1062 | * request-specific driver context. |
@@ -1084,7 +1085,7 @@ typedef void (*usb_complete_t)(struct urb *); | |||
1084 | * Alternatively, drivers may pass the URB_NO_xxx_DMA_MAP transfer flags, | 1085 | * Alternatively, drivers may pass the URB_NO_xxx_DMA_MAP transfer flags, |
1085 | * which tell the host controller driver that no such mapping is needed since | 1086 | * which tell the host controller driver that no such mapping is needed since |
1086 | * the device driver is DMA-aware. For example, a device driver might | 1087 | * the device driver is DMA-aware. For example, a device driver might |
1087 | * allocate a DMA buffer with usb_buffer_alloc() or call usb_buffer_map(). | 1088 | * allocate a DMA buffer with usb_alloc_coherent() or call usb_buffer_map(). |
1088 | * When these transfer flags are provided, host controller drivers will | 1089 | * When these transfer flags are provided, host controller drivers will |
1089 | * attempt to use the dma addresses found in the transfer_dma and/or | 1090 | * attempt to use the dma addresses found in the transfer_dma and/or |
1090 | * setup_dma fields rather than determining a dma address themselves. | 1091 | * setup_dma fields rather than determining a dma address themselves. |
@@ -1286,9 +1287,16 @@ static inline void usb_fill_bulk_urb(struct urb *urb, | |||
1286 | * | 1287 | * |
1287 | * Initializes a interrupt urb with the proper information needed to submit | 1288 | * Initializes a interrupt urb with the proper information needed to submit |
1288 | * it to a device. | 1289 | * it to a device. |
1289 | * Note that high speed interrupt endpoints use a logarithmic encoding of | 1290 | * |
1290 | * the endpoint interval, and express polling intervals in microframes | 1291 | * Note that High Speed and SuperSpeed interrupt endpoints use a logarithmic |
1291 | * (eight per millisecond) rather than in frames (one per millisecond). | 1292 | * encoding of the endpoint interval, and express polling intervals in |
1293 | * microframes (eight per millisecond) rather than in frames (one per | ||
1294 | * millisecond). | ||
1295 | * | ||
1296 | * Wireless USB also uses the logarithmic encoding, but specifies it in units of | ||
1297 | * 128us instead of 125us. For Wireless USB devices, the interval is passed | ||
1298 | * through to the host controller, rather than being translated into microframe | ||
1299 | * units. | ||
1292 | */ | 1300 | */ |
1293 | static inline void usb_fill_int_urb(struct urb *urb, | 1301 | static inline void usb_fill_int_urb(struct urb *urb, |
1294 | struct usb_device *dev, | 1302 | struct usb_device *dev, |
@@ -1305,7 +1313,7 @@ static inline void usb_fill_int_urb(struct urb *urb, | |||
1305 | urb->transfer_buffer_length = buffer_length; | 1313 | urb->transfer_buffer_length = buffer_length; |
1306 | urb->complete = complete_fn; | 1314 | urb->complete = complete_fn; |
1307 | urb->context = context; | 1315 | urb->context = context; |
1308 | if (dev->speed == USB_SPEED_HIGH) | 1316 | if (dev->speed == USB_SPEED_HIGH || dev->speed == USB_SPEED_SUPER) |
1309 | urb->interval = 1 << (interval - 1); | 1317 | urb->interval = 1 << (interval - 1); |
1310 | else | 1318 | else |
1311 | urb->interval = interval; | 1319 | urb->interval = interval; |
@@ -1358,11 +1366,23 @@ static inline int usb_urb_dir_out(struct urb *urb) | |||
1358 | return (urb->transfer_flags & URB_DIR_MASK) == URB_DIR_OUT; | 1366 | return (urb->transfer_flags & URB_DIR_MASK) == URB_DIR_OUT; |
1359 | } | 1367 | } |
1360 | 1368 | ||
1361 | void *usb_buffer_alloc(struct usb_device *dev, size_t size, | 1369 | void *usb_alloc_coherent(struct usb_device *dev, size_t size, |
1362 | gfp_t mem_flags, dma_addr_t *dma); | 1370 | gfp_t mem_flags, dma_addr_t *dma); |
1363 | void usb_buffer_free(struct usb_device *dev, size_t size, | 1371 | void usb_free_coherent(struct usb_device *dev, size_t size, |
1364 | void *addr, dma_addr_t dma); | 1372 | void *addr, dma_addr_t dma); |
1365 | 1373 | ||
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 | |||
1366 | #if 0 | 1386 | #if 0 |
1367 | struct urb *usb_buffer_map(struct urb *urb); | 1387 | struct urb *usb_buffer_map(struct urb *urb); |
1368 | void usb_buffer_dmasync(struct urb *urb); | 1388 | void usb_buffer_dmasync(struct urb *urb); |