Subversion Repositories HelenOS

Rev

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

Rev 3925 Rev 3961
Line 39... Line 39...
39
#include <sysinfo.h>
39
#include <sysinfo.h>
40
#include <kbd.h>
40
#include <kbd.h>
41
#include <kbd_port.h>
41
#include <kbd_port.h>
42
#include <sys/types.h>
42
#include <sys/types.h>
43
 
43
 
44
/** Top-half pseudocode for z8530. */
44
#define CHAN_A_STATUS   4
-
 
45
#define CHAN_A_DATA 6
-
 
46
 
-
 
47
#define RR0_RCA 1
-
 
48
 
45
irq_cmd_t z8530_cmds[] = {
49
static irq_cmd_t z8530_cmds[] = {
-
 
50
    {
-
 
51
        .cmd = CMD_PIO_READ_8,
-
 
52
        .addr = (void *) 0, /* will be patched in run-time */
-
 
53
        .dstarg = 1
-
 
54
    },
-
 
55
    {
-
 
56
        .cmd = CMD_BTEST,
-
 
57
        .value = RR0_RCA,
-
 
58
        .srcarg = 1,
-
 
59
        .dstarg = 3
-
 
60
    },
46
    {
61
    {
-
 
62
        .cmd = CMD_PREDICATE,
-
 
63
        .value = 2,
-
 
64
        .srcarg = 3
-
 
65
    },
-
 
66
    {
47
        CMD_MEM_READ_1,
67
        .cmd = CMD_PIO_READ_8,
48
        0,      /**< Address. Will be patched in run-time. */
68
        .addr = (void *) 0, /* will be patched in run-time */
49
        0,      /**< Value. Not used. */
69
        .dstarg = 2
-
 
70
    },
-
 
71
    {
50
        1       /**< Arg 1 will contain the result. */
72
        .cmd = CMD_ACCEPT
51
    }
73
    }
52
};
74
};
53
 
-
 
54
   
75
   
55
irq_code_t z8530_kbd = {
76
irq_code_t z8530_kbd = {
56
    1,
-
 
-
 
77
    sizeof(z8530_cmds) / sizeof(irq_cmd_t),
57
    z8530_cmds
78
    z8530_cmds
58
};
79
};
59
 
80
 
60
static void z8530_irq_handler(ipc_callid_t iid, ipc_call_t *call);
81
static void z8530_irq_handler(ipc_callid_t iid, ipc_call_t *call);
61
 
82
 
62
int kbd_port_init(void)
83
int kbd_port_init(void)
63
{
84
{
64
    async_set_interrupt_received(z8530_irq_handler);
85
    async_set_interrupt_received(z8530_irq_handler);
65
    z8530_cmds[0].addr = (void *) sysinfo_value("kbd.address.virtual") + 6;
86
    z8530_cmds[0].addr = (void *) sysinfo_value("kbd.address.virtual") +
-
 
87
        CHAN_A_STATUS;
-
 
88
    z8530_cmds[3].addr = (void *) sysinfo_value("kbd.address.virtual") +
-
 
89
        CHAN_A_DATA;
66
    ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"),
90
    ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"),
67
        0, &z8530_kbd);
91
        0, &z8530_kbd);
68
    return 0;
92
    return 0;
69
}
93
}
70
 
94
 
71
static void z8530_irq_handler(ipc_callid_t iid, ipc_call_t *call)
95
static void z8530_irq_handler(ipc_callid_t iid, ipc_call_t *call)
72
{
96
{
73
    int scan_code = IPC_GET_ARG1(*call);
97
    int scan_code = IPC_GET_ARG2(*call);
74
    kbd_push_scancode(scan_code);
98
    kbd_push_scancode(scan_code);
75
}
99
}
76
 
100
 
77
/** @}
101
/** @}
78
 */
102
 */