# HG changeset patch # Parent 9bc659eeb4dca523b32f81fb525c6b82dad636f1 diff -r 9bc659eeb4dc -r 540d9ee03264 sys/dev/ipmi/ipmi.c --- a/sys/dev/ipmi/ipmi.c +++ b/sys/dev/ipmi/ipmi.c @@ -78,12 +78,15 @@ static d_open_t ipmi_open; static void ipmi_dtor(void *arg); int ipmi_attached = 0; +static int ipmi_dopowercyle = 0; static int on = 1; static SYSCTL_NODE(_hw, OID_AUTO, ipmi, CTLFLAG_RD, 0, "IPMI driver parameters"); SYSCTL_INT(_hw_ipmi, OID_AUTO, on, CTLFLAG_RW, &on, 0, ""); +SYSCTL_INT(_hw_ipmi, OID_AUTO, powercyle, CTLFLAG_RW, + &ipmi_dopowercycle, 0, ""); static struct cdevsw ipmi_cdevsw = { .d_version = D_VERSION, @@ -922,3 +925,12 @@ dump_buf(u_char *data, int len) printf(" %3x %s %s\n", i, line, buf); } #endif + +int +ipmi_shutdown(device_t dev) +{ + if (ipmi_dopowercyle) { + /* Send chassis power cycle command */ + /* No need to wait for it to complete... */ + } +} diff -r 9bc659eeb4dc -r 540d9ee03264 sys/dev/ipmi/ipmi_acpi.c --- a/sys/dev/ipmi/ipmi_acpi.c +++ b/sys/dev/ipmi/ipmi_acpi.c @@ -198,6 +198,7 @@ static device_method_t ipmi_methods[] = DEVMETHOD(device_probe, ipmi_acpi_probe), DEVMETHOD(device_attach, ipmi_acpi_attach), DEVMETHOD(device_detach, ipmi_detach), + DEVMETHOD(device_shutdown, ipmi_shutdown), { 0, 0 } }; diff -r 9bc659eeb4dc -r 540d9ee03264 sys/dev/ipmi/ipmivars.h --- a/sys/dev/ipmi/ipmivars.h +++ b/sys/dev/ipmi/ipmivars.h @@ -226,6 +226,7 @@ struct ipmi_ipmb { int ipmi_attach(device_t); int ipmi_detach(device_t); +int ipmi_shutdown(device_t); void ipmi_release_resources(device_t); /* Manage requests. */