diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2800pci.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2800pci.c | 55 |
1 files changed, 12 insertions, 43 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c index dfc886fcb44d..daea0b7c416e 100644 --- a/drivers/net/wireless/rt2x00/rt2800pci.c +++ b/drivers/net/wireless/rt2x00/rt2800pci.c | |||
@@ -48,14 +48,6 @@ | |||
48 | #include "rt2800.h" | 48 | #include "rt2800.h" |
49 | #include "rt2800pci.h" | 49 | #include "rt2800pci.h" |
50 | 50 | ||
51 | #ifdef CONFIG_RT2800PCI_PCI_MODULE | ||
52 | #define CONFIG_RT2800PCI_PCI | ||
53 | #endif | ||
54 | |||
55 | #ifdef CONFIG_RT2800PCI_WISOC_MODULE | ||
56 | #define CONFIG_RT2800PCI_WISOC | ||
57 | #endif | ||
58 | |||
59 | /* | 51 | /* |
60 | * Allow hardware encryption to be disabled. | 52 | * Allow hardware encryption to be disabled. |
61 | */ | 53 | */ |
@@ -87,7 +79,7 @@ static void rt2800pci_mcu_status(struct rt2x00_dev *rt2x00dev, const u8 token) | |||
87 | rt2800_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0); | 79 | rt2800_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0); |
88 | } | 80 | } |
89 | 81 | ||
90 | #ifdef CONFIG_RT2800PCI_WISOC | 82 | #ifdef CONFIG_RT2800PCI_SOC |
91 | static void rt2800pci_read_eeprom_soc(struct rt2x00_dev *rt2x00dev) | 83 | static void rt2800pci_read_eeprom_soc(struct rt2x00_dev *rt2x00dev) |
92 | { | 84 | { |
93 | u32 *base_addr = (u32 *) KSEG1ADDR(0x1F040000); /* XXX for RT3052 */ | 85 | u32 *base_addr = (u32 *) KSEG1ADDR(0x1F040000); /* XXX for RT3052 */ |
@@ -98,7 +90,7 @@ static void rt2800pci_read_eeprom_soc(struct rt2x00_dev *rt2x00dev) | |||
98 | static inline void rt2800pci_read_eeprom_soc(struct rt2x00_dev *rt2x00dev) | 90 | static inline void rt2800pci_read_eeprom_soc(struct rt2x00_dev *rt2x00dev) |
99 | { | 91 | { |
100 | } | 92 | } |
101 | #endif /* CONFIG_RT2800PCI_WISOC */ | 93 | #endif /* CONFIG_RT2800PCI_SOC */ |
102 | 94 | ||
103 | #ifdef CONFIG_RT2800PCI_PCI | 95 | #ifdef CONFIG_RT2800PCI_PCI |
104 | static void rt2800pci_eepromregister_read(struct eeprom_93cx6 *eeprom) | 96 | static void rt2800pci_eepromregister_read(struct eeprom_93cx6 *eeprom) |
@@ -461,24 +453,6 @@ static void rt2800pci_toggle_irq(struct rt2x00_dev *rt2x00dev, | |||
461 | rt2800_register_write(rt2x00dev, INT_MASK_CSR, reg); | 453 | rt2800_register_write(rt2x00dev, INT_MASK_CSR, reg); |
462 | } | 454 | } |
463 | 455 | ||
464 | static int rt2800pci_wait_wpdma_ready(struct rt2x00_dev *rt2x00dev) | ||
465 | { | ||
466 | unsigned int i; | ||
467 | u32 reg; | ||
468 | |||
469 | for (i = 0; i < REGISTER_BUSY_COUNT; i++) { | ||
470 | rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, ®); | ||
471 | if (!rt2x00_get_field32(reg, WPDMA_GLO_CFG_TX_DMA_BUSY) && | ||
472 | !rt2x00_get_field32(reg, WPDMA_GLO_CFG_RX_DMA_BUSY)) | ||
473 | return 0; | ||
474 | |||
475 | msleep(1); | ||
476 | } | ||
477 | |||
478 | ERROR(rt2x00dev, "WPDMA TX/RX busy, aborting.\n"); | ||
479 | return -EACCES; | ||
480 | } | ||
481 | |||
482 | static int rt2800pci_enable_radio(struct rt2x00_dev *rt2x00dev) | 456 | static int rt2800pci_enable_radio(struct rt2x00_dev *rt2x00dev) |
483 | { | 457 | { |
484 | u32 reg; | 458 | u32 reg; |
@@ -487,10 +461,10 @@ static int rt2800pci_enable_radio(struct rt2x00_dev *rt2x00dev) | |||
487 | /* | 461 | /* |
488 | * Initialize all registers. | 462 | * Initialize all registers. |
489 | */ | 463 | */ |
490 | if (unlikely(rt2800pci_wait_wpdma_ready(rt2x00dev) || | 464 | if (unlikely(rt2800_wait_wpdma_ready(rt2x00dev) || |
491 | rt2800pci_init_queues(rt2x00dev) || | 465 | rt2800pci_init_queues(rt2x00dev) || |
492 | rt2800_init_registers(rt2x00dev) || | 466 | rt2800_init_registers(rt2x00dev) || |
493 | rt2800pci_wait_wpdma_ready(rt2x00dev) || | 467 | rt2800_wait_wpdma_ready(rt2x00dev) || |
494 | rt2800_init_bbp(rt2x00dev) || | 468 | rt2800_init_bbp(rt2x00dev) || |
495 | rt2800_init_rfcsr(rt2x00dev))) | 469 | rt2800_init_rfcsr(rt2x00dev))) |
496 | return -EIO; | 470 | return -EIO; |
@@ -570,7 +544,7 @@ static void rt2800pci_disable_radio(struct rt2x00_dev *rt2x00dev) | |||
570 | rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e00); | 544 | rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e00); |
571 | 545 | ||
572 | /* Wait for DMA, ignore error */ | 546 | /* Wait for DMA, ignore error */ |
573 | rt2800pci_wait_wpdma_ready(rt2x00dev); | 547 | rt2800_wait_wpdma_ready(rt2x00dev); |
574 | } | 548 | } |
575 | 549 | ||
576 | static int rt2800pci_set_state(struct rt2x00_dev *rt2x00dev, | 550 | static int rt2800pci_set_state(struct rt2x00_dev *rt2x00dev, |
@@ -835,7 +809,6 @@ static void rt2800pci_fill_rxdone(struct queue_entry *entry, | |||
835 | struct rxdone_entry_desc *rxdesc) | 809 | struct rxdone_entry_desc *rxdesc) |
836 | { | 810 | { |
837 | struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; | 811 | struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; |
838 | struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb); | ||
839 | struct queue_entry_priv_pci *entry_priv = entry->priv_data; | 812 | struct queue_entry_priv_pci *entry_priv = entry->priv_data; |
840 | __le32 *rxd = entry_priv->desc; | 813 | __le32 *rxd = entry_priv->desc; |
841 | __le32 *rxwi = (__le32 *)entry->skb->data; | 814 | __le32 *rxwi = (__le32 *)entry->skb->data; |
@@ -883,10 +856,8 @@ static void rt2800pci_fill_rxdone(struct queue_entry *entry, | |||
883 | if (rt2x00_get_field32(rxd3, RXD_W3_MY_BSS)) | 856 | if (rt2x00_get_field32(rxd3, RXD_W3_MY_BSS)) |
884 | rxdesc->dev_flags |= RXDONE_MY_BSS; | 857 | rxdesc->dev_flags |= RXDONE_MY_BSS; |
885 | 858 | ||
886 | if (rt2x00_get_field32(rxd3, RXD_W3_L2PAD)) { | 859 | if (rt2x00_get_field32(rxd3, RXD_W3_L2PAD)) |
887 | rxdesc->dev_flags |= RXDONE_L2PAD; | 860 | rxdesc->dev_flags |= RXDONE_L2PAD; |
888 | skbdesc->flags |= SKBDESC_L2_PADDED; | ||
889 | } | ||
890 | 861 | ||
891 | if (rt2x00_get_field32(rxwi1, RXWI_W1_SHORT_GI)) | 862 | if (rt2x00_get_field32(rxwi1, RXWI_W1_SHORT_GI)) |
892 | rxdesc->flags |= RX_FLAG_SHORT_GI; | 863 | rxdesc->flags |= RX_FLAG_SHORT_GI; |
@@ -927,7 +898,6 @@ static void rt2800pci_fill_rxdone(struct queue_entry *entry, | |||
927 | * Remove TXWI descriptor from start of buffer. | 898 | * Remove TXWI descriptor from start of buffer. |
928 | */ | 899 | */ |
929 | skb_pull(entry->skb, RXWI_DESC_SIZE); | 900 | skb_pull(entry->skb, RXWI_DESC_SIZE); |
930 | skb_trim(entry->skb, rxdesc->size); | ||
931 | } | 901 | } |
932 | 902 | ||
933 | /* | 903 | /* |
@@ -1133,8 +1103,7 @@ static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev) | |||
1133 | /* | 1103 | /* |
1134 | * This device requires firmware. | 1104 | * This device requires firmware. |
1135 | */ | 1105 | */ |
1136 | if (!rt2x00_rt(&rt2x00dev->chip, RT2880) && | 1106 | if (!rt2x00_rt(rt2x00dev, RT2880) && !rt2x00_rt(rt2x00dev, RT3052)) |
1137 | !rt2x00_rt(&rt2x00dev->chip, RT3052)) | ||
1138 | __set_bit(DRIVER_REQUIRE_FIRMWARE, &rt2x00dev->flags); | 1107 | __set_bit(DRIVER_REQUIRE_FIRMWARE, &rt2x00dev->flags); |
1139 | __set_bit(DRIVER_REQUIRE_DMA, &rt2x00dev->flags); | 1108 | __set_bit(DRIVER_REQUIRE_DMA, &rt2x00dev->flags); |
1140 | __set_bit(DRIVER_REQUIRE_L2PAD, &rt2x00dev->flags); | 1109 | __set_bit(DRIVER_REQUIRE_L2PAD, &rt2x00dev->flags); |
@@ -1255,7 +1224,7 @@ MODULE_DEVICE_TABLE(pci, rt2800pci_device_table); | |||
1255 | #endif /* CONFIG_RT2800PCI_PCI */ | 1224 | #endif /* CONFIG_RT2800PCI_PCI */ |
1256 | MODULE_LICENSE("GPL"); | 1225 | MODULE_LICENSE("GPL"); |
1257 | 1226 | ||
1258 | #ifdef CONFIG_RT2800PCI_WISOC | 1227 | #ifdef CONFIG_RT2800PCI_SOC |
1259 | #if defined(CONFIG_RALINK_RT288X) | 1228 | #if defined(CONFIG_RALINK_RT288X) |
1260 | __rt2x00soc_probe(RT2880, &rt2800pci_ops); | 1229 | __rt2x00soc_probe(RT2880, &rt2800pci_ops); |
1261 | #elif defined(CONFIG_RALINK_RT305X) | 1230 | #elif defined(CONFIG_RALINK_RT305X) |
@@ -1273,7 +1242,7 @@ static struct platform_driver rt2800soc_driver = { | |||
1273 | .suspend = rt2x00soc_suspend, | 1242 | .suspend = rt2x00soc_suspend, |
1274 | .resume = rt2x00soc_resume, | 1243 | .resume = rt2x00soc_resume, |
1275 | }; | 1244 | }; |
1276 | #endif /* CONFIG_RT2800PCI_WISOC */ | 1245 | #endif /* CONFIG_RT2800PCI_SOC */ |
1277 | 1246 | ||
1278 | #ifdef CONFIG_RT2800PCI_PCI | 1247 | #ifdef CONFIG_RT2800PCI_PCI |
1279 | static struct pci_driver rt2800pci_driver = { | 1248 | static struct pci_driver rt2800pci_driver = { |
@@ -1290,7 +1259,7 @@ static int __init rt2800pci_init(void) | |||
1290 | { | 1259 | { |
1291 | int ret = 0; | 1260 | int ret = 0; |
1292 | 1261 | ||
1293 | #ifdef CONFIG_RT2800PCI_WISOC | 1262 | #ifdef CONFIG_RT2800PCI_SOC |
1294 | ret = platform_driver_register(&rt2800soc_driver); | 1263 | ret = platform_driver_register(&rt2800soc_driver); |
1295 | if (ret) | 1264 | if (ret) |
1296 | return ret; | 1265 | return ret; |
@@ -1298,7 +1267,7 @@ static int __init rt2800pci_init(void) | |||
1298 | #ifdef CONFIG_RT2800PCI_PCI | 1267 | #ifdef CONFIG_RT2800PCI_PCI |
1299 | ret = pci_register_driver(&rt2800pci_driver); | 1268 | ret = pci_register_driver(&rt2800pci_driver); |
1300 | if (ret) { | 1269 | if (ret) { |
1301 | #ifdef CONFIG_RT2800PCI_WISOC | 1270 | #ifdef CONFIG_RT2800PCI_SOC |
1302 | platform_driver_unregister(&rt2800soc_driver); | 1271 | platform_driver_unregister(&rt2800soc_driver); |
1303 | #endif | 1272 | #endif |
1304 | return ret; | 1273 | return ret; |
@@ -1313,7 +1282,7 @@ static void __exit rt2800pci_exit(void) | |||
1313 | #ifdef CONFIG_RT2800PCI_PCI | 1282 | #ifdef CONFIG_RT2800PCI_PCI |
1314 | pci_unregister_driver(&rt2800pci_driver); | 1283 | pci_unregister_driver(&rt2800pci_driver); |
1315 | #endif | 1284 | #endif |
1316 | #ifdef CONFIG_RT2800PCI_WISOC | 1285 | #ifdef CONFIG_RT2800PCI_SOC |
1317 | platform_driver_unregister(&rt2800soc_driver); | 1286 | platform_driver_unregister(&rt2800soc_driver); |
1318 | #endif | 1287 | #endif |
1319 | } | 1288 | } |