Changes in kernel/arch/ia32/src/ia32.c [4a5ba372:36df4109] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia32/src/ia32.c
r4a5ba372 r36df4109 36 36 37 37 #include <arch.h> 38 #include <arch/arch.h> 38 39 #include <typedefs.h> 39 40 #include <errno.h> … … 50 51 #include <genarch/drivers/ega/ega.h> 51 52 #include <genarch/drivers/i8042/i8042.h> 53 #include <genarch/drivers/ns16550/ns16550.h> 52 54 #include <genarch/drivers/legacy/ia32/io.h> 53 55 #include <genarch/fb/bfb.h> 54 56 #include <genarch/kbrd/kbrd.h> 57 #include <genarch/srln/srln.h> 55 58 #include <genarch/multiboot/multiboot.h> 56 59 #include <genarch/multiboot/multiboot2.h> 60 #include <arch/pm.h> 61 #include <arch/vreg.h> 57 62 58 63 #ifdef CONFIG_SMP 59 64 #include <arch/smp/apic.h> 60 65 #endif 66 67 static void ia32_pre_mm_init(void); 68 static void ia32_post_mm_init(void); 69 static void ia32_post_cpu_init(void); 70 static void ia32_pre_smp_init(void); 71 static void ia32_post_smp_init(void); 72 73 arch_ops_t ia32_ops = { 74 .pre_mm_init = ia32_pre_mm_init, 75 .post_mm_init = ia32_post_mm_init, 76 .post_cpu_init = ia32_post_cpu_init, 77 .pre_smp_init = ia32_pre_smp_init, 78 .post_smp_init = ia32_post_smp_init, 79 }; 80 81 arch_ops_t *arch_ops = &ia32_ops; 61 82 62 83 /** Perform ia32-specific initialization before main_bsp() is called. … … 66 87 * 67 88 */ 68 void arch_pre_main(uint32_t signature, void *info)89 void ia32_pre_main(uint32_t signature, void *info) 69 90 { 70 91 /* Parse multiboot information obtained from the bootloader. */ … … 79 100 } 80 101 81 void arch_pre_mm_init(void)102 void ia32_pre_mm_init(void) 82 103 { 83 104 pm_init(); … … 92 113 } 93 114 94 void arch_post_mm_init(void) 95 { 115 void ia32_post_mm_init(void) 116 { 117 vreg_init(); 118 96 119 if (config.cpu_active == 1) { 97 120 /* Initialize IRQ routing */ … … 120 143 zone_merge_all(); 121 144 } 122 } 123 124 void arch_post_cpu_init() 145 146 } 147 148 void ia32_post_cpu_init(void) 125 149 { 126 150 #ifdef CONFIG_SMP … … 132 156 } 133 157 134 void arch_pre_smp_init(void)158 void ia32_pre_smp_init(void) 135 159 { 136 160 if (config.cpu_active == 1) { … … 141 165 } 142 166 143 void arch_post_smp_init(void)167 void ia32_post_smp_init(void) 144 168 { 145 169 /* Currently the only supported platform for ia32 is 'pc'. */ … … 166 190 } 167 191 #endif 192 193 #if (defined(CONFIG_NS16550) || defined(CONFIG_NS16550_OUT)) 194 /* 195 * Initialize the ns16550 controller. 196 */ 197 #ifdef CONFIG_NS16550_OUT 198 outdev_t *ns16550_out; 199 outdev_t **ns16550_out_ptr = &ns16550_out; 200 #else 201 outdev_t **ns16550_out_ptr = NULL; 202 #endif 203 ns16550_instance_t *ns16550_instance 204 = ns16550_init((ns16550_t *) NS16550_BASE, IRQ_NS16550, NULL, NULL, 205 ns16550_out_ptr); 206 if (ns16550_instance) { 207 #ifdef CONFIG_NS16550 208 srln_instance_t *srln_instance = srln_init(); 209 if (srln_instance) { 210 indev_t *sink = stdin_wire(); 211 indev_t *srln = srln_wire(srln_instance, sink); 212 ns16550_wire(ns16550_instance, srln); 213 trap_virtual_enable_irqs(1 << IRQ_NS16550); 214 } 215 #endif 216 #ifdef CONFIG_NS16550_OUT 217 if (ns16550_out) { 218 stdout_wire(ns16550_out); 219 } 220 #endif 221 } 222 #endif 168 223 169 224 if (irqs_info != NULL) … … 183 238 } 184 239 185 /** Set thread-local-storage pointer186 *187 * TLS pointer is set in GS register. That means, the GS contains188 * selector, and the descriptor->base is the correct address.189 */190 sysarg_t sys_tls_set(uintptr_t addr)191 {192 THREAD->arch.tls = addr;193 set_tls_desc(addr);194 195 return EOK;196 }197 198 240 /** Construct function pointer 199 241 *
Note:
See TracChangeset
for help on using the changeset viewer.