/*++

Copyright (c) 2006, Intel Corporation                                                         
All rights reserved. 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.             

Module Name:

  MemoryStatusCodeRecord.h
    
Abstract:

  GUID used to identify status code records HOB that originate from the PEI status code  

--*/

#ifndef _MEMORY_STATUS_CODE_RECORD_H__
#define _MEMORY_STATUS_CODE_RECORD_H__

#define MEMORY_STATUS_CODE_RECORD_GUID \
  { \
    0x60cc026, 0x4c0d, 0x4dda, {0x8f, 0x41, 0x59, 0x5f, 0xef, 0x0, 0xa5, 0x2} \
  }

/**
  Memory status code records packet structure :
  +---------------+----------+----------+-----+----------+-----+----------+
  | Packet Header | Record 1 | Record 2 | ... + Record n | ... | Record m |
  +---------------+----------+----------+-----+----------+-----+----------+
                  ^                                 ^                     ^
                  +--------- RecordIndex -----------+                     |
                  +---------------- MaxRecordsNumber----------------------+
**/
typedef struct {
  UINT16                  PacketIndex;          // Index of the Packet.
  UINT16                  RecordIndex;          // Index of record in the packet.
  UINT32                  MaxRecordsNumber;     // Max number of records in the packet.
} MEMORY_STATUSCODE_PACKET_HEADER;

typedef struct {
  EFI_STATUS_CODE_TYPE    CodeType;
  EFI_STATUS_CODE_VALUE   Value;
  UINT32                  Instance;
} MEMORY_STATUSCODE_RECORD;


extern EFI_GUID gMemoryStatusCodeRecordGuid;

#endif
