*参照元 [#r5a6ed5d]
#backlinks

*説明 [#n84fb878]
-パス: [[linux-4.4.1/lib/swiotlb.c]]

-FIXME: これは何?
--説明


**引数 [#e76d6a19]
-struct device *hwdev
--
--[[linux-4.4.1/device]]
-phys_addr_t tlb_addr
--
--[[linux-4.4.1/phys_addr_t]]
-size_t size
--
-enum dma_data_direction dir
--
--[[linux-4.4.1/dma_data_direction]]
-enum dma_sync_target target
--
--[[linux-4.4.1/dma_sync_target]]


**返り値 [#x8820020]
-なし


**参考 [#r8fb8612]


*実装 [#a11d0007]
 void swiotlb_tbl_sync_single(struct device *hwdev, phys_addr_t tlb_addr,
                              size_t size, enum dma_data_direction dir,
                              enum dma_sync_target target)
 {
         int index = (tlb_addr - io_tlb_start) >> IO_TLB_SHIFT;
         phys_addr_t orig_addr = io_tlb_orig_addr[index];
 
-
--[[linux-4.4.1/io_tlb_start(global)]]
--[[linux-4.4.1/io_tlb_orig_addr(global)]]

         if (orig_addr == INVALID_PHYS_ADDR)
                 return;
         orig_addr += (unsigned long)tlb_addr & ((1 << IO_TLB_SHIFT) - 1);
 
         switch (target) {
         case SYNC_FOR_CPU:
                 if (likely(dir == DMA_FROM_DEVICE || dir == DMA_BIDIRECTIONAL))
                         swiotlb_bounce(orig_addr, tlb_addr,
                                        size, DMA_FROM_DEVICE);
                 else
                         BUG_ON(dir != DMA_TO_DEVICE);
                 break;
-
--[[linux-4.4.1/swiotlb_bounce()]]
--[[linux-4.4.1/BUG_ON()]]

         case SYNC_FOR_DEVICE:
                 if (likely(dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL))
                         swiotlb_bounce(orig_addr, tlb_addr,
                                        size, DMA_TO_DEVICE);
                 else
                         BUG_ON(dir != DMA_FROM_DEVICE);
                 break;
         default:
                 BUG();
-
--[[linux-4.4.1/BUG()]]

         }
 }
 EXPORT_SYMBOL_GPL(swiotlb_tbl_sync_single);
-
--[[linux-4.4.1/EXPORT_SYMBOL_GPL()]]


*コメント [#sa4152b7]


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS