apm problem

M. Warner Losh imp at bsdimp.com
Wed Jun 16 20:24:03 GMT 2004


Here's my revised apm(8) patches.  They fix a few minor nits that I
introduced in the last pass.  I have some similar fixes for the
kernel.

Warner

Index: apm.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/apm/apm.c,v
retrieving revision 1.32
diff -u -r1.32 apm.c
--- apm.c	27 May 2004 19:23:27 -0000	1.32
+++ apm.c	16 Jun 2004 20:22:31 -0000
@@ -34,6 +34,8 @@
 
 #define APMDEV	"/dev/apm"
 
+#define APM_UNKNOWN 0xff		/* Unknown in APM BIOS spec */
+
 #define xh(a)	(((a) & 0xff00) >> 8)
 #define xl(a)	((a) & 0xff)
 #define APMERR(a) xh(a)
@@ -156,7 +158,7 @@
 	printf("APM version: %d.%d\n", aip->ai_major, aip->ai_minor);
 	printf("APM Management: %s\n", aip->ai_status ? "Enabled" : "Disabled");
 	printf("AC Line status: ");
-	if (aip->ai_acline >= 255)
+	if (aip->ai_acline == APM_UNKNOWN)
 		printf("unknown");
 	else if (aip->ai_acline > 1)
 		printf("invalid value (0x%x)", aip->ai_acline);
@@ -164,7 +166,7 @@
 		printf("%s", line_msg[aip->ai_acline]);
 	printf("\n");
 	printf("Battery status: ");
-	if (aip->ai_batt_stat >= 255)
+	if (aip->ai_batt_stat == APM_UNKNOWN)
 		printf("unknown");
 	else if (aip->ai_batt_stat > 3)
 		printf("invalid value (0x%x)", aip->ai_batt_stat);
@@ -172,7 +174,7 @@
 		printf("%s", batt_msg[aip->ai_batt_stat]);
 	printf("\n");
 	printf("Remaining battery life: ");
-	if (aip->ai_batt_life >= 255)
+	if (aip->ai_batt_life == APM_UNKNOWN)
 		printf("unknown\n");
 	else if (aip->ai_batt_life <= 100)
 		printf("%d%%\n", aip->ai_batt_life);
@@ -194,7 +196,7 @@
 	}
 	if (aip->ai_infoversion >= 1) {
 		printf("Number of batteries: ");
-		if (aip->ai_batteries >= 255)
+		if (aip->ai_batteries == (u_int) -1)
 			printf("unknown\n");
 		else {
 			u_int i;
@@ -208,12 +210,11 @@
 					continue;
 				printf("Battery %d:\n", i);
 				printf("\tBattery status: ");
-				if (aps.ap_batt_flag <= 255 &&
-				    (aps.ap_batt_flag & APM_BATT_NOT_PRESENT)) {
+				if (aps.ap_batt_flag & APM_BATT_NOT_PRESENT) {
 					printf("not present\n");
 					continue;
 				}
-				if (aps.ap_batt_stat >= 255)
+				if (aps.ap_batt_stat == APM_UNKNOWN)
 					printf("unknown\n");
 				else if (aps.ap_batt_stat > 3)
 					printf("invalid value (0x%x)\n",
@@ -222,7 +223,7 @@
 					printf("%s\n",
 					       batt_msg[aps.ap_batt_stat]);
 				printf("\tRemaining battery life: ");
-				if (aps.ap_batt_life >= 255)
+				if (aps.ap_batt_life == APM_UNKNOWN)
 					printf("unknown\n");
 				else if (aps.ap_batt_life <= 100)
 					printf("%d%%\n", aps.ap_batt_life);
@@ -310,10 +311,8 @@
 		}
 	}
 
-	if (aip->ai_infoversion >= 1) {
+	if (aip->ai_infoversion >= 1 && aip->ai_capabilities != 0xff00) {
 		printf("APM Capabilities:\n");
-		if (aip->ai_capabilities == 0xff00)
-			printf("\tunknown\n");
 		if (aip->ai_capabilities & 0x01)
 			printf("\tglobal standby state\n");
 		if (aip->ai_capabilities & 0x02)


More information about the freebsd-acpi mailing list