📄 if_enpreg.h
字号:
/*- * Copyright (c) 1991 The Regents of the University of California. * All rights reserved. * * This code is derived from software contributed to Berkeley by * Computer Consoles Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * @(#)if_enpreg.h 7.2 (Berkeley) 5/8/91 *//* 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 * of CMC. * * ENP-10 Ram Definition * * 3/15/85 Jon Phares * 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 */#define K *1024struct ether_addr { u_char ea_addr[6];};typedef struct ethlist { int e_listsize; /* active addr entries */ struct ether_addr e_baseaddr; /* addr lance is working with */ struct ether_addr e_addrs[16]; /* possible addresses */} ETHLIST;typedef struct { 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 -- "can't happen" */ u_long e_silo_underrun; /* transmit data fetch failed */ u_long e_late_coll; /* collision after xmit */ u_long e_lost_carrier; u_long e_babble; /* xmit length > 1518 */ u_long e_collision; u_long e_xmit_mem_err; 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 -- "can't happen" */ u_long e_silo_overrun; /* receive data store failed */ u_long e_rcv_mem_err;} ENPSTAT;typedef struct RING { short r_rdidx; short r_wrtidx; short r_size; short r_pad; int r_slot[1];} RING;typedef struct RING32 { short r_rdidx; short r_wrtidx; short r_size; short r_pad; /* to make VAXen happy */ int r_slot[32];} RING32;/* * ENP Ram data layout *//* * 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)typedef struct iow20 { char pad0; char hst2enp_interrupt; char pad1[510];} iow20;struct enpdevice {#ifdef notdef char enp_ram_rom[4 K];#endif notdef union { char all_ram[RAM_SIZE]; struct { u_int t_go; u_int t_pstart; } t; struct { char nram[RAM_SIZE - (HOST_RAMSIZE + ENP_RAMSIZE)]; char hram[HOST_RAMSIZE]; char kram[ENP_RAMSIZE]; } u_ram; struct { char pad7[0x100]; /* starts 0x1100 - 0x2000 */ short e_enpstate; /* 1102 */ short e_enpmode; /* 1104 */ int e_enpbase; /* 1104 */ int e_enprun; /* 1108 */ u_short e_intrvec; u_short e_dummy[3]; RING32 h_toenp; /* 110C */ RING32 h_hostfree; RING32 e_tohost; RING32 e_enpfree; ENPSTAT e_stat; ETHLIST e_netaddr; } iface; } enp_u; iow20 enp_iow;};#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)#if ENP == 30#define ACK_ENP_INTR(addr) (addr->enp_iow.enp2hst_clear_intr = RESETVAL)#define IS_ENP_INTR(addr) (addr->enp_iow.enp2hst_clear_intr&0x80)#endif#ifdef notdef#define RESET_ENP(addr) (addr->enp_iow.hst2enp_reset = 01)#else#ifdef lint#define RESET_ENP(addr) ((addr) = (addr))#else#define RESET_ENP(addr)#endif lint#endif notdef#ifdef tahoe#define ENP_GO(addr,start) { \ int v = start; \ enpcopy((u_char *)&v, (u_char *)&addr->enp_prog_start, sizeof(v) ); \ v = 0x80800000; \ enpcopy((u_char *)&v, (u_char *)&addr->enp_go, sizeof(v) ); \}#else#define ENP_GO(addr,start,intvec ) { \ addr->enp_prog_start = (u_int)(start); \ addr->enp_intrvec = (u_short) intvec; \ addr->enp_go = 0x80800000; \}#endif tahoe/* * State bits */#define S_ENPRESET 01 /* enp is in reset state */#define S_ENPRUN 02 /* enp is in run state *//* * Mode bits */#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 */typedef struct BCB { struct BCB *b_link; short b_stat; short b_len; u_char *b_addr; short b_msglen; short b_reserved;} BCB;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -