|
|
1.1 ! root 1: /* Copyright (c) 1984 by Communication Machinery Corporation ! 2: * ! 3: * This file contains material which is proprietary to ! 4: * Communication Machinery Corporation (CMC) and which ! 5: * may not be divulged without the written permission ! 6: * of CMC. ! 7: * ! 8: * ENP-10 Ram Definition ! 9: * ! 10: * 3/15/85 Jon Phares ! 11: * Update 7/10/85 S. Holmgren ! 12: * ENP-10 update 7/21/85 J. Mullen ! 13: * ENP-20 update 8/11/85 J. Mullen ! 14: * Mods for CCI TAHOE system 8/14/85 J. Mullen ! 15: * ! 16: */ ! 17: ! 18: #define K *1024 ! 19: ! 20: #define ENPSIZE (124 K) /* VME bus space allocated to enp */ ! 21: #define MINPKTSIZE 60 /* minimum ethernet packet size */ ! 22: ! 23: /* Note: paged window (4 K) is identity mapped by ENP kernel to provide ! 24: * 124 K contiguous RAM (as reflected in RAM_SIZE) ! 25: */ ! 26: ! 27: #define RAM_WINDOW (128 K) ! 28: #define IOACCESS_WINDOW (512) ! 29: #define FIXED_WINDOW (RAM_WINDOW - IOACCESS_WINDOW) ! 30: #define RAMROM_SWAP (4 K) ! 31: #define RAM_SIZE (FIXED_WINDOW - RAMROM_SWAP) ! 32: ! 33: #define HOST_RAMSIZE (48 K) ! 34: #define ENP_RAMSIZE (20 K) ! 35: ! 36: /* ...top of 4K local i/o space for ENP */ ! 37: ! 38: #ifdef notdef ! 39: typedef struct iow10 { ! 40: char pad1[0x81]; ! 41: /* written to: causes an interrupt on the host at the vector written ! 42: read from : returns the most significant 8 bits of the slave address */ ! 43: char vector; ! 44: char pad2[0x1F]; ! 45: char csrarr[0x1E]; ! 46: char pad3[2]; ! 47: char ier; /* intr. enable reg., 0x80 == enable,0 == off*/ ! 48: char pad4[1]; ! 49: char tir; /* transmit intr. (Level 4 INP autovector) */ ! 50: char pad5[1]; ! 51: char rir; /* receive intr. (Level 5 INP autovector) */ ! 52: char pad6[1]; ! 53: char uir; /* utility intr. (Level 1 INP autovector) */ ! 54: char pad7[7]; ! 55: char mapfirst4k; /* bit 7 set means ram, clear means rom */ ! 56: char pad8[0x11]; ! 57: char exr; /* exception register, see bit defines above */ ! 58: char pad9[0xD1F]; ! 59: char hst2enp_interrupt; /* R or W interrupts ENP */ ! 60: char pad10[0xFF]; ! 61: char hst2enp_reset; /* R or W resets ENP */ ! 62: } iow10; ! 63: #endif notdef ! 64: ! 65: typedef struct iow20 ! 66: { ! 67: char pad0; ! 68: char hst2enp_interrupt; ! 69: char pad1[510]; ! 70: } iow20; ! 71: ! 72: ! 73: #ifdef notdef ! 74: typedef struct iow30 ! 75: { ! 76: char pad0; ! 77: char impucsr; ! 78: char pad1[0x1d]; ! 79: short bus2mpu_interrupt; ! 80: short bs2enp_wsctl; ! 81: short bs2enp_rsctl; ! 82: short enp2hst_clear_intr; /* 0x27 */ ! 83: short enp_rcv_intr; ! 84: short enp_xmit_intr; ! 85: short hst2enp_interrupt; /* 0x2d */ ! 86: short pad2; ! 87: char pad3[0xf]; ! 88: short bus_page; /* Bus page register */ ! 89: char pad4[0x1d]; ! 90: short lock_ctrl; ! 91: char pad5[0x1d]; ! 92: short duart[0x10]; /* 16 duart regs */ ! 93: char pad6[0x1f]; ! 94: short bus_window; ! 95: } iow30; ! 96: #endif notdef ! 97: ! 98: struct ether_addr ! 99: { ! 100: u_char ea_addr[6]; ! 101: }; ! 102: ! 103: #define ETHADDR struct ether_addr ! 104: #define ETHADDR_SIZE 6 /* size of ethernet address */ ! 105: ! 106: typedef ! 107: struct ethlist ! 108: { ! 109: int e_listsize; /* active addr entries */ ! 110: ETHADDR e_baseaddr; /* addr lance is working with */ ! 111: ETHADDR e_addrs[ 16 ]; /* possible addresses */ ! 112: } ETHLIST; ! 113: ! 114: typedef ! 115: struct enpstat ! 116: { ! 117: unsigned long e_xmit_successful; /* Successful transmissions */ ! 118: unsigned long e_mult_retry; /* multiple retries on xmit */ ! 119: unsigned long e_one_retry; /* single retries */ ! 120: unsigned long e_fail_retry; /* too many retries */ ! 121: unsigned long e_deferrals; /* transmission delayed due ! 122: to active medium */ ! 123: unsigned long e_xmit_buff_err; /* xmit data chaining failed -- ! 124: "can't happen" */ ! 125: unsigned long e_silo_underrun; /* transmit data fetch failed */ ! 126: unsigned long e_late_coll; /* collision after xmit */ ! 127: unsigned long e_lost_carrier; ! 128: unsigned long e_babble; /* xmit length > 1518 */ ! 129: unsigned long e_collision; ! 130: unsigned long e_xmit_mem_err; ! 131: unsigned long e_rcv_successful; /* good receptions */ ! 132: unsigned long e_rcv_missed; /* no recv buff available */ ! 133: unsigned long e_crc_err; /* checksum failed */ ! 134: unsigned long e_frame_err; /* crc error AND ! 135: data length != 0 mod 8 */ ! 136: unsigned long e_rcv_buff_err; /* rcv data chain failure -- ! 137: "can't happen" */ ! 138: unsigned long e_silo_overrun; /* receive data store failed */ ! 139: unsigned long e_rcv_mem_err; ! 140: } ENPSTAT; ! 141: ! 142: typedef struct RING ! 143: { ! 144: short r_rdidx; ! 145: short r_wrtidx; ! 146: short r_size; ! 147: short r_pad; ! 148: int r_slot[1]; ! 149: } RING; ! 150: ! 151: typedef struct RING32 ! 152: { ! 153: short r_rdidx; ! 154: short r_wrtidx; ! 155: short r_size; ! 156: short r_pad; /* to make VAXen happy */ ! 157: int r_slot[ 32 ]; ! 158: } RING32; ! 159: ! 160: /* ! 161: * ENP Ram data layout ! 162: * ! 163: * If you don't put it here - it isn't there ! 164: * ! 165: */ ! 166: ! 167: typedef struct enpdevice { ! 168: #ifdef notdef ! 169: char enp_ram_rom[4 K]; ! 170: #endif notdef ! 171: union { ! 172: char all_ram[RAM_SIZE]; ! 173: struct { ! 174: unsigned int t_go; ! 175: unsigned int t_pstart; ! 176: } t; ! 177: struct { ! 178: char nram[RAM_SIZE - (HOST_RAMSIZE + ENP_RAMSIZE)]; ! 179: char hram[HOST_RAMSIZE]; ! 180: char kram[ENP_RAMSIZE]; ! 181: } u_ram; ! 182: struct ! 183: { ! 184: char pad7[ 0x100 ]; /* starts 0x1100 - 0x2000 */ ! 185: short e_enpstate; /* 1102 */ ! 186: short e_enpmode; /* 1104 */ ! 187: int e_enpbase; /* 1104 */ ! 188: int e_enprun; /* 1108 */ ! 189: unsigned short e_intrvec; ! 190: unsigned short e_dummy[3]; ! 191: ! 192: RING32 h_toenp; /* 110C */ ! 193: RING32 h_hostfree; ! 194: RING32 e_tohost; ! 195: RING32 e_enpfree; ! 196: ! 197: ENPSTAT e_stat; ! 198: ETHLIST e_netaddr; ! 199: } iface; ! 200: } enp_u; ! 201: iow20 enp_iow; ! 202: } ENPDEVICE; ! 203: ! 204: #define enp_ram enp_u.all_ram ! 205: #define enp_nram enp_u.u_ram.nram ! 206: #define enp_hram enp_u.u_ram.hram ! 207: #define enp_kram enp_u.u_ram.kram ! 208: #define enp_go enp_u.t.t_go ! 209: #define enp_prog_start enp_u.t.t_pstart ! 210: #define enp_intrvec enp_u.iface.e_intrvec ! 211: #define enp_state enp_u.iface.e_enpstate ! 212: #define enp_mode enp_u.iface.e_enpmode ! 213: #define enp_base enp_u.iface.e_enpbase ! 214: #define enp_enprun enp_u.iface.e_enprun ! 215: #define enp_toenp enp_u.iface.h_toenp ! 216: #define enp_hostfree enp_u.iface.h_hostfree ! 217: #define enp_tohost enp_u.iface.e_tohost ! 218: #define enp_enpfree enp_u.iface.e_enpfree ! 219: #define enp_freembuf enp_u.iface.h_freembuf ! 220: #define enp_stat enp_u.iface.e_stat ! 221: #define enp_addr enp_u.iface.e_netaddr ! 222: ! 223: #define ENPVAL 0xff /* value to poke in enp_iow.hst2enp_interrupt */ ! 224: #define RESETVAL 0x00 /* value to poke in enp_iow.enp2hst_clear_intr */ ! 225: ! 226: #define INTR_ENP(addr) addr->enp_iow.hst2enp_interrupt = ENPVAL ! 227: ! 228: #if ENP == 30 ! 229: #define ACK_ENP_INTR(addr) addr->enp_iow.enp2hst_clear_intr = RESETVAL ! 230: #define IS_ENP_INTR(addr) (addr->enp_iow.enp2hst_clear_intr&0x80) ! 231: # else ! 232: #define ACK_ENP_INTR(addr) ! 233: #define IS_ENP_INTR(addr) ( 1 ) ! 234: #endif ENP == 30 ! 235: ! 236: #ifdef notdef ! 237: #define RESET_ENP(addr) addr->enp_iow.hst2enp_reset = 01 ! 238: # else ! 239: #define RESET_ENP(addr) ! 240: #endif notdef ! 241: ! 242: #ifdef TAHOE ! 243: #define ENP_GO( addr,start ) {int v; v = start; \ ! 244: enpcopy(&v, &addr->enp_prog_start, sizeof(v) ); \ ! 245: v = 0x80800000; \ ! 246: enpcopy( &v, &addr->enp_go, sizeof(v) ); } ! 247: #else ! 248: #define ENP_GO( addr,start,intvec ) { addr->enp_prog_start = (unsigned int)(start); \ ! 249: addr->enp_intrvec = (unsigned short) intvec; \ ! 250: addr->enp_go = 0x80800000; } ! 251: #endif TAHOE ! 252: ! 253: #define SPL_ENP spl4 ! 254: ! 255: ! 256: /* ! 257: * state bits ! 258: */ ! 259: ! 260: #define S_ENPRESET 01 /* enp is in reset state */ ! 261: #define S_ENPRUN 02 /* enp is in run state */ ! 262: ! 263: /* ! 264: * mode bits ! 265: */ ! 266: ! 267: #define E_SWAP16 0x1 /* swap two octets within 16 */ ! 268: #define E_SWAP32 0x2 /* swap 16s within 32 */ ! 269: #define E_SWAPRD 0x4 /* swap on read */ ! 270: #define E_SWAPWRT 0x8 /* swap on write */ ! 271: #define E_DMA 0x10 /* enp does data moving */ ! 272: ! 273: #define E_EXAM_LIST 0x80000000 /*enp should examine addrlist */ ! 274: #define E_ADDR_SUPP 0x40000000 /*enp should use supplied addr*/ ! 275: ! 276: ! 277: /* ! 278: * Download ioctl definitions ! 279: */ ! 280: ! 281: #define mkioctl(type,value) (0x20000000|('type'<<8)|value) ! 282: ! 283: #define ENPIOGO mkioctl( S,1 ) /* start the enp */ ! 284: #define ENPIORESET mkioctl( S,2 ) /* reset the enp */ ! 285: ! 286: /* ! 287: * The ENP Data Buffer Structure ! 288: */ ! 289: ! 290: typedef struct BCB ! 291: { ! 292: struct BCB *b_link; ! 293: short b_stat; ! 294: short b_len; ! 295: char *b_addr; ! 296: short b_msglen; ! 297: short b_reserved; ! 298: }BCB; ! 299: ! 300: struct enp_softc ! 301: { ! 302: struct arpcom es_ac; /* common ethernet structures */ ! 303: struct ether_addr es_boardaddr;/* board ethernet address */ ! 304: }; ! 305: ! 306: #define es_if es_ac.ac_if /* network-visible interface */ ! 307: #define es_enaddr es_ac.ac_enaddr /* hardware ethernet address */ ! 308: ! 309: #define ENP_OPEN 1 /* device enpram opened */ ! 310: #define ENP_CLOSE 2 /* device enpram closed */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.