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