Index: arch/ia32/_link.ld
===================================================================
--- arch/ia32/_link.ld	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ arch/ia32/_link.ld	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -1,4 +1,4 @@
 /*
- *  i386 linker script
+ *  ia32 linker script
  *  
  *  kernel text
Index: arch/ia32/include/ap.h
===================================================================
--- arch/ia32/include/ap.h	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ 	(revision )
@@ -1,34 +1,0 @@
-/*
- * Copyright (C) 2001-2004 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.
- */
-
-#ifndef __AP_H__
-#define __AP_H__
-
-extern void ap_boot(void);
-
-#endif
Index: arch/ia32/include/apic.h
===================================================================
--- arch/ia32/include/apic.h	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ 	(revision )
@@ -1,130 +1,0 @@
-/*
- * Copyright (C) 2001-2004 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.
- */
-
-#ifndef __APIC_H__
-#define __APIC_H__
-
-#include <arch/types.h>
-#include <cpu.h>
-
-#define FIXED		(0<<0)
-#define LOPRI		(1<<0)
-
-/* local APIC macros */
-#define IPI_INIT 	0
-#define IPI_STARTUP	0
-
-#define DLVRMODE_FIXED	(0<<8)
-#define DLVRMODE_INIT	(5<<8)
-#define DLVRMODE_STUP	(6<<8)
-#define DESTMODE_PHYS	(0<<11)
-#define DESTMODE_LOGIC	(1<<11)
-#define LEVEL_ASSERT	(1<<14)
-#define LEVEL_DEASSERT	(0<<14)
-#define TRGRMODE_LEVEL	(1<<15)
-#define TRGRMODE_EDGE	(0<<15)
-#define SHORTHAND_DEST	(0<<18)
-#define SHORTHAND_INCL	(2<<18)
-#define SHORTHAND_EXCL	(3<<18)
-
-#define SEND_PENDING	(1<<12)
-
-/* Interrupt Command Register */
-#define ICRlo		(0x300/sizeof(__u32))
-#define ICRhi		(0x310/sizeof(__u32))
-#define ICRloClear	((1<<13)|(3<<16)|(0xfff<<20))
-#define ICRhiClear	(0xffffff<<0)
-
-/* End Of Interrupt */
-#define EOI		(0x0b0/sizeof(__u32))
-
-/* Error Status Register */
-#define ESR		(0x280/sizeof(__u32))
-#define ESRClear	((0xffffff<<8)|(1<<4))
-
-/* Task Priority Register */
-#define TPR		(0x080/sizeof(__u32))
-#define TPRClear	0xffffff00
-
-/* Spurious Vector Register */
-#define SVR		(0x0f0/sizeof(__u32))
-#define SVRClear	(~0x3f0)
-
-/* Time Divide Configuratio Register */
-#define TDCR		(0x3e0/sizeof(__u32))
-#define TDCRClear	(~0xb)
-
-/* Initial Count Register for Timer */
-#define ICRT		(0x380/sizeof(__u32))
-
-/* Current Count Register for Timer */
-#define CCRT		(0x390/sizeof(__u32))
-
-/* LVT */
-#define LVT_Tm		(0x320/sizeof(__u32))
-#define LVT_LINT0	(0x350/sizeof(__u32))
-#define LVT_LINT1	(0x360/sizeof(__u32))
-#define LVT_Err		(0x370/sizeof(__u32))
-#define LVT_PCINT	(0x340/sizeof(__u32))
-
-/* Local APIC ID Register */
-#define L_APIC_ID	(0x020/sizeof(__u32))
-#define L_APIC_IDClear	(~(0xf<<24))
-
-/* IO APIC */
-#define IOREGSEL	(0x00/sizeof(__u32))
-#define IOWIN		(0x10/sizeof(__u32))
-
-#define IOAPICID	0x00
-#define IOAPICVER	0x01
-#define IOAPICARB	0x02
-#define IOREDTBL	0x10
-
-
-extern volatile __u32 *l_apic;
-extern volatile __u32 *io_apic;
-
-extern __u32 apic_id_mask;
-
-extern void apic_init(void);
-extern void apic_spurious(__u8 n, __u32 stack[]);
-
-extern void l_apic_init(void);
-extern void l_apic_eoi(void);
-extern int l_apic_broadcast_custom_ipi(__u8 vector);
-extern int l_apic_send_init_ipi(__u8 apicid);
-extern void l_apic_debug(void);
-extern void l_apic_timer_interrupt(__u8 n, __u32 stack[]);
-
-extern __u32 io_apic_read(__u8 address);
-extern void io_apic_write(__u8 address , __u32 x);
-extern void io_apic_change_ioredtbl(int signal, int dest, __u8 v, int flags);
-extern void io_apic_disable_irqs(__u16 irqmask);
-extern void io_apic_enable_irqs(__u16 irqmask);
-
-#endif
Index: arch/ia32/include/asm.h
===================================================================
--- arch/ia32/include/asm.h	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ arch/ia32/include/asm.h	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -27,6 +27,6 @@
  */
 
