audk/AppPkg/Applications/Sockets/WebServer/RuntimeServicesTable.c

212 lines
5.4 KiB
C

/**
@file
Display the runtime services table
Copyright (c) 2011-2012, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <WebServer.h>
#include <Library/UefiRuntimeServicesTableLib.h>
/**
Respond with the runtime services 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
RuntimeSservicesTablePage (
IN int SocketFD,
IN WSDT_PORT * pPort,
OUT BOOLEAN * pbDone
)
{
EFI_STATUS Status;
DBG_ENTER ( );
//
// Send the runtime services page
//
for ( ; ; ) {
//
// Send the page and table header
//
Status = TableHeader ( SocketFD, pPort, L"Runtime Services Table", gRT );
if ( EFI_ERROR ( Status )) {
break;
}
///
/// The table header for the EFI Runtime Services Table.
///
Status = EfiTableHeader ( SocketFD,
pPort,
&gRT->Hdr );
if ( EFI_ERROR ( Status )) {
break;
}
//
// Time Services
//
Status = RowPointer ( SocketFD,
pPort,
"GetTime",
(VOID *)gRT->GetTime,
NULL );
if ( EFI_ERROR ( Status )) {
break;
}
Status = RowPointer ( SocketFD,
pPort,
"SetTime",
(VOID *)gRT->SetTime,
NULL );
if ( EFI_ERROR ( Status )) {
break;
}
Status = RowPointer ( SocketFD,
pPort,
"GetWakeupTime",
(VOID *)gRT->GetWakeupTime,
NULL );
if ( EFI_ERROR ( Status )) {
break;
}
Status = RowPointer ( SocketFD,
pPort,
"SetWakeupTime",
(VOID *)gRT->SetWakeupTime,
NULL );
if ( EFI_ERROR ( Status )) {
break;
}
//
// Virtual Memory Services
//
Status = RowPointer ( SocketFD,
pPort,
"SetVirtualAddressMap",
(VOID *)gRT->SetVirtualAddressMap,
NULL );
if ( EFI_ERROR ( Status )) {
break;
}
Status = RowPointer ( SocketFD,
pPort,
"ConvertPointer",
(VOID *)gRT->ConvertPointer,
NULL );
if ( EFI_ERROR ( Status )) {
break;
}
//
// Variable Services
//
Status = RowPointer ( SocketFD,
pPort,
"GetVariable",
(VOID *)gRT->GetVariable,
NULL );
if ( EFI_ERROR ( Status )) {
break;
}
Status = RowPointer ( SocketFD,
pPort,
"GetNextVariableName",
(VOID *)gRT->GetNextVariableName,
NULL );
if ( EFI_ERROR ( Status )) {
break;
}
Status = RowPointer ( SocketFD,
pPort,
"SetVariable",
(VOID *)gRT->SetVariable,
NULL );
if ( EFI_ERROR ( Status )) {
break;
}
//
// Miscellaneous Services
//
Status = RowPointer ( SocketFD,
pPort,
"GetNextHighNonotonicCount",
(VOID *)gRT->GetNextHighMonotonicCount,
NULL );
if ( EFI_ERROR ( Status )) {
break;
}
Status = RowPointer ( SocketFD,
pPort,
"ResetSystem",
(VOID *)gRT->ResetSystem,
NULL );
if ( EFI_ERROR ( Status )) {
break;
}
//
// Determine if the structures supports 2.0 services
//
if ( 2 <= ( gRT->Hdr.Revision >> 16 )) {
//
// UEFI 2.0 Capsule Services
//
Status = RowPointer ( SocketFD,
pPort,
"UpdateCapsule",
(VOID *)gRT->UpdateCapsule,
NULL );
if ( EFI_ERROR ( Status )) {
break;
}
Status = RowPointer ( SocketFD,
pPort,
"QueryCapsuleCapabilities",
(VOID *)gRT->QueryCapsuleCapabilities,
NULL );
if ( EFI_ERROR ( Status )) {
break;
}
//
// Miscellaneous UEFI 2.0 Service
//
Status = RowPointer ( SocketFD,
pPort,
"QueryVariableInfo",
(VOID *)gRT->QueryVariableInfo,
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;
}