| "Descrizione" by RS232 (2002 pt) | 2026-Jan-29 16:05 |
LANCE (Local Area Network Controller for Ethernet)
Definizione
LANCE, è un controller MAC Ethernet 10 Mb/s progettato per collegare un sistema (CPU + RAM) a una rete IEEE 802.3/Ethernet delegando al chip le funzioni “ripetitive e time-critical” del livello 2: gestione del CSMA/CD, incapsulamento dei frame, calcolo/verifica CRC, gestione collisioni/retry, filtraggio indirizzi, e soprattutto trasferimenti dati tramite DMA usando ring di descrittori in memoria.
È importante distinguere il perimetro funzionale: ad esempio, l’Am7990 è un MAC/controller e, nella configurazione classica, richiede componenti esterni per la parte fisica (codifica Manchester/AUI o transceiver), tipicamente tramite un “companion” come un Serial Interface Adapter (SIA) e relativa interfaccia di linea.

In una scheda Ethernet “vintage”, senza un controller come LANCE la CPU dovrebbe copiare i dati, costruire frame, gestire collisioni e temporizzazioni. Con LANCE il modello diventa:
La CPU prepara strutture (buffer e descrittori) in RAM.
L’Am7990 trasferisce i dati con DMA, aggiorna gli stati in RAM e genera interrupt.
La CPU si limita a orchestrarne il flusso (inizializzazione, refill dei buffer RX, coda TX, gestione eventi).
Il funzionamento ruota attorno a tre strutture principali in RAM:
Initialization block: configurazione (indirizzo MAC, modalità, puntatori ai ring, ecc.).
Receive descriptor ring: descrittori RX che puntano a buffer pronti a essere riempiti dal chip.
Transmit descriptor ring: descrittori TX che puntano ai buffer da trasmettere.
Ogni descrittore include un concetto fondamentale: un bit di ownership (spesso indicato come OWN) che stabilisce se il buffer/descrittore è “di proprietà” del controller (che può scriverci/leggerci) o dell’host (che può riutilizzarlo o modificarlo).
Il driver alloca N buffer RX e prepara N descrittori nel ring RX, impostando OWN=1 (controller).
Quando arriva un frame valido, il LANCE lo deposita via DMA nel/i buffer puntati dai descrittori, aggiorna lunghezza e flag (errori, CRC, framing, overflow, ecc.), poi restituisce la proprietà (OWN=0) e, se abilitato, genera interrupt.
Il driver legge i descrittori completati, consegna il pacchetto allo stack, ripristina il descrittore (nuovo buffer o stesso buffer “riciclato”) e rimette OWN=1.
Il driver prepara un descrittore TX con puntatore al buffer contenente l’intero frame (o una catena di buffer), imposta i flag “start/end of packet” (tipicamente STP/ENP) e cede la proprietà al controller (OWN=1).
Il LANCE preleva i dati via DMA, trasmette sul mezzo secondo CSMA/CD, aggiorna gli stati (successo, collisioni, retry, underrun, ecc.), poi restituisce OWN=0 e segnala completamento.
Funzioni tipiche della classe LANCE includono:
Filtro su indirizzo fisico (MAC) e gestione multicast (con meccanismi di filtro dipendenti dalla configurazione).
Contatori/statistiche e flag di errore in descrittori e registri di stato.
Funzioni di test/diagnostica come TDR (time-domain reflectometer) per individuare discontinuità sul cavo in alcune configurazioni.
┌──────────────────────────────┐ │ CPU / host │ │ driver + gestione buffer │ └──────────────┬───────────────┘ │ bus host (I/O o memory-mapped) │ + IRQ + reset ▼ ┌─────────────────┐ │ AMD Am7990 │ │ LANCE (MAC) │ │ DMA + ring desc │ └──────┬──────────┘ │ DMA verso RAM ▼ ┌──────────────────────────────┐ │ RAM condivisa │ │ - initialization block │ │ - RX descriptor ring + buf │ │ - TX descriptor ring + buf │ └──────────────────────────────┘ │ ▼ ┌───────────────────────────────┐ │ SIA / ENDEC + transceiver │ │ (codifica Manchester + linea) │ └──────────────┬────────────────┘ ▼ Ethernet (AUI/10Mb)
| Parametro (IT) | Valore indicativo (IT) | English (EN) |
|---|---|---|
| Dispositivo | AMD Am7990 “LANCE” | Device: AMD Am7990 “LANCE” |
| Ruolo | Controller MAC Ethernet 10 Mb/s con DMA | Role: 10 Mb/s Ethernet MAC controller with DMA |
| Strutture chiave in RAM | Initialization block + ring RX + ring TX | Key RAM objects: init block + RX ring + TX ring |
| Gestione buffer | Descrittori con ownership (OWN) | Buffer mgmt: descriptors with ownership (OWN) |
| Interfaccia fisica | Richiede componenti esterni (SIA/ENDEC + transceiver) | PHY side: requires external SIA/ENDEC + transceiver |
| Notifica eventi | Interrupt su RX/TX/errori | Eventing: interrupts for RX/TX/errors |
| Struttura (IT) | Scopo operativo (IT) | Operational purpose (EN) |
|---|---|---|
| Initialization block | Parametri iniziali: MAC, modalità, puntatori ai ring | Startup parameters: MAC, modes, ring pointers |
| RX descriptor (RMD) | Puntatore buffer RX + flag (OWN, STP/ENP) + stato/errori | RX buffer pointer + flags (OWN, STP/ENP) + status/errors |
| TX descriptor (TMD) | Puntatore buffer TX + flag (OWN, STP/ENP) + esito invio | TX buffer pointer + flags (OWN, STP/ENP) + completion result |
| Ring management | Avanzamento circolare con indici/ptr, refill buffer lato host | Circular walk with indices/pointers, host refills buffers |
| Status/interrupt | Bit di stato in RAM/registri per completamento ed errori | Status bits in RAM/registers for completion and errors |
| Evaluate |