summaryrefslogtreecommitdiff
path: root/sys/src
diff options
context:
space:
mode:
authormia soweli <inbox@tachibana-labs.org>2023-05-18 20:13:14 +0000
committerSigrid Solveig Haflínudóttir <sigrid@ftrv.se>2023-05-18 20:13:14 +0000
commit93837692bbaab28e01ea1178d8867047bbcad11d (patch)
treee2dc7f78bb406fac21226106c3f3c86ce556e231 /sys/src
parent0883ed0a61c38898ad926ea67eb0e9386dff4ecd (diff)
libaml: tow eisaid inside the environment
Diffstat (limited to 'sys/src')
-rw-r--r--sys/src/9/pc/archacpi.c24
-rw-r--r--sys/src/cmd/aux/acpi.c24
-rw-r--r--sys/src/libaml/aml.c35
3 files changed, 40 insertions, 43 deletions
diff --git a/sys/src/9/pc/archacpi.c b/sys/src/9/pc/archacpi.c
index f1b675a43..c6b0b8180 100644
--- a/sys/src/9/pc/archacpi.c
+++ b/sys/src/9/pc/archacpi.c
@@ -274,26 +274,6 @@ Foundbus:
bus->aintr = ai;
}
-static char*
-eisaid(void *v)
-{
- static char id[8];
- ulong b, l;
- int i;
-
- if(amltag(v) == 's')
- return v;
- b = amlint(v);
- for(l = 0, i=24; i>=0; i -= 8, b >>= 8)
- l |= (b & 0xFF) << i;
- id[7] = 0;
- for(i=6; i>=3; i--, l >>= 4)
- id[i] = "0123456789ABCDEF"[l & 0xF];
- for(i=2; i>=0; i--, l >>= 5)
- id[i] = '@' + (l & 0x1F);
- return id;
-}
-
static int
pcibusno(void *dot)
{
@@ -305,7 +285,7 @@ pcibusno(void *dot)
id = nil;
if((x = amlwalk(dot, "^_HID")) != nil)
if((p = amlval(x)) != nil)
- id = eisaid(p);
+ id = amleisaid(p);
if((x = amlwalk(dot, "^_BBN")) == nil)
if((x = amlwalk(dot, "^_ADR")) == nil)
return -1;
@@ -515,7 +495,7 @@ enumec(void *dot, void *)
char *id;
b = nil;
- id = eisaid(amlval(amlwalk(dot, "^_HID")));
+ id = amleisaid(amlval(amlwalk(dot, "^_HID")));
if(id == nil || strcmp(id, "PNP0C09") != 0)
return 1;
if((x = amlwalk(dot, "^_CRS")) == nil)
diff --git a/sys/src/cmd/aux/acpi.c b/sys/src/cmd/aux/acpi.c
index dc362cfc6..697572949 100644
--- a/sys/src/cmd/aux/acpi.c
+++ b/sys/src/cmd/aux/acpi.c
@@ -63,32 +63,14 @@ static char *uid = "pm", *units[] = {"mW", "mA"};
static Therm therms[16];
static Bat bats[4];
-static char*
-eisaid(void *v)
-{
- static char id[8];
- ulong b, l;
- int i;
-
- if(amltag(v) == 's')
- return v;
- b = amlint(v);
- for(l = 0, i = 24; i >= 0; i -= 8, b >>= 8)
- l |= (b & 0xFF) << i;
- id[7] = 0;
- for(i = 6; i >= 3; i--, l >>= 4)
- id[i] = "0123456789ABCDEF"[l & 0xF];
- for(i = 2; i >= 0; i--, l >>= 5)
- id[i] = '@' + (l & 0x1F);
- return id;
-}
-
static int
enumec(void *dot, void *)
{
void *p;
char *id;
- id = eisaid(amlval(amlwalk(dot, "^_HID")));
+
+ p = amlval(amlwalk(dot, "^_HID"));
+ id = amleisaid(p);
if(id == nil || strcmp(id, "PNP0C09") != 0)
return 1;
p = amlwalk(dot, "^_REG");
diff --git a/sys/src/libaml/aml.c b/sys/src/libaml/aml.c
index 57a0f8e2c..06d9b2a6d 100644
--- a/sys/src/libaml/aml.c
+++ b/sys/src/libaml/aml.c
@@ -2463,3 +2463,38 @@ amldrop(void *p)
if(p != nil)
D2H(p)->mark &= ~2;
}
+
+char*
+amleisaid(void *v)
+{
+ int i;
+ ulong l, m, n;
+ static char s[8];
+
+ if(amltag(v) == 's')
+ return v;
+
+ if(amltag(v) == 'i') {
+ m = 0;
+ l = amlint(v);
+ for(i = 24; i >= 0; i -= 8) {
+ m |= (l & 0xff) << i;
+ l >>= 8;
+ }
+
+ s[7] = 0;
+ for(i = 6; i >= 3; i--) {
+ n = m & 0xf;
+ s[i] = "0123456789ABCDEF"[n]; m >>= 4;
+ }
+
+ for(i = 2; i >= 0; i--) {
+ n = m & 0x1f;
+ s[i] = '@' + n; m >>= 5;
+ }
+
+ return s;
+ }
+
+ return nil;
+}