1*49425Sbostic /*- 2*49425Sbostic * Copyright (c) 1991 The Regents of the University of California. 3*49425Sbostic * All rights reserved. 4*49425Sbostic * 5*49425Sbostic * This code is derived from software contributed to Berkeley by 6*49425Sbostic * Computer Consoles Inc. 7*49425Sbostic * 8*49425Sbostic * %sccs.include.redist.c% 9*49425Sbostic * 10*49425Sbostic * @(#)if_enpreg.h 7.2 (Berkeley) 05/08/91 1134508Skarels */ 1229649Ssam 1329649Ssam /* Copyright (c) 1984 by Communication Machinery Corporation 1429649Ssam * 1529649Ssam * This file contains material which is proprietary to 1629649Ssam * Communication Machinery Corporation (CMC) and which 1729649Ssam * may not be divulged without the written permission 1829649Ssam * of CMC. 1929649Ssam * 2029649Ssam * ENP-10 Ram Definition 2129649Ssam * 2229649Ssam * 3/15/85 Jon Phares 2329649Ssam * Update 7/10/85 S. Holmgren 2429649Ssam * ENP-10 update 7/21/85 J. Mullen 2529649Ssam * ENP-20 update 8/11/85 J. Mullen 2629649Ssam * Mods for CCI TAHOE system 8/14/85 J. Mullen 2729649Ssam */ 2829649Ssam 2929649Ssam #define K *1024 3029649Ssam 3130230Ssam struct ether_addr { 3229649Ssam u_char ea_addr[6]; 3329649Ssam }; 3429649Ssam 3530230Ssam typedef struct ethlist { 3629649Ssam int e_listsize; /* active addr entries */ 3730230Ssam struct ether_addr e_baseaddr; /* addr lance is working with */ 3830230Ssam struct ether_addr e_addrs[16]; /* possible addresses */ 3929649Ssam } ETHLIST; 4029649Ssam 4130230Ssam typedef struct { 4230230Ssam u_long e_xmit_successful; /* Successful transmissions */ 4330230Ssam u_long e_mult_retry; /* multiple retries on xmit */ 4430230Ssam u_long e_one_retry; /* single retries */ 4530230Ssam u_long e_fail_retry; /* too many retries */ 4630230Ssam u_long e_deferrals; /* xmit delayed 'cuz cable busy */ 4730230Ssam u_long e_xmit_buff_err; /* xmit data chaining failed -- 4829649Ssam "can't happen" */ 4930230Ssam u_long e_silo_underrun; /* transmit data fetch failed */ 5030230Ssam u_long e_late_coll; /* collision after xmit */ 5130230Ssam u_long e_lost_carrier; 5230230Ssam u_long e_babble; /* xmit length > 1518 */ 5330230Ssam u_long e_collision; 5430230Ssam u_long e_xmit_mem_err; 5530230Ssam u_long e_rcv_successful; /* good receptions */ 5630230Ssam u_long e_rcv_missed; /* no recv buff available */ 5730230Ssam u_long e_crc_err; /* checksum failed */ 5830230Ssam u_long e_frame_err; /* crc error & data length != 0 mod 8 */ 5930230Ssam u_long e_rcv_buff_err; /* rcv data chain failure -- 6029649Ssam "can't happen" */ 6130230Ssam u_long e_silo_overrun; /* receive data store failed */ 6230230Ssam u_long e_rcv_mem_err; 6329649Ssam } ENPSTAT; 6429649Ssam 6530230Ssam typedef struct RING { 6629649Ssam short r_rdidx; 6729649Ssam short r_wrtidx; 6829649Ssam short r_size; 6929649Ssam short r_pad; 7029649Ssam int r_slot[1]; 7129649Ssam } RING; 7229649Ssam 7330230Ssam typedef struct RING32 { 7429649Ssam short r_rdidx; 7529649Ssam short r_wrtidx; 7629649Ssam short r_size; 7729649Ssam short r_pad; /* to make VAXen happy */ 7830230Ssam int r_slot[32]; 7929649Ssam } RING32; 8029649Ssam 8129649Ssam /* 8230230Ssam * ENP Ram data layout 8329649Ssam */ 8429649Ssam 8530230Ssam /* 8630230Ssam * Note: paged window (4 K) is identity mapped by ENP kernel to provide 8730230Ssam * 124 K contiguous RAM (as reflected in RAM_SIZE) 8830230Ssam */ 8930230Ssam #define RAM_WINDOW (128 K) 9030230Ssam #define IOACCESS_WINDOW (512) 9130230Ssam #define FIXED_WINDOW (RAM_WINDOW - IOACCESS_WINDOW) 9230230Ssam #define RAMROM_SWAP (4 K) 9330230Ssam #define RAM_SIZE (FIXED_WINDOW - RAMROM_SWAP) 9430230Ssam 9530230Ssam #define HOST_RAMSIZE (48 K) 9630230Ssam #define ENP_RAMSIZE (20 K) 9730230Ssam 9830230Ssam typedef struct iow20 { 9930230Ssam char pad0; 10030230Ssam char hst2enp_interrupt; 10130230Ssam char pad1[510]; 10230230Ssam } iow20; 10330230Ssam 10430230Ssam struct enpdevice { 10529649Ssam #ifdef notdef 10629649Ssam char enp_ram_rom[4 K]; 10729649Ssam #endif notdef 10829649Ssam union { 10929649Ssam char all_ram[RAM_SIZE]; 11029649Ssam struct { 11130230Ssam u_int t_go; 11230230Ssam u_int t_pstart; 11329649Ssam } t; 11429649Ssam struct { 11529649Ssam char nram[RAM_SIZE - (HOST_RAMSIZE + ENP_RAMSIZE)]; 11629649Ssam char hram[HOST_RAMSIZE]; 11729649Ssam char kram[ENP_RAMSIZE]; 11829649Ssam } u_ram; 11930230Ssam struct { 12030230Ssam char pad7[0x100]; /* starts 0x1100 - 0x2000 */ 12129649Ssam short e_enpstate; /* 1102 */ 12229649Ssam short e_enpmode; /* 1104 */ 12329649Ssam int e_enpbase; /* 1104 */ 12429649Ssam int e_enprun; /* 1108 */ 12530230Ssam u_short e_intrvec; 12630230Ssam u_short e_dummy[3]; 12729649Ssam RING32 h_toenp; /* 110C */ 12829649Ssam RING32 h_hostfree; 12929649Ssam RING32 e_tohost; 13029649Ssam RING32 e_enpfree; 13129649Ssam ENPSTAT e_stat; 13229649Ssam ETHLIST e_netaddr; 13329649Ssam } iface; 13429649Ssam } enp_u; 13529649Ssam iow20 enp_iow; 13630230Ssam }; 13729649Ssam 13829649Ssam #define enp_ram enp_u.all_ram 13929649Ssam #define enp_nram enp_u.u_ram.nram 14029649Ssam #define enp_hram enp_u.u_ram.hram 14129649Ssam #define enp_kram enp_u.u_ram.kram 14229649Ssam #define enp_go enp_u.t.t_go 14329649Ssam #define enp_prog_start enp_u.t.t_pstart 14429649Ssam #define enp_intrvec enp_u.iface.e_intrvec 14529649Ssam #define enp_state enp_u.iface.e_enpstate 14629649Ssam #define enp_mode enp_u.iface.e_enpmode 14729649Ssam #define enp_base enp_u.iface.e_enpbase 14829649Ssam #define enp_enprun enp_u.iface.e_enprun 14929649Ssam #define enp_toenp enp_u.iface.h_toenp 15029649Ssam #define enp_hostfree enp_u.iface.h_hostfree 15129649Ssam #define enp_tohost enp_u.iface.e_tohost 15229649Ssam #define enp_enpfree enp_u.iface.e_enpfree 15329649Ssam #define enp_freembuf enp_u.iface.h_freembuf 15429649Ssam #define enp_stat enp_u.iface.e_stat 15529649Ssam #define enp_addr enp_u.iface.e_netaddr 15629649Ssam 15730230Ssam #define ENPVAL 0xff /* enp_iow.hst2enp_interrupt poke value */ 15830230Ssam #define RESETVAL 0x00 /* enp_iow.enp2hst_clear_intr poke value */ 15929649Ssam 16030230Ssam #define INTR_ENP(addr) (addr->enp_iow.hst2enp_interrupt = ENPVAL) 16129649Ssam 16229649Ssam #if ENP == 30 16330230Ssam #define ACK_ENP_INTR(addr) (addr->enp_iow.enp2hst_clear_intr = RESETVAL) 16429649Ssam #define IS_ENP_INTR(addr) (addr->enp_iow.enp2hst_clear_intr&0x80) 16530295Ssam #endif 16629649Ssam 16729649Ssam #ifdef notdef 16830230Ssam #define RESET_ENP(addr) (addr->enp_iow.hst2enp_reset = 01) 16930230Ssam #else 17034508Skarels #ifdef lint 17134508Skarels #define RESET_ENP(addr) ((addr) = (addr)) 17234508Skarels #else 17329649Ssam #define RESET_ENP(addr) 17434508Skarels #endif lint 17529649Ssam #endif notdef 17629649Ssam 17734508Skarels #ifdef tahoe 17830230Ssam #define ENP_GO(addr,start) { \ 17930230Ssam int v = start; \ 18030295Ssam enpcopy((u_char *)&v, (u_char *)&addr->enp_prog_start, sizeof(v) ); \ 18130230Ssam v = 0x80800000; \ 18230295Ssam enpcopy((u_char *)&v, (u_char *)&addr->enp_go, sizeof(v) ); \ 18330230Ssam } 18429649Ssam #else 18530230Ssam #define ENP_GO(addr,start,intvec ) { \ 18630230Ssam addr->enp_prog_start = (u_int)(start); \ 18730230Ssam addr->enp_intrvec = (u_short) intvec; \ 18830230Ssam addr->enp_go = 0x80800000; \ 18930230Ssam } 19034508Skarels #endif tahoe 19129649Ssam 19229649Ssam /* 19330230Ssam * State bits 19429649Ssam */ 19529649Ssam #define S_ENPRESET 01 /* enp is in reset state */ 19629649Ssam #define S_ENPRUN 02 /* enp is in run state */ 19729649Ssam 19829649Ssam /* 19930230Ssam * Mode bits 20029649Ssam */ 20130230Ssam #define E_SWAP16 0x1 /* swap two octets within 16 */ 20230230Ssam #define E_SWAP32 0x2 /* swap 16s within 32 */ 20330230Ssam #define E_SWAPRD 0x4 /* swap on read */ 20430230Ssam #define E_SWAPWRT 0x8 /* swap on write */ 20530230Ssam #define E_DMA 0x10 /* enp does data moving */ 20629649Ssam 20730230Ssam #define E_EXAM_LIST 0x80000000 /* enp should examine addrlist */ 20830230Ssam #define E_ADDR_SUPP 0x40000000 /* enp should use supplied addr */ 20929649Ssam 21029649Ssam /* 21130230Ssam * Download ioctl definitions 21229649Ssam */ 21333091Sbostic #define ENPIOGO _IO('S',1) /* start the enp */ 21433091Sbostic #define ENPIORESET _IO('S',2) /* reset the enp */ 21529649Ssam 21629649Ssam /* 21730230Ssam * The ENP Data Buffer Structure 21829649Ssam */ 21930230Ssam typedef struct BCB { 22030230Ssam struct BCB *b_link; 22129649Ssam short b_stat; 22229649Ssam short b_len; 22330295Ssam u_char *b_addr; 22429649Ssam short b_msglen; 22529649Ssam short b_reserved; 22630230Ssam } BCB; 227