]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EmbeddedPkg/Ebl/HwDebug.c
OvmfPkg/QemuFwCfgLib: Implement SEV internal functions for PEI phase
[mirror_edk2.git] / EmbeddedPkg / Ebl / HwDebug.c
index 6ffbaf11704ac70f3db821a515f937c465793ee3..a62ccdc9c521c4ef208fbc5ed3a3592b81fcf84f 100644 (file)
@@ -1,10 +1,11 @@
 /** @file\r
   Basic command line parser for EBL (Embedded Boot Loader)\r
 \r
-  Copyright (c) 2007, Intel Corporation<BR>\r
-  Portions copyright (c) 2008-2009, Apple Inc. All rights reserved.\r
+  Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>\r
+  Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
+  (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>\r
 \r
-  All rights reserved. This program and the accompanying materials\r
+  This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
   http://opensource.org/licenses/bsd-license.php\r
@@ -14,7 +15,7 @@
 \r
   Module Name:  HwDebug.c\r
 \r
-  Commands useful for debugging hardware. \r
+  Commands useful for debugging hardware.\r
 \r
 **/\r
 \r
 /**\r
   Dump memory\r
 \r
-  Argv[0] - "md"\r
+  Argv[0] - "md"[.#] # is optional width 1, 2, 4, or 8. Default 1\r
   Argv[1] - Hex Address to dump\r
   Argv[2] - Number of hex bytes to dump (0x20 is default)\r
-  Argv[3] - [1|2|4|8] byte width of the dump\r
 \r
-  md 0x123445678 50 4 ; Dump 0x50 4 byte quantities starting at 0x123445678\r
-  md 0x123445678 40   ; Dump 0x40 1 byte quantities starting at 0x123445678\r
-  md 0x123445678      ; Dump 0x20 1 byte quantities starting at 0x123445678\r
+  md.4 0x123445678 50 ; Dump 0x50 4 byte quantities starting at 0x123445678\r
+  md   0x123445678 40 ; Dump 0x40 1 byte quantities starting at 0x123445678\r
+  md   0x123445678    ; Dump 0x20 1 byte quantities starting at 0x123445678\r
 \r
   @param  Argc   Number of command arguments in Argv\r
-  @param  Argv   Array of strings that represent the parsed command line. \r
-                 Argv[0] is the comamnd name\r
+  @param  Argv   Array of strings that represent the parsed command line.\r
+                 Argv[0] is the command name\r
 \r
   @return EFI_SUCCESS\r
 \r
 **/\r
 EFI_STATUS\r
