if_devar.h

来自「基于组件方式开发操作系统的OSKIT源代码」· C头文件 代码 · 共 1,188 行 · 第 1/3 页

H
1,188
字号
 * 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__)    struct device tulip_dev;		/* base device */    void *tulip_ih;			/* intrrupt vectoring */    void *tulip_ats;			/* shutdown hook */    bus_space_tag_t tulip_bustag;    bus_space_handle_t tulip_bushandle;	/* CSR region handle */    pci_chipset_tag_t tulip_pc;    struct ethercom tulip_ec;    u_int8_t tulip_enaddr[ETHER_ADDR_LEN];#endif#if !defined(tulip_ifmedia) && defined(IFM_ETHER)    struct ifmedia tulip_ifmedia;#endif#if defined(TULIP_BUS_DMA)    bus_dma_tag_t tulip_dmatag;		/* bus DMA tag */#if !defined(TULIP_BUS_DMA_NOTX)    bus_dmamap_t tulip_setupmap;    bus_dmamap_t tulip_txdescmap;    bus_dmamap_t tulip_txmaps[TULIP_TXDESCS];    unsigned tulip_txmaps_free;#endif#if !defined(TULIP_BUS_DMA_NORX)    bus_dmamap_t tulip_rxdescmap;    bus_dmamap_t tulip_rxmaps[TULIP_RXDESCS];    unsigned tulip_rxmaps_free;#endif#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_no_txmaps;	u_int32_t dbg_txput_finishes[8];	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;    tulip_desc_t *tulip_rxdescs;    tulip_desc_t *tulip_txdescs;#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 */    "Full Duplex 10baseT",	/* TULIP_MEDIA_10BASET_FD */    "BNC",			/* TULIP_MEDIA_BNC */    "AUI",			/* TULIP_MEDIA_AUI */    "External SIA",		/* TULIP_MEDIA_EXTSIA */    "AUI/BNC",			/* TULIP_MEDIA_AUIBNC */    "100baseTX",		/* TULIP_MEDIA_100BASET */    "Full Duplex 100baseTX",	/* TULIP_MEDIA_100BASET_FD */    "100baseT4",		/* TULIP_MEDIA_100BASET4 */    "100baseFX",		/* TULIP_MEDIA_100BASEFX */    "Full Duplex 100baseFX",	/* TULIP_MEDIA_100BASEFX_FD */};#if defined(IFM_ETHER)static const int tulip_media_to_ifmedia[] = {    IFM_ETHER | IFM_NONE,		/* TULIP_MEDIA_UNKNOWN */    IFM_ETHER | IFM_10_T,		/* TULIP_MEDIA_10BASET */    IFM_ETHER | IFM_10_T | IFM_FDX,	/* TULIP_MEDIA_10BASET_FD */    IFM_ETHER | IFM_10_2,		/* TULIP_MEDIA_BNC */    IFM_ETHER | IFM_10_5,		/* TULIP_MEDIA_AUI */    IFM_ETHER | IFM_MANUAL,		/* TULIP_MEDIA_EXTSIA */    IFM_ETHER | IFM_10_5,		/* TULIP_MEDIA_AUIBNC */    IFM_ETHER | IFM_100_TX,		/* TULIP_MEDIA_100BASET */    IFM_ETHER | IFM_100_TX | IFM_FDX,	/* TULIP_MEDIA_100BASET_FD */    IFM_ETHER | IFM_100_T4,		/* TULIP_MEDIA_100BASET4 */    IFM_ETHER | IFM_100_FX,		/* TULIP_MEDIA_100BASEFX */    IFM_ETHER | IFM_100_FX | IFM_FDX,	/* TULIP_MEDIA_100BASEFX_FD */};#endif /* defined(IFM_ETHER) */static const char * const tulip_system_errors[] = {    "parity error",    "master abort",    "target abort",    "reserved #3",    "reserved #4",    "reserved #5",    "reserved #6",    "reserved #7",};static const char * const tulip_status_bits[] = {    NULL,    "transmit process stopped",    NULL,    "transmit jabber timeout",

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?