| /** @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; | |
| } |