⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 elnk.c

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 C
📖 第 1 页 / 共 5 页
字号:
#define XL_W0_MFG_ID		0x00/* * Window 1 */#define XL_W1_TX_FIFO		0x10#define XL_W1_FREE_TX		0x0C#define XL_W1_TX_STATUS		0x0B#define XL_W1_TX_TIMER		0x0A#define XL_W1_RX_STATUS		0x08#define XL_W1_RX_FIFO		0x00/* * RX status codes */#define XL_RXSTATUS_OVERRUN	0x01#define XL_RXSTATUS_RUNT	0x02#define XL_RXSTATUS_ALIGN	0x04#define XL_RXSTATUS_CRC		0x08#define XL_RXSTATUS_OVERSIZE	0x10#define XL_RXSTATUS_DRIBBLE	0x20/* * TX status codes */#define XL_TXSTATUS_RECLAIM	0x02 /* 3c905B only */#define XL_TXSTATUS_OVERFLOW	0x04#define XL_TXSTATUS_MAXCOLS	0x08#define XL_TXSTATUS_UNDERRUN	0x10#define XL_TXSTATUS_JABBER	0x20#define XL_TXSTATUS_INTREQ	0x40#define XL_TXSTATUS_COMPLETE	0x80/* * Window 2 */#define XL_W2_RESET_OPTIONS	0x0C	/* 3c905B only */#define XL_W2_STATION_MASK_HI	0x0A#define XL_W2_STATION_MASK_MID	0x08#define XL_W2_STATION_MASK_LO	0x06#define XL_W2_STATION_ADDR_HI	0x04#define XL_W2_STATION_ADDR_MID	0x02#define XL_W2_STATION_ADDR_LO	0x00#define XL_RESETOPT_FEATUREMASK	0x0001|0x0002|0x004#define XL_RESETOPT_D3RESETDIS	0x0008#define XL_RESETOPT_DISADVFD	0x0010#define XL_RESETOPT_DISADV100	0x0020#define XL_RESETOPT_DISAUTONEG	0x0040#define XL_RESETOPT_DEBUGMODE	0x0080#define XL_RESETOPT_FASTAUTO	0x0100#define XL_RESETOPT_FASTEE	0x0200#define XL_RESETOPT_FORCEDCONF	0x0400#define XL_RESETOPT_TESTPDTPDR	0x0800#define XL_RESETOPT_TEST100TX	0x1000#define XL_RESETOPT_TEST100RX	0x2000#define XL_RESETOPT_INVERT_LED	0x0010#define XL_RESETOPT_INVERT_MII	0x4000/* * Window 3 (fifo management) */#define XL_W3_INTERNAL_CFG	0x00#define XL_W3_MAXPKTSIZE	0x04    /* 3c905B only */#define XL_W3_RESET_OPT		0x08#define XL_W3_FREE_TX		0x0C#define XL_W3_FREE_RX		0x0A#define XL_W3_MAC_CTRL		0x06#define XL_ICFG_CONNECTOR_MASK	0x00F00000#define XL_ICFG_CONNECTOR_BITS	20#define XL_ICFG_RAMSIZE_MASK	0x00000007#define XL_ICFG_RAMWIDTH	0x00000008#define XL_ICFG_ROMSIZE_MASK	(0x00000040|0x00000080)#define XL_ICFG_DISABLE_BASSD	0x00000100#define XL_ICFG_RAMLOC		0x00000200#define XL_ICFG_RAMPART		(0x00010000|0x00020000)#define XL_ICFG_XCVRSEL		(0x00100000|0x00200000|0x00400000)#define XL_ICFG_AUTOSEL		0x01000000#define XL_XCVR_10BT		0x00#define XL_XCVR_AUI		0x01#define XL_XCVR_RSVD_0		0x02#define XL_XCVR_COAX		0x03#define XL_XCVR_100BTX		0x04#define XL_XCVR_100BFX		0x05#define XL_XCVR_MII		0x06#define XL_XCVR_RSVD_1		0x07#define XL_XCVR_AUTO		0x08	/* 3c905B only */#define XL_MACCTRL_DEFER_EXT_END	0x0001#define XL_MACCTRL_DEFER_0		0x0002#define XL_MACCTRL_DEFER_1		0x0004#define XL_MACCTRL_DEFER_2		0x0008#define XL_MACCTRL_DEFER_3		0x0010#define XL_MACCTRL_DUPLEX		0x0020#define XL_MACCTRL_ALLOW_LARGE_PACK	0x0040#define XL_MACCTRL_EXTEND_AFTER_COL	0x0080 (3c905B only)#define XL_MACCTRL_FLOW_CONTROL_ENB	0x0100 (3c905B only)#define XL_MACCTRL_VLT_END		0x0200 (3c905B only)/* * The 'reset options' register contains power-on reset values * loaded from the EEPROM. This includes the supported media * types on the card. It is also known as the media options register. */#define XL_W3_MEDIA_OPT		0x08#define XL_MEDIAOPT_BT4		0x0001	/* MII */#define XL_MEDIAOPT_BTX		0x0002	/* on-chip */#define XL_MEDIAOPT_BFX		0x0004	/* on-chip */#define XL_MEDIAOPT_BT		0x0008	/* on-chip */#define XL_MEDIAOPT_BNC		0x0010	/* on-chip */#define XL_MEDIAOPT_AUI		0x0020	/* on-chip */#define XL_MEDIAOPT_MII		0x0040	/* MII */#define XL_MEDIAOPT_VCO		0x0100	/* 1st gen chip only */#define XL_MEDIAOPT_10FL	0x0100	/* 3x905B only, on-chip */#define XL_MEDIAOPT_MASK	0x01FF/* * Window 4 (diagnostics) */#define XL_W4_UPPERBYTESOK	0x0D#define XL_W4_BADSSD		0x0C#define XL_W4_MEDIA_STATUS	0x0A#define XL_W4_PHY_MGMT		0x08#define XL_W4_NET_DIAG		0x06#define XL_W4_FIFO_DIAG		0x04#define XL_W4_VCO_DIAG		0x02#define XL_W4_CTRLR_STAT	0x08#define XL_W4_TX_DIAG		0x00#define XL_MII_CLK		0x01#define XL_MII_DATA		0x02#define XL_MII_DIR		0x04#define XL_MEDIA_SQE		0x0008#define XL_MEDIA_10TP		0x00C0#define XL_MEDIA_LNK		0x0080#define XL_MEDIA_LNKBEAT	0x0800#define XL_MEDIASTAT_CRCSTRIP	0x0004#define XL_MEDIASTAT_SQEENB	0x0008#define XL_MEDIASTAT_COLDET	0x0010#define XL_MEDIASTAT_CARRIER	0x0020#define XL_MEDIASTAT_JABGUARD	0x0040#define XL_MEDIASTAT_LINKBEAT	0x0080#define XL_MEDIASTAT_JABDETECT	0x0200#define XL_MEDIASTAT_POLREVERS	0x0400#define XL_MEDIASTAT_LINKDETECT	0x0800#define XL_MEDIASTAT_TXINPROG	0x1000#define XL_MEDIASTAT_DCENB	0x4000#define XL_MEDIASTAT_AUIDIS	0x8000#define XL_NETDIAG_TEST_LOWVOLT		0x0001#define XL_NETDIAG_ASIC_REVMASK		(0x0002|0x0004|0x0008|0x0010|0x0020)#define XL_NETDIAG_UPPER_BYTES_ENABLE	0x0040#define XL_NETDIAG_STATS_ENABLED	0x0080#define XL_NETDIAG_TX_FATALERR		0x0100#define XL_NETDIAG_TRANSMITTING		0x0200#define XL_NETDIAG_RX_ENABLED		0x0400#define XL_NETDIAG_TX_ENABLED		0x0800#define XL_NETDIAG_FIFO_LOOPBACK	0x1000#define XL_NETDIAG_MAC_LOOPBACK		0x2000#define XL_NETDIAG_ENDEC_LOOPBACK	0x4000#define XL_NETDIAG_EXTERNAL_LOOP	0x8000/* * Window 5 */#define XL_W5_STAT_ENB		0x0C#define XL_W5_INTR_ENB		0x0A#define XL_W5_RECLAIM_THRESH	0x09	/* 3c905B only */#define XL_W5_RX_FILTER		0x08#define XL_W5_RX_EARLYTHRESH	0x06#define XL_W5_TX_AVAILTHRESH	0x02#define XL_W5_TX_STARTTHRESH	0x00/* * RX filter bits */#define XL_RXFILTER_INDIVIDUAL	0x01#define XL_RXFILTER_ALLMULTI	0x02#define XL_RXFILTER_BROADCAST	0x04#define XL_RXFILTER_ALLFRAMES	0x08#define XL_RXFILTER_MULTIHASH	0x10 /* 3c905B only *//* * Window 6 (stats) */#define XL_W6_TX_BYTES_OK	0x0C#define XL_W6_RX_BYTES_OK	0x0A#define XL_W6_UPPER_FRAMES_OK	0x09#define XL_W6_DEFERRED		0x08#define XL_W6_RX_OK		0x07#define XL_W6_TX_OK		0x06#define XL_W6_RX_OVERRUN	0x05#define XL_W6_COL_LATE		0x04#define XL_W6_COL_SINGLE	0x03#define XL_W6_COL_MULTIPLE	0x02#define XL_W6_SQE_ERRORS	0x01#define XL_W6_CARRIER_LOST	0x00/* * Window 7 (bus master control) */#define XL_W7_BM_ADDR		0x00#define XL_W7_BM_LEN		0x06#define XL_W7_BM_STATUS		0x0B#define XL_W7_BM_TIMEr		0x0A/* * bus master control registers */#define XL_BM_PKTSTAT		0x20#define XL_BM_DOWNLISTPTR	0x24#define XL_BM_FRAGADDR		0x28#define XL_BM_FRAGLEN		0x2C#define XL_BM_TXFREETHRESH	0x2F#define XL_BM_UPPKTSTAT		0x30#define XL_BM_UPLISTPTR		0x38struct xl_mii_frame {	u_int8_t		mii_stdelim;	u_int8_t		mii_opcode;	u_int8_t		mii_phyaddr;	u_int8_t		mii_regaddr;	u_int8_t		mii_turnaround;	u_int16_t		mii_data;};/* * MII constants */#define XL_MII_STARTDELIM	0x01#define XL_MII_READOP		0x02#define XL_MII_WRITEOP		0x01#define XL_MII_TURNAROUND	0x02/* * The 3C905B adapters implement a few features that we want to * take advantage of, namely the multicast hash filter. With older * chips, you only have the option of turning on reception of all * multicast frames, which is kind of lame. * * We also use this to decide on a transmit strategy. For the 3c90xB * cards, we can use polled descriptor mode, which reduces CPU overhead. */#define XL_TYPE_905B	1#define XL_TYPE_90X	2#define XL_FLAG_FUNCREG			0x0001#define XL_FLAG_PHYOK			0x0002#define XL_FLAG_EEPROM_OFFSET_30	0x0004#define XL_FLAG_WEIRDRESET		0x0008#define XL_FLAG_8BITROM			0x0010#define XL_FLAG_INVERT_LED_PWR		0x0020#define XL_FLAG_INVERT_MII_PWR		0x0040#define XL_FLAG_NO_XCVR_PWR		0x0080#define XL_FLAG_USE_MMIO		0x0100#define XL_NO_XCVR_PWR_MAGICBITS	0x0900#define XL_MIN_FRAMELEN		60#define XL_LAST_FRAG		0x80000000struct xl_stats {      /* accumulated stats */      u_int16_t		xl_carrier_lost;      u_int16_t		xl_sqe_errs;      u_int16_t		xl_tx_multi_collision;      u_int16_t		xl_tx_single_collision;      u_int16_t		xl_tx_late_collision;      u_int16_t		xl_rx_overrun;      u_int16_t		xl_tx_deferred;      u_int32_t		xl_rx_bytes_ok;      u_int32_t		xl_tx_bytes_ok;      u_int32_t		xl_tx_frames_ok;      u_int32_t		xl_rx_frames_ok;      u_int16_t		xl_badssd;      /* non-accumulated stats */      u_int16_t		intstatus;      u_int16_t		rxstatus;      u_int8_t		txstatus;      u_int16_t         mediastatus;      u_int32_t         txcomplete_ints;      u_int16_t         miianr, miipar, miistatus, miicmd;      u_int32_t         device_interrupts;      u_int32_t         internalconfig;      u_int16_t         mac_control;      u_int16_t         smbstatus;      u_int32_t         dmactl;      u_int16_t         txfree;};struct xl_type {      u_int16_t		xl_vid;      u_int16_t		xl_did;      char		*xl_name;};/* * Various supported device vendors/types and their names. */static struct xl_type xl_devs[] = {	{ TC_VENDORID, TC_DEVICEID_BOOMERANG_10BT,		"3Com 3c900-TPO Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_BOOMERANG_10BT_COMBO,		"3Com 3c900-COMBO Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_BOOMERANG_10_100BT,		"3Com 3c905-TX Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_BOOMERANG_100BT4,		"3Com 3c905-T4 Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_KRAKATOA_10BT,		"3Com 3c900B-TPO Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_KRAKATOA_10BT_COMBO,		"3Com 3c900B-COMBO Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_KRAKATOA_10BT_TPC,		"3Com 3c900B-TPC Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_CYCLONE_10FL,		"3Com 3c900B-FL Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_HURRICANE_10_100BT,		"3Com 3c905B-TX Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_CYCLONE_10_100BT4,		"3Com 3c905B-T4 Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_CYCLONE_10_100FX,		"3Com 3c905B-FX/SC Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_CYCLONE_10_100_COMBO,		"3Com 3c905B-COMBO Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_TORNADO_10_100BT,		"3Com 3c905C-TX Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_TORNADO_10_100BT_920B,		"3Com 3c920B-EMB Integrated Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_HURRICANE_10_100BT_SERV,		"3Com 3c980 Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_TORNADO_10_100BT_SERV,		"3Com 3c980C Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_HURRICANE_SOHO100TX,		"3Com 3cSOHO100-TX OfficeConnect" },	{ TC_VENDORID, TC_DEVICEID_TORNADO_HOMECONNECT,		"3Com 3c450-TX HomeConnect" },	{ TC_VENDORID, TC_DEVICEID_HURRICANE_555,		"3Com 3c555 Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_HURRICANE_556,		"3Com 3c556 Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_HURRICANE_556B,		"3Com 3c556B Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_HURRICANE_575A,		"3Com 3c575TX Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_HURRICANE_575B,		"3Com 3c575B Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_HURRICANE_575C,		"3Com 3c575C Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_HURRICANE_656,		"3Com 3c656 Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_HURRICANE_656B,		"3Com 3c656B Fast Etherlink XL" },	{ TC_VENDORID, TC_DEVICEID_TORNADO_656C,		"3Com 3c656C Fast Etherlink XL" },	{ 0, 0, NULL }};#define XL_TIMEOUT		1000/* rx message descriptor entry, ensure the struct is aligned to 8 bytes */struct RXMD {      /* used by hardware */      volatile unsigned32 next;      volatile unsigned32 status;      volatile unsigned32 addr;      volatile unsigned32 length;      /* used by software */      struct mbuf       *mbuf;        /* scratch variable used in the tx ring */      struct RXMD       *next_md;} __attribute__ ((aligned (8), packed));#define NUM_FRAGS       6/*  * tx message descriptor entry, ensure the struct is aligned to 8 bytes */struct tfrag{      volatile unsigned32 addr;      volatile unsigned32 length;} __attribute__ ((packed));struct TXMD {      /* used by hardware */      volatile unsigned32 next;      volatile unsigned32 status;      struct tfrag        txfrags[NUM_FRAGS];      /* used by software */      struct mbuf       *mbuf;        /* scratch variable used in the tx ring */      struct TXMD       *next_md, *chainptr;} __attribute__ ((aligned (8), packed));#define NUM_CHAIN_LENGTHS       50/* * Per-device data */struct elnk_softc {      struct arpcom		arpcom;      rtems_irq_connect_data    irqInfo;      rtems_event_set           ioevent;      unsigned int 		ioaddr;      unsigned char             *bufferBase, *ringBase;      struct RXMD      *rx_ring, *curr_rx_md;      struct TXMD      *tx_ring, *last_tx_md, *last_txchain_head;

⌨️ 快捷键说明

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