11f57bc12SMarc-André Lureau /* SPDX-License-Identifier: BSD-3-Clause */ 21f57bc12SMarc-André Lureau #ifndef _LINUX_FW_CFG_H 31f57bc12SMarc-André Lureau #define _LINUX_FW_CFG_H 41f57bc12SMarc-André Lureau 51f57bc12SMarc-André Lureau #include <linux/types.h> 61f57bc12SMarc-André Lureau 71f57bc12SMarc-André Lureau #define FW_CFG_ACPI_DEVICE_ID "QEMU0002" 81f57bc12SMarc-André Lureau 91f57bc12SMarc-André Lureau /* selector key values for "well-known" fw_cfg entries */ 101f57bc12SMarc-André Lureau #define FW_CFG_SIGNATURE 0x00 111f57bc12SMarc-André Lureau #define FW_CFG_ID 0x01 121f57bc12SMarc-André Lureau #define FW_CFG_UUID 0x02 131f57bc12SMarc-André Lureau #define FW_CFG_RAM_SIZE 0x03 141f57bc12SMarc-André Lureau #define FW_CFG_NOGRAPHIC 0x04 151f57bc12SMarc-André Lureau #define FW_CFG_NB_CPUS 0x05 161f57bc12SMarc-André Lureau #define FW_CFG_MACHINE_ID 0x06 171f57bc12SMarc-André Lureau #define FW_CFG_KERNEL_ADDR 0x07 181f57bc12SMarc-André Lureau #define FW_CFG_KERNEL_SIZE 0x08 191f57bc12SMarc-André Lureau #define FW_CFG_KERNEL_CMDLINE 0x09 201f57bc12SMarc-André Lureau #define FW_CFG_INITRD_ADDR 0x0a 211f57bc12SMarc-André Lureau #define FW_CFG_INITRD_SIZE 0x0b 221f57bc12SMarc-André Lureau #define FW_CFG_BOOT_DEVICE 0x0c 231f57bc12SMarc-André Lureau #define FW_CFG_NUMA 0x0d 241f57bc12SMarc-André Lureau #define FW_CFG_BOOT_MENU 0x0e 251f57bc12SMarc-André Lureau #define FW_CFG_MAX_CPUS 0x0f 261f57bc12SMarc-André Lureau #define FW_CFG_KERNEL_ENTRY 0x10 271f57bc12SMarc-André Lureau #define FW_CFG_KERNEL_DATA 0x11 281f57bc12SMarc-André Lureau #define FW_CFG_INITRD_DATA 0x12 291f57bc12SMarc-André Lureau #define FW_CFG_CMDLINE_ADDR 0x13 301f57bc12SMarc-André Lureau #define FW_CFG_CMDLINE_SIZE 0x14 311f57bc12SMarc-André Lureau #define FW_CFG_CMDLINE_DATA 0x15 321f57bc12SMarc-André Lureau #define FW_CFG_SETUP_ADDR 0x16 331f57bc12SMarc-André Lureau #define FW_CFG_SETUP_SIZE 0x17 341f57bc12SMarc-André Lureau #define FW_CFG_SETUP_DATA 0x18 351f57bc12SMarc-André Lureau #define FW_CFG_FILE_DIR 0x19 361f57bc12SMarc-André Lureau 371f57bc12SMarc-André Lureau #define FW_CFG_FILE_FIRST 0x20 381f57bc12SMarc-André Lureau #define FW_CFG_FILE_SLOTS_MIN 0x10 391f57bc12SMarc-André Lureau 401f57bc12SMarc-André Lureau #define FW_CFG_WRITE_CHANNEL 0x4000 411f57bc12SMarc-André Lureau #define FW_CFG_ARCH_LOCAL 0x8000 421f57bc12SMarc-André Lureau #define FW_CFG_ENTRY_MASK (~(FW_CFG_WRITE_CHANNEL | FW_CFG_ARCH_LOCAL)) 431f57bc12SMarc-André Lureau 441f57bc12SMarc-André Lureau #define FW_CFG_INVALID 0xffff 451f57bc12SMarc-André Lureau 461f57bc12SMarc-André Lureau /* width in bytes of fw_cfg control register */ 471f57bc12SMarc-André Lureau #define FW_CFG_CTL_SIZE 0x02 481f57bc12SMarc-André Lureau 491f57bc12SMarc-André Lureau /* fw_cfg "file name" is up to 56 characters (including terminating nul) */ 501f57bc12SMarc-André Lureau #define FW_CFG_MAX_FILE_PATH 56 511f57bc12SMarc-André Lureau 521f57bc12SMarc-André Lureau /* size in bytes of fw_cfg signature */ 531f57bc12SMarc-André Lureau #define FW_CFG_SIG_SIZE 4 541f57bc12SMarc-André Lureau 551f57bc12SMarc-André Lureau /* FW_CFG_ID bits */ 561f57bc12SMarc-André Lureau #define FW_CFG_VERSION 0x01 57*2d6d60a3SMarc-André Lureau #define FW_CFG_VERSION_DMA 0x02 581f57bc12SMarc-André Lureau 591f57bc12SMarc-André Lureau /* fw_cfg file directory entry type */ 601f57bc12SMarc-André Lureau struct fw_cfg_file { 611f57bc12SMarc-André Lureau __be32 size; 621f57bc12SMarc-André Lureau __be16 select; 631f57bc12SMarc-André Lureau __u16 reserved; 641f57bc12SMarc-André Lureau char name[FW_CFG_MAX_FILE_PATH]; 651f57bc12SMarc-André Lureau }; 661f57bc12SMarc-André Lureau 67*2d6d60a3SMarc-André Lureau /* FW_CFG_DMA_CONTROL bits */ 68*2d6d60a3SMarc-André Lureau #define FW_CFG_DMA_CTL_ERROR 0x01 69*2d6d60a3SMarc-André Lureau #define FW_CFG_DMA_CTL_READ 0x02 70*2d6d60a3SMarc-André Lureau #define FW_CFG_DMA_CTL_SKIP 0x04 71*2d6d60a3SMarc-André Lureau #define FW_CFG_DMA_CTL_SELECT 0x08 72*2d6d60a3SMarc-André Lureau #define FW_CFG_DMA_CTL_WRITE 0x10 73*2d6d60a3SMarc-André Lureau 74*2d6d60a3SMarc-André Lureau #define FW_CFG_DMA_SIGNATURE 0x51454d5520434647ULL /* "QEMU CFG" */ 75*2d6d60a3SMarc-André Lureau 76*2d6d60a3SMarc-André Lureau /* Control as first field allows for different structures selected by this 77*2d6d60a3SMarc-André Lureau * field, which might be useful in the future 78*2d6d60a3SMarc-André Lureau */ 79*2d6d60a3SMarc-André Lureau struct fw_cfg_dma_access { 80*2d6d60a3SMarc-André Lureau __be32 control; 81*2d6d60a3SMarc-André Lureau __be32 length; 82*2d6d60a3SMarc-André Lureau __be64 address; 83*2d6d60a3SMarc-André Lureau }; 84*2d6d60a3SMarc-André Lureau 85*2d6d60a3SMarc-André Lureau #define FW_CFG_VMCOREINFO_FILENAME "etc/vmcoreinfo" 86*2d6d60a3SMarc-André Lureau 87*2d6d60a3SMarc-André Lureau #define FW_CFG_VMCOREINFO_FORMAT_NONE 0x0 88*2d6d60a3SMarc-André Lureau #define FW_CFG_VMCOREINFO_FORMAT_ELF 0x1 89*2d6d60a3SMarc-André Lureau 90*2d6d60a3SMarc-André Lureau struct fw_cfg_vmcoreinfo { 91*2d6d60a3SMarc-André Lureau __le16 host_format; 92*2d6d60a3SMarc-André Lureau __le16 guest_format; 93*2d6d60a3SMarc-André Lureau __le32 size; 94*2d6d60a3SMarc-André Lureau __le64 paddr; 95*2d6d60a3SMarc-André Lureau }; 96*2d6d60a3SMarc-André Lureau 971f57bc12SMarc-André Lureau #endif 98