|
|
1.1 root 1: /* netboot
2: *
3: * dp8390.h,v
4: * Revision 1.1 1993/07/08 16:03:56 brezak
5: * Diskless boot prom code from Jim McKim ([email protected])
6: *
7: * Revision 1.1.1.1 1993/05/28 11:41:07 mckim
8: * Initial version.
9: *
10: *
11: * source in this file came from
12: * the Mach ethernet boot written by Leendert van Doorn.
13: *
14: * National Semiconductor DP8390 Network Interface Controller
15: */
16:
17: /* page 0: for reading */
18: #define DP_CR 0x00 /* read side of command register */
19: #define DP_CLDA0 0x01 /* current local DMA address 0 */
20: #define DP_CLDA1 0x02 /* current local DMA address 1 */
21: #define DP_BNRY 0x03 /* boundary pointer */
22: #define DP_TSR 0x04 /* transmit status register */
23: #define DP_NCR 0x05 /* number of collisions register */
24: #define DP_FIFO 0x06 /* FIFO */
25: #define DP_ISR 0x07 /* interrupt status register */
26: #define DP_CRDA0 0x08 /* current remote DMA address 0 */
27: #define DP_CRDA1 0x09 /* current remote DMA address 1 */
28: #define DP_RSR 0x0C /* receive status register */
29: #define DP_CNTR0 0x0D /* tally counter 0 */
30: #define DP_CNTR1 0x0E /* tally counter 1 */
31: #define DP_CNTR2 0x0F /* tally counter 2 */
32:
33: /* page 0: for writing */
34: #define DP_CR 0x00 /* write side of command register */
35: #define DP_PSTART 0x01 /* page start register */
36: #define DP_PSTOP 0x02 /* page stop register */
37: #define DP_BNRY 0x03 /* boundary pointer */
38: #define DP_TPSR 0x04 /* transmit page start register */
39: #define DP_TBCR0 0x05 /* transmit byte count register 0 */
40: #define DP_TBCR1 0x06 /* transmit byte count register 1 */
41: #define DP_ISR 0x07 /* interrupt status register */
42: #define DP_RSAR0 0x08 /* remote start address register 0 */
43: #define DP_RSAR1 0x09 /* remote start address register 1 */
44: #define DP_RBCR0 0x0A /* remote byte count register 0 */
45: #define DP_RBCR1 0x0B /* remote byte count register 1 */
46: #define DP_RCR 0x0C /* receive configuration register */
47: #define DP_TCR 0x0D /* transmit configuration register */
48: #define DP_DCR 0x0E /* data configuration register */
49: #define DP_IMR 0x0F /* interrupt mask register */
50:
51: /* page 1: read/write */
52: #define DP_CR 0x00 /* command register */
53: #define DP_PAR0 0x01 /* physical address register 0 */
54: #define DP_PAR1 0x02 /* physical address register 1 */
55: #define DP_PAR2 0x03 /* physical address register 2 */
56: #define DP_PAR3 0x04 /* physical address register 3 */
57: #define DP_PAR4 0x05 /* physical address register 4 */
58: #define DP_PAR5 0x06 /* physical address register 5 */
59: #define DP_CURR 0x07 /* current page register */
60: #define DP_MAR0 0x08 /* multicast address register 0 */
61: #define DP_MAR1 0x09 /* multicast address register 1 */
62: #define DP_MAR2 0x0A /* multicast address register 2 */
63: #define DP_MAR3 0x0B /* multicast address register 3 */
64: #define DP_MAR4 0x0C /* multicast address register 4 */
65: #define DP_MAR5 0x0D /* multicast address register 5 */
66: #define DP_MAR6 0x0E /* multicast address register 6 */
67: #define DP_MAR7 0x0F /* multicast address register 7 */
68:
69: /* bits in command register */
70: #define CR_STP 0x01 /* stop: software reset */
71: #define CR_STA 0x02 /* start: activate NIC */
72: #define CR_TXP 0x04 /* transmit packet */
73: #define CR_DMA 0x38 /* mask for DMA control */
74: # define CR_DM_NOP 0x00 /* DMA: no operation */
75: # define CR_DM_RR 0x08 /* DMA: remote read */
76: # define CR_DM_RW 0x10 /* DMA: remote write */
77: # define CR_DM_SP 0x18 /* DMA: send packet */
78: # define CR_DM_ABORT 0x20 /* DMA: abort remote DMA operation */
79: #define CR_PS 0xC0 /* mask for page select */
80: # define CR_PS_P0 0x00 /* register page 0 */
81: # define CR_PS_P1 0x40 /* register page 1 */
82: # define CR_PS_T0 0x80 /* test mode register map */
83: # define CR_SP_T1 0xC0 /* test mode register map */
84:
85: /* bits in interrupt status register */
86: #define ISR_PRX 0x01 /* packet received with no errors */
87: #define ISR_PTX 0x02 /* packet transmitted with no errors */
88: #define ISR_RXE 0x04 /* receive error */
89: #define ISR_TXE 0x08 /* transmit error */
90: #define ISR_OVW 0x10 /* overwrite warning */
91: #define ISR_CNT 0x20 /* counter overflow */
92: #define ISR_RDC 0x40 /* remote DMA complete */
93: #define ISR_RST 0x80 /* reset status */
94:
95: /* bits in interrupt mask register */
96: #define IMR_PRXE 0x01 /* packet received ienable */
97: #define IMR_PTXE 0x02 /* packet transmitted ienable */
98: #define IMR_RXEE 0x04 /* receive error ienable */
99: #define IMR_TXEE 0x08 /* transmit error ienable */
100: #define IMR_OVWE 0x10 /* overwrite warning ienable */
101: #define IMR_CNTE 0x20 /* counter overflow ienable */
102: #define IMR_RDCE 0x40 /* DMA complete ienable */
103:
104: /* bits in data control register */
105: #define DCR_WTS 0x01 /* word transfer select */
106: # define DCR_BYTEWIDE 0x00 /* WTS: byte wide transfers */
107: # define DCR_WORDWIDE 0x01 /* WTS: word wide transfers */
108: #define DCR_BOS 0x02 /* byte order select */
109: # define DCR_LTLENDIAN 0x00 /* BOS: little endian */
110: # define DCR_BIGENDIAN 0x02 /* BOS: big endian */
111: #define DCR_LAS 0x04 /* long address select */
112: #define DCR_BMS 0x08 /* burst mode select */
113: #define DCR_AR 0x10 /* autoinitialize remote */
114: #define DCR_FTS 0x60 /* FIFO threshold select */
115: # define DCR_2BYTES 0x00 /* 2 bytes */
116: # define DCR_4BYTES 0x40 /* 4 bytes */
117: # define DCR_8BYTES 0x20 /* 8 bytes */
118: # define DCR_12BYTES 0x60 /* 12 bytes */
119:
120: /* bits in transmit configuration register */
121: #define TCR_CRC 0x01 /* inhibit CRC */
122: #define TCR_ELC 0x06 /* encoded loopback control */
123: # define TCR_NORMAL 0x00 /* ELC: normal operation */
124: # define TCR_INTERNAL 0x02 /* ELC: internal loopback */
125: # define TCR_0EXTERNAL 0x04 /* ELC: external loopback LPBK=0 */
126: # define TCR_1EXTERNAL 0x06 /* ELC: external loopback LPBK=1 */
127: #define TCR_ATD 0x08 /* auto transmit */
128: #define TCR_OFST 0x10 /* collision offset enable (be nice) */
129:
130: /* bits in transmit status register */
131: #define TSR_PTX 0x01 /* packet transmitted (without error)*/
132: #define TSR_DFR 0x02 /* transmit deferred */
133: #define TSR_COL 0x04 /* transmit collided */
134: #define TSR_ABT 0x08 /* transmit aborted */
135: #define TSR_CRS 0x10 /* carrier sense lost */
136: #define TSR_FU 0x20 /* fifo underrun */
137: #define TSR_CDH 0x40 /* CD heartbeat */
138: #define TSR_OWC 0x80 /* out of window collision */
139:
140: /* bits in receive configuration register */
141: #define RCR_SEP 0x01 /* save errored packets */
142: #define RCR_AR 0x02 /* accept runt packets */
143: #define RCR_AB 0x04 /* accept broadcast */
144: #define RCR_AM 0x08 /* accept multicast */
145: #define RCR_PRO 0x10 /* physical promiscuous */
146: #define RCR_MON 0x20 /* monitor mode */
147:
148: /* bits in receive status register */
149: #define RSR_PRX 0x01 /* packet received intact */
150: #define RSR_CRC 0x02 /* CRC error */
151: #define RSR_FAE 0x04 /* frame alignment error */
152: #define RSR_FO 0x08 /* FIFO overrun */
153: #define RSR_MPA 0x10 /* missed packet */
154: #define RSR_PHY 0x20 /* multicast address match !! */
155: #define RSR_DIS 0x40 /* receiver disabled */
156:
157: /* dp8390 configuration information */
158: typedef struct {
159: u_short dc_reg; /* dp8390 base address */
160: u_long dc_mem; /* base memory */
161: u_char dc_tpsr; /* transmit start page */
162: u_char dc_pstart; /* receive start page */
163: u_char dc_pstop; /* receive end page */
164: } dpconf_t;
165:
166:
167: /* dp8390 receive header */
168: typedef struct {
169: u_char dh_status; /* copy of rsr */
170: u_char dh_next; /* pointer to next packet */
171: u_char dh_rbcl; /* receive byte count low */
172: u_char dh_rbch; /* receive byte count high */
173: } dphdr_t;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.