1 /** @file
2 Display the DXE services table
3
4 Copyright (c) 2011 - 2012 Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 --*/
13 #include <WebServer.h>
14 #include <Guid/DxeServices.h>
15 #include <Pi/PiDxeCis.h>
16
17 /**
18 Respond with the DXE services table
19
20 @param[in] SocketFD The socket's file descriptor to add to the list.
21 @param[in] pPort The WSDT_PORT structure address
22 @param[out] pbDone Address to receive the request completion status
23
24 @retval EFI_SUCCESS The request was successfully processed
25
26 **/
27 EFI_STATUS
DxeServicesTablePage(IN int SocketFD,IN WSDT_PORT * pPort,OUT BOOLEAN * pbDone)28 DxeServicesTablePage (
29 IN int SocketFD,
30 IN WSDT_PORT * pPort,
31 OUT BOOLEAN * pbDone
32 )
33 {
34 EFI_DXE_SERVICES * pDS;
35 EFI_STATUS Status;
36
37 DBG_ENTER ( );
38
39 //
40 // Send the DXE services page
41 //
42 for ( ; ; ) {
43 //
44 // Get the DXE services table
45 //
46 Status = EfiGetSystemConfigurationTable (&gEfiDxeServicesTableGuid, (VOID **) &pDS);
47 if ( EFI_ERROR ( Status )) {
48 break;
49 }
50
51 //
52 // Send the page and table header
53 //
54 Status = TableHeader ( SocketFD, pPort, L"DXE Services Table", pDS );
55 if ( EFI_ERROR ( Status )) {
56 break;
57 }
58
59 ///
60 /// The table header for the DXE Services Table.
61 /// This header contains the DXE_SERVICES_SIGNATURE and DXE_SERVICES_REVISION values.
62 ///
63 Status = EfiTableHeader ( SocketFD,
64 pPort,
65 &pDS->Hdr );
66 if ( EFI_ERROR ( Status )) {
67 break;
68 }
69
70 //
71 // Global Coherency Domain Services
72 //
73 Status = RowPointer ( SocketFD,
74 pPort,
75 "AddMemorySpace",
76 (VOID *)pDS->AddMemorySpace,
77 NULL );
78 if ( EFI_ERROR ( Status )) {
79 break;
80 }
81 Status = RowPointer ( SocketFD,
82 pPort,
83 "AllocateMemorySpace",
84 (VOID *)pDS->AllocateMemorySpace,
85 NULL );
86 if ( EFI_ERROR ( Status )) {
87 break;
88 }
89 Status = RowPointer ( SocketFD,
90 pPort,
91 "FreeMemorySpace",
92 (VOID *)pDS->FreeMemorySpace,
93 NULL );
94 if ( EFI_ERROR ( Status )) {
95 break;
96 }
97 Status = RowPointer ( SocketFD,
98 pPort,
99 "RemoveMemorySpace",
100 (VOID *)pDS->RemoveMemorySpace,
101 NULL );
102 if ( EFI_ERROR ( Status )) {
103 break;
104 }
105 Status = RowPointer ( SocketFD,
106 pPort,
107 "GetMemorySpaceDescriptor",
108 (VOID *)pDS->GetMemorySpaceDescriptor,
109 NULL );
110 if ( EFI_ERROR ( Status )) {
111 break;
112 }
113 Status = RowPointer ( SocketFD,
114 pPort,
115 "SetMemorySpaceAttributes",
116 (VOID *)pDS->SetMemorySpaceAttributes,
117 NULL );
118 if ( EFI_ERROR ( Status )) {
119 break;
120 }
121 Status = RowPointer ( SocketFD,
122 pPort,
123 "GetMemorySpaceMap",
124 (VOID *)pDS->GetMemorySpaceMap,
125 NULL );
126 if ( EFI_ERROR ( Status )) {
127 break;
128 }
129 Status = RowPointer ( SocketFD,
130 pPort,
131 "AddIoSpace",
132 (VOID *)pDS->AddIoSpace,
133 NULL );
134 if ( EFI_ERROR ( Status )) {
135 break;
136 }
137 Status = RowPointer ( SocketFD,
138 pPort,
139 "AllocateIoSpace",
140 (VOID *)pDS->AllocateIoSpace,
141 NULL );
142 if ( EFI_ERROR ( Status )) {
143 break;
144 }
145 Status = RowPointer ( SocketFD,
146 pPort,
147 "FreeIoSpace",
148 (VOID *)pDS->FreeIoSpace,
149 NULL );
150 if ( EFI_ERROR ( Status )) {
151 break;
152 }
153 Status = RowPointer ( SocketFD,
154 pPort,
155 "RemoveIoSpace",
156 (VOID *)pDS->RemoveIoSpace,
157 NULL );
158 if ( EFI_ERROR ( Status )) {
159 break;
160 }
161 Status = RowPointer ( SocketFD,
162 pPort,
163 "GetIoSpaceDescriptor",
164 (VOID *)pDS->GetIoSpaceDescriptor,
165 NULL );
166 if ( EFI_ERROR ( Status )) {
167 break;
168 }
169 Status = RowPointer ( SocketFD,
170 pPort,
171 "GetIoSpaceMap",
172 (VOID *)pDS->GetIoSpaceMap,
173 NULL );
174 if ( EFI_ERROR ( Status )) {
175 break;
176 }
177
178 //
179 // Dispatcher Services
180 //
181 Status = RowPointer ( SocketFD,
182 pPort,
183 "Dispatch",
184 (VOID *)pDS->Dispatch,
185 NULL );
186 if ( EFI_ERROR ( Status )) {
187 break;
188 }
189 Status = RowPointer ( SocketFD,
190 pPort,
191 "Schedule",
192 (VOID *)pDS->Schedule,
193 NULL );
194 if ( EFI_ERROR ( Status )) {
195 break;
196 }
197 Status = RowPointer ( SocketFD,
198 pPort,
199 "Trust",
200 (VOID *)pDS->Trust,
201 NULL );
202 if ( EFI_ERROR ( Status )) {
203 break;
204 }
205
206 //
207 // Service to process a single firmware volume found in a capsule
208 //
209 Status = RowPointer ( SocketFD,
210 pPort,
211 "ProcessFirmwareVolume",
212 (VOID *)pDS->ProcessFirmwareVolume,
213 NULL );
214 if ( EFI_ERROR ( Status )) {
215 break;
216 }
217
218 //
219 // Build the table trailer
220 //
221 Status = TableTrailer ( SocketFD,
222 pPort,
223 pbDone );
224 break;
225 }
226
227 //
228 // Return the operation status
229 //
230 DBG_EXIT_STATUS ( Status );
231 return Status;
232 }
233