diff --git a/kernel/parallel.h b/kernel/parallel.h new file mode 100644 index 0000000..1f45070 --- /dev/null +++ b/kernel/parallel.h @@ -0,0 +1,40 @@ +#ifndef PARALLEL_H +#define PARALLEL_H + +#include +#include + +typedef enum { + LPT_PORT_NONE = -1, + LPT1_PORT = 0, + LPT2_PORT = 1, + LPT_MAX_PORTS = 2 +} lpt_port_t; + +typedef enum { + LPT_MODE_COMPAT = 0, // Standard (SPP) + LPT_MODE_BIDIR, // PS/2 bidirectional + LPT_MODE_EPP, // IEEE 1284 EPP + LPT_MODE_ECP // IEEE 1284 ECP +} lpt_mode_t; + +typedef struct { + uint16_t base; // Base I/O address (e.g., 0x378, 0x278) + bool present; // Detected + lpt_mode_t mode; // Current mode + uint8_t irq; // IRQ line (if known/used) +} lpt_device_t; + +extern lpt_device_t lpt_devices[LPT_MAX_PORTS]; + +void lpt_init_all(void); +void lpt_set_mode(lpt_port_t port, lpt_mode_t mode); + +// Simple polled I/O +void lpt_write_byte(lpt_port_t port, uint8_t value); +uint8_t lpt_read_byte(lpt_port_t port); + +// IRQ-driven hook (you implement the handler logic) +void lpt_irq_handler(lpt_port_t port); + +#endif