]> Git Repo - qemu.git/blame - docs/specs/fw_cfg.txt
vhost_net: device IOTLB support
[qemu.git] / docs / specs / fw_cfg.txt
CommitLineData
6cec43e1
GS
1QEMU Firmware Configuration (fw_cfg) Device
2===========================================
3
4= Guest-side Hardware Interface =
5
6This hardware interface allows the guest to retrieve various data items
7(blobs) that can influence how the firmware configures itself, or may
8contain tables to be installed for the guest OS. Examples include device
9boot order, ACPI and SMBIOS tables, virtual machine UUID, SMP and NUMA
10information, kernel/initrd images for direct (Linux) kernel booting, etc.
11
12== Selector (Control) Register ==
13
14* Write only
15* Location: platform dependent (IOport or MMIO)
16* Width: 16-bit
17* Endianness: little-endian (if IOport), or big-endian (if MMIO)
18
19A write to this register sets the index of a firmware configuration
20item which can subsequently be accessed via the data register.
21
22Setting the selector register will cause the data offset to be set
23to zero. The data offset impacts which data is accessed via the data
24register, and is explained below.
25
26Bit14 of the selector register indicates whether the configuration
27setting is being written. A value of 0 means the item is only being
28read, and all write access to the data port will be ignored. A value
29of 1 means the item's data can be overwritten by writes to the data
30register. In other words, configuration write mode is enabled when
31the selector value is between 0x4000-0x7fff or 0xc000-0xffff.
32
33NOTE: As of QEMU v2.4, writes to the fw_cfg data register are no
34 longer supported, and will be ignored (treated as no-ops)!
35
36Bit15 of the selector register indicates whether the configuration
37setting is architecture specific. A value of 0 means the item is a
38generic configuration item. A value of 1 means the item is specific
39to a particular architecture. In other words, generic configuration
40items are accessed with a selector value between 0x0000-0x7fff, and
41architecture specific configuration items are accessed with a selector
42value between 0x8000-0xffff.
43
44== Data Register ==
45
46* Read/Write (writes ignored as of QEMU v2.4)
47* Location: platform dependent (IOport [*] or MMIO)
48* Width: 8-bit (if IOport), 8/16/32/64-bit (if MMIO)
49* Endianness: string-preserving
50
51[*] On platforms where the data register is exposed as an IOport, its
52port number will always be one greater than the port number of the
53selector register. In other words, the two ports overlap, and can not
54be mapped separately.
55
56The data register allows access to an array of bytes for each firmware
57configuration data item. The specific item is selected by writing to
58the selector register, as described above.
59
60Initially following a write to the selector register, the data offset
61will be set to zero. Each successful access to the data register will
62increment the data offset by the appropriate access width.
63
64Each firmware configuration item has a maximum length of data
65associated with the item. After the data offset has passed the
66end of this maximum data length, then any reads will return a data
67value of 0x00, and all writes will be ignored.
68
69An N-byte wide read of the data register will return the next available
70N bytes of the selected firmware configuration item, as a substring, in
71increasing address order, similar to memcpy().
72
73== Register Locations ==
74
75=== x86, x86_64 Register Locations ===
76
77Selector Register IOport: 0x510
78Data Register IOport: 0x511
c9eae1d4
MM
79DMA Address IOport: 0x514
80
81=== ARM Register Locations ===
82
83Selector Register address: Base + 8 (2 bytes)
84Data Register address: Base + 0 (8 bytes)
85DMA Address address: Base + 16 (8 bytes)
6cec43e1 86
36a43ea8
GS
87== ACPI Interface ==
88
89The fw_cfg device is defined with ACPI ID "QEMU0002". Since we expect
90ACPI tables to be passed into the guest through the fw_cfg device itself,
91the guest-side firmware can not use ACPI to find fw_cfg. However, once the
92firmware is finished setting up ACPI tables and hands control over to the
93guest kernel, the latter can use the fw_cfg ACPI node for a more accurate
94inventory of in-use IOport or MMIO regions.
95
6cec43e1
GS
96== Firmware Configuration Items ==
97
98=== Signature (Key 0x0000, FW_CFG_SIGNATURE) ===
99
100The presence of the fw_cfg selector and data registers can be verified
101by selecting the "signature" item using key 0x0000 (FW_CFG_SIGNATURE),
102and reading four bytes from the data register. If the fw_cfg device is
103present, the four bytes read will contain the characters "QEMU".
104
2cc06a88
KC
105If the DMA interface is available, then reading the DMA Address
106Register returns 0x51454d5520434647 ("QEMU CFG" in big-endian format).
107
c9eae1d4 108=== Revision / feature bitmap (Key 0x0001, FW_CFG_ID) ===
6cec43e1 109
c9eae1d4
MM
110A 32-bit little-endian unsigned int, this item is used to check for enabled
111features.
112 - Bit 0: traditional interface. Always set.
113 - Bit 1: DMA interface.
6cec43e1
GS
114
115=== File Directory (Key 0x0019, FW_CFG_FILE_DIR) ===
116
117Firmware configuration items stored at selector keys 0x0020 or higher
118(FW_CFG_FILE_FIRST or higher) have an associated entry in a directory
119structure, which makes it easier for guest-side firmware to identify
120and retrieve them. The format of this file directory (from fw_cfg.h in
121the QEMU source tree) is shown here, slightly annotated for clarity:
122
123struct FWCfgFiles { /* the entire file directory fw_cfg item */
124 uint32_t count; /* number of entries, in big-endian format */
125 struct FWCfgFile f[]; /* array of file entries, see below */
126};
127
128struct FWCfgFile { /* an individual file entry, 64 bytes total */
129 uint32_t size; /* size of referenced fw_cfg item, big-endian */
130 uint16_t select; /* selector key of fw_cfg item, big-endian */
131 uint16_t reserved;
132 char name[56]; /* fw_cfg item name, NUL-terminated ascii */
133};
134
135=== All Other Data Items ===
136
137Please consult the QEMU source for the most up-to-date and authoritative
138list of selector keys and their respective items' purpose and format.
139
140=== Ranges ===
141
142Theoretically, there may be up to 0x4000 generic firmware configuration
143items, and up to 0x4000 architecturally specific ones.
144
145Selector Reg. Range Usage
146--------------- -----------
1470x0000 - 0x3fff Generic (0x0000 - 0x3fff, RO)
1480x4000 - 0x7fff Generic (0x0000 - 0x3fff, RW, ignored in QEMU v2.4+)
1490x8000 - 0xbfff Arch. Specific (0x0000 - 0x3fff, RO)
1500xc000 - 0xffff Arch. Specific (0x0000 - 0x3fff, RW, ignored in v2.4+)
151
152In practice, the number of allowed firmware configuration items is given
153by the value of FW_CFG_MAX_ENTRY (see fw_cfg.h).
154
c9eae1d4
MM
155= Guest-side DMA Interface =
156
157If bit 1 of the feature bitmap is set, the DMA interface is present. This does
158not replace the existing fw_cfg interface, it is an add-on. This interface
159can be used through the 64-bit wide address register.
160
161The address register is in big-endian format. The value for the register is 0
162at startup and after an operation. A write to the least significant half (at
163offset 4) triggers an operation. This means that operations with 32-bit
164addresses can be triggered with just one write, whereas operations with
16564-bit addresses can be triggered with one 64-bit write or two 32-bit writes,
166starting with the most significant half (at offset 0).
167
168In this register, the physical address of a FWCfgDmaAccess structure in RAM
169should be written. This is the format of the FWCfgDmaAccess structure:
170
171typedef struct FWCfgDmaAccess {
172 uint32_t control;
173 uint32_t length;
174 uint64_t address;
175} FWCfgDmaAccess;
176
177The fields of the structure are in big endian mode, and the field at the lowest
178address is the "control" field.
179
180The "control" field has the following bits:
181 - Bit 0: Error
182 - Bit 1: Read
183 - Bit 2: Skip
184 - Bit 3: Select. The upper 16 bits are the selected index.
185
186When an operation is triggered, if the "control" field has bit 3 set, the
187upper 16 bits are interpreted as an index of a firmware configuration item.
188This has the same effect as writing the selector register.
189
190If the "control" field has bit 1 set, a read operation will be performed.
191"length" bytes for the current selector and offset will be copied into the
192physical RAM address specified by the "address" field.
193
194If the "control" field has bit 2 set (and not bit 1), a skip operation will be
195performed. The offset for the current selector will be advanced "length" bytes.
196
197To check the result, read the "control" field:
198 error bit set -> something went wrong.
199 all bits cleared -> transfer finished successfully.
200 otherwise -> transfer still in progress (doesn't happen
201 today due to implementation not being async,
202 but may in the future).
203
9c4a5c55 204= Externally Provided Items =
81b2b810
GS
205
206As of v2.4, "file" fw_cfg items (i.e., items with selector keys above
207FW_CFG_FILE_FIRST, and with a corresponding entry in the fw_cfg file
208directory structure) may be inserted via the QEMU command line, using
209the following syntax:
210
211 -fw_cfg [name=]<item_name>,file=<path>
212
63d3145a 213Or
6407d76e
GS
214
215 -fw_cfg [name=]<item_name>,string=<string>
216
63d3145a
MA
217See QEMU man page for more documentation.
218
219Using item_name with plain ASCII characters only is recommended.
220
221Item names beginning with "opt/" are reserved for users. QEMU will
222never create entries with such names unless explicitly ordered by the
223user.
6407d76e 224
63d3145a
MA
225To avoid clashes among different users, it is strongly recommended
226that you use names beginning with opt/RFQDN/, where RFQDN is a reverse
227fully qualified domain name you control. For instance, if SeaBIOS
228wanted to define additional names, the prefix "opt/org.seabios/" would
229be appropriate.
6407d76e 230
63d3145a 231For historical reasons, "opt/ovmf/" is reserved for OVMF firmware.
81b2b810 232
63d3145a 233Prefix "opt/org.qemu/" is reserved for QEMU itself.
81b2b810 234
63d3145a
MA
235Use of names not beginning with "opt/" is potentially dangerous and
236entirely unsupported. QEMU will warn if you try.
This page took 0.134048 seconds and 4 git commands to generate.