Home | History | Annotate | Download | only in Protocol
      1 /** @file
      2   Variable check definitions.
      3 
      4   Copyright (c) 2015, 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 _VARIABLE_CHECK_H_
     16 #define _VARIABLE_CHECK_H_
     17 
     18 #include <Uefi/UefiSpec.h>
     19 
     20 typedef struct _EDKII_VAR_CHECK_PROTOCOL    EDKII_VAR_CHECK_PROTOCOL;
     21 
     22 #define EDKII_VAR_CHECK_PROTOCOL_GUID { \
     23   0xaf23b340, 0x97b4, 0x4685, { 0x8d, 0x4f, 0xa3, 0xf2, 0x81, 0x69, 0xb2, 0x1d } \
     24 };
     25 
     26 typedef EFI_SET_VARIABLE VAR_CHECK_SET_VARIABLE_CHECK_HANDLER;
     27 
     28 /**
     29   Register SetVariable check handler.
     30   Variable driver will call the handler to do check before
     31   really setting the variable into variable storage.
     32 
     33   @param[in] Handler            Pointer to the check handler.
     34 
     35   @retval EFI_SUCCESS           The SetVariable check handler was registered successfully.
     36   @retval EFI_INVALID_PARAMETER Handler is NULL.
     37   @retval EFI_ACCESS_DENIED     EFI_END_OF_DXE_EVENT_GROUP_GUID or EFI_EVENT_GROUP_READY_TO_BOOT has already been signaled.
     38   @retval EFI_OUT_OF_RESOURCES  There is not enough resource for the SetVariable check handler register request.
     39   @retval EFI_UNSUPPORTED       This interface is not implemented.
     40                                 For example, it is unsupported in VarCheck protocol if both VarCheck and SmmVarCheck protocols are present.
     41 
     42 **/
     43 typedef
     44 EFI_STATUS
     45 (EFIAPI * EDKII_VAR_CHECK_REGISTER_SET_VARIABLE_CHECK_HANDLER) (
     46   IN VAR_CHECK_SET_VARIABLE_CHECK_HANDLER   Handler
     47   );
     48 
     49 #define VAR_CHECK_VARIABLE_PROPERTY_REVISION      0x0001
     50 //
     51 // 1. Set by VariableLock PROTOCOL
     52 // 2. Set by VarCheck PROTOCOL
     53 //
     54 // If set, other fields for check will be ignored.
     55 //
     56 #define VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY     BIT0
     57 
     58 typedef struct {
     59   UINT16                            Revision;
     60   UINT16                            Property;
     61   UINT32                            Attributes;
     62   UINTN                             MinSize;
     63   UINTN                             MaxSize;
     64 } VAR_CHECK_VARIABLE_PROPERTY;
     65 
     66 typedef struct {
     67   EFI_GUID                      *Guid;
     68   CHAR16                        *Name;
     69   VAR_CHECK_VARIABLE_PROPERTY   VariableProperty;
     70 } VARIABLE_ENTRY_PROPERTY;
     71 
     72 /**
     73   Variable property set.
     74   Variable driver will do check according to the VariableProperty before
     75   really setting the variable into variable storage.
     76 
     77   @param[in] Name               Pointer to the variable name.
     78   @param[in] Guid               Pointer to the vendor GUID.
     79   @param[in] VariableProperty   Pointer to the input variable property.
     80 
     81   @retval EFI_SUCCESS           The property of variable specified by the Name and Guid was set successfully.
     82   @retval EFI_INVALID_PARAMETER Name, Guid or VariableProperty is NULL, or Name is an empty string,
     83                                 or the fields of VariableProperty are not valid.
     84   @retval EFI_ACCESS_DENIED     EFI_END_OF_DXE_EVENT_GROUP_GUID or EFI_EVENT_GROUP_READY_TO_BOOT has
     85                                 already been signaled.
     86   @retval EFI_OUT_OF_RESOURCES  There is not enough resource for the variable property set request.
     87 
     88 **/
     89 typedef
     90 EFI_STATUS
     91 (EFIAPI * EDKII_VAR_CHECK_VARIABLE_PROPERTY_SET) (
     92   IN CHAR16                         *Name,
     93   IN EFI_GUID                       *Guid,
     94   IN VAR_CHECK_VARIABLE_PROPERTY    *VariableProperty
     95   );
     96 
     97 /**
     98   Variable property get.
     99 
    100   @param[in]  Name              Pointer to the variable name.
    101   @param[in]  Guid              Pointer to the vendor GUID.
    102   @param[out] VariableProperty  Pointer to the output variable property.
    103 
    104   @retval EFI_SUCCESS           The property of variable specified by the Name and Guid was got successfully.
    105   @retval EFI_INVALID_PARAMETER Name, Guid or VariableProperty is NULL, or Name is an empty string.
    106   @retval EFI_NOT_FOUND         The property of variable specified by the Name and Guid was not found.
    107 
    108 **/
    109 typedef
    110 EFI_STATUS
    111 (EFIAPI * EDKII_VAR_CHECK_VARIABLE_PROPERTY_GET) (
    112   IN CHAR16                         *Name,
    113   IN EFI_GUID                       *Guid,
    114   OUT VAR_CHECK_VARIABLE_PROPERTY   *VariableProperty
    115   );
    116 
    117 struct _EDKII_VAR_CHECK_PROTOCOL {
    118   EDKII_VAR_CHECK_REGISTER_SET_VARIABLE_CHECK_HANDLER   RegisterSetVariableCheckHandler;
    119   EDKII_VAR_CHECK_VARIABLE_PROPERTY_SET                 VariablePropertySet;
    120   EDKII_VAR_CHECK_VARIABLE_PROPERTY_GET                 VariablePropertyGet;
    121 };
    122 
    123 extern EFI_GUID gEdkiiVarCheckProtocolGuid;
    124 
    125 #endif
    126 
    127