1 /*++
2 
3 Copyright (c)  1999  - 2014, Intel Corporation. All rights reserved
4 
5   This program and the accompanying materials are licensed and made available under
6   the terms and conditions of the BSD License that accompanies this distribution.
7   The full text of the license may be found at
8   http://opensource.org/licenses/bsd-license.php.
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 
14 
15 Module Name:
16 
17   HwWatchdogTimer.h
18 
19 Abstract:
20 
21 
22 --*/
23 
24 #ifndef __EFI_WATCHDOG_TIMER_DRIVER_PROTOCOL_H__
25 #define __EFI_WATCHDOG_TIMER_DRIVER_PROTOCOL_H__
26 
27 #define EFI_WATCHDOG_TIMER_DRIVER_PROTOCOL_GUID \
28   { 0xd5b06d16, 0x2ea1, 0x4def, 0x98, 0xd0, 0xa0, 0x5d, 0x40, 0x72, 0x84, 0x17 }
29 
30 #define EFI_WATCHDOG_TIMER_NOT_SUPPORTED_PROTOCOL_GUID \
31   { 0xe9e156ac, 0x3203, 0x4572, 0xac, 0xdf, 0x84, 0x4f, 0xdc, 0xdb, 0x6, 0xbf }
32 
33 
34 #include <Guid/HwWatchdogTimerHob.h>
35 
36 //
37 // General Purpose Constants
38 //
39 #define ICH_INSTAFLUSH_GPIO      BIT16 // BIT 16 in GPIO Level 2 is GPIO 48.
40 #define B_INSTAFLUSH             BIT4
41 //
42 // Other Watchdog timer values
43 //
44 #define WDT_COUNTDOWN_VALUE                 0x14
45 #define BDS_WDT_COUNTDOWN_VALUE             0x35
46 
47 
48 //
49 // Prototypes for the Watchdog Timer Driver Protocol
50 //
51 
52 typedef
53 EFI_STATUS
54 (EFIAPI *EFI_WATCHDOG_START_TIMER) (
55   VOID
56   );
57 /*++
58 
59   Routine Description:
60     This service begins the Watchdog Timer countdown.  If the countdown completes prior to
61     Stop Timer or Restart Timer the system will reset.
62 
63   Arguments:
64     None
65 
66   Returns:
67     EFI_SUCCESS       - Operation completed successfully
68     EFI_DEVICE_ERROR  - The command was unsuccessful
69 
70 --*/
71 
72 
73 
74 typedef
75 EFI_STATUS
76 (EFIAPI *PEI_WATCHDOG_RESET_TIMER) (
77   VOID
78   );
79 /*++
80 
81   Routine Description:
82     This service resets the Watchdog Timer countdown and should only be called after the
83     Start Timer function.
84 
85   Arguments:
86     None
87 
88   Returns:
89     EFI_SUCCESS       - Operation completed successfully
90     EFI_DEVICE_ERROR  - The command was unsuccessful
91 
92 --*/
93 
94 
95 
96 
97 typedef
98 EFI_STATUS
99 (EFIAPI *EFI_WATCHDOG_RESTART_TIMER) (
100   VOID
101   );
102 /*++
103 
104   Routine Description:
105     This service restarts the Watchdog Timer countdown and should only be called after the
106     Start Timer function.
107 
108   Arguments:
109     None
110 
111   Returns:
112     EFI_SUCCESS       - Operation completed successfully
113     EFI_DEVICE_ERROR  - The command was unsuccessful
114 
115 --*/
116 
117 
118 
119 
120 typedef
121 EFI_STATUS
122 (EFIAPI *EFI_WATCHDOG_STOP_TIMER) (
123   VOID
124   );
125 /*++
126 
127   Routine Description:
128     This service disables the Watchdog Timer countdown.
129 
130   Arguments:
131     None
132 
133   Returns:
134     EFI_SUCCESS       - Operation completed successfully
135     EFI_DEVICE_ERROR  - The command was unsuccessful
136 
137 --*/
138 
139 
140 
141 typedef
142 EFI_STATUS
143 (EFIAPI *EFI_WATCHDOG_CHECK_TIMEOUT) (
144   OUT HW_WATCHDOG_TIMEOUT       *WatchdogTimeout
145   );
146 /*++
147 
148   Routine Description:
149     This service disables the Watchdog Timer countdown.
150 
151   Arguments:
152     None
153 
154   Returns:
155     EFI_SUCCESS       - Operation completed successfully
156     EFI_DEVICE_ERROR  - The command was unsuccessful
157 
158 --*/
159 
160 
161 
162 typedef
163 EFI_STATUS
164 (EFIAPI *EFI_WATCHDOG_FORCE_REBOOT) (
165   IN BOOLEAN                    ForceTimeout,
166   IN UINT8                      ResetType
167   );
168 /*++
169 
170   Routine Description:
171     This service forces a reboot of the system due to a reset of the POWERGOOD_PS,
172     POWERGOOD_CLK, and the BSEL Override
173 
174   Arguments:
175     None
176 
177   Returns:
178     This function should not return!
179 
180     EFI_DEVICE_ERROR  - The command was unsuccessful and a reboot did not occur
181 
182 --*/
183 
184 
185 
186 typedef
187 EFI_STATUS
188 (EFIAPI *EFI_WATCHDOG_KNOWN_RESET) (
189   IN BOOLEAN                    AllowReset
190   );
191 /*++
192 
193   Routine Description:
194     This service notifies the Watchdog Timer of the fact that a known reset is occuring.
195 
196   Arguments:
197     AllowReset -  TRUE if a Reset is currently expected
198                   FALSE if a Reset is not currently expected
199 
200   Returns:
201     This function should not return!
202 
203     EFI_DEVICE_ERROR  - The command was unsuccessful and a reboot did not occur
204 
205 --*/
206 
207 typedef
208 EFI_STATUS
209 (EFIAPI *EFI_GET_TIMER_COUNT_DOWN_PERIOD)(
210   OUT UINT32      *CountdownValue
211   );
212 /*++
213 
214   Routine Description:
215     This service reads the current Watchdog Timer countdown reload value.
216 
217   Arguments:
218     CountdownValue - pointer to UINT32 to return the value of the reload register.
219 
220   Returns:
221     EFI_SUCCESS       - Operation completed successfully
222     EFI_DEVICE_ERROR  - The command was unsuccessful
223 
224 --*/
225 
226 typedef
227 EFI_STATUS
228 (EFIAPI *EFI_SET_TIMER_COUNT_DOWN_PERIOD)(
229   OUT UINT32      CountdownValue
230   );
231 /*++
232 
233   Routine Description:
234     This service reads the current Watchdog Timer countdown reload value.
235 
236   Arguments:
237     CountdownValue - Value to set the reload register.
238 
239   Returns:
240     EFI_SUCCESS       - Operation completed successfully
241     EFI_DEVICE_ERROR  - The command was unsuccessful
242 
243 --*/
244 
245 typedef
246 EFI_STATUS
247 (EFIAPI *PEI_WATCHDOG_CLEAR_TIMER_STATE) (
248   );
249 /*++
250 
251   Routine Description:
252     This service clears the state that indicates the Watchdog Timer fired.
253 
254   Arguments:
255 
256   Returns:
257     EFI_SUCCESS       - Operation completed successfully
258     EFI_DEVICE_ERROR  - The command was unsuccessful
259 
260 --*/
261 
262 typedef
263 EFI_STATUS
264 (EFIAPI *EFI_STALL_WATCHDOG_COUNTDOWN) (
265   IN BOOLEAN Stall
266   );
267 /*++
268 
269   Routine Description:
270     This service disables the Watchdog Timer countdown.  It also closes the recurring restart event
271     if the event exists.
272 
273   Arguments:
274     Stall - TRUE = Stop the timer countdown
275             FALSE = Start the timer countdown
276 
277   Returns:
278     EFI_SUCCESS       - Operation completed successfully
279     EFI_DEVICE_ERROR  - The command was unsuccessful
280 
281 --*/
282 
283 typedef struct _EFI_WATCHDOG_TIMER_DRIVER_PROTOCOL {
284   EFI_WATCHDOG_START_TIMER                      StartWatchdogTimer;
285   PEI_WATCHDOG_RESET_TIMER                      ResetWatchdogTimeout;
286   EFI_WATCHDOG_RESTART_TIMER                    RestartWatchdogTimer;
287   EFI_WATCHDOG_STOP_TIMER                       StopWatchdogTimer;
288   EFI_WATCHDOG_CHECK_TIMEOUT                    CheckWatchdogTimeout;
289   EFI_WATCHDOG_FORCE_REBOOT                     ForceReboot;
290   EFI_WATCHDOG_KNOWN_RESET                      AllowKnownReset;
291   EFI_GET_TIMER_COUNT_DOWN_PERIOD               GetCountdownPeriod;
292   EFI_SET_TIMER_COUNT_DOWN_PERIOD               SetCountdownPeriod;
293   PEI_WATCHDOG_CLEAR_TIMER_STATE                ClearTimerState;
294   EFI_STALL_WATCHDOG_COUNTDOWN                  StallWatchdogCountdown;
295 } EFI_WATCHDOG_TIMER_DRIVER_PROTOCOL;
296 
297 extern EFI_GUID gEfiWatchdogTimerDriverProtocolGuid;
298 extern EFI_GUID gEfiWatchdogTimerNotSupportedProtocolGuid;
299 
300 #endif
301