|
|
1.1 root 1: /*
2: * @(#)if_enpreg.h 7.1 (Berkeley) 5/31/88
3: */
4:
5: /* Copyright (c) 1984 by Communication Machinery Corporation
6: *
7: * This file contains material which is proprietary to
8: * Communication Machinery Corporation (CMC) and which
9: * may not be divulged without the written permission
10: * of CMC.
11: *
12: * ENP-10 Ram Definition
13: *
14: * 3/15/85 Jon Phares
15: * Update 7/10/85 S. Holmgren
16: * ENP-10 update 7/21/85 J. Mullen
17: * ENP-20 update 8/11/85 J. Mullen
18: * Mods for CCI TAHOE system 8/14/85 J. Mullen
19: */
20:
21: #define K *1024
22:
23: struct ether_addr {
24: u_char ea_addr[6];
25: };
26:
27: typedef struct ethlist {
28: int e_listsize; /* active addr entries */
29: struct ether_addr e_baseaddr; /* addr lance is working with */
30: struct ether_addr e_addrs[16]; /* possible addresses */
31: } ETHLIST;
32:
33: typedef struct {
34: u_long e_xmit_successful; /* Successful transmissions */
35: u_long e_mult_retry; /* multiple retries on xmit */
36: u_long e_one_retry; /* single retries */
37: u_long e_fail_retry; /* too many retries */
38: u_long e_deferrals; /* xmit delayed 'cuz cable busy */
39: u_long e_xmit_buff_err; /* xmit data chaining failed --
40: "can't happen" */
41: u_long e_silo_underrun; /* transmit data fetch failed */
42: u_long e_late_coll; /* collision after xmit */
43: u_long e_lost_carrier;
44: u_long e_babble; /* xmit length > 1518 */
45: u_long e_collision;
46: u_long e_xmit_mem_err;
47: u_long e_rcv_successful; /* good receptions */
48: u_long e_rcv_missed; /* no recv buff available */
49: u_long e_crc_err; /* checksum failed */
50: u_long e_frame_err; /* crc error & data length != 0 mod 8 */
51: u_long e_rcv_buff_err; /* rcv data chain failure --
52: "can't happen" */
53: u_long e_silo_overrun; /* receive data store failed */
54: u_long e_rcv_mem_err;
55: } ENPSTAT;
56:
57: typedef struct RING {
58: short r_rdidx;
59: short r_wrtidx;
60: short r_size;
61: short r_pad;
62: int r_slot[1];
63: } RING;
64:
65: typedef struct RING32 {
66: short r_rdidx;
67: short r_wrtidx;
68: short r_size;
69: short r_pad; /* to make VAXen happy */
70: int r_slot[32];
71: } RING32;
72:
73: /*
74: * ENP Ram data layout
75: */
76:
77: /*
78: * Note: paged window (4 K) is identity mapped by ENP kernel to provide
79: * 124 K contiguous RAM (as reflected in RAM_SIZE)
80: */
81: #define RAM_WINDOW (128 K)
82: #define IOACCESS_WINDOW (512)
83: #define FIXED_WINDOW (RAM_WINDOW - IOACCESS_WINDOW)
84: #define RAMROM_SWAP (4 K)
85: #define RAM_SIZE (FIXED_WINDOW - RAMROM_SWAP)
86:
87: #define HOST_RAMSIZE (48 K)
88: #define ENP_RAMSIZE (20 K)
89:
90: typedef struct iow20 {
91: char pad0;
92: char hst2enp_interrupt;
93: char pad1[510];
94: } iow20;
95:
96: struct enpdevice {
97: #ifdef notdef
98: char enp_ram_rom[4 K];
99: #endif notdef
100: union {
101: char all_ram[RAM_SIZE];
102: struct {
103: u_int t_go;
104: u_int t_pstart;
105: } t;
106: struct {
107: char nram[RAM_SIZE - (HOST_RAMSIZE + ENP_RAMSIZE)];
108: char hram[HOST_RAMSIZE];
109: char kram[ENP_RAMSIZE];
110: } u_ram;
111: struct {
112: char pad7[0x100]; /* starts 0x1100 - 0x2000 */
113: short e_enpstate; /* 1102 */
114: short e_enpmode; /* 1104 */
115: int e_enpbase; /* 1104 */
116: int e_enprun; /* 1108 */
117: u_short e_intrvec;
118: u_short e_dummy[3];
119: RING32 h_toenp; /* 110C */
120: RING32 h_hostfree;
121: RING32 e_tohost;
122: RING32 e_enpfree;
123: ENPSTAT e_stat;
124: ETHLIST e_netaddr;
125: } iface;
126: } enp_u;
127: iow20 enp_iow;
128: };
129:
130: #define enp_ram enp_u.all_ram
131: #define enp_nram enp_u.u_ram.nram
132: #define enp_hram enp_u.u_ram.hram
133: #define enp_kram enp_u.u_ram.kram
134: #define enp_go enp_u.t.t_go
135: #define enp_prog_start enp_u.t.t_pstart
136: #define enp_intrvec enp_u.iface.e_intrvec
137: #define enp_state enp_u.iface.e_enpstate
138: #define enp_mode enp_u.iface.e_enpmode
139: #define enp_base enp_u.iface.e_enpbase
140: #define enp_enprun enp_u.iface.e_enprun
141: #define enp_toenp enp_u.iface.h_toenp
142: #define enp_hostfree enp_u.iface.h_hostfree
143: #define enp_tohost enp_u.iface.e_tohost
144: #define enp_enpfree enp_u.iface.e_enpfree
145: #define enp_freembuf enp_u.iface.h_freembuf
146: #define enp_stat enp_u.iface.e_stat
147: #define enp_addr enp_u.iface.e_netaddr
148:
149: #define ENPVAL 0xff /* enp_iow.hst2enp_interrupt poke value */
150: #define RESETVAL 0x00 /* enp_iow.enp2hst_clear_intr poke value */
151:
152: #define INTR_ENP(addr) (addr->enp_iow.hst2enp_interrupt = ENPVAL)
153:
154: #if ENP == 30
155: #define ACK_ENP_INTR(addr) (addr->enp_iow.enp2hst_clear_intr = RESETVAL)
156: #define IS_ENP_INTR(addr) (addr->enp_iow.enp2hst_clear_intr&0x80)
157: #endif
158:
159: #ifdef notdef
160: #define RESET_ENP(addr) (addr->enp_iow.hst2enp_reset = 01)
161: #else
162: #ifdef lint
163: #define RESET_ENP(addr) ((addr) = (addr))
164: #else
165: #define RESET_ENP(addr)
166: #endif lint
167: #endif notdef
168:
169: #ifdef tahoe
170: #define ENP_GO(addr,start) { \
171: int v = start; \
172: enpcopy((u_char *)&v, (u_char *)&addr->enp_prog_start, sizeof(v) ); \
173: v = 0x80800000; \
174: enpcopy((u_char *)&v, (u_char *)&addr->enp_go, sizeof(v) ); \
175: }
176: #else
177: #define ENP_GO(addr,start,intvec ) { \
178: addr->enp_prog_start = (u_int)(start); \
179: addr->enp_intrvec = (u_short) intvec; \
180: addr->enp_go = 0x80800000; \
181: }
182: #endif tahoe
183:
184: /*
185: * State bits
186: */
187: #define S_ENPRESET 01 /* enp is in reset state */
188: #define S_ENPRUN 02 /* enp is in run state */
189:
190: /*
191: * Mode bits
192: */
193: #define E_SWAP16 0x1 /* swap two octets within 16 */
194: #define E_SWAP32 0x2 /* swap 16s within 32 */
195: #define E_SWAPRD 0x4 /* swap on read */
196: #define E_SWAPWRT 0x8 /* swap on write */
197: #define E_DMA 0x10 /* enp does data moving */
198:
199: #define E_EXAM_LIST 0x80000000 /* enp should examine addrlist */
200: #define E_ADDR_SUPP 0x40000000 /* enp should use supplied addr */
201:
202: /*
203: * Download ioctl definitions
204: */
205: #define ENPIOGO _IO('S',1) /* start the enp */
206: #define ENPIORESET _IO('S',2) /* reset the enp */
207:
208: /*
209: * The ENP Data Buffer Structure
210: */
211: typedef struct BCB {
212: struct BCB *b_link;
213: short b_stat;
214: short b_len;
215: u_char *b_addr;
216: short b_msglen;
217: short b_reserved;
218: } BCB;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.