|
|
1.1 ! root 1: /*- ! 2: * Copyright (c) 1991 The Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * This code is derived from software contributed to Berkeley by ! 6: * Computer Consoles Inc. ! 7: * ! 8: * Redistribution and use in source and binary forms, with or without ! 9: * modification, are permitted provided that the following conditions ! 10: * are met: ! 11: * 1. Redistributions of source code must retain the above copyright ! 12: * notice, this list of conditions and the following disclaimer. ! 13: * 2. Redistributions in binary form must reproduce the above copyright ! 14: * notice, this list of conditions and the following disclaimer in the ! 15: * documentation and/or other materials provided with the distribution. ! 16: * 3. All advertising materials mentioning features or use of this software ! 17: * must display the following acknowledgement: ! 18: * This product includes software developed by the University of ! 19: * California, Berkeley and its contributors. ! 20: * 4. Neither the name of the University nor the names of its contributors ! 21: * may be used to endorse or promote products derived from this software ! 22: * without specific prior written permission. ! 23: * ! 24: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 25: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 26: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 27: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 28: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 29: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 30: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 31: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 32: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 33: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 34: * SUCH DAMAGE. ! 35: * ! 36: * @(#)if_enpreg.h 7.2 (Berkeley) 5/8/91 ! 37: */ ! 38: ! 39: /* Copyright (c) 1984 by Communication Machinery Corporation ! 40: * ! 41: * This file contains material which is proprietary to ! 42: * Communication Machinery Corporation (CMC) and which ! 43: * may not be divulged without the written permission ! 44: * of CMC. ! 45: * ! 46: * ENP-10 Ram Definition ! 47: * ! 48: * 3/15/85 Jon Phares ! 49: * Update 7/10/85 S. Holmgren ! 50: * ENP-10 update 7/21/85 J. Mullen ! 51: * ENP-20 update 8/11/85 J. Mullen ! 52: * Mods for CCI TAHOE system 8/14/85 J. Mullen ! 53: */ ! 54: ! 55: #define K *1024 ! 56: ! 57: struct ether_addr { ! 58: u_char ea_addr[6]; ! 59: }; ! 60: ! 61: typedef struct ethlist { ! 62: int e_listsize; /* active addr entries */ ! 63: struct ether_addr e_baseaddr; /* addr lance is working with */ ! 64: struct ether_addr e_addrs[16]; /* possible addresses */ ! 65: } ETHLIST; ! 66: ! 67: typedef struct { ! 68: u_long e_xmit_successful; /* Successful transmissions */ ! 69: u_long e_mult_retry; /* multiple retries on xmit */ ! 70: u_long e_one_retry; /* single retries */ ! 71: u_long e_fail_retry; /* too many retries */ ! 72: u_long e_deferrals; /* xmit delayed 'cuz cable busy */ ! 73: u_long e_xmit_buff_err; /* xmit data chaining failed -- ! 74: "can't happen" */ ! 75: u_long e_silo_underrun; /* transmit data fetch failed */ ! 76: u_long e_late_coll; /* collision after xmit */ ! 77: u_long e_lost_carrier; ! 78: u_long e_babble; /* xmit length > 1518 */ ! 79: u_long e_collision; ! 80: u_long e_xmit_mem_err; ! 81: u_long e_rcv_successful; /* good receptions */ ! 82: u_long e_rcv_missed; /* no recv buff available */ ! 83: u_long e_crc_err; /* checksum failed */ ! 84: u_long e_frame_err; /* crc error & data length != 0 mod 8 */ ! 85: u_long e_rcv_buff_err; /* rcv data chain failure -- ! 86: "can't happen" */ ! 87: u_long e_silo_overrun; /* receive data store failed */ ! 88: u_long e_rcv_mem_err; ! 89: } ENPSTAT; ! 90: ! 91: typedef struct RING { ! 92: short r_rdidx; ! 93: short r_wrtidx; ! 94: short r_size; ! 95: short r_pad; ! 96: int r_slot[1]; ! 97: } RING; ! 98: ! 99: typedef struct RING32 { ! 100: short r_rdidx; ! 101: short r_wrtidx; ! 102: short r_size; ! 103: short r_pad; /* to make VAXen happy */ ! 104: int r_slot[32]; ! 105: } RING32; ! 106: ! 107: /* ! 108: * ENP Ram data layout ! 109: */ ! 110: ! 111: /* ! 112: * Note: paged window (4 K) is identity mapped by ENP kernel to provide ! 113: * 124 K contiguous RAM (as reflected in RAM_SIZE) ! 114: */ ! 115: #define RAM_WINDOW (128 K) ! 116: #define IOACCESS_WINDOW (512) ! 117: #define FIXED_WINDOW (RAM_WINDOW - IOACCESS_WINDOW) ! 118: #define RAMROM_SWAP (4 K) ! 119: #define RAM_SIZE (FIXED_WINDOW - RAMROM_SWAP) ! 120: ! 121: #define HOST_RAMSIZE (48 K) ! 122: #define ENP_RAMSIZE (20 K) ! 123: ! 124: typedef struct iow20 { ! 125: char pad0; ! 126: char hst2enp_interrupt; ! 127: char pad1[510]; ! 128: } iow20; ! 129: ! 130: struct enpdevice { ! 131: #ifdef notdef ! 132: char enp_ram_rom[4 K]; ! 133: #endif notdef ! 134: union { ! 135: char all_ram[RAM_SIZE]; ! 136: struct { ! 137: u_int t_go; ! 138: u_int t_pstart; ! 139: } t; ! 140: struct { ! 141: char nram[RAM_SIZE - (HOST_RAMSIZE + ENP_RAMSIZE)]; ! 142: char hram[HOST_RAMSIZE]; ! 143: char kram[ENP_RAMSIZE]; ! 144: } u_ram; ! 145: struct { ! 146: char pad7[0x100]; /* starts 0x1100 - 0x2000 */ ! 147: short e_enpstate; /* 1102 */ ! 148: short e_enpmode; /* 1104 */ ! 149: int e_enpbase; /* 1104 */ ! 150: int e_enprun; /* 1108 */ ! 151: u_short e_intrvec; ! 152: u_short e_dummy[3]; ! 153: RING32 h_toenp; /* 110C */ ! 154: RING32 h_hostfree; ! 155: RING32 e_tohost; ! 156: RING32 e_enpfree; ! 157: ENPSTAT e_stat; ! 158: ETHLIST e_netaddr; ! 159: } iface; ! 160: } enp_u; ! 161: iow20 enp_iow; ! 162: }; ! 163: ! 164: #define enp_ram enp_u.all_ram ! 165: #define enp_nram enp_u.u_ram.nram ! 166: #define enp_hram enp_u.u_ram.hram ! 167: #define enp_kram enp_u.u_ram.kram ! 168: #define enp_go enp_u.t.t_go ! 169: #define enp_prog_start enp_u.t.t_pstart ! 170: #define enp_intrvec enp_u.iface.e_intrvec ! 171: #define enp_state enp_u.iface.e_enpstate ! 172: #define enp_mode enp_u.iface.e_enpmode ! 173: #define enp_base enp_u.iface.e_enpbase ! 174: #define enp_enprun enp_u.iface.e_enprun ! 175: #define enp_toenp enp_u.iface.h_toenp ! 176: #define enp_hostfree enp_u.iface.h_hostfree ! 177: #define enp_tohost enp_u.iface.e_tohost ! 178: #define enp_enpfree enp_u.iface.e_enpfree ! 179: #define enp_freembuf enp_u.iface.h_freembuf ! 180: #define enp_stat enp_u.iface.e_stat ! 181: #define enp_addr enp_u.iface.e_netaddr ! 182: ! 183: #define ENPVAL 0xff /* enp_iow.hst2enp_interrupt poke value */ ! 184: #define RESETVAL 0x00 /* enp_iow.enp2hst_clear_intr poke value */ ! 185: ! 186: #define INTR_ENP(addr) (addr->enp_iow.hst2enp_interrupt = ENPVAL) ! 187: ! 188: #if ENP == 30 ! 189: #define ACK_ENP_INTR(addr) (addr->enp_iow.enp2hst_clear_intr = RESETVAL) ! 190: #define IS_ENP_INTR(addr) (addr->enp_iow.enp2hst_clear_intr&0x80) ! 191: #endif ! 192: ! 193: #ifdef notdef ! 194: #define RESET_ENP(addr) (addr->enp_iow.hst2enp_reset = 01) ! 195: #else ! 196: #ifdef lint ! 197: #define RESET_ENP(addr) ((addr) = (addr)) ! 198: #else ! 199: #define RESET_ENP(addr) ! 200: #endif lint ! 201: #endif notdef ! 202: ! 203: #ifdef tahoe ! 204: #define ENP_GO(addr,start) { \ ! 205: int v = start; \ ! 206: enpcopy((u_char *)&v, (u_char *)&addr->enp_prog_start, sizeof(v) ); \ ! 207: v = 0x80800000; \ ! 208: enpcopy((u_char *)&v, (u_char *)&addr->enp_go, sizeof(v) ); \ ! 209: } ! 210: #else ! 211: #define ENP_GO(addr,start,intvec ) { \ ! 212: addr->enp_prog_start = (u_int)(start); \ ! 213: addr->enp_intrvec = (u_short) intvec; \ ! 214: addr->enp_go = 0x80800000; \ ! 215: } ! 216: #endif tahoe ! 217: ! 218: /* ! 219: * State bits ! 220: */ ! 221: #define S_ENPRESET 01 /* enp is in reset state */ ! 222: #define S_ENPRUN 02 /* enp is in run state */ ! 223: ! 224: /* ! 225: * Mode bits ! 226: */ ! 227: #define E_SWAP16 0x1 /* swap two octets within 16 */ ! 228: #define E_SWAP32 0x2 /* swap 16s within 32 */ ! 229: #define E_SWAPRD 0x4 /* swap on read */ ! 230: #define E_SWAPWRT 0x8 /* swap on write */ ! 231: #define E_DMA 0x10 /* enp does data moving */ ! 232: ! 233: #define E_EXAM_LIST 0x80000000 /* enp should examine addrlist */ ! 234: #define E_ADDR_SUPP 0x40000000 /* enp should use supplied addr */ ! 235: ! 236: /* ! 237: * Download ioctl definitions ! 238: */ ! 239: #define ENPIOGO _IO('S',1) /* start the enp */ ! 240: #define ENPIORESET _IO('S',2) /* reset the enp */ ! 241: ! 242: /* ! 243: * The ENP Data Buffer Structure ! 244: */ ! 245: typedef struct BCB { ! 246: struct BCB *b_link; ! 247: short b_stat; ! 248: short b_len; ! 249: u_char *b_addr; ! 250: short b_msglen; ! 251: short b_reserved; ! 252: } BCB;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.