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