@@ -107,7 +107,6 @@ struct acpi_madt_local_apic {
107
107
};
108
108
109
109
static void * global_rsdp ;
110
- static uint64_t madt ;
111
110
112
111
static struct acpi_table_rsdp *
113
112
biosacpi_search_rsdp (char * base , int length )
@@ -150,14 +149,14 @@ static void *get_rsdp(void)
150
149
#endif
151
150
152
151
/* EBDA is addressed by the 16 bit pointer at 0x40E */
153
- addr = (uint16_t * )0x40E ;
152
+ addr = (uint16_t * )HPA2HVA ( 0x40E ) ;
154
153
155
- rsdp = biosacpi_search_rsdp ((char * )((uint64_t )(* addr << 4 )), 0x400 );
154
+ rsdp = biosacpi_search_rsdp ((char * )HPA2HVA ((uint64_t )(* addr << 4 )), 0x400 );
156
155
if (rsdp != NULL )
157
156
return rsdp ;
158
157
159
158
/* Check the upper memory BIOS space, 0xe0000 - 0xfffff. */
160
- rsdp = biosacpi_search_rsdp ((char * )0xe0000 , 0x20000 );
159
+ rsdp = biosacpi_search_rsdp ((char * )HPA2HVA ( 0xe0000 ) , 0x20000 );
161
160
if (rsdp != NULL )
162
161
return rsdp ;
163
162
@@ -167,15 +166,16 @@ static void *get_rsdp(void)
167
166
static int
168
167
probe_table (uint64_t address , const char * sig )
169
168
{
170
- struct acpi_table_header * table = (struct acpi_table_header * )address ;
169
+ void * va = HPA2HVA (address );
170
+ struct acpi_table_header * table = (struct acpi_table_header * )va ;
171
171
172
172
if (strncmp (table -> signature , sig , ACPI_NAME_SIZE ) != 0 )
173
173
return 0 ;
174
174
175
175
return 1 ;
176
176
}
177
177
178
- uint64_t get_acpi_tbl (char * sig )
178
+ void * get_acpi_tbl (char * sig )
179
179
{
180
180
struct acpi_table_rsdp * rsdp ;
181
181
struct acpi_table_rsdt * rsdt ;
@@ -191,7 +191,7 @@ uint64_t get_acpi_tbl(char *sig)
191
191
* the version 1.0 portion of the RSDP. Version 2.0 has
192
192
* an additional checksum that we verify first.
193
193
*/
194
- xsdt = (struct acpi_table_xsdt * )(rsdp -> xsdt_physical_address );
194
+ xsdt = (struct acpi_table_xsdt * )HPA2HVA (rsdp -> xsdt_physical_address );
195
195
count = (xsdt -> header .length -
196
196
sizeof (struct acpi_table_header )) /
197
197
sizeof (uint64_t );
@@ -205,7 +205,7 @@ uint64_t get_acpi_tbl(char *sig)
205
205
} else {
206
206
/* Root table is an RSDT (32-bit physical addresses) */
207
207
rsdt = (struct acpi_table_rsdt * )
208
- (( void * ) (uint64_t )rsdp -> rsdt_physical_address );
208
+ HPA2HVA ( (uint64_t )rsdp -> rsdt_physical_address );
209
209
count = (rsdt -> header .length -
210
210
sizeof (struct acpi_table_header )) /
211
211
sizeof (uint32_t );
@@ -218,10 +218,10 @@ uint64_t get_acpi_tbl(char *sig)
218
218
}
219
219
}
220
220
221
- return addr ;
221
+ return HPA2HVA ( addr ) ;
222
222
}
223
223
224
- static int _parse_madt (uint64_t madt , uint8_t * lapic_id_base )
224
+ static int _parse_madt (void * madt , uint8_t * lapic_id_base )
225
225
{
226
226
int pcpu_id = 0 ;
227
227
struct acpi_madt_local_apic * processor ;
@@ -257,6 +257,8 @@ static int _parse_madt(uint64_t madt, uint8_t *lapic_id_base)
257
257
/* The lapic_id info gotten from madt will be returned in lapic_id_base */
258
258
int parse_madt (uint8_t * lapic_id_base )
259
259
{
260
+ void * madt ;
261
+
260
262
global_rsdp = get_rsdp ();
261
263
ASSERT (global_rsdp != NULL , "fail to get rsdp" );
262
264
@@ -266,7 +268,7 @@ int parse_madt(uint8_t *lapic_id_base)
266
268
return _parse_madt (madt , lapic_id_base );
267
269
}
268
270
269
- uint64_t get_dmar_table (void )
271
+ void * get_dmar_table (void )
270
272
{
271
273
return get_acpi_tbl (ACPI_SIG_DMAR );
272
274
}
0 commit comments