| /* SPDX-License-Identifier: GPL-2.0-only */ |
| |
| /* |
| Scope(\_SB) { |
| #include "globutil.asl" |
| } |
| */ |
| |
| /* string compare functions */ |
| Method(MIN, 2) |
| { |
| if (Arg0 < Arg1) { |
| Return(Arg0) |
| } else { |
| Return(Arg1) |
| } |
| } |
| |
| Method(SLEN, 1) |
| { |
| Local0 = Arg0 |
| Return(Sizeof(Local0)) |
| } |
| |
| Method(S2BF, 1, Serialized) |
| { |
| Local0 = SLEN(Arg0) + 1 |
| Name(BUFF, Buffer(Local0) {}) |
| BUFF = Arg0 |
| Return(BUFF) |
| } |
| |
| /* Strong string compare. Checks both length and content */ |
| Method(SCMP, 2) |
| { |
| Local0 = S2BF(Arg0) |
| Local1 = S2BF(Arg1) |
| Local4 = 0 |
| Local5 = SLEN(Arg0) |
| Local6 = SLEN(Arg1) |
| Local7 = MIN(Local5, Local6) |
| |
| While(Local4 < Local7) { |
| Local2 = Derefof(Local0[Local4]) |
| Local3 = Derefof(Local1[Local4]) |
| if (Local2 > Local3) { |
| Return(1) |
| } else { |
| if (Local2 < Local3) { |
| Return(Ones) |
| } |
| } |
| Local4++ |
| } |
| if (Local4 < Local5) { |
| Return(1) |
| } else { |
| if (Local4 < Local6) { |
| Return(Ones) |
| } else { |
| Return(Zero) |
| } |
| } |
| } |
| |
| /* Weak string compare. Checks to find Arg1 at beginning of Arg0. |
| * Fails if length(Arg0) < length(Arg1). Returns 0 on Fail, 1 on |
| * Pass. |
| */ |
| Method(WCMP, 2) |
| { |
| Local0 = S2BF(Arg0) |
| Local1 = S2BF(Arg1) |
| if (SLEN(Arg0) < SLEN(Arg1)) { |
| Return(0) |
| } |
| Local2 = 0 |
| Local3 = SLEN(Arg1) |
| |
| While(Local2 < Local3) { |
| if (Derefof(Local0[Local2]) != Derefof(Local1[Local2])) { |
| Return(0) |
| } |
| Local2++ |
| } |
| Return(1) |
| } |
| |
| /* ARG0 = IRQ Number(0-15) |
| * Returns Bit Map |
| */ |
| Method(I2BM, 1) |
| { |
| Local0 = 0 |
| if (ARG0 != 0) { |
| Local1 = 1 |
| Local0 = Local1 << ARG0 |
| } |
| Return(Local0) |
| } |