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:
AI
2026-02-24 07:12:05 +00:00
parent f87a4e3101
commit 35bce963be
5 changed files with 592 additions and 2 deletions

View File

@@ -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;
}