/* 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) }