Subversion Repositories HelenOS

Rev

Rev 2227 | Rev 2519 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2227 Rev 2513
Line 48... Line 48...
48
#include <userspace.h>
48
#include <userspace.h>
49
#include <console/console.h>
49
#include <console/console.h>
50
#include <proc/uarg.h>
50
#include <proc/uarg.h>
51
#include <syscall/syscall.h>
51
#include <syscall/syscall.h>
52
#include <ddi/irq.h>
52
#include <ddi/irq.h>
-
 
53
#include <ddi/device.h>
53
#include <arch/drivers/ega.h>
54
#include <arch/drivers/ega.h>
-
 
55
#include <arch/bootinfo.h>
-
 
56
#include <genarch/kbd/i8042.h>
-
 
57
 
-
 
58
bootinfo_t *bootinfo;
54
 
59
 
55
void arch_pre_main(void)
60
void arch_pre_main(void)
56
{
61
{
57
    /* Setup usermode init tasks. */
62
    /* Setup usermode init tasks. */
-
 
63
 
-
 
64
#ifdef I460GX
-
 
65
    int i;
-
 
66
    init.cnt = bootinfo->taskmap.count;
-
 
67
    for(i=0;i<init.cnt;i++)
-
 
68
    {
-
 
69
        init.tasks[i].addr = ((unsigned long)bootinfo->taskmap.tasks[i].addr)|VRN_MASK;
-
 
70
        init.tasks[i].size = bootinfo->taskmap.tasks[i].size;
-
 
71
    }
-
 
72
#else   
58
    init.cnt = 8;
73
    init.cnt = 8;
59
    init.tasks[0].addr = INIT0_ADDRESS;
74
    init.tasks[0].addr = INIT0_ADDRESS;
60
    init.tasks[0].size = INIT0_SIZE;
75
    init.tasks[0].size = INIT0_SIZE;
61
    init.tasks[1].addr = INIT0_ADDRESS + 0x400000;
76
    init.tasks[1].addr = INIT0_ADDRESS + 0x400000;
62
    init.tasks[1].size = INIT0_SIZE;
77
    init.tasks[1].size = INIT0_SIZE;
Line 70... Line 85...
70
    init.tasks[5].size = INIT0_SIZE;
85
    init.tasks[5].size = INIT0_SIZE;
71
    init.tasks[6].addr = INIT0_ADDRESS + 0x1800000;
86
    init.tasks[6].addr = INIT0_ADDRESS + 0x1800000;
72
    init.tasks[6].size = INIT0_SIZE;
87
    init.tasks[6].size = INIT0_SIZE;
73
    init.tasks[7].addr = INIT0_ADDRESS + 0x1c00000;
88
    init.tasks[7].addr = INIT0_ADDRESS + 0x1c00000;
74
    init.tasks[7].size = INIT0_SIZE;
89
    init.tasks[7].size = INIT0_SIZE;
-
 
90
#endif
75
}
91
}
76
 
92
 
77
void arch_pre_mm_init(void)
93
void arch_pre_mm_init(void)
78
{
94
{
79
    /* Set Interruption Vector Address (i.e. location of interruption vector table). */
95
    /* Set Interruption Vector Address (i.e. location of interruption vector table). */
Line 99... Line 115...
99
 
115
 
100
void arch_pre_smp_init(void)
116
void arch_pre_smp_init(void)
101
{
117
{
102
}
118
}
103
 
119
 
-
 
120
 
-
 
121
#ifdef I460GX
-
 
122
#define POLL_INTERVAL       50000       /* 50 ms */
-
 
123
/** Kernel thread for polling keyboard. */
-
 
124
static void i8042_kkbdpoll(void *arg)
-
 
125
{
-
 
126
    while (1) {
-
 
127
        i8042_poll();
-
 
128
        thread_usleep(POLL_INTERVAL);
-
 
129
    }
-
 
130
}
-
 
131
#endif
-
 
132
 
104
void arch_post_smp_init(void)
133
void arch_post_smp_init(void)
105
{
134
{
106
 
135
 
107
    if (config.cpu_active == 1) {
136
    if (config.cpu_active == 1) {
108
        /*
137
        /*
Line 113... Line 142...
113
        t = thread_create(kkbdpoll, NULL, TASK, 0, "kkbdpoll", true);
142
        t = thread_create(kkbdpoll, NULL, TASK, 0, "kkbdpoll", true);
114
        if (!t)
143
        if (!t)
115
            panic("cannot create kkbdpoll\n");
144
            panic("cannot create kkbdpoll\n");
116
        thread_ready(t);
145
        thread_ready(t);
117
#endif      
146
#endif      
-
 
147
 
-
 
148
#ifdef I460GX
-
 
149
        devno_t kbd = device_assign_devno();
-
 
150
        devno_t mouse = device_assign_devno();
-
 
151
        /* keyboard controller */
-
 
152
        i8042_init(kbd, IRQ_KBD, mouse, IRQ_MOUSE);
-
 
153
 
-
 
154
        thread_t *t;
-
 
155
        t = thread_create(i8042_kkbdpoll, NULL, TASK, 0, "kkbdpoll", true);
-
 
156
        if (!t)
-
 
157
            panic("cannot create kkbdpoll\n");
-
 
158
        thread_ready(t);
-
 
159
 
-
 
160
#endif
-
 
161
 
118
    }
162
    }
119
}
163
}
120
 
164
 
121
/** Enter userspace and never return. */
165
/** Enter userspace and never return. */
122
void userspace(uspace_arg_t *kernel_uarg)
166
void userspace(uspace_arg_t *kernel_uarg)