*参照元 [#e2faba39]
#backlinks

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

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


**引数 [#c95b51a5]
-
-pud_t *pud
--
--[[linux-4.4.1/pud_t]]
-unsigned long addr
--
-unsigned long end
--
-phys_addr_t phys_addr
--
--[[linux-4.4.1/phys_addr_t]]
-pgprot_t prot
--
--[[linux-4.4.1/pgprot_t]]


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


**参考 [#da72efdf]


*実装 [#k3402924]
 static inline int ioremap_pmd_range(pud_t *pud, unsigned long addr,
                 unsigned long end, phys_addr_t phys_addr, pgprot_t prot)
 {
         pmd_t *pmd;
         unsigned long next;
 
-
--[[linux-4.4.1/pmd_t]]

         phys_addr -= addr;
         pmd = pmd_alloc(&init_mm, pud, addr);
         if (!pmd)
                 return -ENOMEM;
-
--[[linux-4.4.1/pmd_alloc()]]
--[[linux-4.4.1/init_mm(global)]]

         do {
                 next = pmd_addr_end(addr, end);
 
-
--[[linux-4.4.1/pmd_addr_end()]]

                 if (ioremap_pmd_enabled() &&
                     ((next - addr) == PMD_SIZE) &&
                     IS_ALIGNED(phys_addr + addr, PMD_SIZE)) {
-
--[[linux-4.4.1/ioremap_pmd_enabled()]]
--[[linux-4.4.1/IS_ALIGNED()]]

                         if (pmd_set_huge(pmd, phys_addr + addr, prot))
                                 continue;
-
--[[linux-4.4.1/pmd_set_huge()]]

                 }
 
                 if (ioremap_pte_range(pmd, addr, next, phys_addr + addr, prot))
                         return -ENOMEM;
-
--[[linux-4.4.1/ioremap_pte_range()]]

         } while (pmd++, addr = next, addr != end);
         return 0;
 }


*コメント [#gaacbf7c]

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