Subversion Repositories HelenOS

Rev

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

Rev 3674 Rev 4342
Line 35... Line 35...
35
 *
35
 *
36
 * It takes care of low-level keyboard functions.
36
 * It takes care of low-level keyboard functions.
37
 */
37
 */
38
 
38
 
39
#include <genarch/kbd/i8042.h>
39
#include <genarch/kbd/i8042.h>
40
#ifdef ia64
-
 
41
#include <arch/drivers/kbd.h>
40
#include <arch/drivers/kbd.h>
42
#endif
-
 
43
#include <genarch/kbd/key.h>
41
#include <genarch/kbd/key.h>
44
#include <genarch/kbd/scanc.h>
42
#include <genarch/kbd/scanc.h>
45
#include <genarch/kbd/scanc_pc.h>
43
#include <genarch/kbd/scanc_pc.h>
46
#include <arch/drivers/i8042.h>
44
#include <arch/drivers/i8042.h>
47
#include <cpu.h>
45
#include <cpu.h>
Line 169... Line 167...
169
    i8042_mouse_irq.devno = mouse_devno;
167
    i8042_mouse_irq.devno = mouse_devno;
170
    i8042_mouse_irq.inr = mouse_inr;
168
    i8042_mouse_irq.inr = mouse_inr;
171
    i8042_mouse_irq.claim = i8042_claim;
169
    i8042_mouse_irq.claim = i8042_claim;
172
    i8042_mouse_irq.handler = i8042_irq_handler;
170
    i8042_mouse_irq.handler = i8042_irq_handler;
173
    irq_register(&i8042_mouse_irq);
171
    irq_register(&i8042_mouse_irq);
174
#ifndef ia64    
172
   
175
    trap_virtual_enable_irqs(1 << kbd_inr);
173
    trap_virtual_enable_irqs(1 << kbd_inr);
176
    trap_virtual_enable_irqs(1 << mouse_inr);
174
    trap_virtual_enable_irqs(1 << mouse_inr);
177
#endif  
175
   
178
    /*
176
    /*
179
     * Clear input buffer.
177
     * Clear input buffer.
180
     * Number of iterations is limited to prevent infinite looping.
178
     * Number of iterations is limited to prevent infinite looping.
181
     */
179
     */
182
    int i;
180
    int i;
Line 187... Line 185...
187
    sysinfo_set_item_val("kbd", NULL, true);
185
    sysinfo_set_item_val("kbd", NULL, true);
188
    sysinfo_set_item_val("kbd.devno", NULL, kbd_devno);
186
    sysinfo_set_item_val("kbd.devno", NULL, kbd_devno);
189
    sysinfo_set_item_val("kbd.inr", NULL, kbd_inr);
187
    sysinfo_set_item_val("kbd.inr", NULL, kbd_inr);
190
#ifdef KBD_LEGACY
188
#ifdef KBD_LEGACY
191
    sysinfo_set_item_val("kbd.type", NULL, KBD_LEGACY);
189
    sysinfo_set_item_val("kbd.type", NULL, KBD_LEGACY);
192
#endif  
190
#endif
193
    sysinfo_set_item_val("mouse", NULL, true);
191
    sysinfo_set_item_val("mouse", NULL, true);
194
    sysinfo_set_item_val("mouse.devno", NULL, mouse_devno);
192
    sysinfo_set_item_val("mouse.devno", NULL, mouse_devno);
195
    sysinfo_set_item_val("mouse.inr", NULL, mouse_inr);
193
    sysinfo_set_item_val("mouse.inr", NULL, mouse_inr);
196
   
194
   
197
    i8042_grab();
195
    i8042_grab();
Line 207... Line 205...
207
{
205
{
208
}
206
}
209
 
207
 
210
char i8042_key_read(chardev_t *d)
208
char i8042_key_read(chardev_t *d)
211
{
209
{
212
    char ch;   
210
    char ch;
213
 
211
   
214
    while(!(ch = active_read_buff_read())) {
212
    while (!(ch = active_read_buff_read())) {
215
        uint8_t x;
213
        uint8_t x;
-
 
214
       
216
        while (!(i8042_status_read() & i8042_BUFFER_FULL_MASK))
215
        while (!(i8042_status_read() & i8042_BUFFER_FULL_MASK));
217
            ;
216
       
218
        x = i8042_data_read();
217
        x = i8042_data_read();
219
        if (x & KEY_RELEASE)
218
        if (x & KEY_RELEASE)
220
            key_released(x ^ KEY_RELEASE);
219
            key_released(x ^ KEY_RELEASE);
221
        else
220
        else
222
            active_read_key_pressed(x);
221
            active_read_key_pressed(x);
Line 229... Line 228...
229
 * This function can be used to implement keyboard polling.
228
 * This function can be used to implement keyboard polling.
230
 */
229
 */
231
void i8042_poll(void)
230
void i8042_poll(void)
232
{
231
{
233
    uint8_t x;
232
    uint8_t x;
234
 
233
   
235
    while (((x = i8042_status_read() & i8042_BUFFER_FULL_MASK))) {
234
    while (((x = i8042_status_read() & i8042_BUFFER_FULL_MASK))) {
236
        x = i8042_data_read();
235
        x = i8042_data_read();
237
        if (x & KEY_RELEASE)
236
        if (x & KEY_RELEASE)
238
            key_released(x ^ KEY_RELEASE);
237
            key_released(x ^ KEY_RELEASE);
239
        else
238
        else