Changes in kernel/arch/ia64/src/ia64.c [c0699467:26f407e9] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/src/ia64.c
rc0699467 r26f407e9 34 34 35 35 #include <arch.h> 36 #include <arch/drivers/ski.h>37 #include <arch/drivers/it.h>38 #include <arch/interrupt.h>39 #include <arch/barrier.h>40 #include <arch/asm.h>41 #include <arch/register.h>42 36 #include <typedefs.h> 43 #include <arch/context.h> 44 #include <arch/stack.h> 45 #include <arch/mm/page.h> 37 #include <errno.h> 46 38 #include <interrupt.h> 47 #include <mm/as.h>48 #include <config.h>49 39 #include <macros.h> 40 #include <str.h> 50 41 #include <userspace.h> 51 42 #include <console/console.h> 52 #include <abi/proc/uarg.h>53 43 #include <syscall/syscall.h> 54 #include <ddi/irq.h> 55 #include <arch/bootinfo.h> 44 #include <sysinfo/sysinfo.h> 45 #include <arch/drivers/it.h> 46 #include <arch/drivers/kbd.h> 47 #include <arch/legacyio.h> 48 #include <genarch/drivers/ega/ega.h> 49 #include <genarch/drivers/i8042/i8042.h> 50 #include <genarch/drivers/ns16550/ns16550.h> 56 51 #include <genarch/drivers/legacy/ia32/io.h> 57 #include <genarch/drivers/ega/ega.h>58 52 #include <genarch/kbrd/kbrd.h> 59 53 #include <genarch/srln/srln.h> 60 #include <genarch/drivers/i8042/i8042.h> 61 #include <genarch/drivers/ns16550/ns16550.h> 62 #include <arch/drivers/kbd.h> 63 #include <smp/smp.h> 64 #include <smp/ipi.h> 65 #include <arch/atomic.h> 66 #include <panic.h> 67 #include <print.h> 68 #include <sysinfo/sysinfo.h> 69 #include <str.h> 54 #include <mm/page.h> 55 #include <mm/km.h> 56 57 #ifdef MACHINE_ski 58 #include <arch/drivers/ski.h> 59 #endif 70 60 71 61 /* NS16550 as a COM 1 */ … … 75 65 76 66 static uint64_t iosapic_base = 0xfec00000; 67 uintptr_t legacyio_virt_base = 0; 77 68 78 69 /** Performs ia64-specific initialization before main_bsp() is called. */ 79 70 void arch_pre_main(void) 80 71 { 81 init.cnt = min3(bootinfo->taskmap.cnt, TASKMAP_MAX_RECORDS, CONFIG_INIT_TASKS); 72 init.cnt = min3(bootinfo->taskmap.cnt, TASKMAP_MAX_RECORDS, 73 CONFIG_INIT_TASKS); 82 74 size_t i; 75 83 76 for (i = 0; i < init.cnt; i++) { 84 init.tasks[i].addr = 85 ((unsigned long) bootinfo->taskmap.tasks[i].addr) | 86 VRN_MASK; 77 init.tasks[i].paddr = 78 (uintptr_t) bootinfo->taskmap.tasks[i].addr; 87 79 init.tasks[i].size = bootinfo->taskmap.tasks[i].size; 88 80 str_cpy(init.tasks[i].name, CONFIG_TASK_NAME_BUFLEN, … … 93 85 void arch_pre_mm_init(void) 94 86 { 95 /*96 * Set Interruption Vector Address (i.e. location of interruption vector97 * table).98 */99 iva_write((uintptr_t) &ivt);100 srlz_d();101 102 87 } 103 88 104 89 static void iosapic_init(void) 105 90 { 106 uint64_t IOSAPIC = PA2KA((sysarg_t)(iosapic_base)) | FW_OFFSET; 91 uintptr_t IOSAPIC = km_map(iosapic_base, PAGE_SIZE, 92 PAGE_WRITE | PAGE_NOT_CACHEABLE); 107 93 int i; 108 94 … … 131 117 { 132 118 if (config.cpu_active == 1) { 119 /* Map the page with legacy I/O. */ 120 legacyio_virt_base = km_map(LEGACYIO_PHYS_BASE, LEGACYIO_SIZE, 121 PAGE_WRITE | PAGE_NOT_CACHEABLE); 122 133 123 iosapic_init(); 134 124 irq_init(INR_COUNT, INR_COUNT); … … 154 144 #endif 155 145 #ifdef MACHINE_i460GX 156 platform = " i460GX";146 platform = "pc"; 157 147 #endif 158 148 sysinfo_set_item_data("platform", NULL, (void *) platform, … … 198 188 sysinfo_set_item_val("kbd.address.physical", NULL, 199 189 (uintptr_t) NS16550_BASE); 200 sysinfo_set_item_val("kbd.address.kernel", NULL,201 (uintptr_t) NS16550_BASE);202 190 #endif 203 191 204 192 #ifdef CONFIG_I8042 205 i8042_instance_t *i8042_instance = i8042_init((i8042_t *) I8042_BASE, IRQ_KBD); 193 i8042_instance_t *i8042_instance = i8042_init((i8042_t *) I8042_BASE, 194 IRQ_KBD); 206 195 if (i8042_instance) { 207 196 kbrd_instance_t *kbrd_instance = kbrd_init(); … … 212 201 } 213 202 } 214 215 sysinfo_set_item_val("i8042", NULL, true); 216 sysinfo_set_item_val("i8042.inr_a", NULL, IRQ_KBD); 217 sysinfo_set_item_val("i8042.inr_b", NULL, IRQ_MOUSE); 218 sysinfo_set_item_val("i8042.address.physical", NULL, 219 (uintptr_t) I8042_BASE); 220 sysinfo_set_item_val("i8042.address.kernel", NULL, 221 (uintptr_t) I8042_BASE); 222 #endif 223 224 sysinfo_set_item_val("netif.ne2000.inr", NULL, IRQ_NE2000); 225 203 #endif 204 226 205 sysinfo_set_item_val("ia64_iospace", NULL, true); 227 206 sysinfo_set_item_val("ia64_iospace.address", NULL, true); 228 sysinfo_set_item_val("ia64_iospace.address.virtual", NULL, IO_OFFSET);207 sysinfo_set_item_val("ia64_iospace.address.virtual", NULL, LEGACYIO_USER_BASE); 229 208 } 230 209 … … 269 248 * We use r13 (a.k.a. tp) for this purpose. 270 249 */ 271 sysarg_t sys_tls_set( sysarg_t addr)272 { 273 return 0;250 sysarg_t sys_tls_set(uintptr_t addr) 251 { 252 return EOK; 274 253 } 275 254 … … 277 256 { 278 257 pio_write_8((ioport8_t *)0x64, 0xfe); 279 while (1) 280 ; 258 while (1); 281 259 } 282 260
Note:
See TracChangeset
for help on using the changeset viewer.