Re: APM woes

Jeanette Pauline Middelink (middelin@polyware.nl)
Mon, 6 Apr 1998 20:57:39 +0200


--vkogqOf2sHV7VnPd
Content-Type: text/plain; charset=us-ascii

On Sun, Apr 05, 1998 at 02:14:38PM +0200, Jeanette Pauline Middelink wrote:
> Hi,
>
> During the last kernels (91+) APM seems to be broken.

Just to follow up on my own msgs... It seems gcc-2.8.1 and
the famous _asm_ case again :(

Attached a patch for apm_bios.c.

BTW: It does _not_ fix the <Function-S> suspend functionality,
somehow, the event doesn't make it to the BIOS, but the
disktimeouts and screenbacklite savings work again!

Met vriendelijke groet,
Pauline Middelink

-- 
PGP Key fingerprint = DE 6B D0 D9 19 AD A7 A0  58 A3 06 9D B6 34 39 E2
For more details look at my website http://www.polyware.nl/~middelin

--vkogqOf2sHV7VnPd Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="apm_bios.c.diff"

--- apm_bios.c.orig Sun Apr 5 11:30:37 1998 +++ apm_bios.c Mon Apr 6 20:49:53 1998 @@ -254,74 +254,77 @@ "setc %%" # error_reg "\n\t" \ "popfl\n\t" \ APM_DO_RESTORE_SEGS -#define APM_BIOS_CALL_END \ - : "ax", "bx", "cx", "dx", "si", "di", "bp", "memory") #ifdef CONFIG_APM_CPU_IDLE #define APM_SET_CPU_IDLE(error) \ APM_BIOS_CALL(al) \ : "=a" (error) \ - : "a" (0x5305) \ - APM_BIOS_CALL_END + : "0" (0x5305) \ + : "bx", "cx", "dx", "si", "di", "bp", "memory") #endif #define APM_SET_CPU_BUSY(error) \ APM_BIOS_CALL(al) \ : "=a" (error) \ - : "a" (0x5306) \ - APM_BIOS_CALL_END + : "0" (0x5306) \ + : "bx", "cx", "dx", "si", "di", "bp", "memory") #define APM_SET_POWER_STATE(state, error) \ + { int dummy_b,dummy_c; \ APM_BIOS_CALL(al) \ - : "=a" (error) \ - : "a" (0x5307), "b" (0x0001), "c" (state) \ - APM_BIOS_CALL_END + : "=a" (error), "=&b" (dummy_b), "=&c" (dummy_c) \ + : "0" (0x5307), "1" (0x0001), "2" (state) \ + : "dx", "si", "di", "bp", "memory"); } #ifdef CONFIG_APM_DISPLAY_BLANK #define APM_SET_DISPLAY_POWER_STATE(state, error) \ + { int dummy_b,dummy_c; \ APM_BIOS_CALL(al) \ - : "=a" (error) \ - : "a" (0x5307), "b" (0x01ff), "c" (state) \ - APM_BIOS_CALL_END + : "=a" (error), "=&b" (dummy_b), "=&c" (dummy_c) \ + : "0" (0x5307), "1" (0x01ff), "2" (state) \ + : "dx", "si", "di", "bp", "memory"); } #endif #ifdef CONFIG_APM_DO_ENABLE #define APM_ENABLE_POWER_MANAGEMENT(device, error) \ + { int dummy_b, dummy_c; \ APM_BIOS_CALL(al) \ - : "=a" (error) \ - : "a" (0x5308), "b" (device), "c" (1) \ - APM_BIOS_CALL_END + : "=a" (error), "=&b" (dummy_b), "=&c" (dummy_c) \ + : "0" (0x5308), "1" (device), "2" (1) \ + : "dx", "si", "di", "bp", "memory"); } #endif #define APM_GET_POWER_STATUS(bx, cx, dx, error) \ APM_BIOS_CALL(al) \ : "=a" (error), "=b" (bx), "=c" (cx), "=d" (dx) \ - : "a" (0x530a), "b" (1) \ - APM_BIOS_CALL_END + : "0" (0x530a), "1" (1) \ + : "si", "di", "bp", "memory"); #define APM_GET_BATTERY_STATUS(which, bx, cx, dx, si, error) \ APM_BIOS_CALL(al) \ : "=a" (error), "=b" (bx), "=c" (cx), "=d" (dx), "=S" (si) \ - : "a" (0x530a), "b" (0x8000 | (which)) \ - APM_BIOS_CALL_END + : "0" (0x530a), "1" (0x8000 | (which)) \ + : "di", "bp", "memory"); #define APM_GET_EVENT(event, info, error) \ APM_BIOS_CALL(al) \ : "=a" (error), "=b" (event), "=c" (info) \ - : "a" (0x530b) \ - APM_BIOS_CALL_END + : "0" (0x530b) \ + : "dx", "si", "di", "bp", "memory") #define APM_DRIVER_VERSION(ver, ax, error) \ + { int dummy_c; \ APM_BIOS_CALL(bl) \ - : "=a" (ax), "=b" (error) \ - : "a" (0x530e), "b" (0), "c" (ver) \ - APM_BIOS_CALL_END + : "=a" (ax), "=b" (error), "=&c" (dummy_c) \ + : "0" (0x530e), "1" (0), "2" (ver) \ + : "dx", "si", "di", "bp", "memory"); } #define APM_ENGAGE_POWER_MANAGEMENT(device, error) \ + { int dummy_b,dummy_c; \ APM_BIOS_CALL(al) \ - : "=a" (error) \ - : "a" (0x530f), "b" (device), "c" (1) \ - APM_BIOS_CALL_END + : "=a" (error), "=&b" (dummy_b), "=&c" (dummy_c) \ + : "0" (0x530f), "1" (device), "2" (1) \ + : "dx", "si", "di", "bp", "memory"); } /* * Forward declarations

--vkogqOf2sHV7VnPd--

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu