|
|
1.1 root 1: /*****************************************************************
2: *
3: * defines for 3Com Etherlink Plus adapter
4: *
5: *****************************************************************/
6:
7: /*
8: * I/O register offsets
9: */
10: #define PORT_COMMAND 0x00 /* read/write, 8-bit */
11: #define PORT_STATUS 0x02 /* read only, 8-bit */
12: #define PORT_AUXDMA 0x02 /* write only, 8-bit */
13: #define PORT_DATA 0x04 /* read/write, 16-bit */
14: #define PORT_CONTROL 0x06 /* read/write, 8-bit */
15:
16: #define ELP_IO_EXTENT 0x10 /* size of used IO registers */
17:
18: /*
19: * host control registers bits
20: */
21: #define ATTN 0x80 /* attention */
22: #define FLSH 0x40 /* flush data register */
23: #define DMAE 0x20 /* DMA enable */
24: #define DIR 0x10 /* direction */
25: #define TCEN 0x08 /* terminal count interrupt enable */
26: #define CMDE 0x04 /* command register interrupt enable */
27: #define HSF2 0x02 /* host status flag 2 */
28: #define HSF1 0x01 /* host status flag 1 */
29:
30: /*
31: * combinations of HSF flags used for PCB transmission
32: */
33: #define HSF_PCB_ACK HSF1
34: #define HSF_PCB_NAK HSF2
35: #define HSF_PCB_END (HSF2|HSF1)
36: #define HSF_PCB_MASK (HSF2|HSF1)
37:
38: /*
39: * host status register bits
40: */
41: #define HRDY 0x80 /* data register ready */
42: #define HCRE 0x40 /* command register empty */
43: #define ACRF 0x20 /* adapter command register full */
44: /* #define DIR 0x10 direction - same as in control register */
45: #define DONE 0x08 /* DMA done */
46: #define ASF3 0x04 /* adapter status flag 3 */
47: #define ASF2 0x02 /* adapter status flag 2 */
48: #define ASF1 0x01 /* adapter status flag 1 */
49:
50: /*
51: * combinations of ASF flags used for PCB reception
52: */
53: #define ASF_PCB_ACK ASF1
54: #define ASF_PCB_NAK ASF2
55: #define ASF_PCB_END (ASF2|ASF1)
56: #define ASF_PCB_MASK (ASF2|ASF1)
57:
58: /*
59: * host aux DMA register bits
60: */
61: #define DMA_BRST 0x01 /* DMA burst */
62:
63: /*
64: * maximum amount of data allowed in a PCB
65: */
66: #define MAX_PCB_DATA 62
67:
68: /*****************************************************************
69: *
70: * timeout value
71: * this is a rough value used for loops to stop them from
72: * locking up the whole machine in the case of failure or
73: * error conditions
74: *
75: *****************************************************************/
76:
77: #define TIMEOUT 300
78:
79: /*****************************************************************
80: *
81: * PCB commands
82: *
83: *****************************************************************/
84:
85: enum {
86: /*
87: * host PCB commands
88: */
89: CMD_CONFIGURE_ADAPTER_MEMORY = 0x01,
90: CMD_CONFIGURE_82586 = 0x02,
91: CMD_STATION_ADDRESS = 0x03,
92: CMD_DMA_DOWNLOAD = 0x04,
93: CMD_DMA_UPLOAD = 0x05,
94: CMD_PIO_DOWNLOAD = 0x06,
95: CMD_PIO_UPLOAD = 0x07,
96: CMD_RECEIVE_PACKET = 0x08,
97: CMD_TRANSMIT_PACKET = 0x09,
98: CMD_NETWORK_STATISTICS = 0x0a,
99: CMD_LOAD_MULTICAST_LIST = 0x0b,
100: CMD_CLEAR_PROGRAM = 0x0c,
101: CMD_DOWNLOAD_PROGRAM = 0x0d,
102: CMD_EXECUTE_PROGRAM = 0x0e,
103: CMD_SELF_TEST = 0x0f,
104: CMD_SET_STATION_ADDRESS = 0x10,
105: CMD_ADAPTER_INFO = 0x11,
106: NUM_TRANSMIT_CMDS,
107:
108: /*
109: * adapter PCB commands
110: */
111: CMD_CONFIGURE_ADAPTER_RESPONSE = 0x31,
112: CMD_CONFIGURE_82586_RESPONSE = 0x32,
113: CMD_ADDRESS_RESPONSE = 0x33,
114: CMD_DOWNLOAD_DATA_REQUEST = 0x34,
115: CMD_UPLOAD_DATA_REQUEST = 0x35,
116: CMD_RECEIVE_PACKET_COMPLETE = 0x38,
117: CMD_TRANSMIT_PACKET_COMPLETE = 0x39,
118: CMD_NETWORK_STATISTICS_RESPONSE = 0x3a,
119: CMD_LOAD_MULTICAST_RESPONSE = 0x3b,
120: CMD_CLEAR_PROGRAM_RESPONSE = 0x3c,
121: CMD_DOWNLOAD_PROGRAM_RESPONSE = 0x3d,
122: CMD_EXECUTE_RESPONSE = 0x3e,
123: CMD_SELF_TEST_RESPONSE = 0x3f,
124: CMD_SET_ADDRESS_RESPONSE = 0x40,
125: CMD_ADAPTER_INFO_RESPONSE = 0x41
126: };
127:
128: /* Definitions for the PCB data structure */
129:
130: /* Data units */
131: typedef unsigned char byte;
132: typedef unsigned short int word;
133: typedef unsigned long int dword;
134:
135: /* Data structures */
136: struct Memconf {
137: word cmd_q,
138: rcv_q,
139: mcast,
140: frame,
141: rcv_b,
142: progs;
143: };
144:
145: struct Rcv_pkt {
146: word buf_ofs,
147: buf_seg,
148: buf_len,
149: timeout;
150: };
151:
152: struct Xmit_pkt {
153: word buf_ofs,
154: buf_seg,
155: pkt_len;
156: };
157:
158: struct Rcv_resp {
159: word buf_ofs,
160: buf_seg,
161: buf_len,
162: pkt_len,
163: timeout,
164: status;
165: dword timetag;
166: };
167:
168: struct Xmit_resp {
169: word buf_ofs,
170: buf_seg,
171: c_stat,
172: status;
173: };
174:
175:
176: struct Netstat {
177: dword tot_recv,
178: tot_xmit;
179: word err_CRC,
180: err_align,
181: err_res,
182: err_ovrrun;
183: };
184:
185:
186: struct Selftest {
187: word error;
188: union {
189: word ROM_cksum;
190: struct {
191: word ofs, seg;
192: } RAM;
193: word i82586;
194: } failure;
195: };
196:
197: struct Info {
198: byte minor_vers,
199: major_vers;
200: word ROM_cksum,
201: RAM_sz,
202: free_ofs,
203: free_seg;
204: };
205:
206: struct Memdump {
207: word size,
208: off,
209: seg;
210: };
211:
212: /*
213: Primary Command Block. The most important data structure. All communication
214: between the host and the adapter is done with these. (Except for the actual
215: ethernet data, which has different packaging.)
216: */
217: typedef struct {
218: byte command;
219: byte length;
220: union {
221: struct Memconf memconf;
222: word configure;
223: struct Rcv_pkt rcv_pkt;
224: struct Xmit_pkt xmit_pkt;
225: byte multicast[10][6];
226: byte eth_addr[6];
227: byte failed;
228: struct Rcv_resp rcv_resp;
229: struct Xmit_resp xmit_resp;
230: struct Netstat netstat;
231: struct Selftest selftest;
232: struct Info info;
233: struct Memdump memdump;
234: byte raw[62];
235: } data;
236: } pcb_struct;
237:
238: /* These defines for 'configure' */
239: #define RECV_STATION 0x00
240: #define RECV_BROAD 0x01
241: #define RECV_MULTI 0x02
242: #define RECV_PROMISC 0x04
243: #define NO_LOOPBACK 0x00
244: #define INT_LOOPBACK 0x08
245: #define EXT_LOOPBACK 0x10
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.