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