summaryrefslogtreecommitdiff
path: root/sys/arch/i386/netboot/dp8390.h
blob: 2436d729bc7474436611ae8471894aa3b6a6315b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/*	$NetBSD: dp8390.h,v 1.3 1994/10/27 04:21:11 cgd Exp $	*/

/*
 * source in this file came from
 * the Mach ethernet boot written by Leendert van Doorn.
 *
 * National Semiconductor DP8390 Network Interface Controller
 */

/* page 0: for reading */
#define DP_CR		0x00	/* read side of command register */
#define DP_CLDA0	0x01	/* current local DMA address 0 */
#define DP_CLDA1	0x02	/* current local DMA address 1 */
#define DP_BNRY		0x03	/* boundary pointer */
#define DP_TSR		0x04	/* transmit status register */
#define DP_NCR		0x05	/* number of collisions register */
#define DP_FIFO		0x06	/* FIFO */
#define DP_ISR		0x07	/* interrupt status register */
#define DP_CRDA0	0x08	/* current remote DMA address 0 */
#define DP_CRDA1	0x09	/* current remote DMA address 1 */
#define DP_RSR		0x0C	/* receive status register */
#define DP_CNTR0	0x0D	/* tally counter 0 */
#define DP_CNTR1	0x0E	/* tally counter 1 */
#define DP_CNTR2	0x0F	/* tally counter 2 */

/* page 0: for writing */
#define DP_CR		0x00	/* write side of command register */
#define DP_PSTART	0x01	/* page start register */
#define DP_PSTOP	0x02	/* page stop register */
#define DP_BNRY		0x03	/* boundary pointer */
#define DP_TPSR		0x04	/* transmit page start register */
#define DP_TBCR0	0x05	/* transmit byte count register 0 */
#define DP_TBCR1	0x06	/* transmit byte count register 1 */
#define DP_ISR		0x07	/* interrupt status register */
#define DP_RSAR0	0x08	/* remote start address register 0 */
#define DP_RSAR1	0x09	/* remote start address register 1 */
#define DP_RBCR0	0x0A	/* remote byte count register 0 */
#define DP_RBCR1	0x0B	/* remote byte count register 1 */
#define DP_RCR		0x0C	/* receive configuration register */
#define DP_TCR		0x0D	/* transmit configuration register */
#define DP_DCR		0x0E	/* data configuration register */
#define DP_IMR		0x0F	/* interrupt mask register */

/* page 1: read/write */
#define DP_CR		0x00	/* command register */
#define DP_PAR0		0x01	/* physical address register 0 */
#define DP_PAR1		0x02	/* physical address register 1 */
#define DP_PAR2		0x03	/* physical address register 2 */
#define DP_PAR3		0x04	/* physical address register 3 */
#define DP_PAR4		0x05	/* physical address register 4 */
#define DP_PAR5		0x06	/* physical address register 5 */
#define DP_CURR		0x07	/* current page register */
#define DP_MAR0		0x08	/* multicast address register 0 */
#define DP_MAR1		0x09	/* multicast address register 1 */
#define DP_MAR2		0x0A	/* multicast address register 2 */
#define DP_MAR3		0x0B	/* multicast address register 3 */
#define DP_MAR4		0x0C	/* multicast address register 4 */
#define DP_MAR5		0x0D	/* multicast address register 5 */
#define DP_MAR6		0x0E	/* multicast address register 6 */
#define DP_MAR7		0x0F	/* multicast address register 7 */

/* bits in command register */
#define CR_STP		0x01		/* stop: software reset */
#define CR_STA		0x02		/* start: activate NIC */
#define CR_TXP		0x04		/* transmit packet */
#define CR_DMA		0x38		/* mask for DMA control */
#   define CR_DM_NOP	    0x00	/* DMA: no operation */
#   define CR_DM_RR	    0x08	/* DMA: remote read */
#   define CR_DM_RW	    0x10	/* DMA: remote write */
#   define CR_DM_SP	    0x18	/* DMA: send packet */
#   define CR_DM_ABORT	    0x20	/* DMA: abort remote DMA operation */
#define CR_PS		0xC0		/* mask for page select */
#   define CR_PS_P0	    0x00	/* register page 0 */
#   define CR_PS_P1	    0x40	/* register page 1 */
#   define CR_PS_T0	    0x80	/* test mode register map */
#   define CR_SP_T1	    0xC0	/* test mode register map */