-#ifndef __i386_ASM_H__
-#define __i386_ASM_H__
+#ifndef __ia32_ASM_H__
+#define __ia32_ASM_H__
 
 #include <cpu.h>
Index: arch/ia32/include/atomic.h
===================================================================
--- arch/ia32/include/atomic.h	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ 	(revision )
@@ -1,40 +1,0 @@
-/*
- * Copyright (C) 2001-2004 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.
- */
-
-#ifndef __i386_ATOMIC_H__
-#define __i386_ATOMIC_H__
-
-#include <arch/types.h>
-
-extern void atomic_inc(int *val);
-extern void atomic_dec(int *val);
-
-extern int test_and_set(int *val);
-extern void spinlock_arch(int *val);
-
-#endif
Index: arch/ia32/include/context.h
===================================================================
--- arch/ia32/include/context.h	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ arch/ia32/include/context.h	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -27,6 +27,6 @@
  */
 
-#ifndef __i386_CONTEXT_H__
-#define __i386_CONTEXT_H__
+#ifndef __ia32_CONTEXT_H__
+#define __ia32_CONTEXT_H__
 
 #include <arch/types.h>
Index: arch/ia32/include/cpu.h
===================================================================
--- arch/ia32/include/cpu.h	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ arch/ia32/include/cpu.h	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -27,6 +27,6 @@
  */
 
-#ifndef __i386_CPU_H__
-#define __i386_CPU_H__
+#ifndef __ia32_CPU_H__
+#define __ia32_CPU_H__
 
 #include <typedefs.h>
Index: arch/ia32/include/i8254.h
===================================================================
--- arch/ia32/include/i8254.h	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ arch/ia32/include/i8254.h	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -27,6 +27,6 @@
  */
 
-#ifndef __i8254_H__
-#define __i8254_H__
+#ifndef __I8254_H__
+#define __I8254_H__
 
 #include <arch/types.h>
Index: arch/ia32/include/mm/frame.h
===================================================================
--- arch/ia32/include/mm/frame.h	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ arch/ia32/include/mm/frame.h	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -27,6 +27,6 @@
  */
 
-#ifndef __i386_FRAME_H__
-#define __i386_FRAME_H__
+#ifndef __ia32_FRAME_H__
+#define __ia32_FRAME_H__
 
 #include <arch/types.h>
Index: arch/ia32/include/mm/page.h
===================================================================
--- arch/ia32/include/mm/page.h	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ arch/ia32/include/mm/page.h	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -27,6 +27,6 @@
  */
 
-#ifndef __i386_PAGE_H__
-#define __i386_PAGE_H__
+#ifndef __ia32_PAGE_H__
+#define __ia32_PAGE_H__
 
 #include <arch/types.h>
Index: arch/ia32/include/mm/vm.h
===================================================================
--- arch/ia32/include/mm/vm.h	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ arch/ia32/include/mm/vm.h	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -27,6 +27,6 @@
  */
 
-#ifndef __i386_VM_H__
-#define __i386_VM_H__
+#ifndef __ia32_VM_H__
+#define __ia32_VM_H__
 
 #include <arch/types.h>
