Merge tag 'efi-2020-07-rc6' of https://gitlab.denx.de/u-boot/custodians/u-boot-efi
[oweals/u-boot.git] / arch / x86 / include / asm / acpi / globutil.asl
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
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
7  */
8
9 Method(MIN, 2)
10 {
11         If (LLess(Arg0, Arg1)) {
12                 Return (Arg0)
13         } Else {
14                 Return (Arg1)
15         }
16 }
17
18 Method(SLEN, 1)
19 {
20         Store(Arg0, Local0)
21         Return (Sizeof(Local0))
22 }
23
24 Method(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  */
37 Method(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  */
77 Method(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  */
103 Method(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 }