From cf166c38502cdde9ca2ab5de3c4dad70b58328c2 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sat, 7 Sep 2013 14:40:24 +0200 Subject: libaml: amldelay(), _OSI(), fix bug in Load() (from plhk's acpi patch) export amldelay() for microsecond sleeps. implement _OSI() method. fix rwreg argument in evalload() --- sys/src/libaml/aml.c | 43 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) (limited to 'sys/src/libaml/aml.c') diff --git a/sys/src/libaml/aml.c b/sys/src/libaml/aml.c index 7487ab9c5..0de0297a9 100644 --- a/sys/src/libaml/aml.c +++ b/sys/src/libaml/aml.c @@ -1788,7 +1788,7 @@ evalload(void) if(FP->arg[0] == nil) return nil; - l = rwreg(FP->arg[0], LenOffset, 32, 0, 0); + l = rwreg(FP->arg[0], LenOffset, 4, 0, 0); if(l <= HdrLen) return nil; @@ -1819,6 +1819,20 @@ evalload(void) return tid; } +static void* +evalstall(void) +{ + amldelay(ival(FP->arg[0])); + return nil; +} + +static void* +evalsleep(void) +{ + amldelay(ival(FP->arg[0])*1000); + return nil; +} + static Op optab[] = { [Obad] "", "", evalbad, [Onop] "Noop", "", evalnop, @@ -1906,8 +1920,8 @@ static Op optab[] = { [Oacq] "Acquire", "@2", evalnop, [Orel] "Release", "@", evalnop, - [Ostall] "Stall", "i", evalnop, - [Osleep] "Sleep", "i", evalnop, + [Ostall] "Stall", "i", evalstall, + [Osleep] "Sleep", "i", evalsleep, [Oload] "Load", "*@}", evalload, [Ounload] "Unload", "@", evalnop, }; @@ -2036,6 +2050,27 @@ amlnew(char tag, int len) } } +static void* +evalosi(void) +{ + static char *w[] = { + "Windows 2001", + "Windows 2001 SP1", + "Windows 2001 SP2", + "Windows 2006", + }; + char *s; + int i; + + s = deref(FP->arg[0]); + if(s == nil || TAG(s) != 's') + return nil; + for(i = 0; i < nelem(w); i++) + if(strcmp(s, w[i]) == 0) + return mki(0xFFFFFFFF); + return nil; +} + void amlinit(void) { @@ -2065,7 +2100,7 @@ amlinit(void) m = mk('m', sizeof(Method)); m->narg = 1; - m->eval = evalnop; + m->eval = evalosi; m->name = n; n->v = m; } -- cgit v1.2.3