Home | History | Annotate | Download | only in Hash2DxeCrypto
      1 /** @file
      2   This is definition for service binding for Hash driver.
      3 
      4 Copyright (c) 2015 - 2016, 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 _HASH2_DRIVER_H_
     16 #define _HASH2_DRIVER_H_
     17 
     18 #include <Uefi.h>
     19 
     20 #include <Protocol/ServiceBinding.h>
     21 #include <Protocol/Hash2.h>
     22 
     23 #include <Library/BaseLib.h>
     24 #include <Library/BaseMemoryLib.h>
     25 #include <Library/DebugLib.h>
     26 #include <Library/MemoryAllocationLib.h>
     27 #include <Library/UefiBootServicesTableLib.h>
     28 #include <Library/UefiRuntimeServicesTableLib.h>
     29 #include <Library/DevicePathLib.h>
     30 #include <Library/UefiLib.h>
     31 
     32 #define HASH2_SERVICE_DATA_SIGNATURE  SIGNATURE_32 ('H', 'S', '2', 'S')
     33 
     34 typedef struct {
     35   UINT32                        Signature;
     36   EFI_HANDLE                    ServiceHandle;
     37   EFI_SERVICE_BINDING_PROTOCOL  ServiceBinding;
     38 
     39   LIST_ENTRY                    ChildrenList;
     40 } HASH2_SERVICE_DATA;
     41 
     42 #define HASH2_SERVICE_DATA_FROM_THIS(a) \
     43   CR ( \
     44   (a), \
     45   HASH2_SERVICE_DATA, \
     46   ServiceBinding, \
     47   HASH2_SERVICE_DATA_SIGNATURE \
     48   )
     49 
     50 #define HASH2_INSTANCE_DATA_SIGNATURE   SIGNATURE_32 ('H', 's', '2', 'I')
     51 
     52 typedef struct {
     53   UINT32                           Signature;
     54   HASH2_SERVICE_DATA               *Hash2ServiceData;
     55   EFI_HANDLE                       Handle;
     56   LIST_ENTRY                       InstEntry;
     57   EFI_HASH2_PROTOCOL               Hash2Protocol;
     58   VOID                             *HashContext;
     59   VOID                             *HashInfoContext;
     60   BOOLEAN                          Updated;
     61 } HASH2_INSTANCE_DATA;
     62 
     63 #define HASH2_INSTANCE_DATA_FROM_THIS(a) \
     64   CR ( \
     65   (a), \
     66   HASH2_INSTANCE_DATA, \
     67   Hash2Protocol, \
     68   HASH2_INSTANCE_DATA_SIGNATURE \
     69   )
     70 
     71 #define HASH2_INSTANCE_DATA_FROM_LINK(a) \
     72   CR ( \
     73   (a), \
     74   HASH2_INSTANCE_DATA, \
     75   InstEntry, \
     76   HASH2_INSTANCE_DATA_SIGNATURE \
     77   )
     78 
     79 /**
     80   Creates a child handle with a set of I/O services.
     81 
     82   @param[in]       This              Protocol instance pointer.
     83   @param[in, out]  ChildHandle       Pointer to the handle of the child to create. If
     84                                      it is NULL, then a new handle is created. If
     85                                      it is not NULL, then the I/O services are added
     86                                      to the existing child handle.
     87 
     88   @retval EFI_SUCCES                 The protocol was added to ChildHandle.
     89   @retval EFI_INVALID_PARAMETER      ChildHandle is NULL.
     90   @retval EFI_OUT_OF_RESOURCES       There are not enough resources available to
     91                                      create the child.
     92   @retval Others                     The child handle was not created.
     93 
     94 **/
     95 EFI_STATUS
     96 EFIAPI
     97 Hash2ServiceBindingCreateChild (
     98   IN     EFI_SERVICE_BINDING_PROTOCOL    *This,
     99   IN OUT EFI_HANDLE                      *ChildHandle
    100   );
    101 
    102 /**
    103   Destroys a child handle with a set of I/O services.
    104 
    105   The DestroyChild() function does the opposite of CreateChild(). It removes a
    106   protocol that was installed by CreateChild() from ChildHandle. If the removed
    107   protocol is the last protocol on ChildHandle, then ChildHandle is destroyed.
    108 
    109   @param[in]  This               Pointer to the EFI_SERVICE_BINDING_PROTOCOL
    110                                  instance.
    111   @param[in]  ChildHandle        Handle of the child to destroy.
    112 
    113   @retval EFI_SUCCES             The protocol was removed from ChildHandle.
    114   @retval EFI_UNSUPPORTED        ChildHandle does not support the protocol that
    115                                  is being removed.
    116   @retval EFI_INVALID_PARAMETER  ChildHandle is NULL.
    117   @retval EFI_ACCESS_DENIED      The protocol could not be removed from the
    118                                  ChildHandle because its services are being
    119                                  used.
    120   @retval Others                 The child handle was not destroyed.
    121 
    122 **/
    123 EFI_STATUS
    124 EFIAPI
    125 Hash2ServiceBindingDestroyChild (
    126   IN EFI_SERVICE_BINDING_PROTOCOL    *This,
    127   IN EFI_HANDLE                      ChildHandle
    128   );
    129 
    130 extern EFI_HASH2_PROTOCOL mHash2Protocol;
    131 
    132 #endif
    133