15d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* 25d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Virtual hardware watchdog. 35d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 45d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Copyright (C) 2009 Red Hat Inc. 55d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 65d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * This program is free software; you can redistribute it and/or 75d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * modify it under the terms of the GNU General Public License 85d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * as published by the Free Software Foundation; either version 2 95d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * of the License, or (at your option) any later version. 105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * This program is distributed in the hope that it will be useful, 125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * but WITHOUT ANY WARRANTY; without even the implied warranty of 135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * GNU General Public License for more details. 155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * You should have received a copy of the GNU General Public License 17a25351325187eb8eff8b9b090acd8f2d7684c6ffDavid Turner * along with this program; if not, see <http://www.gnu.org/licenses/>. 185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * By Richard W.M. Jones (rjones@redhat.com). 205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */ 215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifndef QEMU_WATCHDOG_H 235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define QEMU_WATCHDOG_H 245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern void wdt_i6300esb_init(void); 265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern void wdt_ib700_init(void); 275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Possible values for action parameter. */ 295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WDT_RESET 1 /* Hard reset. */ 305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WDT_SHUTDOWN 2 /* Shutdown. */ 315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WDT_POWEROFF 3 /* Quit. */ 325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WDT_PAUSE 4 /* Pause. */ 335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WDT_DEBUG 5 /* Prints a message and continues running. */ 345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WDT_NONE 6 /* Do nothing. */ 355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct WatchdogTimerModel { 37a5d412078b8e7478d81df03710eacc7a21096ba2David 'Digit' Turner QLIST_ENTRY(WatchdogTimerModel) entry; 385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* Short name of the device - used to select it on the command line. */ 405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner const char *wdt_name; 415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* Longer description (eg. manufacturer and full model number). */ 425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner const char *wdt_description; 435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* This callback should create/register the device. It is called 455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * indirectly from hw/pc.c when the virtual PC is being set up. 465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */ 475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void (*wdt_pc_init)(PCIBus *pci_bus); 485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct WatchdogTimerModel WatchdogTimerModel; 505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* in vl.c */ 525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern WatchdogTimerModel *watchdog; 535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern int watchdog_action; 545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* in hw/watchdog.c */ 565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern int select_watchdog(const char *p); 575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern int select_watchdog_action(const char *action); 585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern void watchdog_add_model(WatchdogTimerModel *model); 595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern void watchdog_perform_action(void); 605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern void watchdog_pc_init(PCIBus *pci_bus); 615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern void register_watchdogs(void); 625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif /* QEMU_WATCHDOG_H */ 64