Home | History | Annotate | Download | only in Guid
      1 /** @file
      2   The file defined some common structures used for communicating between SMM variable module and SMM variable wrapper module.
      3 
      4 Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>
      5 This program and the accompanying materials are licensed and made available under
      6 the terms and conditions of the BSD License that accompanies this distribution.
      7 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 _SMM_VARIABLE_COMMON_H_
     16 #define _SMM_VARIABLE_COMMON_H_
     17 
     18 #include <Protocol/VarCheck.h>
     19 
     20 #define EFI_SMM_VARIABLE_WRITE_GUID \
     21   { 0x93ba1826, 0xdffb, 0x45dd, { 0x82, 0xa7, 0xe7, 0xdc, 0xaa, 0x3b, 0xbd, 0xf3 } }
     22 
     23 extern EFI_GUID gSmmVariableWriteGuid;
     24 
     25 //
     26 // This structure is used for SMM variable. the collected statistics data is saved in SMRAM. It can be got from
     27 // SMI handler. The communication buffer should be:
     28 // EFI_SMM_COMMUNICATE_HEADER + SMM_VARIABLE_COMMUNICATE_HEADER + payload.
     29 //
     30 typedef struct {
     31   UINTN       Function;
     32   EFI_STATUS  ReturnStatus;
     33   UINT8       Data[1];
     34 } SMM_VARIABLE_COMMUNICATE_HEADER;
     35 
     36 //
     37 // The payload for this function is SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE.
     38 //
     39 #define SMM_VARIABLE_FUNCTION_GET_VARIABLE            1
     40 //
     41 // The payload for this function is SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME.
     42 //
     43 #define SMM_VARIABLE_FUNCTION_GET_NEXT_VARIABLE_NAME  2
     44 //
     45 // The payload for this function is SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE.
     46 //
     47 #define SMM_VARIABLE_FUNCTION_SET_VARIABLE            3
     48 //
     49 // The payload for this function is SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO.
     50 //
     51 #define SMM_VARIABLE_FUNCTION_QUERY_VARIABLE_INFO     4
     52 //
     53 // It is a notify event, no extra payload for this function.
     54 //
     55 #define SMM_VARIABLE_FUNCTION_READY_TO_BOOT           5
     56 //
     57 // It is a notify event, no extra payload for this function.
     58 //
     59 #define SMM_VARIABLE_FUNCTION_EXIT_BOOT_SERVICE       6
     60 //
     61 // The payload for this function is VARIABLE_INFO_ENTRY. The GUID in EFI_SMM_COMMUNICATE_HEADER
     62 // is gEfiSmmVariableProtocolGuid.
     63 //
     64 #define SMM_VARIABLE_FUNCTION_GET_STATISTICS          7
     65 //
     66 // The payload for this function is SMM_VARIABLE_COMMUNICATE_LOCK_VARIABLE
     67 //
     68 #define SMM_VARIABLE_FUNCTION_LOCK_VARIABLE           8
     69 
     70 #define SMM_VARIABLE_FUNCTION_VAR_CHECK_VARIABLE_PROPERTY_SET  9
     71 
     72 #define SMM_VARIABLE_FUNCTION_VAR_CHECK_VARIABLE_PROPERTY_GET  10
     73 
     74 #define SMM_VARIABLE_FUNCTION_GET_PAYLOAD_SIZE        11
     75 
     76 ///
     77 /// Size of SMM communicate header, without including the payload.
     78 ///
     79 #define SMM_COMMUNICATE_HEADER_SIZE  (OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data))
     80 
     81 ///
     82 /// Size of SMM variable communicate header, without including the payload.
     83 ///
     84 #define SMM_VARIABLE_COMMUNICATE_HEADER_SIZE  (OFFSET_OF (SMM_VARIABLE_COMMUNICATE_HEADER, Data))
     85 
     86 ///
     87 /// This structure is used to communicate with SMI handler by SetVariable and GetVariable.
     88 ///
     89 typedef struct {
     90   EFI_GUID    Guid;
     91   UINTN       DataSize;
     92   UINTN       NameSize;
     93   UINT32      Attributes;
     94   CHAR16      Name[1];
     95 } SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE;
     96 
     97 ///
     98 /// This structure is used to communicate with SMI handler by GetNextVariableName.
     99 ///
    100 typedef struct {
    101   EFI_GUID    Guid;
    102   UINTN       NameSize;     // Return name buffer size
    103   CHAR16      Name[1];
    104 } SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME;
    105 
    106 ///
    107 /// This structure is used to communicate with SMI handler by QueryVariableInfo.
    108 ///
    109 typedef struct {
    110   UINT64          MaximumVariableStorageSize;
    111   UINT64          RemainingVariableStorageSize;
    112   UINT64          MaximumVariableSize;
    113   UINT32          Attributes;
    114 } SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO;
    115 
    116 typedef SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME SMM_VARIABLE_COMMUNICATE_LOCK_VARIABLE;
    117 
    118 typedef struct {
    119   EFI_GUID                      Guid;
    120   UINTN                         NameSize;
    121   VAR_CHECK_VARIABLE_PROPERTY   VariableProperty;
    122   CHAR16                        Name[1];
    123 } SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY;
    124 
    125 typedef struct {
    126   UINTN                         VariablePayloadSize;
    127 } SMM_VARIABLE_COMMUNICATE_GET_PAYLOAD_SIZE;
    128 
    129 #endif // _SMM_VARIABLE_COMMON_H_
    130