/** @file Macro and type definitions corresponding to the QEMU fw_cfg interface. Refer to "docs/specs/fw_cfg.txt" in the QEMU source directory. Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.
Copyright (C) 2013 - 2017, Red Hat, Inc. SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef __FW_CFG_H__ #define __FW_CFG_H__ #include // // The size, in bytes, of names of firmware configuration files, including at // least one terminating NUL byte. // #define QEMU_FW_CFG_FNAME_SIZE 56 // // If the following bit is set in the UINT32 fw_cfg revision / feature bitmap // -- read from key 0x0001 with the basic IO Port or MMIO method --, then the // DMA interface is available. // #define FW_CFG_F_DMA BIT1 // // Macros for the FW_CFG_DMA_ACCESS.Control bitmap (in native encoding). // #define FW_CFG_DMA_CTL_ERROR BIT0 #define FW_CFG_DMA_CTL_READ BIT1 #define FW_CFG_DMA_CTL_SKIP BIT2 #define FW_CFG_DMA_CTL_SELECT BIT3 #define FW_CFG_DMA_CTL_WRITE BIT4 // // The fw_cfg registers can be found at these IO Ports, on the IO-mapped // platforms (Ia32 and X64). // #define FW_CFG_IO_SELECTOR 0x510 #define FW_CFG_IO_DATA 0x511 #define FW_CFG_IO_DMA_ADDRESS 0x514 // // Numerically defined keys. // typedef enum { QemuFwCfgItemSignature = 0x0000, QemuFwCfgItemInterfaceVersion = 0x0001, QemuFwCfgItemSystemUuid = 0x0002, QemuFwCfgItemRamSize = 0x0003, QemuFwCfgItemGraphicsEnabled = 0x0004, QemuFwCfgItemSmpCpuCount = 0x0005, QemuFwCfgItemMachineId = 0x0006, QemuFwCfgItemKernelAddress = 0x0007, QemuFwCfgItemKernelSize = 0x0008, QemuFwCfgItemKernelCommandLine = 0x0009, QemuFwCfgItemInitrdAddress = 0x000a, QemuFwCfgItemInitrdSize = 0x000b, QemuFwCfgItemBootDevice = 0x000c, QemuFwCfgItemNumaData = 0x000d, QemuFwCfgItemBootMenu = 0x000e, QemuFwCfgItemMaximumCpuCount = 0x000f, QemuFwCfgItemKernelEntry = 0x0010, QemuFwCfgItemKernelData = 0x0011, QemuFwCfgItemInitrdData = 0x0012, QemuFwCfgItemCommandLineAddress = 0x0013, QemuFwCfgItemCommandLineSize = 0x0014, QemuFwCfgItemCommandLineData = 0x0015, QemuFwCfgItemKernelSetupAddress = 0x0016, QemuFwCfgItemKernelSetupSize = 0x0017, QemuFwCfgItemKernelSetupData = 0x0018, QemuFwCfgItemFileDir = 0x0019, QemuFwCfgItemX86AcpiTables = 0x8000, QemuFwCfgItemX86SmbiosTables = 0x8001, QemuFwCfgItemX86Irq0Override = 0x8002, QemuFwCfgItemX86E820Table = 0x8003, QemuFwCfgItemX86HpetData = 0x8004, } FIRMWARE_CONFIG_ITEM; // // Communication structure for the DMA access method. All fields are encoded in // big endian. // #pragma pack (1) typedef struct { UINT32 Control; UINT32 Length; UINT64 Address; } FW_CFG_DMA_ACCESS; #pragma pack () #endif