📄 if_devar.h
字号:
TULIP_21140_DEC_EB, /* Digital Semicondutor 21140 Evaluation Board */ TULIP_21140_MII, /* 21140[A] with MII */ TULIP_21140_DEC_DE500, /* Digital DE500-?? 10/100 */ TULIP_21140_SMC_9332, /* SMC 9332 */ TULIP_21140_COGENT_EM100, /* Cogent EM100 100 only */ TULIP_21140_ZNYX_ZX34X, /* ZNYX ZX342 10/100 */ TULIP_21140_ASANTE, /* AsanteFast 10/100 */ TULIP_21140_EN1207, /* Accton EN2107 10/100 BNC */ TULIP_21140_NECDDB, /* NEC Eval board */ TULIP_21041_GENERIC /* Generic 21041 card */} tulip_board_t;typedef enum { TULIP_MEDIAPOLL_TIMER, /* 100ms timer fired */ TULIP_MEDIAPOLL_FASTTIMER, /* <100ms timer fired */ TULIP_MEDIAPOLL_LINKFAIL, /* called from interrupt routine */ TULIP_MEDIAPOLL_LINKPASS, /* called from interrupt routine */ TULIP_MEDIAPOLL_START, /* start a media probe (called from reset) */ TULIP_MEDIAPOLL_TXPROBE_OK, /* txprobe succeeded */ TULIP_MEDIAPOLL_TXPROBE_FAILED, /* txprobe failed */ TULIP_MEDIAPOLL_MAX} tulip_mediapoll_event_t;typedef enum { TULIP_LINK_DOWN, /* Link is down */ TULIP_LINK_UP, /* link is ok */ TULIP_LINK_UNKNOWN /* we can't tell either way */} tulip_link_status_t;/* * This data structure is used to abstract out the quirks. * media_probe = tries to determine the media type. * media_select = enables the current media (or autosenses) * media_poll = autosenses media * media_preset = 21140, etal requires bit to set before the * the software reset; hence pre-set. Should be * pre-reset but that's ugly. */typedef struct { tulip_board_t bd_type; void (*bd_media_probe)(tulip_softc_t * const sc); void (*bd_media_select)(tulip_softc_t * const sc); void (*bd_media_poll)(tulip_softc_t * const sc, tulip_mediapoll_event_t event); void (*bd_media_preset)(tulip_softc_t * const sc);#if defined(__bsdi__) && _BSDI_VERSION >= 199701 struct ifmedia_entry *bd_media_list; int bd_media_cnt; int bd_media_options_mask;#endif} tulip_boardsw_t;/* * The next few declarations are for MII/PHY based board. * * The first enumeration identifies a superset of various datums * that can be obtained from various PHY chips. Not all PHYs will * support all datums. * The modedata structure indicates what register contains * a datum, what mask is applied the register contents, and what the * result should be. * The attr structure records information about a supported PHY. * The phy structure records information about a PHY instance. */typedef enum { PHY_MODE_10T, PHY_MODE_100TX, PHY_MODE_100T4, PHY_MODE_FULLDUPLEX, PHY_MODE_MAX} tulip_phy_mode_t;typedef struct { u_int16_t pm_regno; u_int16_t pm_mask; u_int16_t pm_value;} tulip_phy_modedata_t;typedef struct { u_int32_t attr_id; u_int16_t attr_flags;#define PHY_NEED_HARD_RESET 0x0001#define PHY_DUAL_CYCLE_TA 0x0002 tulip_phy_modedata_t attr_modes[PHY_MODE_MAX];#ifdef TULIP_DEBUG const char *attr_name;#endif} tulip_phy_attr_t;/* * Various probe states used when trying to autosense the media. */typedef enum { TULIP_PROBE_INACTIVE, TULIP_PROBE_PHYRESET, TULIP_PROBE_PHYAUTONEG, TULIP_PROBE_GPRTEST, TULIP_PROBE_MEDIATEST, TULIP_PROBE_FAILED} tulip_probe_state_t;typedef struct { /* * Transmit Statistics */ u_int32_t dot3StatsSingleCollisionFrames; u_int32_t dot3StatsMultipleCollisionFrames; u_int32_t dot3StatsSQETestErrors; u_int32_t dot3StatsDeferredTransmissions; u_int32_t dot3StatsLateCollisions; u_int32_t dot3StatsExcessiveCollisions; u_int32_t dot3StatsCarrierSenseErrors; u_int32_t dot3StatsInternalMacTransmitErrors; u_int32_t dot3StatsInternalTransmitUnderflows; /* not in rfc1650! */ u_int32_t dot3StatsInternalTransmitBabbles; /* not in rfc1650! */ /* * Receive Statistics */ u_int32_t dot3StatsMissedFrames; /* not in rfc1650! */ u_int32_t dot3StatsAlignmentErrors; u_int32_t dot3StatsFCSErrors; u_int32_t dot3StatsFrameTooLongs; u_int32_t dot3StatsInternalMacReceiveErrors;} tulip_dot3_stats_t;/* * Now to important stuff. This is softc structure (where does softc * come from??? No idea) for the tulip device. * */struct _tulip_softc_t {#if defined(__bsdi__) struct device tulip_dev; /* base device */ struct isadev tulip_id; /* ISA device */ struct intrhand tulip_ih; /* intrrupt vectoring */ struct atshutdown tulip_ats; /* shutdown hook */#if _BSDI_VERSION < 199401 caddr_t tulip_bpf; /* for BPF */#else prf_t tulip_pf; /* printf function */#if _BSDI_VERSION >= 199701 struct mii_data tulip_mii; /* Generic MII and media data */#define tulip_ifmedia tulip_mii.mii_media#endif /* _BSDI_VERSION >= 199701 */#endif /* _BSDI_VERSION < 199401 */#endif /* __bsdi__ */#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(PROM) struct device tulip_dev; /* base device */ void *tulip_ih; /* intrrupt vectoring */ void *tulip_ats; /* shutdown hook */#if !defined(PROM) bus_space_tag_t tulip_bustag; /* tag of CSR region being used */ bus_space_handle_t tulip_bushandle; /* handle for CSR region being used */ pci_chipset_tag_t tulip_pc;#endif#if !defined(__OpenBSD__) && !defined(PROM) struct ethercom tulip_ec;#endif u_int8_t tulip_enaddr[ETHER_ADDR_LEN];#endif#if !defined(tulip_ifmedia) && defined(IFM_ETHER) struct ifmedia tulip_ifmedia;#endif#if !defined(__NetBSD__) struct arpcom tulip_ac;#endif tulip_regfile_t tulip_csrs; u_int32_t tulip_flags;#define TULIP_WANTSETUP 0x00000001#define TULIP_WANTHASHPERFECT 0x00000002#define TULIP_WANTHASHONLY 0x00000004#define TULIP_DOINGSETUP 0x00000008#define TULIP_PRINTMEDIA 0x00000010#define TULIP_TXPROBE_ACTIVE 0x00000020#define TULIP_ALLMULTI 0x00000040#define TULIP_WANTRXACT 0x00000080#define TULIP_RXACT 0x00000100#define TULIP_INRESET 0x00000200#define TULIP_NEEDRESET 0x00000400#define TULIP_SQETEST 0x00000800#define TULIP_xxxxxx0 0x00001000#define TULIP_xxxxxx1 0x00002000#define TULIP_WANTTXSTART 0x00004000#define TULIP_NEWTXTHRESH 0x00008000#define TULIP_NOAUTOSENSE 0x00010000#define TULIP_PRINTLINKUP 0x00020000#define TULIP_LINKUP 0x00040000#define TULIP_RXBUFSLOW 0x00080000#define TULIP_NOMESSAGES 0x00100000#define TULIP_SYSTEMERROR 0x00200000#define TULIP_TIMEOUTPENDING 0x00400000#define TULIP_xxxxxx2 0x00800000#define TULIP_TRYNWAY 0x01000000#define TULIP_DIDNWAY 0x02000000#define TULIP_RXIGNORE 0x04000000#define TULIP_PROBE1STPASS 0x08000000#define TULIP_DEVICEPROBE 0x10000000#define TULIP_PROMISC 0x20000000#define TULIP_HASHONLY 0x40000000#define TULIP_xxxxxx3 0x80000000 /* only 4 bits left! */ u_int32_t tulip_features; /* static bits indicating features of chip */#define TULIP_HAVE_GPR 0x00000001 /* have gp register (140[A]) */#define TULIP_HAVE_RXBADOVRFLW 0x00000002 /* RX corrupts on overflow */#define TULIP_HAVE_POWERMGMT 0x00000004 /* Snooze/sleep modes */#define TULIP_HAVE_MII 0x00000008 /* Some medium on MII */#define TULIP_HAVE_SIANWAY 0x00000010 /* SIA does NWAY */#define TULIP_HAVE_DUALSENSE 0x00000020 /* SIA senses both AUI & TP */#define TULIP_HAVE_SIAGP 0x00000040 /* SIA has a GP port */#define TULIP_HAVE_BROKEN_HASH 0x00000080 /* Broken Multicast Hash */#define TULIP_HAVE_ISVSROM 0x00000100 /* uses ISV SROM Format */#define TULIP_HAVE_BASEROM 0x00000200 /* Board ROM can be cloned */#define TULIP_HAVE_SLAVEDROM 0x00000400 /* Board ROM cloned */#define TULIP_HAVE_SLAVEDINTR 0x00000800 /* Board slaved interrupt */#define TULIP_HAVE_SHAREDINTR 0x00001000 /* Board shares interrupts */#define TULIP_HAVE_OKROM 0x00002000 /* ROM was recognized */#define TULIP_HAVE_NOMEDIA 0x00004000 /* did not detect any media */#define TULIP_HAVE_STOREFWD 0x00008000 /* have CMD_STOREFWD */#define TULIP_HAVE_SIA100 0x00010000 /* has LS100 in SIA status */#define TULIP_HAVE_OKSROM 0x00020000 /* SROM CRC is OK */ u_int32_t tulip_intrmask; /* our copy of csr_intr */ u_int32_t tulip_cmdmode; /* our copy of csr_cmdmode */ u_int32_t tulip_last_system_error : 3; /* last system error (only value is TULIP_SYSTEMERROR is also set) */ u_int32_t tulip_txtimer : 2; /* transmission timer */ u_int32_t tulip_system_errors; /* number of system errors encountered */ u_int32_t tulip_statusbits; /* status bits from CSR5 that may need to be printed */ tulip_media_info_t *tulip_mediums[TULIP_MEDIA_MAX]; /* indexes into mediainfo */ tulip_media_t tulip_media; /* current media type */ u_int32_t tulip_abilities; /* remote system's abiltities (as defined in IEEE 802.3u) */ u_int8_t tulip_revinfo; /* revision of chip */ u_int8_t tulip_phyaddr; /* 0..31 -- address of current phy */ u_int8_t tulip_gpinit; /* active pins on 21140 */ u_int8_t tulip_gpdata; /* default gpdata for 21140 */ struct { u_int8_t probe_count; /* count of probe operations */ int32_t probe_timeout; /* time in ms of probe timeout */ tulip_probe_state_t probe_state; /* current media probe state */ tulip_media_t probe_media; /* current media being probed */ u_int32_t probe_mediamask; /* medias checked */ u_int32_t probe_passes; /* times autosense failed */ u_int32_t probe_txprobes; /* txprobes attempted */ } tulip_probe;#define tulip_probe_count tulip_probe.probe_count#define tulip_probe_timeout tulip_probe.probe_timeout#define tulip_probe_state tulip_probe.probe_state#define tulip_probe_media tulip_probe.probe_media#define tulip_probe_mediamask tulip_probe.probe_mediamask#define tulip_probe_passes tulip_probe.probe_passes tulip_chipid_t tulip_chipid; /* type of chip we are using */ const tulip_boardsw_t *tulip_boardsw; /* board/chip characteristics */ tulip_softc_t *tulip_slaves; /* slaved devices (ZX3xx) */#if defined(TULIP_DEBUG) /* * Debugging/Statistical information */ struct { tulip_media_t dbg_last_media; u_int32_t dbg_intrs; u_int32_t dbg_media_probes; u_int32_t dbg_txprobe_nocarr; u_int32_t dbg_txprobe_exccoll; u_int32_t dbg_link_downed; u_int32_t dbg_link_suspected; u_int32_t dbg_link_intrs; u_int32_t dbg_link_pollintrs; u_int32_t dbg_link_failures; u_int32_t dbg_nway_starts; u_int32_t dbg_nway_failures; u_int16_t dbg_phyregs[32][4]; u_int32_t dbg_rxlowbufs; u_int32_t dbg_rxintrs; u_int32_t dbg_last_rxintrs; u_int32_t dbg_high_rxintrs_hz; u_int32_t dbg_txprobes_ok[TULIP_MEDIA_MAX]; u_int32_t dbg_txprobes_failed[TULIP_MEDIA_MAX]; u_int32_t dbg_events[TULIP_MEDIAPOLL_MAX]; u_int32_t dbg_rxpktsperintr[TULIP_RXDESCS]; } tulip_dbg;#endif#if defined(TULIP_PERFSTATS)#define TULIP_PERF_CURRENT 0#define TULIP_PERF_PREVIOUS 1#define TULIP_PERF_TOTAL 2#define TULIP_PERF_MAX 3 struct tulip_perfstats { u_quad_t perf_intr_cycles; u_quad_t perf_ifstart_cycles; u_quad_t perf_ifstart_one_cycles; u_quad_t perf_ifioctl_cycles; u_quad_t perf_ifwatchdog_cycles; u_quad_t perf_timeout_cycles; u_quad_t perf_txput_cycles; u_quad_t perf_txintr_cycles; u_quad_t perf_rxintr_cycles; u_quad_t perf_rxget_cycles; unsigned perf_intr; unsigned perf_ifstart; unsigned perf_ifstart_one; unsigned perf_ifioctl; unsigned perf_ifwatchdog; unsigned perf_timeout; unsigned perf_txput; unsigned perf_txintr; unsigned perf_rxintr; unsigned perf_rxget; } tulip_perfstats[TULIP_PERF_MAX];#define tulip_curperfstats tulip_perfstats[TULIP_PERF_CURRENT]#endif struct ifqueue tulip_txq; struct ifqueue tulip_rxq; tulip_dot3_stats_t tulip_dot3stats; tulip_ringinfo_t tulip_rxinfo; tulip_ringinfo_t tulip_txinfo; tulip_media_info_t tulip_mediainfo[10]; /* * The setup buffers for sending the setup frame to the chip. * one is the one being sent while the other is the one being * filled. */ u_int32_t tulip_setupbuf[192/sizeof(u_int32_t)]; u_int32_t tulip_setupdata[192/sizeof(u_int32_t)]; char tulip_boardid[16]; /* buffer for board ID */ u_int8_t tulip_rombuf[128];#if defined(__NetBSD__) struct device *tulip_pci_busno; /* needed for multiport boards */#else u_int8_t tulip_pci_busno; /* needed for multiport boards */#endif u_int8_t tulip_pci_devno; /* needed for multiport boards */ u_int8_t tulip_connidx; tulip_srom_connection_t tulip_conntype;#ifdef __mips u_int8_t pad0[32];#endif /* * These areas are accessed by DMA. Do not allow adjacent * cache line accesses to trash them */ tulip_desc_t tulip_rxdescs[TULIP_RXDESCS]; tulip_desc_t tulip_txdescs[TULIP_TXDESCS];#ifdef __mips u_int8_t pad1[32];#endif#if defined(__NetBSD__) && NRND > 0 rndsource_element_t tulip_rndsource;#endif};#if defined(IFM_ETHER)#define TULIP_DO_AUTOSENSE(sc) (IFM_SUBTYPE((sc)->tulip_ifmedia.ifm_media) == IFM_AUTO)#else#define TULIP_DO_AUTOSENSE(sc) (((sc)->tulip_flags & TULIP_NOAUTOSENSE) == 0)#endif#if defined(TULIP_HDR_DATA)static const char * const tulip_chipdescs[] = { "21040 [10Mb/s]",#if defined(TULIP_EISA) "DE425 [10Mb/s]",#else NULL,#endif "21041 [10Mb/s]", "21140 [10-100Mb/s]", "21140A [10-100Mb/s]", "21142 [10-100Mb/s]", "21143 [10-100Mb/s]",};static const char * const tulip_mediums[] = { "unknown", /* TULIP_MEDIA_UNKNOWN */ "10baseT", /* TULIP_MEDIA_10BASET */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -