Index: arch/ia32/src/acpi/acpi.c
===================================================================
--- arch/ia32/src/acpi/acpi.c	(revision 4b2c872d993209cc50bfe660125b5f9537183b14)
+++ 	(revision )
@@ -1,174 +1,0 @@
-/*
- * Copyright (C) 2005 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <arch/acpi/acpi.h>
-#include <arch/acpi/madt.h>
-#include <arch/bios/bios.h>
-
-#include <mm/page.h>
-#include <print.h>
-
-#define RSDP_SIGNATURE		"RSD PTR "
-#define RSDP_REVISION_OFFS	15
-
-struct acpi_rsdp *acpi_rsdp = NULL;
-struct acpi_rsdt *acpi_rsdt = NULL;
-struct acpi_xsdt *acpi_xsdt = NULL;
-
-struct acpi_signature_map signature_map[] = { 
-	{ (__u8 *)"APIC", (struct acpi_sdt_header **) &acpi_madt, "Multiple APIC Description Table" }
-};
-
-int rsdp_check(__u8 *rsdp) {
-	struct acpi_rsdp *r = (struct acpi_rsdp *) rsdp;
-	__u8 sum = 0;
-	int i;
-	
-	for (i=0; i<20; i++)
-		sum += rsdp[i];
-		
-	if (sum)	
-		return 0; /* bad checksum */
-
-	if (r->revision == 0)
-		return 1; /* ACPI 1.0 */
-		
-	for (; i<r->length; i++)
-		sum += rsdp[i];
-		
-	return !sum;
-	
-}
-
-int acpi_sdt_check(__u8 *sdt)
-{
-	struct acpi_sdt_header *h = (struct acpi_sdt_header *) sdt;
-	__u8 sum = 0;
-	int i;
-
-	for (i=0; i<h->length; i++)
-		sum += sdt[i];
-		
-	return !sum;
-}
-
-void map_sdt(struct acpi_sdt_header *sdt)
-{
-	map_page_to_frame((__address) sdt, (__address) sdt, PAGE_NOT_CACHEABLE, 0);
-	map_structure((__address) sdt, sdt->length);
-}
-
-void acpi_init(void)
-{
-	__u8 *addr[2] = { NULL, (__u8 *) PA2KA(0xe0000) };
-	int i, j, length[2] = { 1024, 128*1024 };
-	__u64 *sig = (__u64 *) RSDP_SIGNATURE;
-
-	/*
-	 * Find Root System Description Pointer
-	 * 1. search first 1K of EBDA
-	 * 2. search 128K starting at 0xe0000
-	 */
-
-	addr[0] = (__u8 *) PA2KA(ebda);
-	for (i = (ebda ? 0 : 1); i < 2; i++) {
-		for (j = 0; j < length[i]; j += 16) {
-			if (*((__u64 *) &addr[i][j]) == *sig && rsdp_check(&addr[i][j])) {
-				acpi_rsdp = (struct acpi_rsdp *) &addr[i][j];
-				goto rsdp_found;
-			}
-		}
-	}
-
-	return;
-
-rsdp_found:
-	printf("%P: ACPI Root System Description Pointer\n", acpi_rsdp);
-
-	acpi_rsdt = (struct acpi_rsdt *) (__native) acpi_rsdp->rsdt_address;
-	if (acpi_rsdp->revision) acpi_xsdt = (struct acpi_xsdt *) ((__address) acpi_rsdp->xsdt_address);
-
-	if (acpi_rsdt) map_sdt((struct acpi_sdt_header *) acpi_rsdt);
-	if (acpi_xsdt) map_sdt((struct acpi_sdt_header *) acpi_xsdt);	
-
-	if (acpi_rsdt && !acpi_sdt_check((__u8 *) acpi_rsdt)) {
-		printf("RSDT: %s\n", "bad checksum");
-		return;
-	}
-	if (acpi_xsdt && !acpi_sdt_check((__u8 *) acpi_xsdt)) {
-		printf("XSDT: %s\n", "bad checksum");
-		return;
-	}
-
-	if (acpi_xsdt) configure_via_xsdt();
-	else if (acpi_rsdt) configure_via_rsdt();
-
-}
-
-void configure_via_rsdt(void)
-{
-	int i, j, cnt = (acpi_rsdt->header.length - sizeof(struct acpi_sdt_header))/sizeof(__u32);
-	
-	for (i=0; i<cnt; i++) {
-		for (j=0; j<sizeof(signature_map)/sizeof(struct acpi_signature_map); j++) {
-			struct acpi_sdt_header *h = (struct acpi_sdt_header *) (__native) acpi_rsdt->entry[i];
-		
-			map_sdt(h);	
-			if (*((__u32 *) &h->signature[0])==*((__u32 *) &signature_map[j].signature[0])) {
-				if (!acpi_sdt_check((__u8 *) h))
-					goto next;
-				*signature_map[j].sdt_ptr = h;
-				printf("%P: ACPI %s\n", *signature_map[j].sdt_ptr, signature_map[j].description);
-			}
-		}
-next:
-		;
-	}
-}
-
-void configure_via_xsdt(void)
-{
-	int i, j, cnt = (acpi_xsdt->header.length - sizeof(struct acpi_sdt_header))/sizeof(__u64);
-	
-	for (i=0; i<cnt; i++) {
-		for (j=0; j<sizeof(signature_map)/sizeof(struct acpi_signature_map); j++) {
-			struct acpi_sdt_header *h = (struct acpi_sdt_header *) ((__address) acpi_rsdt->entry[i]);
-
-			map_sdt(h);
-			if (*((__u32 *) &h->signature[0])==*((__u32 *) &signature_map[j].signature[0])) {
-				if (!acpi_sdt_check((__u8 *) h))
-					goto next;
-				*signature_map[j].sdt_ptr = h;
-				printf("%P: ACPI %s\n", *signature_map[j].sdt_ptr, signature_map[j].description);
-			}
-		}
-next:
-		;
-	}
-
-}
Index: arch/ia32/src/acpi/madt.c
===================================================================
--- arch/ia32/src/acpi/madt.c	(revision 4b2c872d993209cc50bfe660125b5f9537183b14)
+++ 	(revision )
@@ -1,213 +1,0 @@
-/*
- * Copyright (C) 2005 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <arch/types.h>
-#include <typedefs.h>
-#include <arch/acpi/acpi.h>
-#include <arch/acpi/madt.h>
-#include <arch/smp/apic.h>
-#include <arch/smp/smp.h>
-#include <panic.h>
-#include <debug.h>
-#include <config.h>
-#include <print.h>
-#include <mm/heap.h>
-#include <memstr.h>
-#include <sort.h>
-
-struct acpi_madt *acpi_madt = NULL;
-
-#ifdef __SMP__
-
-static void madt_l_apic_entry(struct madt_l_apic *la, __u32 index);
-static void madt_io_apic_entry(struct madt_io_apic *ioa, __u32 index);
-static int madt_cmp(void * a, void * b);
-
-struct madt_l_apic *madt_l_apic_entries = NULL;
-struct madt_io_apic *madt_io_apic_entries = NULL;
-
-index_t madt_l_apic_entry_index = 0;
-index_t madt_io_apic_entry_index = 0;
-count_t madt_l_apic_entry_cnt = 0;
-count_t madt_io_apic_entry_cnt = 0;
-count_t cpu_count = 0;
-
-struct madt_apic_header * * madt_entries_index = NULL;
-int madt_entries_index_cnt = 0;
-
-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"
-};
-
-/*
- * ACPI MADT Implementation of SMP configuration interface.
- */
-static count_t madt_cpu_count(void);
-static bool madt_cpu_enabled(index_t i);
-static bool madt_cpu_bootstrap(index_t i);
-static __u8 madt_cpu_apic_id(index_t i);
-
-struct smp_config_operations madt_config_operations = {
-	.cpu_count = madt_cpu_count,
-	.cpu_enabled = madt_cpu_enabled,
-	.cpu_bootstrap = madt_cpu_bootstrap,
-	.cpu_apic_id = madt_cpu_apic_id
-};
-
-static count_t madt_cpu_count(void)
-{
-	return madt_l_apic_entry_cnt;
-}
-
-static bool madt_cpu_enabled(index_t i)
-{
-	ASSERT(i < madt_l_apic_entry_cnt);
-	return ((struct madt_l_apic *) madt_entries_index[madt_l_apic_entry_index + i])->flags & 0x1;
-
-}
-
-static bool madt_cpu_bootstrap(index_t i)
-{
-	ASSERT(i < madt_l_apic_entry_cnt);
-	return ((struct madt_l_apic *) madt_entries_index[madt_l_apic_entry_index + i])->apic_id == l_apic_id();
-}
-
-static __u8 madt_cpu_apic_id(index_t i)
-{
-	ASSERT(i < madt_l_apic_entry_cnt);
-	return ((struct madt_l_apic *) madt_entries_index[madt_l_apic_entry_index + i])->apic_id;
-}
-
-int madt_cmp(void * a, void * b) 
-{
-	return 
-		(((struct madt_apic_header *) a)->type > ((struct madt_apic_header *) b)->type) ?
-		1 : 
-		((((struct madt_apic_header *) a)->type < ((struct madt_apic_header *) b)->type) ? -1 : 0);
-}
-	
-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;
-	
-        l_apic = (__u32 *) (__native) acpi_madt->l_apic_address;
-
-	/* calculate madt entries */
-	for (h = &acpi_madt->apic_header[0]; h < end; h = (struct madt_apic_header *) (((__u8 *) h) + h->length)) {
-		madt_entries_index_cnt++;
-	}
-
-	/* create madt apic entries index array */
-	madt_entries_index = (struct madt_apic_header * *) malloc(madt_entries_index_cnt * sizeof(struct madt_apic_header * *));
-
-	__u32 index = 0;
-
-	for (h = &acpi_madt->apic_header[0]; h < end; h = (struct madt_apic_header *) (((__u8 *) h) + h->length)) {
-		madt_entries_index[index++] = h;
-	}
-
-	/* Quicksort MADT index structure */
-	qsort(madt_entries_index, madt_entries_index_cnt, sizeof(__address), &madt_cmp);
-
-	/* Parse MADT entries */	
-	for (index = 0; index < madt_entries_index_cnt - 1; index++) {
-		h = madt_entries_index[index];
-		switch (h->type) {
-			case MADT_L_APIC:
-				madt_l_apic_entry((struct madt_l_apic *) h, index);
-				break;
-			case MADT_IO_APIC:
-				madt_io_apic_entry((struct madt_io_apic *) h, index);
-				break;
-			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;
-		}
-	
-	
-	}
-	
-
-	if (cpu_count)
-		config.cpu_count = cpu_count;
-}
- 
-
-void madt_l_apic_entry(struct madt_l_apic *la, __u32 index)
-{
-	if (!madt_l_apic_entry_cnt++) {
-		madt_l_apic_entry_index = index;
-	}
-		
-	if (!(la->flags & 0x1)) {
-		/* Processor is unusable, skip it. */
-		return;
-	}
-	
-	cpu_count++;	
-	apic_id_mask |= 1<<la->apic_id;
-}
-
-void madt_io_apic_entry(struct madt_io_apic *ioa, __u32 index)
-{
-	if (!madt_io_apic_entry_cnt++) {
-		/* remember index of the first io apic entry */
-		madt_io_apic_entry_index = index;
-		io_apic = (__u32 *) (__native) ioa->io_apic_address;
-	} else {
-		/* currently not supported */
-		return;
-	}
-}
-
-
-#endif /* __SMP__ */
Index: arch/ia32/src/ia32.c
===================================================================
--- arch/ia32/src/ia32.c	(revision 4b2c872d993209cc50bfe660125b5f9537183b14)
+++ arch/ia32/src/ia32.c	(revision 807d2d4b1533bbdc93a8288995fc3fa955e97bf9)
@@ -45,5 +45,5 @@
 #include <arch/interrupt.h>
 #include <arch/asm.h>
-#include <arch/acpi/acpi.h>
+#include <genarch/firmware/acpi/acpi.h>
 
 #include <arch/bios/bios.h>
Index: arch/ia32/src/smp/smp.c
===================================================================
--- arch/ia32/src/smp/smp.c	(revision 4b2c872d993209cc50bfe660125b5f9537183b14)
+++ arch/ia32/src/smp/smp.c	(revision 807d2d4b1533bbdc93a8288995fc3fa955e97bf9)
@@ -31,6 +31,6 @@
 #include <arch/smp/mps.h>
 #include <arch/smp/ap.h>
-#include <arch/acpi/acpi.h>
-#include <arch/acpi/madt.h>
+#include <genarch/firmware/acpi/acpi.h>
+#include <genarch/firmware/acpi/madt.h>
 #include <config.h>
 #include <synch/waitq.h>
