This source file includes following definitions.
- set_permissions
 
- efi_set_mapping_permissions
 
- efi_create_mapping
 
   1 
   2 
   3 
   4 
   5 
   6 #include <linux/efi.h>
   7 #include <asm/efi.h>
   8 #include <asm/mach/map.h>
   9 #include <asm/mmu_context.h>
  10 
  11 static int __init set_permissions(pte_t *ptep, unsigned long addr, void *data)
  12 {
  13         efi_memory_desc_t *md = data;
  14         pte_t pte = *ptep;
  15 
  16         if (md->attribute & EFI_MEMORY_RO)
  17                 pte = set_pte_bit(pte, __pgprot(L_PTE_RDONLY));
  18         if (md->attribute & EFI_MEMORY_XP)
  19                 pte = set_pte_bit(pte, __pgprot(L_PTE_XN));
  20         set_pte_ext(ptep, pte, PTE_EXT_NG);
  21         return 0;
  22 }
  23 
  24 int __init efi_set_mapping_permissions(struct mm_struct *mm,
  25                                        efi_memory_desc_t *md)
  26 {
  27         unsigned long base, size;
  28 
  29         base = md->virt_addr;
  30         size = md->num_pages << EFI_PAGE_SHIFT;
  31 
  32         
  33 
  34 
  35 
  36 
  37 
  38         if (round_down(base + size, SECTION_SIZE) <
  39             round_up(base, SECTION_SIZE) + SECTION_SIZE)
  40                 return apply_to_page_range(mm, base, size, set_permissions, md);
  41 
  42         return 0;
  43 }
  44 
  45 int __init efi_create_mapping(struct mm_struct *mm, efi_memory_desc_t *md)
  46 {
  47         struct map_desc desc = {
  48                 .virtual        = md->virt_addr,
  49                 .pfn            = __phys_to_pfn(md->phys_addr),
  50                 .length         = md->num_pages * EFI_PAGE_SIZE,
  51         };
  52 
  53         
  54 
  55 
  56 
  57 
  58         if (md->attribute & EFI_MEMORY_WB)
  59                 desc.type = MT_MEMORY_RWX;
  60         else if (md->attribute & EFI_MEMORY_WT)
  61                 desc.type = MT_MEMORY_RWX_NONCACHED;
  62         else if (md->attribute & EFI_MEMORY_WC)
  63                 desc.type = MT_DEVICE_WC;
  64         else
  65                 desc.type = MT_DEVICE;
  66 
  67         create_mapping_late(mm, &desc, true);
  68 
  69         
  70 
  71 
  72         if (md->attribute & (EFI_MEMORY_RO | EFI_MEMORY_XP))
  73                 return efi_set_mapping_permissions(mm, md);
  74         return 0;
  75 }