Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia64/src/ia64.c

    r26f407e9 rc0699467  
    3434
    3535#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>
    3642#include <typedefs.h>
    37 #include <errno.h>
     43#include <arch/context.h>
     44#include <arch/stack.h>
     45#include <arch/mm/page.h>
    3846#include <interrupt.h>
     47#include <mm/as.h>
     48#include <config.h>
    3949#include <macros.h>
    40 #include <str.h>
    4150#include <userspace.h>
    4251#include <console/console.h>
     52#include <abi/proc/uarg.h>
    4353#include <syscall/syscall.h>
    44 #include <sysinfo/sysinfo.h>
    45 #include <arch/drivers/it.h>
    46 #include <arch/drivers/kbd.h>
    47 #include <arch/legacyio.h>
     54#include <ddi/irq.h>
     55#include <arch/bootinfo.h>
     56#include <genarch/drivers/legacy/ia32/io.h>
    4857#include <genarch/drivers/ega/ega.h>
     58#include <genarch/kbrd/kbrd.h>
     59#include <genarch/srln/srln.h>
    4960#include <genarch/drivers/i8042/i8042.h>
    5061#include <genarch/drivers/ns16550/ns16550.h>
    51 #include <genarch/drivers/legacy/ia32/io.h>
    52 #include <genarch/kbrd/kbrd.h>
    53 #include <genarch/srln/srln.h>
    54 #include <mm/page.h>
    55 #include <mm/km.h>
    56 
    57 #ifdef MACHINE_ski
    58 #include <arch/drivers/ski.h>
    59 #endif
     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>
    6070
    6171/* NS16550 as a COM 1 */
     
    6575
    6676static uint64_t iosapic_base = 0xfec00000;
    67 uintptr_t legacyio_virt_base = 0;
    6877
    6978/** Performs ia64-specific initialization before main_bsp() is called. */
    7079void arch_pre_main(void)
    7180{
    72         init.cnt = min3(bootinfo->taskmap.cnt, TASKMAP_MAX_RECORDS,
    73             CONFIG_INIT_TASKS);
     81        init.cnt = min3(bootinfo->taskmap.cnt, TASKMAP_MAX_RECORDS, CONFIG_INIT_TASKS);
    7482        size_t i;
    75 
    7683        for (i = 0; i < init.cnt; i++) {
    77                 init.tasks[i].paddr =
    78                     (uintptr_t) bootinfo->taskmap.tasks[i].addr;
     84                init.tasks[i].addr =
     85                    ((unsigned long) bootinfo->taskmap.tasks[i].addr) |
     86                    VRN_MASK;
    7987                init.tasks[i].size = bootinfo->taskmap.tasks[i].size;
    8088                str_cpy(init.tasks[i].name, CONFIG_TASK_NAME_BUFLEN,
     
    8593void arch_pre_mm_init(void)
    8694{
     95        /*
     96         * Set Interruption Vector Address (i.e. location of interruption vector
     97         * table).
     98         */
     99        iva_write((uintptr_t) &ivt);
     100        srlz_d();
     101       
    87102}
    88103
    89104static void iosapic_init(void)
    90105{
    91         uintptr_t IOSAPIC = km_map(iosapic_base, PAGE_SIZE,
    92             PAGE_WRITE | PAGE_NOT_CACHEABLE);
     106        uint64_t IOSAPIC = PA2KA((sysarg_t)(iosapic_base)) | FW_OFFSET;
    93107        int i;
    94108       
     
    117131{
    118132        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 
    123133                iosapic_init();
    124134                irq_init(INR_COUNT, INR_COUNT);
     
    144154#endif
    145155#ifdef MACHINE_i460GX
    146         platform = "pc";
     156        platform = "i460GX";
    147157#endif
    148158        sysinfo_set_item_data("platform", NULL, (void *) platform,
     
    188198        sysinfo_set_item_val("kbd.address.physical", NULL,
    189199            (uintptr_t) NS16550_BASE);
     200        sysinfo_set_item_val("kbd.address.kernel", NULL,
     201            (uintptr_t) NS16550_BASE);
    190202#endif
    191203       
    192204#ifdef CONFIG_I8042
    193         i8042_instance_t *i8042_instance = i8042_init((i8042_t *) I8042_BASE,
    194             IRQ_KBD);
     205        i8042_instance_t *i8042_instance = i8042_init((i8042_t *) I8042_BASE, IRQ_KBD);
    195206        if (i8042_instance) {
    196207                kbrd_instance_t *kbrd_instance = kbrd_init();
     
    201212                }
    202213        }
    203 #endif
    204        
     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
    205226        sysinfo_set_item_val("ia64_iospace", NULL, true);
    206227        sysinfo_set_item_val("ia64_iospace.address", NULL, true);
    207         sysinfo_set_item_val("ia64_iospace.address.virtual", NULL, LEGACYIO_USER_BASE);
     228        sysinfo_set_item_val("ia64_iospace.address.virtual", NULL, IO_OFFSET);
    208229}
    209230
     
    248269 * We use r13 (a.k.a. tp) for this purpose.
    249270 */
    250 sysarg_t sys_tls_set(uintptr_t addr)
    251 {
    252         return EOK;
     271sysarg_t sys_tls_set(sysarg_t addr)
     272{
     273        return 0;
    253274}
    254275
     
    256277{
    257278        pio_write_8((ioport8_t *)0x64, 0xfe);
    258         while (1);
     279        while (1)
     280                ;
    259281}
    260282
Note: See TracChangeset for help on using the changeset viewer.