diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2800pci.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2800pci.c | 33 |
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 | */ |
648 | static void rt2800pci_write_tx_datadesc(struct queue_entry* entry, | 658 | static 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, |