Index: arch/ia32/include/mp.h
===================================================================
--- arch/ia32/include/mp.h	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ 	(revision )
@@ -1,122 +1,0 @@
-/*
- * Copyright (C) 2001-2004 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.
- */
-
-#ifndef __MP_H__
-#define __MP_H__
-
-#include <arch/types.h>
-#include <typedefs.h>
-#include <synch/waitq.h>
-#include <config.h>
-
-struct __mpfs {
-	__u32 signature;
-	struct __mpct *configuration_table;
-	__u8 length;
-	__u8 revision;
-	__u8 checksum;
-	__u8 config_type;
-	__u8 mpfib2;
-	__u8 mpfib3;
-	__u8 mpfib4;
-	__u8 mpfib5;
-} __attribute__ ((packed));
-
-struct __mpct {
-	__u32 signature;
-	__u16 base_table_length;
-	__u8 revision;
-	__u8 checksum;
-	__u8 oem_id[8];
-	__u8 product_id[12];
-	__u8 *oem_table;
-	__u16 oem_table_size;
-	__u16 entry_count;
-	__u32 *l_apic;
-	__u16 ext_table_length;
-	__u8 ext_table_checksum;
-	__u8 xxx;
-	__u8 base_table[0];
-} __attribute__ ((packed));
-
-struct __processor_entry {
-	__u8 type;
-	__u8 l_apic_id;
-	__u8 l_apic_version;
-	__u8 cpu_flags;
-	__u8 cpu_signature[4];
-	__u32 feature_flags;
-	__u32 xxx[2];
-} __attribute__ ((packed));
-
-struct __bus_entry {
-	__u8 type;
-	__u8 bus_id;
-	__u8 bus_type[6];
-} __attribute__ ((packed));
-
-struct __io_apic_entry {
-	__u8 type;
-	__u8 io_apic_id;
-	__u8 io_apic_version;
-	__u8 io_apic_flags;
-	__u32 *io_apic;
-} __attribute__ ((packed));
-
-struct __io_intr_entry {
-	__u8 type;
-	__u8 intr_type;
-	__u8 poel;
-	__u8 xxx;
-	__u8 src_bus_id;
-	__u8 src_bus_irq;
-	__u8 dst_io_apic_id;
-	__u8 dst_io_apic_pin;
-} __attribute__ ((packed));
-
-struct __l_intr_entry {
-	__u8 type;
-	__u8 intr_type;
-	__u8 poel;
-	__u8 xxx;
-	__u8 src_bus_id;
-	__u8 src_bus_irq;
-	__u8 dst_l_apic_id;
-	__u8 dst_l_apic_pin;
-} __attribute__ ((packed));
-
-
-extern waitq_t ap_completion_wq;
-extern waitq_t kmp_completion_wq;
-
-extern int mp_irq_to_pin(int irq);
-
-extern void mp_init(void);
-extern void kmp(void *arg);
-
-#endif
Index: arch/ia32/include/smp/ap.h
===================================================================
--- arch/ia32/include/smp/ap.h	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
+++ arch/ia32/include/smp/ap.h	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2001-2004 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.
+ */
+
+#ifndef __AP_H__
+#define __AP_H__
+
+extern void ap_boot(void);
+
+#endif
Index: arch/ia32/include/smp/apic.h
===================================================================
--- arch/ia32/include/smp/apic.h	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
+++ arch/ia32/include/smp/apic.h	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2001-2004 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.
+ */
+
+#ifndef __APIC_H__
+#define __APIC_H__
+
+#include <arch/types.h>
+#include <cpu.h>
+
+#define FIXED		(0<<0)
+#define LOPRI		(1<<0)
+
+/* local APIC macros */
+#define IPI_INIT 	0
+#define IPI_STARTUP	0
+
+#define DLVRMODE_FIXED	(0<<8)
+#define DLVRMODE_INIT	(5<<8)
+#define DLVRMODE_STUP	(6<<8)
+#define DESTMODE_PHYS	(0<<11)
+#define DESTMODE_LOGIC	(1<<11)
+#define LEVEL_ASSERT	(1<<14)
+#define LEVEL_DEASSERT	(0<<14)
+#define TRGRMODE_LEVEL	(1<<15)
+#define TRGRMODE_EDGE	(0<<15)
+#define SHORTHAND_DEST	(0<<18)
+#define SHORTHAND_INCL	(2<<18)
+#define SHORTHAND_EXCL	(3<<18)
+
+#define SEND_PENDING	(1<<12)
+
+/* Interrupt Command Register */
+#define ICRlo		(0x300/sizeof(__u32))
+#define ICRhi		(0x310/sizeof(__u32))
+#define ICRloClear	((1<<13)|(3<<16)|(0xfff<<20))
+#define ICRhiClear	(0xffffff<<0)
+
+/* End Of Interrupt */
+#define EOI		(0x0b0/sizeof(__u32))
+
+/* Error Status Register */
+#define ESR		(0x280/sizeof(__u32))
+#define ESRClear	((0xffffff<<8)|(1<<4))
+
+/* Task Priority Register */
+#define TPR		(0x080/sizeof(__u32))
+#define TPRClear	0xffffff00
+
+/* Spurious Vector Register */
+#define SVR		(0x0f0/sizeof(__u32))
+#define SVRClear	(~0x3f0)
+
+/* Time Divide Configuratio Register */
+#define TDCR		(0x3e0/sizeof(__u32))
+#define TDCRClear	(~0xb)
+
+/* Initial Count Register for Timer */
+#define ICRT		(0x380/sizeof(__u32))
+
+/* Current Count Register for Timer */
+#define CCRT		(0x390/sizeof(__u32))
+
+/* LVT */
+#define LVT_Tm		(0x320/sizeof(__u32))
+#define LVT_LINT0	(0x350/sizeof(__u32))
+#define LVT_LINT1	(0x360/sizeof(__u32))
+#define LVT_Err		(0x370/sizeof(__u32))
+#define LVT_PCINT	(0x340/sizeof(__u32))
+
+/* Local APIC ID Register */
+#define L_APIC_ID	(0x020/sizeof(__u32))
+#define L_APIC_IDClear	(~(0xf<<24))
+
+/* IO APIC */
+#define IOREGSEL	(0x00/sizeof(__u32))
+#define IOWIN		(0x10/sizeof(__u32))
+
+#define IOAPICID	0x00
+#define IOAPICVER	0x01
+#define IOAPICARB	0x02
+#define IOREDTBL	0x10
+
+
+extern volatile __u32 *l_apic;
+extern volatile __u32 *io_apic;
+
+extern __u32 apic_id_mask;
+
+extern void apic_init(void);
+extern void apic_spurious(__u8 n, __u32 stack[]);
+
+extern void l_apic_init(void);
+extern void l_apic_eoi(void);
+extern int l_apic_broadcast_custom_ipi(__u8 vector);
+extern int l_apic_send_init_ipi(__u8 apicid);
+extern void l_apic_debug(void);
+extern void l_apic_timer_interrupt(__u8 n, __u32 stack[]);
+
+extern __u32 io_apic_read(__u8 address);
+extern void io_apic_write(__u8 address , __u32 x);
+extern void io_apic_change_ioredtbl(int signal, int dest, __u8 v, int flags);
+extern void io_apic_disable_irqs(__u16 irqmask);
+extern void io_apic_enable_irqs(__u16 irqmask);
+
+#endif
Index: arch/ia32/include/smp/atomic.h
===================================================================
--- arch/ia32/include/smp/atomic.h	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
+++ arch/ia32/include/smp/atomic.h	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2001-2004 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.
+ */
+
+#ifndef __ia32_ATOMIC_H__
+#define __ia32_ATOMIC_H__
+
+#include <arch/types.h>
+
+extern void atomic_inc(int *val);
+extern void atomic_dec(int *val);
+
+extern int test_and_set(int *val);
+extern void spinlock_arch(int *val);
+
+#endif
Index: arch/ia32/include/smp/mp.h
===================================================================
--- arch/ia32/include/smp/mp.h	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
+++ arch/ia32/include/smp/mp.h	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2001-2004 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.
+ */
+
+#ifndef __MP_H__
+#define __MP_H__
+
+#include <arch/types.h>
+#include <typedefs.h>
+#include <synch/waitq.h>
+#include <config.h>
+
+struct __mpfs {
+	__u32 signature;
+	struct __mpct *configuration_table;
+	__u8 length;
+	__u8 revision;
+	__u8 checksum;
+	__u8 config_type;
+	__u8 mpfib2;
+	__u8 mpfib3;
+	__u8 mpfib4;
+	__u8 mpfib5;
+} __attribute__ ((packed));
+
+struct __mpct {
+	__u32 signature;
+	__u16 base_table_length;
+	__u8 revision;
+	__u8 checksum;
+	__u8 oem_id[8];
+	__u8 product_id[12];
+	__u8 *oem_table;
+	__u16 oem_table_size;
+	__u16 entry_count;
+	__u32 *l_apic;
+	__u16 ext_table_length;
+	__u8 ext_table_checksum;
+	__u8 xxx;
+	__u8 base_table[0];
+} __attribute__ ((packed));
+
+struct __processor_entry {
+	__u8 type;
+	__u8 l_apic_id;
+	__u8 l_apic_version;
+	__u8 cpu_flags;
+	__u8 cpu_signature[4];
+	__u32 feature_flags;
+	__u32 xxx[2];
+} __attribute__ ((packed));
+
+struct __bus_entry {
+	__u8 type;
+	__u8 bus_id;
+	__u8 bus_type[6];
+} __attribute__ ((packed));
+
+struct __io_apic_entry {
+	__u8 type;
+	__u8 io_apic_id;
+	__u8 io_apic_version;
+	__u8 io_apic_flags;
+	__u32 *io_apic;
+} __attribute__ ((packed));
+
+struct __io_intr_entry {
+	__u8 type;
+	__u8 intr_type;
+	__u8 poel;
+	__u8 xxx;
+	__u8 src_bus_id;
+	__u8 src_bus_irq;
+	__u8 dst_io_apic_id;
+	__u8 dst_io_apic_pin;
+} __attribute__ ((packed));
+
+struct __l_intr_entry {
+	__u8 type;
+	__u8 intr_type;
+	__u8 poel;
+	__u8 xxx;
+	__u8 src_bus_id;
+	__u8 src_bus_irq;
+	__u8 dst_l_apic_id;
+	__u8 dst_l_apic_pin;
+} __attribute__ ((packed));
+
+
+extern waitq_t ap_completion_wq;
+extern waitq_t kmp_completion_wq;
+
+extern int mp_irq_to_pin(int irq);
+
+extern void mp_init(void);
+extern void kmp(void *arg);
+
+#endif
Index: arch/ia32/include/thread.h
===================================================================
--- arch/ia32/include/thread.h	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ arch/ia32/include/thread.h	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -27,6 +27,6 @@
  */
 
