*参照元 [#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]