aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorIvo van Doorn <ivdoorn@gmail.com>2008-03-09 17:45:21 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-03-13 16:02:36 -0400
commita4fe07d913096f4573512c9369f8ca824fbc2d8f (patch)
tree9d47ba6a24083e84527075e12a41263a3f77ec74 /drivers/net/wireless
parenta7f3a06cbb63a16ad7a1720506591d8d12a03029 (diff)
rt2x00: Start bugging when rt2x00lib doesn't filter SW diversity
rt2x00lib should filter SW diversity out before sending any configuration changes to the driver. When rt2x00lib fails to do this, it is important that such events are reported because it _must_ be fixed. So upgrading the error level to a BUG_ON() which will make sure this bug gets noticed whenever it happens. Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/rt2x00/rt2400pci.c23
-rw-r--r--drivers/net/wireless/rt2x00/rt2500pci.c25
-rw-r--r--drivers/net/wireless/rt2x00/rt2500usb.c23
-rw-r--r--drivers/net/wireless/rt2x00/rt61pci.c36
-rw-r--r--drivers/net/wireless/rt2x00/rt73usb.c23
5 files changed, 49 insertions, 81 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2400pci.c b/drivers/net/wireless/rt2x00/rt2400pci.c
index a1c38a144149..0ac0c6e08732 100644
--- a/drivers/net/wireless/rt2x00/rt2400pci.c
+++ b/drivers/net/wireless/rt2x00/rt2400pci.c
@@ -417,6 +417,13 @@ static void rt2400pci_config_antenna(struct rt2x00_dev *rt2x00dev,
417 u8 r1; 417 u8 r1;
418 u8 r4; 418 u8 r4;
419 419
420 /*
421 * We should never come here because rt2x00lib is supposed
422 * to catch this and send us the correct antenna explicitely.
423 */
424 BUG_ON(ant->rx == ANTENNA_SW_DIVERSITY ||
425 ant->tx == ANTENNA_SW_DIVERSITY);
426
420 rt2400pci_bbp_read(rt2x00dev, 4, &r4); 427 rt2400pci_bbp_read(rt2x00dev, 4, &r4);
421 rt2400pci_bbp_read(rt2x00dev, 1, &r1); 428 rt2400pci_bbp_read(rt2x00dev, 1, &r1);
422 429
@@ -430,14 +437,8 @@ static void rt2400pci_config_antenna(struct rt2x00_dev *rt2x00dev,
430 case ANTENNA_A: 437 case ANTENNA_A:
431 rt2x00_set_field8(&r1, BBP_R1_TX_ANTENNA, 0); 438 rt2x00_set_field8(&r1, BBP_R1_TX_ANTENNA, 0);
432 break; 439 break;
433 case ANTENNA_SW_DIVERSITY:
434 /*
435 * NOTE: We should never come here because rt2x00lib is
436 * supposed to catch this and send us the correct antenna
437 * explicitely. However we are nog going to bug about this.
438 * Instead, just default to antenna B.
439 */
440 case ANTENNA_B: 440 case ANTENNA_B:
441 default:
441 rt2x00_set_field8(&r1, BBP_R1_TX_ANTENNA, 2); 442 rt2x00_set_field8(&r1, BBP_R1_TX_ANTENNA, 2);
442 break; 443 break;
443 } 444 }
@@ -452,14 +453,8 @@ static void rt2400pci_config_antenna(struct rt2x00_dev *rt2x00dev,
452 case ANTENNA_A: 453 case ANTENNA_A:
453 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA, 0); 454 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA, 0);
454 break; 455 break;
455 case ANTENNA_SW_DIVERSITY:
456 /*
457 * NOTE: We should never come here because rt2x00lib is
458 * supposed to catch this and send us the correct antenna
459 * explicitely. However we are nog going to bug about this.
460 * Instead, just default to antenna B.
461 */
462 case ANTENNA_B: 456 case ANTENNA_B:
457 default:
463 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA, 2); 458 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA, 2);
464 break; 459 break;
465 } 460 }
diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c
index 096232763055..d85e1a44d5cd 100644
--- a/drivers/net/wireless/rt2x00/rt2500pci.c
+++ b/drivers/net/wireless/rt2x00/rt2500pci.c
@@ -444,6 +444,13 @@ static void rt2500pci_config_antenna(struct rt2x00_dev *rt2x00dev,
444 u8 r14; 444 u8 r14;
445 u8 r2; 445 u8 r2;
446 446
447 /*
448 * We should never come here because rt2x00lib is supposed
449 * to catch this and send us the correct antenna explicitely.
450 */
451 BUG_ON(ant->rx == ANTENNA_SW_DIVERSITY ||
452 ant->tx == ANTENNA_SW_DIVERSITY);
453
447 rt2x00pci_register_read(rt2x00dev, BBPCSR1, &reg); 454 rt2x00pci_register_read(rt2x00dev, BBPCSR1, &reg);
448 rt2500pci_bbp_read(rt2x00dev, 14, &r14); 455 rt2500pci_bbp_read(rt2x00dev, 14, &r14);
449 rt2500pci_bbp_read(rt2x00dev, 2, &r2); 456 rt2500pci_bbp_read(rt2x00dev, 2, &r2);
@@ -457,15 +464,8 @@ static void rt2500pci_config_antenna(struct rt2x00_dev *rt2x00dev,
457 rt2x00_set_field32(&reg, BBPCSR1_CCK, 0); 464 rt2x00_set_field32(&reg, BBPCSR1_CCK, 0);
458 rt2x00_set_field32(&reg, BBPCSR1_OFDM, 0); 465 rt2x00_set_field32(&reg, BBPCSR1_OFDM, 0);
459 break; 466 break;
460 case ANTENNA_HW_DIVERSITY:
461 case ANTENNA_SW_DIVERSITY:
462 /*
463 * NOTE: We should never come here because rt2x00lib is
464 * supposed to catch this and send us the correct antenna
465 * explicitely. However we are nog going to bug about this.
466 * Instead, just default to antenna B.
467 */
468 case ANTENNA_B: 467 case ANTENNA_B:
468 default:
469 rt2x00_set_field8(&r2, BBP_R2_TX_ANTENNA, 2); 469 rt2x00_set_field8(&r2, BBP_R2_TX_ANTENNA, 2);
470 rt2x00_set_field32(&reg, BBPCSR1_CCK, 2); 470 rt2x00_set_field32(&reg, BBPCSR1_CCK, 2);
471 rt2x00_set_field32(&reg, BBPCSR1_OFDM, 2); 471 rt2x00_set_field32(&reg, BBPCSR1_OFDM, 2);
@@ -479,15 +479,8 @@ static void rt2500pci_config_antenna(struct rt2x00_dev *rt2x00dev,
479 case ANTENNA_A: 479 case ANTENNA_A:
480 rt2x00_set_field8(&r14, BBP_R14_RX_ANTENNA, 0); 480 rt2x00_set_field8(&r14, BBP_R14_RX_ANTENNA, 0);
481 break; 481 break;
482 case ANTENNA_HW_DIVERSITY:
483 case ANTENNA_SW_DIVERSITY:
484 /*
485 * NOTE: We should never come here because rt2x00lib is
486 * supposed to catch this and send us the correct antenna
487 * explicitely. However we are nog going to bug about this.
488 * Instead, just default to antenna B.
489 */
490 case ANTENNA_B: 482 case ANTENNA_B:
483 default:
491 rt2x00_set_field8(&r14, BBP_R14_RX_ANTENNA, 2); 484 rt2x00_set_field8(&r14, BBP_R14_RX_ANTENNA, 2);
492 break; 485 break;
493 } 486 }
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
index b9e2f3a4990b..7ea4247442b3 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.c
+++ b/drivers/net/wireless/rt2x00/rt2500usb.c
@@ -437,6 +437,13 @@ static void rt2500usb_config_antenna(struct rt2x00_dev *rt2x00dev,
437 u16 csr5; 437 u16 csr5;
438 u16 csr6; 438 u16 csr6;
439 439
440 /*
441 * We should never come here because rt2x00lib is supposed
442 * to catch this and send us the correct antenna explicitely.
443 */
444 BUG_ON(ant->rx == ANTENNA_SW_DIVERSITY ||
445 ant->tx == ANTENNA_SW_DIVERSITY);
446
440 rt2500usb_bbp_read(rt2x00dev, 2, &r2); 447 rt2500usb_bbp_read(rt2x00dev, 2, &r2);
441 rt2500usb_bbp_read(rt2x00dev, 14, &r14); 448 rt2500usb_bbp_read(rt2x00dev, 14, &r14);
442 rt2500usb_register_read(rt2x00dev, PHY_CSR5, &csr5); 449 rt2500usb_register_read(rt2x00dev, PHY_CSR5, &csr5);
@@ -456,14 +463,8 @@ static void rt2500usb_config_antenna(struct rt2x00_dev *rt2x00dev,
456 rt2x00_set_field16(&csr5, PHY_CSR5_CCK, 0); 463 rt2x00_set_field16(&csr5, PHY_CSR5_CCK, 0);
457 rt2x00_set_field16(&csr6, PHY_CSR6_OFDM, 0); 464 rt2x00_set_field16(&csr6, PHY_CSR6_OFDM, 0);
458 break; 465 break;
459 case ANTENNA_SW_DIVERSITY:
460 /*
461 * NOTE: We should never come here because rt2x00lib is
462 * supposed to catch this and send us the correct antenna
463 * explicitely. However we are nog going to bug about this.
464 * Instead, just default to antenna B.
465 */
466 case ANTENNA_B: 466 case ANTENNA_B:
467 default:
467 rt2x00_set_field8(&r2, BBP_R2_TX_ANTENNA, 2); 468 rt2x00_set_field8(&r2, BBP_R2_TX_ANTENNA, 2);
468 rt2x00_set_field16(&csr5, PHY_CSR5_CCK, 2); 469 rt2x00_set_field16(&csr5, PHY_CSR5_CCK, 2);
469 rt2x00_set_field16(&csr6, PHY_CSR6_OFDM, 2); 470 rt2x00_set_field16(&csr6, PHY_CSR6_OFDM, 2);
@@ -480,14 +481,8 @@ static void rt2500usb_config_antenna(struct rt2x00_dev *rt2x00dev,
480 case ANTENNA_A: 481 case ANTENNA_A:
481 rt2x00_set_field8(&r14, BBP_R14_RX_ANTENNA, 0); 482 rt2x00_set_field8(&r14, BBP_R14_RX_ANTENNA, 0);
482 break; 483 break;
483 case ANTENNA_SW_DIVERSITY:
484 /*
485 * NOTE: We should never come here because rt2x00lib is
486 * supposed to catch this and send us the correct antenna
487 * explicitely. However we are nog going to bug about this.
488 * Instead, just default to antenna B.
489 */
490 case ANTENNA_B: 484 case ANTENNA_B:
485 default:
491 rt2x00_set_field8(&r14, BBP_R14_RX_ANTENNA, 2); 486 rt2x00_set_field8(&r14, BBP_R14_RX_ANTENNA, 2);
492 break; 487 break;
493 } 488 }
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
index 23b3e163b9ba..f912a8515b5c 100644
--- a/drivers/net/wireless/rt2x00/rt61pci.c
+++ b/drivers/net/wireless/rt2x00/rt61pci.c
@@ -481,14 +481,8 @@ static void rt61pci_config_antenna_5x(struct rt2x00_dev *rt2x00dev,
481 else 481 else
482 rt2x00_set_field8(&r77, BBP_R77_RX_ANTENNA, 3); 482 rt2x00_set_field8(&r77, BBP_R77_RX_ANTENNA, 3);
483 break; 483 break;
484 case ANTENNA_SW_DIVERSITY:
485 /*
486 * NOTE: We should never come here because rt2x00lib is
487 * supposed to catch this and send us the correct antenna
488 * explicitely. However we are nog going to bug about this.
489 * Instead, just default to antenna B.
490 */
491 case ANTENNA_B: 484 case ANTENNA_B:
485 default:
492 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA_CONTROL, 1); 486 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA_CONTROL, 1);
493 rt2x00_set_field8(&r4, BBP_R4_RX_FRAME_END, 0); 487 rt2x00_set_field8(&r4, BBP_R4_RX_FRAME_END, 0);
494 if (rt2x00dev->curr_band == IEEE80211_BAND_5GHZ) 488 if (rt2x00dev->curr_band == IEEE80211_BAND_5GHZ)
@@ -530,14 +524,8 @@ static void rt61pci_config_antenna_2x(struct rt2x00_dev *rt2x00dev,
530 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA_CONTROL, 1); 524 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA_CONTROL, 1);
531 rt2x00_set_field8(&r77, BBP_R77_RX_ANTENNA, 3); 525 rt2x00_set_field8(&r77, BBP_R77_RX_ANTENNA, 3);
532 break; 526 break;
533 case ANTENNA_SW_DIVERSITY:
534 /*
535 * NOTE: We should never come here because rt2x00lib is
536 * supposed to catch this and send us the correct antenna
537 * explicitely. However we are nog going to bug about this.
538 * Instead, just default to antenna B.
539 */
540 case ANTENNA_B: 527 case ANTENNA_B:
528 default:
541 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA_CONTROL, 1); 529 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA_CONTROL, 1);
542 rt2x00_set_field8(&r77, BBP_R77_RX_ANTENNA, 0); 530 rt2x00_set_field8(&r77, BBP_R77_RX_ANTENNA, 0);
543 break; 531 break;
@@ -575,10 +563,6 @@ static void rt61pci_config_antenna_2529(struct rt2x00_dev *rt2x00dev,
575 rt61pci_bbp_read(rt2x00dev, 4, &r4); 563 rt61pci_bbp_read(rt2x00dev, 4, &r4);
576 rt61pci_bbp_read(rt2x00dev, 77, &r77); 564 rt61pci_bbp_read(rt2x00dev, 77, &r77);
577 565
578 /* FIXME: Antenna selection for the rf 2529 is very confusing in the
579 * legacy driver. The code below should be ok for non-diversity setups.
580 */
581
582 /* 566 /*
583 * Configure the RX antenna. 567 * Configure the RX antenna.
584 */ 568 */
@@ -588,15 +572,14 @@ static void rt61pci_config_antenna_2529(struct rt2x00_dev *rt2x00dev,
588 rt2x00_set_field8(&r77, BBP_R77_RX_ANTENNA, 0); 572 rt2x00_set_field8(&r77, BBP_R77_RX_ANTENNA, 0);
589 rt61pci_config_antenna_2529_rx(rt2x00dev, 0, 0); 573 rt61pci_config_antenna_2529_rx(rt2x00dev, 0, 0);
590 break; 574 break;
591 case ANTENNA_SW_DIVERSITY:
592 case ANTENNA_HW_DIVERSITY: 575 case ANTENNA_HW_DIVERSITY:
593 /* 576 /*
594 * NOTE: We should never come here because rt2x00lib is 577 * FIXME: Antenna selection for the rf 2529 is very confusing
595 * supposed to catch this and send us the correct antenna 578 * in the legacy driver. Just default to antenna B until the
596 * explicitely. However we are nog going to bug about this. 579 * legacy code can be properly translated into rt2x00 code.
597 * Instead, just default to antenna B.
598 */ 580 */
599 case ANTENNA_B: 581 case ANTENNA_B:
582 default:
600 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA_CONTROL, 1); 583 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA_CONTROL, 1);
601 rt2x00_set_field8(&r77, BBP_R77_RX_ANTENNA, 3); 584 rt2x00_set_field8(&r77, BBP_R77_RX_ANTENNA, 3);
602 rt61pci_config_antenna_2529_rx(rt2x00dev, 1, 1); 585 rt61pci_config_antenna_2529_rx(rt2x00dev, 1, 1);
@@ -647,6 +630,13 @@ static void rt61pci_config_antenna(struct rt2x00_dev *rt2x00dev,
647 unsigned int i; 630 unsigned int i;
648 u32 reg; 631 u32 reg;
649 632
633 /*
634 * We should never come here because rt2x00lib is supposed
635 * to catch this and send us the correct antenna explicitely.
636 */
637 BUG_ON(ant->rx == ANTENNA_SW_DIVERSITY ||
638 ant->tx == ANTENNA_SW_DIVERSITY);
639
650 if (rt2x00dev->curr_band == IEEE80211_BAND_5GHZ) { 640 if (rt2x00dev->curr_band == IEEE80211_BAND_5GHZ) {
651 sel = antenna_sel_a; 641 sel = antenna_sel_a;
652 lna = test_bit(CONFIG_EXTERNAL_LNA_A, &rt2x00dev->flags); 642 lna = test_bit(CONFIG_EXTERNAL_LNA_A, &rt2x00dev->flags);
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
index 72c2827ee57c..d0e97e1dfaf6 100644
--- a/drivers/net/wireless/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/rt2x00/rt73usb.c
@@ -497,14 +497,8 @@ static void rt73usb_config_antenna_5x(struct rt2x00_dev *rt2x00dev,
497 else 497 else
498 rt2x00_set_field8(&r77, BBP_R77_RX_ANTENNA, 3); 498 rt2x00_set_field8(&r77, BBP_R77_RX_ANTENNA, 3);
499 break; 499 break;
500 case ANTENNA_SW_DIVERSITY:
501 /*
502 * NOTE: We should never come here because rt2x00lib is
503 * supposed to catch this and send us the correct antenna
504 * explicitely. However we are nog going to bug about this.
505 * Instead, just default to antenna B.
506 */
507 case ANTENNA_B: 500 case ANTENNA_B:
501 default:
508 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA_CONTROL, 1); 502 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA_CONTROL, 1);
509 rt2x00_set_field8(&r4, BBP_R4_RX_FRAME_END, 0); 503 rt2x00_set_field8(&r4, BBP_R4_RX_FRAME_END, 0);
510 if (rt2x00dev->curr_band == IEEE80211_BAND_5GHZ) 504 if (rt2x00dev->curr_band == IEEE80211_BAND_5GHZ)
@@ -545,14 +539,8 @@ static void rt73usb_config_antenna_2x(struct rt2x00_dev *rt2x00dev,
545 rt2x00_set_field8(&r77, BBP_R77_RX_ANTENNA, 3); 539 rt2x00_set_field8(&r77, BBP_R77_RX_ANTENNA, 3);
546 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA_CONTROL, 1); 540 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA_CONTROL, 1);
547 break; 541 break;
548 case ANTENNA_SW_DIVERSITY:
549 /*
550 * NOTE: We should never come here because rt2x00lib is
551 * supposed to catch this and send us the correct antenna
552 * explicitely. However we are nog going to bug about this.
553 * Instead, just default to antenna B.
554 */
555 case ANTENNA_B: 542 case ANTENNA_B:
543 default:
556 rt2x00_set_field8(&r77, BBP_R77_RX_ANTENNA, 0); 544 rt2x00_set_field8(&r77, BBP_R77_RX_ANTENNA, 0);
557 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA_CONTROL, 1); 545 rt2x00_set_field8(&r4, BBP_R4_RX_ANTENNA_CONTROL, 1);
558 break; 546 break;
@@ -602,6 +590,13 @@ static void rt73usb_config_antenna(struct rt2x00_dev *rt2x00dev,
602 unsigned int i; 590 unsigned int i;
603 u32 reg; 591 u32 reg;
604 592
593 /*
594 * We should never come here because rt2x00lib is supposed
595 * to catch this and send us the correct antenna explicitely.
596 */
597 BUG_ON(ant->rx == ANTENNA_SW_DIVERSITY ||
598 ant->tx == ANTENNA_SW_DIVERSITY);
599
605 if (rt2x00dev->curr_band == IEEE80211_BAND_5GHZ) { 600 if (rt2x00dev->curr_band == IEEE80211_BAND_5GHZ) {
606 sel = antenna_sel_a; 601 sel = antenna_sel_a;
607 lna = test_bit(CONFIG_EXTERNAL_LNA_A, &rt2x00dev->flags); 602 lna = test_bit(CONFIG_EXTERNAL_LNA_A, &rt2x00dev->flags);