aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000/e1000_param.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/e1000/e1000_param.c')
-rw-r--r--drivers/net/e1000/e1000_param.c112
1 files changed, 48 insertions, 64 deletions
diff --git a/drivers/net/e1000/e1000_param.c b/drivers/net/e1000/e1000_param.c
index 38d2741ccae..10d8d98bb79 100644
--- a/drivers/net/e1000/e1000_param.c
+++ b/drivers/net/e1000/e1000_param.c
@@ -188,14 +188,6 @@ E1000_PARAM(InterruptThrottleRate, "Interrupt Throttling Rate");
188 */ 188 */
189E1000_PARAM(SmartPowerDownEnable, "Enable PHY smart power down"); 189E1000_PARAM(SmartPowerDownEnable, "Enable PHY smart power down");
190 190
191/* Enable Kumeran Lock Loss workaround
192 *
193 * Valid Range: 0, 1
194 *
195 * Default Value: 1 (enabled)
196 */
197E1000_PARAM(KumeranLockLoss, "Enable Kumeran lock loss workaround");
198
199struct e1000_option { 191struct e1000_option {
200 enum { enable_option, range_option, list_option } type; 192 enum { enable_option, range_option, list_option } type;
201 const char *name; 193 const char *name;
@@ -226,17 +218,16 @@ static int __devinit e1000_validate_option(unsigned int *value,
226 case enable_option: 218 case enable_option:
227 switch (*value) { 219 switch (*value) {
228 case OPTION_ENABLED: 220 case OPTION_ENABLED:
229 DPRINTK(PROBE, INFO, "%s Enabled\n", opt->name); 221 e_dev_info("%s Enabled\n", opt->name);
230 return 0; 222 return 0;
231 case OPTION_DISABLED: 223 case OPTION_DISABLED:
232 DPRINTK(PROBE, INFO, "%s Disabled\n", opt->name); 224 e_dev_info("%s Disabled\n", opt->name);
233 return 0; 225 return 0;
234 } 226 }
235 break; 227 break;
236 case range_option: 228 case range_option:
237 if (*value >= opt->arg.r.min && *value <= opt->arg.r.max) { 229 if (*value >= opt->arg.r.min && *value <= opt->arg.r.max) {
238 DPRINTK(PROBE, INFO, 230 e_dev_info("%s set to %i\n", opt->name, *value);
239 "%s set to %i\n", opt->name, *value);
240 return 0; 231 return 0;
241 } 232 }
242 break; 233 break;
@@ -248,7 +239,7 @@ static int __devinit e1000_validate_option(unsigned int *value,
248 ent = &opt->arg.l.p[i]; 239 ent = &opt->arg.l.p[i];
249 if (*value == ent->i) { 240 if (*value == ent->i) {
250 if (ent->str[0] != '\0') 241 if (ent->str[0] != '\0')
251 DPRINTK(PROBE, INFO, "%s\n", ent->str); 242 e_dev_info("%s\n", ent->str);
252 return 0; 243 return 0;
253 } 244 }
254 } 245 }
@@ -258,7 +249,7 @@ static int __devinit e1000_validate_option(unsigned int *value,
258 BUG(); 249 BUG();
259 } 250 }
260 251
261 DPRINTK(PROBE, INFO, "Invalid %s value specified (%i) %s\n", 252 e_dev_info("Invalid %s value specified (%i) %s\n",
262 opt->name, *value, opt->err); 253 opt->name, *value, opt->err);
263 *value = opt->def; 254 *value = opt->def;
264 return -1; 255 return -1;
@@ -283,9 +274,8 @@ void __devinit e1000_check_options(struct e1000_adapter *adapter)
283 int bd = adapter->bd_number; 274 int bd = adapter->bd_number;
284 275
285 if (bd >= E1000_MAX_NIC) { 276 if (bd >= E1000_MAX_NIC) {
286 DPRINTK(PROBE, NOTICE, 277 e_dev_warn("Warning: no configuration for board #%i "
287 "Warning: no configuration for board #%i\n", bd); 278 "using defaults for all values\n", bd);
288 DPRINTK(PROBE, NOTICE, "Using defaults for all values\n");
289 } 279 }
290 280
291 { /* Transmit Descriptor Count */ 281 { /* Transmit Descriptor Count */
@@ -472,27 +462,31 @@ void __devinit e1000_check_options(struct e1000_adapter *adapter)
472 adapter->itr = InterruptThrottleRate[bd]; 462 adapter->itr = InterruptThrottleRate[bd];
473 switch (adapter->itr) { 463 switch (adapter->itr) {
474 case 0: 464 case 0:
475 DPRINTK(PROBE, INFO, "%s turned off\n", 465 e_dev_info("%s turned off\n", opt.name);
476 opt.name);
477 break; 466 break;
478 case 1: 467 case 1:
479 DPRINTK(PROBE, INFO, "%s set to dynamic mode\n", 468 e_dev_info("%s set to dynamic mode\n",
480 opt.name); 469 opt.name);
481 adapter->itr_setting = adapter->itr; 470 adapter->itr_setting = adapter->itr;
482 adapter->itr = 20000; 471 adapter->itr = 20000;
483 break; 472 break;
484 case 3: 473 case 3:
485 DPRINTK(PROBE, INFO, 474 e_dev_info("%s set to dynamic conservative "
486 "%s set to dynamic conservative mode\n", 475 "mode\n", opt.name);
487 opt.name);
488 adapter->itr_setting = adapter->itr; 476 adapter->itr_setting = adapter->itr;
489 adapter->itr = 20000; 477 adapter->itr = 20000;
490 break; 478 break;
479 case 4:
480 e_dev_info("%s set to simplified "
481 "(2000-8000) ints mode\n", opt.name);
482 adapter->itr_setting = adapter->itr;
483 break;
491 default: 484 default:
492 e1000_validate_option(&adapter->itr, &opt, 485 e1000_validate_option(&adapter->itr, &opt,
493 adapter); 486 adapter);
494 /* save the setting, because the dynamic bits change itr */ 487 /* save the setting, because the dynamic bits
495 /* clear the lower two bits because they are 488 * change itr.
489 * clear the lower two bits because they are
496 * used as control */ 490 * used as control */
497 adapter->itr_setting = adapter->itr & ~3; 491 adapter->itr_setting = adapter->itr & ~3;
498 break; 492 break;
@@ -543,19 +537,18 @@ static void __devinit e1000_check_fiber_options(struct e1000_adapter *adapter)
543{ 537{
544 int bd = adapter->bd_number; 538 int bd = adapter->bd_number;
545 if (num_Speed > bd) { 539 if (num_Speed > bd) {
546 DPRINTK(PROBE, INFO, "Speed not valid for fiber adapters, " 540 e_dev_info("Speed not valid for fiber adapters, parameter "
547 "parameter ignored\n"); 541 "ignored\n");
548 } 542 }
549 543
550 if (num_Duplex > bd) { 544 if (num_Duplex > bd) {
551 DPRINTK(PROBE, INFO, "Duplex not valid for fiber adapters, " 545 e_dev_info("Duplex not valid for fiber adapters, parameter "
552 "parameter ignored\n"); 546 "ignored\n");
553 } 547 }
554 548
555 if ((num_AutoNeg > bd) && (AutoNeg[bd] != 0x20)) { 549 if ((num_AutoNeg > bd) && (AutoNeg[bd] != 0x20)) {
556 DPRINTK(PROBE, INFO, "AutoNeg other than 1000/Full is " 550 e_dev_info("AutoNeg other than 1000/Full is not valid for fiber"
557 "not valid for fiber adapters, " 551 "adapters, parameter ignored\n");
558 "parameter ignored\n");
559 } 552 }
560} 553}
561 554
@@ -619,9 +612,8 @@ static void __devinit e1000_check_copper_options(struct e1000_adapter *adapter)
619 } 612 }
620 613
621 if ((num_AutoNeg > bd) && (speed != 0 || dplx != 0)) { 614 if ((num_AutoNeg > bd) && (speed != 0 || dplx != 0)) {
622 DPRINTK(PROBE, INFO, 615 e_dev_info("AutoNeg specified along with Speed or Duplex, "
623 "AutoNeg specified along with Speed or Duplex, " 616 "parameter ignored\n");
624 "parameter ignored\n");
625 adapter->hw.autoneg_advertised = AUTONEG_ADV_DEFAULT; 617 adapter->hw.autoneg_advertised = AUTONEG_ADV_DEFAULT;
626 } else { /* Autoneg */ 618 } else { /* Autoneg */
627 static const struct e1000_opt_list an_list[] = 619 static const struct e1000_opt_list an_list[] =
@@ -680,79 +672,72 @@ static void __devinit e1000_check_copper_options(struct e1000_adapter *adapter)
680 case 0: 672 case 0:
681 adapter->hw.autoneg = adapter->fc_autoneg = 1; 673 adapter->hw.autoneg = adapter->fc_autoneg = 1;
682 if ((num_Speed > bd) && (speed != 0 || dplx != 0)) 674 if ((num_Speed > bd) && (speed != 0 || dplx != 0))
683 DPRINTK(PROBE, INFO, 675 e_dev_info("Speed and duplex autonegotiation "
684 "Speed and duplex autonegotiation enabled\n"); 676 "enabled\n");
685 break; 677 break;
686 case HALF_DUPLEX: 678 case HALF_DUPLEX:
687 DPRINTK(PROBE, INFO, "Half Duplex specified without Speed\n"); 679 e_dev_info("Half Duplex specified without Speed\n");
688 DPRINTK(PROBE, INFO, "Using Autonegotiation at " 680 e_dev_info("Using Autonegotiation at Half Duplex only\n");
689 "Half Duplex only\n");
690 adapter->hw.autoneg = adapter->fc_autoneg = 1; 681 adapter->hw.autoneg = adapter->fc_autoneg = 1;
691 adapter->hw.autoneg_advertised = ADVERTISE_10_HALF | 682 adapter->hw.autoneg_advertised = ADVERTISE_10_HALF |
692 ADVERTISE_100_HALF; 683 ADVERTISE_100_HALF;
693 break; 684 break;
694 case FULL_DUPLEX: 685 case FULL_DUPLEX:
695 DPRINTK(PROBE, INFO, "Full Duplex specified without Speed\n"); 686 e_dev_info("Full Duplex specified without Speed\n");
696 DPRINTK(PROBE, INFO, "Using Autonegotiation at " 687 e_dev_info("Using Autonegotiation at Full Duplex only\n");
697 "Full Duplex only\n");
698 adapter->hw.autoneg = adapter->fc_autoneg = 1; 688 adapter->hw.autoneg = adapter->fc_autoneg = 1;
699 adapter->hw.autoneg_advertised = ADVERTISE_10_FULL | 689 adapter->hw.autoneg_advertised = ADVERTISE_10_FULL |
700 ADVERTISE_100_FULL | 690 ADVERTISE_100_FULL |
701 ADVERTISE_1000_FULL; 691 ADVERTISE_1000_FULL;
702 break; 692 break;
703 case SPEED_10: 693 case SPEED_10:
704 DPRINTK(PROBE, INFO, "10 Mbps Speed specified " 694 e_dev_info("10 Mbps Speed specified without Duplex\n");
705 "without Duplex\n"); 695 e_dev_info("Using Autonegotiation at 10 Mbps only\n");
706 DPRINTK(PROBE, INFO, "Using Autonegotiation at 10 Mbps only\n");
707 adapter->hw.autoneg = adapter->fc_autoneg = 1; 696 adapter->hw.autoneg = adapter->fc_autoneg = 1;
708 adapter->hw.autoneg_advertised = ADVERTISE_10_HALF | 697 adapter->hw.autoneg_advertised = ADVERTISE_10_HALF |
709 ADVERTISE_10_FULL; 698 ADVERTISE_10_FULL;
710 break; 699 break;
711 case SPEED_10 + HALF_DUPLEX: 700 case SPEED_10 + HALF_DUPLEX:
712 DPRINTK(PROBE, INFO, "Forcing to 10 Mbps Half Duplex\n"); 701 e_dev_info("Forcing to 10 Mbps Half Duplex\n");
713 adapter->hw.autoneg = adapter->fc_autoneg = 0; 702 adapter->hw.autoneg = adapter->fc_autoneg = 0;
714 adapter->hw.forced_speed_duplex = e1000_10_half; 703 adapter->hw.forced_speed_duplex = e1000_10_half;
715 adapter->hw.autoneg_advertised = 0; 704 adapter->hw.autoneg_advertised = 0;
716 break; 705 break;
717 case SPEED_10 + FULL_DUPLEX: 706 case SPEED_10 + FULL_DUPLEX:
718 DPRINTK(PROBE, INFO, "Forcing to 10 Mbps Full Duplex\n"); 707 e_dev_info("Forcing to 10 Mbps Full Duplex\n");
719 adapter->hw.autoneg = adapter->fc_autoneg = 0; 708 adapter->hw.autoneg = adapter->fc_autoneg = 0;
720 adapter->hw.forced_speed_duplex = e1000_10_full; 709 adapter->hw.forced_speed_duplex = e1000_10_full;
721 adapter->hw.autoneg_advertised = 0; 710 adapter->hw.autoneg_advertised = 0;
722 break; 711 break;
723 case SPEED_100: 712 case SPEED_100:
724 DPRINTK(PROBE, INFO, "100 Mbps Speed specified " 713 e_dev_info("100 Mbps Speed specified without Duplex\n");
725 "without Duplex\n"); 714 e_dev_info("Using Autonegotiation at 100 Mbps only\n");
726 DPRINTK(PROBE, INFO, "Using Autonegotiation at "
727 "100 Mbps only\n");
728 adapter->hw.autoneg = adapter->fc_autoneg = 1; 715 adapter->hw.autoneg = adapter->fc_autoneg = 1;
729 adapter->hw.autoneg_advertised = ADVERTISE_100_HALF | 716 adapter->hw.autoneg_advertised = ADVERTISE_100_HALF |
730 ADVERTISE_100_FULL; 717 ADVERTISE_100_FULL;
731 break; 718 break;
732 case SPEED_100 + HALF_DUPLEX: 719 case SPEED_100 + HALF_DUPLEX:
733 DPRINTK(PROBE, INFO, "Forcing to 100 Mbps Half Duplex\n"); 720 e_dev_info("Forcing to 100 Mbps Half Duplex\n");
734 adapter->hw.autoneg = adapter->fc_autoneg = 0; 721 adapter->hw.autoneg = adapter->fc_autoneg = 0;
735 adapter->hw.forced_speed_duplex = e1000_100_half; 722 adapter->hw.forced_speed_duplex = e1000_100_half;
736 adapter->hw.autoneg_advertised = 0; 723 adapter->hw.autoneg_advertised = 0;
737 break; 724 break;
738 case SPEED_100 + FULL_DUPLEX: 725 case SPEED_100 + FULL_DUPLEX:
739 DPRINTK(PROBE, INFO, "Forcing to 100 Mbps Full Duplex\n"); 726 e_dev_info("Forcing to 100 Mbps Full Duplex\n");
740 adapter->hw.autoneg = adapter->fc_autoneg = 0; 727 adapter->hw.autoneg = adapter->fc_autoneg = 0;
741 adapter->hw.forced_speed_duplex = e1000_100_full; 728 adapter->hw.forced_speed_duplex = e1000_100_full;
742 adapter->hw.autoneg_advertised = 0; 729 adapter->hw.autoneg_advertised = 0;
743 break; 730 break;
744 case SPEED_1000: 731 case SPEED_1000:
745 DPRINTK(PROBE, INFO, "1000 Mbps Speed specified without " 732 e_dev_info("1000 Mbps Speed specified without Duplex\n");
746 "Duplex\n");
747 goto full_duplex_only; 733 goto full_duplex_only;
748 case SPEED_1000 + HALF_DUPLEX: 734 case SPEED_1000 + HALF_DUPLEX:
749 DPRINTK(PROBE, INFO, 735 e_dev_info("Half Duplex is not supported at 1000 Mbps\n");
750 "Half Duplex is not supported at 1000 Mbps\n");
751 /* fall through */ 736 /* fall through */
752 case SPEED_1000 + FULL_DUPLEX: 737 case SPEED_1000 + FULL_DUPLEX:
753full_duplex_only: 738full_duplex_only:
754 DPRINTK(PROBE, INFO, 739 e_dev_info("Using Autonegotiation at 1000 Mbps Full Duplex "
755 "Using Autonegotiation at 1000 Mbps Full Duplex only\n"); 740 "only\n");
756 adapter->hw.autoneg = adapter->fc_autoneg = 1; 741 adapter->hw.autoneg = adapter->fc_autoneg = 1;
757 adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL; 742 adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL;
758 break; 743 break;
@@ -762,9 +747,8 @@ full_duplex_only:
762 747
763 /* Speed, AutoNeg and MDI/MDI-X must all play nice */ 748 /* Speed, AutoNeg and MDI/MDI-X must all play nice */
764 if (e1000_validate_mdi_setting(&(adapter->hw)) < 0) { 749 if (e1000_validate_mdi_setting(&(adapter->hw)) < 0) {
765 DPRINTK(PROBE, INFO, 750 e_dev_info("Speed, AutoNeg and MDI-X specs are incompatible. "
766 "Speed, AutoNeg and MDI-X specifications are " 751 "Setting MDI-X to a compatible value.\n");
767 "incompatible. Setting MDI-X to a compatible value.\n");
768 } 752 }
769} 753}
770 754