Annotation of Net2/arch/tahoe/if/if_enpreg.h, revision 1.1.1.1

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;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.