void
intr_ps2_kbd_handler(const isr_param* param);
-static uint8_t
-ps2_issue_cmd_wretry(char cmd, uint16_t arg);
+static u8_t
+ps2_issue_cmd_wretry(char cmd, u16_t arg);
void
ps2_device_post_cmd(char cmd, char arg)
*/
isrm_bindirq(PC_AT_IRQ_KBD, intr_ps2_kbd_handler);
-done:
cpu_enable_interrupt();
}
// 处理队列排头的指令
struct ps2_cmd* pending_cmd = &cmd_q.cmd_queue[cmd_q.queue_ptr];
- char result;
+ u8_t result;
int attempts = 0;
// 尝试将命令发送至PS/2键盘(通过PS/2控制器)
}
void
-kbd_buffer_key_event(kbd_keycode_t key, uint8_t scancode, kbd_kstate_t state)
+kbd_buffer_key_event(kbd_keycode_t key, u8_t scancode, kbd_kstate_t state)
{
/*
forgive me on these ugly bit-level tricks,
// check. But DO NOT. This chunk is in right place and right order. Moving
// it at your own risk This is to ensure we've cleared the output buffer
// everytime, so it won't pile up across irqs.
- uint8_t scancode = io_inb(PS2_PORT_ENC_DATA);
+ u8_t scancode = io_inb(PS2_PORT_ENC_DATA);
kbd_keycode_t key;
/*
}
}
-static uint8_t
-ps2_issue_cmd(char cmd, uint16_t arg)
+static u8_t
+ps2_issue_cmd(char cmd, u16_t arg)
{
ps2_post_cmd(PS2_PORT_CTRL_CMDREG, cmd, arg);
return io_inb(PS2_PORT_ENC_CMDREG);
}
-static uint8_t
-ps2_issue_cmd_wretry(char cmd, uint16_t arg)
+static u8_t
+ps2_issue_cmd_wretry(char cmd, u16_t arg)
{
- uint8_t r, c = 0;
+ u8_t r, c = 0;
while ((r = ps2_issue_cmd(cmd, arg)) == PS2_RESULT_NAK && c < 5) {
c++;
}
}
static void
-ps2_post_cmd(uint8_t port, char cmd, uint16_t arg)
+ps2_post_cmd(u8_t port, char cmd, u16_t arg)
{
// 等待PS/2输入缓冲区清空,这样我们才可以写入命令
while (io_inb(PS2_PORT_CTRL_STATUS) & PS2_STATUS_IFULL)
// 所有参数一律通过0x60传入。
while (io_inb(PS2_PORT_CTRL_STATUS) & PS2_STATUS_IFULL)
;
- io_outb(PS2_PORT_ENC_CMDREG, (uint8_t)(arg & 0x00ff));
+ io_outb(PS2_PORT_ENC_CMDREG, (u8_t)(arg & 0x00ff));
io_delay(PS2_DELAY);
}
}
-static uint8_t
-ps2_issue_dev_cmd(char cmd, uint16_t arg)
+static u8_t
+ps2_issue_dev_cmd(char cmd, u16_t arg)
{
ps2_post_cmd(PS2_PORT_ENC_CMDREG, cmd, arg);