usb_busdma.c (192984) | usb_busdma.c (193045) |
---|---|
1/* $FreeBSD: head/sys/dev/usb/usb_busdma.c 192984 2009-05-28 17:36:36Z thompsa $ */ | 1/* $FreeBSD: head/sys/dev/usb/usb_busdma.c 193045 2009-05-29 18:46:57Z thompsa $ */ |
2/*- 3 * Copyright (c) 2008 Hans Petter Selasky. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. --- 27 unchanged lines hidden (view full) --- 37#include <dev/usb/usb_device.h> 38#include <dev/usb/usb_util.h> 39#include <dev/usb/usb_debug.h> 40 41#include <dev/usb/usb_controller.h> 42#include <dev/usb/usb_bus.h> 43 44#if USB_HAVE_BUSDMA | 2/*- 3 * Copyright (c) 2008 Hans Petter Selasky. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. --- 27 unchanged lines hidden (view full) --- 37#include <dev/usb/usb_device.h> 38#include <dev/usb/usb_util.h> 39#include <dev/usb/usb_debug.h> 40 41#include <dev/usb/usb_controller.h> 42#include <dev/usb/usb_bus.h> 43 44#if USB_HAVE_BUSDMA |
45static void usb2_dma_tag_create(struct usb_dma_tag *, usb2_size_t, usb2_size_t); | 45static void usb2_dma_tag_create(struct usb_dma_tag *, size_t, size_t); |
46static void usb2_dma_tag_destroy(struct usb_dma_tag *); 47static void usb2_dma_lock_cb(void *, bus_dma_lock_op_t); 48static void usb2_pc_alloc_mem_cb(void *, bus_dma_segment_t *, int, int); 49static void usb2_pc_load_mem_cb(void *, bus_dma_segment_t *, int, int); 50static void usb2_pc_common_mem_cb(void *, bus_dma_segment_t *, int, int, 51 uint8_t); 52#endif 53 54/*------------------------------------------------------------------------* 55 * usb2_get_page - lookup DMA-able memory for the given offset 56 * 57 * NOTE: Only call this function when the "page_cache" structure has 58 * been properly initialized ! 59 *------------------------------------------------------------------------*/ 60void | 46static void usb2_dma_tag_destroy(struct usb_dma_tag *); 47static void usb2_dma_lock_cb(void *, bus_dma_lock_op_t); 48static void usb2_pc_alloc_mem_cb(void *, bus_dma_segment_t *, int, int); 49static void usb2_pc_load_mem_cb(void *, bus_dma_segment_t *, int, int); 50static void usb2_pc_common_mem_cb(void *, bus_dma_segment_t *, int, int, 51 uint8_t); 52#endif 53 54/*------------------------------------------------------------------------* 55 * usb2_get_page - lookup DMA-able memory for the given offset 56 * 57 * NOTE: Only call this function when the "page_cache" structure has 58 * been properly initialized ! 59 *------------------------------------------------------------------------*/ 60void |
61usb2_get_page(struct usb_page_cache *pc, usb2_frlength_t offset, | 61usb2_get_page(struct usb_page_cache *pc, usb_frlength_t offset, |
62 struct usb_page_search *res) 63{ 64 struct usb_page *page; 65 66#if USB_HAVE_BUSDMA 67 if (pc->page_start) { 68 69 /* Case 1 - something has been loaded into DMA */ --- 39 unchanged lines hidden (view full) --- 109 res->physaddr = 0; 110#endif 111} 112 113/*------------------------------------------------------------------------* 114 * usb2_copy_in - copy directly to DMA-able memory 115 *------------------------------------------------------------------------*/ 116void | 62 struct usb_page_search *res) 63{ 64 struct usb_page *page; 65 66#if USB_HAVE_BUSDMA 67 if (pc->page_start) { 68 69 /* Case 1 - something has been loaded into DMA */ --- 39 unchanged lines hidden (view full) --- 109 res->physaddr = 0; 110#endif 111} 112 113/*------------------------------------------------------------------------* 114 * usb2_copy_in - copy directly to DMA-able memory 115 *------------------------------------------------------------------------*/ 116void |
117usb2_copy_in(struct usb_page_cache *cache, usb2_frlength_t offset, 118 const void *ptr, usb2_frlength_t len) | 117usb2_copy_in(struct usb_page_cache *cache, usb_frlength_t offset, 118 const void *ptr, usb_frlength_t len) |
119{ 120 struct usb_page_search buf_res; 121 122 while (len != 0) { 123 124 usb2_get_page(cache, offset, &buf_res); 125 126 if (buf_res.length > len) { --- 11 unchanged lines hidden (view full) --- 138 * usb2_copy_in_user - copy directly to DMA-able memory from userland 139 * 140 * Return values: 141 * 0: Success 142 * Else: Failure 143 *------------------------------------------------------------------------*/ 144#if USB_HAVE_USER_IO 145int | 119{ 120 struct usb_page_search buf_res; 121 122 while (len != 0) { 123 124 usb2_get_page(cache, offset, &buf_res); 125 126 if (buf_res.length > len) { --- 11 unchanged lines hidden (view full) --- 138 * usb2_copy_in_user - copy directly to DMA-able memory from userland 139 * 140 * Return values: 141 * 0: Success 142 * Else: Failure 143 *------------------------------------------------------------------------*/ 144#if USB_HAVE_USER_IO 145int |
146usb2_copy_in_user(struct usb_page_cache *cache, usb2_frlength_t offset, 147 const void *ptr, usb2_frlength_t len) | 146usb2_copy_in_user(struct usb_page_cache *cache, usb_frlength_t offset, 147 const void *ptr, usb_frlength_t len) |
148{ 149 struct usb_page_search buf_res; 150 int error; 151 152 while (len != 0) { 153 154 usb2_get_page(cache, offset, &buf_res); 155 --- 13 unchanged lines hidden (view full) --- 169#endif 170 171/*------------------------------------------------------------------------* 172 * usb2_m_copy_in - copy a mbuf chain directly into DMA-able memory 173 *------------------------------------------------------------------------*/ 174#if USB_HAVE_MBUF 175struct usb2_m_copy_in_arg { 176 struct usb_page_cache *cache; | 148{ 149 struct usb_page_search buf_res; 150 int error; 151 152 while (len != 0) { 153 154 usb2_get_page(cache, offset, &buf_res); 155 --- 13 unchanged lines hidden (view full) --- 169#endif 170 171/*------------------------------------------------------------------------* 172 * usb2_m_copy_in - copy a mbuf chain directly into DMA-able memory 173 *------------------------------------------------------------------------*/ 174#if USB_HAVE_MBUF 175struct usb2_m_copy_in_arg { 176 struct usb_page_cache *cache; |
177 usb2_frlength_t dst_offset; | 177 usb_frlength_t dst_offset; |
178}; 179 180static int 181usb2_m_copy_in_cb(void *arg, void *src, uint32_t count) 182{ 183 register struct usb2_m_copy_in_arg *ua = arg; 184 185 usb2_copy_in(ua->cache, ua->dst_offset, src, count); 186 ua->dst_offset += count; 187 return (0); 188} 189 190void | 178}; 179 180static int 181usb2_m_copy_in_cb(void *arg, void *src, uint32_t count) 182{ 183 register struct usb2_m_copy_in_arg *ua = arg; 184 185 usb2_copy_in(ua->cache, ua->dst_offset, src, count); 186 ua->dst_offset += count; 187 return (0); 188} 189 190void |
191usb2_m_copy_in(struct usb_page_cache *cache, usb2_frlength_t dst_offset, 192 struct mbuf *m, usb2_size_t src_offset, usb2_frlength_t src_len) | 191usb2_m_copy_in(struct usb_page_cache *cache, usb_frlength_t dst_offset, 192 struct mbuf *m, size_t src_offset, usb_frlength_t src_len) |
193{ 194 struct usb2_m_copy_in_arg arg = {cache, dst_offset}; 195 int error; 196 197 error = m_apply(m, src_offset, src_len, &usb2_m_copy_in_cb, &arg); 198} 199#endif 200 201/*------------------------------------------------------------------------* 202 * usb2_uiomove - factored out code 203 *------------------------------------------------------------------------*/ 204#if USB_HAVE_USER_IO 205int 206usb2_uiomove(struct usb_page_cache *pc, struct uio *uio, | 193{ 194 struct usb2_m_copy_in_arg arg = {cache, dst_offset}; 195 int error; 196 197 error = m_apply(m, src_offset, src_len, &usb2_m_copy_in_cb, &arg); 198} 199#endif 200 201/*------------------------------------------------------------------------* 202 * usb2_uiomove - factored out code 203 *------------------------------------------------------------------------*/ 204#if USB_HAVE_USER_IO 205int 206usb2_uiomove(struct usb_page_cache *pc, struct uio *uio, |
207 usb2_frlength_t pc_offset, usb2_frlength_t len) | 207 usb_frlength_t pc_offset, usb_frlength_t len) |
208{ 209 struct usb_page_search res; 210 int error = 0; 211 212 while (len != 0) { 213 214 usb2_get_page(pc, pc_offset, &res); 215 --- 15 unchanged lines hidden (view full) --- 231 return (error); 232} 233#endif 234 235/*------------------------------------------------------------------------* 236 * usb2_copy_out - copy directly from DMA-able memory 237 *------------------------------------------------------------------------*/ 238void | 208{ 209 struct usb_page_search res; 210 int error = 0; 211 212 while (len != 0) { 213 214 usb2_get_page(pc, pc_offset, &res); 215 --- 15 unchanged lines hidden (view full) --- 231 return (error); 232} 233#endif 234 235/*------------------------------------------------------------------------* 236 * usb2_copy_out - copy directly from DMA-able memory 237 *------------------------------------------------------------------------*/ 238void |
239usb2_copy_out(struct usb_page_cache *cache, usb2_frlength_t offset, 240 void *ptr, usb2_frlength_t len) | 239usb2_copy_out(struct usb_page_cache *cache, usb_frlength_t offset, 240 void *ptr, usb_frlength_t len) |
241{ 242 struct usb_page_search res; 243 244 while (len != 0) { 245 246 usb2_get_page(cache, offset, &res); 247 248 if (res.length > len) { --- 11 unchanged lines hidden (view full) --- 260 * usb2_copy_out_user - copy directly from DMA-able memory to userland 261 * 262 * Return values: 263 * 0: Success 264 * Else: Failure 265 *------------------------------------------------------------------------*/ 266#if USB_HAVE_USER_IO 267int | 241{ 242 struct usb_page_search res; 243 244 while (len != 0) { 245 246 usb2_get_page(cache, offset, &res); 247 248 if (res.length > len) { --- 11 unchanged lines hidden (view full) --- 260 * usb2_copy_out_user - copy directly from DMA-able memory to userland 261 * 262 * Return values: 263 * 0: Success 264 * Else: Failure 265 *------------------------------------------------------------------------*/ 266#if USB_HAVE_USER_IO 267int |
268usb2_copy_out_user(struct usb_page_cache *cache, usb2_frlength_t offset, 269 void *ptr, usb2_frlength_t len) | 268usb2_copy_out_user(struct usb_page_cache *cache, usb_frlength_t offset, 269 void *ptr, usb_frlength_t len) |
270{ 271 struct usb_page_search res; 272 int error; 273 274 while (len != 0) { 275 276 usb2_get_page(cache, offset, &res); 277 --- 11 unchanged lines hidden (view full) --- 289 return (0); /* success */ 290} 291#endif 292 293/*------------------------------------------------------------------------* 294 * usb2_bzero - zero DMA-able memory 295 *------------------------------------------------------------------------*/ 296void | 270{ 271 struct usb_page_search res; 272 int error; 273 274 while (len != 0) { 275 276 usb2_get_page(cache, offset, &res); 277 --- 11 unchanged lines hidden (view full) --- 289 return (0); /* success */ 290} 291#endif 292 293/*------------------------------------------------------------------------* 294 * usb2_bzero - zero DMA-able memory 295 *------------------------------------------------------------------------*/ 296void |
297usb2_bzero(struct usb_page_cache *cache, usb2_frlength_t offset, 298 usb2_frlength_t len) | 297usb2_bzero(struct usb_page_cache *cache, usb_frlength_t offset, 298 usb_frlength_t len) |
299{ 300 struct usb_page_search res; 301 302 while (len != 0) { 303 304 usb2_get_page(cache, offset, &res); 305 306 if (res.length > len) { --- 20 unchanged lines hidden (view full) --- 327/*------------------------------------------------------------------------* 328 * usb2_dma_tag_create - allocate a DMA tag 329 * 330 * NOTE: If the "align" parameter has a value of 1 the DMA-tag will 331 * allow multi-segment mappings. Else all mappings are single-segment. 332 *------------------------------------------------------------------------*/ 333static void 334usb2_dma_tag_create(struct usb_dma_tag *udt, | 299{ 300 struct usb_page_search res; 301 302 while (len != 0) { 303 304 usb2_get_page(cache, offset, &res); 305 306 if (res.length > len) { --- 20 unchanged lines hidden (view full) --- 327/*------------------------------------------------------------------------* 328 * usb2_dma_tag_create - allocate a DMA tag 329 * 330 * NOTE: If the "align" parameter has a value of 1 the DMA-tag will 331 * allow multi-segment mappings. Else all mappings are single-segment. 332 *------------------------------------------------------------------------*/ 333static void 334usb2_dma_tag_create(struct usb_dma_tag *udt, |
335 usb2_size_t size, usb2_size_t align) | 335 size_t size, size_t align) |
336{ 337 bus_dma_tag_t tag; 338 339 if (bus_dma_tag_create 340 ( /* parent */ udt->tag_parent->tag, 341 /* alignment */ align, 342 /* boundary */ USB_PAGE_SIZE, 343 /* lowaddr */ (2ULL << (udt->tag_parent->dma_bits - 1)) - 1, --- 48 unchanged lines hidden (view full) --- 392 *------------------------------------------------------------------------*/ 393static void 394usb2_pc_common_mem_cb(void *arg, bus_dma_segment_t *segs, 395 int nseg, int error, uint8_t isload) 396{ 397 struct usb_dma_parent_tag *uptag; 398 struct usb_page_cache *pc; 399 struct usb_page *pg; | 336{ 337 bus_dma_tag_t tag; 338 339 if (bus_dma_tag_create 340 ( /* parent */ udt->tag_parent->tag, 341 /* alignment */ align, 342 /* boundary */ USB_PAGE_SIZE, 343 /* lowaddr */ (2ULL << (udt->tag_parent->dma_bits - 1)) - 1, --- 48 unchanged lines hidden (view full) --- 392 *------------------------------------------------------------------------*/ 393static void 394usb2_pc_common_mem_cb(void *arg, bus_dma_segment_t *segs, 395 int nseg, int error, uint8_t isload) 396{ 397 struct usb_dma_parent_tag *uptag; 398 struct usb_page_cache *pc; 399 struct usb_page *pg; |
400 usb2_size_t rem; | 400 size_t rem; |
401 uint8_t owned; 402 403 pc = arg; 404 uptag = pc->tag_parent; 405 406 /* 407 * XXX There is sometimes recursive locking here. 408 * XXX We should try to find a better solution. --- 46 unchanged lines hidden (view full) --- 455 * usb2_pc_alloc_mem - allocate DMA'able memory 456 * 457 * Returns: 458 * 0: Success 459 * Else: Failure 460 *------------------------------------------------------------------------*/ 461uint8_t 462usb2_pc_alloc_mem(struct usb_page_cache *pc, struct usb_page *pg, | 401 uint8_t owned; 402 403 pc = arg; 404 uptag = pc->tag_parent; 405 406 /* 407 * XXX There is sometimes recursive locking here. 408 * XXX We should try to find a better solution. --- 46 unchanged lines hidden (view full) --- 455 * usb2_pc_alloc_mem - allocate DMA'able memory 456 * 457 * Returns: 458 * 0: Success 459 * Else: Failure 460 *------------------------------------------------------------------------*/ 461uint8_t 462usb2_pc_alloc_mem(struct usb_page_cache *pc, struct usb_page *pg, |
463 usb2_size_t size, usb2_size_t align) | 463 size_t size, size_t align) |
464{ 465 struct usb_dma_parent_tag *uptag; 466 struct usb_dma_tag *utag; 467 bus_dmamap_t map; 468 void *ptr; 469 int err; 470 471 uptag = pc->tag_parent; --- 106 unchanged lines hidden (view full) --- 578/*------------------------------------------------------------------------* 579 * usb2_pc_load_mem - load virtual memory into DMA 580 * 581 * Return values: 582 * 0: Success 583 * Else: Error 584 *------------------------------------------------------------------------*/ 585uint8_t | 464{ 465 struct usb_dma_parent_tag *uptag; 466 struct usb_dma_tag *utag; 467 bus_dmamap_t map; 468 void *ptr; 469 int err; 470 471 uptag = pc->tag_parent; --- 106 unchanged lines hidden (view full) --- 578/*------------------------------------------------------------------------* 579 * usb2_pc_load_mem - load virtual memory into DMA 580 * 581 * Return values: 582 * 0: Success 583 * Else: Error 584 *------------------------------------------------------------------------*/ 585uint8_t |
586usb2_pc_load_mem(struct usb_page_cache *pc, usb2_size_t size, uint8_t sync) | 586usb2_pc_load_mem(struct usb_page_cache *pc, size_t size, uint8_t sync) |
587{ 588 /* setup page cache */ 589 pc->page_offset_buf = 0; 590 pc->page_offset_end = size; 591 pc->ismultiseg = 1; 592 593 mtx_assert(pc->tag_parent->mtx, MA_OWNED); 594 --- 84 unchanged lines hidden (view full) --- 679/*------------------------------------------------------------------------* 680 * usb2_pc_dmamap_create - create a DMA map 681 * 682 * Returns: 683 * 0: Success 684 * Else: Failure 685 *------------------------------------------------------------------------*/ 686uint8_t | 587{ 588 /* setup page cache */ 589 pc->page_offset_buf = 0; 590 pc->page_offset_end = size; 591 pc->ismultiseg = 1; 592 593 mtx_assert(pc->tag_parent->mtx, MA_OWNED); 594 --- 84 unchanged lines hidden (view full) --- 679/*------------------------------------------------------------------------* 680 * usb2_pc_dmamap_create - create a DMA map 681 * 682 * Returns: 683 * 0: Success 684 * Else: Failure 685 *------------------------------------------------------------------------*/ 686uint8_t |
687usb2_pc_dmamap_create(struct usb_page_cache *pc, usb2_size_t size) | 687usb2_pc_dmamap_create(struct usb_page_cache *pc, size_t size) |
688{ 689 struct usb_xfer_root *info; 690 struct usb_dma_tag *utag; 691 692 /* get info */ 693 info = USB_DMATAG_TO_XROOT(pc->tag_parent); 694 695 /* sanity check */ --- 32 unchanged lines hidden (view full) --- 728 } 729} 730 731/*------------------------------------------------------------------------* 732 * usb2_dma_tag_find - factored out code 733 *------------------------------------------------------------------------*/ 734struct usb_dma_tag * 735usb2_dma_tag_find(struct usb_dma_parent_tag *udpt, | 688{ 689 struct usb_xfer_root *info; 690 struct usb_dma_tag *utag; 691 692 /* get info */ 693 info = USB_DMATAG_TO_XROOT(pc->tag_parent); 694 695 /* sanity check */ --- 32 unchanged lines hidden (view full) --- 728 } 729} 730 731/*------------------------------------------------------------------------* 732 * usb2_dma_tag_find - factored out code 733 *------------------------------------------------------------------------*/ 734struct usb_dma_tag * 735usb2_dma_tag_find(struct usb_dma_parent_tag *udpt, |
736 usb2_size_t size, usb2_size_t align) | 736 size_t size, size_t align) |
737{ 738 struct usb_dma_tag *udt; 739 uint8_t nudt; 740 741 USB_ASSERT(align > 0, ("Invalid parameter align = 0!\n")); 742 USB_ASSERT(size > 0, ("Invalid parameter size = 0!\n")); 743 744 udt = udpt->utag_first; --- 19 unchanged lines hidden (view full) --- 764} 765 766/*------------------------------------------------------------------------* 767 * usb2_dma_tag_setup - initialise USB DMA tags 768 *------------------------------------------------------------------------*/ 769void 770usb2_dma_tag_setup(struct usb_dma_parent_tag *udpt, 771 struct usb_dma_tag *udt, bus_dma_tag_t dmat, | 737{ 738 struct usb_dma_tag *udt; 739 uint8_t nudt; 740 741 USB_ASSERT(align > 0, ("Invalid parameter align = 0!\n")); 742 USB_ASSERT(size > 0, ("Invalid parameter size = 0!\n")); 743 744 udt = udpt->utag_first; --- 19 unchanged lines hidden (view full) --- 764} 765 766/*------------------------------------------------------------------------* 767 * usb2_dma_tag_setup - initialise USB DMA tags 768 *------------------------------------------------------------------------*/ 769void 770usb2_dma_tag_setup(struct usb_dma_parent_tag *udpt, 771 struct usb_dma_tag *udt, bus_dma_tag_t dmat, |
772 struct mtx *mtx, usb2_dma_callback_t *func, | 772 struct mtx *mtx, usb_dma_callback_t *func, |
773 uint8_t ndmabits, uint8_t nudt) 774{ 775 bzero(udpt, sizeof(*udpt)); 776 777 /* sanity checking */ 778 if ((nudt == 0) || 779 (ndmabits == 0) || 780 (mtx == NULL)) { --- 52 unchanged lines hidden (view full) --- 833 * This function handles loading of virtual buffers into DMA and is 834 * only called when "dma_refcount" is zero. 835 *------------------------------------------------------------------------*/ 836void 837usb2_bdma_work_loop(struct usb_xfer_queue *pq) 838{ 839 struct usb_xfer_root *info; 840 struct usb_xfer *xfer; | 773 uint8_t ndmabits, uint8_t nudt) 774{ 775 bzero(udpt, sizeof(*udpt)); 776 777 /* sanity checking */ 778 if ((nudt == 0) || 779 (ndmabits == 0) || 780 (mtx == NULL)) { --- 52 unchanged lines hidden (view full) --- 833 * This function handles loading of virtual buffers into DMA and is 834 * only called when "dma_refcount" is zero. 835 *------------------------------------------------------------------------*/ 836void 837usb2_bdma_work_loop(struct usb_xfer_queue *pq) 838{ 839 struct usb_xfer_root *info; 840 struct usb_xfer *xfer; |
841 usb2_frcount_t nframes; | 841 usb_frcount_t nframes; |
842 843 xfer = pq->curr; 844 info = xfer->xroot; 845 846 mtx_assert(info->xfer_mtx, MA_OWNED); 847 848 if (xfer->error) { 849 /* some error happened */ 850 USB_BUS_LOCK(info->bus); 851 usb2_transfer_done(xfer, 0); 852 USB_BUS_UNLOCK(info->bus); 853 return; 854 } 855 if (!xfer->flags_int.bdma_setup) { 856 struct usb_page *pg; | 842 843 xfer = pq->curr; 844 info = xfer->xroot; 845 846 mtx_assert(info->xfer_mtx, MA_OWNED); 847 848 if (xfer->error) { 849 /* some error happened */ 850 USB_BUS_LOCK(info->bus); 851 usb2_transfer_done(xfer, 0); 852 USB_BUS_UNLOCK(info->bus); 853 return; 854 } 855 if (!xfer->flags_int.bdma_setup) { 856 struct usb_page *pg; |
857 usb2_frlength_t frlength_0; | 857 usb_frlength_t frlength_0; |
858 uint8_t isread; 859 860 xfer->flags_int.bdma_setup = 1; 861 862 /* reset BUS-DMA load state */ 863 864 info->dma_error = 0; 865 --- 116 unchanged lines hidden (view full) --- 982 * 983 * This function handles DMA synchronisation that must be done before 984 * an USB transfer is started. 985 *------------------------------------------------------------------------*/ 986void 987usb2_bdma_pre_sync(struct usb_xfer *xfer) 988{ 989 struct usb_page_cache *pc; | 858 uint8_t isread; 859 860 xfer->flags_int.bdma_setup = 1; 861 862 /* reset BUS-DMA load state */ 863 864 info->dma_error = 0; 865 --- 116 unchanged lines hidden (view full) --- 982 * 983 * This function handles DMA synchronisation that must be done before 984 * an USB transfer is started. 985 *------------------------------------------------------------------------*/ 986void 987usb2_bdma_pre_sync(struct usb_xfer *xfer) 988{ 989 struct usb_page_cache *pc; |
990 usb2_frcount_t nframes; | 990 usb_frcount_t nframes; |
991 992 if (xfer->flags_int.isochronous_xfr) { 993 /* only one frame buffer */ 994 nframes = 1; 995 } else { 996 /* can be multiple frame buffers */ 997 nframes = xfer->nframes; 998 } --- 16 unchanged lines hidden (view full) --- 1015 * 1016 * This function handles DMA synchronisation that must be done after 1017 * an USB transfer is complete. 1018 *------------------------------------------------------------------------*/ 1019void 1020usb2_bdma_post_sync(struct usb_xfer *xfer) 1021{ 1022 struct usb_page_cache *pc; | 991 992 if (xfer->flags_int.isochronous_xfr) { 993 /* only one frame buffer */ 994 nframes = 1; 995 } else { 996 /* can be multiple frame buffers */ 997 nframes = xfer->nframes; 998 } --- 16 unchanged lines hidden (view full) --- 1015 * 1016 * This function handles DMA synchronisation that must be done after 1017 * an USB transfer is complete. 1018 *------------------------------------------------------------------------*/ 1019void 1020usb2_bdma_post_sync(struct usb_xfer *xfer) 1021{ 1022 struct usb_page_cache *pc; |
1023 usb2_frcount_t nframes; | 1023 usb_frcount_t nframes; |
1024 1025 if (xfer->flags_int.isochronous_xfr) { 1026 /* only one frame buffer */ 1027 nframes = 1; 1028 } else { 1029 /* can be multiple frame buffers */ 1030 nframes = xfer->nframes; 1031 } --- 12 unchanged lines hidden --- | 1024 1025 if (xfer->flags_int.isochronous_xfr) { 1026 /* only one frame buffer */ 1027 nframes = 1; 1028 } else { 1029 /* can be multiple frame buffers */ 1030 nframes = xfer->nframes; 1031 } --- 12 unchanged lines hidden --- |