Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F173150465
D59941.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
13 KB
Referenced Files
None
Subscribers
None
D59941.diff
View Options
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -51,6 +51,9 @@
# xargs -n1 | sort | uniq -d;
# done
+# 2026xxxx: apm(8) only displays ACPI status
+OLD_FILES+=etc/rc.d/apm
+
# 2026xxxx: apm(4) not i386-specific
OLD_FILES+=usr/share/man/man4/i386/apm.4.gz
diff --git a/libexec/rc/rc.d/Makefile b/libexec/rc/rc.d/Makefile
--- a/libexec/rc/rc.d/Makefile
+++ b/libexec/rc/rc.d/Makefile
@@ -97,12 +97,6 @@
ACPI= power_profile
.endif
-.if ${MACHINE} == "i386"
-CONFGROUPS.${MK_APM}+= APM
-APMPACKAGE= apm
-APM= apm
-.endif
-
CONFGROUPS.${MK_AUDIT}+= AUDIT
AUDITPACKAGE= audit
AUDIT= auditd \
diff --git a/libexec/rc/rc.d/apm b/libexec/rc/rc.d/apm
deleted file mode 100755
--- a/libexec/rc/rc.d/apm
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/sh
-#
-#
-
-# PROVIDE: apm
-# REQUIRE: DAEMON
-# BEFORE: LOGIN
-# KEYWORD: nojail
-
-. /etc/rc.subr
-
-name="apm"
-desc="Advanced power management"
-rcvar="apm_enable"
-start_precmd="apm_precmd"
-command="/usr/sbin/${name}"
-start_cmd="${command} -e enable"
-stop_cmd="${command} -e disable"
-status_cmd="apm_status"
-
-apm_precmd()
-{
- case `${SYSCTL_N} hw.machine_arch` in
- i386)
- return 0
- ;;
- esac
- return 1
-}
-
-apm_status()
-{
- case `${command} -s` in
- 1)
- echo "APM is enabled."
- return 0
- ;;
- 0)
- echo "APM is disabled"
- ;;
- esac
- return 1
-}
-
-load_rc_config $name
-
-# doesn't make sense to run in a svcj: nojail keyword
-apm_svcj="NO"
-
-run_rc_command "$1"
diff --git a/share/man/man5/rc.conf.5 b/share/man/man5/rc.conf.5
--- a/share/man/man5/rc.conf.5
+++ b/share/man/man5/rc.conf.5
@@ -293,14 +293,6 @@
See
.Sx SERVICE JAILS
for a list of valid properties.
-.It Va apm_enable
-.Pq Vt bool
-If set to
-.Dq Li YES ,
-enable support for Automatic Power Management with
-the
-.Xr apm 8
-command.
.It Va devd_enable
.Pq Vt bool
Run
@@ -5170,7 +5162,6 @@
.Xr security 7 ,
.Xr tuning 7 ,
.Xr accton 8 ,
-.Xr apm 8 ,
.Xr bsdinstall 8 ,
.Xr bthidd 8 ,
.Xr chkprintcap 8 ,
diff --git a/tools/build/mk/OptionalObsoleteFiles.inc b/tools/build/mk/OptionalObsoleteFiles.inc
--- a/tools/build/mk/OptionalObsoleteFiles.inc
+++ b/tools/build/mk/OptionalObsoleteFiles.inc
@@ -60,10 +60,8 @@
.endif
.if ${MK_APM} == no
-OLD_FILES+=etc/rc.d/apm
OLD_FILES+=usr/sbin/apm
-.elif ${TARGET_ARCH} != "i386"
-OLD_FILES+=etc/rc.d/apm
+OLD_FILES+=usr/share/man/man8/apm.8.gz
.endif
.if ${MK_AT} == no
diff --git a/usr.sbin/apm/apm.8 b/usr.sbin/apm/apm.8
--- a/usr.sbin/apm/apm.8
+++ b/usr.sbin/apm/apm.8
@@ -17,17 +17,13 @@
.Nd control the APM BIOS and display its information
.Sh SYNOPSIS
.Nm
-.Op Fl ablstzZ
-.Op Fl d Ar enable
-.Op Fl e Ar enable
-.Op Fl h Ar enable
-.Op Fl r Ar delta
+.Op Fl abltzZ
.Sh DESCRIPTION
The
.Nm
-utility
-controls the Intel / Microsoft APM (Advanced Power Management) BIOS and
-displays the current status of APM on laptop PCs.
+utility originally controlled the Advanced Power Management (APM) BIOS
+extension on i386.
+Now it manages the status of ACPI power management.
.Pp
The options are as follows:
.Bl -tag -width indent
@@ -52,49 +48,10 @@
status,
.Dq charging
status respectively.
-.It Fl d Ar enable
-Disable/enable suspending of the display separately from a normal suspend
-using the boolean value for
-.Ar enable .
-This feature seems to not work on many different laptops,
-including the Libretto 30CT and 50CT.
-.It Fl e Ar enable
-Enable or disable APM functions of the computer,
-depending on the boolean
-.Ar enable
-argument.
-.It Fl h Ar enable
-Depending on the boolean value of
-.Ar enable ,
-enable or disable the HLT instruction in the kernel context switch routine.
-These options are not necessary for almost all APM implementations,
-but for some implementations whose
-.Dq Pa Idle CPU
-call executes both CPU clock slowdown and HLT instruction,
-.Fl h Cm false
-is necessary to prevent the system from reducing its peak performance.
-See
-.Xr apm 4
-for details.
.It Fl l
Display the remaining battery percentage.
If your laptop does not
support this function, 255 is displayed.
-.It Fl r Ar delta
-Enable the resume wakeup timer, if the laptop supports it.
-This
-does not actually suspend the laptop, but if the laptop is suspended,
-and it supports resume from suspend, then it will be resumed after
-.Ar delta
-seconds (from when you run this command, not from when you suspend).
-.It Fl s
-Display the status of the APM support as an integer value.
-The values
-0 and 1 correspond to the
-.Dq disabled
-state or
-.Dq enabled
-state respectively.
.It Fl t
Display the estimated remaining battery lifetime in seconds.
If
@@ -103,12 +60,6 @@
Transition the system into standby mode.
This mode uses less power than
full power mode, but more than suspend mode.
-Some laptops support
-resuming from this state on timer or Ring Indicator events.
-The
-output of
-.Nm
-tells what your laptop claims to support.
.It Fl z
Suspend the system.
.El
@@ -123,20 +74,3 @@
.Xr zzz 8
.Sh AUTHORS
.An Tatsumi Hosokawa Aq Mt hosokawa@jp.FreeBSD.org
-.Sh BUGS
-Some APM implementations do not support parameters needed by
-.Nm .
-On such systems,
-.Nm
-displays them as unknown.
-.Pp
-Some APM implementations cannot handle events such as pushing the
-power button or closing the cover.
-On such implementations, the system
-.Ar must
-be suspended
-.Ar only
-by using
-.Nm
-or
-.Nm zzz .
diff --git a/usr.sbin/apm/apm.c b/usr.sbin/apm/apm.c
--- a/usr.sbin/apm/apm.c
+++ b/usr.sbin/apm/apm.c
@@ -13,103 +13,29 @@
* Sep., 1994 Implemented on FreeBSD 1.1.5.1R (Toshiba AVS001WD)
*/
-#include <sys/cdefs.h>
-#include <sys/file.h>
#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/sysctl.h>
#include <machine/apm_bios.h>
#include <err.h>
+#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <time.h>
#include <unistd.h>
#define APMDEV "/dev/apm"
#define APM_UNKNOWN 255
-#define xh(a) (((a) & 0xff00) >> 8)
-#define xl(a) ((a) & 0xff)
-#define APMERR(a) xh(a)
-
-static int cmos_wall = 0; /* True when wall time is in cmos clock, else UTC */
-
static void
usage(void)
{
fprintf(stderr,
- "usage: apm [-ablstzZ] [-d enable ] [ -e enable ] "
- "[ -h enable ] [-r delta]\n");
+ "usage: apm [-abltzZ]\n");
exit(1);
}
-/*
- * Return 1 for boolean true, and 0 for false, according to the
- * interpretation of the string argument given.
- */
-static int
-is_true(const char *boolean)
-{
- char *endp;
- long val;
-
- val = strtoul(boolean, &endp, 0);
- if (*endp == '\0')
- return (val != 0 ? 1 : 0);
- if (strcasecmp(boolean, "true") == 0 ||
- strcasecmp(boolean, "yes") == 0 ||
- strcasecmp(boolean, "enable") == 0)
- return (1);
- if (strcasecmp(boolean, "false") == 0 ||
- strcasecmp(boolean, "no") == 0 ||
- strcasecmp(boolean, "disable") == 0)
- return (0);
- /* Well, I have no idea what the user wants, so... */
- warnx("invalid boolean argument \"%s\"", boolean);
- usage();
- /* NOTREACHED */
-
- return (0);
-}
-
-static int
-int2bcd(int i)
-{
- int retval = 0;
- int base = 0;
-
- if (i >= 10000)
- return -1;
-
- while (i) {
- retval |= (i % 10) << base;
- i /= 10;
- base += 4;
- }
- return retval;
-}
-
-static int
-bcd2int(int bcd)
-{
- int retval = 0;
- int place = 1;
-
- if (bcd > 0x9999)
- return -1;
-
- while (bcd) {
- retval += (bcd & 0xf) * place;
- bcd >>= 4;
- place *= 10;
- }
- return retval;
-}
-
static void
apm_suspend(int fd)
{
@@ -131,18 +57,6 @@
err(1, "ioctl(APMIO_GETINFO)");
}
-static void
-apm_enable(int fd, int enable)
-{
- if (enable) {
- if (ioctl(fd, APMIO_ENABLE) == -1)
- err(1, "ioctl(APMIO_ENABLE)");
- } else {
- if (ioctl(fd, APMIO_DISABLE) == -1)
- err(1, "ioctl(APMIO_DISABLE)");
- }
-}
-
static void
print_batt_time(int batt_time)
{
@@ -188,10 +102,8 @@
}
static void
-print_all_info(int fd, apm_info_t aip, int bioscall_available)
+print_all_info(int fd, apm_info_t aip)
{
- struct apm_bios_arg args;
- int apmerr;
const char *line_msg[] = { "off-line", "on-line" , "backup power"};
printf("APM version: %d.%d\n", aip->ai_major, aip->ai_minor);
@@ -237,69 +149,6 @@
}
}
- if (bioscall_available) {
- /*
- * try to get the suspend timer
- */
- bzero(&args, sizeof(args));
- args.eax = (APM_BIOS) << 8 | APM_RESUMETIMER;
- args.ebx = PMDV_APMBIOS;
- args.ecx = 0x0001;
- if (ioctl(fd, APMIO_BIOS, &args)) {
- printf("Resume timer: unknown\n");
- } else {
- apmerr = APMERR(args.eax);
- if (apmerr == 0x0d || apmerr == 0x86)
- printf("Resume timer: disabled\n");
- else if (apmerr)
- warnx(
- "failed to get the resume timer: APM error0x%x", apmerr);
- else {
- /*
- * OK. We have the time (all bcd).
- * CH - seconds
- * DH - hours
- * DL - minutes
- * xh(SI) - month (1-12)
- * xl(SI) - day of month (1-31)
- * DI - year
- */
- struct tm tm;
- char buf[1024];
- time_t t;
-
- tm.tm_sec = bcd2int(xh(args.ecx));
- tm.tm_min = bcd2int(xl(args.edx));
- tm.tm_hour = bcd2int(xh(args.edx));
- tm.tm_mday = bcd2int(xl(args.esi));
- tm.tm_mon = bcd2int(xh(args.esi)) - 1;
- tm.tm_year = bcd2int(args.edi) - 1900;
- if (cmos_wall)
- t = mktime(&tm);
- else
- t = timegm(&tm);
- if (t != -1) {
- tm = *localtime(&t);
- strftime(buf, sizeof(buf), "%c", &tm);
- printf("Resume timer: %s\n", buf);
- } else
- printf("Resume timer: unknown\n");
- }
- }
-
- /*
- * Get the ring indicator resume state
- */
- bzero(&args, sizeof(args));
- args.eax = (APM_BIOS) << 8 | APM_RESUMEONRING;
- args.ebx = PMDV_APMBIOS;
- args.ecx = 0x0002;
- if (ioctl(fd, APMIO_BIOS, &args) == 0) {
- printf("Resume on ring indicator: %sabled\n",
- args.ecx ? "en" : "dis");
- }
- }
-
if (aip->ai_infoversion >= 1) {
if (aip->ai_capabilities == 0xff00)
return;
@@ -324,72 +173,15 @@
}
-/*
- * currently, it can turn off the display, but the display never comes
- * back until the machine suspend/resumes :-).
- */
-static void
-apm_display(int fd, int newstate)
-{
- if (ioctl(fd, APMIO_DISPLAY, &newstate) == -1)
- err(1, "ioctl(APMIO_DISPLAY)");
-}
-
-static void
-apm_haltcpu(int fd, int enable)
-{
- if (enable) {
- if (ioctl(fd, APMIO_HALTCPU, NULL) == -1)
- err(1, "ioctl(APMIO_HALTCPU)");
- } else {
- if (ioctl(fd, APMIO_NOTHALTCPU, NULL) == -1)
- err(1, "ioctl(APMIO_NOTHALTCPU)");
- }
-}
-
-static void
-apm_set_timer(int fd, int delta)
-{
- time_t tmr;
- struct tm *tm;
- struct apm_bios_arg args;
-
- tmr = time(NULL) + delta;
- if (cmos_wall)
- tm = localtime(&tmr);
- else
- tm = gmtime(&tmr);
- bzero(&args, sizeof(args));
- args.eax = (APM_BIOS) << 8 | APM_RESUMETIMER;
- args.ebx = PMDV_APMBIOS;
- if (delta > 0) {
- args.ecx = (int2bcd(tm->tm_sec) << 8) | 0x02;
- args.edx = (int2bcd(tm->tm_hour) << 8) | int2bcd(tm->tm_min);
- args.esi = (int2bcd(tm->tm_mon + 1) << 8) | int2bcd(tm->tm_mday);
- args.edi = int2bcd(tm->tm_year + 1900);
- } else {
- args.ecx = 0x0000;
- }
- if (ioctl(fd, APMIO_BIOS, &args)) {
- err(1,"set resume timer");
- }
-}
-
int
main(int argc, char *argv[])
{
int c, fd;
- int dosleep = 0, all_info = 1, apm_status = 0, batt_status = 0;
- int display = -1, batt_life = 0, ac_status = 0, standby = 0;
- int batt_time = 0, delta = 0, enable = -1, haltcpu = -1;
- int bioscall_available = 0;
- size_t cmos_wall_len = sizeof(cmos_wall);
+ int dosleep = 0, all_info = 1, batt_status = 0;
+ int batt_life = 0, ac_status = 0, standby = 0;
+ int batt_time = 0;
- if (sysctlbyname("machdep.wall_cmos_clock", &cmos_wall, &cmos_wall_len,
- NULL, 0) == -1)
- err(1, "sysctlbyname(machdep.wall_cmos_clock)");
-
- while ((c = getopt(argc, argv, "abe:h:lRr:stzd:Z")) != -1) {
+ while ((c = getopt(argc, argv, "abltzZ")) != -1) {
switch (c) {
case 'a':
ac_status = 1;
@@ -399,32 +191,10 @@
batt_status = 1;
all_info = 0;
break;
- case 'd':
- display = is_true(optarg);
- all_info = 0;
- break;
case 'l':
batt_life = 1;
all_info = 0;
break;
- case 'R':
- delta = -1;
- break;
- case 'r':
- delta = atoi(optarg);
- break;
- case 's':
- apm_status = 1;
- all_info = 0;
- break;
- case 'e':
- enable = is_true(optarg);
- all_info = 0;
- break;
- case 'h':
- haltcpu = is_true(optarg);
- all_info = 0;
- break;
case 't':
batt_time = 1;
all_info = 0;
@@ -444,44 +214,30 @@
argc -= optind;
argv += optind;
}
- if (haltcpu != -1 || enable != -1 || display != -1 || delta || dosleep
- || standby) {
+ if (dosleep || standby)
fd = open(APMDEV, O_RDWR);
- bioscall_available = 1;
- } else if ((fd = open(APMDEV, O_RDWR)) >= 0)
- bioscall_available = 1;
else
fd = open(APMDEV, O_RDONLY);
if (fd == -1)
err(1, "can't open %s", APMDEV);
- if (enable != -1)
- apm_enable(fd, enable);
- if (haltcpu != -1)
- apm_haltcpu(fd, haltcpu);
- if (delta)
- apm_set_timer(fd, delta);
if (dosleep)
apm_suspend(fd);
else if (standby)
apm_standby(fd);
- else if (delta == 0) {
+ else {
struct apm_info info;
apm_getinfo(fd, &info);
if (all_info)
- print_all_info(fd, &info, bioscall_available);
+ print_all_info(fd, &info);
if (ac_status)
printf("%d\n", info.ai_acline);
if (batt_status)
printf("%d\n", info.ai_batt_stat);
if (batt_life)
printf("%d\n", info.ai_batt_life);
- if (apm_status)
- printf("%d\n", info.ai_status);
if (batt_time)
printf("%d\n", info.ai_batt_time);
- if (display != -1)
- apm_display(fd, display);
}
close(fd);
exit(0);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Sep 24, 11:04 PM (6 h, 11 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
39557125
Default Alt Text
D59941.diff (13 KB)
Attached To
Mode
D59941: apm(8): Remove support for APM BIOS
Attached
Detach File
Event Timeline
Log In to Comment