Subversion Repositories HelenOS

Rev

Rev 1874 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1874 Rev 1939
Line 40... Line 40...
40
#include <ipc/ipc.h>
40
#include <ipc/ipc.h>
41
#include <unistd.h>
41
#include <unistd.h>
42
#include <kbd.h>
42
#include <kbd.h>
43
#include <keys.h>
43
#include <keys.h>
44
#include <genarch/kbd.h>
44
#include <genarch/kbd.h>
-
 
45
#include <sysinfo.h>
45
 
46
 
46
/* Interesting bits for status register */
47
/* Interesting bits for status register */
47
#define i8042_OUTPUT_FULL  0x1
48
#define i8042_OUTPUT_FULL  0x1
48
#define i8042_INPUT_FULL   0x2
49
#define i8042_INPUT_FULL   0x2
49
#define i8042_MOUSE_DATA   0x20
50
#define i8042_MOUSE_DATA   0x20
Line 123... Line 124...
123
    }
124
    }
124
    if (mouseanswer == MOUSE_ACK) {
125
    if (mouseanswer == MOUSE_ACK) {
125
        /* enable mouse */
126
        /* enable mouse */
126
        mouseenabled = 1;
127
        mouseenabled = 1;
127
 
128
       
128
        ipc_register_irq(MOUSE_IRQ, &i8042_kbd);
129
        ipc_register_irq(sysinfo_value("mouse.inr"), sysinfo_value("mouse.devno"), 0, &i8042_kbd);
129
    }
130
    }
130
    /* Enable kbd */
131
    /* Enable kbd */
131
    ipc_register_irq(KBD_IRQ, &i8042_kbd);
132
    ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &i8042_kbd);
132
    /* Register for irq restart */
-
 
133
    ipc_register_irq(IPC_IRQ_KBDRESTART, NULL);
-
 
134
 
133
 
135
    int newcontrol = i8042_KBD_IE | i8042_KBD_TRANSLATE;
134
    int newcontrol = i8042_KBD_IE | i8042_KBD_TRANSLATE;
136
    if (mouseenabled)
135
    if (mouseenabled)
137
        newcontrol |= i8042_MOUSE_IE;
136
        newcontrol |= i8042_MOUSE_IE;
138
   
137
   
Line 147... Line 146...
147
/** Process keyboard & mouse events */
146
/** Process keyboard & mouse events */
148
int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call)
147
int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call)
149
{
148
{
150
    int status = IPC_GET_ARG1(*call);
149
    int status = IPC_GET_ARG1(*call);
151
 
150
 
152
    if (IPC_GET_METHOD(*call) == IPC_IRQ_KBDRESTART) {
-
 
153
        kbd_arch_init();
-
 
154
        return 1;
-
 
155
    }
-
 
156
 
-
 
157
    if ((status & i8042_MOUSE_DATA))
151
    if ((status & i8042_MOUSE_DATA))
158
        return 0;
152
        return 0;
159
   
153
   
160
    int scan_code = IPC_GET_ARG2(*call);
154
    int scan_code = IPC_GET_ARG2(*call);
161
   
155