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