*参照元 [#if9a466b]
#backlinks

*説明 [#g0f618d3]
-パス: [[linux-4.4.1/drivers/base/dma-contiguous.c]]

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


**引数 [#u39d0b9c]
-struct reserved_mem *rmem
--
--[[linux-4.4.1/reserved_mem]]


**返り値 [#v1bbe5d7]
-int
--


**参考 [#v9fe5625]


*実装 [#ddb5468e]
 static int __init rmem_cma_setup(struct reserved_mem *rmem)
 {
         phys_addr_t align = PAGE_SIZE << max(MAX_ORDER - 1, pageblock_order);
         phys_addr_t mask = align - 1;
         unsigned long node = rmem->fdt_node;
         struct cma *cma;
         int err;
 
-
--[[linux-4.4.1/phys_addr_t]]
--[[linux-4.4.1/PAGE_SIZE]]
--[[linux-4.4.1/max()]]
--[[linux-4.4.1/MAX_ORDER]]
--[[linux-4.4.1/pageblock_order(global)]]
--[[linux-4.4.1/cma]]

         if (!of_get_flat_dt_prop(node, "reusable", NULL) ||
             of_get_flat_dt_prop(node, "no-map", NULL))
                 return -EINVAL;
 
-必ず reusable プロパティを持っている必要がある。
-また no-map プロパティを持っていてはならない。
--[[linux-4.4.1/of_get_flat_dt_prop()]]

         if ((rmem->base & mask) || (rmem->size & mask)) {
                 pr_err("Reserved memory: incorrect alignment of CMA region\n");
                 return -EINVAL;
         }
 
-
--[[linux-4.4.1/pr_err()]]

         err = cma_init_reserved_mem(rmem->base, rmem->size, 0, &cma);
         if (err) {
                 pr_err("Reserved memory: unable to setup CMA region\n");
                 return err;
         }
         /* Architecture specific contiguous memory fixup. */
         dma_contiguous_early_fixup(rmem->base, rmem->size);
 
-
--[[linux-4.4.1/cma_init_reserved_mem()]]
--[[linux-4.4.1/dma_contiguous_early_fixup()]]

         if (of_get_flat_dt_prop(node, "linux,cma-default", NULL))
                 dma_contiguous_set_default(cma);
 
-
--[[linux-4.4.1/dma_contiguous_set_default()]]

         rmem->ops = &rmem_cma_ops;
         rmem->priv = cma;
 
-
--[[linux-4.4.1/rmem_cma_ops(global)]]

         pr_info("Reserved memory: created CMA memory pool at %pa, size %ld MiB\n",
                 &rmem->base, (unsigned long)rmem->size / SZ_1M);
 
-
--[[linux-4.4.1/pr_info()]]
--[[linux-4.4.1/SZ_1M]]

         return 0;
 }
 RESERVEDMEM_OF_DECLARE(cma, "shared-dma-pool", rmem_cma_setup);
-
-デバイスツリーの compatible プロパティが compatible = "shared-dma-pool" の値であるノードに対応する。
--[[linux-4.4.1/RESERVEDMEM_OF_DECLARE()]]
--[[linux-4.4.1/__of_table_cma(global)]]


*コメント [#r843592f]

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