]> git.dujemihanovic.xyz Git - nameless-os.git/blob - kernel/arch/x86/time/i8254.c
Add Intel 8254 driver and print elapsed seconds
[nameless-os.git] / kernel / arch / x86 / time / i8254.c
1 #include <time/i8254.h>
2
3 uint16_t reload;
4
5 void i8254_configure_channel(char channel, char opmode, uint16_t new_reload)
6 {
7 union mode_command command;
8
9 command.fields.bcd = 0;
10 command.fields.channel = channel;
11 command.fields.acmode = ACMODE_LSB_MSB;
12 command.fields.opmode = opmode;
13
14 outb(PORT_MODE_CMD_REG, command.command);
15
16 switch (channel) {
17 case 0:
18 outb(PORT_CHANNEL_0_DATA, new_reload & 0xff);
19 outb(PORT_CHANNEL_0_DATA, new_reload >> 8);
20 break;
21 case 1:
22 outb(PORT_CHANNEL_1_DATA, new_reload & 0xff);
23 outb(PORT_CHANNEL_1_DATA, new_reload >> 8);
24 break;
25 case 2:
26 outb(PORT_CHANNEL_2_DATA, new_reload & 0xff);
27 outb(PORT_CHANNEL_2_DATA, new_reload >> 8);
28 break;
29 }
30
31 reload = new_reload;
32 }
33
34 void i8254_irq_enable()
35 {
36 pic_unmask(0);
37 }