1*83d290c5STom Rini/* SPDX-License-Identifier: GPL-2.0+ */ 29e70a116SBin Meng/* 39e70a116SBin Meng * Copyright (C) 2008 Advanced Micro Devices, Inc. 49e70a116SBin Meng * Copyright (C) 2016 Bin Meng <bmeng.cn@gmail.com> 59e70a116SBin Meng * 69e70a116SBin Meng * Modified from coreboot src/arch/x86/acpi/globutil.asl 79e70a116SBin Meng */ 89e70a116SBin Meng 99e70a116SBin MengMethod(MIN, 2) 109e70a116SBin Meng{ 119e70a116SBin Meng If (LLess(Arg0, Arg1)) { 129e70a116SBin Meng Return (Arg0) 139e70a116SBin Meng } Else { 149e70a116SBin Meng Return (Arg1) 159e70a116SBin Meng } 169e70a116SBin Meng} 179e70a116SBin Meng 189e70a116SBin MengMethod(SLEN, 1) 199e70a116SBin Meng{ 209e70a116SBin Meng Store(Arg0, Local0) 219e70a116SBin Meng Return (Sizeof(Local0)) 229e70a116SBin Meng} 239e70a116SBin Meng 249e70a116SBin MengMethod(S2BF, 1, Serialized) 259e70a116SBin Meng{ 269e70a116SBin Meng Add(SLEN(Arg0), One, Local0) 279e70a116SBin Meng Name(BUFF, Buffer(Local0) {}) 289e70a116SBin Meng Store(Arg0, BUFF) 299e70a116SBin Meng Return (BUFF) 309e70a116SBin Meng} 319e70a116SBin Meng 329e70a116SBin Meng/* 339e70a116SBin Meng * SCMP - Strong string compare 349e70a116SBin Meng * 359e70a116SBin Meng * Checks both length and content 369e70a116SBin Meng */ 379e70a116SBin MengMethod(SCMP, 2) 389e70a116SBin Meng{ 399e70a116SBin Meng Store(S2BF(Arg0), Local0) 409e70a116SBin Meng Store(S2BF(Arg1), Local1) 419e70a116SBin Meng Store(Zero, Local4) 429e70a116SBin Meng Store(SLEN(Arg0), Local5) 439e70a116SBin Meng Store(SLEN(Arg1), Local6) 449e70a116SBin Meng Store(MIN(Local5, Local6), Local7) 459e70a116SBin Meng 469e70a116SBin Meng While (LLess(Local4, Local7)) { 479e70a116SBin Meng Store(Derefof(Index(Local0, Local4)), Local2) 489e70a116SBin Meng Store(Derefof(Index(Local1, Local4)), Local3) 499e70a116SBin Meng If (LGreater(Local2, Local3)) { 509e70a116SBin Meng Return (One) 519e70a116SBin Meng } Else { 529e70a116SBin Meng If (LLess(Local2, Local3)) { 539e70a116SBin Meng Return (Ones) 549e70a116SBin Meng } 559e70a116SBin Meng } 569e70a116SBin Meng Increment(Local4) 579e70a116SBin Meng } 589e70a116SBin Meng 599e70a116SBin Meng If (LLess(Local4, Local5)) { 609e70a116SBin Meng Return (One) 619e70a116SBin Meng } Else { 629e70a116SBin Meng If (LLess(Local4, Local6)) { 639e70a116SBin Meng Return (Ones) 649e70a116SBin Meng } Else { 659e70a116SBin Meng Return (Zero) 669e70a116SBin Meng } 679e70a116SBin Meng } 689e70a116SBin Meng} 699e70a116SBin Meng 709e70a116SBin Meng/* 719e70a116SBin Meng * WCMP - Weak string compare 729e70a116SBin Meng * 739e70a116SBin Meng * Checks to find Arg1 at beginning of Arg0. 749e70a116SBin Meng * Fails if length(Arg0) < length(Arg1). 759e70a116SBin Meng * Returns 0 on fail, 1 on pass. 769e70a116SBin Meng */ 779e70a116SBin MengMethod(WCMP, 2) 789e70a116SBin Meng{ 799e70a116SBin Meng Store(S2BF(Arg0), Local0) 809e70a116SBin Meng Store(S2BF(Arg1), Local1) 819e70a116SBin Meng If (LLess(SLEN(Arg0), SLEN(Arg1))) { 829e70a116SBin Meng Return (Zero) 839e70a116SBin Meng } 849e70a116SBin Meng Store(Zero, Local2) 859e70a116SBin Meng Store(SLEN(Arg1), Local3) 869e70a116SBin Meng 879e70a116SBin Meng While (LLess(Local2, Local3)) { 889e70a116SBin Meng If (LNotEqual(Derefof(Index(Local0, Local2)), 899e70a116SBin Meng Derefof(Index(Local1, Local2)))) { 909e70a116SBin Meng Return (Zero) 919e70a116SBin Meng } 929e70a116SBin Meng Increment(Local2) 939e70a116SBin Meng } 949e70a116SBin Meng 959e70a116SBin Meng Return (One) 969e70a116SBin Meng} 979e70a116SBin Meng 989e70a116SBin Meng/* 999e70a116SBin Meng * I2BM - Returns Bit Map 1009e70a116SBin Meng * 1019e70a116SBin Meng * Arg0 = IRQ Number (0-15) 1029e70a116SBin Meng */ 1039e70a116SBin MengMethod(I2BM, 1) 1049e70a116SBin Meng{ 1059e70a116SBin Meng Store(0, Local0) 1069e70a116SBin Meng If (LNotEqual(Arg0, 0)) { 1079e70a116SBin Meng Store(1, Local1) 1089e70a116SBin Meng ShiftLeft(Local1, Arg0, Local0) 1099e70a116SBin Meng } 1109e70a116SBin Meng 1119e70a116SBin Meng Return (Local0) 1129e70a116SBin Meng} 113