Changeset bf05c74 in mainline for kernel/genarch/src/acpi/acpi.c
- Timestamp:
- 2018-10-24T17:59:50Z (5 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5c38838, 889cdb1
- Parents:
- cfdeedc
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/genarch/src/acpi/acpi.c
rcfdeedc rbf05c74 43 43 #include <mm/km.h> 44 44 #include <log.h> 45 #include <mem.h> 45 46 46 47 #define RSDP_SIGNATURE "RSD PTR " … … 170 171 } 171 172 173 static uint8_t *search_rsdp(uint8_t *base, size_t len) 174 { 175 for (size_t i = 0; i < len; i += 16) { 176 if (memcmp(&base[i], RSDP_SIGNATURE, sizeof(RSDP_SIGNATURE)) == 0 && 177 rsdp_check(&base[i])) 178 return &base[i]; 179 } 180 181 return NULL; 182 } 183 172 184 void acpi_init(void) 173 185 { 174 uint8_t *addr[2] = { NULL, (uint8_t *) PA2KA(0xe0000) };175 unsigned int i;176 unsigned int j;177 unsigned int length[2] = { 1024, 128 * 1024 };178 uint64_t *sig = (uint64_t *) RSDP_SIGNATURE;179 180 186 /* 181 187 * Find Root System Description Pointer … … 184 190 */ 185 191 186 addr[0] = (uint8_t *) PA2KA(ebda); 187 for (i = (ebda ? 0 : 1); i < 2; i++) { 188 for (j = 0; j < length[i]; j += 16) { 189 if ((*((uint64_t *) &addr[i][j]) == *sig) && 190 (rsdp_check(&addr[i][j]))) { 191 acpi_rsdp = (struct acpi_rsdp *) &addr[i][j]; 192 goto rsdp_found; 193 } 194 } 195 } 196 197 return; 198 199 rsdp_found: 192 uint8_t *rsdp = NULL; 193 194 if (ebda) 195 rsdp = search_rsdp((uint8_t *) PA2KA(ebda), 1024); 196 197 if (!rsdp) 198 rsdp = search_rsdp((uint8_t *) PA2KA(0xe0000), 128 * 1024); 199 200 if (!rsdp) 201 return; 202 203 acpi_rsdp = (struct acpi_rsdp *) rsdp; 204 200 205 LOG("%p: ACPI Root System Description Pointer", acpi_rsdp); 201 206
Note:
See TracChangeset
for help on using the changeset viewer.