+EFIAPI\r
 EblMdCmd (\r
   IN UINTN  Argc,\r
   IN CHAR8  **Argv\r
@@ -48,24 +49,23 @@ EblMdCmd (
 {\r
   STATIC UINT8  *Address = NULL;\r
   STATIC UINTN  Length   = 0x20;\r
-  STATIC UINTN  Width    = 1;\r
+  STATIC UINTN  Width;\r
 \r
-  switch (Argc)\r
-  {\r
-    case 4:\r
-      Width = AsciiStrHexToUintn(Argv[3]);\r
+  Width = WidthFromCommandName (Argv[0], 1);\r
+\r
+  switch (Argc) {\r
     case 3:\r
       Length = AsciiStrHexToUintn(Argv[2]);\r
     case 2:\r
-      Address = (UINT8 *)AsciiStrHexToUintn(Argv[1]);\r
+      Address = (UINT8 *)AsciiStrHexToUintn (Argv[1]);\r
     default:\r
       break;\r
   }\r
 \r
-  OutputData(Address, Length, Width, (UINTN)Address);\r
+  OutputData (Address, Length, Width, (UINTN)Address);\r
 \r
   Address += Length;\r
-  \r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -73,25 +73,25 @@ EblMdCmd (
 /**\r
   Fill Memory with data\r
 \r
-  Argv[0] - "mfill"\r
+  Argv[0] - "mfill"[.#] # is optional width 1, 2, 4, or 8. Default 4\r
   Argv[1] - Hex Address to fill\r
   Argv[2] - Data to write (0x00 is default)\r
   Argv[3] - Number of units to dump.\r
-  Argv[4] - [1|2|4|8] byte width of the dump\r
 \r
-  mf 0x123445678 aa 1 100 ; Start at 0x123445678 and write aa (1 byte) to the next 100 bytes\r
-  mf 0x123445678 aa 4 100 ; Start at 0x123445678 and write aa (4 byte) to the next 400 bytes\r
+  mf.1 0x123445678 aa 100 ; Start at 0x123445678 and write aa (1 byte) to the next 100 bytes\r
+  mf.4 0x123445678 aa 100 ; Start at 0x123445678 and write aa (4 byte) to the next 400 bytes\r
   mf 0x123445678 aa       ; Start at 0x123445678 and write aa (4 byte) to the next 1 byte\r
   mf 0x123445678          ; Start at 0x123445678 and write 00 (4 byte) to the next 1 byte\r
 \r
   @param  Argc   Number of command arguments in Argv\r
-  @param  Argv   Array of strings that represent the parsed command line. \r
-                 Argv[0] is the comamnd name\r
+  @param  Argv   Array of strings that represent the parsed command line.\r
+                 Argv[0] is the command name\r
 \r
   @return EFI_SUCCESS\r
 \r
 **/\r
 EFI_STATUS\r
+EFIAPI\r
 EblMfillCmd (\r
   IN UINTN  Argc,\r
   IN CHAR8  **Argv\r
@@ -107,21 +107,22 @@ EblMfillCmd (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
+  Width = WidthFromCommandName (Argv[0], 4);\r
+\r
   Address = AsciiStrHexToUintn (Argv[1]);\r
   Data    = (Argc > 2) ? (UINT32)AsciiStrHexToUintn (Argv[2]) : 0;\r
-  Width   = (Argc > 3) ? AsciiStrHexToUintn (Argv[3]) : 4;\r
-  Length  = (Argc > 4) ? AsciiStrHexToUintn (Argv[4]) : 1;\r
+  Length  = (Argc > 3) ? AsciiStrHexToUintn (Argv[3]) : 1;\r
 \r
   for (EndAddress = Address + (Length * Width); Address < EndAddress; Address += Width) {\r
     if (Width == 4) {\r
       MmioWrite32 (Address, Data);\r
     } else if (Width == 2) {\r
-      MmioWrite32 (Address, (UINT16)Data);\r
+      MmioWrite16 (Address, (UINT16)Data);\r
     } else {\r
-      MmioWrite32 (Address, (UINT8)Data);\r
+      MmioWrite8 (Address, (UINT8)Data);\r
     }\r
   }\r
-  \r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -164,13 +165,14 @@ CHAR8 *gPciSerialClassCodes[] = {
   Argv[3] - func\r
 \r
   @param  Argc   Number of command arguments in Argv\r
-  @param  Argv   Array of strings that represent the parsed command line. \r
-                 Argv[0] is the comamnd name\r
+  @param  Argv   Array of strings that represent the parsed command line.\r
+                 Argv[0] is the command name\r
 \r
   @return EFI_SUCCESS\r
 \r
 **/\r
 EFI_STATUS\r
+EFIAPI\r
 EblPciCmd (\r
   IN UINTN  Argc,\r
   IN CHAR8  **Argv\r
@@ -197,13 +199,13 @@ EblPciCmd (
   CHAR8                         *Str;\r
   UINTN                         ThisBus;\r
 \r
-  \r
+\r
   BusArg  = (Argc > 1) ? AsciiStrDecimalToUintn (Argv[1]) : 0;\r
   DevArg  = (Argc > 2) ? AsciiStrDecimalToUintn (Argv[2]) : 0;\r
   FuncArg = (Argc > 3) ? AsciiStrDecimalToUintn (Argv[3]) : 0;\r
 \r
   Header = &PciHeader;\r
-  \r
+\r
   Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiPciIoProtocolGuid, NULL, &HandleCount, &HandleBuffer);\r
   if (EFI_ERROR (Status)) {\r
     AsciiPrint ("No PCI devices found in the system\n");\r
@@ -226,7 +228,7 @@ EblPciCmd (
           Status = Pci->Pci.Read (Pci, EfiPciIoWidthUint32, 0, sizeof (PciHeader)/sizeof (UINT32), &PciHeader);\r
           if (!EFI_ERROR (Status)) {\r
             Hdr = &PciHeader.Bridge.Hdr;\r
-            \r
+\r
             if (Hdr->ClassCode[2] < sizeof (gPciDevClass)/sizeof (VOID *)) {\r
               Str = gPciDevClass[Hdr->ClassCode[2]];\r
               if (Hdr->ClassCode[2] == PCI_CLASS_SERIAL) {\r
@@ -241,7 +243,7 @@ EblPciCmd (
             AsciiPrint ("  0x%04x   0x%04x    %a 0x%02x", Hdr->VendorId, Hdr->DeviceId, Str, Hdr->ClassCode[1]);\r
           }\r
           if (Seg != 0) {\r
-            // Only print Segment if it is non zero. If you only have one PCI segment it is \r
+            // Only print Segment if it is non zero. If you only have one PCI segment it is\r
             // redundent to print it out\r
             AsciiPrint (" Seg:%d", Seg);\r
           }\r
@@ -256,20 +258,20 @@ EblPciCmd (
       if (!EFI_ERROR (Status)) {\r
         Pci->GetLocation (Pci, &Seg, &Bus, &Dev, &Func);\r
         if ((Bus == BusArg) && (Dev == DevArg) && (Func == FuncArg)) {\r
-          // Only print Segment if it is non zero. If you only have one PCI segment it is \r
-          // redundent to print it out\r
+          // Only print Segment if it is non zero. If you only have one PCI segment it is\r
+          // redundant to print it out\r
           if (Seg != 0) {\r
             AsciiPrint ("Seg:%d ", Seg);\r
           }\r
           AsciiPrint ("Bus:%d Dev:%d Func:%d ", Bus, Dev, Func);\r
-          \r
+\r
           Status = Pci->Pci.Read (Pci, EfiPciIoWidthUint32, 0, sizeof (PciHeader)/sizeof (UINT32), Header);\r
           if (!EFI_ERROR (Status)) {\r
             Hdr = &PciHeader.Bridge.Hdr;\r
             if (IS_PCI_BRIDGE (&PciHeader.Bridge)) {\r
               Bridge = &PciHeader.Bridge.Bridge;\r
               AsciiPrint (\r
-                "PCI Bridge. Bus Primary %d Secondary %d Subordinate %d\n", \r
+                "PCI Bridge. Bus Primary %d Secondary %d Subordinate %d\n",\r
                 Bridge->PrimaryBus, Bridge->SecondaryBus, Bridge->SubordinateBus\r
                 );\r
               AsciiPrint ("  Bar 0: 0x%08x  Bar 1: 0x%08x\n", Bridge->Bar[0], Bridge->Bar[1]);\r
@@ -285,24 +287,26 @@ EblPciCmd (
               }\r
             }\r
           }\r
-          \r
+\r
           AsciiPrint ("\n");\r
           break;\r
         }\r
       }\r
     }\r
   }\r
-  \r
+\r
   FreePool (HandleBuffer);\r
   return EFI_SUCCESS;\r
 }\r
 \r
 \r
 GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdPciDebugTemplate[] = {\r
-  "pci",\r
-  " [bus] [dev] [func]; Dump PCI",\r
-  NULL,\r
-  EblPciCmd\r
+  {\r
+    "pci",\r
+    " [bus] [dev] [func]; Dump PCI",\r
+    NULL,\r
+    EblPciCmd\r
+  }\r
 };\r
 \r
 \r
@@ -310,13 +314,13 @@ GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdHwDebugTemplate[] =
 {\r
   {\r
     "md",\r
-    " [Addr] [Len] [1|2|4]; Memory Dump from Addr Len bytes",\r
+    "[.{1|2|4}] [Addr] [Len] [1|2|4]; Memory Dump from Addr Len bytes",\r
     NULL,\r
     EblMdCmd\r
   },\r
   {\r
     "mfill",\r
-    " Addr Len [data] [1|2|4]; Memory Fill Addr Len*(1|2|4) bytes of data(0)",\r
+    "[.{1|2|4}] Addr Len [data]; Memory Fill Addr Len*(1|2|4) bytes of data(0)",\r
     NULL,\r
     EblMfillCmd\r
   },\r