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 | |