Home | History | Annotate | Download | only in EsrtDxe
      1 /** @file
      2   Esrt management implementation head file.
      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 _DXE_ESRT_IMPL_H_
     16 #define _DXE_ESRT_IMPL_H_
     17 
     18 #include <Guid/EventGroup.h>
     19 #include <Guid/SystemResourceTable.h>
     20 
     21 #include <Library/UefiLib.h>
     22 #include <Library/UefiRuntimeServicesTableLib.h>
     23 #include <Library/UefiLib.h>
     24 #include <Library/PcdLib.h>
     25 #include <Library/BaseLib.h>
     26 #include <Library/BaseMemoryLib.h>
     27 #include <Library/MemoryAllocationLib.h>
     28 #include <Library/UefiBootServicesTableLib.h>
     29 #include <Library/DebugLib.h>
     30 #include <Library/CapsuleLib.h>
     31 #include <Library/PrintLib.h>
     32 
     33 #include <Protocol/FirmwareManagement.h>
     34 #include <Protocol/EsrtManagement.h>
     35 #include <Protocol/VariableLock.h>
     36 
     37 //
     38 // Name of  Variable for Non-FMP ESRT Repository
     39 //
     40 #define EFI_ESRT_NONFMP_VARIABLE_NAME    L"EsrtNonFmp"
     41 
     42 //
     43 // Name of Variable for FMP
     44 //
     45 #define EFI_ESRT_FMP_VARIABLE_NAME       L"EsrtFmp"
     46 
     47 //
     48 // Attribute of Cached ESRT entry
     49 //
     50 #define ESRT_FROM_FMP                    0x00000001
     51 #define ESRT_FROM_NONFMP                 0x00000002
     52 
     53 typedef struct {
     54   EFI_HANDLE            Handle;
     55   //
     56   // Ready to boot event
     57   //
     58   EFI_EVENT             Event;
     59 
     60   //
     61   // Updates to Fmp storage must be locked.
     62   //
     63   EFI_LOCK              FmpLock;
     64 
     65   //
     66   // Update to Non-Fmp storage must be locked
     67   //
     68   EFI_LOCK              NonFmpLock;
     69 } ESRT_PRIVATE_DATA;
     70 
     71 
     72 /**
     73   Find Esrt Entry stored in ESRT repository.
     74 
     75   @param[in]     FwClass           Firmware class guid in Esrt entry
     76   @param[in]     Attribute         Esrt from Non FMP or FMP instance
     77   @param[out]    Entry             Esrt entry returned
     78 
     79   @retval EFI_SUCCESS            Successfully find an Esrt entry
     80   @retval EF_NOT_FOUND           No Esrt entry found
     81 
     82 **/
     83 EFI_STATUS
     84 GetEsrtEntry (
     85   IN  EFI_GUID              *FwClass,
     86   IN  UINTN                 Attribute,
     87   OUT EFI_SYSTEM_RESOURCE_ENTRY *Entry
     88   );
     89 
     90 /**
     91   Insert a new ESRT entry into ESRT Cache repository.
     92 
     93   @param[in]  Entry                Esrt entry to be set
     94   @param[in]  Attribute            Esrt from Esrt private protocol or FMP instance
     95 
     96   @retval EFI_SUCCESS          Successfully set a variable.
     97 
     98 **/
     99 EFI_STATUS
    100 InsertEsrtEntry(
    101   IN EFI_SYSTEM_RESOURCE_ENTRY *Entry,
    102   UINTN                        Attribute
    103   );
    104 
    105 /**
    106   Delete ESRT Entry from ESRT repository.
    107 
    108   @param[in]    FwClass              FwClass of Esrt entry to delete
    109   @param[in]    Attribute            Esrt from Esrt private protocol or FMP instance
    110 
    111   @retval EFI_SUCCESS         Insert all entries Successfully
    112   @retval EFI_NOT_FOUND       ESRT entry with FwClass doesn't exsit
    113 
    114 **/
    115 EFI_STATUS
    116 DeleteEsrtEntry(
    117   IN  EFI_GUID        *FwClass,
    118   IN  UINTN           Attribute
    119   );
    120 
    121 /**
    122   Update one ESRT entry in ESRT repository
    123 
    124   @param[in]    Entry                Esrt entry to be set
    125   @param[in]    Attribute            Esrt from Non Esrt or FMP instance
    126 
    127   @retval EFI_SUCCESS          Successfully Update a variable.
    128   @retval EFI_NOT_FOUND        The Esrt enry doesn't exist
    129 
    130 **/
    131 EFI_STATUS
    132 UpdateEsrtEntry(
    133   IN EFI_SYSTEM_RESOURCE_ENTRY *Entry,
    134   UINTN                        Attribute
    135   );
    136 
    137 /**
    138   Init one ESRT entry according to input FmpImageInfo (V1, V2, V3) .
    139 
    140   @param[in, out]    EsrtEntry             Esrt entry to be Init
    141   @param[in]         FmpImageInfo          FMP image info descriptor
    142   @param[in]         DescriptorVersion     FMP Image info descriptor version
    143 
    144 **/
    145 VOID
    146 SetEsrtEntryFromFmpInfo (
    147   IN OUT EFI_SYSTEM_RESOURCE_ENTRY   *EsrtEntry,
    148   IN EFI_FIRMWARE_IMAGE_DESCRIPTOR   *FmpImageInfo,
    149   IN UINT32                          DescriptorVersion
    150   );
    151 
    152 /**
    153   Get ESRT entry from ESRT Cache by FwClass Guid
    154 
    155   @param[in]       FwClass                FwClass of Esrt entry to get
    156   @param[in, out]  Entry                  Esrt entry returned
    157 
    158   @retval EFI_SUCCESS                   The variable saving this Esrt Entry exists.
    159   @retval EF_NOT_FOUND                  No correct variable found.
    160   @retval EFI_WRITE_PROTECTED           ESRT Cache repository is locked
    161 
    162 **/
    163 EFI_STATUS
    164 EFIAPI
    165 EsrtDxeGetEsrtEntry(
    166   IN     EFI_GUID                  *FwClass,
    167   IN OUT EFI_SYSTEM_RESOURCE_ENTRY *Entry
    168   );
    169 
    170 /**
    171   Update one ESRT entry in ESRT Cache.
    172 
    173   @param[in]  Entry                         Esrt entry to be updated
    174 
    175   @retval EFI_SUCCESS                   Successfully update an ESRT entry in cache.
    176   @retval EFI_INVALID_PARAMETER  Entry does't exist in ESRT Cache
    177   @retval EFI_WRITE_PROTECTED     ESRT Cache is locked
    178 
    179 **/
    180 EFI_STATUS
    181 EFIAPI
    182 EsrtDxeUpdateEsrtEntry(
    183   IN EFI_SYSTEM_RESOURCE_ENTRY *Entry
    184   );
    185 
    186 /**
    187   Non-FMP instance to unregister Esrt Entry from ESRT Cache.
    188 
    189   @param[in]    FwClass                FwClass of Esrt entry to Unregister
    190 
    191   @retval EFI_SUCCESS             Insert all entries Successfully
    192   @retval EFI_NOT_FOUND           Entry of FwClass does not exsit
    193 
    194 **/
    195 EFI_STATUS
    196 EFIAPI
    197 EsrtDxeUnRegisterEsrtEntry(
    198   IN  EFI_GUID        *FwClass
    199   );
    200 
    201 /**
    202   Non-FMP instance to register one ESRT entry into ESRT Cache.
    203 
    204   @param[in]  Entry                Esrt entry to be set
    205 
    206   @retval EFI_SUCCESS          Successfully set a variable.
    207   @retval EFI_INVALID_PARAMETER  ESRT Entry is already exist
    208 **/
    209 EFI_STATUS
    210 EFIAPI
    211 EsrtDxeRegisterEsrtEntry(
    212   IN EFI_SYSTEM_RESOURCE_ENTRY *Entry
    213   );
    214 
    215 /**
    216   This function syn up Cached ESRT with data from FMP instances
    217   Function should be called after Connect All in order to locate all FMP protocols
    218   installed.
    219 
    220   @retval EFI_SUCCESS                      Successfully sync cache repository from FMP instances
    221   @retval EFI_NOT_FOUND                   No FMP Instance are found
    222   @retval EFI_OUT_OF_RESOURCES     Resource allocaton fail
    223 
    224 **/
    225 EFI_STATUS
    226 EFIAPI
    227 EsrtDxeSyncFmp(
    228   VOID
    229   );
    230 
    231 /**
    232   This function locks up Esrt repository to be readonly. It should be called
    233   before gEfiEndOfDxeEventGroupGuid event signaled
    234 
    235   @retval EFI_SUCCESS              Locks up FMP Non-FMP repository successfully
    236 
    237 **/
    238 EFI_STATUS
    239 EFIAPI
    240 EsrtDxeLockEsrtRepository(
    241   VOID
    242   );
    243 
    244 #endif // #ifndef _EFI_ESRT_IMPL_H_
    245 
    246