*参照元 [#w9fadc0a]
#backlinks

*説明 [#qc1f353d]
-パス: 複数あり
--CONFIG_HAVE_DMA_ATTRS 有効: [[linux-4.4.1/include/asm-generic/dma-mapping-common.h]]
--CONFIG_HAVE_DMA_ATTRS 無効: [[linux-4.4.1/include/linux/dma-mapping.h]]
--[[linux-4.4.1/CONFIG_HAVE_DMA_ATTRS]]

-FIXME: バッファの仮想アドレス(CPU がアクセスするアドレス)を受け取り、バッファにデバイスがアクセス出来るようにセットアップし、DMA アドレス(DMA を行うデバイスがアクセスするアドレス)を返す。


**引数 [#ee2fee2e]
-struct device *dev
--DMA を行うデバイス。
--[[linux-4.4.1/device]]
-void *ptr
--バッファの仮想アドレス、すなわち CPU がアクセスするアドレス。
-size_t size
--バッファサイズ。
-enum dma_data_direction dir
--DMA の方向。DMA_TO_DEVICE もしくは DMA_FROM_DEVICE を指定する。
--[[linux-4.4.1/dma_data_direction]]
-struct dma_attrs *attrs
--
--[[linux-4.4.1/dma_attrs]]


**返り値 [#pafb0c86]
-dma_addr_t
--バッファの DMA アドレス、すなわち DMA を行うデバイスがアクセスするアドレス。


**参考 [#fbd94e7b]


*実装 [#r116de2a]

**CONFIG_HAVE_DMA_ATTRS 有効: include/asm-generic/dma-mapping-common.h [#a3941f6b]

 static inline dma_addr_t dma_map_single_attrs(struct device *dev, void *ptr,
                                               size_t size,
                                               enum dma_data_direction dir,
                                               struct dma_attrs *attrs)
 {
         struct dma_map_ops *ops = get_dma_ops(dev);
         dma_addr_t addr;
 
-
--[[linux-4.4.1/dma_map_ops]]
--[[linux-4.4.1/get_dma_ops()]]
--[[linux-4.4.1/dma_addr_t]]

         kmemcheck_mark_initialized(ptr, size);
         BUG_ON(!valid_dma_direction(dir));
-
--[[linux-4.4.1/kmemcheck_mark_initialized()]]
--[[linux-4.4.1/BUG_ON()]]
--[[linux-4.4.1/valid_dma_direction()]]

         addr = ops->map_page(dev, virt_to_page(ptr),
                              (unsigned long)ptr & ~PAGE_MASK, size,
                              dir, attrs);
-
--[[linux-4.4.1/dma_map_ops]]
--[[linux-4.4.1/virt_to_page()]]

         debug_dma_map_page(dev, virt_to_page(ptr),
                            (unsigned long)ptr & ~PAGE_MASK, size,
                            dir, addr, true);
-
--[[linux-4.4.1/debug_dma_map_page()]]

         return addr;
 }


**CONFIG_HAVE_DMA_ATTRS 無効: include/linux/dma-mapping.h [#mef26331]

 #define dma_map_single_attrs(dev, cpu_addr, size, dir, attrs) \
         dma_map_single(dev, cpu_addr, size, dir)
-
--[[linux-4.4.1/dma_map_single()]]


*コメント [#xc92fb0b]

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