1 /** 2 @file 3 Display the boot 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 18 /** 19 Respond with the boot services table 20 21 @param [in] SocketFD The socket's file descriptor to add to the list. 22 @param [in] pPort The WSDT_PORT structure address 23 @param [out] pbDone Address to receive the request completion status 24 25 @retval EFI_SUCCESS The request was successfully processed 26 27 **/ 28 EFI_STATUS 29 BootServicesTablePage ( 30 IN int SocketFD, 31 IN WSDT_PORT * pPort, 32 OUT BOOLEAN * pbDone 33 ) 34 { 35 EFI_STATUS Status; 36 37 DBG_ENTER ( ); 38 39 // 40 // Send the boot services page 41 // 42 for ( ; ; ) { 43 // 44 // Send the page and table header 45 // 46 Status = TableHeader ( SocketFD, pPort, L"Boot Services Table", gBS ); 47 if ( EFI_ERROR ( Status )) { 48 break; 49 } 50 51 /// 52 /// The table header for the EFI Boot Services Table. 53 /// 54 Status = EfiTableHeader ( SocketFD, 55 pPort, 56 &gBS->Hdr ); 57 if ( EFI_ERROR ( Status )) { 58 break; 59 } 60 61 // 62 // Task Priority Services 63 // 64 Status = RowPointer ( SocketFD, 65 pPort, 66 "RaiseTPL", 67 (CONST VOID *)gBS->RaiseTPL, 68 NULL ); 69 if ( EFI_ERROR ( Status )) { 70 break; 71 } 72 Status = RowPointer ( SocketFD, 73 pPort, 74 "RestoreTPL", 75 (CONST VOID *)gBS->RestoreTPL, 76 NULL ); 77 if ( EFI_ERROR ( Status )) { 78 break; 79 } 80 81 // 82 // Memory Services 83 // 84 Status = RowPointer ( SocketFD, 85 pPort, 86 "AllocatePages", 87 (CONST VOID *)gBS->AllocatePages, 88 NULL ); 89 if ( EFI_ERROR ( Status )) { 90 break; 91 } 92 Status = RowPointer ( SocketFD, 93 pPort, 94 "FreePages", 95 (CONST VOID *)gBS->FreePages, 96 NULL ); 97 if ( EFI_ERROR ( Status )) { 98 break; 99 } 100 Status = RowPointer ( SocketFD, 101 pPort, 102 "GetMemoryMap", 103 (CONST VOID *)gBS->GetMemoryMap, 104 NULL ); 105 if ( EFI_ERROR ( Status )) { 106 break; 107 } 108 Status = RowPointer ( SocketFD, 109 pPort, 110 "AllocatePool", 111 (CONST VOID *)gBS->AllocatePool, 112 NULL ); 113 if ( EFI_ERROR ( Status )) { 114 break; 115 } 116 Status = RowPointer ( SocketFD, 117 pPort, 118 "FreePool", 119 (CONST VOID *)gBS->FreePool, 120 NULL ); 121 if ( EFI_ERROR ( Status )) { 122 break; 123 } 124 125 // 126 // Event & Timer Services 127 // 128 Status = RowPointer ( SocketFD, 129 pPort, 130 "CreateEvent", 131 (CONST VOID *)gBS->CreateEvent, 132 NULL ); 133 if ( EFI_ERROR ( Status )) { 134 break; 135 } 136 Status = RowPointer ( SocketFD, 137 pPort, 138 "SetTimer", 139 (CONST VOID *)gBS->SetTimer, 140 NULL ); 141 if ( EFI_ERROR ( Status )) { 142 break; 143 } 144 Status = RowPointer ( SocketFD, 145 pPort, 146 "WaitForEvent", 147 (CONST VOID *)gBS->WaitForEvent, 148 NULL ); 149 if ( EFI_ERROR ( Status )) { 150 break; 151 } 152 Status = RowPointer ( SocketFD, 153 pPort, 154 "SignalEvent", 155 (CONST VOID *)gBS->SignalEvent, 156 NULL ); 157 if ( EFI_ERROR ( Status )) { 158 break; 159 } 160 Status = RowPointer ( SocketFD, 161 pPort, 162 "CloseEvent", 163 (CONST VOID *)gBS->CloseEvent, 164 NULL ); 165 if ( EFI_ERROR ( Status )) { 166 break; 167 } 168 Status = RowPointer ( SocketFD, 169 pPort, 170 "CheckEvent", 171 (CONST VOID *)gBS->CheckEvent, 172 NULL ); 173 if ( EFI_ERROR ( Status )) { 174 break; 175 } 176 177 // 178 // Protocol Handler Services 179 // 180 Status = RowPointer ( SocketFD, 181 pPort, 182 "InstallProtocolInterface", 183 (CONST VOID *)gBS->InstallProtocolInterface, 184 NULL ); 185 if ( EFI_ERROR ( Status )) { 186 break; 187 } 188 Status = RowPointer ( SocketFD, 189 pPort, 190 "ReinstallProtocolInterface", 191 (CONST VOID *)gBS->ReinstallProtocolInterface, 192 NULL ); 193 if ( EFI_ERROR ( Status )) { 194 break; 195 } 196 Status = RowPointer ( SocketFD, 197 pPort, 198 "UninstallProtocolInterface", 199 (CONST VOID *)gBS->UninstallProtocolInterface, 200 NULL ); 201 if ( EFI_ERROR ( Status )) { 202 break; 203 } 204 Status = RowPointer ( SocketFD, 205 pPort, 206 "HandleProtocol", 207 (CONST VOID *)gBS->HandleProtocol, 208 NULL ); 209 if ( EFI_ERROR ( Status )) { 210 break; 211 } 212 Status = RowPointer ( SocketFD, 213 pPort, 214 "Reserved", 215 (CONST VOID *)gBS->Reserved, 216 NULL ); 217 if ( EFI_ERROR ( Status )) { 218 break; 219 } 220 Status = RowPointer ( SocketFD, 221 pPort, 222 "RegisterProtocolNotify", 223 (CONST VOID *)gBS->RegisterProtocolNotify, 224 NULL ); 225 if ( EFI_ERROR ( Status )) { 226 break; 227 } 228 Status = RowPointer ( SocketFD, 229 pPort, 230 "LocateHandle", 231 (CONST VOID *)gBS->LocateHandle, 232 NULL ); 233 if ( EFI_ERROR ( Status )) { 234 break; 235 } 236 Status = RowPointer ( SocketFD, 237 pPort, 238 "LocateDevicePath", 239 (CONST VOID *)gBS->LocateDevicePath, 240 NULL ); 241 if ( EFI_ERROR ( Status )) { 242 break; 243 } 244 Status = RowPointer ( SocketFD, 245 pPort, 246 "InstallConfigurationTable", 247 (CONST VOID *)gBS->InstallConfigurationTable, 248 NULL ); 249 if ( EFI_ERROR ( Status )) { 250 break; 251 } 252 253 // 254 // Image Services 255 // 256 Status = RowPointer ( SocketFD, 257 pPort, 258 "LoadImage", 259 (CONST VOID *)gBS->LoadImage, 260 NULL ); 261 if ( EFI_ERROR ( Status )) { 262 break; 263 } 264 Status = RowPointer ( SocketFD, 265 pPort, 266 "StartImage", 267 (CONST VOID *)gBS->StartImage, 268 NULL ); 269 if ( EFI_ERROR ( Status )) { 270 break; 271 } 272 Status = RowPointer ( SocketFD, 273 pPort, 274 "Exit", 275 (CONST VOID *)gBS->Exit, 276 NULL ); 277 if ( EFI_ERROR ( Status )) { 278 break; 279 } 280 Status = RowPointer ( SocketFD, 281 pPort, 282 "UnloadImage", 283 (CONST VOID *)gBS->UnloadImage, 284 NULL ); 285 if ( EFI_ERROR ( Status )) { 286 break; 287 } 288 Status = RowPointer ( SocketFD, 289 pPort, 290 "ExitBootServices", 291 (CONST VOID *)gBS->ExitBootServices, 292 NULL ); 293 if ( EFI_ERROR ( Status )) { 294 break; 295 } 296 297 // 298 // Miscellaneous Services 299 // 300 Status = RowPointer ( SocketFD, 301 pPort, 302 "GetNextMonotonicCount", 303 (CONST VOID *)gBS->GetNextMonotonicCount, 304 NULL ); 305 if ( EFI_ERROR ( Status )) { 306 break; 307 } 308 Status = RowPointer ( SocketFD, 309 pPort, 310 "Stall", 311 (CONST VOID *)gBS->Stall, 312 NULL ); 313 if ( EFI_ERROR ( Status )) { 314 break; 315 } 316 Status = RowPointer ( SocketFD, 317 pPort, 318 "SetWatchdogTimer", 319 (CONST VOID *)gBS->SetWatchdogTimer, 320 NULL ); 321 if ( EFI_ERROR ( Status )) { 322 break; 323 } 324 325 // 326 // DriverSupport Services 327 // 328 Status = RowPointer ( SocketFD, 329 pPort, 330 "ConnectController", 331 (CONST VOID *)gBS->ConnectController, 332 NULL ); 333 if ( EFI_ERROR ( Status )) { 334 break; 335 } 336 Status = RowPointer ( SocketFD, 337 pPort, 338 "DisconnectController", 339 (CONST VOID *)gBS->DisconnectController, 340 NULL ); 341 if ( EFI_ERROR ( Status )) { 342 break; 343 } 344 345 // 346 // Open and Close Protocol Services 347 // 348 Status = RowPointer ( SocketFD, 349 pPort, 350 "OpenProtocol", 351 (CONST VOID *)gBS->OpenProtocol, 352 NULL ); 353 if ( EFI_ERROR ( Status )) { 354 break; 355 } 356 Status = RowPointer ( SocketFD, 357 pPort, 358 "CloseProtocol", 359 (CONST VOID *)gBS->CloseProtocol, 360 NULL ); 361 if ( EFI_ERROR ( Status )) { 362 break; 363 } 364 Status = RowPointer ( SocketFD, 365 pPort, 366 "OpenProtocolInformation", 367 (CONST VOID *)gBS->OpenProtocolInformation, 368 NULL ); 369 if ( EFI_ERROR ( Status )) { 370 break; 371 } 372 373 // 374 // Library Services 375 // 376 Status = RowPointer ( SocketFD, 377 pPort, 378 "ProtocolsPerHandle", 379 (CONST VOID *)gBS->ProtocolsPerHandle, 380 NULL ); 381 if ( EFI_ERROR ( Status )) { 382 break; 383 } 384 Status = RowPointer ( SocketFD, 385 pPort, 386 "LocateHandleBuffer", 387 (CONST VOID *)gBS->LocateHandleBuffer, 388 NULL ); 389 if ( EFI_ERROR ( Status )) { 390 break; 391 } 392 Status = RowPointer ( SocketFD, 393 pPort, 394 "LocateProtocol", 395 (CONST VOID *)gBS->LocateProtocol, 396 NULL ); 397 if ( EFI_ERROR ( Status )) { 398 break; 399 } 400 Status = RowPointer ( SocketFD, 401 pPort, 402 "InstallMultipleProtocolInterfaces", 403 (CONST VOID *)gBS->InstallMultipleProtocolInterfaces, 404 NULL ); 405 if ( EFI_ERROR ( Status )) { 406 break; 407 } 408 Status = RowPointer ( SocketFD, 409 pPort, 410 "UninstallMultipleProtocolInterfaces", 411 (CONST VOID *)gBS->UninstallMultipleProtocolInterfaces, 412 NULL ); 413 if ( EFI_ERROR ( Status )) { 414 break; 415 } 416 417 // 418 // 32-bit CRC Services 419 // 420 Status = RowPointer ( SocketFD, 421 pPort, 422 "CalculateCrc32", 423 (CONST VOID *)gBS->CalculateCrc32, 424 NULL ); 425 if ( EFI_ERROR ( Status )) { 426 break; 427 } 428 429 // 430 // Miscellaneous Services 431 // 432 Status = RowPointer ( SocketFD, 433 pPort, 434 "CopyMem", 435 (CONST VOID *)gBS->CopyMem, 436 NULL ); 437 if ( EFI_ERROR ( Status )) { 438 break; 439 } 440 Status = RowPointer ( SocketFD, 441 pPort, 442 "SetMem", 443 (CONST VOID *)gBS->SetMem, 444 NULL ); 445 if ( EFI_ERROR ( Status )) { 446 break; 447 } 448 Status = RowPointer ( SocketFD, 449 pPort, 450 "CreateEventEx", 451 (CONST VOID *)gBS->CreateEventEx, 452 NULL ); 453 if ( EFI_ERROR ( Status )) { 454 break; 455 } 456 457 // 458 // Build the table trailer 459 // 460 Status = TableTrailer ( SocketFD, 461 pPort, 462 pbDone ); 463 break; 464 } 465 466 // 467 // Return the operation status 468 // 469 DBG_EXIT_STATUS ( Status ); 470 return Status; 471 } 472