Add a new `STYPE_SUSPEND_TO_IDLE` sleep type to the `enum sleep_type` added by D48732.
Factor out `do_standby`, `do_sleep`, and add a new `do_idle` function for idling the CPU (a future patch will make this an idle loop and not just a simple `cpu_idle()` call). In `do_idle`, SCIs (interrupt 9) are enabled to allow wake events to break the CPU out of idle.
Also records all the steps made instead of just the last one in `slp_state`, which allows for more flexible unwinding (will be useful to not have to goto `breakout` if the SPMC entry call fails).
This is a prerequisite for the firmware to enter the S0ix states. When suspending to idle, the system stays in an ACPI S0 state, but the CPUs are idled and devices are suspended/resumed before and after this as they would be when entering any other sleep type (except for `AWAKE` and `POWEROFF`, of course). An entry notification to the SPMC (D48387) is needed to actually kick the firmware modern standby.
All the `hw.acpi` sysctls that previously supported S1-S5 now also support an s2idle option, and s2idle is always advertised as a supported option under `hw.acpi.supported_sleep_states`.
A lot of this borrows from Ben's patch: D17675. The main functional difference with that patch is that suspend-to-idle is a wholly separate sleep type in this one as opposed to being an alternative implementation for S3.