/* bits in interrupt status register */
#define ISR_PRX		0x01		/* packet received with no errors */
#define ISR_PTX		0x02		/* packet transmitted with no errors */
#define ISR_RXE		0x04		/* receive error */
#define ISR_TXE		0x08		/* transmit error */
#define ISR_OVW		0x10		/* overwrite warning */
#define ISR_CNT		0x20		/* counter overflow */
#define ISR_RDC		0x40		/* remote DMA complete */
#define ISR_RST		0x80		/* reset status */

/* bits in interrupt mask register */
#define IMR_PRXE	0x01		/* packet received ienable */
#define IMR_PTXE	0x02		/* packet transmitted ienable */
#define IMR_RXEE	0x04		/* receive error ienable */
#define IMR_TXEE	0x08		/* transmit error ienable */
#define IMR_OVWE	0x10		/* overwrite warning ienable */
#define IMR_CNTE	0x20		/* counter overflow ienable */
#define IMR_RDCE	0x40		/* DMA complete ienable */

/* bits in data control register */
#define DCR_WTS		0x01		/* word transfer select */
#   define DCR_BYTEWIDE	0x00		/* WTS: byte wide transfers */
#   define DCR_WORDWIDE	0x01		/* WTS: word wide transfers */
#define DCR_BOS		0x02		/* byte order select */
#   define DCR_LTLENDIAN     0x00	/* BOS: little endian */
#   define DCR_BIGENDIAN     0x02	/* BOS: big endian */
#define DCR_LAS		0x04		/* long address select */
#define DCR_BMS		0x08		/* burst mode select */
#define DCR_AR		0x10		/* autoinitialize remote */
#define DCR_FTS		0x60		/* FIFO threshold select */
#   define DCR_2BYTES	    0x00	/* 2 bytes */
#   define DCR_4BYTES	    0x40	/* 4 bytes */
#   define DCR_8BYTES	    0x20	/* 8 bytes */
#   define DCR_12BYTES	    0x60	/* 12 bytes */

/* bits in transmit configuration register */
#define TCR_CRC		0x01		/* inhibit CRC */
#define TCR_ELC		0x06		/* encoded loopback control */
#   define TCR_NORMAL	    0x00	/* ELC: normal operation */
#   define TCR_INTERNAL	    0x02	/* ELC: internal loopback */
#   define TCR_0EXTERNAL    0x04	/* ELC: external loopback LPBK=0 */
#   define TCR_1EXTERNAL    0x06	/* ELC: external loopback LPBK=1 */
#define TCR_ATD		0x08		/* auto transmit */
#define TCR_OFST	0x10		/* collision offset enable (be nice) */

/* bits in transmit status register */
#define TSR_PTX		0x01		/* packet transmitted (without error)*/
#define TSR_DFR		0x02		/* transmit deferred */
#define TSR_COL		0x04		/* transmit collided */
#define TSR_ABT		0x08		/* transmit aborted */
#define TSR_CRS		0x10		/* carrier sense lost */
#define TSR_FU		0x20		/* fifo underrun */
#define TSR_CDH		0x40		/* CD heartbeat */
#define TSR_OWC		0x80		/* out of window collision */

/* bits in receive configuration register */
#define RCR_SEP		0x01		/* save errored packets */
#define RCR_AR		0x02		/* accept runt packets */
#define RCR_AB		0x04		/* accept broadcast */
#define RCR_AM		0x08		/* accept multicast */
#define RCR_PRO		0x10		/* physical promiscuous */
#define RCR_MON		0x20		/* monitor mode */

/* bits in receive status register */
#define RSR_PRX		0x01		/* packet received intact */
#define RSR_CRC		0x02		/* CRC error */
#define RSR_FAE		0x04		/* frame alignment error */
#define RSR_FO		0x08		/* FIFO overrun */
#define RSR_MPA		0x10		/* missed packet */
#define RSR_PHY		0x20		/* multicast address match !! */
#define RSR_DIS		0x40		/* receiver disabled */

/* dp8390 configuration information */
typedef struct {
    u_short	dc_reg;			/* dp8390 base address */
    u_long	dc_mem;			/* base memory */
    u_char	dc_tpsr;		/* transmit start page */
    u_char	dc_pstart;		/* receive start page */
    u_char	dc_pstop;		/* receive end page */
} dpconf_t;


/* dp8390 receive header */
typedef struct {
    u_char	dh_status;		/* copy of rsr */
    u_char	dh_next;		/* pointer to next packet */
    u_char	dh_rbcl;		/* receive byte count low */
    u_char	dh_rbch;		/* receive byte count high */
} dphdr_t;