/** @file
  Universal Payload general definitions.

Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

  @par Revision Reference:
    - Universal Payload Specification 0.75 (https://universalpayload.github.io/documentation/)
**/

#ifndef UNIVERSAL_PAYLOAD_H_
#define UNIVERSAL_PAYLOAD_H_

/**
  Main entry point to Universal Payload.

  @param HobList  Pointer to the beginning of the HOB List from boot loader.
**/
typedef  VOID (EFIAPI *UNIVERSAL_PAYLOAD_ENTRY)(VOID *HobList);

#define UNIVERSAL_PAYLOAD_IDENTIFIER                    SIGNATURE_32('P', 'L', 'D', 'H')
#define UNIVERSAL_PAYLOAD_INFO_SEC_NAME                 ".upld_info"
#define UNIVERSAL_PAYLOAD_EXTRA_SEC_NAME_PREFIX         ".upld."
#define UNIVERSAL_PAYLOAD_EXTRA_SEC_NAME_PREFIX_LENGTH  (sizeof (UNIVERSAL_PAYLOAD_EXTRA_SEC_NAME_PREFIX) - 1)

#pragma pack(1)

typedef struct {
  UINT32    Identifier;
  UINT32    HeaderLength;
  UINT16    SpecRevision;
  UINT8     Reserved[2];
  UINT32    Revision;
  UINT32    Attribute;
  UINT32    Capability;
  CHAR8     ProducerId[16];
  CHAR8     ImageId[16];
} UNIVERSAL_PAYLOAD_INFO_HEADER;

typedef struct {
  UINT8     Revision;
  UINT8     Reserved;
  UINT16    Length;
} UNIVERSAL_PAYLOAD_GENERIC_HEADER;

#pragma pack()

/**
  Returns the size of a structure of known type, up through and including a specified field.

  @param   TYPE     The name of the data structure that contains the field specified by Field.
  @param   Field    The name of the field in the data structure.

  @return  size, in bytes.

**/
#define UNIVERSAL_PAYLOAD_SIZEOF_THROUGH_FIELD(TYPE, Field)  (OFFSET_OF(TYPE, Field) + sizeof (((TYPE *) 0)->Field))

#endif // UNIVERSAL_PAYLOAD_H_
