2 QEMU/KVM Firmware Configuration access
4 Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.<BR>
5 Copyright (C) 2013, Red Hat, Inc.
7 This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17 #ifndef __FW_CFG_LIB__
18 #define __FW_CFG_LIB__
21 // The size, in bytes, of names of firmware configuration files, including at
22 // least one terminating NUL byte.
24 #define QEMU_FW_CFG_FNAME_SIZE 56
27 // If the following bit is set in the UINT32 fw_cfg revision / feature bitmap
28 // -- read from key 0x0001 with the basic IO Port or MMIO method --, then the
29 // DMA interface is available.
31 #define FW_CFG_F_DMA BIT1
34 // Macros for the FW_CFG_DMA_ACCESS.Control bitmap (in native encoding).
36 #define FW_CFG_DMA_CTL_ERROR BIT0
37 #define FW_CFG_DMA_CTL_READ BIT1
38 #define FW_CFG_DMA_CTL_SKIP BIT2
39 #define FW_CFG_DMA_CTL_SELECT BIT3
40 #define FW_CFG_DMA_CTL_WRITE BIT4
43 QemuFwCfgItemSignature
= 0x0000,
44 QemuFwCfgItemInterfaceVersion
= 0x0001,
45 QemuFwCfgItemSystemUuid
= 0x0002,
46 QemuFwCfgItemRamSize
= 0x0003,
47 QemuFwCfgItemGraphicsEnabled
= 0x0004,
48 QemuFwCfgItemSmpCpuCount
= 0x0005,
49 QemuFwCfgItemMachineId
= 0x0006,
50 QemuFwCfgItemKernelAddress
= 0x0007,
51 QemuFwCfgItemKernelSize
= 0x0008,
52 QemuFwCfgItemKernelCommandLine
= 0x0009,
53 QemuFwCfgItemInitrdAddress
= 0x000a,
54 QemuFwCfgItemInitrdSize
= 0x000b,
55 QemuFwCfgItemBootDevice
= 0x000c,
56 QemuFwCfgItemNumaData
= 0x000d,
57 QemuFwCfgItemBootMenu
= 0x000e,
58 QemuFwCfgItemMaximumCpuCount
= 0x000f,
59 QemuFwCfgItemKernelEntry
= 0x0010,
60 QemuFwCfgItemKernelData
= 0x0011,
61 QemuFwCfgItemInitrdData
= 0x0012,
62 QemuFwCfgItemCommandLineAddress
= 0x0013,
63 QemuFwCfgItemCommandLineSize
= 0x0014,
64 QemuFwCfgItemCommandLineData
= 0x0015,
65 QemuFwCfgItemKernelSetupAddress
= 0x0016,
66 QemuFwCfgItemKernelSetupSize
= 0x0017,
67 QemuFwCfgItemKernelSetupData
= 0x0018,
68 QemuFwCfgItemFileDir
= 0x0019,
70 QemuFwCfgItemX86AcpiTables
= 0x8000,
71 QemuFwCfgItemX86SmbiosTables
= 0x8001,
72 QemuFwCfgItemX86Irq0Override
= 0x8002,
73 QemuFwCfgItemX86E820Table
= 0x8003,
74 QemuFwCfgItemX86HpetData
= 0x8004,
76 } FIRMWARE_CONFIG_ITEM
;
79 // Communication structure for the DMA access method. All fields are encoded in
91 Returns a boolean indicating if the firmware configuration interface
94 This function may change fw_cfg state.
96 @retval TRUE The interface is available
97 @retval FALSE The interface is not available
102 QemuFwCfgIsAvailable (
108 Selects a firmware configuration item for reading.
110 Following this call, any data read from this item will start from
111 the beginning of the configuration item's data.
113 @param[in] QemuFwCfgItem - Firmware Configuration item to read
118 QemuFwCfgSelectItem (
119 IN FIRMWARE_CONFIG_ITEM QemuFwCfgItem
124 Reads firmware configuration bytes into a buffer
126 If called multiple times, then the data read will
127 continue at the offset of the firmware configuration
128 item where the previous read ended.
130 @param[in] Size - Size in bytes to read
131 @param[in] Buffer - Buffer to store data into
138 IN VOID
*Buffer OPTIONAL
143 Writes firmware configuration bytes from a buffer
145 If called multiple times, then the data written will
146 continue at the offset of the firmware configuration
147 item where the previous write ended.
149 @param[in] Size - Size in bytes to write
150 @param[in] Buffer - Buffer to read data from
155 QemuFwCfgWriteBytes (
162 Reads a UINT8 firmware configuration value
164 @return Value of Firmware Configuration item read
175 Reads a UINT16 firmware configuration value
177 @return Value of Firmware Configuration item read
188 Reads a UINT32 firmware configuration value
190 @return Value of Firmware Configuration item read
201 Reads a UINT64 firmware configuration value
203 @return Value of Firmware Configuration item read
214 Find the configuration item corresponding to the firmware configuration file.
216 @param[in] Name - Name of file to look up.
217 @param[out] Item - Configuration item corresponding to the file, to be passed
218 to QemuFwCfgSelectItem ().
219 @param[out] Size - Number of bytes in the file.
221 @return RETURN_SUCCESS If file is found.
222 RETURN_NOT_FOUND If file is not found.
223 RETURN_UNSUPPORTED If firmware configuration is unavailable.
229 IN CONST CHAR8
*Name
,
230 OUT FIRMWARE_CONFIG_ITEM
*Item
,
236 Determine if S3 support is explicitly enabled.
238 @retval TRUE if S3 support is explicitly enabled.
239 FALSE otherwise. This includes unavailability of the firmware
240 configuration interface.