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

📄 e1000_param.c

📁 linux-2.4.29操作系统的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*******************************************************************************    Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved.    This program is free software; you can redistribute it and/or modify it   under the terms of the GNU General Public License as published by the Free   Software Foundation; either version 2 of the License, or (at your option)   any later version.    This program is distributed in the hope that it will be useful, but WITHOUT   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for   more details.    You should have received a copy of the GNU General Public License along with  this program; if not, write to the Free Software Foundation, Inc., 59   Temple Place - Suite 330, Boston, MA  02111-1307, USA.    The full GNU General Public License is included in this distribution in the  file called LICENSE.    Contact Information:  Linux NICS <linux.nics@intel.com>  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497*******************************************************************************/#include "e1000.h"/* This is the only thing that needs to be changed to adjust the * maximum number of ports that the driver can manage. */#define E1000_MAX_NIC 32#define OPTION_UNSET   -1#define OPTION_DISABLED 0#define OPTION_ENABLED  1/* All parameters are treated the same, as an integer array of values. * This macro just reduces the need to repeat the same declaration code * over and over (plus this helps to avoid typo bugs). */#define E1000_PARAM_INIT { [0 ... E1000_MAX_NIC] = OPTION_UNSET }/* Module Parameters are always initialized to -1, so that the driver * can tell the difference between no user specified value or the * user asking for the default value. * The true default values are loaded in when e1000_check_options is called. * * This is a GCC extension to ANSI C. * See the item "Labeled Elements in Initializers" in the section * "Extensions to the C Language Family" of the GCC documentation. */#define E1000_PARAM(X, desc) \	static const int __devinitdata X[E1000_MAX_NIC+1] = E1000_PARAM_INIT; \	MODULE_PARM(X, "1-" __MODULE_STRING(E1000_MAX_NIC) "i"); \	MODULE_PARM_DESC(X, desc);/* Transmit Descriptor Count * * Valid Range: 80-256 for 82542 and 82543 gigabit ethernet controllers * Valid Range: 80-4096 for 82544 and newer * * Default Value: 256 */E1000_PARAM(TxDescriptors, "Number of transmit descriptors");/* Receive Descriptor Count * * Valid Range: 80-256 for 82542 and 82543 gigabit ethernet controllers * Valid Range: 80-4096 for 82544 and newer * * Default Value: 256 */E1000_PARAM(RxDescriptors, "Number of receive descriptors");/* User Specified Speed Override * * Valid Range: 0, 10, 100, 1000 *  - 0    - auto-negotiate at all supported speeds *  - 10   - only link at 10 Mbps *  - 100  - only link at 100 Mbps *  - 1000 - only link at 1000 Mbps * * Default Value: 0 */E1000_PARAM(Speed, "Speed setting");/* User Specified Duplex Override * * Valid Range: 0-2 *  - 0 - auto-negotiate for duplex *  - 1 - only link at half duplex *  - 2 - only link at full duplex * * Default Value: 0 */E1000_PARAM(Duplex, "Duplex setting");/* Auto-negotiation Advertisement Override * * Valid Range: 0x01-0x0F, 0x20-0x2F (copper); 0x20 (fiber) * * The AutoNeg value is a bit mask describing which speed and duplex * combinations should be advertised during auto-negotiation. * The supported speed and duplex modes are listed below * * Bit           7     6     5      4      3     2     1      0 * Speed (Mbps)  N/A   N/A   1000   N/A    100   100   10     10 * Duplex                    Full          Full  Half  Full   Half * * Default Value: 0x2F (copper); 0x20 (fiber) */E1000_PARAM(AutoNeg, "Advertised auto-negotiation setting");/* User Specified Flow Control Override * * Valid Range: 0-3 *  - 0 - No Flow Control *  - 1 - Rx only, respond to PAUSE frames but do not generate them *  - 2 - Tx only, generate PAUSE frames but ignore them on receive *  - 3 - Full Flow Control Support * * Default Value: Read flow control settings from the EEPROM */E1000_PARAM(FlowControl, "Flow Control setting");/* XsumRX - Receive Checksum Offload Enable/Disable * * Valid Range: 0, 1 *  - 0 - disables all checksum offload *  - 1 - enables receive IP/TCP/UDP checksum offload *        on 82543 and newer -based NICs * * Default Value: 1 */E1000_PARAM(XsumRX, "Disable or enable Receive Checksum offload");/* Transmit Interrupt Delay in units of 1.024 microseconds * * Valid Range: 0-65535 * * Default Value: 64 */E1000_PARAM(TxIntDelay, "Transmit Interrupt Delay");/* Transmit Absolute Interrupt Delay in units of 1.024 microseconds * * Valid Range: 0-65535 * * Default Value: 0 */E1000_PARAM(TxAbsIntDelay, "Transmit Absolute Interrupt Delay");/* Receive Interrupt Delay in units of 1.024 microseconds * * Valid Range: 0-65535 * * Default Value: 0 */E1000_PARAM(RxIntDelay, "Receive Interrupt Delay");/* Receive Absolute Interrupt Delay in units of 1.024 microseconds * * Valid Range: 0-65535 * * Default Value: 128 */E1000_PARAM(RxAbsIntDelay, "Receive Absolute Interrupt Delay");/* Interrupt Throttle Rate (interrupts/sec) * * Valid Range: 100-100000 (0=off, 1=dynamic) * * Default Value: 1 */E1000_PARAM(InterruptThrottleRate, "Interrupt Throttling Rate");#define AUTONEG_ADV_DEFAULT  0x2F#define AUTONEG_ADV_MASK     0x2F#define FLOW_CONTROL_DEFAULT FLOW_CONTROL_FULL#define DEFAULT_RDTR                   0#define MAX_RXDELAY               0xFFFF#define MIN_RXDELAY                    0#define DEFAULT_RADV                 128#define MAX_RXABSDELAY            0xFFFF#define MIN_RXABSDELAY                 0#define DEFAULT_TIDV                  64#define MAX_TXDELAY               0xFFFF#define MIN_TXDELAY                    0#define DEFAULT_TADV                  64#define MAX_TXABSDELAY            0xFFFF#define MIN_TXABSDELAY                 0#define DEFAULT_ITR                 8000#define MAX_ITR                   100000#define MIN_ITR                      100struct e1000_option {	enum { enable_option, range_option, list_option } type;	char *name;	char *err;	int  def;	union {		struct { /* range_option info */			int min;			int max;		} r;		struct { /* list_option info */			int nr;			struct e1000_opt_list { int i; char *str; } *p;		} l;	} arg;};static int __devinite1000_validate_option(int *value, struct e1000_option *opt,		struct e1000_adapter *adapter){	if(*value == OPTION_UNSET) {		*value = opt->def;		return 0;	}	switch (opt->type) {	case enable_option:		switch (*value) {		case OPTION_ENABLED:			DPRINTK(PROBE, INFO, "%s Enabled\n", opt->name);			return 0;		case OPTION_DISABLED:			DPRINTK(PROBE, INFO, "%s Disabled\n", opt->name);			return 0;		}		break;	case range_option:		if(*value >= opt->arg.r.min && *value <= opt->arg.r.max) {			DPRINTK(PROBE, INFO,					"%s set to %i\n", opt->name, *value);			return 0;		}		break;	case list_option: {		int i;		struct e1000_opt_list *ent;		for(i = 0; i < opt->arg.l.nr; i++) {			ent = &opt->arg.l.p[i];			if(*value == ent->i) {				if(ent->str[0] != '\0')					DPRINTK(PROBE, INFO, "%s\n", ent->str);				return 0;			}		}	}		break;	default:		BUG();	}	DPRINTK(PROBE, INFO, "Invalid %s specified (%i) %s\n",	       opt->name, *value, opt->err);	*value = opt->def;	return -1;}static void e1000_check_fiber_options(struct e1000_adapter *adapter);static void e1000_check_copper_options(struct e1000_adapter *adapter);/** * e1000_check_options - Range Checking for Command Line Parameters * @adapter: board private structure * * This routine checks all command line parameters for valid user * input.  If an invalid value is given, or if no user specified * value exists, a default value is used.  The final value is stored * in a variable in the adapter structure. **/void __devinite1000_check_options(struct e1000_adapter *adapter){	int bd = adapter->bd_number;	if(bd >= E1000_MAX_NIC) {		DPRINTK(PROBE, NOTICE,		       "Warning: no configuration for board #%i\n", bd);		DPRINTK(PROBE, NOTICE, "Using defaults for all values\n");		bd = E1000_MAX_NIC;	}	{ /* Transmit Descriptor Count */		struct e1000_option opt = {			.type = range_option,			.name = "Transmit Descriptors",			.err  = "using default of "				__MODULE_STRING(E1000_DEFAULT_TXD),			.def  = E1000_DEFAULT_TXD,			.arg  = { .r = { .min = E1000_MIN_TXD }}		};		struct e1000_desc_ring *tx_ring = &adapter->tx_ring;		e1000_mac_type mac_type = adapter->hw.mac_type;		opt.arg.r.max = mac_type < e1000_82544 ?			E1000_MAX_TXD : E1000_MAX_82544_TXD;			tx_ring->count = TxDescriptors[bd];			e1000_validate_option(&tx_ring->count, &opt, adapter);			E1000_ROUNDUP(tx_ring->count, 						REQ_TX_DESCRIPTOR_MULTIPLE);	}	{ /* Receive Descriptor Count */		struct e1000_option opt = {			.type = range_option,			.name = "Receive Descriptors",			.err  = "using default of "				__MODULE_STRING(E1000_DEFAULT_RXD),			.def  = E1000_DEFAULT_RXD,			.arg  = { .r = { .min = E1000_MIN_RXD }}		};		struct e1000_desc_ring *rx_ring = &adapter->rx_ring;		e1000_mac_type mac_type = adapter->hw.mac_type;		opt.arg.r.max = mac_type < e1000_82544 ? E1000_MAX_RXD :			E1000_MAX_82544_RXD;			rx_ring->count = RxDescriptors[bd];			e1000_validate_option(&rx_ring->count, &opt, adapter);			E1000_ROUNDUP(rx_ring->count, 						REQ_RX_DESCRIPTOR_MULTIPLE);	}	{ /* Checksum Offload Enable/Disable */		struct e1000_option opt = {			.type = enable_option,			.name = "Checksum Offload",			.err  = "defaulting to Enabled",			.def  = OPTION_ENABLED		};			int rx_csum = XsumRX[bd];			e1000_validate_option(&rx_csum, &opt, adapter);

⌨️ 快捷键说明

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