1 #ifndef _SFI_H
2 #define _SFI_H
3 
4 /* Memory type definitions */
5 enum sfi_mem_type {
6 	SFI_MEM_RESERVED,
7 	SFI_LOADER_CODE,
8 	SFI_LOADER_DATA,
9 	SFI_BOOT_SERVICE_CODE,
10 	SFI_BOOT_SERVICE_DATA,
11 	SFI_RUNTIME_SERVICE_CODE,
12 	SFI_RUNTIME_SERVICE_DATA,
13 	SFI_MEM_CONV,
14 	SFI_MEM_UNUSABLE,
15 	SFI_ACPI_RECLAIM,
16 	SFI_ACPI_NVS,
17 	SFI_MEM_MMIO,
18 	SFI_MEM_IOPORT,
19 	SFI_PAL_CODE,
20 	SFI_MEM_TYPEMAX,
21 };
22 
23 struct sfi_mem_entry {
24 	enum sfi_mem_type type;
25 	u64 phy_start;
26 	u64 vir_start;
27 	u64 pages;
28 	u64 attrib;
29 }__attribute__((packed));
30 
31 struct sfi_table_header {
32 	char signature[4];
33 	u32 length;
34 	u8 revision;
35 	u8 checksum;
36 	char oem_id[6];
37 	char oem_table_id[8];
38 }__attribute__((packed));
39 
40 struct sfi_table {
41 	struct sfi_table_header header;
42 	u64 pentry[1];
43 }__attribute__((packed));
44 
45 #define SFI_TBL_HEADER_LEN      24
46 
47 #define SFI_GET_ENTRY_NUM(ptable, entry) \
48 	((ptable->header.length - SFI_TBL_HEADER_LEN) / \
49 	(sizeof(struct entry)))
50 
51 #define E820_RAM	1
52 #define E820_RESERVED	2
53 #define E820_ACPI	3
54 #define E820_NVS	4
55 #define E820_UNUSABLE	5
56 
57 extern void sfi_setup_mmap(struct boot_params *bp, memory_map_t *mb_mmap);
58 extern int sfi_add_e820_entry(struct boot_params *bp, memory_map_t *mb_mmap, u64 start, u64 size, int type);
59 
60 #endif /* _SFI_H */
61