/*++

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:
  EfiLdrHandoff.h

Abstract:

Revision History:

--*/

#ifndef _EFILDR_HANDOFF_H_
#define _EFILDR_HANDOFF_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
