blob: 5d50ef3673f9f2173bb3f80f31b600da3d70e843 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001/* SPDX-License-Identifier: GPL-2.0+ */
Bin Meng88b08fb2016-05-07 07:46:29 -07002/*
3 * Copyright (C) 2008 Advanced Micro Devices, Inc.
4 * Copyright (C) 2016 Bin Meng <bmeng.cn@gmail.com>
5 *
6 * Modified from coreboot src/arch/x86/acpi/globutil.asl
Bin Meng88b08fb2016-05-07 07:46:29 -07007 */
8
9Method(MIN, 2)
10{
11 If (LLess(Arg0, Arg1)) {
12 Return (Arg0)
13 } Else {
14 Return (Arg1)
15 }
16}
17
18Method(SLEN, 1)
19{
20 Store(Arg0, Local0)
21 Return (Sizeof(Local0))
22}
23
24Method(S2BF, 1, Serialized)
25{
26 Add(SLEN(Arg0), One, Local0)
27 Name(BUFF, Buffer(Local0) {})
28 Store(Arg0, BUFF)
29 Return (BUFF)
30}
31
32/*
33 * SCMP - Strong string compare
34 *
35 * Checks both length and content
36 */
37Method(SCMP, 2)
38{
39 Store(S2BF(Arg0), Local0)
40 Store(S2BF(Arg1), Local1)
41 Store(Zero, Local4)
42 Store(SLEN(Arg0), Local5)
43 Store(SLEN(Arg1), Local6)
44 Store(MIN(Local5, Local6), Local7)
45
46 While (LLess(Local4, Local7)) {
47 Store(Derefof(Index(Local0, Local4)), Local2)
48 Store(Derefof(Index(Local1, Local4)), Local3)
49 If (LGreater(Local2, Local3)) {
50 Return (One)
51 } Else {
52 If (LLess(Local2, Local3)) {
53 Return (Ones)
54 }
55 }
56 Increment(Local4)
57 }
58
59 If (LLess(Local4, Local5)) {
60 Return (One)
61 } Else {
62 If (LLess(Local4, Local6)) {
63 Return (Ones)
64 } Else {
65 Return (Zero)
66 }
67 }
68}
69
70/*
71 * WCMP - Weak string compare
72 *
73 * Checks to find Arg1 at beginning of Arg0.
74 * Fails if length(Arg0) < length(Arg1).
75 * Returns 0 on fail, 1 on pass.
76 */
77Method(WCMP, 2)
78{
79 Store(S2BF(Arg0), Local0)
80 Store(S2BF(Arg1), Local1)
81 If (LLess(SLEN(Arg0), SLEN(Arg1))) {
82 Return (Zero)
83 }
84 Store(Zero, Local2)
85 Store(SLEN(Arg1), Local3)
86
87 While (LLess(Local2, Local3)) {
88 If (LNotEqual(Derefof(Index(Local0, Local2)),
89 Derefof(Index(Local1, Local2)))) {
90 Return (Zero)
91 }
92 Increment(Local2)
93 }
94
95 Return (One)
96}
97
98/*
99 * I2BM - Returns Bit Map
100 *
101 * Arg0 = IRQ Number (0-15)
102 */
103Method(I2BM, 1)
104{
105 Store(0, Local0)
106 If (LNotEqual(Arg0, 0)) {
107 Store(1, Local1)
108 ShiftLeft(Local1, Arg0, Local0)
109 }
110
111 Return (Local0)
112}