VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/Firmware/MdePkg/Include/Protocol/DeviceIo.h@ 105681

最後變更 在這個檔案從105681是 99404,由 vboxsync 提交於 2 年 前

Devices/EFI/FirmwareNew: Update to edk2-stable202302 and make it build, bugref:4643

  • 屬性 svn:eol-style 設為 native
檔案大小: 9.0 KB
 
1/** @file
2 Device IO protocol as defined in the EFI 1.10 specification.
3
4 Device IO is used to abstract hardware access to devices. It includes
5 memory mapped IO, IO, PCI Config space, and DMA.
6
7 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
8 SPDX-License-Identifier: BSD-2-Clause-Patent
9
10**/
11
12#ifndef __DEVICE_IO_H__
13#define __DEVICE_IO_H__
14
15#define EFI_DEVICE_IO_PROTOCOL_GUID \
16 { \
17 0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
18 }
19
20typedef struct _EFI_DEVICE_IO_PROTOCOL EFI_DEVICE_IO_PROTOCOL;
21
22///
23/// Protocol GUID name defined in EFI1.1.
24///
25#define DEVICE_IO_PROTOCOL EFI_DEVICE_IO_PROTOCOL_GUID
26
27///
28/// Protocol defined in EFI1.1.
29///
30typedef EFI_DEVICE_IO_PROTOCOL EFI_DEVICE_IO_INTERFACE;
31
32///
33/// Device IO Access Width
34///
35typedef enum {
36 IO_UINT8 = 0,
37 IO_UINT16 = 1,
38 IO_UINT32 = 2,
39 IO_UINT64 = 3,
40 //
41 // Below enumerations are added in "Extensible Firmware Interface Specification,
42 // Version 1.10, Specification Update, Version 001".
43 //
44 MMIO_COPY_UINT8 = 4,
45 MMIO_COPY_UINT16 = 5,
46 MMIO_COPY_UINT32 = 6,
47 MMIO_COPY_UINT64 = 7
48} EFI_IO_WIDTH;
49
50/**
51 Enables a driver to access device registers in the appropriate memory or I/O space.
52
53 @param This A pointer to the EFI_DEVICE_IO_INTERFACE instance.
54 @param Width Signifies the width of the I/O operations.
55 @param Address The base address of the I/O operations.
56 @param Count The number of I/O operations to perform.
57 @param Buffer For read operations, the destination buffer to store the results. For write
58 operations, the source buffer to write data from. If
59 Width is MMIO_COPY_UINT8, MMIO_COPY_UINT16,
60 MMIO_COPY_UINT32, or MMIO_COPY_UINT64, then
61 Buffer is interpreted as a base address of an I/O operation such as Address.
62
63 @retval EFI_SUCCESS The data was read from or written to the device.
64 @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
65 @retval EFI_INVALID_PARAMETER Width is invalid.
66
67**/
68typedef
69EFI_STATUS
70(EFIAPI *EFI_DEVICE_IO)(
71 IN EFI_DEVICE_IO_PROTOCOL *This,
72 IN EFI_IO_WIDTH Width,
73 IN UINT64 Address,
74 IN UINTN Count,
75 IN OUT VOID *Buffer
76 );
77
78typedef struct {
79 EFI_DEVICE_IO Read;
80 EFI_DEVICE_IO Write;
81} EFI_IO_ACCESS;
82
83/**
84 Provides an EFI Device Path for a PCI device with the given PCI configuration space address.
85
86 @param This A pointer to the EFI_DEVICE_IO_INTERFACE instance.
87 @param PciAddress The PCI configuration space address of the device whose Device Path
88 is going to be returned.
89 @param PciDevicePath A pointer to the pointer for the EFI Device Path for PciAddress.
90 Memory for the Device Path is allocated from the pool.
91
92 @retval EFI_SUCCESS The PciDevicePath returns a pointer to a valid EFI Device Path.
93 @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
94 @retval EFI_UNSUPPORTED The PciAddress does not map to a valid EFI Device Path.
95
96**/
97typedef
98EFI_STATUS
99(EFIAPI *EFI_PCI_DEVICE_PATH)(
100 IN EFI_DEVICE_IO_PROTOCOL *This,
101 IN UINT64 PciAddress,
102 IN OUT EFI_DEVICE_PATH_PROTOCOL **PciDevicePath
103 );
104
105typedef enum {
106 ///
107 /// A read operation from system memory by a bus master.
108 ///
109 EfiBusMasterRead,
110
111 ///
112 /// A write operation to system memory by a bus master.
113 ///
114 EfiBusMasterWrite,
115
116 ///
117 /// Provides both read and write access to system memory
118 /// by both the processor and a bus master. The buffer is
119 /// coherent from both the processor's and the bus master's
120 /// point of view.
121 ///
122 EfiBusMasterCommonBuffer
123} EFI_IO_OPERATION_TYPE;
124
125/**
126 Provides the device-specific addresses needed to access system memory.
127
128 @param This A pointer to the EFI_DEVICE_IO_INTERFACE instance.
129 @param Operation Indicates if the bus master is going to read or write to system memory.
130 @param HostAddress The system memory address to map to the device.
131 @param NumberOfBytes On input, the number of bytes to map.
132 On output, the number of bytes that were mapped.
133 @param DeviceAddress The resulting map address for the bus master device to use to access the
134 hosts HostAddress.
135 @param Mapping A resulting value to pass to Unmap().
136
137 @retval EFI_SUCCESS The range was mapped for the returned NumberOfBytes.
138 @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
139 @retval EFI_UNSUPPORTED The HostAddress cannot be mapped as a common buffer.
140 @retval EFI_INVALID_PARAMETER The Operation or HostAddress is undefined.
141 @retval EFI_DEVICE_ERROR The system hardware could not map the requested address.
142
143**/
144typedef
145EFI_STATUS
146(EFIAPI *EFI_IO_MAP)(
147 IN EFI_DEVICE_IO_PROTOCOL *This,
148 IN EFI_IO_OPERATION_TYPE Operation,
149 IN EFI_PHYSICAL_ADDRESS *HostAddress,
150 IN OUT UINTN *NumberOfBytes,
151 OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
152 OUT VOID **Mapping
153 );
154
155/**
156 Completes the Map() operation and releases any corresponding resources.
157
158 @param This A pointer to the EFI_DEVICE_IO_INTERFACE instance.
159 @param Mapping A resulting value to pass to Unmap().
160
161 @retval EFI_SUCCESS The range was mapped for the returned NumberOfBytes.
162 @retval EFI_DEVICE_ERROR The system hardware could not map the requested address.
163
164**/
165typedef
166EFI_STATUS
167(EFIAPI *EFI_IO_UNMAP)(
168 IN EFI_DEVICE_IO_PROTOCOL *This,
169 IN VOID *Mapping
170 );
171
172/**
173 Allocates pages that are suitable for an EFIBusMasterCommonBuffer mapping.
174
175 @param This A pointer to the EFI_DEVICE_IO_INTERFACE instance.
176 @param Type The type allocation to perform.
177 @param MemoryType The type of memory to allocate, EfiBootServicesData or
178 EfiRuntimeServicesData.
179 @param Pages The number of pages to allocate.
180 @param HostAddress A pointer to store the base address of the allocated range.
181
182 @retval EFI_SUCCESS The requested memory pages were allocated.
183 @retval EFI_OUT_OF_RESOURCES The memory pages could not be allocated.
184 @retval EFI_INVALID_PARAMETER The requested memory type is invalid.
185 @retval EFI_UNSUPPORTED The requested HostAddress is not supported on
186 this platform.
187
188**/
189typedef
190EFI_STATUS
191(EFIAPI *EFI_IO_ALLOCATE_BUFFER)(
192 IN EFI_DEVICE_IO_PROTOCOL *This,
193 IN EFI_ALLOCATE_TYPE Type,
194 IN EFI_MEMORY_TYPE MemoryType,
195 IN UINTN Pages,
196 IN OUT EFI_PHYSICAL_ADDRESS *HostAddress
197 );
198
199/**
200 Flushes any posted write data to the device.
201
202 @param This A pointer to the EFI_DEVICE_IO_INTERFACE instance.
203
204 @retval EFI_SUCCESS The buffers were flushed.
205 @retval EFI_DEVICE_ERROR The buffers were not flushed due to a hardware error.
206
207**/
208typedef
209EFI_STATUS
210(EFIAPI *EFI_IO_FLUSH)(
211 IN EFI_DEVICE_IO_PROTOCOL *This
212 );
213
214/**
215 Frees pages that were allocated with AllocateBuffer().
216
217 @param This A pointer to the EFI_DEVICE_IO_INTERFACE instance.
218 @param Pages The number of pages to free.
219 @param HostAddress The base address of the range to free.
220
221 @retval EFI_SUCCESS The requested memory pages were allocated.
222 @retval EFI_NOT_FOUND The requested memory pages were not allocated with
223 AllocateBuffer().
224 @retval EFI_INVALID_PARAMETER HostAddress is not page aligned or Pages is invalid.
225
226**/
227typedef
228EFI_STATUS
229(EFIAPI *EFI_IO_FREE_BUFFER)(
230 IN EFI_DEVICE_IO_PROTOCOL *This,
231 IN UINTN Pages,
232 IN EFI_PHYSICAL_ADDRESS HostAddress
233 );
234
235///
236/// This protocol provides the basic Memory, I/O, and PCI interfaces that
237/// are used to abstract accesses to devices.
238///
239struct _EFI_DEVICE_IO_PROTOCOL {
240 ///
241 /// Allows reads and writes to memory mapped I/O space.
242 ///
243 EFI_IO_ACCESS Mem;
244 ///
245 /// Allows reads and writes to I/O space.
246 ///
247 EFI_IO_ACCESS Io;
248 ///
249 /// Allows reads and writes to PCI configuration space.
250 ///
251 EFI_IO_ACCESS Pci;
252 EFI_IO_MAP Map;
253 EFI_PCI_DEVICE_PATH PciDevicePath;
254 EFI_IO_UNMAP Unmap;
255 EFI_IO_ALLOCATE_BUFFER AllocateBuffer;
256 EFI_IO_FLUSH Flush;
257 EFI_IO_FREE_BUFFER FreeBuffer;
258};
259
260extern EFI_GUID gEfiDeviceIoProtocolGuid;
261
262#endif
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette