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