//
// The following definition will be generated by build tool 
//

//
// Common definitions
//
#define PCD_TYPE_SHIFT        24


#define PCD_TYPE_DATA         (0x00 << PCD_TYPE_SHIFT)
#define PCD_TYPE_HII    	    (0x80 << PCD_TYPE_SHIFT)
#define PCD_TYPE_VPD    	    (0x40 << PCD_TYPE_SHIFT)
#define PCD_TYPE_SKU_ENABLED 	(0x20 << PCD_TYPE_SHIFT)
#define PCD_TYPE_STRING       (0x10 << PCD_TYPE_SHIFT)


#define PCD_DATABASE_OFFSET_MASK (~(PCD_TYPE_HII | PCD_TYPE_VPD | PCD_TYPE_SKU_ENABLED | PCD_TYPE_STRING))

typedef struct  {
  UINT32                ExTokenNumber;
  UINT32                LocalTokenNumber;   // PCD Number of this particular platform build
  UINT16                ExGuidIndex;        // Index of GuidTable
} DYNAMICEX_MAPPING;


typedef struct {
  UINT32  SkuDataStartOffset; //We have to use offsetof MACRO as we don't know padding done by compiler
  UINT32  SkuIdTableOffset;   //Offset from the PCD_DB
} SKU_HEAD;


typedef struct {
  UINT16  GuidTableIndex;   // Offset in Guid Table in units of GUID.
  UINT16  StringIndex;           // Offset in String Table in units of UINT16.
  UINT16  Offset;           // Offset in Variable
} VARIABLE_HEAD  ;


typedef  struct {
  UINT32  Offset;
} VPD_HEAD;

typedef struct {
  UINT32 LocalTokenNumber;
  UINT16 TokenNumber;
  UINT16 Size;
} SIZEINFO;

#define offsetof(s,m)                 (UINT32)&(((s *)0)->m)



