Subject: Re: ACPI, APM, and Sysmon interaction
To: Garrett D'Amore <garrett_damore@tadpole.com>
From: Jachym Holecek <freza@dspfpga.com>
List: tech-kern
Date: 07/19/2006 20:44:29
Hello,
Sorry for perhaps being somewhat superficial below -- I've been rather
busy lately and didn't yet have time to look more closely at "high level"
PM problems.
# Garrett D'Amore 2006-07-18:
> Background: I have a SPARC (no ACPI or APM native!) laptop that has
> battery and power management support that I'd like to support ACPI-like
> interfaces on.
>
> Right now I have implemented some subset of this by talking to sysmon.
> But there are bits that I'd like to expand upon, like battery status, etc.
>
> Apparently a lot of the user tools talk to /dev/apm, which is pretty
> PeeCee-specific. I'd prefer not to have to reimplement code to support
> both /dev/apm and sysmon.
What tools? I can only see apm(8) and apmd(8) in base. Maybe something
in pkgsrc?
> Complicating this is Christos' recent addition to acpi, to add a
> compatibility layer. I.e. acpi exports an apm compatibility layer. The
> problem is that it is really pretty ACPI specific, because it has things
> like acpi suspend support coded up in it. So it isn't directly usable
> by me.
>
> So we need to think a bit about this design going forward, I think.
>
> My suggestion is to have sysmon act as the clearing house for _all_ this
> stuff. Power management, suspend/resume state, etc. To effect this,
> ACPI would register with sysmon, as would real APM (assuming the user
> has it).
Agreed.
Somewhat aside -- given that various PM related states/levels are going
to be MD (or even {device,bus}-specific -- I'd like to resume my work on
per-device PM soon, BTW), there's probably not much point in trying to
abstract things too much. We should just use reasonably self-descriptive
strings to refer to power states and document them somewhere in .4
manual pages. Plain integers would work just as nicely.
> Then the /dev/apm node could handled from sysmon directly.
Mm, just make all apm-centric interfaces subject to COMPAT_APM (or
whatever) and register with sysmon unconditionally.
> This means adding registration entry points for all the APM/ACPI-ish
> things that we want to have.
Yup, if you mean "registration with sysmon".
> (Ultimately, this probably also means
> replacing the sysctl ACPI hooks for triggering suspend/sleep, etc.)
Sure, those were meant as temporary interface AFAIR.
> I'd also like to have a kernel warning issued the first time some code
> _not_ using the compat interfaces accesses /dev/apm ("WARNING:
> program XXX is using obsolete APM interface") at least in verbose if not
> even all boot flags. I don't know if we can distinguish a program using
> the compat layer ioctls vs. normal ioctls (being largely ignorant of how
> compat_xxx works. :-)
I don't think this would be terribly useful. If the user sets COMPAT_APM
in his kernel config, then he really wants APM compatibility and doesn't
want to be warned about it's use. If he doesn't set COMPAT_APM, any
access to /dev/apm would fail so a console warning sounds redundant. :-)
-- Jachym