summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoriwasaki <iwasaki@FreeBSD.org>2000-10-02 08:58:50 +0000
committeriwasaki <iwasaki@FreeBSD.org>2000-10-02 08:58:50 +0000
commitcbe743540c12fba549b329ef283b665da0f57a90 (patch)
tree869a94a142125aa1f9ffbecc79d9b5ced1889ee1
parent4f4f698466ba9217372a68e49178f68c9419491e (diff)
downloadFreeBSD-src-cbe743540c12fba549b329ef283b665da0f57a90.zip
FreeBSD-src-cbe743540c12fba549b329ef283b665da0f57a90.tar.gz
Fix StallOp implementaion. I've noticed that StallOp corresponds to
OsdSleepUsec(), SleepOp corresponds to OsdSleep() by reading ACPICA source code. - Add OsdSleepUsec() which uses DELAY() simply. - Change unit of acpi_sleep() argument; microseconds to milliseconds.
-rw-r--r--sys/dev/acpi/acpi.c6
-rw-r--r--sys/dev/acpi/acpivar.h2
-rw-r--r--sys/dev/acpi/aml/aml_common.h2
-rw-r--r--sys/dev/acpi/aml/aml_parse.c1
-rw-r--r--sys/i386/include/acpica_osd.h14
-rw-r--r--usr.sbin/acpi/amldb/aml/aml_common.h2
-rw-r--r--usr.sbin/acpi/amldb/aml/aml_parse.c1
7 files changed, 16 insertions, 12 deletions
diff --git a/sys/dev/acpi/acpi.c b/sys/dev/acpi/acpi.c
index 994b320..63d4a1f 100644
--- a/sys/dev/acpi/acpi.c
+++ b/sys/dev/acpi/acpi.c
@@ -973,7 +973,7 @@ acpi_attach_resource(acpi_softc_t *sc, int type, int *wantidx, u_long start, u_l
#include <sys/proc.h>
int
-acpi_sleep(u_int32_t micro)
+acpi_sleep(u_int32_t milli)
{
static u_int8_t count = 0;
int x, error;
@@ -981,7 +981,7 @@ acpi_sleep(u_int32_t micro)
x = error = 0;
- if (micro == 0) {
+ if (milli == 0) {
return (1);
}
@@ -989,7 +989,7 @@ acpi_sleep(u_int32_t micro)
return (2);
}
- timo = ((hz * micro) / 1000000L) ? ((hz * micro) / 1000000L) : 1;
+ timo = ((hz * milli) / 1000) ? ((hz * milli) / 1000) : 1;
error = tsleep((caddr_t)acpi_sleep + count, PWAIT, "acpislp", timo);
if (error != 0 && error != EWOULDBLOCK) {
return (2);
diff --git a/sys/dev/acpi/acpivar.h b/sys/dev/acpi/acpivar.h
index 011a6b1..5726b3d 100644
--- a/sys/dev/acpi/acpivar.h
+++ b/sys/dev/acpi/acpivar.h
@@ -249,5 +249,5 @@ extern int acpi_debug;
/*
* System service interface
*/
-extern int acpi_sleep(u_int32_t micro);
+extern int acpi_sleep(u_int32_t milli);
diff --git a/sys/dev/acpi/aml/aml_common.h b/sys/dev/acpi/aml/aml_common.h
index 827c324..00f1116 100644
--- a/sys/dev/acpi/aml/aml_common.h
+++ b/sys/dev/acpi/aml/aml_common.h
@@ -47,7 +47,7 @@
printf(fmt, args); \
} while(0)
#define AML_DEBUGGER(x, y) /* no debugger in kernel */
-#define AML_STALL(micro) DELAY(micro)
+#define AML_STALL(micro) OsdSleepUsec(micro)
#define AML_SLEEP(sec, milli) OsdSleep(sec, milli)
#else /* !_KERNEL */
#define AML_SYSASSERT(x) assert(x)
diff --git a/sys/dev/acpi/aml/aml_parse.c b/sys/dev/acpi/aml/aml_parse.c
index ce40e64..dc6f46b 100644
--- a/sys/dev/acpi/aml/aml_parse.c
+++ b/sys/dev/acpi/aml/aml_parse.c
@@ -57,7 +57,6 @@
#include <sys/systm.h>
#include <sys/bus.h>
#include <machine/bus.h>
-#include <machine/clock.h>
#include <dev/acpi/acpireg.h>
#include <dev/acpi/acpivar.h>
#ifndef ACPI_NO_OSDFUNC_INLINE
diff --git a/sys/i386/include/acpica_osd.h b/sys/i386/include/acpica_osd.h
index cdb96b5..c0f1bea 100644
--- a/sys/i386/include/acpica_osd.h
+++ b/sys/i386/include/acpica_osd.h
@@ -32,6 +32,7 @@
#include <sys/systm.h>
#include <sys/bus.h>
#include <machine/bus.h>
+#include <machine/clock.h>
#include <machine/acpi_machdep.h>
#include <machine/vmparam.h>
#include <vm/vm.h>
@@ -282,12 +283,12 @@ OsdWritePciCfgDword(UINT32 Bus, UINT32 DeviceFunction, UINT32 Register, UINT32 V
}
_ACPICA_INLINE_ ACPI_STATUS
-OsdSleepUsec(UINT32 Microseconds)
+OsdSleep(UINT32 Seconds, UINT32 Milliseconds)
{
int error;
ACPI_STATUS status;
- error = acpi_sleep(Microseconds);
+ error = acpi_sleep(Seconds * 1000 + Milliseconds);
switch (error) {
case 0:
/* The running thread slept for the time specified */
@@ -308,8 +309,13 @@ OsdSleepUsec(UINT32 Microseconds)
}
_ACPICA_INLINE_ ACPI_STATUS
-OsdSleep(UINT32 Seconds, UINT32 Milliseconds)
+OsdSleepUsec(UINT32 Microseconds)
{
- return OsdSleepUsec(Seconds * 1000000L + Milliseconds * 1000);
+ if (Microseconds == 0) {
+ return (AE_BAD_PARAMETER);
+ }
+
+ DELAY(Microseconds);
+ return (AE_OK);
}
diff --git a/usr.sbin/acpi/amldb/aml/aml_common.h b/usr.sbin/acpi/amldb/aml/aml_common.h
index 827c324..00f1116 100644
--- a/usr.sbin/acpi/amldb/aml/aml_common.h
+++ b/usr.sbin/acpi/amldb/aml/aml_common.h
@@ -47,7 +47,7 @@
printf(fmt, args); \
} while(0)
#define AML_DEBUGGER(x, y) /* no debugger in kernel */
-#define AML_STALL(micro) DELAY(micro)
+#define AML_STALL(micro) OsdSleepUsec(micro)
#define AML_SLEEP(sec, milli) OsdSleep(sec, milli)
#else /* !_KERNEL */
#define AML_SYSASSERT(x) assert(x)
diff --git a/usr.sbin/acpi/amldb/aml/aml_parse.c b/usr.sbin/acpi/amldb/aml/aml_parse.c
index ce40e64..dc6f46b 100644
--- a/usr.sbin/acpi/amldb/aml/aml_parse.c
+++ b/usr.sbin/acpi/amldb/aml/aml_parse.c
@@ -57,7 +57,6 @@
#include <sys/systm.h>
#include <sys/bus.h>
#include <machine/bus.h>
-#include <machine/clock.h>
#include <dev/acpi/acpireg.h>
#include <dev/acpi/acpivar.h>
#ifndef ACPI_NO_OSDFUNC_INLINE
OpenPOWER on IntegriCloud