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