aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00/rt2800pci.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2800pci.c')
-rw-r--r--drivers/net/wireless/rt2x00/rt2800pci.c33
1 files changed, 25 insertions, 8 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
index e5ea670a18db..6f11760117da 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -139,8 +139,18 @@ static void rt2800pci_read_eeprom_pci(struct rt2x00_dev *rt2x00dev)
139 eeprom.data = rt2x00dev; 139 eeprom.data = rt2x00dev;
140 eeprom.register_read = rt2800pci_eepromregister_read; 140 eeprom.register_read = rt2800pci_eepromregister_read;
141 eeprom.register_write = rt2800pci_eepromregister_write; 141 eeprom.register_write = rt2800pci_eepromregister_write;
142 eeprom.width = !rt2x00_get_field32(reg, E2PROM_CSR_TYPE) ? 142 switch (rt2x00_get_field32(reg, E2PROM_CSR_TYPE))
143 PCI_EEPROM_WIDTH_93C46 : PCI_EEPROM_WIDTH_93C66; 143 {
144 case 0:
145 eeprom.width = PCI_EEPROM_WIDTH_93C46;
146 break;
147 case 1:
148 eeprom.width = PCI_EEPROM_WIDTH_93C66;
149 break;
150 default:
151 eeprom.width = PCI_EEPROM_WIDTH_93C86;
152 break;
153 }
144 eeprom.reg_data_in = 0; 154 eeprom.reg_data_in = 0;
145 eeprom.reg_data_out = 0; 155 eeprom.reg_data_out = 0;
146 eeprom.reg_data_clock = 0; 156 eeprom.reg_data_clock = 0;
@@ -645,10 +655,12 @@ static int rt2800pci_set_device_state(struct rt2x00_dev *rt2x00dev,
645/* 655/*
646 * TX descriptor initialization 656 * TX descriptor initialization
647 */ 657 */
648static void rt2800pci_write_tx_datadesc(struct queue_entry* entry, 658static void rt2800pci_write_tx_data(struct queue_entry* entry,
649 struct txentry_desc *txdesc) 659 struct txentry_desc *txdesc)
650{ 660{
651 rt2800_write_txwi((__le32 *) entry->skb->data, txdesc); 661 __le32 *txwi = (__le32 *) entry->skb->data;
662
663 rt2800_write_txwi(txwi, txdesc);
652} 664}
653 665
654 666
@@ -905,7 +917,7 @@ static void rt2800pci_txdone(struct rt2x00_dev *rt2x00dev)
905 if (txdesc.retry) 917 if (txdesc.retry)
906 __set_bit(TXDONE_FALLBACK, &txdesc.flags); 918 __set_bit(TXDONE_FALLBACK, &txdesc.flags);
907 919
908 rt2x00pci_txdone(entry, &txdesc); 920 rt2x00lib_txdone(entry, &txdesc);
909 } 921 }
910} 922}
911 923
@@ -941,6 +953,12 @@ static irqreturn_t rt2800pci_interrupt(int irq, void *dev_instance)
941 if (rt2x00_get_field32(reg, INT_SOURCE_CSR_TX_FIFO_STATUS)) 953 if (rt2x00_get_field32(reg, INT_SOURCE_CSR_TX_FIFO_STATUS))
942 rt2800pci_txdone(rt2x00dev); 954 rt2800pci_txdone(rt2x00dev);
943 955
956 /*
957 * Current beacon was sent out, fetch the next one
958 */
959 if (rt2x00_get_field32(reg, INT_SOURCE_CSR_TBTT))
960 rt2x00lib_beacondone(rt2x00dev);
961
944 if (rt2x00_get_field32(reg, INT_SOURCE_CSR_AUTO_WAKEUP)) 962 if (rt2x00_get_field32(reg, INT_SOURCE_CSR_AUTO_WAKEUP))
945 rt2800pci_wakeup(rt2x00dev); 963 rt2800pci_wakeup(rt2x00dev);
946 964
@@ -1044,8 +1062,7 @@ static const struct rt2x00lib_ops rt2800pci_rt2x00_ops = {
1044 .reset_tuner = rt2800_reset_tuner, 1062 .reset_tuner = rt2800_reset_tuner,
1045 .link_tuner = rt2800_link_tuner, 1063 .link_tuner = rt2800_link_tuner,
1046 .write_tx_desc = rt2800pci_write_tx_desc, 1064 .write_tx_desc = rt2800pci_write_tx_desc,
1047 .write_tx_data = rt2x00pci_write_tx_data, 1065 .write_tx_data = rt2800pci_write_tx_data,
1048 .write_tx_datadesc = rt2800pci_write_tx_datadesc,
1049 .write_beacon = rt2800_write_beacon, 1066 .write_beacon = rt2800_write_beacon,
1050 .kick_tx_queue = rt2800pci_kick_tx_queue, 1067 .kick_tx_queue = rt2800pci_kick_tx_queue,
1051 .kill_tx_queue = rt2800pci_kill_tx_queue, 1068 .kill_tx_queue = rt2800pci_kill_tx_queue,