blob: 4157bd8c908e841f173e594ac57d36fceafa773f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#include "ps2_ctrl.h"
#include <stdint.h>
#include <stdio.h>
#include <sys/io.h>
const uint8_t comm_port = 0x64; // r status register
// w command register
const uint8_t comm_enable_first_ps2 = 0xae;
const uint8_t comm_read_ctrl_config = 0x20;
const uint8_t comm_write_ctrl_config = 0x60;
const uint8_t data_port = 0x60; // rw
const uint8_t data_enable_scanning = 0xf4;
void
ps2_ctrl_init()
{
// eat all previous keystrikes
while (inb(comm_port) & 0x1) inb(data_port);
outb(0x64, 0xaa);
printf("8042: self test 0xaa: %x\n", inb(0x60));
outb(0x64, 0xab);
printf("8042: port1 test 0xab: %x\n", inb(0x60));
outb(0x64, 0xa9);
printf("8042: port2 test 0xa9: %x\n", inb(0x60));
// printf("8042: init keyboard\n");
outb(comm_port, comm_enable_first_ps2);
outb(comm_port, comm_read_ctrl_config);
const uint8_t conf = (inb(data_port) | 1) & ~0x10;
outb(comm_port, comm_write_ctrl_config);
outb(data_port, conf);
outb(data_port, data_enable_scanning);
}
unsigned char
ps2_ctrl_read()
{
return inb(0x60);
}
|