diff --git a/sys/dev/acpi_support/acpi_ibm.c b/sys/dev/acpi_support/acpi_ibm.c --- a/sys/dev/acpi_support/acpi_ibm.c +++ b/sys/dev/acpi_support/acpi_ibm.c @@ -1453,7 +1453,7 @@ * instead of suspend-to-RAM. */ case IBM_EVENT_SUSPEND_TO_RAM: - power_pm_suspend(POWER_SSTATE_TRANSITION_SUSPEND); + power_pm_suspend(POWER_TRANSITION_SUSPEND); break; case IBM_EVENT_BLUETOOTH: diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c --- a/sys/dev/syscons/syscons.c +++ b/sys/dev/syscons/syscons.c @@ -3987,10 +3987,10 @@ break; case SUSP: - power_pm_suspend(POWER_SSTATE_TRANSITION_SUSPEND); + power_pm_suspend(POWER_TRANSITION_SUSPEND); break; case STBY: - power_pm_suspend(POWER_SSTATE_TRANSITION_STANDBY); + power_pm_suspend(POWER_TRANSITION_STANDBY); break; case DBG: diff --git a/sys/dev/vt/vt_core.c b/sys/dev/vt/vt_core.c --- a/sys/dev/vt/vt_core.c +++ b/sys/dev/vt/vt_core.c @@ -804,11 +804,11 @@ return (1); case SPCLKEY | STBY: /* XXX Not present in kbdcontrol parser. */ /* Put machine into Stand-By mode. */ - power_pm_suspend(POWER_SSTATE_TRANSITION_STANDBY); + power_pm_suspend(POWER_TRANSITION_STANDBY); return (1); case SPCLKEY | SUSP: /* kbdmap(5) keyword `susp`. */ /* Suspend machine. */ - power_pm_suspend(POWER_SSTATE_TRANSITION_SUSPEND); + power_pm_suspend(POWER_TRANSITION_SUSPEND); return (1); } diff --git a/sys/kern/subr_power.c b/sys/kern/subr_power.c --- a/sys/kern/subr_power.c +++ b/sys/kern/subr_power.c @@ -49,6 +49,55 @@ static bool power_pm_supported[POWER_STYPE_COUNT] = {0}; static struct task power_pm_task; +<<<<<<< HEAD +======= +static d_ioctl_t power_ioctl; + +static struct cdevsw power_cdevsw = { + .d_version = D_VERSION, + .d_ioctl = power_ioctl, + .d_name = "power", +}; + +static void +power_init(void *unused) +{ + struct make_dev_args args; + struct cdev *dev; + + make_dev_args_init(&args); + args.mda_devsw = &power_cdevsw; + args.mda_uid = UID_ROOT; + args.mda_gid = GID_OPERATOR; + args.mda_mode = 0660; + if (make_dev_s(&args, &dev, "power") != 0) + printf("Failed to create power device"); +} +SYSINIT(powerdev, SI_SUB_CONFIGURE, SI_ORDER_ANY, power_init, NULL); + +static int +power_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, + struct thread *td) +{ + uint32_t trans; + + if ((fflag & FWRITE) == 0) + return (EPERM); + + switch (cmd) { + case PIOTRANSITION: + trans = *(uint32_t *)data; + if (trans >= POWER_TRANSITION_COUNT) + return (EINVAL); + power_pm_suspend((enum power_transition)trans); + break; + default: + return (EINVAL); + } + return (0); +} + +>>>>>>> 3f220005316b (power: Rename power transition enum) enum power_stype power_name_to_stype(const char *name) { @@ -176,7 +225,7 @@ } void -power_pm_suspend(enum power_sstate_transition trans) +power_pm_suspend(enum power_transition trans) { enum power_stype stype; @@ -184,13 +233,13 @@ return; switch (trans) { - case POWER_SSTATE_TRANSITION_STANDBY: + case POWER_TRANSITION_STANDBY: stype = power_standby_stype; break; - case POWER_SSTATE_TRANSITION_SUSPEND: + case POWER_TRANSITION_SUSPEND: stype = power_suspend_stype; break; - case POWER_SSTATE_TRANSITION_HIBERNATE: + case POWER_TRANSITION_HIBERNATE: stype = power_hibernate_stype; break; default: diff --git a/sys/sys/power.h b/sys/sys/power.h --- a/sys/sys/power.h +++ b/sys/sys/power.h @@ -48,21 +48,22 @@ * Sleep state transition requests. * * These are high-level sleep states that the system can enter. They map to - * a specific generic sleep type (enum power_stype). + * a specific generic sleep type (enum power_stype), depending on the + * kern.power.* sysctls. */ -enum power_sstate_transition { - POWER_SSTATE_TRANSITION_STANDBY, - POWER_SSTATE_TRANSITION_SUSPEND, - POWER_SSTATE_TRANSITION_HIBERNATE, +enum power_transition { + POWER_TRANSITION_STANDBY, + POWER_TRANSITION_SUSPEND, + POWER_TRANSITION_HIBERNATE, }; /* * Sleep type. * * These are the specific generic methods of entering a sleep state. E.g. - * POWER_SSTATE_TRANSITION_SUSPEND could be set to enter either suspend-to-RAM - * (which is S3 on ACPI systems), or suspend-to-idle (S0ix on ACPI systems). - * This would be done through the kern.power.suspend sysctl. + * POWER_TRANSITION_SUSPEND could be set to enter either firmware suspend (which + * is suspend-to-RAM or S3 on ACPI systems), or suspend-to-idle (S0ix on ACPI + * platforms). This would be done through the kern.power.suspend sysctl. */ enum power_stype { POWER_STYPE_AWAKE, @@ -96,7 +97,7 @@ void *_pm_arg, bool _pm_supported[static POWER_STYPE_COUNT]); extern u_int power_pm_get_type(void); -extern void power_pm_suspend(enum power_sstate_transition _trans); +extern void power_pm_suspend(enum power_transition _trans); /* * System power API.