acpi.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Author: Jianmin Lv <[email protected]>
  4. * Huacai Chen <[email protected]>
  5. * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
  6. */
  7. #ifndef _ASM_LOONGARCH_ACPI_H
  8. #define _ASM_LOONGARCH_ACPI_H
  9. #ifdef CONFIG_ACPI
  10. extern int acpi_strict;
  11. extern int acpi_disabled;
  12. extern int acpi_pci_disabled;
  13. extern int acpi_noirq;
  14. #define acpi_os_ioremap acpi_os_ioremap
  15. void __iomem *acpi_os_ioremap(acpi_physical_address phys, acpi_size size);
  16. static inline void disable_acpi(void)
  17. {
  18. acpi_disabled = 1;
  19. acpi_pci_disabled = 1;
  20. acpi_noirq = 1;
  21. }
  22. static inline bool acpi_has_cpu_in_madt(void)
  23. {
  24. return true;
  25. }
  26. extern struct list_head acpi_wakeup_device_list;
  27. /*
  28. * Temporary definitions until the core ACPICA code gets updated (see
  29. * [email protected] and its
  30. * follow-ups for the "rationale").
  31. *
  32. * Once the "legal reasons" are cleared and that the code is merged,
  33. * this can be dropped entierely.
  34. */
  35. #if (ACPI_CA_VERSION == 0x20220331 && !defined(LOONGARCH_ACPICA_EXT))
  36. #define LOONGARCH_ACPICA_EXT 1
  37. #define ACPI_MADT_TYPE_CORE_PIC 17
  38. #define ACPI_MADT_TYPE_LIO_PIC 18
  39. #define ACPI_MADT_TYPE_HT_PIC 19
  40. #define ACPI_MADT_TYPE_EIO_PIC 20
  41. #define ACPI_MADT_TYPE_MSI_PIC 21
  42. #define ACPI_MADT_TYPE_BIO_PIC 22
  43. #define ACPI_MADT_TYPE_LPC_PIC 23
  44. /* Values for Version field above */
  45. enum acpi_madt_core_pic_version {
  46. ACPI_MADT_CORE_PIC_VERSION_NONE = 0,
  47. ACPI_MADT_CORE_PIC_VERSION_V1 = 1,
  48. ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */
  49. };
  50. enum acpi_madt_lio_pic_version {
  51. ACPI_MADT_LIO_PIC_VERSION_NONE = 0,
  52. ACPI_MADT_LIO_PIC_VERSION_V1 = 1,
  53. ACPI_MADT_LIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */
  54. };
  55. enum acpi_madt_eio_pic_version {
  56. ACPI_MADT_EIO_PIC_VERSION_NONE = 0,
  57. ACPI_MADT_EIO_PIC_VERSION_V1 = 1,
  58. ACPI_MADT_EIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */
  59. };
  60. enum acpi_madt_ht_pic_version {
  61. ACPI_MADT_HT_PIC_VERSION_NONE = 0,
  62. ACPI_MADT_HT_PIC_VERSION_V1 = 1,
  63. ACPI_MADT_HT_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */
  64. };
  65. enum acpi_madt_bio_pic_version {
  66. ACPI_MADT_BIO_PIC_VERSION_NONE = 0,
  67. ACPI_MADT_BIO_PIC_VERSION_V1 = 1,
  68. ACPI_MADT_BIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */
  69. };
  70. enum acpi_madt_msi_pic_version {
  71. ACPI_MADT_MSI_PIC_VERSION_NONE = 0,
  72. ACPI_MADT_MSI_PIC_VERSION_V1 = 1,
  73. ACPI_MADT_MSI_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */
  74. };
  75. enum acpi_madt_lpc_pic_version {
  76. ACPI_MADT_LPC_PIC_VERSION_NONE = 0,
  77. ACPI_MADT_LPC_PIC_VERSION_V1 = 1,
  78. ACPI_MADT_LPC_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */
  79. };
  80. #pragma pack(1)
  81. /* Core Interrupt Controller */
  82. struct acpi_madt_core_pic {
  83. struct acpi_subtable_header header;
  84. u8 version;
  85. u32 processor_id;
  86. u32 core_id;
  87. u32 flags;
  88. };
  89. /* Legacy I/O Interrupt Controller */
  90. struct acpi_madt_lio_pic {
  91. struct acpi_subtable_header header;
  92. u8 version;
  93. u64 address;
  94. u16 size;
  95. u8 cascade[2];
  96. u32 cascade_map[2];
  97. };
  98. /* Extend I/O Interrupt Controller */
  99. struct acpi_madt_eio_pic {
  100. struct acpi_subtable_header header;
  101. u8 version;
  102. u8 cascade;
  103. u8 node;
  104. u64 node_map;
  105. };
  106. /* HT Interrupt Controller */
  107. struct acpi_madt_ht_pic {
  108. struct acpi_subtable_header header;
  109. u8 version;
  110. u64 address;
  111. u16 size;
  112. u8 cascade[8];
  113. };
  114. /* Bridge I/O Interrupt Controller */
  115. struct acpi_madt_bio_pic {
  116. struct acpi_subtable_header header;
  117. u8 version;
  118. u64 address;
  119. u16 size;
  120. u16 id;
  121. u16 gsi_base;
  122. };
  123. /* MSI Interrupt Controller */
  124. struct acpi_madt_msi_pic {
  125. struct acpi_subtable_header header;
  126. u8 version;
  127. u64 msg_address;
  128. u32 start;
  129. u32 count;
  130. };
  131. /* LPC Interrupt Controller */
  132. struct acpi_madt_lpc_pic {
  133. struct acpi_subtable_header header;
  134. u8 version;
  135. u64 address;
  136. u16 size;
  137. u8 cascade;
  138. };
  139. #pragma pack()
  140. #endif
  141. #endif /* !CONFIG_ACPI */
  142. #define ACPI_TABLE_UPGRADE_MAX_PHYS ARCH_LOW_ADDRESS_LIMIT
  143. #endif /* _ASM_LOONGARCH_ACPI_H */