-#ifndef __i386_THREAD_H__
-#define __i386_THREAD_H__
+#ifndef __ia32_THREAD_H__
+#define __ia32_THREAD_H__
 
 #define ARCH_THREAD_DATA
Index: arch/ia32/src/mm/page.c
===================================================================
--- arch/ia32/src/mm/page.c	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ arch/ia32/src/mm/page.c	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -39,5 +39,5 @@
 /*
  * Note.
- * This is the preliminary code for controlling paging mechanism on i386. It is
+ * This is the preliminary code for controlling paging mechanism on ia32. It is
  * needed by other parts of the kernel for its ability to map virtual addresses
  * to physical. SMP code relies on this feature. Other than that, this code is
Index: arch/ia32/src/pm.c
===================================================================
--- arch/ia32/src/pm.c	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ arch/ia32/src/pm.c	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -37,5 +37,5 @@
 
 /*
- * Early i386 configuration functions and data structures.
+ * Early ia32 configuration functions and data structures.
  */
 
Index: arch/ia32/src/smp/apic.c
===================================================================
--- arch/ia32/src/smp/apic.c	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ arch/ia32/src/smp/apic.c	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -30,11 +30,11 @@
 
 #include <arch/types.h>
-#include <arch/apic.h>
-#include <arch/ap.h>
+#include <arch/smp/apic.h>
+#include <arch/smp/ap.h>
+#include <arch/smp/mp.h>
 #include <mm/page.h>
 #include <time/delay.h>
 #include <arch/interrupt.h>
 #include <print.h>
-#include <arch/mp.h>
 #include <arch/asm.h>
 #include <arch.h>
Index: arch/ia32/src/smp/ipi.c
===================================================================
--- arch/ia32/src/smp/ipi.c	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ arch/ia32/src/smp/ipi.c	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -30,5 +30,5 @@
 
 #include <smp/ipi.h>
-#include <arch/apic.h>
+#include <arch/smp/apic.h>
 
 void ipi_broadcast_arch(int ipi)
Index: arch/ia32/src/smp/mp.c
===================================================================
--- arch/ia32/src/smp/mp.c	(revision 26a8604ffcf3def1cb5904b8685f2247210e04fc)
+++ arch/ia32/src/smp/mp.c	(revision 397c77f3eabd20d194d7f9f89a7358eb5a0e23f8)
@@ -29,11 +29,11 @@
 #ifdef __SMP__
 
-#include <arch/mp.h>
-#include <arch/ap.h>
 #include <arch/pm.h>
 #include <config.h>
 #include <print.h>
 #include <panic.h>
-#include <arch/apic.h>
+#include <arch/smp/mp.h>
+#include <arch/smp/ap.h>
+#include <arch/smp/apic.h>
 #include <func.h>
 #include <arch/types.h>
