diff options
author | mia soweli <inbox@tachibana-labs.org> | 2023-05-18 20:13:14 +0000 |
---|---|---|
committer | Sigrid Solveig Haflínudóttir <sigrid@ftrv.se> | 2023-05-18 20:13:14 +0000 |
commit | 93837692bbaab28e01ea1178d8867047bbcad11d (patch) | |
tree | e2dc7f78bb406fac21226106c3f3c86ce556e231 /sys/src | |
parent | 0883ed0a61c38898ad926ea67eb0e9386dff4ecd (diff) |
libaml: tow eisaid inside the environment
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/9/pc/archacpi.c | 24 | ||||
-rw-r--r-- | sys/src/cmd/aux/acpi.c | 24 | ||||
-rw-r--r-- | sys/src/libaml/aml.c | 35 |
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; +} |