113 lines
2.9 KiB
C
113 lines
2.9 KiB
C
/* $NetBSD: lance.h,v 1.2 2008/12/14 18:46:33 christos Exp $ */
|
|
|
|
/*
|
|
* source in this file came from
|
|
* the Mach ethernet boot written by Leendert van Doorn.
|
|
*/
|
|
|
|
/* RAP functions as a select for RDP */
|
|
#define RDP_CSR0 0
|
|
#define RDP_CSR1 1
|
|
#define RDP_CSR2 2
|
|
#define RDP_CSR3 3
|
|
|
|
/* contents of csr0 */
|
|
#define CSR_ERR 0x8000
|
|
#define CSR_BABL 0x4000
|
|
#define CSR_CERR 0x2000
|
|
#define CSR_MISS 0x1000
|
|
#define CSR_MERR 0x0800
|
|
#define CSR_RINT 0x0400
|
|
#define CSR_TINT 0x0200
|
|
#define CSR_IDON 0x0100
|
|
#define CSR_INTR 0x0080
|
|
#define CSR_INEA 0x0040
|
|
#define CSR_RXON 0x0020
|
|
#define CSR_TXON 0x0010
|
|
#define CSR_TDMD 0x0008
|
|
#define CSR_STOP 0x0004
|
|
#define CSR_STRT 0x0002
|
|
#define CSR_INIT 0x0001
|
|
|
|
/* csr1 contains low 16 bits of address of Initialization Block */
|
|
|
|
/* csr2 contains in low byte high 8 bits of address of InitBlock */
|
|
|
|
/* contents of csr3 */
|
|
#define CSR3_BSWP 0x04 /* byte swap (for big endian) */
|
|
#define CSR3_ACON 0x02 /* ALE control */
|
|
#define CSR3_BCON 0x01 /* byte control */
|
|
|
|
/*
|
|
* The initialization block
|
|
*/
|
|
typedef struct {
|
|
u_short ib_mode; /* modebits, see below */
|
|
char ib_padr[6]; /* physical 48bit Ether-address */
|
|
u_short ib_ladrf[4]; /* 64bit hashtable for "logical" addresses */
|
|
u_short ib_rdralow; /* low 16 bits of Receiver Descr. Ring addr */
|
|
u_char ib_rdrahigh; /* high 8 bits of Receiver Descr. Ring addr */
|
|
u_char ib_rlen; /* upper 3 bits are 2log Rec. Ring Length */
|
|
u_short ib_tdralow; /* low 16 bits of Transm. Descr. Ring addr */
|
|
u_char ib_tdrahigh; /* high 8 bits of Transm. Descr. Ring addr */
|
|
u_char ib_tlen; /* upper 3 bits are 2log Transm. Ring Length */
|
|
} initblock_t;
|
|
|
|
/* bits in mode */
|
|
#define IB_PROM 0x8000
|
|
#define IB_INTL 0x0040
|
|
#define IB_DRTY 0x0020
|
|
#define IB_COLL 0x0010
|
|
#define IB_DTCR 0x0008
|
|
#define IB_LOOP 0x0004
|
|
#define IB_DTX 0x0002
|
|
#define IB_DRX 0x0001
|
|
|
|
/*
|
|
* A receive message descriptor entry
|
|
*/
|
|
typedef struct {
|
|
u_short rmd_ladr; /* low 16 bits of bufaddr */
|
|
char rmd_hadr; /* high 8 bits of bufaddr */
|
|
char rmd_flags; /* see below */
|
|
short rmd_bcnt; /* two's complement of buffer byte count */
|
|
u_short rmd_mcnt; /* message byte count */
|
|
} rmde_t;
|
|
|
|
/* bits in flags */
|
|
#define RMD_OWN 0x80
|
|
#define RMD_ERR 0x40
|
|
#define RMD_FRAM 0x20
|
|
#define RMD_OFLO 0x10
|
|
#define RMD_CRC 0x08
|
|
#define RMD_BUFF 0x04
|
|
#define RMD_STP 0x02
|
|
#define RMD_ENP 0x01
|
|
|
|
/*
|
|
* A transmit message descriptor entry
|
|
*/
|
|
typedef struct {
|
|
u_short tmd_ladr; /* low 16 bits of bufaddr */
|
|
u_char tmd_hadr; /* high 8 bits of bufaddr */
|
|
u_char tmd_flags; /* see below */
|
|
short tmd_bcnt; /* two's complement of buffer byte count */
|
|
u_short tmd_err; /* more error bits + TDR */
|
|
} tmde_t;
|
|
|
|
/* bits in flags */
|
|
#define TMD_OWN 0x80
|
|
#define TMD_ERR 0x40
|
|
#define TMD_MORE 0x10
|
|
#define TMD_ONE 0x08
|
|
#define TMD_DEF 0x04
|
|
#define TMD_STP 0x02
|
|
#define TMD_ENP 0x01
|
|
|
|
/* bits in tmd_err */
|
|
#define TMDE_BUFF 0x8000
|
|
#define TMDE_UFLO 0x4000
|
|
#define TMDE_LCOL 0x1000
|
|
#define TMDE_LCAR 0x0800
|
|
#define TMDE_RTRY 0x0400
|
|
#define TMDE_TDR 0x003F /* mask for TDR */
|