1*4882a593Smuzhiyun /* SPDX-License-Identifier: BSD-3-Clause */ 2*4882a593Smuzhiyun #ifndef _LINUX_FW_CFG_H 3*4882a593Smuzhiyun #define _LINUX_FW_CFG_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/types.h> 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #define FW_CFG_ACPI_DEVICE_ID "QEMU0002" 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun /* selector key values for "well-known" fw_cfg entries */ 10*4882a593Smuzhiyun #define FW_CFG_SIGNATURE 0x00 11*4882a593Smuzhiyun #define FW_CFG_ID 0x01 12*4882a593Smuzhiyun #define FW_CFG_UUID 0x02 13*4882a593Smuzhiyun #define FW_CFG_RAM_SIZE 0x03 14*4882a593Smuzhiyun #define FW_CFG_NOGRAPHIC 0x04 15*4882a593Smuzhiyun #define FW_CFG_NB_CPUS 0x05 16*4882a593Smuzhiyun #define FW_CFG_MACHINE_ID 0x06 17*4882a593Smuzhiyun #define FW_CFG_KERNEL_ADDR 0x07 18*4882a593Smuzhiyun #define FW_CFG_KERNEL_SIZE 0x08 19*4882a593Smuzhiyun #define FW_CFG_KERNEL_CMDLINE 0x09 20*4882a593Smuzhiyun #define FW_CFG_INITRD_ADDR 0x0a 21*4882a593Smuzhiyun #define FW_CFG_INITRD_SIZE 0x0b 22*4882a593Smuzhiyun #define FW_CFG_BOOT_DEVICE 0x0c 23*4882a593Smuzhiyun #define FW_CFG_NUMA 0x0d 24*4882a593Smuzhiyun #define FW_CFG_BOOT_MENU 0x0e 25*4882a593Smuzhiyun #define FW_CFG_MAX_CPUS 0x0f 26*4882a593Smuzhiyun #define FW_CFG_KERNEL_ENTRY 0x10 27*4882a593Smuzhiyun #define FW_CFG_KERNEL_DATA 0x11 28*4882a593Smuzhiyun #define FW_CFG_INITRD_DATA 0x12 29*4882a593Smuzhiyun #define FW_CFG_CMDLINE_ADDR 0x13 30*4882a593Smuzhiyun #define FW_CFG_CMDLINE_SIZE 0x14 31*4882a593Smuzhiyun #define FW_CFG_CMDLINE_DATA 0x15 32*4882a593Smuzhiyun #define FW_CFG_SETUP_ADDR 0x16 33*4882a593Smuzhiyun #define FW_CFG_SETUP_SIZE 0x17 34*4882a593Smuzhiyun #define FW_CFG_SETUP_DATA 0x18 35*4882a593Smuzhiyun #define FW_CFG_FILE_DIR 0x19 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun #define FW_CFG_FILE_FIRST 0x20 38*4882a593Smuzhiyun #define FW_CFG_FILE_SLOTS_MIN 0x10 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #define FW_CFG_WRITE_CHANNEL 0x4000 41*4882a593Smuzhiyun #define FW_CFG_ARCH_LOCAL 0x8000 42*4882a593Smuzhiyun #define FW_CFG_ENTRY_MASK (~(FW_CFG_WRITE_CHANNEL | FW_CFG_ARCH_LOCAL)) 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun #define FW_CFG_INVALID 0xffff 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun /* width in bytes of fw_cfg control register */ 47*4882a593Smuzhiyun #define FW_CFG_CTL_SIZE 0x02 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun /* fw_cfg "file name" is up to 56 characters (including terminating nul) */ 50*4882a593Smuzhiyun #define FW_CFG_MAX_FILE_PATH 56 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun /* size in bytes of fw_cfg signature */ 53*4882a593Smuzhiyun #define FW_CFG_SIG_SIZE 4 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun /* FW_CFG_ID bits */ 56*4882a593Smuzhiyun #define FW_CFG_VERSION 0x01 57*4882a593Smuzhiyun #define FW_CFG_VERSION_DMA 0x02 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun /* fw_cfg file directory entry type */ 60*4882a593Smuzhiyun struct fw_cfg_file { 61*4882a593Smuzhiyun __be32 size; 62*4882a593Smuzhiyun __be16 select; 63*4882a593Smuzhiyun __u16 reserved; 64*4882a593Smuzhiyun char name[FW_CFG_MAX_FILE_PATH]; 65*4882a593Smuzhiyun }; 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun /* FW_CFG_DMA_CONTROL bits */ 68*4882a593Smuzhiyun #define FW_CFG_DMA_CTL_ERROR 0x01 69*4882a593Smuzhiyun #define FW_CFG_DMA_CTL_READ 0x02 70*4882a593Smuzhiyun #define FW_CFG_DMA_CTL_SKIP 0x04 71*4882a593Smuzhiyun #define FW_CFG_DMA_CTL_SELECT 0x08 72*4882a593Smuzhiyun #define FW_CFG_DMA_CTL_WRITE 0x10 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun #define FW_CFG_DMA_SIGNATURE 0x51454d5520434647ULL /* "QEMU CFG" */ 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun /* Control as first field allows for different structures selected by this 77*4882a593Smuzhiyun * field, which might be useful in the future 78*4882a593Smuzhiyun */ 79*4882a593Smuzhiyun struct fw_cfg_dma_access { 80*4882a593Smuzhiyun __be32 control; 81*4882a593Smuzhiyun __be32 length; 82*4882a593Smuzhiyun __be64 address; 83*4882a593Smuzhiyun }; 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun #define FW_CFG_VMCOREINFO_FILENAME "etc/vmcoreinfo" 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun #define FW_CFG_VMCOREINFO_FORMAT_NONE 0x0 88*4882a593Smuzhiyun #define FW_CFG_VMCOREINFO_FORMAT_ELF 0x1 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun struct fw_cfg_vmcoreinfo { 91*4882a593Smuzhiyun __le16 host_format; 92*4882a593Smuzhiyun __le16 guest_format; 93*4882a593Smuzhiyun __le32 size; 94*4882a593Smuzhiyun __le64 paddr; 95*4882a593Smuzhiyun }; 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun #endif 98