Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 33 → Rev 34

/SPARTAN/trunk/arch/ia32/src/acpi/madt.c
26,7 → 26,60
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
#include <arch/types.h>
#include <arch/acpi/acpi.h>
#include <arch/acpi/madt.h>
#include <arch/smp/apic.h>
 
struct acpi_madt *acpi_madt = NULL;
 
#ifdef __SMP__
 
char *entry[] = {
"L_APIC",
"IO_APIC",
"INTR_SRC_OVRD",
"NMI_SRC",
"L_APIC_NMI",
"L_APIC_ADDR_OVRD",
"IO_SAPIC",
"L_SAPIC",
"PLATFORM_INTR_SRC"
};
 
void acpi_madt_parse(void)
{
struct madt_apic_header *end = (struct madt_apic_header *) (((__u8 *) acpi_madt) + acpi_madt->header.length);
struct madt_apic_header *h = &acpi_madt->apic_header[0];
 
l_apic = (__u32 *) acpi_madt->l_apic_address;
 
while (h < end) {
switch (h->type) {
case MADT_L_APIC:
case MADT_IO_APIC:
case MADT_INTR_SRC_OVRD:
case MADT_NMI_SRC:
case MADT_L_APIC_NMI:
case MADT_L_APIC_ADDR_OVRD:
case MADT_IO_SAPIC:
case MADT_L_SAPIC:
case MADT_PLATFORM_INTR_SRC:
printf("MADT: skipping %s entry (type=%d)\n", entry[h->type], h->type);
break;
 
default:
if (h->type >= MADT_RESERVED_SKIP_BEGIN && h->type <= MADT_RESERVED_SKIP_END) {
printf("MADT: skipping reserved entry (type=%d)\n", h->type);
}
if (h->type >= MADT_RESERVED_OEM_BEGIN) {
printf("MADT: skipping OEM entry (type=%d)\n", h->type);
}
break;
}
h = (struct madt_apic_header *) (((__u8 *) h) + h->length);
}
 
}
 
#endif /* __SMP__ */
/SPARTAN/trunk/arch/ia32/src/acpi/acpi.c
78,7 → 78,15
 
void map_sdt(struct acpi_sdt_header *sdt)
{
int i, cnt, length;
 
map_page_to_frame((__address) sdt, (__address) sdt, PAGE_NOT_CACHEABLE, 0);
length = sdt->length + ((__address) sdt) - ((__address) sdt)&0xfffff000;
cnt = length/PAGE_SIZE + (length%PAGE_SIZE>0);
for (i = 1; i < cnt; i++)
map_page_to_frame(((__address) sdt) + i*PAGE_SIZE, ((__address) sdt) + i*PAGE_SIZE, PAGE_NOT_CACHEABLE, 0);
}
 
void acpi_init(void)