globutil.asl 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. Method(MIN, 2)
  9. {
  10. If (LLess(Arg0, Arg1)) {
  11. Return (Arg0)
  12. } Else {
  13. Return (Arg1)
  14. }
  15. }
  16. Method(SLEN, 1)
  17. {
  18. Store(Arg0, Local0)
  19. Return (Sizeof(Local0))
  20. }
  21. Method(S2BF, 1, Serialized)
  22. {
  23. Add(SLEN(Arg0), One, Local0)
  24. Name(BUFF, Buffer(Local0) {})
  25. Store(Arg0, BUFF)
  26. Return (BUFF)
  27. }
  28. /*
  29. * SCMP - Strong string compare
  30. *
  31. * Checks both length and content
  32. */
  33. Method(SCMP, 2)
  34. {
  35. Store(S2BF(Arg0), Local0)
  36. Store(S2BF(Arg1), Local1)
  37. Store(Zero, Local4)
  38. Store(SLEN(Arg0), Local5)
  39. Store(SLEN(Arg1), Local6)
  40. Store(MIN(Local5, Local6), Local7)
  41. While (LLess(Local4, Local7)) {
  42. Store(Derefof(Index(Local0, Local4)), Local2)
  43. Store(Derefof(Index(Local1, Local4)), Local3)
  44. If (LGreater(Local2, Local3)) {
  45. Return (One)
  46. } Else {
  47. If (LLess(Local2, Local3)) {
  48. Return (Ones)
  49. }
  50. }
  51. Increment(Local4)
  52. }
  53. If (LLess(Local4, Local5)) {
  54. Return (One)
  55. } Else {
  56. If (LLess(Local4, Local6)) {
  57. Return (Ones)
  58. } Else {
  59. Return (Zero)
  60. }
  61. }
  62. }
  63. /*
  64. * WCMP - Weak string compare
  65. *
  66. * Checks to find Arg1 at beginning of Arg0.
  67. * Fails if length(Arg0) < length(Arg1).
  68. * Returns 0 on fail, 1 on pass.
  69. */
  70. Method(WCMP, 2)
  71. {
  72. Store(S2BF(Arg0), Local0)
  73. Store(S2BF(Arg1), Local1)
  74. If (LLess(SLEN(Arg0), SLEN(Arg1))) {
  75. Return (Zero)
  76. }
  77. Store(Zero, Local2)
  78. Store(SLEN(Arg1), Local3)
  79. While (LLess(Local2, Local3)) {
  80. If (LNotEqual(Derefof(Index(Local0, Local2)),
  81. Derefof(Index(Local1, Local2)))) {
  82. Return (Zero)
  83. }
  84. Increment(Local2)
  85. }
  86. Return (One)
  87. }
  88. /*
  89. * I2BM - Returns Bit Map
  90. *
  91. * Arg0 = IRQ Number (0-15)
  92. */
  93. Method(I2BM, 1)
  94. {
  95. Store(0, Local0)
  96. If (LNotEqual(Arg0, 0)) {
  97. Store(1, Local1)
  98. ShiftLeft(Local1, Arg0, Local0)
  99. }
  100. Return (Local0)
  101. }