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