Module Name: src Committed By: jmcneill Date: Wed Aug 26 13:28:48 UTC 2009
Modified Files: src/sys/arch/i386/stand/lib: pcio.c Log Message: int 15h/AH=86h (WAIT) doesn't work properly on all hardware and emulators, so for the countdown use the more coarsely grained sleep implementation based on int 1ah/AH=00h (GET SYSTEM TIME). ok ad@ To generate a diff of this commit: cvs rdiff -u -r1.26 -r1.27 src/sys/arch/i386/stand/lib/pcio.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/i386/stand/lib/pcio.c diff -u src/sys/arch/i386/stand/lib/pcio.c:1.26 src/sys/arch/i386/stand/lib/pcio.c:1.27 --- src/sys/arch/i386/stand/lib/pcio.c:1.26 Mon Jun 29 09:23:16 2009 +++ src/sys/arch/i386/stand/lib/pcio.c Wed Aug 26 13:28:48 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: pcio.c,v 1.26 2009/06/29 09:23:16 mbalmer Exp $ */ +/* $NetBSD: pcio.c,v 1.27 2009/08/26 13:28:48 jmcneill Exp $ */ /* * Copyright (c) 1996, 1997 @@ -71,6 +71,20 @@ #define POLL_FREQ 10 +static void +wait(int us) +{ + int prev = biosgetsystime(); + int tgt = prev + (20 * us) / 1000000; + int new; + + while ((new = biosgetsystime()) < tgt) { + if (new < prev) /* XXX timer wrapped */ + break; + prev = new; + } +} + #ifdef SUPPORT_SERIAL static int getcomaddr(int idx) @@ -346,7 +360,7 @@ goto out; } if (i--) - delay(1000000 / POLL_FREQ); + wait(1000000 / POLL_FREQ); else break; }