/** @file

Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>

SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#pragma once

#include <Uefi.h>

#pragma pack(1)

//
// Below data structure is used for lockbox registration in SMST
//

#define SMM_LOCK_BOX_SIGNATURE_32  SIGNATURE_64 ('L','O','C','K','B','_','3','2')
#define SMM_LOCK_BOX_SIGNATURE_64  SIGNATURE_64 ('L','O','C','K','B','_','6','4')

typedef struct {
  UINT64                  Signature;
  EFI_PHYSICAL_ADDRESS    LockBoxDataAddress;
} SMM_LOCK_BOX_CONTEXT;

//
// Below data structure is used for lockbox management
//

#define SMM_LOCK_BOX_DATA_SIGNATURE  SIGNATURE_64 ('L','O','C','K','B','O','X','D')

typedef struct {
  UINT64                  Signature;
  EFI_GUID                Guid;
  EFI_PHYSICAL_ADDRESS    Buffer;
  UINT64                  Length;
  UINT64                  Attributes;
  EFI_PHYSICAL_ADDRESS    SmramBuffer;
  LIST_ENTRY              Link;
} SMM_LOCK_BOX_DATA;

#pragma pack()

/**
  Constructor for SmmLockBox library.
  This is used to set SmmLockBox context, which will be used in PEI phase in S3 boot path later.

  @retval EFI_SUCEESS
  @return Others          Some error occurs.
**/
EFI_STATUS
SmmLockBoxMmConstructor (
  VOID
  );

/**
  Destructor for SmmLockBox library.
  This is used to uninstall SmmLockBoxCommunication configuration table
  if it has been installed in Constructor.

  @retval EFI_SUCEESS       The destructor always returns EFI_SUCCESS.

**/
EFI_STATUS
SmmLockBoxMmDestructor (
  VOID
  );
