diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2018-02-28 10:06:11 -0500 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2018-03-19 21:17:40 -0400 |
commit | 1f57bc12d87dda2d56b564d35f21b9e6bdb2bb2c (patch) | |
tree | d4571d43aab1c544819799cb1ebe9deffde49e24 /include/uapi/linux/qemu_fw_cfg.h | |
parent | b1cc4097d15c29725060f86ecec20a1e635a541f (diff) |
fw_cfg: add a public uapi header
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.
Suggested-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'include/uapi/linux/qemu_fw_cfg.h')
-rw-r--r-- | include/uapi/linux/qemu_fw_cfg.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/include/uapi/linux/qemu_fw_cfg.h b/include/uapi/linux/qemu_fw_cfg.h new file mode 100644 index 000000000000..c698ac3812f6 --- /dev/null +++ b/include/uapi/linux/qemu_fw_cfg.h | |||
@@ -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 | ||