#ifndef _SFI_H | |
#define _SFI_H | |
/* Memory type definitions */ | |
enum sfi_mem_type { | |
SFI_MEM_RESERVED, | |
SFI_LOADER_CODE, | |
SFI_LOADER_DATA, | |
SFI_BOOT_SERVICE_CODE, | |
SFI_BOOT_SERVICE_DATA, | |
SFI_RUNTIME_SERVICE_CODE, | |
SFI_RUNTIME_SERVICE_DATA, | |
SFI_MEM_CONV, | |
SFI_MEM_UNUSABLE, | |
SFI_ACPI_RECLAIM, | |
SFI_ACPI_NVS, | |
SFI_MEM_MMIO, | |
SFI_MEM_IOPORT, | |
SFI_PAL_CODE, | |
SFI_MEM_TYPEMAX, | |
}; | |
struct sfi_mem_entry { | |
enum sfi_mem_type type; | |
u64 phy_start; | |
u64 vir_start; | |
u64 pages; | |
u64 attrib; | |
}__attribute__((packed)); | |
struct sfi_table_header { | |
char signature[4]; | |
u32 length; | |
u8 revision; | |
u8 checksum; | |
char oem_id[6]; | |
char oem_table_id[8]; | |
}__attribute__((packed)); | |
struct sfi_table { | |
struct sfi_table_header header; | |
u64 pentry[1]; | |
}__attribute__((packed)); | |
#define SFI_TBL_HEADER_LEN 24 | |
#define SFI_GET_ENTRY_NUM(ptable, entry) \ | |
((ptable->header.length - SFI_TBL_HEADER_LEN) / \ | |
(sizeof(struct entry))) | |
#define E820_RAM 1 | |
#define E820_RESERVED 2 | |
#define E820_ACPI 3 | |
#define E820_NVS 4 | |
#define E820_UNUSABLE 5 | |
extern void sfi_setup_mmap(struct boot_params *bp, memory_map_t *mb_mmap); | |
extern int sfi_add_e820_entry(struct boot_params *bp, memory_map_t *mb_mmap, u64 start, u64 size, int type); | |
#endif /* _SFI_H */ |