ps2: don't wait forever on machines with no controller

This commit is contained in:
Matheus
2026-05-12 22:18:42 -03:00
parent 62f8b8cddc
commit 3fda97332f
3 changed files with 23 additions and 2 deletions
+7 -1
View File
@@ -132,7 +132,13 @@ bool ps2_init_device(int port, bool *mouse) {
void arch_ps2_init() {
// XXX actually check if the controller is there
ps2_write_command(PS2_CTLR_CMD_DISABLEP1);
bool t;
ps2_write_command_timeout(PS2_CTLR_CMD_DISABLEP1, 10, &t);
if (t) {
printf("ps2: no controller on this machine\n");
return;
}
ps2_write_command(PS2_CTLR_CMD_DISABLEP2);
// just to make sure
+15
View File
@@ -63,6 +63,21 @@ static inline void ps2_write_command(uint8_t cmd) {
outb(PS2_PORT_COMMAND, cmd);
}
static inline void ps2_write_command_timeout(uint8_t cmd, int ms, bool *timeout) {
timespec_t initial = timekeeper_timefromboot();
while (ps2_inbuffer_full()) {
timespec_t current = timekeeper_timefromboot();
if (timespec_diffms(initial, current) >= ms) {
*timeout = true;
return;
}
}
*timeout = false;
outb(PS2_PORT_COMMAND, cmd);
}
static inline void ps2_write_data(uint8_t cmd) {
while (ps2_inbuffer_full());
outb(PS2_PORT_DATA, cmd);
+1 -1
View File
@@ -1,5 +1,5 @@
name=astral
revision=1
revision=2
from_source=astral
imagedeps="build-essential nasm"
hostdeps="xgcc xbinutils limine"