]> git.proxmox.com Git - mirror_edk2.git/commitdiff
IntelFsp2Pkg: BaseFspDebugLibSerialPort Support for X64
authorKuo, Ted <ted.kuo@intel.com>
Mon, 14 Mar 2022 02:32:42 +0000 (10:32 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Thu, 17 Mar 2022 12:58:54 +0000 (12:58 +0000)
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3833
Add BaseFspDebugLibSerialPort Support for X64.

Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Cc: Ashraf Ali S <ashraf.ali.s@intel.com>
Cc: Ted Kuo <ted.kuo@intel.com>
Signed-off-by: Ted Kuo <ted.kuo@intel.com>
Reviewed-by: Chasel Chiu <chasel.chiu@intel.com>
IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/BaseFspDebugLibSerialPort.inf
IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/DebugLib.c
IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/X64/FspDebug.nasm [new file with mode: 0644]

index 14b1899e6ca75b35b3745b8a59458ce888b07ea1..395def57c33f78bdd7b1cbf6ca189cba95d83aee 100644 (file)
@@ -16,7 +16,7 @@
   LIBRARY_CLASS                  = DebugLib\r
 \r
 #\r
-#  VALID_ARCHITECTURES           = IA32\r
+#  VALID_ARCHITECTURES           = IA32 X64\r
 #\r
 \r
 [Sources]\r
@@ -25,6 +25,9 @@
 [Sources.Ia32]\r
   Ia32/FspDebug.nasm\r
 \r
+[Sources.X64]\r
+  X64/FspDebug.nasm\r
+\r
 [Packages]\r
   MdePkg/MdePkg.dec\r
   IntelFsp2Pkg/IntelFsp2Pkg.dec\r
index c8824cde7f67e3b7e527264d116735013b8abce8..cb2317bfb2409eafa2f09e5bf4e059e1b09eeddb 100644 (file)
@@ -33,7 +33,7 @@ VA_LIST  mVaListNull;
 \r
   @return StackFramePointer  stack frame pointer of function call.\r
 **/\r
-UINT32 *\r
+UINTN *\r
 EFIAPI\r
 GetStackFramePointer (\r
   VOID\r
@@ -193,13 +193,13 @@ DebugBPrint (
 **/\r
 VOID\r
 FillHex (\r
-  UINT32  Value,\r
+  UINT  Value,\r
   CHAR8   *Buffer\r
   )\r
 {\r
   INTN  Idx;\r
 \r
-  for (Idx = 7; Idx >= 0; Idx--) {\r
+  for (Idx = (sizeof (UINTN) * 2) - 1; Idx >= 0; Idx--) {\r
     Buffer[Idx] = mHexTable[Value & 0x0F];\r
     Value     >>= 4;\r
   }\r
@@ -228,26 +228,35 @@ DebugAssertInternal (
   )\r
 {\r
   CHAR8   Buffer[MAX_DEBUG_MESSAGE_LENGTH];\r
-  UINT32  *Frame;\r
+  UINT  *Frame;\r
 \r
-  Frame = (UINT32 *)GetStackFramePointer ();\r
+  Frame = (UINTN *)GetStackFramePointer ();\r
 \r
   //\r
   // Generate the ASSERT() message in Ascii format\r
   //\r
-  AsciiStrnCpyS (\r
-    Buffer,\r
-    sizeof (Buffer) / sizeof (CHAR8),\r
-    "-> EBP:0x00000000  EIP:0x00000000\n",\r
-    sizeof (Buffer) / sizeof (CHAR8) - 1\r
-    );\r
+  if (sizeof (UINTN) == sizeof (UINT32)) {\r
+    AsciiStrnCpyS (\r
+      Buffer,\r
+      sizeof (Buffer) / sizeof (CHAR8),\r
+      "-> EBP:0x00000000  EIP:0x00000000\n",\r
+      sizeof (Buffer) / sizeof (CHAR8) - 1\r
+      );\r
+  } else {\r
+    AsciiStrnCpyS (\r
+      Buffer,\r
+      sizeof (Buffer) / sizeof (CHAR8),\r
+      "-> RBP:0x0000000000000000  RIP:0x0000000000000000\n",\r
+      sizeof (Buffer) / sizeof (CHAR8) - 1\r
+      );\r
+  }\r
   SerialPortWrite ((UINT8 *)"ASSERT DUMP:\n", 13);\r
   while (Frame != NULL) {\r
-    FillHex ((UINT32)Frame, Buffer + 9);\r
-    FillHex (Frame[1], Buffer + 9 + 8 + 8);\r
+    FillHex ((UINTN)Frame, Buffer + 9);\r
+    FillHex (Frame[1], Buffer + 9 + (sizeof (UINTN) * 2) + 8);\r
     SerialPortWrite ((UINT8 *)Buffer, AsciiStrLen (Buffer));\r
-    if ((Frame[0] > (UINT32)Frame) && (Frame[0] < (UINT32)Frame + 0x00100000)) {\r
-      Frame = (UINT32 *)Frame[0];\r
+    if ((Frame[0] > (UINTN)Frame) && (Frame[0] < (UINTN)Frame + 0x00100000)) {\r
+      Frame = (UINTN *)Frame[0];\r
     } else {\r
       Frame = NULL;\r
     }\r
diff --git a/IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/X64/FspDebug.nasm b/IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/X64/FspDebug.nasm
new file mode 100644 (file)
index 0000000..6cf0f0a
--- /dev/null
@@ -0,0 +1,25 @@
+;------------------------------------------------------------------------------\r
+;\r
+; Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>\r
+; SPDX-License-Identifier: BSD-2-Clause-Patent\r
+;\r
+; Abstract:\r
+;\r
+;   FSP Debug functions\r
+;\r
+;------------------------------------------------------------------------------\r
+\r
+    SECTION .text\r
+\r
+;------------------------------------------------------------------------------\r
+; UINT32 *\r
+; EFIAPI\r
+; GetStackFramePointer (\r
+;   VOID\r
+;   );\r
+;------------------------------------------------------------------------------\r
+global ASM_PFX(GetStackFramePointer)\r
+ASM_PFX(GetStackFramePointer):\r
+    mov     rax, rbp\r
+    ret\r
+\r