aboutsummaryrefslogtreecommitdiff
path: root/kernel/inc/drivers/ps2.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/inc/drivers/ps2.h')
-rw-r--r--kernel/inc/drivers/ps2.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/kernel/inc/drivers/ps2.h b/kernel/inc/drivers/ps2.h
new file mode 100644
index 0000000..5db8b57
--- /dev/null
+++ b/kernel/inc/drivers/ps2.h
@@ -0,0 +1,59 @@
+// MIT License, Copyright (c) 2021 Marvin Borner
+
+#ifndef PS2_H
+#define PS2_H
+
+#include <def.h>
+
+#define PS2_ACK 0xfa
+#define PS2_RESEND 0xfe
+
+#define PS2_TYPE_STANDARD_MOUSE 0x0000
+#define PS2_TYPE_WHEEL_MOUSE 0x0003
+#define PS2_TYPE_BUTTON_MOUSE 0x0004
+#define PS2_TYPE_TRANSLATION_KEYBOARD1 0xab41
+#define PS2_TYPE_TRANSLATION_KEYBOARD2 0xabc1
+#define PS2_TYPE_STANDARD_KEYBOARD 0xab83
+
+#define PS2_KEYBOARD(type) \
+ ((type) == PS2_TYPE_TRANSLATION_KEYBOARD1 || (type) == PS2_TYPE_TRANSLATION_KEYBOARD2 || \
+ (type) == PS2_TYPE_STANDARD_KEYBOARD)
+#define PS2_MOUSE(type) \
+ ((type) == PS2_TYPE_STANDARD_MOUSE || (type) == PS2_TYPE_WHEEL_MOUSE || \
+ (type) == PS2_TYPE_BUTTON_MOUSE)
+
+struct ps2_status {
+ u8 in_full : 1;
+ u8 out_full : 1;
+ u8 system : 1;
+ u8 command : 1;
+ u8 reserved : 2;
+ u8 error_time : 1;
+ u8 error_parity : 1;
+};
+
+struct ps2_config {
+ u8 first_int : 1;
+ u8 second_int : 1;
+ u8 running : 1;
+ u8 zero1 : 1;
+ u8 first_clock_disabled : 1;
+ u8 second_clock_disabled : 1;
+ u8 first_translation : 1;
+ u8 zero2 : 1;
+};
+
+u8 ps2_read_data(void);
+u8 ps2_write_data(u8 byte);
+u8 ps2_write_device(u8 device, u8 data);
+
+void ps2_detect(void);
+u8 ps2_keyboard_detect(void);
+u8 ps2_mouse_detect(void);
+void ps2_mouse_enable(u8 device);
+void ps2_mouse_install(u8 device);
+
+void ps2_keyboard_reset(void);
+void ps2_keyboard_install(u8 device);
+
+#endif