/** @file

Copyright (c) 2006, 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.             

Module Name:
  EfiLdrHandoff.h

Abstract:

Revision History:

**/

#ifndef _EFILDR_HANDOFF_H_
#define _EFILDR_HANDOFF_H_

#include <Base.h>
#include <Uefi.h>

#define EFILDR_BASE_SEGMENT 0x2000
#define EFILDR_LOAD_ADDRESS        (EFILDR_BASE_SEGMENT << 4)
#define EFILDR_HEADER_ADDRESS      (EFILDR_LOAD_ADDRESS+0x2000)

#define EFILDR_CB_VA        0x00

typedef struct _EFILDRHANDOFF {
    UINTN                    MemDescCount;
    EFI_MEMORY_DESCRIPTOR   *MemDesc;
    VOID                    *BfvBase;
    UINTN                   BfvSize;
    VOID                    *DxeIplImageBase;
    UINTN                   DxeIplImageSize;
    VOID                    *DxeCoreImageBase;
    UINTN                   DxeCoreImageSize;
    VOID                    *DxeCoreEntryPoint;
} EFILDRHANDOFF;

typedef struct {
    UINT32       CheckSum;
    UINT32       Offset;
    UINT32       Length;
    UINT8        FileName[52];
} EFILDR_IMAGE;

typedef struct {          
    UINT32       Signature;     
    UINT32       HeaderCheckSum;
    UINT32       FileLength;
    UINT32       NumberOfImages;
} EFILDR_HEADER;

#endif
