mirror of https://github.com/acidanthera/audk.git
233 lines
6.8 KiB
C
233 lines
6.8 KiB
C
/** @file
|
|
Display the DXE services table
|
|
|
|
Copyright (c) 2011 - 2012 Intel Corporation. All rights reserved.<BR>
|
|
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.
|
|
|
|
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/DxeServices.h>
|
|
#include <Pi/PiDxeCis.h>
|
|
|
|
/**
|
|
Respond with the DXE 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
|
|
DxeServicesTablePage (
|
|
IN int SocketFD,
|
|
IN WSDT_PORT * pPort,
|
|
OUT BOOLEAN * pbDone
|
|
)
|
|
{
|
|
EFI_DXE_SERVICES * pDS;
|
|
EFI_STATUS Status;
|
|
|
|
DBG_ENTER ( );
|
|
|
|
//
|
|
// Send the DXE services page
|
|
//
|
|
for ( ; ; ) {
|
|
//
|
|
// Get the DXE services table
|
|
//
|
|
Status = EfiGetSystemConfigurationTable (&gEfiDxeServicesTableGuid, (VOID **) &pDS);
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
|
|
//
|
|
// Send the page and table header
|
|
//
|
|
Status = TableHeader ( SocketFD, pPort, L"DXE Services Table", pDS );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
|
|
///
|
|
/// The table header for the DXE Services Table.
|
|
/// This header contains the DXE_SERVICES_SIGNATURE and DXE_SERVICES_REVISION values.
|
|
///
|
|
Status = EfiTableHeader ( SocketFD,
|
|
pPort,
|
|
&pDS->Hdr );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
|
|
//
|
|
// Global Coherency Domain Services
|
|
//
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"AddMemorySpace",
|
|
(VOID *)pDS->AddMemorySpace,
|
|
NULL );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"AllocateMemorySpace",
|
|
(VOID *)pDS->AllocateMemorySpace,
|
|
NULL );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"FreeMemorySpace",
|
|
(VOID *)pDS->FreeMemorySpace,
|
|
NULL );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"RemoveMemorySpace",
|
|
(VOID *)pDS->RemoveMemorySpace,
|
|
NULL );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"GetMemorySpaceDescriptor",
|
|
(VOID *)pDS->GetMemorySpaceDescriptor,
|
|
NULL );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"SetMemorySpaceAttributes",
|
|
(VOID *)pDS->SetMemorySpaceAttributes,
|
|
NULL );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"GetMemorySpaceMap",
|
|
(VOID *)pDS->GetMemorySpaceMap,
|
|
NULL );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"AddIoSpace",
|
|
(VOID *)pDS->AddIoSpace,
|
|
NULL );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"AllocateIoSpace",
|
|
(VOID *)pDS->AllocateIoSpace,
|
|
NULL );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"FreeIoSpace",
|
|
(VOID *)pDS->FreeIoSpace,
|
|
NULL );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"RemoveIoSpace",
|
|
(VOID *)pDS->RemoveIoSpace,
|
|
NULL );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"GetIoSpaceDescriptor",
|
|
(VOID *)pDS->GetIoSpaceDescriptor,
|
|
NULL );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"GetIoSpaceMap",
|
|
(VOID *)pDS->GetIoSpaceMap,
|
|
NULL );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
|
|
//
|
|
// Dispatcher Services
|
|
//
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"Dispatch",
|
|
(VOID *)pDS->Dispatch,
|
|
NULL );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"Schedule",
|
|
(VOID *)pDS->Schedule,
|
|
NULL );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"Trust",
|
|
(VOID *)pDS->Trust,
|
|
NULL );
|
|
if ( EFI_ERROR ( Status )) {
|
|
break;
|
|
}
|
|
|
|
//
|
|
// Service to process a single firmware volume found in a capsule
|
|
//
|
|
Status = RowPointer ( SocketFD,
|
|
pPort,
|
|
"ProcessFirmwareVolume",
|
|
(VOID *)pDS->ProcessFirmwareVolume,
|
|
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;
|
|
}
|