1 /*++ 2 3 Copyright (c) 2004, Intel Corporation. All rights reserved.<BR> 4 This program and the accompanying materials 5 are licensed and made available under the terms and conditions of the BSD License 6 which accompanies this distribution. The full text of the license may be found at 7 http://opensource.org/licenses/bsd-license.php 8 9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 12 Module Name: 13 14 CpuIo.h 15 16 Abstract: 17 18 CPU IO PPI defined in Tiano 19 CPU IO PPI abstracts CPU IO access 20 21 22 --*/ 23 24 #ifndef _PEI_CPUIO_PPI_H_ 25 #define _PEI_CPUIO_PPI_H_ 26 27 #define PEI_CPU_IO_PPI_GUID \ 28 { \ 29 0xe6af1f7b, 0xfc3f, 0x46da, {0xa8, 0x28, 0xa3, 0xb4, 0x57, 0xa4, 0x42, 0x82} \ 30 } 31 32 EFI_FORWARD_DECLARATION (PEI_CPU_IO_PPI); 33 34 // 35 // ******************************************************* 36 // PEI_CPU_IO_PPI_WIDTH 37 // ******************************************************* 38 // 39 typedef enum { 40 PeiCpuIoWidthUint8, 41 PeiCpuIoWidthUint16, 42 PeiCpuIoWidthUint32, 43 PeiCpuIoWidthUint64, 44 PeiCpuIoWidthFifoUint8, 45 PeiCpuIoWidthFifoUint16, 46 PeiCpuIoWidthFifoUint32, 47 PeiCpuIoWidthFifoUint64, 48 PeiCpuIoWidthFillUint8, 49 PeiCpuIoWidthFillUint16, 50 PeiCpuIoWidthFillUint32, 51 PeiCpuIoWidthFillUint64, 52 PeiCpuIoWidthMaximum 53 } PEI_CPU_IO_PPI_WIDTH; 54 55 // 56 // ******************************************************* 57 // PEI_CPU_IO_PPI_IO_MEM 58 // ******************************************************* 59 // 60 typedef 61 EFI_STATUS 62 (EFIAPI *PEI_CPU_IO_PPI_IO_MEM) ( 63 IN EFI_PEI_SERVICES **PeiServices, 64 IN PEI_CPU_IO_PPI * This, 65 IN PEI_CPU_IO_PPI_WIDTH Width, 66 IN UINT64 Address, 67 IN UINTN Count, 68 IN OUT VOID *Buffer 69 ); 70 71 // 72 // ******************************************************* 73 // PEI_CPU_IO_PPI_ACCESS 74 // ******************************************************* 75 // 76 typedef struct { 77 PEI_CPU_IO_PPI_IO_MEM Read; 78 PEI_CPU_IO_PPI_IO_MEM Write; 79 } PEI_CPU_IO_PPI_ACCESS; 80 81 // 82 // ******************************************************* 83 // Base IO Class Functions 84 // ******************************************************* 85 // 86 typedef 87 UINT8 88 (EFIAPI *PEI_CPU_IO_PPI_IO_READ8) ( 89 IN EFI_PEI_SERVICES **PeiServices, 90 IN PEI_CPU_IO_PPI * This, 91 IN UINT64 Address 92 ); 93 94 typedef 95 UINT16 96 (EFIAPI *PEI_CPU_IO_PPI_IO_READ16) ( 97 IN EFI_PEI_SERVICES **PeiServices, 98 IN PEI_CPU_IO_PPI * This, 99 IN UINT64 Address 100 ); 101 102 typedef 103 UINT32 104 (EFIAPI *PEI_CPU_IO_PPI_IO_READ32) ( 105 IN EFI_PEI_SERVICES **PeiServices, 106 IN PEI_CPU_IO_PPI * This, 107 IN UINT64 Address 108 ); 109 110 typedef 111 UINT64 112 (EFIAPI *PEI_CPU_IO_PPI_IO_READ64) ( 113 IN EFI_PEI_SERVICES **PeiServices, 114 IN PEI_CPU_IO_PPI * This, 115 IN UINT64 Address 116 ); 117 118 typedef 119 VOID 120 (EFIAPI *PEI_CPU_IO_PPI_IO_WRITE8) ( 121 IN EFI_PEI_SERVICES **PeiServices, 122 IN PEI_CPU_IO_PPI * This, 123 IN UINT64 Address, 124 IN UINT8 Data 125 ); 126 127 typedef 128 VOID 129 (EFIAPI *PEI_CPU_IO_PPI_IO_WRITE16) ( 130 IN EFI_PEI_SERVICES **PeiServices, 131 IN PEI_CPU_IO_PPI * This, 132 IN UINT64 Address, 133 IN UINT16 Data 134 ); 135 136 typedef 137 VOID 138 (EFIAPI *PEI_CPU_IO_PPI_IO_WRITE32) ( 139 IN EFI_PEI_SERVICES **PeiServices, 140 IN PEI_CPU_IO_PPI * This, 141 IN UINT64 Address, 142 IN UINT32 Data 143 ); 144 145 typedef 146 VOID 147 (EFIAPI *PEI_CPU_IO_PPI_IO_WRITE64) ( 148 IN EFI_PEI_SERVICES **PeiServices, 149 IN PEI_CPU_IO_PPI * This, 150 IN UINT64 Address, 151 IN UINT64 Data 152 ); 153 154 typedef 155 UINT8 156 (EFIAPI *PEI_CPU_IO_PPI_MEM_READ8) ( 157 IN EFI_PEI_SERVICES **PeiServices, 158 IN PEI_CPU_IO_PPI * This, 159 IN UINT64 Address 160 ); 161 162 typedef 163 UINT16 164 (EFIAPI *PEI_CPU_IO_PPI_MEM_READ16) ( 165 IN EFI_PEI_SERVICES **PeiServices, 166 IN PEI_CPU_IO_PPI * This, 167 IN UINT64 Address 168 ); 169 170 typedef 171 UINT32 172 (EFIAPI *PEI_CPU_IO_PPI_MEM_READ32) ( 173 IN EFI_PEI_SERVICES **PeiServices, 174 IN PEI_CPU_IO_PPI * This, 175 IN UINT64 Address 176 ); 177 178 typedef 179 UINT64 180 (EFIAPI *PEI_CPU_IO_PPI_MEM_READ64) ( 181 IN EFI_PEI_SERVICES **PeiServices, 182 IN PEI_CPU_IO_PPI * This, 183 IN UINT64 Address 184 ); 185 186 typedef 187 VOID 188 (EFIAPI *PEI_CPU_IO_PPI_MEM_WRITE8) ( 189 IN EFI_PEI_SERVICES **PeiServices, 190 IN PEI_CPU_IO_PPI * This, 191 IN UINT64 Address, 192 IN UINT8 Data 193 ); 194 195 typedef 196 VOID 197 (EFIAPI *PEI_CPU_IO_PPI_MEM_WRITE16) ( 198 IN EFI_PEI_SERVICES **PeiServices, 199 IN PEI_CPU_IO_PPI * This, 200 IN UINT64 Address, 201 IN UINT16 Data 202 ); 203 204 typedef 205 VOID 206 (EFIAPI *PEI_CPU_IO_PPI_MEM_WRITE32) ( 207 IN EFI_PEI_SERVICES **PeiServices, 208 IN PEI_CPU_IO_PPI * This, 209 IN UINT64 Address, 210 IN UINT32 Data 211 ); 212 213 typedef 214 VOID 215 (EFIAPI *PEI_CPU_IO_PPI_MEM_WRITE64) ( 216 IN EFI_PEI_SERVICES **PeiServices, 217 IN PEI_CPU_IO_PPI * This, 218 IN UINT64 Address, 219 IN UINT64 Data 220 ); 221 222 // 223 // ******************************************************* 224 // PEI_CPU_IO_PPI 225 // ******************************************************* 226 // 227 struct _PEI_CPU_IO_PPI { 228 PEI_CPU_IO_PPI_ACCESS Mem; 229 PEI_CPU_IO_PPI_ACCESS Io; 230 PEI_CPU_IO_PPI_IO_READ8 IoRead8; 231 PEI_CPU_IO_PPI_IO_READ16 IoRead16; 232 PEI_CPU_IO_PPI_IO_READ32 IoRead32; 233 PEI_CPU_IO_PPI_IO_READ64 IoRead64; 234 PEI_CPU_IO_PPI_IO_WRITE8 IoWrite8; 235 PEI_CPU_IO_PPI_IO_WRITE16 IoWrite16; 236 PEI_CPU_IO_PPI_IO_WRITE32 IoWrite32; 237 PEI_CPU_IO_PPI_IO_WRITE64 IoWrite64; 238 PEI_CPU_IO_PPI_MEM_READ8 MemRead8; 239 PEI_CPU_IO_PPI_MEM_READ16 MemRead16; 240 PEI_CPU_IO_PPI_MEM_READ32 MemRead32; 241 PEI_CPU_IO_PPI_MEM_READ64 MemRead64; 242 PEI_CPU_IO_PPI_MEM_WRITE8 MemWrite8; 243 PEI_CPU_IO_PPI_MEM_WRITE16 MemWrite16; 244 PEI_CPU_IO_PPI_MEM_WRITE32 MemWrite32; 245 PEI_CPU_IO_PPI_MEM_WRITE64 MemWrite64; 246 }; 247 248 extern EFI_GUID gPeiCpuIoPpiInServiceTableGuid; 249 250 #endif 251