source: mainline/arch/ia32/src/acpi/madt.c@ 5dc2112

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 5dc2112 was ed0dd65, checked in by Jakub Jermar <jakub@…>, 20 years ago

More ACPI work.
Initial MADT table parsing.

SMP renaming and reorganization to reflect there are more ways to bring SMP up.

  • Property mode set to 100644
File size: 2.7 KB
Line 
1/*
2 * Copyright (C) 2005 Jakub Jermar
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#include <arch/types.h>
30#include <arch/acpi/acpi.h>
31#include <arch/acpi/madt.h>
32#include <arch/smp/apic.h>
33
34struct acpi_madt *acpi_madt = NULL;
35
36#ifdef __SMP__
37
38char *entry[] = {
39 "L_APIC",
40 "IO_APIC",
41 "INTR_SRC_OVRD",
42 "NMI_SRC",
43 "L_APIC_NMI",
44 "L_APIC_ADDR_OVRD",
45 "IO_SAPIC",
46 "L_SAPIC",
47 "PLATFORM_INTR_SRC"
48};
49
50void acpi_madt_parse(void)
51{
52 struct madt_apic_header *end = (struct madt_apic_header *) (((__u8 *) acpi_madt) + acpi_madt->header.length);
53 struct madt_apic_header *h = &acpi_madt->apic_header[0];
54
55 l_apic = (__u32 *) acpi_madt->l_apic_address;
56
57 while (h < end) {
58 switch (h->type) {
59 case MADT_L_APIC:
60 case MADT_IO_APIC:
61 case MADT_INTR_SRC_OVRD:
62 case MADT_NMI_SRC:
63 case MADT_L_APIC_NMI:
64 case MADT_L_APIC_ADDR_OVRD:
65 case MADT_IO_SAPIC:
66 case MADT_L_SAPIC:
67 case MADT_PLATFORM_INTR_SRC:
68 printf("MADT: skipping %s entry (type=%d)\n", entry[h->type], h->type);
69 break;
70
71 default:
72 if (h->type >= MADT_RESERVED_SKIP_BEGIN && h->type <= MADT_RESERVED_SKIP_END) {
73 printf("MADT: skipping reserved entry (type=%d)\n", h->type);
74 }
75 if (h->type >= MADT_RESERVED_OEM_BEGIN) {
76 printf("MADT: skipping OEM entry (type=%d)\n", h->type);
77 }
78 break;
79 }
80 h = (struct madt_apic_header *) (((__u8 *) h) + h->length);
81 }
82
83}
84
85#endif /* __SMP__ */
Note: See TracBrowser for help on using the repository browser.