|
Lines 9-14
Link Here
|
| 9 |
#include <linux/efi.h> |
9 |
#include <linux/efi.h> |
| 10 |
#include <linux/io.h> |
10 |
#include <linux/io.h> |
| 11 |
#include <asm/early_ioremap.h> |
11 |
#include <asm/early_ioremap.h> |
|
|
12 |
#include <linux/memblock.h> |
| 13 |
#include <linux/slab.h> |
| 14 |
|
| 15 |
static phys_addr_t __init __efi_memmap_alloc_early(unsigned long size) |
| 16 |
{ |
| 17 |
return memblock_alloc(size, 0); |
| 18 |
} |
| 19 |
|
| 20 |
static phys_addr_t __init __efi_memmap_alloc_late(unsigned long size) |
| 21 |
{ |
| 22 |
unsigned int order = get_order(size); |
| 23 |
struct page *p = alloc_pages(GFP_KERNEL, order); |
| 24 |
|
| 25 |
if (!p) |
| 26 |
return 0; |
| 27 |
|
| 28 |
return PFN_PHYS(page_to_pfn(p)); |
| 29 |
} |
| 30 |
|
| 31 |
/** |
| 32 |
* efi_memmap_alloc - Allocate memory for the EFI memory map |
| 33 |
* @num_entries: Number of entries in the allocated map. |
| 34 |
* |
| 35 |
* Depending on whether mm_init() has already been invoked or not, |
| 36 |
* either memblock or "normal" page allocation is used. |
| 37 |
* |
| 38 |
* Returns the physical address of the allocated memory map on |
| 39 |
* success, zero on failure. |
| 40 |
*/ |
| 41 |
phys_addr_t __init efi_memmap_alloc(unsigned int num_entries) |
| 42 |
{ |
| 43 |
unsigned long size = num_entries * efi.memmap.desc_size; |
| 44 |
|
| 45 |
if (slab_is_available()) |
| 46 |
return __efi_memmap_alloc_late(size); |
| 47 |
|
| 48 |
return __efi_memmap_alloc_early(size); |
| 49 |
} |
| 12 |
|
50 |
|
| 13 |
/** |
51 |
/** |
| 14 |
* __efi_memmap_init - Common code for mapping the EFI memory map |
52 |
* __efi_memmap_init - Common code for mapping the EFI memory map |