diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt61pci.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt61pci.c | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c index 3a775992919..97b3935f615 100644 --- a/drivers/net/wireless/rt2x00/rt61pci.c +++ b/drivers/net/wireless/rt2x00/rt61pci.c | |||
@@ -594,7 +594,8 @@ static void rt61pci_config_intf(struct rt2x00_dev *rt2x00dev, | |||
594 | } | 594 | } |
595 | 595 | ||
596 | static void rt61pci_config_erp(struct rt2x00_dev *rt2x00dev, | 596 | static void rt61pci_config_erp(struct rt2x00_dev *rt2x00dev, |
597 | struct rt2x00lib_erp *erp) | 597 | struct rt2x00lib_erp *erp, |
598 | u32 changed) | ||
598 | { | 599 | { |
599 | u32 reg; | 600 | u32 reg; |
600 | 601 | ||
@@ -603,28 +604,36 @@ static void rt61pci_config_erp(struct rt2x00_dev *rt2x00dev, | |||
603 | rt2x00_set_field32(®, TXRX_CSR0_TSF_OFFSET, IEEE80211_HEADER); | 604 | rt2x00_set_field32(®, TXRX_CSR0_TSF_OFFSET, IEEE80211_HEADER); |
604 | rt2x00pci_register_write(rt2x00dev, TXRX_CSR0, reg); | 605 | rt2x00pci_register_write(rt2x00dev, TXRX_CSR0, reg); |
605 | 606 | ||
606 | rt2x00pci_register_read(rt2x00dev, TXRX_CSR4, ®); | 607 | if (changed & BSS_CHANGED_ERP_PREAMBLE) { |
607 | rt2x00_set_field32(®, TXRX_CSR4_AUTORESPOND_ENABLE, 1); | 608 | rt2x00pci_register_read(rt2x00dev, TXRX_CSR4, ®); |
608 | rt2x00_set_field32(®, TXRX_CSR4_AUTORESPOND_PREAMBLE, | 609 | rt2x00_set_field32(®, TXRX_CSR4_AUTORESPOND_ENABLE, 1); |
609 | !!erp->short_preamble); | 610 | rt2x00_set_field32(®, TXRX_CSR4_AUTORESPOND_PREAMBLE, |
610 | rt2x00pci_register_write(rt2x00dev, TXRX_CSR4, reg); | 611 | !!erp->short_preamble); |
612 | rt2x00pci_register_write(rt2x00dev, TXRX_CSR4, reg); | ||
613 | } | ||
611 | 614 | ||
612 | rt2x00pci_register_write(rt2x00dev, TXRX_CSR5, erp->basic_rates); | 615 | if (changed & BSS_CHANGED_BASIC_RATES) |
616 | rt2x00pci_register_write(rt2x00dev, TXRX_CSR5, | ||
617 | erp->basic_rates); | ||
613 | 618 | ||
614 | rt2x00pci_register_read(rt2x00dev, TXRX_CSR9, ®); | 619 | if (changed & BSS_CHANGED_BEACON_INT) { |
615 | rt2x00_set_field32(®, TXRX_CSR9_BEACON_INTERVAL, | 620 | rt2x00pci_register_read(rt2x00dev, TXRX_CSR9, ®); |
616 | erp->beacon_int * 16); | 621 | rt2x00_set_field32(®, TXRX_CSR9_BEACON_INTERVAL, |
617 | rt2x00pci_register_write(rt2x00dev, TXRX_CSR9, reg); | 622 | erp->beacon_int * 16); |
623 | rt2x00pci_register_write(rt2x00dev, TXRX_CSR9, reg); | ||
624 | } | ||
618 | 625 | ||
619 | rt2x00pci_register_read(rt2x00dev, MAC_CSR9, ®); | 626 | if (changed & BSS_CHANGED_ERP_SLOT) { |
620 | rt2x00_set_field32(®, MAC_CSR9_SLOT_TIME, erp->slot_time); | 627 | rt2x00pci_register_read(rt2x00dev, MAC_CSR9, ®); |
621 | rt2x00pci_register_write(rt2x00dev, MAC_CSR9, reg); | 628 | rt2x00_set_field32(®, MAC_CSR9_SLOT_TIME, erp->slot_time); |
629 | rt2x00pci_register_write(rt2x00dev, MAC_CSR9, reg); | ||
622 | 630 | ||
623 | rt2x00pci_register_read(rt2x00dev, MAC_CSR8, ®); | 631 | rt2x00pci_register_read(rt2x00dev, MAC_CSR8, ®); |
624 | rt2x00_set_field32(®, MAC_CSR8_SIFS, erp->sifs); | 632 | rt2x00_set_field32(®, MAC_CSR8_SIFS, erp->sifs); |
625 | rt2x00_set_field32(®, MAC_CSR8_SIFS_AFTER_RX_OFDM, 3); | 633 | rt2x00_set_field32(®, MAC_CSR8_SIFS_AFTER_RX_OFDM, 3); |
626 | rt2x00_set_field32(®, MAC_CSR8_EIFS, erp->eifs); | 634 | rt2x00_set_field32(®, MAC_CSR8_EIFS, erp->eifs); |
627 | rt2x00pci_register_write(rt2x00dev, MAC_CSR8, reg); | 635 | rt2x00pci_register_write(rt2x00dev, MAC_CSR8, reg); |
636 | } | ||
628 | } | 637 | } |
629 | 638 | ||
630 | static void rt61pci_config_antenna_5x(struct rt2x00_dev *rt2x00dev, | 639 | static void rt61pci_config_antenna_5x(struct rt2x00_dev *rt2x00dev, |
@@ -1645,6 +1654,7 @@ static void rt61pci_toggle_irq(struct rt2x00_dev *rt2x00dev, | |||
1645 | rt2x00pci_register_read(rt2x00dev, INT_MASK_CSR, ®); | 1654 | rt2x00pci_register_read(rt2x00dev, INT_MASK_CSR, ®); |
1646 | rt2x00_set_field32(®, INT_MASK_CSR_TXDONE, mask); | 1655 | rt2x00_set_field32(®, INT_MASK_CSR_TXDONE, mask); |
1647 | rt2x00_set_field32(®, INT_MASK_CSR_RXDONE, mask); | 1656 | rt2x00_set_field32(®, INT_MASK_CSR_RXDONE, mask); |
1657 | rt2x00_set_field32(®, INT_MASK_CSR_BEACON_DONE, mask); | ||
1648 | rt2x00_set_field32(®, INT_MASK_CSR_ENABLE_MITIGATION, mask); | 1658 | rt2x00_set_field32(®, INT_MASK_CSR_ENABLE_MITIGATION, mask); |
1649 | rt2x00_set_field32(®, INT_MASK_CSR_MITIGATION_PERIOD, 0xff); | 1659 | rt2x00_set_field32(®, INT_MASK_CSR_MITIGATION_PERIOD, 0xff); |
1650 | rt2x00pci_register_write(rt2x00dev, INT_MASK_CSR, reg); | 1660 | rt2x00pci_register_write(rt2x00dev, INT_MASK_CSR, reg); |
@@ -1658,6 +1668,7 @@ static void rt61pci_toggle_irq(struct rt2x00_dev *rt2x00dev, | |||
1658 | rt2x00_set_field32(®, MCU_INT_MASK_CSR_5, mask); | 1668 | rt2x00_set_field32(®, MCU_INT_MASK_CSR_5, mask); |
1659 | rt2x00_set_field32(®, MCU_INT_MASK_CSR_6, mask); | 1669 | rt2x00_set_field32(®, MCU_INT_MASK_CSR_6, mask); |
1660 | rt2x00_set_field32(®, MCU_INT_MASK_CSR_7, mask); | 1670 | rt2x00_set_field32(®, MCU_INT_MASK_CSR_7, mask); |
1671 | rt2x00_set_field32(®, MCU_INT_MASK_CSR_TWAKEUP, mask); | ||
1661 | rt2x00pci_register_write(rt2x00dev, MCU_INT_MASK_CSR, reg); | 1672 | rt2x00pci_register_write(rt2x00dev, MCU_INT_MASK_CSR, reg); |
1662 | } | 1673 | } |
1663 | 1674 | ||
@@ -2106,7 +2117,7 @@ static void rt61pci_txdone(struct rt2x00_dev *rt2x00dev) | |||
2106 | "TX status report missed for entry %d\n", | 2117 | "TX status report missed for entry %d\n", |
2107 | entry_done->entry_idx); | 2118 | entry_done->entry_idx); |
2108 | 2119 | ||
2109 | rt2x00lib_txdone_noinfo(entry, TXDONE_UNKNOWN); | 2120 | rt2x00lib_txdone_noinfo(entry_done, TXDONE_UNKNOWN); |
2110 | entry_done = rt2x00queue_get_entry(queue, Q_INDEX_DONE); | 2121 | entry_done = rt2x00queue_get_entry(queue, Q_INDEX_DONE); |
2111 | } | 2122 | } |
2112 | 2123 | ||