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