diff options
-rw-r--r-- | lib/swiotlb.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/lib/swiotlb.c b/lib/swiotlb.c index a009055140ec..783aff00024c 100644 --- a/lib/swiotlb.c +++ b/lib/swiotlb.c | |||
@@ -361,25 +361,22 @@ static void swiotlb_bounce(phys_addr_t phys, char *dma_addr, size_t size, | |||
361 | } | 361 | } |
362 | } | 362 | } |
363 | 363 | ||
364 | /* | 364 | void *swiotlb_tbl_map_single(struct device *hwdev, dma_addr_t tbl_dma_addr, |
365 | * Allocates bounce buffer and returns its kernel virtual address. | 365 | phys_addr_t phys, size_t size, int dir) |
366 | */ | ||
367 | static void * | ||
368 | map_single(struct device *hwdev, phys_addr_t phys, size_t size, int dir) | ||
369 | { | 366 | { |
370 | unsigned long flags; | 367 | unsigned long flags; |
371 | char *dma_addr; | 368 | char *dma_addr; |
372 | unsigned int nslots, stride, index, wrap; | 369 | unsigned int nslots, stride, index, wrap; |
373 | int i; | 370 | int i; |
374 | unsigned long start_dma_addr; | ||
375 | unsigned long mask; | 371 | unsigned long mask; |
376 | unsigned long offset_slots; | 372 | unsigned long offset_slots; |
377 | unsigned long max_slots; | 373 | unsigned long max_slots; |
378 | 374 | ||
379 | mask = dma_get_seg_boundary(hwdev); | 375 | mask = dma_get_seg_boundary(hwdev); |
380 | start_dma_addr = swiotlb_virt_to_bus(hwdev, io_tlb_start) & mask; | ||
381 | 376 | ||
382 | offset_slots = ALIGN(start_dma_addr, 1 << IO_TLB_SHIFT) >> IO_TLB_SHIFT; | 377 | tbl_dma_addr &= mask; |
378 | |||
379 | offset_slots = ALIGN(tbl_dma_addr, 1 << IO_TLB_SHIFT) >> IO_TLB_SHIFT; | ||
383 | 380 | ||
384 | /* | 381 | /* |
385 | * Carefully handle integer overflow which can occur when mask == ~0UL. | 382 | * Carefully handle integer overflow which can occur when mask == ~0UL. |
@@ -468,6 +465,18 @@ found: | |||
468 | } | 465 | } |
469 | 466 | ||
470 | /* | 467 | /* |
468 | * Allocates bounce buffer and returns its kernel virtual address. | ||
469 | */ | ||
470 | |||
471 | static void * | ||
472 | map_single(struct device *hwdev, phys_addr_t phys, size_t size, int dir) | ||
473 | { | ||
474 | dma_addr_t start_dma_addr = swiotlb_virt_to_bus(hwdev, io_tlb_start); | ||
475 | |||
476 | return swiotlb_tbl_map_single(hwdev, start_dma_addr, phys, size, dir); | ||
477 | } | ||
478 | |||
479 | /* | ||
471 | * dma_addr is the kernel virtual address of the bounce buffer to unmap. | 480 | * dma_addr is the kernel virtual address of the bounce buffer to unmap. |
472 | */ | 481 | */ |
473 | static void | 482 | static void |