]> git.proxmox.com Git - mirror_edk2.git/blobdiff - DuetPkg/EfiLdr/EfiLoader.c
1, Use PrintLib in Duet loader
[mirror_edk2.git] / DuetPkg / EfiLdr / EfiLoader.c
index 382b7802a19d5186be02831646f0f88f01340e85..c8c749ba4d0941ba6d83c6cf6ac50c0b3ba7d4d4 100644 (file)
@@ -22,6 +22,18 @@ Revision History:
 #include "Support.h"\r
 #include "Debug.h"\r
 #include "PeLoader.h"\r
+#include "TianoDecompress.h"\r
+\r
+STATIC\r
+VOID\r
+SystemHang(\r
+  VOID\r
+  )\r
+{\r
+  CHAR8 PrintBuffer[256];\r
+  AsciiSPrint (PrintBuffer, 256, "## FATEL ERROR ##: Fail to load DUET images! System hang!\n");\r
+  CpuDeadLoop();\r
+}\r
 \r
 VOID\r
 EfiLoader (\r
@@ -39,18 +51,18 @@ EfiLoader (
   UINTN                 BfvPageNumber;\r
   UINTN                 BfvBase;\r
   EFI_MAIN_ENTRYPOINT   EfiMainEntrypoint;\r
+  CHAR8                 PrintBuffer[256];\r
   static EFILDRHANDOFF  Handoff;\r
 \r
-PrintHeader ('A');\r
-\r
   ClearScreen();\r
-  PrintString("EFI Loader\n");\r
+  \r
+  PrintHeader ('A');\r
 \r
-//  PrintString("&BiosMemoryMapBaseAddress = ");   \r
-//  PrintValue64 ((UINT64)(&BiosMemoryMapBaseAddress));\r
-//  PrintString("  BiosMemoryMapBaseAddress = ");   \r
-//  PrintValue(BiosMemoryMapBaseAddress);\r
-//  PrintString("\n");\r
+  AsciiSPrint (PrintBuffer, 256, "Enter DUET Loader ...\n", BiosMemoryMapBaseAddress);\r
+  PrintString (PrintBuffer);\r
+\r
+  AsciiSPrint (PrintBuffer, 256, "BiosMemoryMapBaseAddress = 0x%x\n", BiosMemoryMapBaseAddress);\r
+  PrintString (PrintBuffer);\r
 \r
   //\r
   // Add all EfiConventionalMemory descriptors to the table.  If there are partial pages, then\r
@@ -60,6 +72,9 @@ PrintHeader ('A');
   NumberOfMemoryMapEntries = 0;\r
   GenMemoryMap (&NumberOfMemoryMapEntries, EfiMemoryDescriptor, BiosMemoryMap);\r
 \r
+  AsciiSPrint (PrintBuffer, 256, "Get %d entries of memory map!\n", NumberOfMemoryMapEntries);\r
+  PrintString (PrintBuffer);\r
+\r
   //\r
   // Get information on where the image is in memory\r
   //\r
@@ -67,7 +82,6 @@ PrintHeader ('A');
   EFILDRHeader = (EFILDR_HEADER *)(UINTN)(EFILDR_HEADER_ADDRESS);\r
   EFILDRImage  = (EFILDR_IMAGE *)(UINTN)(EFILDR_HEADER_ADDRESS + sizeof(EFILDR_HEADER));\r
 \r
-PrintHeader ('D');\r
 \r
   //\r
   // Point to the 4th image (Bfv)\r
@@ -79,19 +93,25 @@ PrintHeader ('D');
   // Decompress the image\r
   //\r
 \r
-  Status = UefiDecompressGetInfo (\r
-             NULL, \r
+  AsciiSPrint (PrintBuffer, 256, "Decompress BFV image, Image Address=0x%x! Offset=0x%x\n", \r
+               (UINTN)(EFILDR_HEADER_ADDRESS + EFILDRImage->Offset),\r
+               EFILDRImage->Offset);\r
+  PrintString (PrintBuffer);\r
+\r
+  Status = TianoGetInfo (\r
              (VOID *)(UINTN)(EFILDR_HEADER_ADDRESS + EFILDRImage->Offset),\r
              EFILDRImage->Length,\r
              &DestinationSize, \r
              &ScratchSize\r
              );\r
+\r
   if (EFI_ERROR (Status)) {\r
-    CpuDeadLoop();\r
+    AsciiSPrint (PrintBuffer, 256, "Fail to get decompress information for BFV!\n");\r
+    PrintString (PrintBuffer);\r
+    SystemHang();\r
   }\r
 \r
   Status = TianoDecompress (\r
-             NULL, \r
              (VOID *)(UINTN)(EFILDR_HEADER_ADDRESS + EFILDRImage->Offset),\r
              EFILDRImage->Length,\r
              (VOID *)(UINTN)EFI_DECOMPRESSED_BUFFER_ADDRESS,\r
@@ -99,19 +119,22 @@ PrintHeader ('D');
              (VOID *)(UINTN)((EFI_DECOMPRESSED_BUFFER_ADDRESS + DestinationSize + 0x1000) & 0xfffff000),\r
              ScratchSize\r
              );\r
+\r
   if (EFI_ERROR (Status)) {\r
-    CpuDeadLoop();\r
+    AsciiSPrint (PrintBuffer, 256, "Fail to decompress BFV!\n");\r
+    PrintString (PrintBuffer);\r
+    SystemHang();\r
   }\r
 \r
   BfvPageNumber = EFI_SIZE_TO_PAGES (DestinationSize);\r
   BfvBase = (UINTN) FindSpace (BfvPageNumber, &NumberOfMemoryMapEntries, EfiMemoryDescriptor, EfiRuntimeServicesData, EFI_MEMORY_WB);\r
   if (BfvBase == 0) {\r
-    CpuDeadLoop();\r
+    SystemHang();\r
   }\r
   ZeroMem ((VOID *)(UINTN)BfvBase, BfvPageNumber * EFI_PAGE_SIZE);\r
   CopyMem ((VOID *)(UINTN)BfvBase, (VOID *)(UINTN)EFI_DECOMPRESSED_BUFFER_ADDRESS, DestinationSize);\r
 \r
-PrintHeader ('B');\r
+  PrintHeader ('B');\r
 \r
   //\r
   // Point to the 2nd image (DxeIpl)\r
@@ -122,20 +145,23 @@ PrintHeader ('B');
   //\r
   // Decompress the image\r
   //\r
+  AsciiSPrint (PrintBuffer, 256, "Decompress DxeIpl image, Image Address=0x%x! Offset=0x%x\n", \r
+               (UINTN)(EFILDR_HEADER_ADDRESS + EFILDRImage->Offset),\r
+               EFILDRImage->Offset);\r
 \r
-  Status = UefiDecompressGetInfo (\r
-             NULL, \r
+  Status = TianoGetInfo (\r
              (VOID *)(UINTN)(EFILDR_HEADER_ADDRESS + EFILDRImage->Offset),\r
              EFILDRImage->Length,\r
              &DestinationSize, \r
              &ScratchSize\r
              );\r
   if (EFI_ERROR (Status)) {\r
-    CpuDeadLoop();\r
+    AsciiSPrint (PrintBuffer, 256, "Fail to get decompress information for DxeIpl!\n");\r
+    PrintString (PrintBuffer);\r
+    SystemHang();\r
   }\r
 \r
   Status = TianoDecompress (\r
-             NULL, \r
              (VOID *)(UINTN)(EFILDR_HEADER_ADDRESS + EFILDRImage->Offset),\r
              EFILDRImage->Length,\r
              (VOID *)(UINTN)EFI_DECOMPRESSED_BUFFER_ADDRESS,\r
@@ -144,9 +170,14 @@ PrintHeader ('B');
              ScratchSize\r
              );\r
   if (EFI_ERROR (Status)) {\r
-    CpuDeadLoop();\r
+    AsciiSPrint (PrintBuffer, 256, "Fail to decompress DxeIpl image\n");\r
+    PrintString (PrintBuffer);\r
+    SystemHang();\r
   }\r
 \r
+  AsciiSPrint (PrintBuffer, 256, "Start load DxeIpl PE image\n");\r
+  PrintString (PrintBuffer);  \r
+\r
   //\r
   // Load and relocate the EFI PE/COFF Firmware Image \r
   //\r
@@ -157,7 +188,9 @@ PrintHeader ('B');
              EfiMemoryDescriptor\r
              );\r
   if (EFI_ERROR (Status)) {\r
-    CpuDeadLoop();\r
+    AsciiSPrint (PrintBuffer, 256, "Fail to load and relocate DxeIpl PE image!\n");\r
+    PrintString (PrintBuffer);\r
+    SystemHang();\r
   }\r
 \r
 //  PrintString("Image.NoPages = ");   \r
@@ -176,19 +209,17 @@ PrintHeader ('C');
   // Decompress the image\r
   //\r
 \r
-  Status = UefiDecompressGetInfo (\r
-             NULL, \r
+  Status = TianoGetInfo (\r
              (VOID *)(UINTN)(EFILDR_HEADER_ADDRESS + EFILDRImage->Offset),\r
              EFILDRImage->Length,\r
              &DestinationSize, \r
              &ScratchSize\r
              );\r
   if (EFI_ERROR (Status)) {\r
-    CpuDeadLoop();\r
+    SystemHang();\r
   }\r
 \r
   Status = TianoDecompress (\r
-             NULL, \r
              (VOID *)(UINTN)(EFILDR_HEADER_ADDRESS + EFILDRImage->Offset),\r
              EFILDRImage->Length,\r
              (VOID *)(UINTN)EFI_DECOMPRESSED_BUFFER_ADDRESS,\r
@@ -197,7 +228,7 @@ PrintHeader ('C');
              ScratchSize\r
              );\r
   if (EFI_ERROR (Status)) {\r
-    CpuDeadLoop();\r
+    SystemHang();\r
   }\r
 \r
   //\r
@@ -210,7 +241,7 @@ PrintHeader ('C');
              EfiMemoryDescriptor\r
              );\r
   if (EFI_ERROR (Status)) {\r
-    CpuDeadLoop();\r
+    SystemHang();\r
   }\r
 \r
 PrintHeader ('E');\r
@@ -261,6 +292,6 @@ PrintHeader ('F');
   // There was a problem loading the image, so HALT the system.\r
   //\r
 \r
-  CpuDeadLoop();\r
+  SystemHang();\r
 }\r
 \r