Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/arch/macppc/dev/pm_direct.c,v rcsdiff: /ftp/cvs/cvsroot/src/sys/arch/macppc/dev/pm_direct.c,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.9.2.1 retrieving revision 1.10 diff -u -p -r1.9.2.1 -r1.10 --- src/sys/arch/macppc/dev/pm_direct.c 2001/04/01 16:59:18 1.9.2.1 +++ src/sys/arch/macppc/dev/pm_direct.c 2001/02/27 07:33:18 1.10 @@ -1,4 +1,4 @@ -/* $NetBSD: pm_direct.c,v 1.9.2.1 2001/04/01 16:59:18 he Exp $ */ +/* $NetBSD: pm_direct.c,v 1.10 2001/02/27 07:33:18 matt Exp $ */ /* * Copyright (C) 1997 Takashi Hamada @@ -831,6 +831,33 @@ pm_intr_pm2() s = splhigh(); + for (;;) { + u_int ifr; + ifr = read_via_reg(VIA1, vIFR); + + if (ifr == 0) + break; + + if (ifr & V1IF_ADBRDY) { + write_via_reg(VIA1, vIFR, V1IF_ADBRDY); + ifr &= ~V1IF_ADBRDY; + delay(120000); /* XXX */ + } else if (ifr & V1IF_ADBCLK) { + write_via_reg(VIA1, vIFR, V1IF_ADBCLK); + ifr &= ~V1IF_ADBCLK; + } + + if (ifr) + write_via_reg(VIA1, vIFR, ifr); + } + +#if 0 + gpio = in8(gpio_reg + 0x9); + if ((gpio & 0x02) != 0) { + splx(s); + return; + } +#endif PM_VIA_CLR_INTR(); /* clear VIA1 interrupt */ /* ask PM what happend */ pmdata.command = 0x78; @@ -979,7 +1006,7 @@ pm_adb_op(buffer, compRout, data, comman int i; int s; int rval; - int timo; + int delay; PMData pmdata; struct adbCommand packet; @@ -1040,15 +1067,13 @@ pm_adb_op(buffer, compRout, data, comman return 1; } - delay(10000); - adbWaiting = 1; adbWaitingCmd = command; PM_VIA_INTR_ENABLE(); /* wait until the PM interrupt is occured */ - timo = 0x80000; + delay = 0x80000; while (adbWaiting == 1) { if (read_via_reg(VIA1, vIFR) & 0x14) pm_intr(); @@ -1059,7 +1084,7 @@ pm_adb_op(buffer, compRout, data, comman (void)intr_dispatch(0x70); #endif #endif - if ((--timo) < 0) { + if ((--delay) < 0) { splx(s); return 1; }