]> git.neil.brown.name Git - history.git/commitdiff
More EFI fixes.
authorDavid Mosberger <davidm@wailua.hpl.hp.com>
Wed, 10 Apr 2002 04:56:07 +0000 (21:56 -0700)
committerDavid Mosberger <davidm@wailua.hpl.hp.com>
Wed, 10 Apr 2002 04:56:07 +0000 (21:56 -0700)
arch/ia64/kernel/efi.c

index 06fef3ff841687827ca37c4e00e3485845561f92..9c35117d738ab5178082b48c7162af91ce999473 100644 (file)
@@ -259,7 +259,8 @@ efi_map_pal_code (void)
 
                mask  = ~((1 << IA64_GRANULE_SHIFT) - 1);
                printk("CPU %d: mapping PAL code [0x%lx-0x%lx) into [0x%lx-0x%lx)\n",
-                      smp_processor_id(), md->phys_addr, md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT),
+                      smp_processor_id(), md->phys_addr,
+                      md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT),
                       vaddr & mask, (vaddr & mask) + IA64_GRANULE_SIZE);
 
                /*
@@ -375,7 +376,8 @@ efi_init (void)
                        md = p;
                        printk("mem%02u: type=%u, attr=0x%lx, range=[0x%016lx-0x%016lx) (%luMB)\n",
                               i, md->type, md->attribute, md->phys_addr,
-                              md->phys_addr + (md->num_pages<<EFI_PAGE_SHIFT) - 1, md->num_pages >> 8);
+                              md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1,
+                              md->num_pages >> (20 - EFI_PAGE_SHIFT));
                }
        }
 #endif
@@ -495,6 +497,7 @@ efi_mem_type (u64 phys_addr)
 
        for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) {
                md = p;
+
                if ((md->phys_addr <= phys_addr) && (phys_addr <=
                    (md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1)))
                         return md->type;
@@ -502,8 +505,29 @@ efi_mem_type (u64 phys_addr)
        return 0;
 }
 
+u64
+efi_mem_attributes (u64 phys_addr)
+{
+       void *efi_map_start, *efi_map_end, *p;
+       efi_memory_desc_t *md;
+       u64 efi_desc_size;
+
+       efi_map_start = __va(ia64_boot_param->efi_memmap);
+       efi_map_end   = efi_map_start + ia64_boot_param->efi_memmap_size;
+       efi_desc_size = ia64_boot_param->efi_memdesc_size;
+
+       for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) {
+               md = p;
+
+               if ((md->phys_addr <= phys_addr) && (phys_addr <=
+                   (md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1)))
+                       return md->attribute;
+       }
+       return 0;
+}
+
 static void __exit
-efivars_exit(void)
+efivars_exit (void)
 {
 #ifdef CONFIG_PROC_FS
        remove_proc_entry(efi_dir->name, NULL);