Implement 3C509B (EtherLink III) ISA Ethernet NIC driver (AI)
- Created src/e3c509.h: full windowed register model (8 windows), command codes, status/interrupt bits, RX filter, transceiver types, device struct and API declarations - Created src/e3c509.c: full driver implementation with PIO TX/RX, window selection, 10base-T (RJ45) transceiver config, MAC address read from Window 2, FIFO-based packet send/receive, IRQ handler, devicefs char device registration as 'eth' class - Probe uses manufacturer ID check (0x6D50 at Window 0) - Only 10base-T supported per design requirements - Wired IRQ 10 (vector 42) handler into isr.c - QEMU does not emulate 3C509 ISA, so driver correctly probes 'not found' in QEMU; tested alongside NE2000 without issues
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#include "keyboard.h"
|
||||
#include "floppy.h"
|
||||
#include "ne2000.h"
|
||||
#include "e3c509.h"
|
||||
#include <stdint.h>
|
||||
|
||||
/* Forward declaration for kernel panic or similar */
|
||||
@@ -72,6 +73,9 @@ void isr_handler(registers_t *regs)
|
||||
} else if (regs->int_no == 41) {
|
||||
/* NE2000 Ethernet IRQ (IRQ 9, vector 41) */
|
||||
ne2k_irq();
|
||||
} else if (regs->int_no == 42) {
|
||||
/* 3C509B Ethernet IRQ (IRQ 10, vector 42) */
|
||||
e3c509_irq();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user