blob: 8f530f4bd58b8512a350e4f83b00fefe18dfd4db [file] [log] [blame]
Patrick Georgi11f00792020-03-04 15:10:45 +01001/* SPDX-License-Identifier: GPL-2.0-only */
Joe Bao806def82008-12-02 02:56:38 +00002
3/*
4Scope(\_SB) {
Patrick Georgiaf97d332010-02-08 15:46:37 +00005 #include "globutil.asl"
Joe Bao806def82008-12-02 02:56:38 +00006}
7*/
8
9/* string compare functions */
10Method(MIN, 2)
11{
Felix Singer7ee6b5a2022-01-02 01:40:09 +010012 if (Arg0 < Arg1) {
Joe Bao806def82008-12-02 02:56:38 +000013 Return(Arg0)
14 } else {
15 Return(Arg1)
16 }
17}
18
19Method(SLEN, 1)
20{
Felix Singera44620d2022-01-03 19:16:43 +010021 Local0 = Arg0
Joe Bao806def82008-12-02 02:56:38 +000022 Return(Sizeof(Local0))
23}
24
Paul Menzelcd477402013-11-18 11:57:45 +010025Method(S2BF, 1, Serialized)
Joe Bao806def82008-12-02 02:56:38 +000026{
Felix Singerabff1a52021-12-30 02:01:00 +010027 Local0 = SLEN(Arg0) + 1
Joe Bao806def82008-12-02 02:56:38 +000028 Name(BUFF, Buffer(Local0) {})
Felix Singera44620d2022-01-03 19:16:43 +010029 BUFF = Arg0
Joe Bao806def82008-12-02 02:56:38 +000030 Return(BUFF)
31}
32
33/* Strong string compare. Checks both length and content */
34Method(SCMP, 2)
35{
Felix Singera44620d2022-01-03 19:16:43 +010036 Local0 = S2BF(Arg0)
37 Local1 = S2BF(Arg1)
38 Local4 = 0
39 Local5 = SLEN(Arg0)
40 Local6 = SLEN(Arg1)
41 Local7 = MIN(Local5, Local6)
Joe Bao806def82008-12-02 02:56:38 +000042
Felix Singer7ee6b5a2022-01-02 01:40:09 +010043 While(Local4 < Local7) {
Felix Singera44620d2022-01-03 19:16:43 +010044 Local2 = Derefof(Local0[Local4])
45 Local3 = Derefof(Local1[Local4])
Felix Singer362de062022-01-02 02:01:58 +010046 if (Local2 > Local3) {
Felix Singer7b8ac002022-12-26 08:45:56 +010047 Return(1)
Joe Bao806def82008-12-02 02:56:38 +000048 } else {
Felix Singer7ee6b5a2022-01-02 01:40:09 +010049 if (Local2 < Local3) {
Joe Bao806def82008-12-02 02:56:38 +000050 Return(Ones)
51 }
52 }
Felix Singer60e1dfa2021-12-31 13:45:48 +010053 Local4++
Joe Bao806def82008-12-02 02:56:38 +000054 }
Felix Singer7ee6b5a2022-01-02 01:40:09 +010055 if (Local4 < Local5) {
Felix Singer7b8ac002022-12-26 08:45:56 +010056 Return(1)
Joe Bao806def82008-12-02 02:56:38 +000057 } else {
Felix Singer7ee6b5a2022-01-02 01:40:09 +010058 if (Local4 < Local6) {
Joe Bao806def82008-12-02 02:56:38 +000059 Return(Ones)
60 } else {
61 Return(Zero)
62 }
63 }
64}
65
66/* Weak string compare. Checks to find Arg1 at beginning of Arg0.
67* Fails if length(Arg0) < length(Arg1). Returns 0 on Fail, 1 on
68* Pass.
69*/
70Method(WCMP, 2)
71{
Felix Singera44620d2022-01-03 19:16:43 +010072 Local0 = S2BF(Arg0)
73 Local1 = S2BF(Arg1)
Felix Singer7ee6b5a2022-01-02 01:40:09 +010074 if (SLEN(Arg0) < SLEN(Arg1)) {
Joe Bao806def82008-12-02 02:56:38 +000075 Return(0)
76 }
Felix Singera44620d2022-01-03 19:16:43 +010077 Local2 = 0
78 Local3 = SLEN(Arg1)
Joe Bao806def82008-12-02 02:56:38 +000079
Felix Singer7ee6b5a2022-01-02 01:40:09 +010080 While(Local2 < Local3) {
Felix Singerb4a7f742022-01-02 02:42:21 +010081 if (Derefof(Local0[Local2]) != Derefof(Local1[Local2])) {
Joe Bao806def82008-12-02 02:56:38 +000082 Return(0)
83 }
Felix Singer60e1dfa2021-12-31 13:45:48 +010084 Local2++
Joe Bao806def82008-12-02 02:56:38 +000085 }
Felix Singer7b8ac002022-12-26 08:45:56 +010086 Return(1)
Joe Bao806def82008-12-02 02:56:38 +000087}
88
89/* ARG0 = IRQ Number(0-15)
90* Returns Bit Map
91*/
92Method(I2BM, 1)
93{
Felix Singera44620d2022-01-03 19:16:43 +010094 Local0 = 0
Felix Singerb4a7f742022-01-02 02:42:21 +010095 if (ARG0 != 0) {
Felix Singera44620d2022-01-03 19:16:43 +010096 Local1 = 1
Felix Singere0545cc2022-01-03 18:56:55 +010097 Local0 = Local1 << ARG0
Joe Bao806def82008-12-02 02:56:38 +000098 }
99 Return(Local0)
100}