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

📄 forcedeth.c

📁 linux 内核源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
union ring_type {	struct ring_desc* orig;	struct ring_desc_ex* ex;};#define FLAG_MASK_V1 0xffff0000#define FLAG_MASK_V2 0xffffc000#define LEN_MASK_V1 (0xffffffff ^ FLAG_MASK_V1)#define LEN_MASK_V2 (0xffffffff ^ FLAG_MASK_V2)#define NV_TX_LASTPACKET	(1<<16)#define NV_TX_RETRYERROR	(1<<19)#define NV_TX_FORCED_INTERRUPT	(1<<24)#define NV_TX_DEFERRED		(1<<26)#define NV_TX_CARRIERLOST	(1<<27)#define NV_TX_LATECOLLISION	(1<<28)#define NV_TX_UNDERFLOW		(1<<29)#define NV_TX_ERROR		(1<<30)#define NV_TX_VALID		(1<<31)#define NV_TX2_LASTPACKET	(1<<29)#define NV_TX2_RETRYERROR	(1<<18)#define NV_TX2_FORCED_INTERRUPT	(1<<30)#define NV_TX2_DEFERRED		(1<<25)#define NV_TX2_CARRIERLOST	(1<<26)#define NV_TX2_LATECOLLISION	(1<<27)#define NV_TX2_UNDERFLOW	(1<<28)/* error and valid are the same for both */#define NV_TX2_ERROR		(1<<30)#define NV_TX2_VALID		(1<<31)#define NV_TX2_TSO		(1<<28)#define NV_TX2_TSO_SHIFT	14#define NV_TX2_TSO_MAX_SHIFT	14#define NV_TX2_TSO_MAX_SIZE	(1<<NV_TX2_TSO_MAX_SHIFT)#define NV_TX2_CHECKSUM_L3	(1<<27)#define NV_TX2_CHECKSUM_L4	(1<<26)#define NV_TX3_VLAN_TAG_PRESENT (1<<18)#define NV_RX_DESCRIPTORVALID	(1<<16)#define NV_RX_MISSEDFRAME	(1<<17)#define NV_RX_SUBSTRACT1	(1<<18)#define NV_RX_ERROR1		(1<<23)#define NV_RX_ERROR2		(1<<24)#define NV_RX_ERROR3		(1<<25)#define NV_RX_ERROR4		(1<<26)#define NV_RX_CRCERR		(1<<27)#define NV_RX_OVERFLOW		(1<<28)#define NV_RX_FRAMINGERR	(1<<29)#define NV_RX_ERROR		(1<<30)#define NV_RX_AVAIL		(1<<31)#define NV_RX2_CHECKSUMMASK	(0x1C000000)#define NV_RX2_CHECKSUMOK1	(0x10000000)#define NV_RX2_CHECKSUMOK2	(0x14000000)#define NV_RX2_CHECKSUMOK3	(0x18000000)#define NV_RX2_DESCRIPTORVALID	(1<<29)#define NV_RX2_SUBSTRACT1	(1<<25)#define NV_RX2_ERROR1		(1<<18)#define NV_RX2_ERROR2		(1<<19)#define NV_RX2_ERROR3		(1<<20)#define NV_RX2_ERROR4		(1<<21)#define NV_RX2_CRCERR		(1<<22)#define NV_RX2_OVERFLOW		(1<<23)#define NV_RX2_FRAMINGERR	(1<<24)/* error and avail are the same for both */#define NV_RX2_ERROR		(1<<30)#define NV_RX2_AVAIL		(1<<31)#define NV_RX3_VLAN_TAG_PRESENT (1<<16)#define NV_RX3_VLAN_TAG_MASK	(0x0000FFFF)/* Miscelaneous hardware related defines: */#define NV_PCI_REGSZ_VER1      	0x270#define NV_PCI_REGSZ_VER2      	0x2d4#define NV_PCI_REGSZ_VER3      	0x604/* various timeout delays: all in usec */#define NV_TXRX_RESET_DELAY	4#define NV_TXSTOP_DELAY1	10#define NV_TXSTOP_DELAY1MAX	500000#define NV_TXSTOP_DELAY2	100#define NV_RXSTOP_DELAY1	10#define NV_RXSTOP_DELAY1MAX	500000#define NV_RXSTOP_DELAY2	100#define NV_SETUP5_DELAY		5#define NV_SETUP5_DELAYMAX	50000#define NV_POWERUP_DELAY	5#define NV_POWERUP_DELAYMAX	5000#define NV_MIIBUSY_DELAY	50#define NV_MIIPHY_DELAY	10#define NV_MIIPHY_DELAYMAX	10000#define NV_MAC_RESET_DELAY	64#define NV_WAKEUPPATTERNS	5#define NV_WAKEUPMASKENTRIES	4/* General driver defaults */#define NV_WATCHDOG_TIMEO	(5*HZ)#define RX_RING_DEFAULT		128#define TX_RING_DEFAULT		256#define RX_RING_MIN		128#define TX_RING_MIN		64#define RING_MAX_DESC_VER_1	1024#define RING_MAX_DESC_VER_2_3	16384/* rx/tx mac addr + type + vlan + align + slack*/#define NV_RX_HEADERS		(64)/* even more slack. */#define NV_RX_ALLOC_PAD		(64)/* maximum mtu size */#define NV_PKTLIMIT_1	ETH_DATA_LEN	/* hard limit not known */#define NV_PKTLIMIT_2	9100	/* Actual limit according to NVidia: 9202 */#define OOM_REFILL	(1+HZ/20)#define POLL_WAIT	(1+HZ/100)#define LINK_TIMEOUT	(3*HZ)#define STATS_INTERVAL	(10*HZ)/* * desc_ver values: * The nic supports three different descriptor types: * - DESC_VER_1: Original * - DESC_VER_2: support for jumbo frames. * - DESC_VER_3: 64-bit format. */#define DESC_VER_1	1#define DESC_VER_2	2#define DESC_VER_3	3/* PHY defines */#define PHY_OUI_MARVELL	0x5043#define PHY_OUI_CICADA	0x03f1#define PHY_OUI_VITESSE	0x01c1#define PHY_OUI_REALTEK	0x0732#define PHYID1_OUI_MASK	0x03ff#define PHYID1_OUI_SHFT	6#define PHYID2_OUI_MASK	0xfc00#define PHYID2_OUI_SHFT	10#define PHYID2_MODEL_MASK		0x03f0#define PHY_MODEL_MARVELL_E3016		0x220#define PHY_MARVELL_E3016_INITMASK	0x0300#define PHY_CICADA_INIT1	0x0f000#define PHY_CICADA_INIT2	0x0e00#define PHY_CICADA_INIT3	0x01000#define PHY_CICADA_INIT4	0x0200#define PHY_CICADA_INIT5	0x0004#define PHY_CICADA_INIT6	0x02000#define PHY_VITESSE_INIT_REG1	0x1f#define PHY_VITESSE_INIT_REG2	0x10#define PHY_VITESSE_INIT_REG3	0x11#define PHY_VITESSE_INIT_REG4	0x12#define PHY_VITESSE_INIT_MSK1	0xc#define PHY_VITESSE_INIT_MSK2	0x0180#define PHY_VITESSE_INIT1	0x52b5#define PHY_VITESSE_INIT2	0xaf8a#define PHY_VITESSE_INIT3	0x8#define PHY_VITESSE_INIT4	0x8f8a#define PHY_VITESSE_INIT5	0xaf86#define PHY_VITESSE_INIT6	0x8f86#define PHY_VITESSE_INIT7	0xaf82#define PHY_VITESSE_INIT8	0x0100#define PHY_VITESSE_INIT9	0x8f82#define PHY_VITESSE_INIT10	0x0#define PHY_REALTEK_INIT_REG1	0x1f#define PHY_REALTEK_INIT_REG2	0x19#define PHY_REALTEK_INIT_REG3	0x13#define PHY_REALTEK_INIT1	0x0000#define PHY_REALTEK_INIT2	0x8e00#define PHY_REALTEK_INIT3	0x0001#define PHY_REALTEK_INIT4	0xad17#define PHY_GIGABIT	0x0100#define PHY_TIMEOUT	0x1#define PHY_ERROR	0x2#define PHY_100	0x1#define PHY_1000	0x2#define PHY_HALF	0x100#define NV_PAUSEFRAME_RX_CAPABLE 0x0001#define NV_PAUSEFRAME_TX_CAPABLE 0x0002#define NV_PAUSEFRAME_RX_ENABLE  0x0004#define NV_PAUSEFRAME_TX_ENABLE  0x0008#define NV_PAUSEFRAME_RX_REQ     0x0010#define NV_PAUSEFRAME_TX_REQ     0x0020#define NV_PAUSEFRAME_AUTONEG    0x0040/* MSI/MSI-X defines */#define NV_MSI_X_MAX_VECTORS  8#define NV_MSI_X_VECTORS_MASK 0x000f#define NV_MSI_CAPABLE        0x0010#define NV_MSI_X_CAPABLE      0x0020#define NV_MSI_ENABLED        0x0040#define NV_MSI_X_ENABLED      0x0080#define NV_MSI_X_VECTOR_ALL   0x0#define NV_MSI_X_VECTOR_RX    0x0#define NV_MSI_X_VECTOR_TX    0x1#define NV_MSI_X_VECTOR_OTHER 0x2/* statistics */struct nv_ethtool_str {	char name[ETH_GSTRING_LEN];};static const struct nv_ethtool_str nv_estats_str[] = {	{ "tx_bytes" },	{ "tx_zero_rexmt" },	{ "tx_one_rexmt" },	{ "tx_many_rexmt" },	{ "tx_late_collision" },	{ "tx_fifo_errors" },	{ "tx_carrier_errors" },	{ "tx_excess_deferral" },	{ "tx_retry_error" },	{ "rx_frame_error" },	{ "rx_extra_byte" },	{ "rx_late_collision" },	{ "rx_runt" },	{ "rx_frame_too_long" },	{ "rx_over_errors" },	{ "rx_crc_errors" },	{ "rx_frame_align_error" },	{ "rx_length_error" },	{ "rx_unicast" },	{ "rx_multicast" },	{ "rx_broadcast" },	{ "rx_packets" },	{ "rx_errors_total" },	{ "tx_errors_total" },	/* version 2 stats */	{ "tx_deferral" },	{ "tx_packets" },	{ "rx_bytes" },	{ "tx_pause" },	{ "rx_pause" },	{ "rx_drop_frame" }};struct nv_ethtool_stats {	u64 tx_bytes;	u64 tx_zero_rexmt;	u64 tx_one_rexmt;	u64 tx_many_rexmt;	u64 tx_late_collision;	u64 tx_fifo_errors;	u64 tx_carrier_errors;	u64 tx_excess_deferral;	u64 tx_retry_error;	u64 rx_frame_error;	u64 rx_extra_byte;	u64 rx_late_collision;	u64 rx_runt;	u64 rx_frame_too_long;	u64 rx_over_errors;	u64 rx_crc_errors;	u64 rx_frame_align_error;	u64 rx_length_error;	u64 rx_unicast;	u64 rx_multicast;	u64 rx_broadcast;	u64 rx_packets;	u64 rx_errors_total;	u64 tx_errors_total;	/* version 2 stats */	u64 tx_deferral;	u64 tx_packets;	u64 rx_bytes;	u64 tx_pause;	u64 rx_pause;	u64 rx_drop_frame;};#define NV_DEV_STATISTICS_V2_COUNT (sizeof(struct nv_ethtool_stats)/sizeof(u64))#define NV_DEV_STATISTICS_V1_COUNT (NV_DEV_STATISTICS_V2_COUNT - 6)/* diagnostics */#define NV_TEST_COUNT_BASE 3#define NV_TEST_COUNT_EXTENDED 4static const struct nv_ethtool_str nv_etests_str[] = {	{ "link      (online/offline)" },	{ "register  (offline)       " },	{ "interrupt (offline)       " },	{ "loopback  (offline)       " }};struct register_test {	__le32 reg;	__le32 mask;};static const struct register_test nv_registers_test[] = {	{ NvRegUnknownSetupReg6, 0x01 },	{ NvRegMisc1, 0x03c },	{ NvRegOffloadConfig, 0x03ff },	{ NvRegMulticastAddrA, 0xffffffff },	{ NvRegTxWatermark, 0x0ff },	{ NvRegWakeUpFlags, 0x07777 },	{ 0,0 }};struct nv_skb_map {	struct sk_buff *skb;	dma_addr_t dma;	unsigned int dma_len;};/* * SMP locking: * All hardware access under dev->priv->lock, except the performance * critical parts: * - rx is (pseudo-) lockless: it relies on the single-threading provided *	by the arch code for interrupts. * - tx setup is lockless: it relies on netif_tx_lock. Actual submission *	needs dev->priv->lock :-( * - set_multicast_list: preparation lockless, relies on netif_tx_lock. *//* in dev: base, irq */struct fe_priv {	spinlock_t lock;	struct net_device *dev;	struct napi_struct napi;	/* General data:	 * Locking: spin_lock(&np->lock); */	struct nv_ethtool_stats estats;	int in_shutdown;	u32 linkspeed;	int duplex;	int autoneg;	int fixed_mode;	int phyaddr;	int wolenabled;	unsigned int phy_oui;	unsigned int phy_model;	u16 gigabit;	int intr_test;	int recover_error;	/* General data: RO fields */	dma_addr_t ring_addr;	struct pci_dev *pci_dev;	u32 orig_mac[2];	u32 irqmask;	u32 desc_ver;	u32 txrxctl_bits;	u32 vlanctl_bits;	u32 driver_data;	u32 register_size;	int rx_csum;	u32 mac_in_use;	void __iomem *base;	/* rx specific fields.	 * Locking: Within irq hander or disable_irq+spin_lock(&np->lock);	 */	union ring_type get_rx, put_rx, first_rx, last_rx;	struct nv_skb_map *get_rx_ctx, *put_rx_ctx;	struct nv_skb_map *first_rx_ctx, *last_rx_ctx;	struct nv_skb_map *rx_skb;	union ring_type rx_ring;	unsigned int rx_buf_sz;	unsigned int pkt_limit;	struct timer_list oom_kick;	struct timer_list nic_poll;	struct timer_list stats_poll;	u32 nic_poll_irq;	int rx_ring_size;	/* media detection workaround.	 * Locking: Within irq hander or disable_irq+spin_lock(&np->lock);	 */	int need_linktimer;	unsigned long link_timeout;	/*	 * tx specific fields.	 */	union ring_type get_tx, put_tx, first_tx, last_tx;	struct nv_skb_map *get_tx_ctx, *put_tx_ctx;	struct nv_skb_map *first_tx_ctx, *last_tx_ctx;	struct nv_skb_map *tx_skb;	union ring_type tx_ring;	u32 tx_flags;	int tx_ring_size;	int tx_stop;	/* vlan fields */	struct vlan_group *vlangrp;	/* msi/msi-x fields */	u32 msi_flags;	struct msix_entry msi_x_entry[NV_MSI_X_MAX_VECTORS];	/* flow control */	u32 pause_flags;};/* * Maximum number of loops until we assume that a bit in the irq mask * is stuck. Overridable with module param. */static int max_interrupt_work = 5;/* * Optimization can be either throuput mode or cpu mode * * Throughput Mode: Every tx and rx packet will generate an interrupt. * CPU Mode: Interrupts are controlled by a timer.

⌨️ 快捷键说明

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