]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - MdePkg/Include/Ppi/CpuIo.h
MdePkg/PiFirmwareFile: fix undefined behavior in FFS_FILE_SIZE
[mirror_edk2.git] / MdePkg / Include / Ppi / CpuIo.h
... / ...
CommitLineData
1/** @file\r
2 This PPI provides a set of memory and I/O-based services.\r
3 The perspective of the services is that of the processor, not the bus or system.\r
4\r
5Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
6SPDX-License-Identifier: BSD-2-Clause-Patent\r
7\r
8 @par Revision Reference:\r
9 This PPI is introduced in PI Version 1.0.\r
10\r
11**/\r
12\r
13#ifndef __PEI_CPUIO_PPI_H__\r
14#define __PEI_CPUIO_PPI_H__\r
15\r
16#define EFI_PEI_CPU_IO_PPI_INSTALLED_GUID \\r
17 { 0xe6af1f7b, 0xfc3f, 0x46da, {0xa8, 0x28, 0xa3, 0xb4, 0x57, 0xa4, 0x42, 0x82 } }\r
18\r
19typedef struct _EFI_PEI_CPU_IO_PPI EFI_PEI_CPU_IO_PPI;\r
20\r
21///\r
22/// EFI_PEI_CPU_IO_PPI_WIDTH.\r
23///\r
24typedef enum {\r
25 EfiPeiCpuIoWidthUint8,\r
26 EfiPeiCpuIoWidthUint16,\r
27 EfiPeiCpuIoWidthUint32,\r
28 EfiPeiCpuIoWidthUint64,\r
29 EfiPeiCpuIoWidthFifoUint8,\r
30 EfiPeiCpuIoWidthFifoUint16,\r
31 EfiPeiCpuIoWidthFifoUint32,\r
32 EfiPeiCpuIoWidthFifoUint64,\r
33 EfiPeiCpuIoWidthFillUint8,\r
34 EfiPeiCpuIoWidthFillUint16,\r
35 EfiPeiCpuIoWidthFillUint32,\r
36 EfiPeiCpuIoWidthFillUint64,\r
37 EfiPeiCpuIoWidthMaximum\r
38} EFI_PEI_CPU_IO_PPI_WIDTH;\r
39\r
40/**\r
41 Memory-based access services and I/O-based access services.\r
42\r
43 @param[in] PeiServices An indirect pointer to the PEI Services Table\r
44 published by the PEI Foundation.\r
45 @param[in] This The pointer to local data for the interface.\r
46 @param[in] Width The width of the access. Enumerated in bytes.\r
47 @param[in] Address The physical address of the access.\r
48 @param[in] Count The number of accesses to perform.\r
49 @param[in, out] Buffer A pointer to the buffer of data.\r
50\r
51 @retval EFI_SUCCESS The function completed successfully.\r
52 @retval EFI_NOT_YET_AVAILABLE The service has not been installed.\r
53\r
54**/\r
55typedef\r
56EFI_STATUS\r
57(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_MEM)(\r
58 IN CONST EFI_PEI_SERVICES **PeiServices,\r
59 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
60 IN EFI_PEI_CPU_IO_PPI_WIDTH Width,\r
61 IN UINT64 Address,\r
62 IN UINTN Count,\r
63 IN OUT VOID *Buffer\r
64 );\r
65\r
66///\r
67/// EFI_PEI_CPU_IO_PPI_ACCESS\r
68///\r
69typedef struct {\r
70 ///\r
71 /// This service provides the various modalities of memory and I/O read.\r
72 ///\r
73 EFI_PEI_CPU_IO_PPI_IO_MEM Read;\r
74 ///\r
75 /// This service provides the various modalities of memory and I/O write.\r
76 ///\r
77 EFI_PEI_CPU_IO_PPI_IO_MEM Write;\r
78} EFI_PEI_CPU_IO_PPI_ACCESS;\r
79\r
80/**\r
81 8-bit I/O read operations.\r
82\r
83 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
84 by the PEI Foundation.\r
85 @param[in] This The pointer to local data for the interface.\r
86 @param[in] Address The physical address of the access.\r
87\r
88 @return An 8-bit value returned from the I/O space.\r
89\r
90**/\r
91typedef\r
92UINT8\r
93(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_READ8)(\r
94 IN CONST EFI_PEI_SERVICES **PeiServices,\r
95 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
96 IN UINT64 Address\r
97 );\r
98\r
99/**\r
100 16-bit I/O read operations.\r
101\r
102 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
103 by the PEI Foundation.\r
104 @param[in] This The pointer to local data for the interface.\r
105 @param[in] Address The physical address of the access.\r
106\r
107 @return A 16-bit value returned from the I/O space.\r
108\r
109**/\r
110typedef\r
111UINT16\r
112(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_READ16)(\r
113 IN CONST EFI_PEI_SERVICES **PeiServices,\r
114 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
115 IN UINT64 Address\r
116 );\r
117\r
118/**\r
119 32-bit I/O read operations.\r
120\r
121 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
122 by the PEI Foundation.\r
123 @param[in] This The pointer to local data for the interface.\r
124 @param[in] Address The physical address of the access.\r
125\r
126 @return A 32-bit value returned from the I/O space.\r
127\r
128**/\r
129typedef\r
130UINT32\r
131(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_READ32)(\r
132 IN CONST EFI_PEI_SERVICES **PeiServices,\r
133 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
134 IN UINT64 Address\r
135 );\r
136\r
137/**\r
138 64-bit I/O read operations.\r
139\r
140 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
141 by the PEI Foundation.\r
142 @param[in] This The pointer to local data for the interface.\r
143 @param[in] Address The physical address of the access.\r
144\r
145 @return A 64-bit value returned from the I/O space.\r
146\r
147**/\r
148typedef\r
149UINT64\r
150(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_READ64)(\r
151 IN CONST EFI_PEI_SERVICES **PeiServices,\r
152 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
153 IN UINT64 Address\r
154 );\r
155\r
156/**\r
157 8-bit I/O write operations.\r
158\r
159 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
160 by the PEI Foundation.\r
161 @param[in] This The pointer to local data for the interface.\r
162 @param[in] Address The physical address of the access.\r
163 @param[in] Data The data to write.\r
164\r
165**/\r
166typedef\r
167VOID\r
168(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_WRITE8)(\r
169 IN CONST EFI_PEI_SERVICES **PeiServices,\r
170 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
171 IN UINT64 Address,\r
172 IN UINT8 Data\r
173 );\r
174\r
175/**\r
176 16-bit I/O write operations.\r
177\r
178 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
179 by the PEI Foundation.\r
180 @param[in] This The pointer to local data for the interface.\r
181 @param[in] Address The physical address of the access.\r
182 @param[in] Data The data to write.\r
183\r
184**/\r
185typedef\r
186VOID\r
187(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_WRITE16)(\r
188 IN CONST EFI_PEI_SERVICES **PeiServices,\r
189 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
190 IN UINT64 Address,\r
191 IN UINT16 Data\r
192 );\r
193\r
194/**\r
195 32-bit I/O write operations.\r
196\r
197 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
198 by the PEI Foundation.\r
199 @param[in] This The pointer to local data for the interface.\r
200 @param[in] Address The physical address of the access.\r
201 @param[in] Data The data to write.\r
202\r
203**/\r
204typedef\r
205VOID\r
206(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_WRITE32)(\r
207 IN CONST EFI_PEI_SERVICES **PeiServices,\r
208 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
209 IN UINT64 Address,\r
210 IN UINT32 Data\r
211 );\r
212\r
213/**\r
214 64-bit I/O write operations.\r
215\r
216 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
217 by the PEI Foundation.\r
218 @param[in] This The pointer to local data for the interface.\r
219 @param[in] Address The physical address of the access.\r
220 @param[in] Data The data to write.\r
221\r
222**/\r
223typedef\r
224VOID\r
225(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_WRITE64)(\r
226 IN CONST EFI_PEI_SERVICES **PeiServices,\r
227 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
228 IN UINT64 Address,\r
229 IN UINT64 Data\r
230 );\r
231\r
232/**\r
233 8-bit memory read operations.\r
234\r
235 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
236 by the PEI Foundation.\r
237 @param[in] This The pointer to local data for the interface.\r
238 @param[in] Address The physical address of the access.\r
239\r
240 @return An 8-bit value returned from the memory space.\r
241\r
242**/\r
243typedef\r
244UINT8\r
245(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_READ8)(\r
246 IN CONST EFI_PEI_SERVICES **PeiServices,\r
247 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
248 IN UINT64 Address\r
249 );\r
250\r
251/**\r
252 16-bit memory read operations.\r
253\r
254 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
255 by the PEI Foundation.\r
256 @param[in] This The pointer to local data for the interface.\r
257 @param[in] Address The physical address of the access.\r
258\r
259 @return A 16-bit value returned from the memory space.\r
260\r
261**/\r
262typedef\r
263UINT16\r
264(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_READ16)(\r
265 IN CONST EFI_PEI_SERVICES **PeiServices,\r
266 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
267 IN UINT64 Address\r
268 );\r
269\r
270/**\r
271 32-bit memory read operations.\r
272\r
273 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
274 by the PEI Foundation.\r
275 @param[in] This The pointer to local data for the interface.\r
276 @param[in] Address The physical address of the access.\r
277\r
278 @return A 32-bit value returned from the memory space.\r
279\r
280**/\r
281typedef\r
282UINT32\r
283(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_READ32)(\r
284 IN CONST EFI_PEI_SERVICES **PeiServices,\r
285 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
286 IN UINT64 Address\r
287 );\r
288\r
289/**\r
290 64-bit memory read operations.\r
291\r
292 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
293 by the PEI Foundation.\r
294 @param[in] This The pointer to local data for the interface.\r
295 @param[in] Address The physical address of the access.\r
296\r
297 @return A 64-bit value returned from the memory space.\r
298\r
299**/\r
300typedef\r
301UINT64\r
302(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_READ64)(\r
303 IN CONST EFI_PEI_SERVICES **PeiServices,\r
304 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
305 IN UINT64 Address\r
306 );\r
307\r
308/**\r
309 8-bit memory write operations.\r
310\r
311 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
312 by the PEI Foundation.\r
313 @param[in] This The pointer to local data for the interface.\r
314 @param[in] Address The physical address of the access.\r
315 @param[in] Data The data to write.\r
316\r
317**/\r
318typedef\r
319VOID\r
320(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_WRITE8)(\r
321 IN CONST EFI_PEI_SERVICES **PeiServices,\r
322 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
323 IN UINT64 Address,\r
324 IN UINT8 Data\r
325 );\r
326\r
327/**\r
328 16-bit memory write operations.\r
329\r
330 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
331 by the PEI Foundation.\r
332 @param[in] This The pointer to local data for the interface.\r
333 @param[in] Address The physical address of the access.\r
334 @param[in] Data The data to write.\r
335\r
336**/\r
337typedef\r
338VOID\r
339(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_WRITE16)(\r
340 IN CONST EFI_PEI_SERVICES **PeiServices,\r
341 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
342 IN UINT64 Address,\r
343 IN UINT16 Data\r
344 );\r
345\r
346/**\r
347 32-bit memory write operations.\r
348\r
349 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
350 by the PEI Foundation.\r
351 @param[in] This The pointer to local data for the interface.\r
352 @param[in] Address The physical address of the access.\r
353 @param[in] Data The data to write.\r
354\r
355**/\r
356typedef\r
357VOID\r
358(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_WRITE32)(\r
359 IN CONST EFI_PEI_SERVICES **PeiServices,\r
360 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
361 IN UINT64 Address,\r
362 IN UINT32 Data\r
363 );\r
364\r
365/**\r
366 64-bit memory write operations.\r
367\r
368 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
369 by the PEI Foundation.\r
370 @param[in] This The pointer to local data for the interface.\r
371 @param[in] Address The physical address of the access.\r
372 @param[in] Data The data to write.\r
373\r
374**/\r
375typedef\r
376VOID\r
377(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_WRITE64)(\r
378 IN CONST EFI_PEI_SERVICES **PeiServices,\r
379 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
380 IN UINT64 Address,\r
381 IN UINT64 Data\r
382 );\r
383\r
384///\r
385/// EFI_PEI_CPU_IO_PPI provides a set of memory and I/O-based services.\r
386/// The perspective of the services is that of the processor, not that of the\r
387/// bus or system.\r
388///\r
389struct _EFI_PEI_CPU_IO_PPI {\r
390 ///\r
391 /// Collection of memory-access services.\r
392 ///\r
393 EFI_PEI_CPU_IO_PPI_ACCESS Mem;\r
394 ///\r
395 /// Collection of I/O-access services.\r
396 ///\r
397 EFI_PEI_CPU_IO_PPI_ACCESS Io;\r
398\r
399 EFI_PEI_CPU_IO_PPI_IO_READ8 IoRead8;\r
400 EFI_PEI_CPU_IO_PPI_IO_READ16 IoRead16;\r
401 EFI_PEI_CPU_IO_PPI_IO_READ32 IoRead32;\r
402 EFI_PEI_CPU_IO_PPI_IO_READ64 IoRead64;\r
403\r
404 EFI_PEI_CPU_IO_PPI_IO_WRITE8 IoWrite8;\r
405 EFI_PEI_CPU_IO_PPI_IO_WRITE16 IoWrite16;\r
406 EFI_PEI_CPU_IO_PPI_IO_WRITE32 IoWrite32;\r
407 EFI_PEI_CPU_IO_PPI_IO_WRITE64 IoWrite64;\r
408\r
409 EFI_PEI_CPU_IO_PPI_MEM_READ8 MemRead8;\r
410 EFI_PEI_CPU_IO_PPI_MEM_READ16 MemRead16;\r
411 EFI_PEI_CPU_IO_PPI_MEM_READ32 MemRead32;\r
412 EFI_PEI_CPU_IO_PPI_MEM_READ64 MemRead64;\r
413\r
414 EFI_PEI_CPU_IO_PPI_MEM_WRITE8 MemWrite8;\r
415 EFI_PEI_CPU_IO_PPI_MEM_WRITE16 MemWrite16;\r
416 EFI_PEI_CPU_IO_PPI_MEM_WRITE32 MemWrite32;\r
417 EFI_PEI_CPU_IO_PPI_MEM_WRITE64 MemWrite64;\r
418};\r
419\r
420extern EFI_GUID gEfiPeiCpuIoPpiInstalledGuid;\r
421\r
422#endif\r