* @(#)if_enpreg.h 7.1 (Berkeley) %G%
/* Copyright (c) 1984 by Communication Machinery Corporation
* This file contains material which is proprietary to
* Communication Machinery Corporation (CMC) and which
* may not be divulged without the written permission
* Update 7/10/85 S. Holmgren
* ENP-10 update 7/21/85 J. Mullen
* ENP-20 update 8/11/85 J. Mullen
* Mods for CCI TAHOE system 8/14/85 J. Mullen
int e_listsize
; /* active addr entries */
struct ether_addr e_baseaddr
; /* addr lance is working with */
struct ether_addr e_addrs
[16]; /* possible addresses */
u_long e_xmit_successful
; /* Successful transmissions */
u_long e_mult_retry
; /* multiple retries on xmit */
u_long e_one_retry
; /* single retries */
u_long e_fail_retry
; /* too many retries */
u_long e_deferrals
; /* xmit delayed 'cuz cable busy */
u_long e_xmit_buff_err
; /* xmit data chaining failed --
u_long e_silo_underrun
; /* transmit data fetch failed */
u_long e_late_coll
; /* collision after xmit */
u_long e_babble
; /* xmit length > 1518 */
u_long e_rcv_successful
; /* good receptions */
u_long e_rcv_missed
; /* no recv buff available */
u_long e_crc_err
; /* checksum failed */
u_long e_frame_err
; /* crc error & data length != 0 mod 8 */
u_long e_rcv_buff_err
; /* rcv data chain failure --
u_long e_silo_overrun
; /* receive data store failed */
short r_pad
; /* to make VAXen happy */
* Note: paged window (4 K) is identity mapped by ENP kernel to provide
* 124 K contiguous RAM (as reflected in RAM_SIZE)
#define RAM_WINDOW (128 K)
#define IOACCESS_WINDOW (512)
#define FIXED_WINDOW (RAM_WINDOW - IOACCESS_WINDOW)
#define RAMROM_SWAP (4 K)
#define RAM_SIZE (FIXED_WINDOW - RAMROM_SWAP)
#define HOST_RAMSIZE (48 K)
#define ENP_RAMSIZE (20 K)
char nram
[RAM_SIZE
- (HOST_RAMSIZE
+ ENP_RAMSIZE
)];
char pad7
[0x100]; /* starts 0x1100 - 0x2000 */
short e_enpstate
; /* 1102 */
short e_enpmode
; /* 1104 */
int e_enpbase
; /* 1104 */
RING32 h_toenp
; /* 110C */
#define enp_ram enp_u.all_ram
#define enp_nram enp_u.u_ram.nram
#define enp_hram enp_u.u_ram.hram
#define enp_kram enp_u.u_ram.kram
#define enp_go enp_u.t.t_go
#define enp_prog_start enp_u.t.t_pstart
#define enp_intrvec enp_u.iface.e_intrvec
#define enp_state enp_u.iface.e_enpstate
#define enp_mode enp_u.iface.e_enpmode
#define enp_base enp_u.iface.e_enpbase
#define enp_enprun enp_u.iface.e_enprun
#define enp_toenp enp_u.iface.h_toenp
#define enp_hostfree enp_u.iface.h_hostfree
#define enp_tohost enp_u.iface.e_tohost
#define enp_enpfree enp_u.iface.e_enpfree
#define enp_freembuf enp_u.iface.h_freembuf
#define enp_stat enp_u.iface.e_stat
#define enp_addr enp_u.iface.e_netaddr
#define ENPVAL 0xff /* enp_iow.hst2enp_interrupt poke value */
#define RESETVAL 0x00 /* enp_iow.enp2hst_clear_intr poke value */
#define INTR_ENP(addr) (addr->enp_iow.hst2enp_interrupt = ENPVAL)
#define ACK_ENP_INTR(addr) (addr->enp_iow.enp2hst_clear_intr = RESETVAL)
#define IS_ENP_INTR(addr) (addr->enp_iow.enp2hst_clear_intr&0x80)
#define RESET_ENP(addr) (addr->enp_iow.hst2enp_reset = 01)
#define RESET_ENP(addr) ((addr) = (addr))
#define ENP_GO(addr,start) { \
enpcopy((u_char *)&v, (u_char *)&addr->enp_prog_start, sizeof(v) ); \
enpcopy((u_char *)&v, (u_char *)&addr->enp_go, sizeof(v) ); \
#define ENP_GO(addr,start,intvec ) { \
addr->enp_prog_start = (u_int)(start); \
addr->enp_intrvec = (u_short) intvec; \
addr->enp_go = 0x80800000; \
#define S_ENPRESET 01 /* enp is in reset state */
#define S_ENPRUN 02 /* enp is in run state */
#define E_SWAP16 0x1 /* swap two octets within 16 */
#define E_SWAP32 0x2 /* swap 16s within 32 */
#define E_SWAPRD 0x4 /* swap on read */
#define E_SWAPWRT 0x8 /* swap on write */
#define E_DMA 0x10 /* enp does data moving */
#define E_EXAM_LIST 0x80000000 /* enp should examine addrlist */
#define E_ADDR_SUPP 0x40000000 /* enp should use supplied addr */
* Download ioctl definitions
#define ENPIOGO _IO('S',1) /* start the enp */
#define ENPIORESET _IO('S',2) /* reset the enp */
* The ENP Data Buffer Structure