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

📄 e1000_param.c

📁 COPE the first practical network coding scheme which is developped on click
💻 C
📖 第 1 页 / 共 2 页
字号:
/*******************************************************************************    Copyright(c) 1999 - 2002 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/* 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_INIT { [0 ... E1000_MAX_NIC] = OPTION_UNSET }/* 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(X, S) \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, S);/* Transmit Descriptor Count * * Valid Range: 80-256 for 82542 and 82543 gigabit ethernet controllers * Valid Range: 80-4096 for 82544 * * 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 * * Default Value: 80 */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 * * 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 */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 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/128 */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");#define AUTONEG_ADV_DEFAULT  0x2F#define AUTONEG_ADV_MASK     0x2F#define FLOW_CONTROL_DEFAULT FLOW_CONTROL_FULL#define DEFAULT_TXD                  256#define MAX_TXD                      256#define MIN_TXD                       80#define MAX_82544_TXD               4096#define DEFAULT_RXD                   80#define MAX_RXD                      256#define MIN_RXD                       80#define MAX_82544_RXD               4096#define DEFAULT_RDTR                 128#define DEFAULT_RDTR_82544             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		       0struct 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){	if(*value == OPTION_UNSET) {		*value = opt->def;		return 0;	}	switch (opt->type) {	case enable_option:		switch (*value) {		case OPTION_ENABLED:			printk(KERN_INFO "%s Enabled\n", opt->name);			return 0;		case OPTION_DISABLED:			printk(KERN_INFO "%s Disabled\n", opt->name);			return 0;		}		break;	case range_option:		if(*value >= opt->arg.r.min && *value <= opt->arg.r.max) {			printk(KERN_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')					printk(KERN_INFO "%s\n", ent->str);				return 0;			}		}	}		break;	default:		BUG();	}			printk(KERN_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 paramters 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) {		printk(KERN_NOTICE 		       "Warning: no configuration for board #%i\n", bd);		printk(KERN_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(DEFAULT_TXD),			def:  DEFAULT_TXD,			arg: { r: { min: 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 ? MAX_TXD : MAX_82544_TXD;		tx_ring->count = TxDescriptors[bd];		e1000_validate_option(&tx_ring->count, &opt);		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(DEFAULT_RXD),			def:  DEFAULT_RXD,

⌨️ 快捷键说明

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