void
*
powerhook_establish(
const char *name
void (*fn)(int why, void *a), void *arg
)
void
powerhook_disestablish(
void *cookie
)
)
function adds
fn
of the list of hooks invoked by
dopowerhooks(9)
at power change.
When invoked, the hook function
fn
will be passed the new power state as the first argument and
arg
as its second argument.
The
powerhook_disestablish()
function removes the hook described by the opaque pointer
cookie
from the list of hooks to be invoked at power change.
If
cookie
is invalid, the result of
powerhook_disestablish()
is undefined.
Power hooks should be used to perform activities that must happen when the power situation to the computer changes. Because of the environment in which they are run, power hooks cannot rely on many system services (including file systems, and timeouts and other interrupt-driven services). The power hooks are typically executed from an interrupt context.
The different reasons for calling the power hooks are: suspend, standby, and
resume.
The reason is reflected in the
why
argument and the values
PWR_SOFTSUSPEND
,
PWR_SUSPEND
,
PWR_SOFTSTANDBY
,
PWR_STANDBY
,
PWR_SOFTRESUME
,
and
PWR_RESUME
.
It calls with PWR_SOFTxxx in the normal priority level while the other
callings are protected with
splhigh(9).
At suspend the system is going to lose (almost) all power, standby retains
some power (e.g., minimal power to USB devices), and at resume power is
back to normal.
)
returns an opaque pointer describing the newly-established
power hook.
Otherwise, it returns NULL.