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