// PS/2 driver internals shared by the package entry point and i8042 controller code. #pragma once #include #include #include #include #include #include #include #include #include #define PS2_DATA 0x60u #define PS2_STAT 0x64u #define PS2_CMD 0x64u #define PS2_STAT_OUT_FULL 0x01u #define PS2_STAT_IN_FULL 0x02u #define PS2_STAT_AUX_DATA 0x20u #define PS2_IRQ_KEYBOARD 1u #define PS2_IRQ_MOUSE 12u #define SC1_BREAK_BIT 0x80u #define SC1_MAKE_MASK 0x7Fu #define SC1_EXT_PREFIX 0xE0u #define KEYBOARD_DPC_QUEUE_SIZE 64u #define KEYBOARD_DPC_QUEUE_MASK (KEYBOARD_DPC_QUEUE_SIZE - 1u) #define MOUSE_DPC_QUEUE_SIZE 64u #define MOUSE_DPC_QUEUE_MASK (MOUSE_DPC_QUEUE_SIZE - 1u) typedef struct PS2_MOUSE_PACKET { int32_t dx; int32_t dy; uint8_t buttons; } PS2_MOUSE_PACKET; void Ps2Pause(void); void Ps2WaitInput(void); bool Ps2WaitOutput(void); void Ps2FlushOutput(void); uint8_t Ps2ReadData(void); void Ps2WriteCommand(uint8_t command); void Ps2WriteData(uint8_t data); uint8_t Ps2ReadCommandByte(void); void Ps2WriteCommandByte(uint8_t commandByte); bool Ps2SendKeyboard(uint8_t byte); bool Ps2SendMouse(uint8_t byte);