#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 */