Changes to support the 64 core boxboro machine
[akaros.git] / kern / arch / i686 / init.c
1 /* See COPYRIGHT for copyright information. */
2
3 #ifdef __SHARC__
4 #pragma nosharc
5 #endif
6
7 #include <smp.h>
8
9 #include <arch/rl8168.h>
10 #include <arch/ne2k.h>
11 #include <arch/e1000.h>
12 #include <arch/mptables.h>
13 #include <arch/pci.h>
14 #include <arch/ioapic.h>
15
16 void arch_init()
17 {
18         pci_init();
19 #ifndef __CONFIG_DISABLE_MPTABLES__
20         mptables_parse();
21         ioapic_init(); // MUST BE AFTER PCI/ISA INIT!
22         // TODO: move these back to regular init.  requires fixing the 
23         // __CONFIG_NETWORKING__ inits to not need multiple cores running.
24 #endif
25         // this returns when all other cores are done and ready to receive IPIs
26         #ifdef __CONFIG_SINGLE_CORE__
27                 smp_percpu_init();
28         #else
29                 smp_boot();
30         #endif
31         proc_init();
32
33         /* EXPERIMENTAL NETWORK FUNCTIONALITY
34          * To enable, define __CONFIG_NETWORKING__ in your Makelocal
35          * If enabled, will load the rl8168 driver (if device exists)
36          * and will a boot into userland matrix, so remote syscalls can be performed.
37          * If in simulation, will do some debugging information with the ne2k device
38          *
39          * Note: If you use this, you should also define the mac address of the 
40          * teathered machine via USER_MAC_ADDRESS in Makelocal.
41          *
42          * Additionally, you should have a look at the syscall server in the tools directory
43          */
44         #ifdef __CONFIG_NETWORKING__
45         #ifdef __CONFIG_SINGLE_CORE__
46                 warn("You currently can't have networking if you boot into single core mode!!\n");
47         #else
48                 rl8168_init();          
49                 ne2k_init();
50                 e1000_init();
51         #endif // __CONFIG_SINGLE_CORE__
52         #endif // __CONFIG_NETWORKING__
53 }
54