/** @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/)
**/

#pragma once

/**
  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))
