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
		
			
				
	
	
		
			854 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			854 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/**
 | 
						|
  @file
 | 
						|
  Display the system table
 | 
						|
 | 
						|
  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>
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Display the EFI Table Header
 | 
						|
 | 
						|
  @param [in] SocketFD      The socket's file descriptor to add to the list.
 | 
						|
  @param [in] pPort         The WSDT_PORT structure address
 | 
						|
  @param [in] pHeader       Address of the EFI_TABLE_HEADER structure
 | 
						|
 | 
						|
  @retval EFI_SUCCESS       The request was successfully processed
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EfiTableHeader (
 | 
						|
  IN int SocketFD,
 | 
						|
  IN WSDT_PORT * pPort,
 | 
						|
  IN EFI_TABLE_HEADER * pHeader
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS Status;
 | 
						|
 | 
						|
  DBG_ENTER ( );
 | 
						|
  
 | 
						|
  //
 | 
						|
  //  Send the handles page
 | 
						|
  //
 | 
						|
  for ( ; ; ) {
 | 
						|
    ///
 | 
						|
    /// A 64-bit signature that identifies the type of table that follows.
 | 
						|
    /// Unique signatures have been generated for the EFI System Table,
 | 
						|
    /// the EFI Boot Services Table, and the EFI Runtime Services Table.
 | 
						|
    ///
 | 
						|
    Status = RowHexValue ( SocketFD,
 | 
						|
                           pPort,
 | 
						|
                           "Hdr.Signature",
 | 
						|
                           pHeader->Signature,
 | 
						|
                           NULL );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    ///
 | 
						|
    /// The revision of the EFI Specification to which this table
 | 
						|
    /// conforms. The upper 16 bits of this field contain the major
 | 
						|
    /// revision value, and the lower 16 bits contain the minor revision
 | 
						|
    /// value. The minor revision values are limited to the range of 00..99.
 | 
						|
    ///
 | 
						|
    Status = RowRevision ( SocketFD,
 | 
						|
                           pPort,
 | 
						|
                           "Hdr.Revision",
 | 
						|
                           pHeader->Revision );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    ///
 | 
						|
    /// The size, in bytes, of the entire table including the EFI_TABLE_HEADER.
 | 
						|
    ///
 | 
						|
    Status = RowDecimalValue ( SocketFD,
 | 
						|
                               pPort,
 | 
						|
                               "Hdr.HeaderSize",
 | 
						|
                               pHeader->HeaderSize );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    ///
 | 
						|
    /// The 32-bit CRC for the entire table. This value is computed by
 | 
						|
    /// setting this field to 0, and computing the 32-bit CRC for HeaderSize bytes.
 | 
						|
    ///
 | 
						|
    Status = RowHexValue ( SocketFD,
 | 
						|
                           pPort,
 | 
						|
                           "Hdr.CRC",
 | 
						|
                           pHeader->CRC32,
 | 
						|
                           NULL );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    ///
 | 
						|
    /// Reserved field that must be set to 0.
 | 
						|
    ///
 | 
						|
    Status = RowHexValue ( SocketFD,
 | 
						|
                           pPort,
 | 
						|
                           "Hdr.Reserved",
 | 
						|
                           pHeader->Reserved,
 | 
						|
                           NULL );
 | 
						|
    break;
 | 
						|
  }
 | 
						|
 | 
						|
  //
 | 
						|
  //  Return the operation status
 | 
						|
  //
 | 
						|
  DBG_EXIT_STATUS ( Status );
 | 
						|
  return Status;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Display a row containing a decimal 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] Value         The value to display
 | 
						|
 | 
						|
  @retval EFI_SUCCESS       The request was successfully processed
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
RowDecimalValue (
 | 
						|
  IN int SocketFD,
 | 
						|
  IN WSDT_PORT * pPort,
 | 
						|
  IN CONST CHAR8 * pName,
 | 
						|
  IN UINT64 Value
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS Status;
 | 
						|
 | 
						|
  DBG_ENTER ( );
 | 
						|
 | 
						|
  //
 | 
						|
  //  Use for/break instead of goto
 | 
						|
  //
 | 
						|
  for ( ; ; ) {
 | 
						|
    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;
 | 
						|
    }
 | 
						|
    Status = HttpSendValue ( SocketFD,
 | 
						|
                             pPort,
 | 
						|
                             Value );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    Status = HttpSendAnsiString ( SocketFD,
 | 
						|
                                  pPort,
 | 
						|
                                  "</code></td></tr>\r\n" );
 | 
						|
    break;
 | 
						|
  }
 | 
						|
 | 
						|
  //
 | 
						|
  //  Return the operation status
 | 
						|
  //
 | 
						|
  DBG_EXIT_STATUS ( Status );
 | 
						|
  return Status;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  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] Value         The value to display
 | 
						|
  @param [in] pWebPage      Address of a zero terminated web page name
 | 
						|
 | 
						|
  @retval EFI_SUCCESS       The request was successfully processed
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
RowHexValue (
 | 
						|
  IN int SocketFD,
 | 
						|
  IN WSDT_PORT * pPort,
 | 
						|
  IN CONST CHAR8 * pName,
 | 
						|
  IN UINT64 Value,
 | 
						|
  IN CONST CHAR16 * pWebPage
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS Status;
 | 
						|
 | 
						|
  DBG_ENTER ( );
 | 
						|
 | 
						|
  //
 | 
						|
  //  Use for/break instead of goto
 | 
						|
  //
 | 
						|
  for ( ; ; ) {
 | 
						|
    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>0x" );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    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;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    Status = HttpSendHexValue ( SocketFD,
 | 
						|
                                pPort,
 | 
						|
                                Value );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    if ( NULL != pWebPage ) {
 | 
						|
      Status = HttpSendAnsiString ( SocketFD,
 | 
						|
                                    pPort,
 | 
						|
                                    "</a>" );
 | 
						|
      if ( EFI_ERROR ( Status )) {
 | 
						|
        break;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    Status = HttpSendAnsiString ( SocketFD,
 | 
						|
                                  pPort,
 | 
						|
                                  "</code></td></tr>\r\n" );
 | 
						|
    break;
 | 
						|
  }
 | 
						|
 | 
						|
  //
 | 
						|
  //  Return the operation status
 | 
						|
  //
 | 
						|
  DBG_EXIT_STATUS ( Status );
 | 
						|
  return Status;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Display a row containing a pointer
 | 
						|
 | 
						|
  @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] pAddress      The address to display
 | 
						|
  @param [in] pWebPage      Address of a zero terminated web page name
 | 
						|
 | 
						|
  @retval EFI_SUCCESS       The request was successfully processed
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
RowPointer (
 | 
						|
  IN int SocketFD,
 | 
						|
  IN WSDT_PORT * pPort,
 | 
						|
  IN CONST CHAR8 * pName,
 | 
						|
  IN CONST VOID * pAddress,
 | 
						|
  IN CONST CHAR16 * pWebPage
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS Status;
 | 
						|
 | 
						|
  DBG_ENTER ( );
 | 
						|
 | 
						|
  //
 | 
						|
  //  Use for/break instead of goto
 | 
						|
  //
 | 
						|
  for ( ; ; ) {
 | 
						|
    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;
 | 
						|
    }
 | 
						|
    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;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    Status = HttpSendAnsiString ( SocketFD,
 | 
						|
                                  pPort,
 | 
						|
                                  "0x" );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    Status = HttpSendHexBits ( SocketFD,
 | 
						|
                               pPort,
 | 
						|
                               sizeof ( pAddress ) * 8,
 | 
						|
                               (UINT64)(UINTN)pAddress );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    if ( NULL != pWebPage ) {
 | 
						|
      Status = HttpSendAnsiString ( SocketFD,
 | 
						|
                                    pPort,
 | 
						|
                                    "</a>" );
 | 
						|
      if ( EFI_ERROR ( Status )) {
 | 
						|
        break;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    Status = HttpSendAnsiString ( SocketFD,
 | 
						|
                                  pPort,
 | 
						|
                                  "</code></td></tr>\r\n" );
 | 
						|
    break;
 | 
						|
  }
 | 
						|
 | 
						|
  //
 | 
						|
  //  Return the operation status
 | 
						|
  //
 | 
						|
  DBG_EXIT_STATUS ( Status );
 | 
						|
  return Status;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Display a row containing a revision
 | 
						|
 | 
						|
  @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] Revision      The revision to display
 | 
						|
 | 
						|
  @retval EFI_SUCCESS       The request was successfully processed
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
RowRevision (
 | 
						|
  IN int SocketFD,
 | 
						|
  IN WSDT_PORT * pPort,
 | 
						|
  IN CONST CHAR8 * pName,
 | 
						|
  IN UINT32 Revision
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS Status;
 | 
						|
 | 
						|
  DBG_ENTER ( );
 | 
						|
 | 
						|
  //
 | 
						|
  //  Use for/break instead of goto
 | 
						|
  //
 | 
						|
  for ( ; ; ) {
 | 
						|
    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;
 | 
						|
    }
 | 
						|
    Status = HttpSendValue ( SocketFD,
 | 
						|
                             pPort,
 | 
						|
                             Revision >> 16 );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    Status = HttpSendByte ( SocketFD,
 | 
						|
                            pPort,
 | 
						|
                            '.' );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    Status = HttpSendValue ( SocketFD,
 | 
						|
                             pPort,
 | 
						|
                             Revision & 0xFFFF );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    Status = HttpSendAnsiString ( SocketFD,
 | 
						|
                                  pPort,
 | 
						|
                                  "</code></td></tr>\r\n" );
 | 
						|
    break;
 | 
						|
  }
 | 
						|
 | 
						|
  //
 | 
						|
  //  Return the operation status
 | 
						|
  //
 | 
						|
  DBG_EXIT_STATUS ( Status );
 | 
						|
  return Status;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Display a row containing a unicode string
 | 
						|
 | 
						|
  @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] pString       Address of a zero terminated unicode string
 | 
						|
 | 
						|
  @retval EFI_SUCCESS       The request was successfully processed
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
RowUnicodeString (
 | 
						|
  IN int SocketFD,
 | 
						|
  IN WSDT_PORT * pPort,
 | 
						|
  IN CONST CHAR8 * pName,
 | 
						|
  IN CONST CHAR16 * pString
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS Status;
 | 
						|
 | 
						|
  DBG_ENTER ( );
 | 
						|
 | 
						|
  //
 | 
						|
  //  Use for/break instead of goto
 | 
						|
  //
 | 
						|
  for ( ; ; ) {
 | 
						|
    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>" );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    Status = HttpSendUnicodeString ( SocketFD,
 | 
						|
                                     pPort,
 | 
						|
                                     pString );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    Status = HttpSendAnsiString ( SocketFD,
 | 
						|
                                  pPort,
 | 
						|
                                  "</td></tr>\r\n" );
 | 
						|
    break;
 | 
						|
  }
 | 
						|
 | 
						|
  //
 | 
						|
  //  Return the operation status
 | 
						|
  //
 | 
						|
  DBG_EXIT_STATUS ( Status );
 | 
						|
  return Status;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Start the table page
 | 
						|
 | 
						|
  @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] pTable        Address of the table
 | 
						|
 | 
						|
  @retval EFI_SUCCESS       The request was successfully processed
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
TableHeader (
 | 
						|
  IN int SocketFD,
 | 
						|
  IN WSDT_PORT * pPort,
 | 
						|
  IN CONST CHAR16 * pName,
 | 
						|
  IN CONST VOID * pTable
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS Status;
 | 
						|
 | 
						|
  DBG_ENTER ( );
 | 
						|
 | 
						|
  //
 | 
						|
  //  Use for/break instead of goto
 | 
						|
  //
 | 
						|
  for ( ; ; ) {
 | 
						|
    //
 | 
						|
    //  Send the page header
 | 
						|
    //
 | 
						|
    Status = HttpPageHeader ( SocketFD, pPort, pName );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    
 | 
						|
    //
 | 
						|
    //  Build the table header
 | 
						|
    //
 | 
						|
    Status = HttpSendAnsiString ( SocketFD,
 | 
						|
                                  pPort,
 | 
						|
                                  "<h1>" );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    Status = HttpSendUnicodeString ( SocketFD,
 | 
						|
                                     pPort,
 | 
						|
                                     pName );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    if ( NULL != pTable ) {
 | 
						|
      Status = HttpSendAnsiString ( SocketFD,
 | 
						|
                                    pPort,
 | 
						|
                                    ": 0x" );
 | 
						|
      if ( EFI_ERROR ( Status )) {
 | 
						|
        break;
 | 
						|
      }
 | 
						|
      Status = HttpSendHexBits ( SocketFD,
 | 
						|
                                 pPort,
 | 
						|
                                 sizeof ( pTable ) *  8,
 | 
						|
                                 (UINT64)(UINTN)pTable );
 | 
						|
      if ( EFI_ERROR ( Status )) {
 | 
						|
        break;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    Status = HttpSendAnsiString ( SocketFD,
 | 
						|
                                  pPort,
 | 
						|
                                  "</h1>\r\n"
 | 
						|
                                  "<table border=\"1\">\r\n"
 | 
						|
                                  "  <tr bgcolor=\"c0c0ff\"><th>Field Name</th><th>Value</th></tr>\r\n" );
 | 
						|
    break;
 | 
						|
  }
 | 
						|
 | 
						|
  //
 | 
						|
  //  Return the operation status
 | 
						|
  //
 | 
						|
  DBG_EXIT_STATUS ( Status );
 | 
						|
  return Status;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  End the table page
 | 
						|
 | 
						|
  @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
 | 
						|
TableTrailer (
 | 
						|
  IN int SocketFD,
 | 
						|
  IN WSDT_PORT * pPort,
 | 
						|
  OUT BOOLEAN *pbDone
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS Status;
 | 
						|
 | 
						|
  DBG_ENTER ( );
 | 
						|
 | 
						|
  //
 | 
						|
  //  Use for/break instead of goto
 | 
						|
  //
 | 
						|
  for ( ; ; ) {
 | 
						|
    //
 | 
						|
    //  Build the table trailer
 | 
						|
    //
 | 
						|
    Status = HttpSendAnsiString ( SocketFD,
 | 
						|
                                  pPort,
 | 
						|
                                  "</table>\r\n" );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    
 | 
						|
    //
 | 
						|
    //  Send the page trailer
 | 
						|
    //
 | 
						|
    Status = HttpPageTrailer ( SocketFD, pPort, pbDone );
 | 
						|
    break;
 | 
						|
  }
 | 
						|
 | 
						|
  //
 | 
						|
  //  Return the operation status
 | 
						|
  //
 | 
						|
  DBG_EXIT_STATUS ( Status );
 | 
						|
  return Status;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Respond with the system 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
 | 
						|
SystemTablePage (
 | 
						|
  IN int SocketFD,
 | 
						|
  IN WSDT_PORT * pPort,
 | 
						|
  OUT BOOLEAN * pbDone
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS Status;
 | 
						|
 | 
						|
  DBG_ENTER ( );
 | 
						|
  
 | 
						|
  //
 | 
						|
  //  Send the system table page
 | 
						|
  //
 | 
						|
  for ( ; ; ) {
 | 
						|
    //
 | 
						|
    //  Send the page and table header
 | 
						|
    //
 | 
						|
    Status = TableHeader ( SocketFD, pPort, L"System Table", gST );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    ///
 | 
						|
    /// The table header for the EFI System Table.
 | 
						|
    ///
 | 
						|
    Status = EfiTableHeader ( SocketFD,
 | 
						|
                              pPort,
 | 
						|
                              &gST->Hdr );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    ///
 | 
						|
    /// A pointer to a null terminated string that identifies the vendor
 | 
						|
    /// that produces the system firmware for the platform.
 | 
						|
    ///
 | 
						|
    Status = RowUnicodeString ( SocketFD,
 | 
						|
                                pPort,
 | 
						|
                                "FirmwareVendor",
 | 
						|
                                gST->FirmwareVendor );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    ///
 | 
						|
    /// A firmware vendor specific value that identifies the revision
 | 
						|
    /// of the system firmware for the platform.
 | 
						|
    ///
 | 
						|
    Status = RowRevision ( SocketFD,
 | 
						|
                           pPort,
 | 
						|
                           "FirmwareRevision",
 | 
						|
                           gST->FirmwareRevision );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    ///
 | 
						|
    /// The handle for the active console input device. This handle must support
 | 
						|
    /// EFI_SIMPLE_TEXT_INPUT_PROTOCOL and EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.
 | 
						|
    ///
 | 
						|
    Status = RowPointer ( SocketFD,
 | 
						|
                          pPort,
 | 
						|
                          "ConsoleInHandle",
 | 
						|
                          (VOID *)gST->ConsoleInHandle,
 | 
						|
                          NULL );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    ///
 | 
						|
    /// A pointer to the EFI_SIMPLE_TEXT_INPUT_PROTOCOL interface that is
 | 
						|
    /// associated with ConsoleInHandle.
 | 
						|
    ///
 | 
						|
    Status = RowPointer ( SocketFD,
 | 
						|
                          pPort,
 | 
						|
                          "ConIn",
 | 
						|
                          (VOID *)gST->ConIn,
 | 
						|
                          NULL );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    ///
 | 
						|
    /// The handle for the active console output device.
 | 
						|
    ///
 | 
						|
    Status = RowPointer ( SocketFD,
 | 
						|
                          pPort,
 | 
						|
                          "ConsoleOutHandle",
 | 
						|
                          (VOID *)gST->ConsoleOutHandle,
 | 
						|
                          NULL );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    ///
 | 
						|
    /// A pointer to the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL interface
 | 
						|
    /// that is associated with ConsoleOutHandle.
 | 
						|
    ///
 | 
						|
    Status = RowPointer ( SocketFD,
 | 
						|
                          pPort,
 | 
						|
                          "ConOut",
 | 
						|
                          (VOID *)gST->ConOut,
 | 
						|
                          NULL );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    ///
 | 
						|
    /// The handle for the active standard error console device.
 | 
						|
    /// This handle must support the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.
 | 
						|
    ///
 | 
						|
    Status = RowPointer ( SocketFD,
 | 
						|
                          pPort,
 | 
						|
                          "StandardErrorHandle",
 | 
						|
                          (VOID *)gST->StandardErrorHandle,
 | 
						|
                          NULL );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    ///
 | 
						|
    /// A pointer to the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL interface
 | 
						|
    /// that is associated with StandardErrorHandle.
 | 
						|
    ///
 | 
						|
    Status = RowPointer ( SocketFD,
 | 
						|
                          pPort,
 | 
						|
                          "StdErr",
 | 
						|
                          (VOID *)gST->StdErr,
 | 
						|
                          NULL );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    ///
 | 
						|
    /// A pointer to the EFI Runtime Services Table.
 | 
						|
    ///
 | 
						|
    Status = RowPointer ( SocketFD,
 | 
						|
                          pPort,
 | 
						|
                          "RuntimeServices",
 | 
						|
                          (VOID *)gST->RuntimeServices,
 | 
						|
                          PAGE_RUNTIME_SERVICES_TABLE );
 | 
						|
 | 
						|
    ///
 | 
						|
    /// A pointer to the EFI Boot Services Table.
 | 
						|
    ///
 | 
						|
    Status = RowPointer ( SocketFD,
 | 
						|
                          pPort,
 | 
						|
                          "BootServices",
 | 
						|
                          (VOID *)gST->BootServices,
 | 
						|
                          PAGE_BOOT_SERVICES_TABLE );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    ///
 | 
						|
    /// The number of system configuration tables in the buffer ConfigurationTable.
 | 
						|
    ///
 | 
						|
    Status = RowDecimalValue ( SocketFD,
 | 
						|
                               pPort,
 | 
						|
                               "NumberOfTableEntries",
 | 
						|
                               gST->NumberOfTableEntries );
 | 
						|
    if ( EFI_ERROR ( Status )) {
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    ///
 | 
						|
    /// A pointer to the system configuration tables.
 | 
						|
    /// The number of entries in the table is NumberOfTableEntries.
 | 
						|
    ///
 | 
						|
    Status = RowPointer ( SocketFD,
 | 
						|
                          pPort,
 | 
						|
                          "ConfigurationTable",
 | 
						|
                          (VOID *)gST->ConfigurationTable,
 | 
						|
                          PAGE_CONFIGURATION_TABLE );
 | 
						|
    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;
 | 
						|
}
 |