Home | History | Annotate | Download | only in Protocol
      1 /** @file
      2   SMM CPU I/O 2 protocol as defined in the PI 1.2 specification.
      3 
      4   This protocol provides CPU I/O and memory access within SMM.
      5 
      6   Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
      7   This program and the accompanying materials
      8   are licensed and made available under the terms and conditions of the BSD License
      9   which accompanies this distribution.  The full text of the license may be found at
     10   http://opensource.org/licenses/bsd-license.php
     11 
     12   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     13   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     14 
     15 **/
     16 
     17 #ifndef _SMM_CPU_IO2_H_
     18 #define _SMM_CPU_IO2_H_
     19 
     20 #define EFI_SMM_CPU_IO2_PROTOCOL_GUID \
     21   { \
     22     0x3242A9D8, 0xCE70, 0x4AA0, { 0x95, 0x5D, 0x5E, 0x7B, 0x14, 0x0D, 0xE4, 0xD2 } \
     23   }
     24 
     25 typedef struct _EFI_SMM_CPU_IO2_PROTOCOL  EFI_SMM_CPU_IO2_PROTOCOL;
     26 
     27 ///
     28 /// Width of the SMM CPU I/O operations
     29 ///
     30 typedef enum {
     31   SMM_IO_UINT8  = 0,
     32   SMM_IO_UINT16 = 1,
     33   SMM_IO_UINT32 = 2,
     34   SMM_IO_UINT64 = 3
     35 } EFI_SMM_IO_WIDTH;
     36 
     37 /**
     38   Provides the basic memory and I/O interfaces used toabstract accesses to devices.
     39 
     40   The I/O operations are carried out exactly as requested.  The caller is
     41   responsible for any alignment and I/O width issues that the bus, device,
     42   platform, or type of I/O might require.
     43 
     44   @param[in]      This     The EFI_SMM_CPU_IO2_PROTOCOL instance.
     45   @param[in]      Width    Signifies the width of the I/O operations.
     46   @param[in]      Address  The base address of the I/O operations.  The caller is
     47                            responsible for aligning the Address if required.
     48   @param[in]      Count    The number of I/O operations to perform.
     49   @param[in,out]  Buffer   For read operations, the destination buffer to store
     50                            the results.  For write operations, the source buffer
     51                            from which to write data.
     52 
     53   @retval EFI_SUCCESS            The data was read from or written to the device.
     54   @retval EFI_UNSUPPORTED        The Address is not valid for this system.
     55   @retval EFI_INVALID_PARAMETER  Width or Count, or both, were invalid.
     56   @retval EFI_OUT_OF_RESOURCES   The request could not be completed due to a lack
     57                                  of resources.
     58 **/
     59 typedef
     60 EFI_STATUS
     61 (EFIAPI *EFI_SMM_CPU_IO2)(
     62   IN     CONST EFI_SMM_CPU_IO2_PROTOCOL  *This,
     63   IN     EFI_SMM_IO_WIDTH                Width,
     64   IN     UINT64                          Address,
     65   IN     UINTN                           Count,
     66   IN OUT VOID                            *Buffer
     67   );
     68 
     69 typedef struct {
     70   ///
     71   /// This service provides the various modalities of memory and I/O read.
     72   ///
     73   EFI_SMM_CPU_IO2  Read;
     74   ///
     75   /// This service provides the various modalities of memory and I/O write.
     76   ///
     77   EFI_SMM_CPU_IO2  Write;
     78 } EFI_SMM_IO_ACCESS2;
     79 
     80 ///
     81 /// SMM CPU I/O Protocol provides CPU I/O and memory access within SMM.
     82 ///
     83 struct _EFI_SMM_CPU_IO2_PROTOCOL {
     84   ///
     85   /// Allows reads and writes to memory-mapped I/O space.
     86   ///
     87   EFI_SMM_IO_ACCESS2 Mem;
     88   ///
     89   /// Allows reads and writes to I/O space.
     90   ///
     91   EFI_SMM_IO_ACCESS2 Io;
     92 };
     93 
     94 extern EFI_GUID gEfiSmmCpuIo2ProtocolGuid;
     95 
     96 #endif
     97