1 /**
2 @file
3 Reboot the system
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 /**
21 Page to reboot the system
22
23 @param [in] SocketFD The socket's file descriptor to add to the list.
24 @param [in] pPort The WSDT_PORT structure address
25 @param [out] pbDone Address to receive the request completion status
26
27 @retval EFI_SUCCESS The request was successfully processed
28
29 **/
30 EFI_STATUS
RebootPage(IN int SocketFD,IN WSDT_PORT * pPort,OUT BOOLEAN * pbDone)31 RebootPage (
32 IN int SocketFD,
33 IN WSDT_PORT * pPort,
34 OUT BOOLEAN * pbDone
35 )
36 {
37 EFI_STATUS Status;
38
39 DBG_ENTER ( );
40
41 //
42 // Send the Reboot page
43 //
44 for ( ; ; ) {
45 //
46 // Send the page header
47 //
48 Status = HttpPageHeader ( SocketFD, pPort, L"Reboot" );
49 if ( EFI_ERROR ( Status )) {
50 break;
51 }
52
53 //
54 // Send the page body
55 //
56 Status = HttpSendAnsiString ( SocketFD,
57 pPort,
58 "<h1>Reboot</h1>\r\n"
59 "<p>\r\n"
60 " Ouch! The system is rebooting!\r\n" );
61 if ( EFI_ERROR ( Status )) {
62 break;
63 }
64
65 //
66 // Send the page trailer
67 //
68 Status = HttpPageTrailer ( SocketFD, pPort, pbDone );
69 if ( EFI_ERROR ( Status )) {
70 break;
71 }
72
73 //
74 // Deliver the data to the remote system by
75 // closing the socket
76 //
77 close ( SocketFD );
78
79 //
80 // Attempt to reboot the system
81 //
82 DEBUG (( DEBUG_REQUEST, "Reseting System\r\n" ));
83 gRT->ResetSystem ( EfiResetCold,
84 EFI_SUCCESS,
85 0,
86 NULL );
87 break;
88 }
89
90 //
91 // Return the operation status
92 //
93 DBG_EXIT_STATUS ( Status );
94 return Status;
95 }
96