Home | History | Annotate | Download | only in Protocol
      1 /** @file
      2   EFI SMM Base2 Protocol as defined in the PI 1.2 specification.
      3 
      4   This protocol is utilized by all SMM drivers to locate the SMM infrastructure services and determine
      5   whether the driver is being invoked inside SMRAM or outside of SMRAM.
      6 
      7   Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>
      8   This program and the accompanying materials
      9   are licensed and made available under the terms and conditions of the BSD License
     10   which accompanies this distribution.  The full text of the license may be found at
     11   http://opensource.org/licenses/bsd-license.php
     12 
     13   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     14   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     15 
     16 **/
     17 
     18 #ifndef _SMM_BASE2_H_
     19 #define _SMM_BASE2_H_
     20 
     21 #include <Pi/PiSmmCis.h>
     22 
     23 #define EFI_SMM_BASE2_PROTOCOL_GUID \
     24   { \
     25     0xf4ccbfb7, 0xf6e0, 0x47fd, {0x9d, 0xd4, 0x10, 0xa8, 0xf1, 0x50, 0xc1, 0x91 }  \
     26   }
     27 
     28 typedef struct _EFI_SMM_BASE2_PROTOCOL  EFI_SMM_BASE2_PROTOCOL;
     29 
     30 /**
     31   Service to indicate whether the driver is currently executing in the SMM Initialization phase.
     32 
     33   This service is used to indicate whether the driver is currently executing in the SMM Initialization
     34   phase. For SMM drivers, this will return TRUE in InSmram while inside the driver's entry point and
     35   otherwise FALSE. For combination SMM/DXE drivers, this will return FALSE in the DXE launch. For the
     36   SMM launch, it behaves as an SMM driver.
     37 
     38   @param[in]  This               The EFI_SMM_BASE2_PROTOCOL instance.
     39   @param[out] InSmram            Pointer to a Boolean which, on return, indicates that the driver is
     40                                  currently executing inside of SMRAM (TRUE) or outside of SMRAM (FALSE).
     41 
     42   @retval EFI_SUCCESS            The call returned successfully.
     43   @retval EFI_INVALID_PARAMETER  InSmram was NULL.
     44 **/
     45 typedef
     46 EFI_STATUS
     47 (EFIAPI *EFI_SMM_INSIDE_OUT2)(
     48   IN CONST EFI_SMM_BASE2_PROTOCOL  *This,
     49   OUT BOOLEAN                      *InSmram
     50   )
     51 ;
     52 
     53 /**
     54   Returns the location of the System Management Service Table (SMST).
     55 
     56   This function returns the location of the System Management Service Table (SMST).  The use of the
     57   API is such that a driver can discover the location of the SMST in its entry point and then cache it in
     58   some driver global variable so that the SMST can be invoked in subsequent handlers.
     59 
     60   @param[in]     This            The EFI_SMM_BASE2_PROTOCOL instance.
     61   @param[in,out] Smst            On return, points to a pointer to the System Management Service Table (SMST).
     62 
     63   @retval EFI_SUCCESS            The operation was successful.
     64   @retval EFI_INVALID_PARAMETER  Smst was invalid.
     65   @retval EFI_UNSUPPORTED        Not in SMM.
     66 **/
     67 typedef
     68 EFI_STATUS
     69 (EFIAPI *EFI_SMM_GET_SMST_LOCATION2)(
     70   IN CONST EFI_SMM_BASE2_PROTOCOL  *This,
     71   IN OUT EFI_SMM_SYSTEM_TABLE2     **Smst
     72   )
     73 ;
     74 
     75 ///
     76 /// EFI SMM Base2 Protocol is utilized by all SMM drivers to locate the SMM infrastructure
     77 /// services and determine whether the driver is being invoked inside SMRAM or outside of SMRAM.
     78 ///
     79 struct _EFI_SMM_BASE2_PROTOCOL {
     80   EFI_SMM_INSIDE_OUT2         InSmm;
     81   EFI_SMM_GET_SMST_LOCATION2  GetSmstLocation;
     82 };
     83 
     84 extern EFI_GUID gEfiSmmBase2ProtocolGuid;
     85 
     86 #endif
     87 
     88