53 lines
1.3 KiB
C
53 lines
1.3 KiB
C
// PS/2 driver internals shared by the package entry point and i8042 controller code.
|
|
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include <intrin.h>
|
|
|
|
#include <ntlite/status.h>
|
|
#include <ntlite/ddk/ddk.h>
|
|
#include <ntlite/ddi/input_device.h>
|
|
#include <ntlite/ddk/debug.h>
|
|
#include <ntlite/ddk/interrupt.h>
|
|
#include <ntlite/ddk/dpc.h>
|
|
|
|
#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);
|