--- /dev/null
+#ifndef GEEKOS_NE2K_H
+#define GEEKOS_NE2K_H
+
+//#include <geekos/ktypes.h>
+#include <geekos/malloc.h>
+
+#define NE2K_PAGE0 0x00
+#define NE2K_PAGE1 0x40
+#define NE2K_PAGE2 0x80
+#define NE2K_PAGE3 0xc0
+
+#define NE2K_BASE_ADDR 0xc100 /* Starting address of the card */
+#define NE2K_CR NE2K_BASE_ADDR /* Command register */
+
+/* Page 0 register offsets */
+#define NE2K CLDA0 NE2K_CR + 0x01
+#define NE2K_PSTART NE2K_CR + 0x01
+#define NE2K_CLDA1 NE2K_CR + 0x02
+#define NE2K_PSTOP NE2K_CR + 0x02
+#define NE2K_BNRY NE2K_CR + 0x03
+#define NE2K_TSR NE2K_CR + 0x04
+#define NE2K_TPSR NE2K_CR + 0x04
+#define NE2K_NCR NE2K_CR + 0x05
+#define NE2K_TBCR0 NE2K_CR + 0x05
+#define NE2K_FIFO NE2K_CR + 0x06
+#define NE2K_TBCR1 NE2K_CR + 0x06
+#define NE2K_ISR NE2K_CR + 0x07 /* Interrupt status register */
+#define NE2K_CRDA0 NE2K_CR + 0x08
+#define NE2K_RSAR0 NE2K_CR + 0x08 /* Remote start address registers */
+#define NE2K_CRDA1 NE2K_CR + 0x09
+#define NE2K_RSAR1 NE2K_CR + 0x09
+#define NE2K_RBCR0 NE2K_CR + 0x0a /* Remote byte count registers */
+#define NE2K_RBCR1 NE2K_CR + 0x0b
+#define NE2K_RSR NE2K_CR + 0x0c
+#define NE2K_RCR NE2K_CR + 0x0c /* Receive configuration register */
+#define NE2K_CNTR0 NE2K_CR + 0x0d
+#define NE2K_TCR NE2K_CR + 0x0d /* Transmit configuration register */
+#define NE2K_CNTR1 NE2K_CR + 0x0e
+#define NE2K_DCR NE2K_CR + 0x0e /* Data configuration register */
+#define NE2K_CNTR2 NE2K_CR + 0x0f
+#define NE2K_IMR NE2K_CR + 0x0f /* Interrupt mask register */
+
+/* Page 1 register offsets */
+#define NE2K_PAR0 NE2K_CR + 0x01
+#define NE2K_PAR1 NE2K_CR + 0x02
+#define NE2K_PAR2 NE2K_CR + 0x03
+#define NE2K_PAR3 NE2K_CR + 0x04
+#define NE2K_PAR4 NE2K_CR + 0x05
+#define NE2K_PAR5 NE2K_CR + 0x06
+#define NE2K_CURR NE2K_CR + 0x07
+#define NE2K_MAR0 NE2K_CR + 0x08
+#define NE2K_MAR1 NE2K_CR + 0x09
+#define NE2K_MAR2 NE2K_CR + 0x0a
+#define NE2K_MAR3 NE2K_CR + 0x0b
+#define NE2K_MAR4 NE2K_CR + 0x0c
+#define NE2K_MAR5 NE2K_CR + 0x0d
+#define NE2K_MAR6 NE2K_CR + 0x0e
+#define NE2K_MAR7 NE2K_CR + 0x0f
+
+#define NE2K_IRQ 11 /* Interrupt channel */
+
+struct NE2K_REGS {
+ struct _CR * cr;
+ struct _ISR * isr;
+ struct _IMR * imr;
+ struct _DCR * dcr;
+ struct _TCR *tcr;
+ struct _TSR *tsr;
+ struct _RCR *rcr;
+ struct _RSR *rsr;
+};
+
+int Init_Ne2k();
+int NE2K_Transmit(struct NE2K_REGS *);
+int NE2K_Receive();
+
+#endif /* GEEKOS_NE2K_H */