The USB buffer allocation code is the only place in the usb core (and in fact the whole kernel) that uses is_device_dma_capable, while the URB mapping code uses the uses_dma flag in struct usb_bus. Switch the buffer allocation to use the uses_dma flag used by the rest of the USB code, and create a helper in hcd.h that checks this flag as well as the CONFIG_HAS_DMA to simplify the caller a bit.
Showing the changes to include/linux (2 of 5 files). Show all
Unified · Split
| @@ -1457,7 +1457,7 @@ typedef void (*usb_complete_t)(struct urb *); · 1456 unmodified lines | ||
| 1457 | 1457 | * field rather than determining a dma address themselves. |
| 1458 | 1458 | * |
| 1459 | 1459 | * Note that transfer_buffer must still be set if the controller |
| 1460 | − * does not support DMA (as indicated by bus.uses_dma) and when talking | |
| 1460 | + * does not support DMA (as indicated by hcd_uses_dma()) and when talking | |
| 1461 | 1461 | * to root hub. If you have to trasfer between highmem zone and the device |
| 1462 | 1462 | * on such controller, create a bounce buffer or bail out with an error. |
| 1463 | 1463 | * If transfer_buffer cannot be set (is in highmem) and the controller is DMA |
| @@ -422,6 +422,9 @@ static inline bool hcd_periodic_completion_in_progress(struct usb_hcd *hcd, · 421 unmodified lines | ||
| 422 | 422 | return hcd->high_prio_bh.completing_ep == ep; |
| 423 | 423 | } |
| 424 | 424 | |
| 425 | +#define hcd_uses_dma(hcd) \ | |
| 426 | + (IS_ENABLED(CONFIG_HAS_DMA) && (hcd)->self.uses_dma) | |
| 427 | + | |
| 425 | 428 | extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb); |
| 426 | 429 | extern int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb, |
| 427 | 430 | int status); |