More work towards getting the appservers combined
[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/mptables.h>
12 #include <arch/pci.h>
13 #include <arch/ioapic.h>
14
15 void arch_init()
16 {
17         mptables_parse();
18         pci_init();
19         ioapic_init(); // MUST BE AFTER PCI/ISA INIT!
20                 
21         // TODO: move these back to regular init.  requires fixing the __NETWORK__
22         // inits to not need multiple cores running.
23         // this returns when all other cores are done and ready to receive IPIs
24         #ifndef __SINGLE_CORE__
25                 smp_boot();
26         #else
27                 smp_percpu_init();
28         #endif
29         proc_init();
30
31         /* EXPERIMENTAL NETWORK FUNCTIONALITY
32          * To enable, define __NETWORK__ in your Makelocal
33          * If enabled, will load the rl8168 driver (if device exists)
34          * and will a boot into userland matrix, so remote syscalls can be performed.
35          * If in simulation, will do some debugging information with the ne2k device
36          *
37          * Note: If you use this, you should also define the mac address of the 
38          * teathered machine via USER_MAC_ADDRESS in Makelocal.
39          *
40          * Additionally, you should have a look at the syscall server in the tools directory
41          */
42         #ifdef __NETWORK__
43         rl8168_init();          
44         ne2k_init();
45         #endif // __NETWORK__
46 }