Home | History | Annotate | Download | only in CpuIo2Smm
      1 /** @file
      2   Internal include file for the SMM CPU I/O Protocol.
      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_SMM_H_
     16 #define _CPU_IO2_SMM_H_
     17 
     18 #include <PiSmm.h>
     19 
     20 #include <Protocol/SmmCpuIo2.h>
     21 
     22 #include <Library/BaseLib.h>
     23 #include <Library/DebugLib.h>
     24 #include <Library/IoLib.h>
     25 #include <Library/SmmServicesTableLib.h>
     26 #include <Library/BaseMemoryLib.h>
     27 
     28 #define MAX_IO_PORT_ADDRESS   0xFFFF
     29 
     30 /**
     31   Reads memory-mapped registers.
     32 
     33   The I/O operations are carried out exactly as requested.  The caller is
     34   responsible for any alignment and I/O width issues that the bus, device,
     35   platform, or type of I/O might require.
     36 
     37   @param[in]  This     The EFI_SMM_CPU_IO2_PROTOCOL instance.
     38   @param[in]  Width    Signifies the width of the I/O operations.
     39   @param[in]  Address  The base address of the I/O operations.  The caller is
     40                        responsible for aligning the Address if required.
     41   @param[in]  Count    The number of I/O operations to perform.
     42   @param[out] Buffer   For read operations, the destination buffer to store
     43                        the results.  For write operations, the source buffer
     44                        from which to write data.
     45 
     46   @retval EFI_SUCCESS            The data was read from or written to the device.
     47   @retval EFI_UNSUPPORTED        The Address is not valid for this system.
     48   @retval EFI_INVALID_PARAMETER  Width or Count, or both, were invalid.
     49   @retval EFI_OUT_OF_RESOURCES   The request could not be completed due to a
     50                                  lack of resources
     51 
     52 **/
     53 EFI_STATUS
     54 EFIAPI
     55 CpuMemoryServiceRead (
     56   IN  CONST EFI_SMM_CPU_IO2_PROTOCOL  *This,
     57   IN  EFI_SMM_IO_WIDTH                Width,
     58   IN  UINT64                          Address,
     59   IN  UINTN                           Count,
     60   OUT VOID                            *Buffer
     61   );
     62 
     63 /**
     64   Writes memory-mapped registers.
     65 
     66   The I/O operations are carried out exactly as requested.  The caller is
     67   responsible for any alignment and I/O width issues that the bus, device,
     68   platform, or type of I/O might require.
     69 
     70   @param[in]  This     The EFI_SMM_CPU_IO2_PROTOCOL instance.
     71   @param[in]  Width    Signifies the width of the I/O operations.
     72   @param[in]  Address  The base address of the I/O operations.  The caller is
     73                        responsible for aligning the Address if required.
     74   @param[in]  Count    The number of I/O operations to perform.
     75   @param[in]  Buffer   For read operations, the destination buffer to store
     76                        the results.  For write operations, the source buffer
     77                        from which to write data.
     78 
     79   @retval EFI_SUCCESS            The data was read from or written to the device.
     80   @retval EFI_UNSUPPORTED        The Address is not valid for this system.
     81   @retval EFI_INVALID_PARAMETER  Width or Count, or both, were invalid.
     82   @retval EFI_OUT_OF_RESOURCES   The request could not be completed due to a
     83                                  lack of resources
     84 
     85 **/
     86 EFI_STATUS
     87 EFIAPI
     88 CpuMemoryServiceWrite (
     89   IN CONST EFI_SMM_CPU_IO2_PROTOCOL  *This,
     90   IN EFI_SMM_IO_WIDTH                Width,
     91   IN UINT64                          Address,
     92   IN UINTN                           Count,
     93   IN VOID                            *Buffer
     94   );
     95 
     96 /**
     97   Reads I/O registers.
     98 
     99   The I/O operations are carried out exactly as requested.  The caller is
    100   responsible for any alignment and I/O width issues that the bus, device,
    101   platform, or type of I/O might require.
    102 
    103   @param[in]  This     The EFI_SMM_CPU_IO2_PROTOCOL instance.
    104   @param[in]  Width    Signifies the width of the I/O operations.
    105   @param[in]  Address  The base address of the I/O operations.  The caller is
    106                        responsible for aligning the Address if required.
    107   @param[in]  Count    The number of I/O operations to perform.
    108   @param[out] Buffer   For read operations, the destination buffer to store
    109                        the results.  For write operations, the source buffer
    110                        from which to write data.
    111 
    112   @retval EFI_SUCCESS            The data was read from or written to the device.
    113   @retval EFI_UNSUPPORTED        The Address is not valid for this system.
    114   @retval EFI_INVALID_PARAMETER  Width or Count, or both, were invalid.
    115   @retval EFI_OUT_OF_RESOURCES   The request could not be completed due to a
    116                                  lack of resources
    117 
    118 **/
    119 EFI_STATUS
    120 EFIAPI
    121 CpuIoServiceRead (
    122   IN  CONST EFI_SMM_CPU_IO2_PROTOCOL  *This,
    123   IN  EFI_SMM_IO_WIDTH                Width,
    124   IN  UINT64                          Address,
    125   IN  UINTN                           Count,
    126   OUT VOID                            *Buffer
    127   );
    128 
    129 /**
    130   Write I/O registers.
    131 
    132   The I/O operations are carried out exactly as requested.  The caller is
    133   responsible for any alignment and I/O width issues that the bus, device,
    134   platform, or type of I/O might require.
    135 
    136   @param[in]  This     The EFI_SMM_CPU_IO2_PROTOCOL instance.
    137   @param[in]  Width    Signifies the width of the I/O operations.
    138   @param[in]  Address  The base address of the I/O operations.  The caller is
    139                        responsible for aligning the Address if required.
    140   @param[in]  Count    The number of I/O operations to perform.
    141   @param[in]  Buffer   For read operations, the destination buffer to store
    142                        the results.  For write operations, the source buffer
    143                        from which to write data.
    144 
    145   @retval EFI_SUCCESS            The data was read from or written to the device.
    146   @retval EFI_UNSUPPORTED        The Address is not valid for this system.
    147   @retval EFI_INVALID_PARAMETER  Width or Count, or both, were invalid.
    148   @retval EFI_OUT_OF_RESOURCES   The request could not be completed due to a
    149                                  lack of resources
    150 
    151 **/
    152 EFI_STATUS
    153 EFIAPI
    154 CpuIoServiceWrite (
    155   IN CONST EFI_SMM_CPU_IO2_PROTOCOL  *This,
    156   IN EFI_SMM_IO_WIDTH                Width,
    157   IN UINT64                          Address,
    158   IN UINTN                           Count,
    159   IN VOID                            *Buffer
    160   );
    161 
    162 #endif
    163