qemu/include/standard-headers/linux/qemu_fw_cfg.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause */
   2#ifndef _LINUX_FW_CFG_H
   3#define _LINUX_FW_CFG_H
   4
   5#include "standard-headers/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#define FW_CFG_VERSION_DMA      0x02
  58
  59/* fw_cfg file directory entry type */
  60struct fw_cfg_file {
  61        uint32_t size;
  62        uint16_t select;
  63        uint16_t reserved;
  64        char name[FW_CFG_MAX_FILE_PATH];
  65};
  66
  67/* FW_CFG_DMA_CONTROL bits */
  68#define FW_CFG_DMA_CTL_ERROR    0x01
  69#define FW_CFG_DMA_CTL_READ     0x02
  70#define FW_CFG_DMA_CTL_SKIP     0x04
  71#define FW_CFG_DMA_CTL_SELECT   0x08
  72#define FW_CFG_DMA_CTL_WRITE    0x10
  73
  74#define FW_CFG_DMA_SIGNATURE    0x51454d5520434647ULL /* "QEMU CFG" */
  75
  76/* Control as first field allows for different structures selected by this
  77 * field, which might be useful in the future
  78 */
  79struct fw_cfg_dma_access {
  80        uint32_t control;
  81        uint32_t length;
  82        uint64_t address;
  83};
  84
  85#define FW_CFG_VMCOREINFO_FILENAME "etc/vmcoreinfo"
  86
  87#define FW_CFG_VMCOREINFO_FORMAT_NONE 0x0
  88#define FW_CFG_VMCOREINFO_FORMAT_ELF 0x1
  89
  90struct fw_cfg_vmcoreinfo {
  91        uint16_t host_format;
  92        uint16_t guest_format;
  93        uint32_t size;
  94        uint64_t paddr;
  95};
  96
  97#endif
  98