devices/e1000/e1000_param-2.6.35-ethercat.c
author Patrick Bruenn <p.bruenn@beckhoff.com>
Tue, 12 Apr 2016 11:17:36 +0200
branchstable-1.5
changeset 2654 b3f6b3e5ef29
parent 2287 fda70486f179
permissions -rw-r--r--
devices/ccat: revert "limit rx processing to one frame per poll"

revert "limit rx processing to one frame per poll", which caused etherlab
frame timeouts in setups with more than one frame per cycle.
2287
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     1
/*******************************************************************************
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     2
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     3
  Intel PRO/1000 Linux driver
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     4
  Copyright(c) 1999 - 2006 Intel Corporation.
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     5
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     6
  This program is free software; you can redistribute it and/or modify it
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     7
  under the terms and conditions of the GNU General Public License,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     8
  version 2, as published by the Free Software Foundation.
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     9
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    10
  This program is distributed in the hope it will be useful, but WITHOUT
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    11
  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    12
  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    13
  more details.
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    14
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    15
  You should have received a copy of the GNU General Public License along with
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    16
  this program; if not, write to the Free Software Foundation, Inc.,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    17
  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    18
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    19
  The full GNU General Public License is included in this distribution in
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    20
  the file called "COPYING".
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    21
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    22
  Contact Information:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    23
  Linux NICS <linux.nics@intel.com>
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    24
  e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    25
  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    26
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    27
*******************************************************************************/
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    28
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    29
#include "e1000-2.6.35-ethercat.h"
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    30
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    31
/* This is the only thing that needs to be changed to adjust the
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    32
 * maximum number of ports that the driver can manage.
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    33
 */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    34
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    35
#define E1000_MAX_NIC 32
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    36
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    37
#define OPTION_UNSET   -1
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    38
#define OPTION_DISABLED 0
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    39
#define OPTION_ENABLED  1
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    40
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    41
/* All parameters are treated the same, as an integer array of values.
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    42
 * This macro just reduces the need to repeat the same declaration code
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    43
 * over and over (plus this helps to avoid typo bugs).
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    44
 */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    45
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    46
#define E1000_PARAM_INIT { [0 ... E1000_MAX_NIC] = OPTION_UNSET }
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    47
#define E1000_PARAM(X, desc) \
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    48
	static int __devinitdata X[E1000_MAX_NIC+1] = E1000_PARAM_INIT; \
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    49
	static unsigned int num_##X; \
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    50
	module_param_array_named(X, X, int, &num_##X, 0); \
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    51
	MODULE_PARM_DESC(X, desc);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    52
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    53
/* Transmit Descriptor Count
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    54
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    55
 * Valid Range: 80-256 for 82542 and 82543 gigabit ethernet controllers
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    56
 * Valid Range: 80-4096 for 82544 and newer
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    57
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    58
 * Default Value: 256
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    59
 */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    60
E1000_PARAM(TxDescriptors, "Number of transmit descriptors");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    61
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    62
/* Receive Descriptor Count
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    63
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    64
 * Valid Range: 80-256 for 82542 and 82543 gigabit ethernet controllers
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    65
 * Valid Range: 80-4096 for 82544 and newer
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    66
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    67
 * Default Value: 256
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    68
 */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    69
E1000_PARAM(RxDescriptors, "Number of receive descriptors");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    70
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    71
/* User Specified Speed Override
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    72
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    73
 * Valid Range: 0, 10, 100, 1000
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    74
 *  - 0    - auto-negotiate at all supported speeds
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    75
 *  - 10   - only link at 10 Mbps
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    76
 *  - 100  - only link at 100 Mbps
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    77
 *  - 1000 - only link at 1000 Mbps
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    78
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    79
 * Default Value: 0
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    80
 */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    81
E1000_PARAM(Speed, "Speed setting");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    82
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    83
/* User Specified Duplex Override
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    84
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    85
 * Valid Range: 0-2
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    86
 *  - 0 - auto-negotiate for duplex
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    87
 *  - 1 - only link at half duplex
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    88
 *  - 2 - only link at full duplex
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    89
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    90
 * Default Value: 0
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    91
 */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    92
E1000_PARAM(Duplex, "Duplex setting");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    93
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    94
/* Auto-negotiation Advertisement Override
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    95
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    96
 * Valid Range: 0x01-0x0F, 0x20-0x2F (copper); 0x20 (fiber)
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    97
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    98
 * The AutoNeg value is a bit mask describing which speed and duplex
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    99
 * combinations should be advertised during auto-negotiation.
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   100
 * The supported speed and duplex modes are listed below
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   101
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   102
 * Bit           7     6     5      4      3     2     1      0
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   103
 * Speed (Mbps)  N/A   N/A   1000   N/A    100   100   10     10
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   104
 * Duplex                    Full          Full  Half  Full   Half
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   105
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   106
 * Default Value: 0x2F (copper); 0x20 (fiber)
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   107
 */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   108
E1000_PARAM(AutoNeg, "Advertised auto-negotiation setting");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   109
#define AUTONEG_ADV_DEFAULT  0x2F
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   110
#define AUTONEG_ADV_MASK     0x2F
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   111
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   112
/* User Specified Flow Control Override
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   113
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   114
 * Valid Range: 0-3
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   115
 *  - 0 - No Flow Control
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   116
 *  - 1 - Rx only, respond to PAUSE frames but do not generate them
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   117
 *  - 2 - Tx only, generate PAUSE frames but ignore them on receive
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   118
 *  - 3 - Full Flow Control Support
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   119
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   120
 * Default Value: Read flow control settings from the EEPROM
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   121
 */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   122
E1000_PARAM(FlowControl, "Flow Control setting");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   123
#define FLOW_CONTROL_DEFAULT FLOW_CONTROL_FULL
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   124
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   125
/* XsumRX - Receive Checksum Offload Enable/Disable
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   126
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   127
 * Valid Range: 0, 1
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   128
 *  - 0 - disables all checksum offload
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   129
 *  - 1 - enables receive IP/TCP/UDP checksum offload
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   130
 *        on 82543 and newer -based NICs
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   131
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   132
 * Default Value: 1
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   133
 */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   134
E1000_PARAM(XsumRX, "Disable or enable Receive Checksum offload");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   135
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   136
/* Transmit Interrupt Delay in units of 1.024 microseconds
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   137
 *  Tx interrupt delay needs to typically be set to something non zero
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   138
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   139
 * Valid Range: 0-65535
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   140
 */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   141
E1000_PARAM(TxIntDelay, "Transmit Interrupt Delay");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   142
#define DEFAULT_TIDV                   8
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   143
#define MAX_TXDELAY               0xFFFF
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   144
#define MIN_TXDELAY                    0
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   145
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   146
/* Transmit Absolute Interrupt Delay in units of 1.024 microseconds
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   147
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   148
 * Valid Range: 0-65535
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   149
 */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   150
E1000_PARAM(TxAbsIntDelay, "Transmit Absolute Interrupt Delay");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   151
#define DEFAULT_TADV                  32
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   152
#define MAX_TXABSDELAY            0xFFFF
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   153
#define MIN_TXABSDELAY                 0
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   154
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   155
/* Receive Interrupt Delay in units of 1.024 microseconds
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   156
 *   hardware will likely hang if you set this to anything but zero.
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   157
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   158
 * Valid Range: 0-65535
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   159
 */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   160
E1000_PARAM(RxIntDelay, "Receive Interrupt Delay");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   161
#define DEFAULT_RDTR                   0
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   162
#define MAX_RXDELAY               0xFFFF
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   163
#define MIN_RXDELAY                    0
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   164
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   165
/* Receive Absolute Interrupt Delay in units of 1.024 microseconds
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   166
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   167
 * Valid Range: 0-65535
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   168
 */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   169
E1000_PARAM(RxAbsIntDelay, "Receive Absolute Interrupt Delay");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   170
#define DEFAULT_RADV                   8
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   171
#define MAX_RXABSDELAY            0xFFFF
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   172
#define MIN_RXABSDELAY                 0
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   173
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   174
/* Interrupt Throttle Rate (interrupts/sec)
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   175
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   176
 * Valid Range: 100-100000 (0=off, 1=dynamic, 3=dynamic conservative)
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   177
 */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   178
E1000_PARAM(InterruptThrottleRate, "Interrupt Throttling Rate");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   179
#define DEFAULT_ITR                    3
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   180
#define MAX_ITR                   100000
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   181
#define MIN_ITR                      100
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   182
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   183
/* Enable Smart Power Down of the PHY
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   184
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   185
 * Valid Range: 0, 1
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   186
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   187
 * Default Value: 0 (disabled)
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   188
 */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   189
E1000_PARAM(SmartPowerDownEnable, "Enable PHY smart power down");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   190
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   191
struct e1000_option {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   192
	enum { enable_option, range_option, list_option } type;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   193
	const char *name;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   194
	const char *err;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   195
	int def;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   196
	union {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   197
		struct { /* range_option info */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   198
			int min;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   199
			int max;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   200
		} r;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   201
		struct { /* list_option info */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   202
			int nr;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   203
			const struct e1000_opt_list { int i; char *str; } *p;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   204
		} l;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   205
	} arg;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   206
};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   207
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   208
static int __devinit e1000_validate_option(unsigned int *value,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   209
					   const struct e1000_option *opt,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   210
					   struct e1000_adapter *adapter)
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   211
{
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   212
	if (*value == OPTION_UNSET) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   213
		*value = opt->def;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   214
		return 0;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   215
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   216
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   217
	switch (opt->type) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   218
	case enable_option:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   219
		switch (*value) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   220
		case OPTION_ENABLED:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   221
			e_dev_info("%s Enabled\n", opt->name);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   222
			return 0;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   223
		case OPTION_DISABLED:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   224
			e_dev_info("%s Disabled\n", opt->name);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   225
			return 0;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   226
		}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   227
		break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   228
	case range_option:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   229
		if (*value >= opt->arg.r.min && *value <= opt->arg.r.max) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   230
			e_dev_info("%s set to %i\n", opt->name, *value);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   231
			return 0;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   232
		}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   233
		break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   234
	case list_option: {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   235
		int i;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   236
		const struct e1000_opt_list *ent;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   237
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   238
		for (i = 0; i < opt->arg.l.nr; i++) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   239
			ent = &opt->arg.l.p[i];
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   240
			if (*value == ent->i) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   241
				if (ent->str[0] != '\0')
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   242
					e_dev_info("%s\n", ent->str);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   243
				return 0;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   244
			}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   245
		}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   246
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   247
		break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   248
	default:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   249
		BUG();
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   250
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   251
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   252
	e_dev_info("Invalid %s value specified (%i) %s\n",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   253
	       opt->name, *value, opt->err);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   254
	*value = opt->def;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   255
	return -1;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   256
}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   257
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   258
static void e1000_check_fiber_options(struct e1000_adapter *adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   259
static void e1000_check_copper_options(struct e1000_adapter *adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   260
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   261
/**
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   262
 * e1000_check_options - Range Checking for Command Line Parameters
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   263
 * @adapter: board private structure
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   264
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   265
 * This routine checks all command line parameters for valid user
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   266
 * input.  If an invalid value is given, or if no user specified
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   267
 * value exists, a default value is used.  The final value is stored
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   268
 * in a variable in the adapter structure.
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   269
 **/
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   270
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   271
void __devinit e1000_check_options(struct e1000_adapter *adapter)
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   272
{
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   273
	struct e1000_option opt;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   274
	int bd = adapter->bd_number;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   275
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   276
	if (bd >= E1000_MAX_NIC) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   277
		e_dev_warn("Warning: no configuration for board #%i "
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   278
			   "using defaults for all values\n", bd);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   279
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   280
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   281
	{ /* Transmit Descriptor Count */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   282
		struct e1000_tx_ring *tx_ring = adapter->tx_ring;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   283
		int i;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   284
		e1000_mac_type mac_type = adapter->hw.mac_type;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   285
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   286
		opt = (struct e1000_option) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   287
			.type = range_option,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   288
			.name = "Transmit Descriptors",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   289
			.err  = "using default of "
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   290
				__MODULE_STRING(E1000_DEFAULT_TXD),
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   291
			.def  = E1000_DEFAULT_TXD,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   292
			.arg  = { .r = {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   293
				.min = E1000_MIN_TXD,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   294
				.max = mac_type < e1000_82544 ? E1000_MAX_TXD : E1000_MAX_82544_TXD
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   295
				}}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   296
		};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   297
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   298
		if (num_TxDescriptors > bd) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   299
			tx_ring->count = TxDescriptors[bd];
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   300
			e1000_validate_option(&tx_ring->count, &opt, adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   301
			tx_ring->count = ALIGN(tx_ring->count,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   302
						REQ_TX_DESCRIPTOR_MULTIPLE);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   303
		} else {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   304
			tx_ring->count = opt.def;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   305
		}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   306
		for (i = 0; i < adapter->num_tx_queues; i++)
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   307
			tx_ring[i].count = tx_ring->count;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   308
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   309
	{ /* Receive Descriptor Count */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   310
		struct e1000_rx_ring *rx_ring = adapter->rx_ring;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   311
		int i;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   312
		e1000_mac_type mac_type = adapter->hw.mac_type;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   313
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   314
		opt = (struct e1000_option) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   315
			.type = range_option,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   316
			.name = "Receive Descriptors",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   317
			.err  = "using default of "
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   318
				__MODULE_STRING(E1000_DEFAULT_RXD),
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   319
			.def  = E1000_DEFAULT_RXD,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   320
			.arg  = { .r = {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   321
				.min = E1000_MIN_RXD,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   322
				.max = mac_type < e1000_82544 ? E1000_MAX_RXD : E1000_MAX_82544_RXD
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   323
			}}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   324
		};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   325
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   326
		if (num_RxDescriptors > bd) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   327
			rx_ring->count = RxDescriptors[bd];
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   328
			e1000_validate_option(&rx_ring->count, &opt, adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   329
			rx_ring->count = ALIGN(rx_ring->count,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   330
						REQ_RX_DESCRIPTOR_MULTIPLE);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   331
		} else {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   332
			rx_ring->count = opt.def;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   333
		}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   334
		for (i = 0; i < adapter->num_rx_queues; i++)
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   335
			rx_ring[i].count = rx_ring->count;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   336
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   337
	{ /* Checksum Offload Enable/Disable */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   338
		opt = (struct e1000_option) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   339
			.type = enable_option,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   340
			.name = "Checksum Offload",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   341
			.err  = "defaulting to Enabled",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   342
			.def  = OPTION_ENABLED
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   343
		};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   344
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   345
		if (num_XsumRX > bd) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   346
			unsigned int rx_csum = XsumRX[bd];
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   347
			e1000_validate_option(&rx_csum, &opt, adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   348
			adapter->rx_csum = rx_csum;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   349
		} else {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   350
			adapter->rx_csum = opt.def;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   351
		}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   352
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   353
	{ /* Flow Control */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   354
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   355
		struct e1000_opt_list fc_list[] =
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   356
			{{ E1000_FC_NONE,    "Flow Control Disabled" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   357
			 { E1000_FC_RX_PAUSE,"Flow Control Receive Only" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   358
			 { E1000_FC_TX_PAUSE,"Flow Control Transmit Only" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   359
			 { E1000_FC_FULL,    "Flow Control Enabled" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   360
			 { E1000_FC_DEFAULT, "Flow Control Hardware Default" }};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   361
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   362
		opt = (struct e1000_option) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   363
			.type = list_option,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   364
			.name = "Flow Control",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   365
			.err  = "reading default settings from EEPROM",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   366
			.def  = E1000_FC_DEFAULT,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   367
			.arg  = { .l = { .nr = ARRAY_SIZE(fc_list),
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   368
					 .p = fc_list }}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   369
		};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   370
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   371
		if (num_FlowControl > bd) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   372
			unsigned int fc = FlowControl[bd];
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   373
			e1000_validate_option(&fc, &opt, adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   374
			adapter->hw.fc = adapter->hw.original_fc = fc;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   375
		} else {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   376
			adapter->hw.fc = adapter->hw.original_fc = opt.def;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   377
		}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   378
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   379
	{ /* Transmit Interrupt Delay */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   380
		opt = (struct e1000_option) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   381
			.type = range_option,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   382
			.name = "Transmit Interrupt Delay",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   383
			.err  = "using default of " __MODULE_STRING(DEFAULT_TIDV),
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   384
			.def  = DEFAULT_TIDV,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   385
			.arg  = { .r = { .min = MIN_TXDELAY,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   386
					 .max = MAX_TXDELAY }}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   387
		};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   388
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   389
		if (num_TxIntDelay > bd) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   390
			adapter->tx_int_delay = TxIntDelay[bd];
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   391
			e1000_validate_option(&adapter->tx_int_delay, &opt,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   392
			                      adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   393
		} else {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   394
			adapter->tx_int_delay = opt.def;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   395
		}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   396
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   397
	{ /* Transmit Absolute Interrupt Delay */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   398
		opt = (struct e1000_option) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   399
			.type = range_option,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   400
			.name = "Transmit Absolute Interrupt Delay",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   401
			.err  = "using default of " __MODULE_STRING(DEFAULT_TADV),
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   402
			.def  = DEFAULT_TADV,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   403
			.arg  = { .r = { .min = MIN_TXABSDELAY,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   404
					 .max = MAX_TXABSDELAY }}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   405
		};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   406
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   407
		if (num_TxAbsIntDelay > bd) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   408
			adapter->tx_abs_int_delay = TxAbsIntDelay[bd];
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   409
			e1000_validate_option(&adapter->tx_abs_int_delay, &opt,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   410
			                      adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   411
		} else {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   412
			adapter->tx_abs_int_delay = opt.def;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   413
		}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   414
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   415
	{ /* Receive Interrupt Delay */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   416
		opt = (struct e1000_option) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   417
			.type = range_option,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   418
			.name = "Receive Interrupt Delay",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   419
			.err  = "using default of " __MODULE_STRING(DEFAULT_RDTR),
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   420
			.def  = DEFAULT_RDTR,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   421
			.arg  = { .r = { .min = MIN_RXDELAY,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   422
					 .max = MAX_RXDELAY }}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   423
		};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   424
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   425
		if (num_RxIntDelay > bd) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   426
			adapter->rx_int_delay = RxIntDelay[bd];
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   427
			e1000_validate_option(&adapter->rx_int_delay, &opt,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   428
			                      adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   429
		} else {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   430
			adapter->rx_int_delay = opt.def;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   431
		}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   432
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   433
	{ /* Receive Absolute Interrupt Delay */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   434
		opt = (struct e1000_option) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   435
			.type = range_option,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   436
			.name = "Receive Absolute Interrupt Delay",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   437
			.err  = "using default of " __MODULE_STRING(DEFAULT_RADV),
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   438
			.def  = DEFAULT_RADV,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   439
			.arg  = { .r = { .min = MIN_RXABSDELAY,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   440
					 .max = MAX_RXABSDELAY }}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   441
		};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   442
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   443
		if (num_RxAbsIntDelay > bd) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   444
			adapter->rx_abs_int_delay = RxAbsIntDelay[bd];
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   445
			e1000_validate_option(&adapter->rx_abs_int_delay, &opt,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   446
			                      adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   447
		} else {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   448
			adapter->rx_abs_int_delay = opt.def;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   449
		}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   450
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   451
	{ /* Interrupt Throttling Rate */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   452
		opt = (struct e1000_option) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   453
			.type = range_option,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   454
			.name = "Interrupt Throttling Rate (ints/sec)",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   455
			.err  = "using default of " __MODULE_STRING(DEFAULT_ITR),
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   456
			.def  = DEFAULT_ITR,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   457
			.arg  = { .r = { .min = MIN_ITR,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   458
					 .max = MAX_ITR }}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   459
		};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   460
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   461
		if (num_InterruptThrottleRate > bd) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   462
			adapter->itr = InterruptThrottleRate[bd];
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   463
			switch (adapter->itr) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   464
			case 0:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   465
				e_dev_info("%s turned off\n", opt.name);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   466
				break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   467
			case 1:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   468
				e_dev_info("%s set to dynamic mode\n",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   469
					   opt.name);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   470
				adapter->itr_setting = adapter->itr;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   471
				adapter->itr = 20000;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   472
				break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   473
			case 3:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   474
				e_dev_info("%s set to dynamic conservative "
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   475
					   "mode\n", opt.name);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   476
				adapter->itr_setting = adapter->itr;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   477
				adapter->itr = 20000;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   478
				break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   479
			case 4:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   480
				e_dev_info("%s set to simplified "
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   481
				           "(2000-8000) ints mode\n", opt.name);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   482
				adapter->itr_setting = adapter->itr;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   483
				break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   484
			default:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   485
				e1000_validate_option(&adapter->itr, &opt,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   486
				        adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   487
				/* save the setting, because the dynamic bits
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   488
				 * change itr.
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   489
				 * clear the lower two bits because they are
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   490
				 * used as control */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   491
				adapter->itr_setting = adapter->itr & ~3;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   492
				break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   493
			}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   494
		} else {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   495
			adapter->itr_setting = opt.def;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   496
			adapter->itr = 20000;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   497
		}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   498
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   499
	{ /* Smart Power Down */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   500
		opt = (struct e1000_option) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   501
			.type = enable_option,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   502
			.name = "PHY Smart Power Down",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   503
			.err  = "defaulting to Disabled",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   504
			.def  = OPTION_DISABLED
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   505
		};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   506
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   507
		if (num_SmartPowerDownEnable > bd) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   508
			unsigned int spd = SmartPowerDownEnable[bd];
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   509
			e1000_validate_option(&spd, &opt, adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   510
			adapter->smart_power_down = spd;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   511
		} else {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   512
			adapter->smart_power_down = opt.def;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   513
		}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   514
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   515
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   516
	switch (adapter->hw.media_type) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   517
	case e1000_media_type_fiber:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   518
	case e1000_media_type_internal_serdes:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   519
		e1000_check_fiber_options(adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   520
		break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   521
	case e1000_media_type_copper:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   522
		e1000_check_copper_options(adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   523
		break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   524
	default:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   525
		BUG();
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   526
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   527
}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   528
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   529
/**
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   530
 * e1000_check_fiber_options - Range Checking for Link Options, Fiber Version
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   531
 * @adapter: board private structure
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   532
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   533
 * Handles speed and duplex options on fiber adapters
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   534
 **/
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   535
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   536
static void __devinit e1000_check_fiber_options(struct e1000_adapter *adapter)
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   537
{
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   538
	int bd = adapter->bd_number;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   539
	if (num_Speed > bd) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   540
		e_dev_info("Speed not valid for fiber adapters, parameter "
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   541
			   "ignored\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   542
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   543
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   544
	if (num_Duplex > bd) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   545
		e_dev_info("Duplex not valid for fiber adapters, parameter "
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   546
			   "ignored\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   547
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   548
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   549
	if ((num_AutoNeg > bd) && (AutoNeg[bd] != 0x20)) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   550
		e_dev_info("AutoNeg other than 1000/Full is not valid for fiber"
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   551
			   "adapters, parameter ignored\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   552
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   553
}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   554
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   555
/**
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   556
 * e1000_check_copper_options - Range Checking for Link Options, Copper Version
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   557
 * @adapter: board private structure
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   558
 *
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   559
 * Handles speed and duplex options on copper adapters
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   560
 **/
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   561
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   562
static void __devinit e1000_check_copper_options(struct e1000_adapter *adapter)
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   563
{
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   564
	struct e1000_option opt;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   565
	unsigned int speed, dplx, an;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   566
	int bd = adapter->bd_number;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   567
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   568
	{ /* Speed */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   569
		static const struct e1000_opt_list speed_list[] = {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   570
			{          0, "" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   571
			{   SPEED_10, "" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   572
			{  SPEED_100, "" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   573
			{ SPEED_1000, "" }};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   574
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   575
		opt = (struct e1000_option) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   576
			.type = list_option,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   577
			.name = "Speed",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   578
			.err  = "parameter ignored",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   579
			.def  = 0,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   580
			.arg  = { .l = { .nr = ARRAY_SIZE(speed_list),
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   581
					 .p = speed_list }}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   582
		};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   583
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   584
		if (num_Speed > bd) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   585
			speed = Speed[bd];
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   586
			e1000_validate_option(&speed, &opt, adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   587
		} else {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   588
			speed = opt.def;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   589
		}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   590
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   591
	{ /* Duplex */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   592
		static const struct e1000_opt_list dplx_list[] = {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   593
			{           0, "" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   594
			{ HALF_DUPLEX, "" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   595
			{ FULL_DUPLEX, "" }};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   596
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   597
		opt = (struct e1000_option) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   598
			.type = list_option,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   599
			.name = "Duplex",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   600
			.err  = "parameter ignored",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   601
			.def  = 0,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   602
			.arg  = { .l = { .nr = ARRAY_SIZE(dplx_list),
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   603
					 .p = dplx_list }}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   604
		};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   605
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   606
		if (num_Duplex > bd) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   607
			dplx = Duplex[bd];
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   608
			e1000_validate_option(&dplx, &opt, adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   609
		} else {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   610
			dplx = opt.def;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   611
		}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   612
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   613
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   614
	if ((num_AutoNeg > bd) && (speed != 0 || dplx != 0)) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   615
		e_dev_info("AutoNeg specified along with Speed or Duplex, "
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   616
			   "parameter ignored\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   617
		adapter->hw.autoneg_advertised = AUTONEG_ADV_DEFAULT;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   618
	} else { /* Autoneg */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   619
		static const struct e1000_opt_list an_list[] =
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   620
			#define AA "AutoNeg advertising "
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   621
			{{ 0x01, AA "10/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   622
			 { 0x02, AA "10/FD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   623
			 { 0x03, AA "10/FD, 10/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   624
			 { 0x04, AA "100/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   625
			 { 0x05, AA "100/HD, 10/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   626
			 { 0x06, AA "100/HD, 10/FD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   627
			 { 0x07, AA "100/HD, 10/FD, 10/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   628
			 { 0x08, AA "100/FD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   629
			 { 0x09, AA "100/FD, 10/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   630
			 { 0x0a, AA "100/FD, 10/FD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   631
			 { 0x0b, AA "100/FD, 10/FD, 10/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   632
			 { 0x0c, AA "100/FD, 100/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   633
			 { 0x0d, AA "100/FD, 100/HD, 10/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   634
			 { 0x0e, AA "100/FD, 100/HD, 10/FD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   635
			 { 0x0f, AA "100/FD, 100/HD, 10/FD, 10/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   636
			 { 0x20, AA "1000/FD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   637
			 { 0x21, AA "1000/FD, 10/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   638
			 { 0x22, AA "1000/FD, 10/FD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   639
			 { 0x23, AA "1000/FD, 10/FD, 10/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   640
			 { 0x24, AA "1000/FD, 100/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   641
			 { 0x25, AA "1000/FD, 100/HD, 10/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   642
			 { 0x26, AA "1000/FD, 100/HD, 10/FD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   643
			 { 0x27, AA "1000/FD, 100/HD, 10/FD, 10/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   644
			 { 0x28, AA "1000/FD, 100/FD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   645
			 { 0x29, AA "1000/FD, 100/FD, 10/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   646
			 { 0x2a, AA "1000/FD, 100/FD, 10/FD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   647
			 { 0x2b, AA "1000/FD, 100/FD, 10/FD, 10/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   648
			 { 0x2c, AA "1000/FD, 100/FD, 100/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   649
			 { 0x2d, AA "1000/FD, 100/FD, 100/HD, 10/HD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   650
			 { 0x2e, AA "1000/FD, 100/FD, 100/HD, 10/FD" },
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   651
			 { 0x2f, AA "1000/FD, 100/FD, 100/HD, 10/FD, 10/HD" }};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   652
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   653
		opt = (struct e1000_option) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   654
			.type = list_option,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   655
			.name = "AutoNeg",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   656
			.err  = "parameter ignored",
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   657
			.def  = AUTONEG_ADV_DEFAULT,
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   658
			.arg  = { .l = { .nr = ARRAY_SIZE(an_list),
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   659
					 .p = an_list }}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   660
		};
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   661
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   662
		if (num_AutoNeg > bd) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   663
			an = AutoNeg[bd];
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   664
			e1000_validate_option(&an, &opt, adapter);
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   665
		} else {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   666
			an = opt.def;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   667
		}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   668
		adapter->hw.autoneg_advertised = an;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   669
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   670
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   671
	switch (speed + dplx) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   672
	case 0:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   673
		adapter->hw.autoneg = adapter->fc_autoneg = 1;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   674
		if ((num_Speed > bd) && (speed != 0 || dplx != 0))
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   675
			e_dev_info("Speed and duplex autonegotiation "
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   676
				   "enabled\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   677
		break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   678
	case HALF_DUPLEX:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   679
		e_dev_info("Half Duplex specified without Speed\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   680
		e_dev_info("Using Autonegotiation at Half Duplex only\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   681
		adapter->hw.autoneg = adapter->fc_autoneg = 1;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   682
		adapter->hw.autoneg_advertised = ADVERTISE_10_HALF |
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   683
		                                 ADVERTISE_100_HALF;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   684
		break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   685
	case FULL_DUPLEX:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   686
		e_dev_info("Full Duplex specified without Speed\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   687
		e_dev_info("Using Autonegotiation at Full Duplex only\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   688
		adapter->hw.autoneg = adapter->fc_autoneg = 1;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   689
		adapter->hw.autoneg_advertised = ADVERTISE_10_FULL |
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   690
		                                 ADVERTISE_100_FULL |
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   691
		                                 ADVERTISE_1000_FULL;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   692
		break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   693
	case SPEED_10:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   694
		e_dev_info("10 Mbps Speed specified without Duplex\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   695
		e_dev_info("Using Autonegotiation at 10 Mbps only\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   696
		adapter->hw.autoneg = adapter->fc_autoneg = 1;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   697
		adapter->hw.autoneg_advertised = ADVERTISE_10_HALF |
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   698
		                                 ADVERTISE_10_FULL;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   699
		break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   700
	case SPEED_10 + HALF_DUPLEX:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   701
		e_dev_info("Forcing to 10 Mbps Half Duplex\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   702
		adapter->hw.autoneg = adapter->fc_autoneg = 0;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   703
		adapter->hw.forced_speed_duplex = e1000_10_half;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   704
		adapter->hw.autoneg_advertised = 0;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   705
		break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   706
	case SPEED_10 + FULL_DUPLEX:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   707
		e_dev_info("Forcing to 10 Mbps Full Duplex\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   708
		adapter->hw.autoneg = adapter->fc_autoneg = 0;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   709
		adapter->hw.forced_speed_duplex = e1000_10_full;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   710
		adapter->hw.autoneg_advertised = 0;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   711
		break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   712
	case SPEED_100:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   713
		e_dev_info("100 Mbps Speed specified without Duplex\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   714
		e_dev_info("Using Autonegotiation at 100 Mbps only\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   715
		adapter->hw.autoneg = adapter->fc_autoneg = 1;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   716
		adapter->hw.autoneg_advertised = ADVERTISE_100_HALF |
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   717
		                                 ADVERTISE_100_FULL;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   718
		break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   719
	case SPEED_100 + HALF_DUPLEX:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   720
		e_dev_info("Forcing to 100 Mbps Half Duplex\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   721
		adapter->hw.autoneg = adapter->fc_autoneg = 0;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   722
		adapter->hw.forced_speed_duplex = e1000_100_half;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   723
		adapter->hw.autoneg_advertised = 0;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   724
		break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   725
	case SPEED_100 + FULL_DUPLEX:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   726
		e_dev_info("Forcing to 100 Mbps Full Duplex\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   727
		adapter->hw.autoneg = adapter->fc_autoneg = 0;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   728
		adapter->hw.forced_speed_duplex = e1000_100_full;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   729
		adapter->hw.autoneg_advertised = 0;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   730
		break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   731
	case SPEED_1000:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   732
		e_dev_info("1000 Mbps Speed specified without Duplex\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   733
		goto full_duplex_only;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   734
	case SPEED_1000 + HALF_DUPLEX:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   735
		e_dev_info("Half Duplex is not supported at 1000 Mbps\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   736
		/* fall through */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   737
	case SPEED_1000 + FULL_DUPLEX:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   738
full_duplex_only:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   739
		e_dev_info("Using Autonegotiation at 1000 Mbps Full Duplex "
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   740
			   "only\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   741
		adapter->hw.autoneg = adapter->fc_autoneg = 1;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   742
		adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   743
		break;
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   744
	default:
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   745
		BUG();
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   746
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   747
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   748
	/* Speed, AutoNeg and MDI/MDI-X must all play nice */
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   749
	if (e1000_validate_mdi_setting(&(adapter->hw)) < 0) {
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   750
		e_dev_info("Speed, AutoNeg and MDI-X specs are incompatible. "
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   751
			   "Setting MDI-X to a compatible value.\n");
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   752
	}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   753
}
fda70486f179 Added e1000 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   754