1 /**
2 @file
3 Display the runtime services table
4
5 Copyright (c) 2011-2012, Intel Corporation
6 All rights reserved. This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
10
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13
14 **/
15
16 #include <WebServer.h>
17 #include <Library/UefiRuntimeServicesTableLib.h>
18
19 /**
20 Respond with the runtime services table
21
22 @param [in] SocketFD The socket's file descriptor to add to the list.
23 @param [in] pPort The WSDT_PORT structure address
24 @param [out] pbDone Address to receive the request completion status
25
26 @retval EFI_SUCCESS The request was successfully processed
27
28 **/
29 EFI_STATUS
RuntimeSservicesTablePage(IN int SocketFD,IN WSDT_PORT * pPort,OUT BOOLEAN * pbDone)30 RuntimeSservicesTablePage (
31 IN int SocketFD,
32 IN WSDT_PORT * pPort,
33 OUT BOOLEAN * pbDone
34 )
35 {
36 EFI_STATUS Status;
37
38 DBG_ENTER ( );
39
40 //
41 // Send the runtime services page
42 //
43 for ( ; ; ) {
44 //
45 // Send the page and table header
46 //
47 Status = TableHeader ( SocketFD, pPort, L"Runtime Services Table", gRT );
48 if ( EFI_ERROR ( Status )) {
49 break;
50 }
51
52 ///
53 /// The table header for the EFI Runtime Services Table.
54 ///
55 Status = EfiTableHeader ( SocketFD,
56 pPort,
57 &gRT->Hdr );
58 if ( EFI_ERROR ( Status )) {
59 break;
60 }
61
62 //
63 // Time Services
64 //
65 Status = RowPointer ( SocketFD,
66 pPort,
67 "GetTime",
68 (VOID *)gRT->GetTime,
69 NULL );
70 if ( EFI_ERROR ( Status )) {
71 break;
72 }
73 Status = RowPointer ( SocketFD,
74 pPort,
75 "SetTime",
76 (VOID *)gRT->SetTime,
77 NULL );
78 if ( EFI_ERROR ( Status )) {
79 break;
80 }
81 Status = RowPointer ( SocketFD,
82 pPort,
83 "GetWakeupTime",
84 (VOID *)gRT->GetWakeupTime,
85 NULL );
86 if ( EFI_ERROR ( Status )) {
87 break;
88 }
89 Status = RowPointer ( SocketFD,
90 pPort,
91 "SetWakeupTime",
92 (VOID *)gRT->SetWakeupTime,
93 NULL );
94 if ( EFI_ERROR ( Status )) {
95 break;
96 }
97
98 //
99 // Virtual Memory Services
100 //
101 Status = RowPointer ( SocketFD,
102 pPort,
103 "SetVirtualAddressMap",
104 (VOID *)gRT->SetVirtualAddressMap,
105 NULL );
106 if ( EFI_ERROR ( Status )) {
107 break;
108 }
109 Status = RowPointer ( SocketFD,
110 pPort,
111 "ConvertPointer",
112 (VOID *)gRT->ConvertPointer,
113 NULL );
114 if ( EFI_ERROR ( Status )) {
115 break;
116 }
117
118 //
119 // Variable Services
120 //
121 Status = RowPointer ( SocketFD,
122 pPort,
123 "GetVariable",
124 (VOID *)gRT->GetVariable,
125 NULL );
126 if ( EFI_ERROR ( Status )) {
127 break;
128 }
129 Status = RowPointer ( SocketFD,
130 pPort,
131 "GetNextVariableName",
132 (VOID *)gRT->GetNextVariableName,
133 NULL );
134 if ( EFI_ERROR ( Status )) {
135 break;
136 }
137 Status = RowPointer ( SocketFD,
138 pPort,
139 "SetVariable",
140 (VOID *)gRT->SetVariable,
141 NULL );
142 if ( EFI_ERROR ( Status )) {
143 break;
144 }
145
146 //
147 // Miscellaneous Services
148 //
149 Status = RowPointer ( SocketFD,
150 pPort,
151 "GetNextHighNonotonicCount",
152 (VOID *)gRT->GetNextHighMonotonicCount,
153 NULL );
154 if ( EFI_ERROR ( Status )) {
155 break;
156 }
157 Status = RowPointer ( SocketFD,
158 pPort,
159 "ResetSystem",
160 (VOID *)gRT->ResetSystem,
161 NULL );
162 if ( EFI_ERROR ( Status )) {
163 break;
164 }
165
166 //
167 // Determine if the structures supports 2.0 services
168 //
169 if ( 2 <= ( gRT->Hdr.Revision >> 16 )) {
170 //
171 // UEFI 2.0 Capsule Services
172 //
173 Status = RowPointer ( SocketFD,
174 pPort,
175 "UpdateCapsule",
176 (VOID *)gRT->UpdateCapsule,
177 NULL );
178 if ( EFI_ERROR ( Status )) {
179 break;
180 }
181 Status = RowPointer ( SocketFD,
182 pPort,
183 "QueryCapsuleCapabilities",
184 (VOID *)gRT->QueryCapsuleCapabilities,
185 NULL );
186 if ( EFI_ERROR ( Status )) {
187 break;
188 }
189
190 //
191 // Miscellaneous UEFI 2.0 Service
192 //
193 Status = RowPointer ( SocketFD,
194 pPort,
195 "QueryVariableInfo",
196 (VOID *)gRT->QueryVariableInfo,
197 NULL );
198 if ( EFI_ERROR ( Status )) {
199 break;
200 }
201 }
202
203 //
204 // Build the table trailer
205 //
206 Status = TableTrailer ( SocketFD,
207 pPort,
208 pbDone );
209 break;
210 }
211
212 //
213 // Return the operation status
214 //
215 DBG_EXIT_STATUS ( Status );
216 return Status;
217 }
218