*参照元 [#tad152d3] #backlinks *説明 [#v4a9e095] -パス: 複数あり --CONFIG_HAS_DMA 有効: [[linux-4.4.1/include/asm-generic/dma-mapping-common.h]] --CONFIG_HAS_DMA 無効: [[linux-4.4.1/include/asm-generic/dma-mapping-broken.h]] --[[linux-4.4.1/CONFIG_HAS_DMA]] -FIXME: これは何? --説明 **引数 [#y69b0d25] -struct device *dev -- --[[linux-4.4.1/devie]] --[[linux-4.4.1/device]] -size_t size -- -dma_addr_t *dma_handle -- --[[linux-4.4.1/dma_addr_t]] -gfp_t flag -- --[[linux-4.4.1/gfp_t]] -struct dma_attrs *attrs -- --[[linux-4.4.1/dma_attrs]] **返り値 [#td81df23] -なし **参考 [#b9248b86] *実装 [#wf0b2a83] **CONFIG_HAS_DMA 有効: include/asm-generic/dma-mapping-common.h [#udaa297b] static inline void *dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, struct dma_attrs *attrs) { struct dma_map_ops *ops = get_dma_ops(dev); void *cpu_addr; - --[[linux-4.4.1/dma_map_ops]] --[[linux-4.4.1/get_dma_ops()]] BUG_ON(!ops); - --[[linux-4.4.1/BUG_ON()]] if (dma_alloc_from_coherent(dev, size, dma_handle, &cpu_addr)) return cpu_addr; - --[[linux-4.4.1/dma_alloc_from_coherent()]] - --[[linux-4.4.1/cpu_addr(global)]] if (!arch_dma_alloc_attrs(&dev, &flag)) return NULL; if (!ops->alloc) return NULL; - --[[linux-4.4.1/arch_dma_alloc_attrs()]] cpu_addr = ops->alloc(dev, size, dma_handle, flag, attrs); debug_dma_alloc_coherent(dev, size, *dma_handle, cpu_addr); - --alloc の実装については dma_map_ops から辿れます。 --[[linux-4.4.1/dma_map_ops]] --[[linux-4.4.1/debug_dma_alloc_coherent()]] return cpu_addr; } **CONFIG_HAS_DMA 無効: include/asm-generic/dma-mapping-broken.h [#cfa630fa] static inline void *dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, struct dma_attrs *attrs) { /* attrs is not supported and ignored */ return dma_alloc_coherent(dev, size, dma_handle, flag); - --[[linux-4.4.1/dma_alloc_coherent()]] } *コメント [#l6a285fa]