diff options
| -rw-r--r-- | lib/swiotlb.c | 45 |
1 files changed, 22 insertions, 23 deletions
diff --git a/lib/swiotlb.c b/lib/swiotlb.c index 875b0c16250c..9719a14649e7 100644 --- a/lib/swiotlb.c +++ b/lib/swiotlb.c | |||
| @@ -594,9 +594,9 @@ swiotlb_unmap_single(struct device *hwdev, dma_addr_t dev_addr, size_t size, | |||
| 594 | * address back to the card, you must first perform a | 594 | * address back to the card, you must first perform a |
| 595 | * swiotlb_dma_sync_for_device, and then the device again owns the buffer | 595 | * swiotlb_dma_sync_for_device, and then the device again owns the buffer |
| 596 | */ | 596 | */ |
| 597 | void | 597 | static inline void |
| 598 | swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr, | 598 | swiotlb_sync_single(struct device *hwdev, dma_addr_t dev_addr, |
| 599 | size_t size, int dir) | 599 | size_t size, int dir) |
| 600 | { | 600 | { |
| 601 | char *dma_addr = phys_to_virt(dev_addr); | 601 | char *dma_addr = phys_to_virt(dev_addr); |
| 602 | 602 | ||
| @@ -609,17 +609,17 @@ swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr, | |||
| 609 | } | 609 | } |
| 610 | 610 | ||
| 611 | void | 611 | void |
| 612 | swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr, | ||
| 613 | size_t size, int dir) | ||
| 614 | { | ||
| 615 | swiotlb_sync_single(hwdev, dev_addr, size, dir); | ||
| 616 | } | ||
| 617 | |||
| 618 | void | ||
| 612 | swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr, | 619 | swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr, |
| 613 | size_t size, int dir) | 620 | size_t size, int dir) |
| 614 | { | 621 | { |
| 615 | char *dma_addr = phys_to_virt(dev_addr); | 622 | swiotlb_sync_single(hwdev, dev_addr, size, dir); |
| 616 | |||
| 617 | if (dir == DMA_NONE) | ||
| 618 | BUG(); | ||
| 619 | if (dma_addr >= io_tlb_start && dma_addr < io_tlb_end) | ||
| 620 | sync_single(hwdev, dma_addr, size, dir); | ||
| 621 | else if (dir == DMA_FROM_DEVICE) | ||
| 622 | mark_clean(dma_addr, size); | ||
| 623 | } | 623 | } |
| 624 | 624 | ||
| 625 | /* | 625 | /* |
| @@ -696,9 +696,9 @@ swiotlb_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nelems, | |||
| 696 | * The same as swiotlb_sync_single_* but for a scatter-gather list, same rules | 696 | * The same as swiotlb_sync_single_* but for a scatter-gather list, same rules |
| 697 | * and usage. | 697 | * and usage. |
| 698 | */ | 698 | */ |
| 699 | void | 699 | static inline void |
| 700 | swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg, | 700 | swiotlb_sync_sg(struct device *hwdev, struct scatterlist *sg, |
| 701 | int nelems, int dir) | 701 | int nelems, int dir) |
| 702 | { | 702 | { |
| 703 | int i; | 703 | int i; |
| 704 | 704 | ||
| @@ -712,18 +712,17 @@ swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg, | |||
| 712 | } | 712 | } |
| 713 | 713 | ||
| 714 | void | 714 | void |
| 715 | swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg, | ||
| 716 | int nelems, int dir) | ||
| 717 | { | ||
| 718 | swiotlb_sync_sg(hwdev, sg, nelems, dir); | ||
| 719 | } | ||
| 720 | |||
| 721 | void | ||
| 715 | swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg, | 722 | swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg, |
| 716 | int nelems, int dir) | 723 | int nelems, int dir) |
| 717 | { | 724 | { |
| 718 | int i; | 725 | swiotlb_sync_sg(hwdev, sg, nelems, dir); |
| 719 | |||
| 720 | if (dir == DMA_NONE) | ||
| 721 | BUG(); | ||
| 722 | |||
| 723 | for (i = 0; i < nelems; i++, sg++) | ||
| 724 | if (sg->dma_address != SG_ENT_PHYS_ADDRESS(sg)) | ||
| 725 | sync_single(hwdev, (void *) sg->dma_address, | ||
| 726 | sg->dma_length, dir); | ||
| 727 | } | 726 | } |
| 728 | 727 | ||
| 729 | int | 728 | int |
