/** @file

  Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
  This program and the accompanying materials
  are licensed and made available under the terms and conditions of the BSD License
  which accompanies this distribution. The full text of the license may be found at
  http://opensource.org/licenses/bsd-license.php

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _FSP_PRODUCER_DATA_HEADER_H_
#define _FSP_PRODUCER_DATA_HEADER_H_

#include <Guid/FspHeaderFile.h>

#define BUILD_TIME_STAMP_SIZE 12

//
// FSP Header Data structure from FspHeader driver.
//
#pragma pack(1)
///
/// FSP Producer Data Subtype - 1
///
typedef struct {
  ///
  /// Byte 0x00: Length of this FSP producer data type record.
  ///
  UINT16  Length;
  ///
  /// Byte 0x02: FSP producer data type.
  ///
  UINT8   Type;
  ///
  /// Byte 0x03: Revision of this FSP producer data type.
  ///
  UINT8   Revision;
  ///
  /// Byte 0x04: 4 byte field of RC version which is used to build this FSP image.
  ///
  UINT32  RcVersion;
  ///
  /// Byte 0x08: Represents the build time stamp "YYYYMMDDHHMM".
  ///
  UINT8  BuildTimeStamp[BUILD_TIME_STAMP_SIZE];
} FSP_PRODUCER_DATA_TYPE1;

///
/// FSP Producer Data Subtype - 2
///
typedef struct {
  ///
  /// Byte 0x00: Length of this FSP producer data type record.
  ///
  UINT16  Length;
  ///
  /// Byte 0x02: FSP producer data type.
  ///
  UINT8   Type;
  ///
  /// Byte 0x03: Revision of this FSP producer data type.
  ///
  UINT8   Revision;
  ///
  /// Byte 0x04: 4 byte field of Mrc version which is used to build this FSP image.
  ///
  UINT8  MrcVersion [4];
} FSP_PRODUCER_DATA_TYPE2;

typedef struct {
  FSP_INFO_HEADER          FspInfoHeader;
  FSP_INFO_EXTENDED_HEADER FspInfoExtendedHeader;
  FSP_PRODUCER_DATA_TYPE1  FspProduceDataType1;
  FSP_PRODUCER_DATA_TYPE2  FspProduceDataType2;
  FSP_PATCH_TABLE          FspPatchTable;
} FSP_PRODUCER_DATA_TABLES;
#pragma pack()

#endif // _FSP_PRODUCER_DATA_HEADER_H
