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