37 #include <linux/kernel.h>
38 #include <linux/module.h>
39 #include <linux/pci.h>
53 static bool modparam_nohwcrypt =
false;
57 static bool rt2800pci_hwcrypt_disabled(
struct rt2x00_dev *rt2x00dev)
59 return modparam_nohwcrypt;
70 if (rt2x00_is_soc(rt2x00dev))
73 for (i = 0; i < 200; i++) {
86 ERROR(rt2x00dev,
"MCU request failed, no response from hardware\n");
92 #if defined(CONFIG_RALINK_RT288X) || defined(CONFIG_RALINK_RT305X)
93 static void rt2800pci_read_eeprom_soc(
struct rt2x00_dev *rt2x00dev)
102 static inline void rt2800pci_read_eeprom_soc(
struct rt2x00_dev *rt2x00dev)
113 rt2x00pci_register_read(rt2x00dev,
E2PROM_CSR, ®);
135 rt2x00pci_register_write(rt2x00dev,
E2PROM_CSR, reg);
138 static void rt2800pci_read_eeprom_pci(
struct rt2x00_dev *rt2x00dev)
143 rt2x00pci_register_read(rt2x00dev,
E2PROM_CSR, ®);
146 eeprom.register_read = rt2800pci_eepromregister_read;
147 eeprom.register_write = rt2800pci_eepromregister_write;
162 eeprom.reg_data_clock = 0;
163 eeprom.reg_chip_select = 0;
169 static int rt2800pci_efuse_detect(
struct rt2x00_dev *rt2x00dev)
174 static inline void rt2800pci_read_eeprom_efuse(
struct rt2x00_dev *rt2x00dev)
179 static inline void rt2800pci_read_eeprom_pci(
struct rt2x00_dev *rt2x00dev)
183 static inline int rt2800pci_efuse_detect(
struct rt2x00_dev *rt2x00dev)
188 static inline void rt2800pci_read_eeprom_efuse(
struct rt2x00_dev *rt2x00dev)
201 switch (queue->
qid) {
223 static void rt2800pci_kick_queue(
struct data_queue *queue)
226 struct queue_entry *
entry;
228 switch (queue->
qid) {
239 rt2x00pci_register_write(rt2x00dev,
TX_CTX_IDX(5),
247 static void rt2800pci_stop_queue(
struct data_queue *queue)
252 switch (queue->
qid) {
286 static char *rt2800pci_get_firmware_name(
struct rt2x00_dev *rt2x00dev)
291 if (rt2x00_rt(rt2x00dev,
RT3290))
297 static int rt2800pci_write_firmware(
struct rt2x00_dev *rt2x00dev,
298 const u8 *
data,
const size_t len)
315 rt2x00pci_register_write(rt2x00dev,
PBF_SYS_CTRL, 0x00000);
316 rt2x00pci_register_write(rt2x00dev,
PBF_SYS_CTRL, 0x00001);
327 static bool rt2800pci_get_entry_state(
struct queue_entry *entry)
332 if (entry->queue->qid ==
QID_RX) {
333 rt2x00_desc_read(entry_priv->
desc, 1, &word);
337 rt2x00_desc_read(entry_priv->
desc, 1, &word);
343 static void rt2800pci_clear_entry(
struct queue_entry *entry)
347 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
350 if (entry->queue->qid ==
QID_RX) {
351 rt2x00_desc_read(entry_priv->
desc, 0, &word);
353 rt2x00_desc_write(entry_priv->
desc, 0, word);
355 rt2x00_desc_read(entry_priv->
desc, 1, &word);
357 rt2x00_desc_write(entry_priv->
desc, 1, word);
363 rt2x00pci_register_write(rt2x00dev,
RX_CRX_IDX,
366 rt2x00_desc_read(entry_priv->
desc, 1, &word);
368 rt2x00_desc_write(entry_priv->
desc, 1, word);
372 static int rt2800pci_init_queues(
struct rt2x00_dev *rt2x00dev)
379 entry_priv = rt2x00dev->
tx[0].entries[0].priv_data;
382 rt2x00dev->
tx[0].limit);
383 rt2x00pci_register_write(rt2x00dev,
TX_CTX_IDX0, 0);
384 rt2x00pci_register_write(rt2x00dev,
TX_DTX_IDX0, 0);
386 entry_priv = rt2x00dev->
tx[1].entries[0].priv_data;
389 rt2x00dev->
tx[1].limit);
390 rt2x00pci_register_write(rt2x00dev,
TX_CTX_IDX1, 0);
391 rt2x00pci_register_write(rt2x00dev,
TX_DTX_IDX1, 0);
393 entry_priv = rt2x00dev->
tx[2].entries[0].priv_data;
396 rt2x00dev->
tx[2].limit);
397 rt2x00pci_register_write(rt2x00dev,
TX_CTX_IDX2, 0);
398 rt2x00pci_register_write(rt2x00dev,
TX_DTX_IDX2, 0);
400 entry_priv = rt2x00dev->
tx[3].entries[0].priv_data;
403 rt2x00dev->
tx[3].limit);
404 rt2x00pci_register_write(rt2x00dev,
TX_CTX_IDX3, 0);
405 rt2x00pci_register_write(rt2x00dev,
TX_DTX_IDX3, 0);
408 rt2x00pci_register_write(rt2x00dev,
TX_MAX_CNT4, 0);
409 rt2x00pci_register_write(rt2x00dev,
TX_CTX_IDX4, 0);
410 rt2x00pci_register_write(rt2x00dev,
TX_DTX_IDX4, 0);
413 rt2x00pci_register_write(rt2x00dev,
TX_MAX_CNT5, 0);
414 rt2x00pci_register_write(rt2x00dev,
TX_CTX_IDX5, 0);
415 rt2x00pci_register_write(rt2x00dev,
TX_DTX_IDX5, 0);
417 entry_priv = rt2x00dev->
rx->entries[0].priv_data;
419 rt2x00pci_register_write(rt2x00dev,
RX_MAX_CNT,
420 rt2x00dev->
rx[0].limit);
421 rt2x00pci_register_write(rt2x00dev,
RX_CRX_IDX,
422 rt2x00dev->
rx[0].limit - 1);
423 rt2x00pci_register_write(rt2x00dev,
RX_DRX_IDX, 0);
435 static void rt2800pci_toggle_irq(
struct rt2x00_dev *rt2x00dev,
460 spin_unlock_irqrestore(&rt2x00dev->
irqmask_lock, flags);
474 static int rt2800pci_init_registers(
struct rt2x00_dev *rt2x00dev)
491 rt2x00pci_register_write(rt2x00dev,
PBF_SYS_CTRL, 0x00000e1f);
492 rt2x00pci_register_write(rt2x00dev,
PBF_SYS_CTRL, 0x00000e00);
494 if (rt2x00_is_pcie(rt2x00dev) &&
495 (rt2x00_rt(rt2x00dev,
RT3572) ||
496 rt2x00_rt(rt2x00dev,
RT5390) ||
497 rt2x00_rt(rt2x00dev,
RT5392))) {
498 rt2x00pci_register_read(rt2x00dev,
AUX_CTRL, ®);
501 rt2x00pci_register_write(rt2x00dev,
AUX_CTRL, reg);
504 rt2x00pci_register_write(rt2x00dev,
PWR_PIN_CFG, 0x00000003);
511 rt2x00pci_register_write(rt2x00dev,
MAC_SYS_CTRL, 0x00000000);
516 static int rt2800pci_enable_radio(
struct rt2x00_dev *rt2x00dev)
523 if (
unlikely(rt2800pci_init_queues(rt2x00dev)))
543 static void rt2800pci_disable_radio(
struct rt2x00_dev *rt2x00dev)
545 if (rt2x00_is_soc(rt2x00dev)) {
547 rt2x00pci_register_write(rt2x00dev,
PWR_PIN_CFG, 0);
548 rt2x00pci_register_write(rt2x00dev,
TX_PIN_CFG, 0);
552 static int rt2800pci_set_state(
struct rt2x00_dev *rt2x00dev,
571 static int rt2800pci_set_device_state(
struct rt2x00_dev *rt2x00dev,
578 retval = rt2800pci_enable_radio(rt2x00dev);
585 rt2800pci_disable_radio(rt2x00dev);
590 rt2800pci_toggle_irq(rt2x00dev, state);
596 retval = rt2800pci_set_state(rt2x00dev, state);
604 ERROR(rt2x00dev,
"Device failed to enter state %d (%d).\n",
613 static __le32 *rt2800pci_get_txwi(
struct queue_entry *entry)
615 return (
__le32 *) entry->skb->data;
618 static void rt2800pci_write_tx_desc(
struct queue_entry *entry,
639 rt2x00_desc_write(txd, 0, word);
650 rt2x00_desc_write(txd, 1, word);
655 rt2x00_desc_write(txd, 2, word);
661 rt2x00_desc_write(txd, 3, word);
673 static void rt2800pci_fill_rxdone(
struct queue_entry *entry,
680 rt2x00_desc_read(rxd, 3, &word);
728 static void rt2800pci_wakeup(
struct rt2x00_dev *rt2x00dev)
736 static bool rt2800pci_txdone(
struct rt2x00_dev *rt2x00dev)
739 struct queue_entry *
entry;
742 int max_tx_done = 16;
744 while (
kfifo_get(&rt2x00dev->txstatus_fifo, &status)) {
751 WARNING(rt2x00dev,
"Got TX status report with "
752 "unexpected pid %u, dropping\n", qid);
756 queue = rt2x00queue_get_tx_queue(rt2x00dev, qid);
762 WARNING(rt2x00dev,
"Got TX status for an unavailable "
763 "queue %u, dropping\n", qid);
767 if (
unlikely(rt2x00queue_empty(queue))) {
772 WARNING(rt2x00dev,
"Got TX status for an empty "
773 "queue %u, dropping\n", qid);
780 if (--max_tx_done == 0)
787 static inline void rt2800pci_enable_interrupt(
struct rt2x00_dev *rt2x00dev,
803 static void rt2800pci_txstatus_tasklet(
unsigned long data)
806 if (rt2800pci_txdone(rt2x00dev))
816 static void rt2800pci_pretbtt_tasklet(
unsigned long data)
824 static void rt2800pci_tbtt_tasklet(
unsigned long data)
858 static void rt2800pci_rxdone_tasklet(
unsigned long data)
867 static void rt2800pci_autowake_tasklet(
unsigned long data)
870 rt2800pci_wakeup(rt2x00dev);
875 static void rt2800pci_txstatus_interrupt(
struct rt2x00_dev *rt2x00dev)
898 for (i = 0; i < rt2x00dev->
ops->tx->entry_num; i++) {
899 rt2x00pci_register_read(rt2x00dev,
TX_STA_FIFO, &status);
904 if (!
kfifo_put(&rt2x00dev->txstatus_fifo, &status)) {
905 WARNING(rt2x00dev,
"TX status FIFO overrun,"
906 "drop tx status report.\n");
915 static irqreturn_t rt2800pci_interrupt(
int irq,
void *dev_instance)
938 rt2800pci_txstatus_interrupt(rt2x00dev);
973 static void rt2800pci_read_eeprom(
struct rt2x00_dev *rt2x00dev)
975 if (rt2x00_is_soc(rt2x00dev))
976 rt2800pci_read_eeprom_soc(rt2x00dev);
977 else if (rt2800pci_efuse_detect(rt2x00dev))
978 rt2800pci_read_eeprom_efuse(rt2x00dev);
980 rt2800pci_read_eeprom_pci(rt2x00dev);
1010 static const struct rt2800_ops rt2800pci_rt2800_ops = {
1011 .register_read = rt2x00pci_register_read,
1012 .register_read_lock = rt2x00pci_register_read,
1013 .register_write = rt2x00pci_register_write,
1014 .register_write_lock = rt2x00pci_register_write,
1015 .register_multiread = rt2x00pci_register_multiread,
1016 .register_multiwrite = rt2x00pci_register_multiwrite,
1018 .read_eeprom = rt2800pci_read_eeprom,
1019 .hwcrypt_disabled = rt2800pci_hwcrypt_disabled,
1020 .drv_write_firmware = rt2800pci_write_firmware,
1021 .drv_init_registers = rt2800pci_init_registers,
1022 .drv_get_txwi = rt2800pci_get_txwi,
1026 .irq_handler = rt2800pci_interrupt,
1027 .txstatus_tasklet = rt2800pci_txstatus_tasklet,
1028 .pretbtt_tasklet = rt2800pci_pretbtt_tasklet,
1029 .tbtt_tasklet = rt2800pci_tbtt_tasklet,
1030 .rxdone_tasklet = rt2800pci_rxdone_tasklet,
1031 .autowake_tasklet = rt2800pci_autowake_tasklet,
1033 .get_firmware_name = rt2800pci_get_firmware_name,
1038 .get_entry_state = rt2800pci_get_entry_state,
1039 .clear_entry = rt2800pci_clear_entry,
1040 .set_device_state = rt2800pci_set_device_state,
1047 .start_queue = rt2800pci_start_queue,
1048 .kick_queue = rt2800pci_kick_queue,
1049 .stop_queue = rt2800pci_stop_queue,
1051 .write_tx_desc = rt2800pci_write_tx_desc,
1055 .fill_rxdone = rt2800pci_fill_rxdone,
1088 static const struct rt2x00_ops rt2800pci_ops = {
1089 .name = KBUILD_MODNAME,
1096 .rx = &rt2800pci_queue_rx,
1097 .tx = &rt2800pci_queue_tx,
1098 .bcn = &rt2800pci_queue_bcn,
1099 .lib = &rt2800pci_rt2x00_ops,
1100 .drv = &rt2800pci_rt2800_ops,
1101 .hw = &rt2800pci_mac80211_ops,
1102 #ifdef CONFIG_RT2X00_LIB_DEBUGFS
1128 #ifdef CONFIG_RT2800PCI_RT3290
1131 #ifdef CONFIG_RT2800PCI_RT33XX
1134 #ifdef CONFIG_RT2800PCI_RT35XX
1143 #ifdef CONFIG_RT2800PCI_RT53XX
1166 #if defined(CONFIG_RALINK_RT288X) || defined(CONFIG_RALINK_RT305X)
1174 .name =
"rt2800_wmac",
1176 .mod_name = KBUILD_MODNAME,
1178 .probe = rt2800soc_probe,
1192 static struct pci_driver rt2800pci_driver = {
1193 .
name = KBUILD_MODNAME,
1194 .id_table = rt2800pci_device_table,
1195 .probe = rt2800pci_probe,
1202 static int __init rt2800pci_init(
void)
1206 #if defined(CONFIG_RALINK_RT288X) || defined(CONFIG_RALINK_RT305X)
1212 ret = pci_register_driver(&rt2800pci_driver);
1214 #if defined(CONFIG_RALINK_RT288X) || defined(CONFIG_RALINK_RT305X)
1224 static void __exit rt2800pci_exit(
void)
1229 #if defined(CONFIG_RALINK_RT288X) || defined(CONFIG_RALINK_RT305X)