]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/Common/EfiImage.h
Removed cross references from PciCf8Lib and PciExpressLib class to PciLib class.
[mirror_edk2.git] / MdePkg / Include / Common / EfiImage.h
index ebe251e4790b9af4443d5cf34ec63dab76a35e4c..c20a7a6f64d0c07c006c3e8fdb2d23ed665a8d6b 100644 (file)
@@ -1,8 +1,10 @@
 /** @file\r
-  EFI image format for PE32+. Please note some data structures are different\r
-  for IA-32 and Itanium-based images, look for UINTN and the #ifdef EFI_IA64\r
+  EFI image format for PE32 and PE32+. Please note some data structures are \r
+  different for PE32 and PE32+. EFI_IMAGE_NT_HEADERS32 is for PE32 and \r
+  EFI_IMAGE_NT_HEADERS64 is for PE32+. \r
 \r
-  @bug Fix text - doc as defined in MSFT EFI specification.\r
+  This file is coded to the Visual Studio, Microsoft Portable Executable and \r
+  Common Object File Format Specification, Revision 8.0 - May 16, 2006. \r
 \r
   Copyright (c) 2006, Intel Corporation                                                         \r
   All rights reserved. This program and the accompanying materials                          \r
 #define EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION         10\r
 #define EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11\r
 #define EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER      12\r
+#define EFI_IMAGE_SUBSYSTEM_EFI_EFI_ROM             13\r
+\r
 #define EFI_IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER      13\r
 \r
-//\r
-// BugBug: Need to get a real answer for this problem. This is not in the\r
-//         PE specification.\r
-//\r
-//         A SAL runtime driver does not get fixed up when a transition to\r
-//         virtual mode is made. In all other cases it should be treated\r
-//         like a EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER image\r
-//\r
-#define EFI_IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER  13\r
 \r
 //\r
 // PE32+ Machine type for EFI images\r
@@ -58,7 +53,6 @@
 #define EFI_IMAGE_OS2_SIGNATURE     0x454E      // NE\r
 #define EFI_IMAGE_OS2_SIGNATURE_LE  0x454C      // LE\r
 #define EFI_IMAGE_NT_SIGNATURE      0x00004550  // PE00\r
-#define EFI_IMAGE_EDOS_SIGNATURE    0x44454550  // PEED\r
 \r
 ///\r
 /// PE images can start with an optional DOS header, so if an image is run\r
@@ -158,9 +152,9 @@ typedef struct {
 \r
 ///\r
 /// @attention\r
-/// EFI_IMAGE_OPTIONAL_HEADER32 and EFI_IMAGE_OPTIONAL_HEADER64\r
-/// are for use ONLY by tools.  All proper EFI code MUST use\r
-/// EFI_IMAGE_OPTIONAL_HEADER ONLY!!!\r
+/// EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC means PE32 and \r
+/// EFI_IMAGE_OPTIONAL_HEADER32 must be used. The data structures only vary\r
+/// after NT additional fields.\r
 ///\r
 #define EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b\r
 \r
@@ -206,9 +200,9 @@ typedef struct {
 \r
 ///\r
 /// @attention\r
-/// EFI_IMAGE_OPTIONAL_HEADER32 and EFI_IMAGE_OPTIONAL_HEADER64\r
-/// are for use ONLY by tools.  All proper EFI code MUST use\r
-/// EFI_IMAGE_OPTIONAL_HEADER ONLY!!!\r
+/// EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC means PE32+ and \r
+/// EFI_IMAGE_OPTIONAL_HEADER64 must be used. The data structures only vary\r
+/// after NT additional fields.\r
 ///\r
 #define EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b\r
 \r
@@ -251,6 +245,7 @@ typedef struct {
   EFI_IMAGE_DATA_DIRECTORY  DataDirectory[EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES];\r
 } EFI_IMAGE_OPTIONAL_HEADER64;\r
 \r
+\r
 ///\r
 /// @attention\r
 /// EFI_IMAGE_NT_HEADERS32 and EFI_IMAGE_HEADERS64 are for use ONLY\r
@@ -272,6 +267,7 @@ typedef struct {
 \r
 #define EFI_IMAGE_SIZEOF_NT_OPTIONAL64_HEADER sizeof (EFI_IMAGE_NT_HEADERS64)\r
 \r
+\r
 //\r
 // Processor specific definition of EFI_IMAGE_OPTIONAL_HEADER so the\r
 // type name EFI_IMAGE_OPTIONAL_HEADER is appropriate to the build.  Same for\r
@@ -279,31 +275,35 @@ typedef struct {
 //\r
 #if   defined (MDE_CPU_IA32)\r
 \r
-typedef EFI_IMAGE_OPTIONAL_HEADER32     EFI_IMAGE_OPTIONAL_HEADER;\r
-typedef EFI_IMAGE_NT_HEADERS32          EFI_IMAGE_NT_HEADERS;\r
-\r
-#define EFI_IMAGE_NT_OPTIONAL_HDR_MAGIC EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC\r
 #define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \\r
   (((Machine) == EFI_IMAGE_MACHINE_IA32) || ((Machine) == EFI_IMAGE_MACHINE_EBC))\r
 \r
-#elif defined (MDE_CPU_IPF)\r
+#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_X64) \r
+\r
+//\r
+// @bug - Remove me when other package updated. \r
+//\r
+typedef EFI_IMAGE_NT_HEADERS32    EFI_IMAGE_NT_HEADERS;\r
 \r
-typedef EFI_IMAGE_OPTIONAL_HEADER64     EFI_IMAGE_OPTIONAL_HEADER;\r
-typedef EFI_IMAGE_NT_HEADERS64          EFI_IMAGE_NT_HEADERS;\r
+#elif defined (MDE_CPU_IPF)\r
 \r
-#define EFI_IMAGE_NT_OPTIONAL_HDR_MAGIC EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC\r
 #define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \\r
   (((Machine) == EFI_IMAGE_MACHINE_IPF) || ((Machine) == EFI_IMAGE_MACHINE_EBC))\r
 \r
-#elif defined (MDE_CPU_X64)\r
+#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE) \r
 \r
-typedef EFI_IMAGE_OPTIONAL_HEADER64     EFI_IMAGE_OPTIONAL_HEADER;\r
-typedef EFI_IMAGE_NT_HEADERS64          EFI_IMAGE_NT_HEADERS;\r
+#elif defined (MDE_CPU_X64)\r
 \r
-#define EFI_IMAGE_NT_OPTIONAL_HDR_MAGIC EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC\r
 #define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \\r
   (((Machine) == EFI_IMAGE_MACHINE_X64) || ((Machine) == EFI_IMAGE_MACHINE_EBC))\r
 \r
+#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_IA32) \r
+\r
+//\r
+// @bug - Remove me when other package updated. \r
+//\r
+typedef EFI_IMAGE_NT_HEADERS32    EFI_IMAGE_NT_HEADERS;\r
+\r
 #elif defined (MDE_CPU_EBC)\r
 \r
 //\r
@@ -311,12 +311,10 @@ typedef EFI_IMAGE_NT_HEADERS64          EFI_IMAGE_NT_HEADERS;
 // It does not make sense to have a PE loader coded in EBC. You need to \r
 // understand the basic \r
 //\r
-typedef EFI_IMAGE_OPTIONAL_HEADER64     EFI_IMAGE_OPTIONAL_HEADER;\r
-typedef EFI_IMAGE_NT_HEADERS64          EFI_IMAGE_NT_HEADERS;\r
-\r
-#define EFI_IMAGE_NT_OPTIONAL_HDR_MAGIC EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC\r
 #define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_EBC)\r
 \r
+#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE) \r
+\r
 #else\r
 #error Unknown Processor Type\r
 #endif\r
@@ -515,15 +513,36 @@ typedef struct {
 //\r
 // I386 relocation types.\r
 //\r
-#define EFI_IMAGE_REL_I386_ABSOLUTE 0   // Reference is absolute, no relocation is necessary\r
-#define EFI_IMAGE_REL_I386_DIR16    01  // Direct 16-bit reference to the symbols virtual address\r
-#define EFI_IMAGE_REL_I386_REL16    02  // PC-relative 16-bit reference to the symbols virtual address\r
-#define EFI_IMAGE_REL_I386_DIR32    06  // Direct 32-bit reference to the symbols virtual address\r
-#define EFI_IMAGE_REL_I386_DIR32NB  07  // Direct 32-bit reference to the symbols virtual address, base not included\r
-#define EFI_IMAGE_REL_I386_SEG12    011 // Direct 16-bit reference to the segment-selector bits of a 32-bit virtual address\r
-#define EFI_IMAGE_REL_I386_SECTION  012\r
-#define EFI_IMAGE_REL_I386_SECREL   013\r
-#define EFI_IMAGE_REL_I386_REL32    024 // PC-relative 32-bit reference to the symbols virtual address\r
+#define EFI_IMAGE_REL_I386_ABSOLUTE 0x0000   // Reference is absolute, no relocation is necessary\r
+#define EFI_IMAGE_REL_I386_DIR16    0x0001  // Direct 16-bit reference to the symbols virtual address\r
+#define EFI_IMAGE_REL_I386_REL16    0x0002  // PC-relative 16-bit reference to the symbols virtual address\r
+#define EFI_IMAGE_REL_I386_DIR32    0x0006  // Direct 32-bit reference to the symbols virtual address\r
+#define EFI_IMAGE_REL_I386_DIR32NB  0x0007  // Direct 32-bit reference to the symbols virtual address, base not included\r
+#define EFI_IMAGE_REL_I386_SEG12    0x0009 // Direct 16-bit reference to the segment-selector bits of a 32-bit virtual address\r
+#define EFI_IMAGE_REL_I386_SECTION  0x001a\r
+#define EFI_IMAGE_REL_I386_SECREL   0x000b\r
+#define EFI_IMAGE_REL_I386_REL32    0x0014 // PC-relative 32-bit reference to the symbols virtual address\r
+\r
+//\r
+// x64 processor relocation types.\r
+//\r
+#define IMAGE_REL_AMD64_ABSOLUTE       0x0000\r
+#define IMAGE_REL_AMD64_ADDR64   0x0001\r
+#define IMAGE_REL_AMD64_ADDR32   0x0002\r
+#define IMAGE_REL_AMD64_ADDR32NB       0x0003\r
+#define IMAGE_REL_AMD64_REL32      0x0004\r
+#define IMAGE_REL_AMD64_REL32_1          0x0005\r
+#define IMAGE_REL_AMD64_REL32_2          0x0006\r
+#define IMAGE_REL_AMD64_REL32_3          0x0007\r
+#define IMAGE_REL_AMD64_REL32_4          0x0008\r
+#define IMAGE_REL_AMD64_REL32_5          0x0009\r
+#define IMAGE_REL_AMD64_SECTION          0x000A\r
+#define IMAGE_REL_AMD64_SECREL   0x000B\r
+#define IMAGE_REL_AMD64_SECREL7          0x000C\r
+#define IMAGE_REL_AMD64_TOKEN      0x000D\r
+#define IMAGE_REL_AMD64_SREL32   0x000E\r
+#define IMAGE_REL_AMD64_PAIR       0x000F\r
+#define IMAGE_REL_AMD64_SSPAN32          0x0010\r
 \r
 ///\r
 /// Based relocation format.\r
@@ -695,4 +714,21 @@ typedef struct {
 #define EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC  0\r
 #define EFI_TE_IMAGE_DIRECTORY_ENTRY_DEBUG      1\r
 \r
+\r
+//\r
+// Union of PE32, PE32+, and TE headers\r
+//\r
+typedef union {\r
+  EFI_IMAGE_NT_HEADERS32   Pe32;\r
+  EFI_IMAGE_NT_HEADERS64   Pe32Plus;\r
+  EFI_TE_IMAGE_HEADER      Te;\r
+} EFI_IMAGE_OPTIONAL_HEADER_UNION;\r
+\r
+typedef union {\r
+  EFI_IMAGE_NT_HEADERS32            *Pe32;\r
+  EFI_IMAGE_NT_HEADERS64            *Pe32Plus;\r
+  EFI_TE_IMAGE_HEADER               *Te;\r
+  EFI_IMAGE_OPTIONAL_HEADER_UNION   *Union;\r
+} EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION;\r
+\r
 #endif\r