Files
nt-lite/code/drivers/input/ps2/ps2.h
T

50 lines
1.1 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/ddi/hal_api.h>
#include <ntlite/ddi/input_device.h>
#include <kernel/ke_debug.h>
#include <kernel/ke_irq.h>
#include <kernel/ke_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_IRQ_KEYBOARD 1u
#define PS2_IRQ_MOUSE 12u
#define SC1_BREAK_BIT 0x80u
#define SC1_MAKE_MASK 0x7Fu
#define SC1_EXT_PREFIX 0xE0u
#define MOUSE_DPC_QUEUE_SIZE 64u
#define MOUSE_DPC_QUEUE_MASK (MOUSE_DPC_QUEUE_SIZE - 1u)
typedef struct PS2_MOUSE_PACKET {
int dx;
int 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);