Annotation of cci/usr/src/etc/nstat/if_enp.h, revision 1.1.1.1

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 */

unix.superglobalmegacorp.com

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