diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt61pci.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt61pci.c | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c index 3f272793412a..abfe33b5712a 100644 --- a/drivers/net/wireless/rt2x00/rt61pci.c +++ b/drivers/net/wireless/rt2x00/rt61pci.c | |||
@@ -1261,33 +1261,44 @@ static int rt61pci_load_firmware(struct rt2x00_dev *rt2x00dev, const void *data, | |||
1261 | /* | 1261 | /* |
1262 | * Initialization functions. | 1262 | * Initialization functions. |
1263 | */ | 1263 | */ |
1264 | static void rt61pci_init_rxentry(struct rt2x00_dev *rt2x00dev, | 1264 | static bool rt61pci_get_entry_state(struct queue_entry *entry) |
1265 | struct queue_entry *entry) | ||
1266 | { | 1265 | { |
1267 | struct queue_entry_priv_pci *entry_priv = entry->priv_data; | 1266 | struct queue_entry_priv_pci *entry_priv = entry->priv_data; |
1268 | struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb); | ||
1269 | u32 word; | 1267 | u32 word; |
1270 | 1268 | ||
1271 | rt2x00_desc_read(entry_priv->desc, 5, &word); | 1269 | if (entry->queue->qid == QID_RX) { |
1272 | rt2x00_set_field32(&word, RXD_W5_BUFFER_PHYSICAL_ADDRESS, | 1270 | rt2x00_desc_read(entry_priv->desc, 0, &word); |
1273 | skbdesc->skb_dma); | ||
1274 | rt2x00_desc_write(entry_priv->desc, 5, word); | ||
1275 | 1271 | ||
1276 | rt2x00_desc_read(entry_priv->desc, 0, &word); | 1272 | return rt2x00_get_field32(word, RXD_W0_OWNER_NIC); |
1277 | rt2x00_set_field32(&word, RXD_W0_OWNER_NIC, 1); | 1273 | } else { |
1278 | rt2x00_desc_write(entry_priv->desc, 0, word); | 1274 | rt2x00_desc_read(entry_priv->desc, 0, &word); |
1275 | |||
1276 | return (rt2x00_get_field32(word, TXD_W0_OWNER_NIC) || | ||
1277 | rt2x00_get_field32(word, TXD_W0_VALID)); | ||
1278 | } | ||
1279 | } | 1279 | } |
1280 | 1280 | ||
1281 | static void rt61pci_init_txentry(struct rt2x00_dev *rt2x00dev, | 1281 | static void rt61pci_clear_entry(struct queue_entry *entry) |
1282 | struct queue_entry *entry) | ||
1283 | { | 1282 | { |
1284 | struct queue_entry_priv_pci *entry_priv = entry->priv_data; | 1283 | struct queue_entry_priv_pci *entry_priv = entry->priv_data; |
1284 | struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb); | ||
1285 | u32 word; | 1285 | u32 word; |
1286 | 1286 | ||
1287 | rt2x00_desc_read(entry_priv->desc, 0, &word); | 1287 | if (entry->queue->qid == QID_RX) { |
1288 | rt2x00_set_field32(&word, TXD_W0_VALID, 0); | 1288 | rt2x00_desc_read(entry_priv->desc, 5, &word); |
1289 | rt2x00_set_field32(&word, TXD_W0_OWNER_NIC, 0); | 1289 | rt2x00_set_field32(&word, RXD_W5_BUFFER_PHYSICAL_ADDRESS, |
1290 | rt2x00_desc_write(entry_priv->desc, 0, word); | 1290 | skbdesc->skb_dma); |
1291 | rt2x00_desc_write(entry_priv->desc, 5, word); | ||
1292 | |||
1293 | rt2x00_desc_read(entry_priv->desc, 0, &word); | ||
1294 | rt2x00_set_field32(&word, RXD_W0_OWNER_NIC, 1); | ||
1295 | rt2x00_desc_write(entry_priv->desc, 0, word); | ||
1296 | } else { | ||
1297 | rt2x00_desc_read(entry_priv->desc, 0, &word); | ||
1298 | rt2x00_set_field32(&word, TXD_W0_VALID, 0); | ||
1299 | rt2x00_set_field32(&word, TXD_W0_OWNER_NIC, 0); | ||
1300 | rt2x00_desc_write(entry_priv->desc, 0, word); | ||
1301 | } | ||
1291 | } | 1302 | } |
1292 | 1303 | ||
1293 | static int rt61pci_init_queues(struct rt2x00_dev *rt2x00dev) | 1304 | static int rt61pci_init_queues(struct rt2x00_dev *rt2x00dev) |
@@ -2722,8 +2733,8 @@ static const struct rt2x00lib_ops rt61pci_rt2x00_ops = { | |||
2722 | .load_firmware = rt61pci_load_firmware, | 2733 | .load_firmware = rt61pci_load_firmware, |
2723 | .initialize = rt2x00pci_initialize, | 2734 | .initialize = rt2x00pci_initialize, |
2724 | .uninitialize = rt2x00pci_uninitialize, | 2735 | .uninitialize = rt2x00pci_uninitialize, |
2725 | .init_rxentry = rt61pci_init_rxentry, | 2736 | .get_entry_state = rt61pci_get_entry_state, |
2726 | .init_txentry = rt61pci_init_txentry, | 2737 | .clear_entry = rt61pci_clear_entry, |
2727 | .set_device_state = rt61pci_set_device_state, | 2738 | .set_device_state = rt61pci_set_device_state, |
2728 | .rfkill_poll = rt61pci_rfkill_poll, | 2739 | .rfkill_poll = rt61pci_rfkill_poll, |
2729 | .link_stats = rt61pci_link_stats, | 2740 | .link_stats = rt61pci_link_stats, |