Create a common header file for well-known values and structures to be shared by the Linux kernel with qemu or other projects. It is based from qemu/docs/specs/fw_cfg.txt which references qemu/include/hw/nvram/fw_cfg_keys.h "for the most up-to-date and authoritative list" & vmcoreinfo.txt. Those files don't have an explicit license, but qemu/hw/nvram/fw_cfg.c is BSD-license, so Michael S. Tsirkin suggested to use the same license. The patch intentionally left out DMA & vmcoreinfo structures & defines, which are added in the commits making usage of it.
Showing the changes to include/uapi/linux (1 of 3 files). Show all
Unified · Split
| @@ -0,0 +1,66 @@ | |||
| 1 | /* SPDX-License-Identifier: BSD-3-Clause */ | ||
| 2 | #ifndef _LINUX_FW_CFG_H | ||
| 3 | #define _LINUX_FW_CFG_H | ||
| 4 | |||
| 5 | #include <linux/types.h> | ||
| 6 | |||
| 7 | #define FW_CFG_ACPI_DEVICE_ID "QEMU0002" | ||
| 8 | |||
| 9 | /* selector key values for "well-known" fw_cfg entries */ | ||
| 10 | #define FW_CFG_SIGNATURE 0x00 | ||
| 11 | #define FW_CFG_ID 0x01 | ||
| 12 | #define FW_CFG_UUID 0x02 | ||
| 13 | #define FW_CFG_RAM_SIZE 0x03 | ||
| 14 | #define FW_CFG_NOGRAPHIC 0x04 | ||
| 15 | #define FW_CFG_NB_CPUS 0x05 | ||
| 16 | #define FW_CFG_MACHINE_ID 0x06 | ||
| 17 | #define FW_CFG_KERNEL_ADDR 0x07 | ||
| 18 | #define FW_CFG_KERNEL_SIZE 0x08 | ||
| 19 | #define FW_CFG_KERNEL_CMDLINE 0x09 | ||
| 20 | #define FW_CFG_INITRD_ADDR 0x0a | ||
| 21 | #define FW_CFG_INITRD_SIZE 0x0b | ||
| 22 | #define FW_CFG_BOOT_DEVICE 0x0c | ||
| 23 | #define FW_CFG_NUMA 0x0d | ||
| 24 | #define FW_CFG_BOOT_MENU 0x0e | ||
| 25 | #define FW_CFG_MAX_CPUS 0x0f | ||
| 26 | #define FW_CFG_KERNEL_ENTRY 0x10 | ||
| 27 | #define FW_CFG_KERNEL_DATA 0x11 | ||
| 28 | #define FW_CFG_INITRD_DATA 0x12 | ||
| 29 | #define FW_CFG_CMDLINE_ADDR 0x13 | ||
| 30 | #define FW_CFG_CMDLINE_SIZE 0x14 | ||
| 31 | #define FW_CFG_CMDLINE_DATA 0x15 | ||
| 32 | #define FW_CFG_SETUP_ADDR 0x16 | ||
| 33 | #define FW_CFG_SETUP_SIZE 0x17 | ||
| 34 | #define FW_CFG_SETUP_DATA 0x18 | ||
| 35 | #define FW_CFG_FILE_DIR 0x19 | ||
| 36 | |||
| 37 | #define FW_CFG_FILE_FIRST 0x20 | ||
| 38 | #define FW_CFG_FILE_SLOTS_MIN 0x10 | ||
| 39 | |||
| 40 | #define FW_CFG_WRITE_CHANNEL 0x4000 | ||
| 41 | #define FW_CFG_ARCH_LOCAL 0x8000 | ||
| 42 | #define FW_CFG_ENTRY_MASK (~(FW_CFG_WRITE_CHANNEL | FW_CFG_ARCH_LOCAL)) | ||
| 43 | |||
| 44 | #define FW_CFG_INVALID 0xffff | ||
| 45 | |||
| 46 | /* width in bytes of fw_cfg control register */ | ||
| 47 | #define FW_CFG_CTL_SIZE 0x02 | ||
| 48 | |||
| 49 | /* fw_cfg "file name" is up to 56 characters (including terminating nul) */ | ||
| 50 | #define FW_CFG_MAX_FILE_PATH 56 | ||
| 51 | |||
| 52 | /* size in bytes of fw_cfg signature */ | ||
| 53 | #define FW_CFG_SIG_SIZE 4 | ||
| 54 | |||
| 55 | /* FW_CFG_ID bits */ | ||
| 56 | #define FW_CFG_VERSION 0x01 | ||
| 57 | |||
| 58 | /* fw_cfg file directory entry type */ | ||
| 59 | struct fw_cfg_file { | ||
| 60 | __be32 size; | ||
| 61 | __be16 select; | ||
| 62 | __u16 reserved; | ||
| 63 | char name[FW_CFG_MAX_FILE_PATH]; | ||
| 64 | }; | ||
| 65 | |||
| 66 | #endif | ||