xref: /kvm-unit-tests/lib/x86/fwcfg.h (revision c865f654ffe4c5955038aaf74f702ba62f3eb014)
1 #ifndef _X86_FWCFG_H_
2 #define _X86_FWCFG_H_
3 
4 #include <stdint.h>
5 #include <stdbool.h>
6 
7 #define FW_CFG_SIGNATURE        0x00
8 #define FW_CFG_ID               0x01
9 #define FW_CFG_UUID             0x02
10 #define FW_CFG_RAM_SIZE         0x03
11 #define FW_CFG_NOGRAPHIC        0x04
12 #define FW_CFG_NB_CPUS          0x05
13 #define FW_CFG_MACHINE_ID       0x06
14 #define FW_CFG_KERNEL_ADDR      0x07
15 #define FW_CFG_KERNEL_SIZE      0x08
16 #define FW_CFG_KERNEL_CMDLINE   0x09
17 #define FW_CFG_INITRD_ADDR      0x0a
18 #define FW_CFG_INITRD_SIZE      0x0b
19 #define FW_CFG_BOOT_DEVICE      0x0c
20 #define FW_CFG_NUMA             0x0d
21 #define FW_CFG_BOOT_MENU        0x0e
22 #define FW_CFG_MAX_CPUS         0x0f
23 
24 /* Dummy entries used when running on bare metal */
25 #define FW_CFG_MAX_RAM		0x11
26 
27 #define FW_CFG_NUM_ENTRIES      (FW_CFG_MAX_RAM + 1)
28 
29 #define FW_CFG_WRITE_CHANNEL    0x4000
30 #define FW_CFG_ARCH_LOCAL       0x8000
31 #define FW_CFG_ENTRY_MASK       ~(FW_CFG_WRITE_CHANNEL | FW_CFG_ARCH_LOCAL)
32 
33 #define FW_CFG_INVALID          0xffff
34 
35 #define BIOS_CFG_IOPORT 0x510
36 
37 #define FW_CFG_ACPI_TABLES (FW_CFG_ARCH_LOCAL + 0)
38 #define FW_CFG_SMBIOS_ENTRIES (FW_CFG_ARCH_LOCAL + 1)
39 #define FW_CFG_IRQ0_OVERRIDE (FW_CFG_ARCH_LOCAL + 2)
40 
41 extern bool no_test_device;
42 
test_device_enabled(void)43 static inline bool test_device_enabled(void)
44 {
45 	return !no_test_device;
46 }
47 
48 uint8_t fwcfg_get_u8(unsigned index);
49 uint16_t fwcfg_get_u16(unsigned index);
50 uint32_t fwcfg_get_u32(unsigned index);
51 uint64_t fwcfg_get_u64(unsigned index);
52 
53 unsigned fwcfg_get_nb_cpus(void);
54 
55 #endif
56 
57