xref: /openbmc/u-boot/arch/x86/include/asm/acpi/globutil.asl (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
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