17cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang#ifndef _SFI_H
27cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang#define _SFI_H
37cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang
47cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang/* Memory type definitions */
57cc52cde55aa85061da67d64212e036ac74d9e73Feng Tangenum sfi_mem_type {
67cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	SFI_MEM_RESERVED,
77cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	SFI_LOADER_CODE,
87cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	SFI_LOADER_DATA,
97cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	SFI_BOOT_SERVICE_CODE,
107cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	SFI_BOOT_SERVICE_DATA,
117cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	SFI_RUNTIME_SERVICE_CODE,
127cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	SFI_RUNTIME_SERVICE_DATA,
137cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	SFI_MEM_CONV,
147cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	SFI_MEM_UNUSABLE,
157cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	SFI_ACPI_RECLAIM,
167cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	SFI_ACPI_NVS,
177cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	SFI_MEM_MMIO,
187cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	SFI_MEM_IOPORT,
197cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	SFI_PAL_CODE,
207cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	SFI_MEM_TYPEMAX,
217cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang};
227cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang
237cc52cde55aa85061da67d64212e036ac74d9e73Feng Tangstruct sfi_mem_entry {
247cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	enum sfi_mem_type type;
257cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	u64 phy_start;
267cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	u64 vir_start;
277cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	u64 pages;
287cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	u64 attrib;
299fc3341bd5a5dcfeb4980b75eed2a743c604b638Jacob Pan}__attribute__((packed));
307cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang
317cc52cde55aa85061da67d64212e036ac74d9e73Feng Tangstruct sfi_table_header {
327cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	char signature[4];
337cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	u32 length;
347cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	u8 revision;
357cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	u8 checksum;
367cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	char oem_id[6];
377cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	char oem_table_id[8];
389fc3341bd5a5dcfeb4980b75eed2a743c604b638Jacob Pan}__attribute__((packed));
397cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang
407cc52cde55aa85061da67d64212e036ac74d9e73Feng Tangstruct sfi_table {
417cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	struct sfi_table_header header;
428e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u64 pentry[1];
439fc3341bd5a5dcfeb4980b75eed2a743c604b638Jacob Pan}__attribute__((packed));
447cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang
457cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang#define SFI_TBL_HEADER_LEN      24
467cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang
477cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang#define SFI_GET_ENTRY_NUM(ptable, entry) \
487cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	((ptable->header.length - SFI_TBL_HEADER_LEN) / \
497cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang	(sizeof(struct entry)))
507cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang
517cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang#define E820_RAM	1
527cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang#define E820_RESERVED	2
537cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang#define E820_ACPI	3
547cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang#define E820_NVS	4
557cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang#define E820_UNUSABLE	5
567cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang
578e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kaluginextern void sfi_setup_mmap(struct boot_params *bp, memory_map_t *mb_mmap);
588e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kaluginextern int sfi_add_e820_entry(struct boot_params *bp, memory_map_t *mb_mmap, u64 start, u64 size, int type);
59afcd466aef22166c77f3f41414167972d44acd0bMark F. Brown
607cc52cde55aa85061da67d64212e036ac74d9e73Feng Tang#endif /* _SFI_H */
61