blob: 7b8996912a08bc37e2e21ffba00b3ebfea187f7c [file] [log] [blame]
/** @file
This is definition for service binding for Hash driver.
Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _HASH2_DRIVER_H_
#define _HASH2_DRIVER_H_
#include <Uefi.h>
#include <Protocol/ServiceBinding.h>
#include <Protocol/Hash2.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Library/DevicePathLib.h>
#include <Library/UefiLib.h>
#define HASH2_SERVICE_DATA_SIGNATURE SIGNATURE_32 ('H', 'S', '2', 'S')
typedef struct {
UINT32 Signature;
EFI_HANDLE ServiceHandle;
EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;
LIST_ENTRY ChildrenList;
} HASH2_SERVICE_DATA;
#define HASH2_SERVICE_DATA_FROM_THIS(a) \
CR ( \
(a), \
HASH2_SERVICE_DATA, \
ServiceBinding, \
HASH2_SERVICE_DATA_SIGNATURE \
)
#define HASH2_INSTANCE_DATA_SIGNATURE SIGNATURE_32 ('H', 's', '2', 'I')
typedef struct {
UINT32 Signature;
HASH2_SERVICE_DATA *Hash2ServiceData;
EFI_HANDLE Handle;
LIST_ENTRY InstEntry;
EFI_HASH2_PROTOCOL Hash2Protocol;
VOID *HashContext;
VOID *HashInfoContext;
BOOLEAN Updated;
} HASH2_INSTANCE_DATA;
#define HASH2_INSTANCE_DATA_FROM_THIS(a) \
CR ( \
(a), \
HASH2_INSTANCE_DATA, \
Hash2Protocol, \
HASH2_INSTANCE_DATA_SIGNATURE \
)
#define HASH2_INSTANCE_DATA_FROM_LINK(a) \
CR ( \
(a), \
HASH2_INSTANCE_DATA, \
InstEntry, \
HASH2_INSTANCE_DATA_SIGNATURE \
)
/**
Creates a child handle with a set of I/O services.
@param[in] This Protocol instance pointer.
@param[in, out] ChildHandle Pointer to the handle of the child to create. If
it is NULL, then a new handle is created. If
it is not NULL, then the I/O services are added
to the existing child handle.
@retval EFI_SUCCESS The protocol was added to ChildHandle.
@retval EFI_INVALID_PARAMETER ChildHandle is NULL.
@retval EFI_OUT_OF_RESOURCES There are not enough resources available to
create the child.
@retval Others The child handle was not created.
**/
EFI_STATUS
EFIAPI
Hash2ServiceBindingCreateChild (
IN EFI_SERVICE_BINDING_PROTOCOL *This,
IN OUT EFI_HANDLE *ChildHandle
);
/**
Destroys a child handle with a set of I/O services.
The DestroyChild() function does the opposite of CreateChild(). It removes a
protocol that was installed by CreateChild() from ChildHandle. If the removed
protocol is the last protocol on ChildHandle, then ChildHandle is destroyed.
@param[in] This Pointer to the EFI_SERVICE_BINDING_PROTOCOL
instance.
@param[in] ChildHandle Handle of the child to destroy.
@retval EFI_SUCCESS The protocol was removed from ChildHandle.
@retval EFI_UNSUPPORTED ChildHandle does not support the protocol that
is being removed.
@retval EFI_INVALID_PARAMETER ChildHandle is NULL.
@retval EFI_ACCESS_DENIED The protocol could not be removed from the
ChildHandle because its services are being
used.
@retval Others The child handle was not destroyed.
**/
EFI_STATUS
EFIAPI
Hash2ServiceBindingDestroyChild (
IN EFI_SERVICE_BINDING_PROTOCOL *This,
IN EFI_HANDLE ChildHandle
);
extern EFI_HASH2_PROTOCOL mHash2Protocol;
#endif