]> git.proxmox.com Git - mirror_edk2.git/blobdiff - AppPkg/Applications/Sockets/WebServer/ACPI.c
edk2: Remove AppPkg, StdLib, StdLibPrivateInternalFiles
[mirror_edk2.git] / AppPkg / Applications / Sockets / WebServer / ACPI.c
diff --git a/AppPkg/Applications/Sockets/WebServer/ACPI.c b/AppPkg/Applications/Sockets/WebServer/ACPI.c
deleted file mode 100644 (file)
index b0721bb..0000000
+++ /dev/null
@@ -1,2551 +0,0 @@
-/**\r
-  @file\r
-  Display the ACPI tables\r
-\r
-  Copyright (c) 2011-2012, Intel Corporation. All rights reserved.\r
-  SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#include <WebServer.h>\r
-#include <Guid/Acpi.h>\r
-#include <IndustryStandard/Acpi10.h>\r
-#include <IndustryStandard/Acpi30.h>\r
-\r
-#if defined(_MSC_VER)   //  Handle Microsoft VC++ compiler specifics.\r
-#pragma warning ( disable : 4305 )\r
-#endif  //  defined(_MSC_VER)\r
-\r
-//\r
-// Ensure proper structure formats\r
-//\r
-#pragma pack(1)\r
-\r
-typedef struct {\r
-  UINT8 AddressSpaceId;\r
-  UINT8 RegisterBitWidth;\r
-  UINT8 RegisterBitOffset;\r
-  UINT8 AccessSize;\r
-  UINT64 Address;\r
-} GENERIC_ADDRESS;\r
-\r
-\r
-typedef struct {\r
-  UINT32 Signature;           //    0\r
-  UINT32 Length;              //    4\r
-  UINT8 Revision;             //    8\r
-  UINT8 Checksum;             //    9\r
-  UINT8 OemId[6];             //   10\r
-  UINT8 OemTableId[8];        //   16\r
-  UINT32 OemRevision;         //   24\r
-  UINT32 CreatorId;           //   28\r
-  UINT32 CreatorRevision;     //   32\r
-  UINT8 DefinitionBlock[1];   //   36\r
-} ACPI_DSDT;\r
-\r
-\r
-typedef struct {\r
-  UINT32 Signature;           //    0\r
-  UINT32 Length;              //    4\r
-  UINT8 Revision;             //    8\r
-  UINT8 Checksum;             //    9\r
-  UINT8 OemId[6];             //   10\r
-  UINT8 OemTableId[8];        //   16\r
-  UINT32 OemRevision;         //   24\r
-  UINT32 CreatorId;           //   28\r
-  UINT32 CreatorRevision;     //   32\r
-  UINT32 FirmwareCtrl;        //   36\r
-  UINT32 DSDT;                //   40\r
-  UINT8 Reserved;             //   44\r
-  UINT8 PreferredPmProfile;   //   45\r
-  UINT16 SciInt;              //   46\r
-  UINT32 SmiCmd;              //   48\r
-  UINT8 AcpiEnable;           //   52\r
-  UINT8 AcpiDisable;          //   53\r
-  UINT8 S4BiosReq;            //   54\r
-  UINT8 PStateCnt;            //   55\r
-  UINT32 Pm1aEvtBlk;          //   56\r
-  UINT32 Pm1bEvtBlk;          //   60\r
-  UINT32 Pm1aCntBlk;          //   64\r
-  UINT32 Pm1bCntBlk;          //   68\r
-  UINT32 Pm2CntBlk;           //   72\r
-  UINT32 PmTmrBlk;            //   76\r
-  UINT32 Gpe0Blk;             //   80\r
-  UINT32 Gpe1Blk;             //   84\r
-  UINT8 Pm1EvtLen;            //   88\r
-  UINT8 Pm1CntLen;            //   89\r
-  UINT8 PM2CntLen;            //   90\r
-  UINT8 PmTmrLen;             //   91\r
-  UINT8 Gpe0BlkLen;           //   92\r
-  UINT8 Gpe1BlkLen;           //   93\r
-  UINT8 Gpe1Base;             //   94\r
-  UINT8 CstCnt;               //   95\r
-  UINT16 PLvl2Lat;            //   96\r
-  UINT16 PLvl3Lat;            //   98\r
-  UINT16 FlushSize;           //  100\r
-  UINT16 FlushStride;         //  102\r
-  UINT8 DutyOffset;           //  104\r
-  UINT8 DutyWidth;            //  105\r
-  UINT8 DayAlrm;              //  106\r
-  UINT8 MonAlrm;              //  107\r
-  UINT8 Century;              //  108\r
-  UINT16 IapcBootArch;        //  109\r
-  UINT8 Reserved2;            //  111\r
-  UINT32 Flags;               //  112\r
-  UINT32 ResetReg[3];         //  116\r
-  UINT8 ResetValue;           //  128\r
-  UINT8 Reserved3[3];         //  129\r
-  UINT64 XFirmwareCtrl;       //  132\r
-  UINT64 XDsdt;               //  140\r
-  UINT32 XPm1aEvtBlk[3];      //  148\r
-  UINT32 XPm1bEvtBlk[3];      //  160\r
-  UINT32 XPm1aCntBlk[3];      //  172\r
-  UINT32 XPm1bCntBlk[3];      //  184\r
-  UINT32 XPm2CntBlk[3];       //  196\r
-  UINT32 XPmTmrBlk[3];        //  208\r
-  UINT32 XGpe0Blk[3];         //  220\r
-  UINT32 XGpe1Blk[3];         //  232\r
-} ACPI_FADT;\r
-\r
-\r
-typedef struct {\r
-  UINT32 Signature;\r
-  UINT32 Length;\r
-  UINT8 Revision;\r
-  UINT8 Checksum;\r
-  UINT8 OemId[6];\r
-  UINT8 OemTableId[8];\r
-  UINT32 OemRevision;\r
-  UINT32 CreatorId;\r
-  UINT32 CreatorRevision;\r
-  UINT32 Entry[1];\r
-} ACPI_RSDT;\r
-\r
-\r
-typedef struct {\r
-  UINT32 Signature;           //    0\r
-  UINT32 Length;              //    4\r
-} ACPI_UNKNOWN;\r
-\r
-#pragma pack()\r
-\r
-\r
-typedef struct {\r
-  UINT32 Signature;\r
-  CONST CHAR8 * pTableName;\r
-  CONST CHAR16 * pWebPage;\r
-} TABLE_SIGNATURE;\r
-\r
-\r
-CONST TABLE_SIGNATURE mTableId[] = {\r
-  { APIC_SIGNATURE, "APIC", PAGE_ACPI_APIC },\r
-  { BGRT_SIGNATURE, "BGRT", PAGE_ACPI_BGRT },\r
-  { DSDT_SIGNATURE, "DSDT", PAGE_ACPI_DSDT },\r
-  { FADT_SIGNATURE, "FADT", PAGE_ACPI_FADT },\r
-  { HPET_SIGNATURE, "HPET", PAGE_ACPI_HPET },\r
-  { MCFG_SIGNATURE, "MCFG", PAGE_ACPI_MCFG },\r
-  { SSDT_SIGNATURE, "SSDT", PAGE_ACPI_SSDT },\r
-  { TCPA_SIGNATURE, "TCPA", PAGE_ACPI_TCPA },\r
-  { UEFI_SIGNATURE, "UEFI", PAGE_ACPI_UEFI }\r
-};\r
-\r
-\r
-/**\r
-  Locate the RSDT table\r
-\r
-  @return  Table address or NULL if not found\r
-\r
-**/\r
-CONST ACPI_RSDT *\r
-LocateRsdt (\r
-  VOID\r
-  )\r
-{\r
-  CONST EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER * pRsdp10b;\r
-  CONST EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER * pRsdp30;\r
-  CONST ACPI_RSDT * pRsdt;\r
-  EFI_STATUS Status;\r
-\r
-  //\r
-  //  Use for/break instead of goto\r
-  //\r
-  pRsdt = NULL;\r
-  for ( ; ; ) {\r
-    //\r
-    //  Locate the RSDT\r
-    //\r
-    Status = EfiGetSystemConfigurationTable ( &gEfiAcpiTableGuid, (VOID **)&pRsdp30 );\r
-    if ( !EFI_ERROR ( Status )) {\r
-      pRsdt = (ACPI_RSDT *)(UINTN)pRsdp30->RsdtAddress;\r
-    }\r
-    else {\r
-      Status = EfiGetSystemConfigurationTable (&gEfiAcpi10TableGuid, (VOID **)&pRsdp10b );\r
-      if ( EFI_ERROR ( Status )) {\r
-        break;\r
-      }\r
-      pRsdt = (ACPI_RSDT *)(UINTN)pRsdp10b->RsdtAddress;\r
-    }\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  The entry was not found\r
-  //\r
-  return pRsdt;\r
-}\r
-\r
-\r
-/**\r
-  Locate the specified table\r
-\r
-  @param [in] Signature     Table signature\r
-\r
-  @return  Table address or NULL if not found\r
-\r
-**/\r
-CONST VOID *\r
-LocateTable (\r
-  IN UINT32 Signature\r
-  )\r
-{\r
-  CONST UINT32 * pEnd;\r
-  CONST UINT32 * pEntry;\r
-  CONST EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER * pRsdp10b;\r
-  CONST EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER * pRsdp30;\r
-  CONST ACPI_RSDT * pRsdt;\r
-  CONST UINT32 * pSignature;\r
-  EFI_STATUS Status;\r
-\r
-  //\r
-  //  Use for/break instead of goto\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Locate the RSDT\r
-    //\r
-    Status = EfiGetSystemConfigurationTable ( &gEfiAcpiTableGuid, (VOID **)&pRsdp30 );\r
-    if ( !EFI_ERROR ( Status )) {\r
-      pRsdt = (ACPI_RSDT *)(UINTN)pRsdp30->RsdtAddress;\r
-    }\r
-    else {\r
-      Status = EfiGetSystemConfigurationTable (&gEfiAcpi10TableGuid, (VOID **)&pRsdp10b );\r
-      if ( EFI_ERROR ( Status )) {\r
-        break;\r
-      }\r
-      pRsdt = (ACPI_RSDT *)(UINTN)pRsdp10b->RsdtAddress;\r
-    }\r
-\r
-    //\r
-    //  Walk the list of entries\r
-    //\r
-    pEntry = &pRsdt->Entry[ 0 ];\r
-    pEnd = &pEntry[(( pRsdt->Length - sizeof ( *pRsdt )) >> 2 ) + 1 ];\r
-    while ( pEnd > pEntry ) {\r
-      //\r
-      //  The entry is actually a 32-bit physical table address\r
-      //  The first entry in the table is the 32-bit table signature\r
-      //\r
-      pSignature = (UINT32 *)(UINTN)*pEntry;\r
-      if ( *pSignature == Signature ) {\r
-        return (CONST VOID *)(UINTN)*pEntry;\r
-      }\r
-\r
-      //\r
-      //  Set the next entry\r
-      //\r
-      pEntry++;\r
-    }\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  The entry was not found\r
-  //\r
-  return NULL;\r
-}\r
-\r
-\r
-/**\r
-  Display a row containing a hex value\r
-\r
-  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
-  @param [in] pPort         The WSDT_PORT structure address\r
-  @param [in] pName         Address of a zero terminated name string\r
-  @param [in] Length        Length in bytes\r
-  @param [in] pChar         Address of the first character\r
-\r
-  @retval EFI_SUCCESS       The request was successfully processed\r
-\r
-**/\r
-EFI_STATUS\r
-RowAnsiArray (\r
-  IN int SocketFD,\r
-  IN WSDT_PORT * pPort,\r
-  IN CONST CHAR8 * pName,\r
-  IN UINTN Length,\r
-  IN CONST CHAR8 * pChar\r
-  )\r
-{\r
-  CONST CHAR8 * pData;\r
-  CONST CHAR8 * pEnd;\r
-  EFI_STATUS Status;\r
-\r
-  DBG_ENTER ( );\r
-\r
-  //\r
-  //  Use for/break instead of goto\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Start the row\r
-    //\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "<tr><td>" );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  pName );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "</td><td><code>" );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the characters\r
-    //\r
-    pData = pChar;\r
-    pEnd = &pChar[ Length ];\r
-    while ( pEnd > pData ) {\r
-      Status = HttpSendCharacter ( SocketFD,\r
-                                   pPort,\r
-                                   *pData++,\r
-                                   " " );\r
-      if ( EFI_ERROR ( Status )) {\r
-        break;\r
-      }\r
-    }\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the byte values\r
-    //\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "<br/>0x" );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    pData = pChar;\r
-    while ( pEnd > pData ) {\r
-      Status = HttpSendHexBits ( SocketFD,\r
-                                 pPort,\r
-                                 8,\r
-                                 *pData++ );\r
-      if ( EFI_ERROR ( Status )) {\r
-        break;\r
-      }\r
-      if ( pEnd > pData ) {\r
-        Status = HttpSendAnsiString ( SocketFD,\r
-                                      pPort,\r
-                                      " 0x" );\r
-        if ( EFI_ERROR ( Status )) {\r
-          break;\r
-        }\r
-      }\r
-    }\r
-\r
-    //\r
-    //  Terminate the row\r
-    //\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "</code></td></tr>\r\n" );\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  Return the operation status\r
-  //\r
-  DBG_EXIT_STATUS ( Status );\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Format a row with a list of bytes\r
-\r
-  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
-  @param [in] pPort         The WSDT_PORT structure address\r
-  @param [in] pName         Zero terminated name string\r
-  @param [in] ByteCount     The number of bytes to display\r
-  @param [in] pData         Address of the byte array\r
-\r
-  @retval EFI_SUCCESS       The request was successfully processed\r
-\r
-**/\r
-EFI_STATUS\r
-RowBytes (\r
-  IN int SocketFD,\r
-  IN WSDT_PORT * pPort,\r
-  IN CHAR8 * pName,\r
-  IN UINTN ByteCount,\r
-  IN CONST UINT8 * pData\r
-  )\r
-{\r
-  CONST UINT8 * pEnd;\r
-  EFI_STATUS Status;\r
-\r
-  //\r
-  //  Use for/break instead of goto\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Start the row\r
-    //\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "<tr><td>" );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the field name\r
-    //\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  pName );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the field value\r
-    //\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "</td><td><code>0x" );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    pEnd = &pData[ ByteCount ];\r
-    while ( pEnd > pData ) {\r
-      Status = HttpSendHexBits ( SocketFD,\r
-                                 pPort,\r
-                                 8,\r
-                                 *pData++ );\r
-      if ( EFI_ERROR ( Status )) {\r
-        break;\r
-      }\r
-      if ( pEnd > pData ) {\r
-        Status = HttpSendAnsiString ( SocketFD,\r
-                                      pPort,\r
-                                      " 0x" );\r
-        if ( EFI_ERROR ( Status )) {\r
-          break;\r
-        }\r
-      }\r
-    }\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Terminate the row\r
-    //\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "</code></td></tr>\r\n" );\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  Return the operation status\r
-  //\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Format a row with a list of bytes\r
-\r
-  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
-  @param [in] pPort         The WSDT_PORT structure address\r
-  @param [in] pName         Zero terminated name string\r
-  @param [in] ByteCount     The number of bytes to display\r
-  @param [in] pData         Address of the byte array\r
-\r
-  @retval EFI_SUCCESS       The request was successfully processed\r
-\r
-**/\r
-EFI_STATUS\r
-RowDump (\r
-  IN int SocketFD,\r
-  IN WSDT_PORT * pPort,\r
-  IN CHAR8 * pName,\r
-  IN UINTN ByteCount,\r
-  IN CONST UINT8 * pData\r
-  )\r
-{\r
-  EFI_STATUS Status;\r
-\r
-  //\r
-  //  Use for/break instead of goto\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Start the row\r
-    //\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "<tr><td>" );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the field name\r
-    //\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  pName );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Start the field value\r
-    //\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "</td><td>" );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Dump the buffer\r
-    //\r
-    Status = HttpSendDump ( SocketFD,\r
-                            pPort,\r
-                            ByteCount,\r
-                            pData );\r
-\r
-    //\r
-    //  Terminate the field value and row\r
-    //\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "</td></tr>\r\n" );\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  Return the operation status\r
-  //\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Format a row with a general address\r
-\r
-  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
-  @param [in] pPort         The WSDT_PORT structure address\r
-  @param [in] pName         Zero terminated name string\r
-  @param [in] pAddr         Address of the general address buffer\r
-  @param [in] pWebPage      Zero terminated web page address\r
-\r
-  @retval EFI_SUCCESS       The request was successfully processed\r
-\r
-**/\r
-EFI_STATUS\r
-RowGenericAddress (\r
-  IN int SocketFD,\r
-  IN WSDT_PORT * pPort,\r
-  IN CHAR8 * pName,\r
-  IN CONST UINT32 * pAddr,\r
-  IN CONST CHAR16 * pWebPage\r
-  )\r
-{\r
-  CONST GENERIC_ADDRESS * pGenericAddress;\r
-  EFI_STATUS Status;\r
-\r
-  //\r
-  //  Use for/break instead of goto\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Start the row\r
-    //\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "<tr><td>" );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the field name\r
-    //\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  pName );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the field value\r
-    //\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "</td><td><code>" );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Determine the type of address\r
-    //\r
-    pGenericAddress = (CONST GENERIC_ADDRESS *)pAddr;\r
-    if ( 0 == pGenericAddress->AddressSpaceId ) {\r
-      Status = HttpSendAnsiString ( SocketFD, pPort, "System Memory" );\r
-    }\r
-    else if ( 1 == pGenericAddress->AddressSpaceId ) {\r
-      Status = HttpSendAnsiString ( SocketFD, pPort, "I/O Space" );\r
-    }\r
-    else if ( 2 == pGenericAddress->AddressSpaceId ) {\r
-      Status = HttpSendAnsiString ( SocketFD, pPort, "PCI Configuration Space" );\r
-    }\r
-    else if ( 3 == pGenericAddress->AddressSpaceId ) {\r
-      Status = HttpSendAnsiString ( SocketFD, pPort, "Embedded Controller" );\r
-    }\r
-    else if ( 4 == pGenericAddress->AddressSpaceId ) {\r
-      Status = HttpSendAnsiString ( SocketFD, pPort, "SMBus" );\r
-    }\r
-    else if ( 0x7f == pGenericAddress->AddressSpaceId ) {\r
-      Status = HttpSendAnsiString ( SocketFD, pPort, "Functional Fixed Hardware" );\r
-    }\r
-    else if (( 0xc0 <= pGenericAddress->AddressSpaceId )\r
-      && ( 0xff >= pGenericAddress->AddressSpaceId )) {\r
-      Status = HttpSendAnsiString ( SocketFD, pPort, "OEM Defined" );\r
-    }\r
-    else {\r
-      Status = HttpSendAnsiString ( SocketFD, pPort, "Reserved" );\r
-    }\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "<br/>Register Bit Width: " );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = HttpSendValue ( SocketFD,\r
-                             pPort,\r
-                             pGenericAddress->RegisterBitWidth );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "<br/>Register Bit Offset: " );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = HttpSendHexValue ( SocketFD,\r
-                                pPort,\r
-                                pGenericAddress->RegisterBitOffset );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "<br/>Access Size: " );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = HttpSendValue ( SocketFD,\r
-                             pPort,\r
-                             pGenericAddress->AccessSize );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "<br/>Address: " );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Add the web-page link if necessary\r
-    //\r
-    if ( NULL != pWebPage ) {\r
-      Status = HttpSendAnsiString ( SocketFD,\r
-                                    pPort,\r
-                                    "<a target=\"_blank\" href=\"" );\r
-      if ( EFI_ERROR ( Status )) {\r
-        break;\r
-      }\r
-      Status = HttpSendUnicodeString ( SocketFD,\r
-                                       pPort,\r
-                                       pWebPage );\r
-      if ( EFI_ERROR ( Status )) {\r
-        break;\r
-      }\r
-      Status = HttpSendAnsiString ( SocketFD,\r
-                                    pPort,\r
-                                    "\">" );\r
-      if ( EFI_ERROR ( Status )) {\r
-        break;\r
-      }\r
-    }\r
-\r
-    //\r
-    //  Display the address\r
-    //\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "0x" );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = HttpSendHexBits ( SocketFD,\r
-                               pPort,\r
-                               64,\r
-                               pGenericAddress->Address );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Finish the web-page link if necessary\r
-    //\r
-    if ( NULL != pWebPage ) {\r
-      Status = HttpSendAnsiString ( SocketFD,\r
-                                    pPort,\r
-                                    "</a>" );\r
-      if ( EFI_ERROR ( Status )) {\r
-        break;\r
-      }\r
-    }\r
-\r
-    //\r
-    //  Terminate the row\r
-    //\r
-    Status = HttpSendAnsiString ( SocketFD,\r
-                                  pPort,\r
-                                  "</code></td></tr>\r\n" );\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  Return the operation status\r
-  //\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Translate a table address into a web page\r
-\r
-  @param [in] pSignature      Address of the table signature\r
-  @param [out] ppTableName    Address to receive the table name address\r
-\r
-  @return  Zero terminated web page address or NULL if not found\r
-\r
-**/\r
-CONST CHAR16 *\r
-SignatureLookup (\r
-  IN UINT32 * pSignature,\r
-  OUT CONST CHAR8 ** ppTableName\r
-  )\r
-{\r
-  CONST TABLE_SIGNATURE * pTableId;\r
-  CONST TABLE_SIGNATURE * pEnd;\r
-  UINT32 Signature;\r
-\r
-  //\r
-  //  Walk the list of tables\r
-  //\r
-  Signature = *pSignature;\r
-  pTableId = &mTableId[ 0 ];\r
-  pEnd = &pTableId[ sizeof ( mTableId ) / sizeof ( mTableId[ 0 ])];\r
-  while ( pEnd > pTableId ) {\r
-    //\r
-    //  Attempt to locate the table signature\r
-    //\r
-    if ( pTableId->Signature == Signature ) {\r
-      //\r
-      //  The signature was found\r
-      //  Return the web page\r
-      //\r
-      *ppTableName = pTableId->pTableName;\r
-      return pTableId->pWebPage;\r
-    }\r
-\r
-    //\r
-    //  Set the next table\r
-    //\r
-    pTableId += 1;\r
-  }\r
-\r
-  //\r
-  //  The table was not found\r
-  //\r
-  *ppTableName = (CONST CHAR8 *)pSignature;\r
-  return NULL;\r
-}\r
-\r
-\r
-/**\r
-  Respond with the APIC table\r
-\r
-  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
-  @param [in] pPort         The WSDT_PORT structure address\r
-  @param [out] pbDone       Address to receive the request completion status\r
-\r
-  @retval EFI_SUCCESS       The request was successfully processed\r
-\r
-**/\r
-EFI_STATUS\r
-AcpiApicPage (\r
-  IN int SocketFD,\r
-  IN WSDT_PORT * pPort,\r
-  OUT BOOLEAN * pbDone\r
-  )\r
-{\r
-  CONST ACPI_UNKNOWN * pApic;\r
-  EFI_STATUS Status;\r
-\r
-  DBG_ENTER ( );\r
-\r
-  //\r
-  //  Send the APIC page\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Locate the APIC\r
-    //\r
-    pApic = (ACPI_UNKNOWN *)LocateTable ( APIC_SIGNATURE );\r
-    if ( NULL == pApic ) {\r
-      Status = EFI_NOT_FOUND;\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Send the page and table header\r
-    //\r
-    Status = TableHeader ( SocketFD, pPort, L"APIC Table", pApic );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the header\r
-    //\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "Signature",\r
-                            sizeof ( pApic->Signature ),\r
-                            (CHAR8 *)&pApic->Signature );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "Length",\r
-                               pApic->Length );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the data from the table\r
-    //\r
-    Status = RowDump ( SocketFD,\r
-                       pPort,\r
-                       "Data",\r
-                       pApic->Length - sizeof ( *pApic ) + 1,\r
-                       (UINT8 *)( pApic + 1 ));\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Build the table trailer\r
-    //\r
-    Status = TableTrailer ( SocketFD,\r
-                            pPort,\r
-                            pbDone );\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  Return the operation status\r
-  //\r
-  DBG_EXIT_STATUS ( Status );\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Respond with the BGRT table\r
-\r
-  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
-  @param [in] pPort         The WSDT_PORT structure address\r
-  @param [out] pbDone       Address to receive the request completion status\r
-\r
-  @retval EFI_SUCCESS       The request was successfully processed\r
-\r
-**/\r
-EFI_STATUS\r
-AcpiBgrtPage (\r
-  IN int SocketFD,\r
-  IN WSDT_PORT * pPort,\r
-  OUT BOOLEAN * pbDone\r
-  )\r
-{\r
-  CONST ACPI_UNKNOWN * pBgrt;\r
-  EFI_STATUS Status;\r
-\r
-  DBG_ENTER ( );\r
-\r
-  //\r
-  //  Send the BGRT page\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Locate the BGRT\r
-    //\r
-    pBgrt = (ACPI_UNKNOWN *)LocateTable ( BGRT_SIGNATURE );\r
-    if ( NULL == pBgrt ) {\r
-      Status = EFI_NOT_FOUND;\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Send the page and table header\r
-    //\r
-    Status = TableHeader ( SocketFD, pPort, L"BGRT Table", pBgrt );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the header\r
-    //\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "Signature",\r
-                            sizeof ( pBgrt->Signature ),\r
-                            (CHAR8 *)&pBgrt->Signature );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "Length",\r
-                               pBgrt->Length );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the data from the table\r
-    //\r
-    Status = RowDump ( SocketFD,\r
-                       pPort,\r
-                       "Data",\r
-                       pBgrt->Length - sizeof ( *pBgrt ) + 1,\r
-                       (UINT8 *)( pBgrt + 1 ));\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Build the table trailer\r
-    //\r
-    Status = TableTrailer ( SocketFD,\r
-                            pPort,\r
-                            pbDone );\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  Return the operation status\r
-  //\r
-  DBG_EXIT_STATUS ( Status );\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Respond with the ACPI DSDT table\r
-\r
-  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
-  @param [in] pPort         The WSDT_PORT structure address\r
-  @param [out] pbDone       Address to receive the request completion status\r
-\r
-  @retval EFI_SUCCESS       The request was successfully processed\r
-\r
-**/\r
-EFI_STATUS\r
-AcpiDsdtPage (\r
-  IN int SocketFD,\r
-  IN WSDT_PORT * pPort,\r
-  OUT BOOLEAN * pbDone\r
-  )\r
-{\r
-  CONST ACPI_DSDT * pDsdt;\r
-  CONST ACPI_FADT * pFadt;\r
-  EFI_STATUS Status;\r
-\r
-  DBG_ENTER ( );\r
-\r
-  //\r
-  //  Send the DADT page\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Locate the DADT\r
-    //\r
-    pFadt = (ACPI_FADT *)LocateTable ( FADT_SIGNATURE );\r
-    if ( NULL == pFadt ) {\r
-      Status = EFI_NOT_FOUND;\r
-      break;\r
-    }\r
-    pDsdt = (VOID *)(UINTN)pFadt->XDsdt;\r
-\r
-    //\r
-    //  Send the page and table header\r
-    //\r
-    Status = TableHeader ( SocketFD, pPort, L"DSDT - Differentiated System Description Table", pDsdt );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the DSDT header\r
-    //\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "Signature",\r
-                            sizeof ( pDsdt->Signature ),\r
-                            (CHAR8 *)&pDsdt->Signature );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "Length",\r
-                               pDsdt->Length );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "Revision",\r
-                               pDsdt->Revision );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "Checksum",\r
-                           pDsdt->Checksum,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "OEMID",\r
-                            sizeof ( pDsdt->OemId ),\r
-                            (CONST CHAR8 *)&pDsdt->OemId[ 0 ]);\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "OEM Table ID",\r
-                            sizeof ( pDsdt->OemTableId ),\r
-                            (CONST CHAR8 *)&pDsdt->OemTableId[ 0 ]);\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowRevision ( SocketFD,\r
-                           pPort,\r
-                           "OEM Revision",\r
-                           pDsdt->OemRevision );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "Creator ID",\r
-                            sizeof ( pDsdt->CreatorId ),\r
-                            (CHAR8 *)&pDsdt->CreatorId );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowRevision ( SocketFD,\r
-                           pPort,\r
-                           "Creator Revision",\r
-                           pDsdt->CreatorRevision );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the data from the DSDT\r
-    //\r
-    Status = RowDump ( SocketFD,\r
-                       pPort,\r
-                       "Definition Block",\r
-                       pDsdt->Length - sizeof ( *pDsdt ) + 1,\r
-                       &pDsdt->DefinitionBlock[0]);\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Build the table trailer\r
-    //\r
-    Status = TableTrailer ( SocketFD,\r
-                            pPort,\r
-                            pbDone );\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  Return the operation status\r
-  //\r
-  DBG_EXIT_STATUS ( Status );\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Respond with the ACPI FADT table\r
-\r
-  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
-  @param [in] pPort         The WSDT_PORT structure address\r
-  @param [out] pbDone       Address to receive the request completion status\r
-\r
-  @retval EFI_SUCCESS       The request was successfully processed\r
-\r
-**/\r
-EFI_STATUS\r
-AcpiFadtPage (\r
-  IN int SocketFD,\r
-  IN WSDT_PORT * pPort,\r
-  OUT BOOLEAN * pbDone\r
-  )\r
-{\r
-  CONST ACPI_FADT * pFadt;\r
-  EFI_STATUS Status;\r
-\r
-  DBG_ENTER ( );\r
-\r
-  //\r
-  //  Send the FADT page\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Locate the FADT\r
-    //\r
-    pFadt = (ACPI_FADT *)LocateTable ( FADT_SIGNATURE );\r
-    if ( NULL == pFadt ) {\r
-      Status = EFI_NOT_FOUND;\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Send the page and table header\r
-    //\r
-    Status = TableHeader ( SocketFD, pPort, L"FADT - Fixed ACPI Description Table", pFadt );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the FSDT header\r
-    //\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "Signature",\r
-                            sizeof ( pFadt->Signature ),\r
-                            (CHAR8 *)&pFadt->Signature );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "Length",\r
-                               pFadt->Length );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "Revision",\r
-                               pFadt->Revision );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "Checksum",\r
-                           pFadt->Checksum,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "OEMID",\r
-                            sizeof ( pFadt->OemId ),\r
-                            (CONST CHAR8 *)&pFadt->OemId[ 0 ]);\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "OEM Table ID",\r
-                            sizeof ( pFadt->OemTableId ),\r
-                            (CONST CHAR8 *)&pFadt->OemTableId[ 0 ]);\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowRevision ( SocketFD,\r
-                           pPort,\r
-                           "OEM Revision",\r
-                           pFadt->OemRevision );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "Creator ID",\r
-                            sizeof ( pFadt->CreatorId ),\r
-                            (CHAR8 *)&pFadt->CreatorId );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowRevision ( SocketFD,\r
-                           pPort,\r
-                           "Creator Revision",\r
-                           pFadt->CreatorRevision );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the data from the FADT\r
-    //\r
-    Status = RowPointer ( SocketFD,\r
-                          pPort,\r
-                          "FIRMWARE_CTRL",\r
-                          (CONST VOID *)(UINTN)pFadt->FirmwareCtrl,\r
-                          NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowPointer ( SocketFD,\r
-                          pPort,\r
-                          "DSDT",\r
-                          (CONST VOID *)(UINTN)pFadt->DSDT,\r
-                          ( pFadt->DSDT == pFadt->XDsdt ) ? PAGE_ACPI_DSDT : NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "Reserved",\r
-                           pFadt->Reserved,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "Preferred_PM_Profile",\r
-                           pFadt->PreferredPmProfile,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "SCI_INT",\r
-                           pFadt->SciInt,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "SMI_CMD",\r
-                           pFadt->SmiCmd,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "ACPI_ENABLE",\r
-                           pFadt->AcpiEnable,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "ACPI_DISABLE",\r
-                           pFadt->AcpiDisable,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "S4BIOS_REQ",\r
-                           pFadt->S4BiosReq,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "PSTATE_CNT",\r
-                           pFadt->PStateCnt,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "PM1a_EVT_BLK",\r
-                           pFadt->Pm1aEvtBlk,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "PM1b_EVT_BLK",\r
-                           pFadt->Pm1bEvtBlk,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "PM1a_CNT_BLK",\r
-                           pFadt->Pm1aCntBlk,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "PM1b_CNT_BLK",\r
-                           pFadt->Pm1bCntBlk,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "PM2_CNT_BLK",\r
-                           pFadt->Pm2CntBlk,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "PM_TMR_BLK",\r
-                           pFadt->PmTmrBlk,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "GPE0_BLK",\r
-                           pFadt->Gpe0Blk,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "GPE1_BLK",\r
-                           pFadt->Gpe1Blk,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "PM1_EVT_LEN",\r
-                               pFadt->Pm1EvtLen );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "PM1_CNT_LEN",\r
-                               pFadt->Pm1CntLen );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "PM2_CNT_LEN",\r
-                               pFadt->PM2CntLen );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "PM_TMR_LEN",\r
-                               pFadt->PmTmrLen );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "GPE0_BLK_LEN",\r
-                               pFadt->Gpe0BlkLen );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "GPE1_BLK_LEN",\r
-                               pFadt->Gpe1BlkLen );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "GPE1_BASE",\r
-                           pFadt->Gpe1Base,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "CST_CNT",\r
-                               pFadt->CstCnt );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "P_LVL2_LAT",\r
-                           pFadt->PLvl2Lat,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "P_LVL3_LAT",\r
-                           pFadt->PLvl3Lat,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "FLUSH_SIZE",\r
-                               pFadt->FlushSize );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "FLUSH_Stride",\r
-                               pFadt->FlushStride );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "DUTY_OFFSET",\r
-                           pFadt->DutyOffset,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "DUTY_WIDTH",\r
-                           pFadt->DutyWidth,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "DAY_ALRM",\r
-                           pFadt->DayAlrm,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "MON_ALRM",\r
-                           pFadt->MonAlrm,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "CENTURY",\r
-                           pFadt->Century,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "IAPC_BOOT_ARCH",\r
-                           pFadt->IapcBootArch,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "Reserved",\r
-                           pFadt->Reserved2,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "Flags",\r
-                           pFadt->Flags,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowGenericAddress ( SocketFD,\r
-                                 pPort,\r
-                                 "RESET_REG",\r
-                                 &pFadt->ResetReg[0],\r
-                                 NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "RESET_VALUE",\r
-                           pFadt->ResetValue,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "Reserved",\r
-                           pFadt->Reserved3[0],\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "Reserved",\r
-                           pFadt->Reserved3[1],\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "Reserved",\r
-                           pFadt->Reserved3[2],\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "X_FIRMWARE_CTRL",\r
-                           pFadt->XFirmwareCtrl,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "X_DSDT",\r
-                           pFadt->XDsdt,\r
-                           PAGE_ACPI_DSDT );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowGenericAddress ( SocketFD,\r
-                                 pPort,\r
-                                 "X_PM1a_EVT_BLK",\r
-                                 &pFadt->XPm1aEvtBlk[0],\r
-                                 NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowGenericAddress ( SocketFD,\r
-                                 pPort,\r
-                                 "X_PM1b_EVT_BLK",\r
-                                 &pFadt->XPm1bEvtBlk[0],\r
-                                 NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowGenericAddress ( SocketFD,\r
-                                 pPort,\r
-                                 "X_PM1a_CNT_BLK",\r
-                                 &pFadt->XPm1aCntBlk[0],\r
-                                 NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowGenericAddress ( SocketFD,\r
-                                 pPort,\r
-                                 "X_PM1b_CNT_BLK",\r
-                                 &pFadt->XPm1bCntBlk[0],\r
-                                 NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowGenericAddress ( SocketFD,\r
-                                 pPort,\r
-                                 "X_PM2_CNT_BLK",\r
-                                 &pFadt->XPm2CntBlk[0],\r
-                                 NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowGenericAddress ( SocketFD,\r
-                                 pPort,\r
-                                 "X_PM_TMR_BLK",\r
-                                 &pFadt->XPmTmrBlk[0],\r
-                                 NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowGenericAddress ( SocketFD,\r
-                                 pPort,\r
-                                 "X_GPE0_BLK",\r
-                                 &pFadt->XGpe0Blk[0],\r
-                                 NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowGenericAddress ( SocketFD,\r
-                                 pPort,\r
-                                 "X_GPE1_BLK",\r
-                                 &pFadt->XGpe1Blk[0],\r
-                                 NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Build the table trailer\r
-    //\r
-    Status = TableTrailer ( SocketFD,\r
-                            pPort,\r
-                            pbDone );\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  Return the operation status\r
-  //\r
-  DBG_EXIT_STATUS ( Status );\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Respond with the HPET table\r
-\r
-  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
-  @param [in] pPort         The WSDT_PORT structure address\r
-  @param [out] pbDone       Address to receive the request completion status\r
-\r
-  @retval EFI_SUCCESS       The request was successfully processed\r
-\r
-**/\r
-EFI_STATUS\r
-AcpiHpetPage (\r
-  IN int SocketFD,\r
-  IN WSDT_PORT * pPort,\r
-  OUT BOOLEAN * pbDone\r
-  )\r
-{\r
-  CONST ACPI_UNKNOWN * pHpet;\r
-  EFI_STATUS Status;\r
-\r
-  DBG_ENTER ( );\r
-\r
-  //\r
-  //  Send the HPET page\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Locate the HPET\r
-    //\r
-    pHpet = (ACPI_UNKNOWN *)LocateTable ( HPET_SIGNATURE );\r
-    if ( NULL == pHpet ) {\r
-      Status = EFI_NOT_FOUND;\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Send the page and table header\r
-    //\r
-    Status = TableHeader ( SocketFD, pPort, L"HPET Table", pHpet );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the header\r
-    //\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "Signature",\r
-                            sizeof ( pHpet->Signature ),\r
-                            (CHAR8 *)&pHpet->Signature );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "Length",\r
-                               pHpet->Length );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the data from the table\r
-    //\r
-    Status = RowDump ( SocketFD,\r
-                       pPort,\r
-                       "Data",\r
-                       pHpet->Length - sizeof ( *pHpet ) + 1,\r
-                       (UINT8 *)( pHpet + 1 ));\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Build the table trailer\r
-    //\r
-    Status = TableTrailer ( SocketFD,\r
-                            pPort,\r
-                            pbDone );\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  Return the operation status\r
-  //\r
-  DBG_EXIT_STATUS ( Status );\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Respond with the MCFG table\r
-\r
-  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
-  @param [in] pPort         The WSDT_PORT structure address\r
-  @param [out] pbDone       Address to receive the request completion status\r
-\r
-  @retval EFI_SUCCESS       The request was successfully processed\r
-\r
-**/\r
-EFI_STATUS\r
-AcpiMcfgPage (\r
-  IN int SocketFD,\r
-  IN WSDT_PORT * pPort,\r
-  OUT BOOLEAN * pbDone\r
-  )\r
-{\r
-  CONST ACPI_UNKNOWN * pMcfg;\r
-  EFI_STATUS Status;\r
-\r
-  DBG_ENTER ( );\r
-\r
-  //\r
-  //  Send the MCFG page\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Locate the MCFG\r
-    //\r
-    pMcfg = (ACPI_UNKNOWN *)LocateTable ( MCFG_SIGNATURE );\r
-    if ( NULL == pMcfg ) {\r
-      Status = EFI_NOT_FOUND;\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Send the page and table header\r
-    //\r
-    Status = TableHeader ( SocketFD, pPort, L"MCFG Table", pMcfg );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the header\r
-    //\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "Signature",\r
-                            sizeof ( pMcfg->Signature ),\r
-                            (CHAR8 *)&pMcfg->Signature );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "Length",\r
-                               pMcfg->Length );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the data from the table\r
-    //\r
-    Status = RowDump ( SocketFD,\r
-                       pPort,\r
-                       "Data",\r
-                       pMcfg->Length - sizeof ( *pMcfg ) + 1,\r
-                       (UINT8 *)( pMcfg + 1 ));\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Build the table trailer\r
-    //\r
-    Status = TableTrailer ( SocketFD,\r
-                            pPort,\r
-                            pbDone );\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  Return the operation status\r
-  //\r
-  DBG_EXIT_STATUS ( Status );\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Respond with the ACPI RSDP 1.0b table\r
-\r
-  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
-  @param [in] pPort         The WSDT_PORT structure address\r
-  @param [out] pbDone       Address to receive the request completion status\r
-\r
-  @retval EFI_SUCCESS       The request was successfully processed\r
-\r
-**/\r
-EFI_STATUS\r
-AcpiRsdp10Page (\r
-  IN int SocketFD,\r
-  IN WSDT_PORT * pPort,\r
-  OUT BOOLEAN * pbDone\r
-  )\r
-{\r
-  CONST EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER * pRsdp10b;\r
-  EFI_STATUS Status;\r
-\r
-  DBG_ENTER ( );\r
-\r
-  //\r
-  //  Send the RSDP page\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Locate the RSDP\r
-    //\r
-    Status = EfiGetSystemConfigurationTable ( &gEfiAcpi10TableGuid, (VOID **) &pRsdp10b );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Send the page and table header\r
-    //\r
-    Status = TableHeader ( SocketFD, pPort, L"RSDP - ACPI 1.0b Root System Description Pointer", pRsdp10b );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the RSDP\r
-    //\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "Signature",\r
-                            sizeof ( pRsdp10b->Signature ),\r
-                            (CHAR8 *)&pRsdp10b->Signature );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "Checksum",\r
-                           pRsdp10b->Checksum,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "OemId",\r
-                            sizeof ( pRsdp10b->OemId ),\r
-                            (CONST CHAR8 *)&pRsdp10b->OemId[ 0 ]);\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "Reserved",\r
-                           pRsdp10b->Reserved,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowPointer ( SocketFD,\r
-                          pPort,\r
-                          "RsdtAddress",\r
-                          (VOID *)(UINTN)pRsdp10b->RsdtAddress,\r
-                          PAGE_ACPI_RSDT );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Build the table trailer\r
-    //\r
-    Status = TableTrailer ( SocketFD,\r
-                            pPort,\r
-                            pbDone );\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  Return the operation status\r
-  //\r
-  DBG_EXIT_STATUS ( Status );\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Respond with the ACPI RSDP 3.0 table\r
-\r
-  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
-  @param [in] pPort         The WSDT_PORT structure address\r
-  @param [out] pbDone       Address to receive the request completion status\r
-\r
-  @retval EFI_SUCCESS       The request was successfully processed\r
-\r
-**/\r
-EFI_STATUS\r
-AcpiRsdp30Page (\r
-  IN int SocketFD,\r
-  IN WSDT_PORT * pPort,\r
-  OUT BOOLEAN * pbDone\r
-  )\r
-{\r
-  CONST EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER * pRsdp30;\r
-  EFI_STATUS Status;\r
-\r
-  DBG_ENTER ( );\r
-\r
-  //\r
-  //  Send the RSDP page\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Locate the RSDP\r
-    //\r
-    Status = EfiGetSystemConfigurationTable ( &gEfiAcpiTableGuid, (VOID **) &pRsdp30 );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Send the page and table header\r
-    //\r
-    Status = TableHeader ( SocketFD, pPort, L"RSDP - ACPI 3.0 Root System Description Pointer", pRsdp30 );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the RSDP\r
-    //\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "Signature",\r
-                            sizeof ( pRsdp30->Signature ),\r
-                            (CHAR8 *)&pRsdp30->Signature );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "Checksum",\r
-                           pRsdp30->Checksum,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "OemId",\r
-                            sizeof ( pRsdp30->OemId ),\r
-                            (CONST CHAR8 *)&pRsdp30->OemId[ 0 ]);\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "Revision",\r
-                           pRsdp30->Revision,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowPointer ( SocketFD,\r
-                          pPort,\r
-                          "RsdtAddress",\r
-                          (VOID *)(UINTN)pRsdp30->RsdtAddress,\r
-                          PAGE_ACPI_RSDT );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "Length",\r
-                               pRsdp30->Length );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowPointer ( SocketFD,\r
-                          pPort,\r
-                          "XsdtAddress",\r
-                          (VOID *)(UINTN)pRsdp30->XsdtAddress,\r
-                          NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "ExtendedChecksum",\r
-                           pRsdp30->ExtendedChecksum,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowBytes ( SocketFD,\r
-                        pPort,\r
-                        "Reserved",\r
-                        sizeof ( pRsdp30->Reserved ),\r
-                        &pRsdp30->Reserved[ 0 ]);\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Build the table trailer\r
-    //\r
-    Status = TableTrailer ( SocketFD,\r
-                            pPort,\r
-                            pbDone );\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  Return the operation status\r
-  //\r
-  DBG_EXIT_STATUS ( Status );\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Respond with the ACPI RSDT table\r
-\r
-  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
-  @param [in] pPort         The WSDT_PORT structure address\r
-  @param [out] pbDone       Address to receive the request completion status\r
-\r
-  @retval EFI_SUCCESS       The request was successfully processed\r
-\r
-**/\r
-EFI_STATUS\r
-AcpiRsdtPage (\r
-  IN int SocketFD,\r
-  IN WSDT_PORT * pPort,\r
-  OUT BOOLEAN * pbDone\r
-  )\r
-{\r
-  CONST UINT32 * pEnd;\r
-  CONST UINT32 * pEntry;\r
-  CONST ACPI_RSDT * pRsdt;\r
-  CONST CHAR8 * pTableName;\r
-  CONST CHAR16 * pWebPage;\r
-  EFI_STATUS Status;\r
-  UINT32 TableName[ 2 ];\r
-\r
-  DBG_ENTER ( );\r
-\r
-  //\r
-  //  Send the RSDT page\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Locate the RSDT\r
-    //\r
-    pRsdt = LocateRsdt ( );\r
-    if ( NULL == pRsdt ) {\r
-      Status = EFI_NOT_FOUND;\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Send the page and table header\r
-    //\r
-    Status = TableHeader ( SocketFD, pPort, L"RSDT - ACPI Root System Description Table", pRsdt );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the RSDT\r
-    //\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "Signature",\r
-                            sizeof ( pRsdt->Signature ),\r
-                            (CHAR8 *)&pRsdt->Signature );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "Length",\r
-                               pRsdt->Length );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "Revision",\r
-                               pRsdt->Revision );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowHexValue ( SocketFD,\r
-                           pPort,\r
-                           "Checksum",\r
-                           pRsdt->Checksum,\r
-                           NULL );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "OEMID",\r
-                            sizeof ( pRsdt->OemId ),\r
-                            (CONST CHAR8 *)&pRsdt->OemId[ 0 ]);\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "OEM Table ID",\r
-                            sizeof ( pRsdt->OemTableId ),\r
-                            (CONST CHAR8 *)&pRsdt->OemTableId[ 0 ]);\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowRevision ( SocketFD,\r
-                           pPort,\r
-                           "OEM Revision",\r
-                           pRsdt->OemRevision );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "Creator ID",\r
-                            sizeof ( pRsdt->CreatorId ),\r
-                            (CHAR8 *)&pRsdt->CreatorId );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowRevision ( SocketFD,\r
-                           pPort,\r
-                           "Creator Revision",\r
-                           pRsdt->CreatorRevision );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Walk the list of entries\r
-    //\r
-    pEntry = &pRsdt->Entry[ 0 ];\r
-    pEnd = &pEntry[(( pRsdt->Length - sizeof ( *pRsdt )) >> 2 ) + 1 ];\r
-    TableName[ 1 ] = 0;\r
-    while ( pEnd > pEntry ) {\r
-      //\r
-      //  The entry is actually a 32-bit physical table address\r
-      //  The first entry in the table is the 32-bit table signature\r
-      //\r
-      TableName[ 0 ] = *(UINT32 *)(UINTN)*pEntry;\r
-      pWebPage = SignatureLookup ( &TableName[ 0 ], &pTableName );\r
-\r
-      //\r
-      //  Display the table address\r
-      //\r
-      Status = RowPointer ( SocketFD,\r
-                            pPort,\r
-                            pTableName,\r
-                            (VOID *)(UINTN)*pEntry,\r
-                            pWebPage );\r
-      if ( EFI_ERROR ( Status )) {\r
-        break;\r
-      }\r
-      pEntry++;\r
-    }\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Build the table trailer\r
-    //\r
-    Status = TableTrailer ( SocketFD,\r
-                            pPort,\r
-                            pbDone );\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  Return the operation status\r
-  //\r
-  DBG_EXIT_STATUS ( Status );\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Respond with the SSDT table\r
-\r
-  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
-  @param [in] pPort         The WSDT_PORT structure address\r
-  @param [out] pbDone       Address to receive the request completion status\r
-\r
-  @retval EFI_SUCCESS       The request was successfully processed\r
-\r
-**/\r
-EFI_STATUS\r
-AcpiSsdtPage (\r
-  IN int SocketFD,\r
-  IN WSDT_PORT * pPort,\r
-  OUT BOOLEAN * pbDone\r
-  )\r
-{\r
-  CONST ACPI_UNKNOWN * pSsdt;\r
-  EFI_STATUS Status;\r
-\r
-  DBG_ENTER ( );\r
-\r
-  //\r
-  //  Send the SSDT page\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Locate the SSDT\r
-    //\r
-    pSsdt = (ACPI_UNKNOWN *)LocateTable ( SSDT_SIGNATURE );\r
-    if ( NULL == pSsdt ) {\r
-      Status = EFI_NOT_FOUND;\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Send the page and table header\r
-    //\r
-    Status = TableHeader ( SocketFD, pPort, L"SSDT Table", pSsdt );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the header\r
-    //\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "Signature",\r
-                            sizeof ( pSsdt->Signature ),\r
-                            (CHAR8 *)&pSsdt->Signature );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "Length",\r
-                               pSsdt->Length );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the data from the table\r
-    //\r
-    Status = RowDump ( SocketFD,\r
-                       pPort,\r
-                       "Data",\r
-                       pSsdt->Length - sizeof ( *pSsdt ) + 1,\r
-                       (UINT8 *)( pSsdt + 1 ));\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Build the table trailer\r
-    //\r
-    Status = TableTrailer ( SocketFD,\r
-                            pPort,\r
-                            pbDone );\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  Return the operation status\r
-  //\r
-  DBG_EXIT_STATUS ( Status );\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Respond with the TCPA table\r
-\r
-  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
-  @param [in] pPort         The WSDT_PORT structure address\r
-  @param [out] pbDone       Address to receive the request completion status\r
-\r
-  @retval EFI_SUCCESS       The request was successfully processed\r
-\r
-**/\r
-EFI_STATUS\r
-AcpiTcpaPage (\r
-  IN int SocketFD,\r
-  IN WSDT_PORT * pPort,\r
-  OUT BOOLEAN * pbDone\r
-  )\r
-{\r
-  CONST ACPI_UNKNOWN * pTcpa;\r
-  EFI_STATUS Status;\r
-\r
-  DBG_ENTER ( );\r
-\r
-  //\r
-  //  Send the TCPA page\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Locate the TCPA\r
-    //\r
-    pTcpa = (ACPI_UNKNOWN *)LocateTable ( TCPA_SIGNATURE );\r
-    if ( NULL == pTcpa ) {\r
-      Status = EFI_NOT_FOUND;\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Send the page and table header\r
-    //\r
-    Status = TableHeader ( SocketFD, pPort, L"TCPA Table", pTcpa );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the header\r
-    //\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "Signature",\r
-                            sizeof ( pTcpa->Signature ),\r
-                            (CHAR8 *)&pTcpa->Signature );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "Length",\r
-                               pTcpa->Length );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the data from the table\r
-    //\r
-    Status = RowDump ( SocketFD,\r
-                       pPort,\r
-                       "Data",\r
-                       pTcpa->Length - sizeof ( *pTcpa ) + 1,\r
-                       (UINT8 *)( pTcpa + 1 ));\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Build the table trailer\r
-    //\r
-    Status = TableTrailer ( SocketFD,\r
-                            pPort,\r
-                            pbDone );\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  Return the operation status\r
-  //\r
-  DBG_EXIT_STATUS ( Status );\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Respond with the UEFI table\r
-\r
-  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
-  @param [in] pPort         The WSDT_PORT structure address\r
-  @param [out] pbDone       Address to receive the request completion status\r
-\r
-  @retval EFI_SUCCESS       The request was successfully processed\r
-\r
-**/\r
-EFI_STATUS\r
-AcpiUefiPage (\r
-  IN int SocketFD,\r
-  IN WSDT_PORT * pPort,\r
-  OUT BOOLEAN * pbDone\r
-  )\r
-{\r
-  CONST ACPI_UNKNOWN * pUefi;\r
-  EFI_STATUS Status;\r
-\r
-  DBG_ENTER ( );\r
-\r
-  //\r
-  //  Send the UEFI page\r
-  //\r
-  for ( ; ; ) {\r
-    //\r
-    //  Locate the UEFI\r
-    //\r
-    pUefi = (ACPI_UNKNOWN *)LocateTable ( UEFI_SIGNATURE );\r
-    if ( NULL == pUefi ) {\r
-      Status = EFI_NOT_FOUND;\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Send the page and table header\r
-    //\r
-    Status = TableHeader ( SocketFD, pPort, L"UEFI Table", pUefi );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the header\r
-    //\r
-    Status = RowAnsiArray ( SocketFD,\r
-                            pPort,\r
-                            "Signature",\r
-                            sizeof ( pUefi->Signature ),\r
-                            (CHAR8 *)&pUefi->Signature );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-    Status = RowDecimalValue ( SocketFD,\r
-                               pPort,\r
-                               "Length",\r
-                               pUefi->Length );\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Display the data from the table\r
-    //\r
-    Status = RowDump ( SocketFD,\r
-                       pPort,\r
-                       "Data",\r
-                       pUefi->Length - sizeof ( *pUefi ) + 1,\r
-                       (UINT8 *)( pUefi + 1 ));\r
-    if ( EFI_ERROR ( Status )) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    //  Build the table trailer\r
-    //\r
-    Status = TableTrailer ( SocketFD,\r
-                            pPort,\r
-                            pbDone );\r
-    break;\r
-  }\r
-\r
-  //\r
-  //  Return the operation status\r
-  //\r
-  DBG_EXIT_STATUS ( Status );\r
-  return Status;\r
-}\r