1 /*******************************************************************************
3 Intel PRO/1000 Linux driver
4 Copyright(c) 1999 - 2006 Intel Corporation.
6 This program is free software; you can redistribute it and/or modify it
7 under the terms and conditions of the GNU General Public License,
8 version 2, as published by the Free Software Foundation.
10 This program is distributed in the hope it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 You should have received a copy of the GNU General Public License along with
16 this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
19 The full GNU General Public License is included in this distribution in
20 the file called "COPYING".
23 Linux NICS <linux.nics@intel.com>
24 e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
25 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
27 *******************************************************************************/
31 /* This is the only thing that needs to be changed to adjust the
32 * maximum number of ports that the driver can manage.
35 #define E1000_MAX_NIC 32
37 #define OPTION_UNSET -1
38 #define OPTION_DISABLED 0
39 #define OPTION_ENABLED 1
41 /* All parameters are treated the same, as an integer array of values.
42 * This macro just reduces the need to repeat the same declaration code
43 * over and over (plus this helps to avoid typo bugs).
46 #define E1000_PARAM_INIT { [0 ... E1000_MAX_NIC] = OPTION_UNSET }
47 /* Module Parameters are always initialized to -1, so that the driver
48 * can tell the difference between no user specified value or the
49 * user asking for the default value.
50 * The true default values are loaded in when e1000_check_options is called.
52 * This is a GCC extension to ANSI C.
53 * See the item "Labeled Elements in Initializers" in the section
54 * "Extensions to the C Language Family" of the GCC documentation.
57 #define E1000_PARAM(X, desc) \
58 static int __devinitdata X[E1000_MAX_NIC+1] = E1000_PARAM_INIT; \
59 static int num_##X = 0; \
60 module_param_array_named(X, X, int, &num_##X, 0); \
61 MODULE_PARM_DESC(X, desc);
63 /* Transmit Descriptor Count
65 * Valid Range: 80-256 for 82542 and 82543 gigabit ethernet controllers
66 * Valid Range: 80-4096 for 82544 and newer
71 E1000_PARAM(TxDescriptors
, "Number of transmit descriptors");
73 /* Receive Descriptor Count
75 * Valid Range: 80-256 for 82542 and 82543 gigabit ethernet controllers
76 * Valid Range: 80-4096 for 82544 and newer
81 E1000_PARAM(RxDescriptors
, "Number of receive descriptors");
83 /* User Specified Speed Override
85 * Valid Range: 0, 10, 100, 1000
86 * - 0 - auto-negotiate at all supported speeds
87 * - 10 - only link at 10 Mbps
88 * - 100 - only link at 100 Mbps
89 * - 1000 - only link at 1000 Mbps
94 E1000_PARAM(Speed
, "Speed setting");
96 /* User Specified Duplex Override
99 * - 0 - auto-negotiate for duplex
100 * - 1 - only link at half duplex
101 * - 2 - only link at full duplex
106 E1000_PARAM(Duplex
, "Duplex setting");
108 /* Auto-negotiation Advertisement Override
110 * Valid Range: 0x01-0x0F, 0x20-0x2F (copper); 0x20 (fiber)
112 * The AutoNeg value is a bit mask describing which speed and duplex
113 * combinations should be advertised during auto-negotiation.
114 * The supported speed and duplex modes are listed below
116 * Bit 7 6 5 4 3 2 1 0
117 * Speed (Mbps) N/A N/A 1000 N/A 100 100 10 10
118 * Duplex Full Full Half Full Half
120 * Default Value: 0x2F (copper); 0x20 (fiber)
123 E1000_PARAM(AutoNeg
, "Advertised auto-negotiation setting");
125 /* User Specified Flow Control Override
128 * - 0 - No Flow Control
129 * - 1 - Rx only, respond to PAUSE frames but do not generate them
130 * - 2 - Tx only, generate PAUSE frames but ignore them on receive
131 * - 3 - Full Flow Control Support
133 * Default Value: Read flow control settings from the EEPROM
136 E1000_PARAM(FlowControl
, "Flow Control setting");
138 /* XsumRX - Receive Checksum Offload Enable/Disable
141 * - 0 - disables all checksum offload
142 * - 1 - enables receive IP/TCP/UDP checksum offload
143 * on 82543 and newer -based NICs
148 E1000_PARAM(XsumRX
, "Disable or enable Receive Checksum offload");
150 /* Transmit Interrupt Delay in units of 1.024 microseconds
152 * Valid Range: 0-65535
157 E1000_PARAM(TxIntDelay
, "Transmit Interrupt Delay");
159 /* Transmit Absolute Interrupt Delay in units of 1.024 microseconds
161 * Valid Range: 0-65535
166 E1000_PARAM(TxAbsIntDelay
, "Transmit Absolute Interrupt Delay");
168 /* Receive Interrupt Delay in units of 1.024 microseconds
170 * Valid Range: 0-65535
175 E1000_PARAM(RxIntDelay
, "Receive Interrupt Delay");
177 /* Receive Absolute Interrupt Delay in units of 1.024 microseconds
179 * Valid Range: 0-65535
184 E1000_PARAM(RxAbsIntDelay
, "Receive Absolute Interrupt Delay");
186 /* Interrupt Throttle Rate (interrupts/sec)
188 * Valid Range: 100-100000 (0=off, 1=dynamic)
190 * Default Value: 8000
193 E1000_PARAM(InterruptThrottleRate
, "Interrupt Throttling Rate");
195 /* Enable Smart Power Down of the PHY
199 * Default Value: 0 (disabled)
202 E1000_PARAM(SmartPowerDownEnable
, "Enable PHY smart power down");
204 /* Enable Kumeran Lock Loss workaround
208 * Default Value: 1 (enabled)
211 E1000_PARAM(KumeranLockLoss
, "Enable Kumeran lock loss workaround");
213 #define AUTONEG_ADV_DEFAULT 0x2F
214 #define AUTONEG_ADV_MASK 0x2F
215 #define FLOW_CONTROL_DEFAULT FLOW_CONTROL_FULL
217 #define DEFAULT_RDTR 0
218 #define MAX_RXDELAY 0xFFFF
219 #define MIN_RXDELAY 0
221 #define DEFAULT_RADV 128
222 #define MAX_RXABSDELAY 0xFFFF
223 #define MIN_RXABSDELAY 0
225 #define DEFAULT_TIDV 64
226 #define MAX_TXDELAY 0xFFFF
227 #define MIN_TXDELAY 0
229 #define DEFAULT_TADV 64
230 #define MAX_TXABSDELAY 0xFFFF
231 #define MIN_TXABSDELAY 0
233 #define DEFAULT_ITR 8000
234 #define MAX_ITR 100000
237 struct e1000_option
{
238 enum { enable_option
, range_option
, list_option
} type
;
243 struct { /* range_option info */
247 struct { /* list_option info */
249 struct e1000_opt_list
{ int i
; char *str
; } *p
;
255 e1000_validate_option(int *value
, struct e1000_option
*opt
,
256 struct e1000_adapter
*adapter
)
258 if (*value
== OPTION_UNSET
) {
267 DPRINTK(PROBE
, INFO
, "%s Enabled\n", opt
->name
);
269 case OPTION_DISABLED
:
270 DPRINTK(PROBE
, INFO
, "%s Disabled\n", opt
->name
);
275 if (*value
>= opt
->arg
.r
.min
&& *value
<= opt
->arg
.r
.max
) {
277 "%s set to %i\n", opt
->name
, *value
);
283 struct e1000_opt_list
*ent
;
285 for (i
= 0; i
< opt
->arg
.l
.nr
; i
++) {
286 ent
= &opt
->arg
.l
.p
[i
];
287 if (*value
== ent
->i
) {
288 if (ent
->str
[0] != '\0')
289 DPRINTK(PROBE
, INFO
, "%s\n", ent
->str
);
299 DPRINTK(PROBE
, INFO
, "Invalid %s value specified (%i) %s\n",
300 opt
->name
, *value
, opt
->err
);
305 static void e1000_check_fiber_options(struct e1000_adapter
*adapter
);
306 static void e1000_check_copper_options(struct e1000_adapter
*adapter
);
309 * e1000_check_options - Range Checking for Command Line Parameters
310 * @adapter: board private structure
312 * This routine checks all command line parameters for valid user
313 * input. If an invalid value is given, or if no user specified
314 * value exists, a default value is used. The final value is stored
315 * in a variable in the adapter structure.
319 e1000_check_options(struct e1000_adapter
*adapter
)
321 int bd
= adapter
->bd_number
;
322 if (bd
>= E1000_MAX_NIC
) {
323 DPRINTK(PROBE
, NOTICE
,
324 "Warning: no configuration for board #%i\n", bd
);
325 DPRINTK(PROBE
, NOTICE
, "Using defaults for all values\n");
328 { /* Transmit Descriptor Count */
329 struct e1000_option opt
= {
330 .type
= range_option
,
331 .name
= "Transmit Descriptors",
332 .err
= "using default of "
333 __MODULE_STRING(E1000_DEFAULT_TXD
),
334 .def
= E1000_DEFAULT_TXD
,
335 .arg
= { .r
= { .min
= E1000_MIN_TXD
}}
337 struct e1000_tx_ring
*tx_ring
= adapter
->tx_ring
;
339 e1000_mac_type mac_type
= adapter
->hw
.mac_type
;
340 opt
.arg
.r
.max
= mac_type
< e1000_82544
?
341 E1000_MAX_TXD
: E1000_MAX_82544_TXD
;
343 if (num_TxDescriptors
> bd
) {
344 tx_ring
->count
= TxDescriptors
[bd
];
345 e1000_validate_option(&tx_ring
->count
, &opt
, adapter
);
346 E1000_ROUNDUP(tx_ring
->count
,
347 REQ_TX_DESCRIPTOR_MULTIPLE
);
349 tx_ring
->count
= opt
.def
;
351 for (i
= 0; i
< adapter
->num_tx_queues
; i
++)
352 tx_ring
[i
].count
= tx_ring
->count
;
354 { /* Receive Descriptor Count */
355 struct e1000_option opt
= {
356 .type
= range_option
,
357 .name
= "Receive Descriptors",
358 .err
= "using default of "
359 __MODULE_STRING(E1000_DEFAULT_RXD
),
360 .def
= E1000_DEFAULT_RXD
,
361 .arg
= { .r
= { .min
= E1000_MIN_RXD
}}
363 struct e1000_rx_ring
*rx_ring
= adapter
->rx_ring
;
365 e1000_mac_type mac_type
= adapter
->hw
.mac_type
;
366 opt
.arg
.r
.max
= mac_type
< e1000_82544
? E1000_MAX_RXD
:
369 if (num_RxDescriptors
> bd
) {
370 rx_ring
->count
= RxDescriptors
[bd
];
371 e1000_validate_option(&rx_ring
->count
, &opt
, adapter
);
372 E1000_ROUNDUP(rx_ring
->count
,
373 REQ_RX_DESCRIPTOR_MULTIPLE
);
375 rx_ring
->count
= opt
.def
;
377 for (i
= 0; i
< adapter
->num_rx_queues
; i
++)
378 rx_ring
[i
].count
= rx_ring
->count
;
380 { /* Checksum Offload Enable/Disable */
381 struct e1000_option opt
= {
382 .type
= enable_option
,
383 .name
= "Checksum Offload",
384 .err
= "defaulting to Enabled",
385 .def
= OPTION_ENABLED
388 if (num_XsumRX
> bd
) {
389 int rx_csum
= XsumRX
[bd
];
390 e1000_validate_option(&rx_csum
, &opt
, adapter
);
391 adapter
->rx_csum
= rx_csum
;
393 adapter
->rx_csum
= opt
.def
;
398 struct e1000_opt_list fc_list
[] =
399 {{ E1000_FC_NONE
, "Flow Control Disabled" },
400 { E1000_FC_RX_PAUSE
,"Flow Control Receive Only" },
401 { E1000_FC_TX_PAUSE
,"Flow Control Transmit Only" },
402 { E1000_FC_FULL
, "Flow Control Enabled" },
403 { E1000_FC_DEFAULT
, "Flow Control Hardware Default" }};
405 struct e1000_option opt
= {
407 .name
= "Flow Control",
408 .err
= "reading default settings from EEPROM",
409 .def
= E1000_FC_DEFAULT
,
410 .arg
= { .l
= { .nr
= ARRAY_SIZE(fc_list
),
414 if (num_FlowControl
> bd
) {
415 int fc
= FlowControl
[bd
];
416 e1000_validate_option(&fc
, &opt
, adapter
);
417 adapter
->hw
.fc
= adapter
->hw
.original_fc
= fc
;
419 adapter
->hw
.fc
= adapter
->hw
.original_fc
= opt
.def
;
422 { /* Transmit Interrupt Delay */
423 struct e1000_option opt
= {
424 .type
= range_option
,
425 .name
= "Transmit Interrupt Delay",
426 .err
= "using default of " __MODULE_STRING(DEFAULT_TIDV
),
428 .arg
= { .r
= { .min
= MIN_TXDELAY
,
429 .max
= MAX_TXDELAY
}}
432 if (num_TxIntDelay
> bd
) {
433 adapter
->tx_int_delay
= TxIntDelay
[bd
];
434 e1000_validate_option(&adapter
->tx_int_delay
, &opt
,
437 adapter
->tx_int_delay
= opt
.def
;
440 { /* Transmit Absolute Interrupt Delay */
441 struct e1000_option opt
= {
442 .type
= range_option
,
443 .name
= "Transmit Absolute Interrupt Delay",
444 .err
= "using default of " __MODULE_STRING(DEFAULT_TADV
),
446 .arg
= { .r
= { .min
= MIN_TXABSDELAY
,
447 .max
= MAX_TXABSDELAY
}}
450 if (num_TxAbsIntDelay
> bd
) {
451 adapter
->tx_abs_int_delay
= TxAbsIntDelay
[bd
];
452 e1000_validate_option(&adapter
->tx_abs_int_delay
, &opt
,
455 adapter
->tx_abs_int_delay
= opt
.def
;
458 { /* Receive Interrupt Delay */
459 struct e1000_option opt
= {
460 .type
= range_option
,
461 .name
= "Receive Interrupt Delay",
462 .err
= "using default of " __MODULE_STRING(DEFAULT_RDTR
),
464 .arg
= { .r
= { .min
= MIN_RXDELAY
,
465 .max
= MAX_RXDELAY
}}
468 if (num_RxIntDelay
> bd
) {
469 adapter
->rx_int_delay
= RxIntDelay
[bd
];
470 e1000_validate_option(&adapter
->rx_int_delay
, &opt
,
473 adapter
->rx_int_delay
= opt
.def
;
476 { /* Receive Absolute Interrupt Delay */
477 struct e1000_option opt
= {
478 .type
= range_option
,
479 .name
= "Receive Absolute Interrupt Delay",
480 .err
= "using default of " __MODULE_STRING(DEFAULT_RADV
),
482 .arg
= { .r
= { .min
= MIN_RXABSDELAY
,
483 .max
= MAX_RXABSDELAY
}}
486 if (num_RxAbsIntDelay
> bd
) {
487 adapter
->rx_abs_int_delay
= RxAbsIntDelay
[bd
];
488 e1000_validate_option(&adapter
->rx_abs_int_delay
, &opt
,
491 adapter
->rx_abs_int_delay
= opt
.def
;
494 { /* Interrupt Throttling Rate */
495 struct e1000_option opt
= {
496 .type
= range_option
,
497 .name
= "Interrupt Throttling Rate (ints/sec)",
498 .err
= "using default of " __MODULE_STRING(DEFAULT_ITR
),
500 .arg
= { .r
= { .min
= MIN_ITR
,
504 if (num_InterruptThrottleRate
> bd
) {
505 adapter
->itr
= InterruptThrottleRate
[bd
];
506 switch (adapter
->itr
) {
508 DPRINTK(PROBE
, INFO
, "%s turned off\n",
512 DPRINTK(PROBE
, INFO
, "%s set to dynamic mode\n",
516 e1000_validate_option(&adapter
->itr
, &opt
,
521 adapter
->itr
= opt
.def
;
524 { /* Smart Power Down */
525 struct e1000_option opt
= {
526 .type
= enable_option
,
527 .name
= "PHY Smart Power Down",
528 .err
= "defaulting to Disabled",
529 .def
= OPTION_DISABLED
532 if (num_SmartPowerDownEnable
> bd
) {
533 int spd
= SmartPowerDownEnable
[bd
];
534 e1000_validate_option(&spd
, &opt
, adapter
);
535 adapter
->smart_power_down
= spd
;
537 adapter
->smart_power_down
= opt
.def
;
540 { /* Kumeran Lock Loss Workaround */
541 struct e1000_option opt
= {
542 .type
= enable_option
,
543 .name
= "Kumeran Lock Loss Workaround",
544 .err
= "defaulting to Enabled",
545 .def
= OPTION_ENABLED
548 if (num_KumeranLockLoss
> bd
) {
549 int kmrn_lock_loss
= KumeranLockLoss
[bd
];
550 e1000_validate_option(&kmrn_lock_loss
, &opt
, adapter
);
551 adapter
->hw
.kmrn_lock_loss_workaround_disabled
= !kmrn_lock_loss
;
553 adapter
->hw
.kmrn_lock_loss_workaround_disabled
= !opt
.def
;
557 switch (adapter
->hw
.media_type
) {
558 case e1000_media_type_fiber
:
559 case e1000_media_type_internal_serdes
:
560 e1000_check_fiber_options(adapter
);
562 case e1000_media_type_copper
:
563 e1000_check_copper_options(adapter
);
571 * e1000_check_fiber_options - Range Checking for Link Options, Fiber Version
572 * @adapter: board private structure
574 * Handles speed and duplex options on fiber adapters
577 static void __devinit
578 e1000_check_fiber_options(struct e1000_adapter
*adapter
)
580 int bd
= adapter
->bd_number
;
581 if (num_Speed
> bd
) {
582 DPRINTK(PROBE
, INFO
, "Speed not valid for fiber adapters, "
583 "parameter ignored\n");
586 if (num_Duplex
> bd
) {
587 DPRINTK(PROBE
, INFO
, "Duplex not valid for fiber adapters, "
588 "parameter ignored\n");
591 if ((num_AutoNeg
> bd
) && (AutoNeg
[bd
] != 0x20)) {
592 DPRINTK(PROBE
, INFO
, "AutoNeg other than 1000/Full is "
593 "not valid for fiber adapters, "
594 "parameter ignored\n");
599 * e1000_check_copper_options - Range Checking for Link Options, Copper Version
600 * @adapter: board private structure
602 * Handles speed and duplex options on copper adapters
605 static void __devinit
606 e1000_check_copper_options(struct e1000_adapter
*adapter
)
609 int bd
= adapter
->bd_number
;
612 struct e1000_opt_list speed_list
[] = {{ 0, "" },
617 struct e1000_option opt
= {
620 .err
= "parameter ignored",
622 .arg
= { .l
= { .nr
= ARRAY_SIZE(speed_list
),
626 if (num_Speed
> bd
) {
628 e1000_validate_option(&speed
, &opt
, adapter
);
634 struct e1000_opt_list dplx_list
[] = {{ 0, "" },
636 { FULL_DUPLEX
, "" }};
638 struct e1000_option opt
= {
641 .err
= "parameter ignored",
643 .arg
= { .l
= { .nr
= ARRAY_SIZE(dplx_list
),
647 if (e1000_check_phy_reset_block(&adapter
->hw
)) {
649 "Link active due to SoL/IDER Session. "
650 "Speed/Duplex/AutoNeg parameter ignored.\n");
653 if (num_Duplex
> bd
) {
655 e1000_validate_option(&dplx
, &opt
, adapter
);
661 if ((num_AutoNeg
> bd
) && (speed
!= 0 || dplx
!= 0)) {
663 "AutoNeg specified along with Speed or Duplex, "
664 "parameter ignored\n");
665 adapter
->hw
.autoneg_advertised
= AUTONEG_ADV_DEFAULT
;
666 } else { /* Autoneg */
667 struct e1000_opt_list an_list
[] =
668 #define AA "AutoNeg advertising "
669 {{ 0x01, AA
"10/HD" },
670 { 0x02, AA
"10/FD" },
671 { 0x03, AA
"10/FD, 10/HD" },
672 { 0x04, AA
"100/HD" },
673 { 0x05, AA
"100/HD, 10/HD" },
674 { 0x06, AA
"100/HD, 10/FD" },
675 { 0x07, AA
"100/HD, 10/FD, 10/HD" },
676 { 0x08, AA
"100/FD" },
677 { 0x09, AA
"100/FD, 10/HD" },
678 { 0x0a, AA
"100/FD, 10/FD" },
679 { 0x0b, AA
"100/FD, 10/FD, 10/HD" },
680 { 0x0c, AA
"100/FD, 100/HD" },
681 { 0x0d, AA
"100/FD, 100/HD, 10/HD" },
682 { 0x0e, AA
"100/FD, 100/HD, 10/FD" },
683 { 0x0f, AA
"100/FD, 100/HD, 10/FD, 10/HD" },
684 { 0x20, AA
"1000/FD" },
685 { 0x21, AA
"1000/FD, 10/HD" },
686 { 0x22, AA
"1000/FD, 10/FD" },
687 { 0x23, AA
"1000/FD, 10/FD, 10/HD" },
688 { 0x24, AA
"1000/FD, 100/HD" },
689 { 0x25, AA
"1000/FD, 100/HD, 10/HD" },
690 { 0x26, AA
"1000/FD, 100/HD, 10/FD" },
691 { 0x27, AA
"1000/FD, 100/HD, 10/FD, 10/HD" },
692 { 0x28, AA
"1000/FD, 100/FD" },
693 { 0x29, AA
"1000/FD, 100/FD, 10/HD" },
694 { 0x2a, AA
"1000/FD, 100/FD, 10/FD" },
695 { 0x2b, AA
"1000/FD, 100/FD, 10/FD, 10/HD" },
696 { 0x2c, AA
"1000/FD, 100/FD, 100/HD" },
697 { 0x2d, AA
"1000/FD, 100/FD, 100/HD, 10/HD" },
698 { 0x2e, AA
"1000/FD, 100/FD, 100/HD, 10/FD" },
699 { 0x2f, AA
"1000/FD, 100/FD, 100/HD, 10/FD, 10/HD" }};
701 struct e1000_option opt
= {
704 .err
= "parameter ignored",
705 .def
= AUTONEG_ADV_DEFAULT
,
706 .arg
= { .l
= { .nr
= ARRAY_SIZE(an_list
),
710 if (num_AutoNeg
> bd
) {
712 e1000_validate_option(&an
, &opt
, adapter
);
716 adapter
->hw
.autoneg_advertised
= an
;
719 switch (speed
+ dplx
) {
721 adapter
->hw
.autoneg
= adapter
->fc_autoneg
= 1;
722 if ((num_Speed
> bd
) && (speed
!= 0 || dplx
!= 0))
724 "Speed and duplex autonegotiation enabled\n");
727 DPRINTK(PROBE
, INFO
, "Half Duplex specified without Speed\n");
728 DPRINTK(PROBE
, INFO
, "Using Autonegotiation at "
729 "Half Duplex only\n");
730 adapter
->hw
.autoneg
= adapter
->fc_autoneg
= 1;
731 adapter
->hw
.autoneg_advertised
= ADVERTISE_10_HALF
|
735 DPRINTK(PROBE
, INFO
, "Full Duplex specified without Speed\n");
736 DPRINTK(PROBE
, INFO
, "Using Autonegotiation at "
737 "Full Duplex only\n");
738 adapter
->hw
.autoneg
= adapter
->fc_autoneg
= 1;
739 adapter
->hw
.autoneg_advertised
= ADVERTISE_10_FULL
|
744 DPRINTK(PROBE
, INFO
, "10 Mbps Speed specified "
746 DPRINTK(PROBE
, INFO
, "Using Autonegotiation at 10 Mbps only\n");
747 adapter
->hw
.autoneg
= adapter
->fc_autoneg
= 1;
748 adapter
->hw
.autoneg_advertised
= ADVERTISE_10_HALF
|
751 case SPEED_10
+ HALF_DUPLEX
:
752 DPRINTK(PROBE
, INFO
, "Forcing to 10 Mbps Half Duplex\n");
753 adapter
->hw
.autoneg
= adapter
->fc_autoneg
= 0;
754 adapter
->hw
.forced_speed_duplex
= e1000_10_half
;
755 adapter
->hw
.autoneg_advertised
= 0;
757 case SPEED_10
+ FULL_DUPLEX
:
758 DPRINTK(PROBE
, INFO
, "Forcing to 10 Mbps Full Duplex\n");
759 adapter
->hw
.autoneg
= adapter
->fc_autoneg
= 0;
760 adapter
->hw
.forced_speed_duplex
= e1000_10_full
;
761 adapter
->hw
.autoneg_advertised
= 0;
764 DPRINTK(PROBE
, INFO
, "100 Mbps Speed specified "
766 DPRINTK(PROBE
, INFO
, "Using Autonegotiation at "
768 adapter
->hw
.autoneg
= adapter
->fc_autoneg
= 1;
769 adapter
->hw
.autoneg_advertised
= ADVERTISE_100_HALF
|
772 case SPEED_100
+ HALF_DUPLEX
:
773 DPRINTK(PROBE
, INFO
, "Forcing to 100 Mbps Half Duplex\n");
774 adapter
->hw
.autoneg
= adapter
->fc_autoneg
= 0;
775 adapter
->hw
.forced_speed_duplex
= e1000_100_half
;
776 adapter
->hw
.autoneg_advertised
= 0;
778 case SPEED_100
+ FULL_DUPLEX
:
779 DPRINTK(PROBE
, INFO
, "Forcing to 100 Mbps Full Duplex\n");
780 adapter
->hw
.autoneg
= adapter
->fc_autoneg
= 0;
781 adapter
->hw
.forced_speed_duplex
= e1000_100_full
;
782 adapter
->hw
.autoneg_advertised
= 0;
785 DPRINTK(PROBE
, INFO
, "1000 Mbps Speed specified without "
788 "Using Autonegotiation at 1000 Mbps "
789 "Full Duplex only\n");
790 adapter
->hw
.autoneg
= adapter
->fc_autoneg
= 1;
791 adapter
->hw
.autoneg_advertised
= ADVERTISE_1000_FULL
;
793 case SPEED_1000
+ HALF_DUPLEX
:
795 "Half Duplex is not supported at 1000 Mbps\n");
797 "Using Autonegotiation at 1000 Mbps "
798 "Full Duplex only\n");
799 adapter
->hw
.autoneg
= adapter
->fc_autoneg
= 1;
800 adapter
->hw
.autoneg_advertised
= ADVERTISE_1000_FULL
;
802 case SPEED_1000
+ FULL_DUPLEX
:
804 "Using Autonegotiation at 1000 Mbps Full Duplex only\n");
805 adapter
->hw
.autoneg
= adapter
->fc_autoneg
= 1;
806 adapter
->hw
.autoneg_advertised
= ADVERTISE_1000_FULL
;
812 /* Speed, AutoNeg and MDI/MDI-X must all play nice */
813 if (e1000_validate_mdi_setting(&(adapter
->hw
)) < 0) {
815 "Speed, AutoNeg and MDI-X specifications are "
816 "incompatible. Setting MDI-X to a compatible value.\n");