History

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.

Marc-André Lureau committed 8 years ago

Commit 1f57bc11 parent b1cc4093 files · +69 −20Browse files

Showing the changes to include/uapi/linux (1 of 3 files). Show all

Unified · Split

include/uapi/linux/qemu_fw_cfg.h+66−0
@@ -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