Home | History | Annotate | Download | only in CpuIoPei
      1 /** @file
      2   Internal include file for the CPU I/O PPI.
      3 
      4 Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
      5 This program and the accompanying materials
      6 are licensed and made available under the terms and conditions of the BSD License
      7 which accompanies this distribution.  The full text of the license may be found at
      8 http://opensource.org/licenses/bsd-license.php
      9 
     10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 #ifndef _CPU_IO2_PEI_H_
     16 #define _CPU_IO2_PEI_H_
     17 
     18 #include <PiDxe.h>
     19 
     20 #include <Ppi/CpuIo.h>
     21 
     22 #include <Library/BaseLib.h>
     23 #include <Library/DebugLib.h>
     24 #include <Library/IoLib.h>
     25 #include <Library/PeiServicesLib.h>
     26 
     27 #define MAX_IO_PORT_ADDRESS   0xFFFF
     28 
     29 /**
     30   Reads memory-mapped registers.
     31 
     32   @param[in]  PeiServices  An indirect pointer to the PEI Services Table
     33                            published by the PEI Foundation.
     34   @param[in]  This         Pointer to local data for the interface.
     35   @param[in]  Width        The width of the access. Enumerated in bytes.
     36   @param[in]  Address      The physical address of the access.
     37   @param[in]  Count        The number of accesses to perform.
     38   @param[out] Buffer       A pointer to the buffer of data.
     39 
     40   @retval EFI_SUCCESS            The function completed successfully.
     41   @retval EFI_INVALID_PARAMETER  Width is invalid for this EFI system.
     42   @retval EFI_INVALID_PARAMETER  Buffer is NULL.
     43   @retval EFI_UNSUPPORTED        The address range specified by Address, Width,
     44                                  and Count is not valid for this EFI system.
     45 
     46 **/
     47 EFI_STATUS
     48 EFIAPI
     49 CpuMemoryServiceRead (
     50   IN  CONST EFI_PEI_SERVICES    **PeiServices,
     51   IN  CONST EFI_PEI_CPU_IO_PPI  *This,
     52   IN  EFI_PEI_CPU_IO_PPI_WIDTH  Width,
     53   IN  UINT64                    Address,
     54   IN  UINTN                     Count,
     55   OUT VOID                      *Buffer
     56   );
     57 
     58 /**
     59   Writes memory-mapped registers.
     60 
     61   @param[in]  PeiServices  An indirect pointer to the PEI Services Table
     62                            published by the PEI Foundation.
     63   @param[in]  This         Pointer to local data for the interface.
     64   @param[in]  Width        The width of the access. Enumerated in bytes.
     65   @param[in]  Address      The physical address of the access.
     66   @param[in]  Count        The number of accesses to perform.
     67   @param[in]  Buffer       A pointer to the buffer of data.
     68 
     69   @retval EFI_SUCCESS            The function completed successfully.
     70   @retval EFI_INVALID_PARAMETER  Width is invalid for this EFI system.
     71   @retval EFI_INVALID_PARAMETER  Buffer is NULL.
     72   @retval EFI_UNSUPPORTED        The address range specified by Address, Width,
     73                                  and Count is not valid for this EFI system.
     74 
     75 **/
     76 EFI_STATUS
     77 EFIAPI
     78 CpuMemoryServiceWrite (
     79   IN CONST EFI_PEI_SERVICES    **PeiServices,
     80   IN CONST EFI_PEI_CPU_IO_PPI  *This,
     81   IN EFI_PEI_CPU_IO_PPI_WIDTH  Width,
     82   IN UINT64                    Address,
     83   IN UINTN                     Count,
     84   IN VOID                      *Buffer
     85   );
     86 
     87 /**
     88   Reads I/O registers.
     89 
     90   @param[in]  PeiServices  An indirect pointer to the PEI Services Table
     91                            published by the PEI Foundation.
     92   @param[in]  This         Pointer to local data for the interface.
     93   @param[in]  Width        The width of the access. Enumerated in bytes.
     94   @param[in]  Address      The physical address of the access.
     95   @param[in]  Count        The number of accesses to perform.
     96   @param[out] Buffer       A pointer to the buffer of data.
     97 
     98   @retval EFI_SUCCESS            The function completed successfully.
     99   @retval EFI_INVALID_PARAMETER  Width is invalid for this EFI system.
    100   @retval EFI_INVALID_PARAMETER  Buffer is NULL.
    101   @retval EFI_UNSUPPORTED        The address range specified by Address, Width,
    102                                  and Count is not valid for this EFI system.
    103 
    104 **/
    105 EFI_STATUS
    106 EFIAPI
    107 CpuIoServiceRead (
    108   IN  CONST EFI_PEI_SERVICES    **PeiServices,
    109   IN  CONST EFI_PEI_CPU_IO_PPI  *This,
    110   IN  EFI_PEI_CPU_IO_PPI_WIDTH  Width,
    111   IN  UINT64                    Address,
    112   IN  UINTN                     Count,
    113   OUT VOID                      *Buffer
    114   );
    115 
    116 /**
    117   Write I/O registers.
    118 
    119   @param[in]  PeiServices  An indirect pointer to the PEI Services Table
    120                            published by the PEI Foundation.
    121   @param[in]  This         Pointer to local data for the interface.
    122   @param[in]  Width        The width of the access. Enumerated in bytes.
    123   @param[in]  Address      The physical address of the access.
    124   @param[in]  Count        The number of accesses to perform.
    125   @param[in]  Buffer       A pointer to the buffer of data.
    126 
    127   @retval EFI_SUCCESS            The function completed successfully.
    128   @retval EFI_INVALID_PARAMETER  Width is invalid for this EFI system.
    129   @retval EFI_INVALID_PARAMETER  Buffer is NULL.
    130   @retval EFI_UNSUPPORTED        The address range specified by Address, Width,
    131                                  and Count is not valid for this EFI system.
    132 
    133 **/
    134 EFI_STATUS
    135 EFIAPI
    136 CpuIoServiceWrite (
    137   IN CONST EFI_PEI_SERVICES    **PeiServices,
    138   IN CONST EFI_PEI_CPU_IO_PPI  *This,
    139   IN EFI_PEI_CPU_IO_PPI_WIDTH  Width,
    140   IN UINT64                    Address,
    141   IN UINTN                     Count,
    142   IN VOID                      *Buffer
    143   );
    144 
    145 /**
    146   8-bit I/O read operations.
    147 
    148   @param[in] PeiServices  An indirect pointer to the PEI Services Table published
    149                           by the PEI Foundation.
    150   @param[in] This         Pointer to local data for the interface.
    151   @param[in] Address      The physical address of the access.
    152 
    153   @return  An 8-bit value returned from the I/O space.
    154 **/
    155 UINT8
    156 EFIAPI
    157 CpuIoRead8 (
    158   IN  CONST EFI_PEI_SERVICES      **PeiServices,
    159   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
    160   IN  UINT64                      Address
    161   );
    162 
    163 /**
    164   16-bit I/O read operations.
    165 
    166   @param[in] PeiServices  An indirect pointer to the PEI Services Table published
    167                           by the PEI Foundation.
    168   @param[in] This         Pointer to local data for the interface.
    169   @param[in] Address      The physical address of the access.
    170 
    171   @return  A 16-bit value returned from the I/O space.
    172 
    173 **/
    174 UINT16
    175 EFIAPI
    176 CpuIoRead16 (
    177   IN  CONST EFI_PEI_SERVICES      **PeiServices,
    178   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
    179   IN  UINT64                      Address
    180   );
    181 
    182 /**
    183   32-bit I/O read operations.
    184 
    185   @param[in] PeiServices  An indirect pointer to the PEI Services Table published
    186                           by the PEI Foundation.
    187   @param[in] This         Pointer to local data for the interface.
    188   @param[in] Address      The physical address of the access.
    189 
    190   @return  A 32-bit value returned from the I/O space.
    191 
    192 **/
    193 UINT32
    194 EFIAPI
    195 CpuIoRead32 (
    196   IN  CONST EFI_PEI_SERVICES      **PeiServices,
    197   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
    198   IN  UINT64                      Address
    199   );
    200 
    201 /**
    202   64-bit I/O read operations.
    203 
    204   @param[in] PeiServices  An indirect pointer to the PEI Services Table published
    205                           by the PEI Foundation.
    206   @param[in] This         Pointer to local data for the interface.
    207   @param[in] Address      The physical address of the access.
    208 
    209   @return  A 64-bit value returned from the I/O space.
    210 
    211 **/
    212 UINT64
    213 EFIAPI
    214 CpuIoRead64 (
    215   IN  CONST EFI_PEI_SERVICES      **PeiServices,
    216   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
    217   IN  UINT64                      Address
    218   );
    219 
    220 /**
    221   8-bit I/O write operations.
    222 
    223   @param[in] PeiServices  An indirect pointer to the PEI Services Table published
    224                           by the PEI Foundation.
    225   @param[in] This         Pointer to local data for the interface.
    226   @param[in] Address      The physical address of the access.
    227   @param[in] Data         The data to write.
    228 
    229 **/
    230 VOID
    231 EFIAPI
    232 CpuIoWrite8 (
    233   IN  CONST EFI_PEI_SERVICES      **PeiServices,
    234   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
    235   IN  UINT64                      Address,
    236   IN  UINT8                       Data
    237   );
    238 
    239 /**
    240   16-bit I/O write operations.
    241 
    242   @param[in] PeiServices  An indirect pointer to the PEI Services Table published
    243                           by the PEI Foundation.
    244   @param[in] This         Pointer to local data for the interface.
    245   @param[in] Address      The physical address of the access.
    246   @param[in] Data         The data to write.
    247 
    248 **/
    249 VOID
    250 EFIAPI
    251 CpuIoWrite16 (
    252   IN  CONST EFI_PEI_SERVICES      **PeiServices,
    253   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
    254   IN  UINT64                      Address,
    255   IN  UINT16                      Data
    256   );
    257 
    258 /**
    259   32-bit I/O write operations.
    260 
    261   @param[in] PeiServices  An indirect pointer to the PEI Services Table published
    262                           by the PEI Foundation.
    263   @param[in] This         Pointer to local data for the interface.
    264   @param[in] Address      The physical address of the access.
    265   @param[in] Data         The data to write.
    266 
    267 **/
    268 VOID
    269 EFIAPI
    270 CpuIoWrite32 (
    271   IN  CONST EFI_PEI_SERVICES      **PeiServices,
    272   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
    273   IN  UINT64                      Address,
    274   IN  UINT32                      Data
    275   );
    276 
    277 /**
    278   64-bit I/O write operations.
    279 
    280   @param[in] PeiServices  An indirect pointer to the PEI Services Table published
    281                           by the PEI Foundation.
    282   @param[in] This         Pointer to local data for the interface.
    283   @param[in] Address      The physical address of the access.
    284   @param[in] Data         The data to write.
    285 
    286 **/
    287 VOID
    288 EFIAPI
    289 CpuIoWrite64 (
    290   IN  CONST EFI_PEI_SERVICES      **PeiServices,
    291   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
    292   IN  UINT64                      Address,
    293   IN  UINT64                      Data
    294   );
    295 
    296 /**
    297   8-bit memory read operations.
    298 
    299   @param[in] PeiServices  An indirect pointer to the PEI Services Table published
    300                           by the PEI Foundation.
    301   @param[in] This         Pointer to local data for the interface.
    302   @param[in] Address      The physical address of the access.
    303 
    304   @return  An 8-bit value returned from the memory space.
    305 
    306 **/
    307 UINT8
    308 EFIAPI
    309 CpuMemRead8 (
    310   IN  CONST EFI_PEI_SERVICES      **PeiServices,
    311   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
    312   IN  UINT64                      Address
    313   );
    314 
    315 /**
    316   16-bit memory read operations.
    317 
    318   @param[in] PeiServices  An indirect pointer to the PEI Services Table published
    319                           by the PEI Foundation.
    320   @param[in] This         Pointer to local data for the interface.
    321   @param[in] Address      The physical address of the access.
    322 
    323   @return  A 16-bit value returned from the memory space.
    324 
    325 **/
    326 UINT16
    327 EFIAPI
    328 CpuMemRead16 (
    329   IN  CONST EFI_PEI_SERVICES      **PeiServices,
    330   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
    331   IN  UINT64                      Address
    332   );
    333 
    334 /**
    335   32-bit memory read operations.
    336 
    337   @param[in] PeiServices  An indirect pointer to the PEI Services Table published
    338                           by the PEI Foundation.
    339   @param[in] This         Pointer to local data for the interface.
    340   @param[in] Address      The physical address of the access.
    341 
    342   @return  A 32-bit value returned from the memory space.
    343 
    344 **/
    345 UINT32
    346 EFIAPI
    347 CpuMemRead32 (
    348   IN  CONST EFI_PEI_SERVICES      **PeiServices,
    349   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
    350   IN  UINT64                      Address
    351   );
    352 
    353 /**
    354   64-bit memory read operations.
    355 
    356   @param[in] PeiServices  An indirect pointer to the PEI Services Table published
    357                           by the PEI Foundation.
    358   @param[in] This         Pointer to local data for the interface.
    359   @param[in] Address      The physical address of the access.
    360 
    361   @return  A 64-bit value returned from the memory space.
    362 
    363 **/
    364 UINT64
    365 EFIAPI
    366 CpuMemRead64 (
    367   IN  CONST EFI_PEI_SERVICES      **PeiServices,
    368   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
    369   IN  UINT64                      Address
    370   );
    371 
    372 /**
    373   8-bit memory write operations.
    374 
    375   @param[in] PeiServices  An indirect pointer to the PEI Services Table published
    376                           by the PEI Foundation.
    377   @param[in] This         Pointer to local data for the interface.
    378   @param[in] Address      The physical address of the access.
    379   @param[in] Data         The data to write.
    380 
    381 **/
    382 VOID
    383 EFIAPI
    384 CpuMemWrite8 (
    385   IN  CONST EFI_PEI_SERVICES      **PeiServices,
    386   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
    387   IN  UINT64                      Address,
    388   IN  UINT8                       Data
    389   );
    390 
    391 /**
    392   16-bit memory write operations.
    393 
    394   @param[in] PeiServices  An indirect pointer to the PEI Services Table published
    395                           by the PEI Foundation.
    396   @param[in] This         Pointer to local data for the interface.
    397   @param[in] Address      The physical address of the access.
    398   @param[in] Data         The data to write.
    399 
    400 **/
    401 VOID
    402 EFIAPI
    403 CpuMemWrite16 (
    404   IN  CONST EFI_PEI_SERVICES      **PeiServices,
    405   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
    406   IN  UINT64                      Address,
    407   IN  UINT16                      Data
    408   );
    409 
    410 /**
    411   32-bit memory write operations.
    412 
    413   @param[in] PeiServices  An indirect pointer to the PEI Services Table published
    414                           by the PEI Foundation.
    415   @param[in] This         Pointer to local data for the interface.
    416   @param[in] Address      The physical address of the access.
    417   @param[in] Data         The data to write.
    418 
    419 **/
    420 VOID
    421 EFIAPI
    422 CpuMemWrite32 (
    423   IN  CONST EFI_PEI_SERVICES      **PeiServices,
    424   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
    425   IN  UINT64                      Address,
    426   IN  UINT32                      Data
    427   );
    428 
    429 /**
    430   64-bit memory write operations.
    431 
    432   @param[in] PeiServices  An indirect pointer to the PEI Services Table published
    433                           by the PEI Foundation.
    434   @param[in] This         Pointer to local data for the interface.
    435   @param[in] Address      The physical address of the access.
    436   @param[in] Data         The data to write.
    437 
    438 **/
    439 VOID
    440 EFIAPI
    441 CpuMemWrite64 (
    442   IN  CONST EFI_PEI_SERVICES      **PeiServices,
    443   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
    444   IN  UINT64                      Address,
    445   IN  UINT64                      Data
    446   );
    447 
    448 #endif
    449