@@ -31,6 +31,148 @@ static inline bool acpi_has_cpu_in_madt(void)
3131
3232extern struct list_head acpi_wakeup_device_list ;
3333
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+
34176#endif /* !CONFIG_ACPI */
35177
36178#define ACPI_TABLE_UPGRADE_MAX_PHYS ARCH_LOW_ADDRESS_LIMIT
0 commit comments