diff options
Diffstat (limited to 'drivers/net/e1000/e1000_param.c')
-rw-r--r-- | drivers/net/e1000/e1000_param.c | 112 |
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 | */ |
189 | E1000_PARAM(SmartPowerDownEnable, "Enable PHY smart power down"); | 189 | E1000_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 | */ | ||
197 | E1000_PARAM(KumeranLockLoss, "Enable Kumeran lock loss workaround"); | ||
198 | |||
199 | struct e1000_option { | 191 | struct 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: |
753 | full_duplex_only: | 738 | full_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 | ||