• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/net/wireless/rt2x00/

Lines Matching refs:rt2x00dev

57 static void rt2800pci_mcu_status(struct rt2x00_dev *rt2x00dev, const u8 token)
65 if (rt2x00_is_soc(rt2x00dev))
69 rt2800_register_read(rt2x00dev, H2M_MAILBOX_CID, &reg);
81 ERROR(rt2x00dev, "MCU request failed, no response from hardware\n");
83 rt2800_register_write(rt2x00dev, H2M_MAILBOX_STATUS, ~0);
84 rt2800_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0);
88 static void rt2800pci_read_eeprom_soc(struct rt2x00_dev *rt2x00dev)
92 memcpy_fromio(rt2x00dev->eeprom, base_addr, EEPROM_SIZE);
95 static inline void rt2800pci_read_eeprom_soc(struct rt2x00_dev *rt2x00dev)
103 struct rt2x00_dev *rt2x00dev = eeprom->data;
106 rt2800_register_read(rt2x00dev, E2PROM_CSR, &reg);
118 struct rt2x00_dev *rt2x00dev = eeprom->data;
128 rt2800_register_write(rt2x00dev, E2PROM_CSR, reg);
131 static void rt2800pci_read_eeprom_pci(struct rt2x00_dev *rt2x00dev)
136 rt2800_register_read(rt2x00dev, E2PROM_CSR, &reg);
138 eeprom.data = rt2x00dev;
158 eeprom_93cx6_multiread(&eeprom, EEPROM_BASE, rt2x00dev->eeprom,
162 static int rt2800pci_efuse_detect(struct rt2x00_dev *rt2x00dev)
164 return rt2800_efuse_detect(rt2x00dev);
167 static inline void rt2800pci_read_eeprom_efuse(struct rt2x00_dev *rt2x00dev)
169 rt2800_read_eeprom_efuse(rt2x00dev);
172 static inline void rt2800pci_read_eeprom_pci(struct rt2x00_dev *rt2x00dev)
176 static inline int rt2800pci_efuse_detect(struct rt2x00_dev *rt2x00dev)
181 static inline void rt2800pci_read_eeprom_efuse(struct rt2x00_dev *rt2x00dev)
189 static char *rt2800pci_get_firmware_name(struct rt2x00_dev *rt2x00dev)
194 static int rt2800pci_write_firmware(struct rt2x00_dev *rt2x00dev,
199 rt2800_register_write(rt2x00dev, AUTOWAKEUP_CFG, 0x00000000);
206 rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, reg);
211 rt2800_register_multiwrite(rt2x00dev, FIRMWARE_IMAGE_BASE,
214 rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000);
215 rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00001);
217 rt2800_register_write(rt2x00dev, H2M_BBP_AGENT, 0);
218 rt2800_register_write(rt2x00dev, H2M_MAILBOX_CSR, 0);
263 static int rt2800pci_init_queues(struct rt2x00_dev *rt2x00dev)
271 entry_priv = rt2x00dev->tx[0].entries[0].priv_data;
272 rt2800_register_write(rt2x00dev, TX_BASE_PTR0, entry_priv->desc_dma);
273 rt2800_register_write(rt2x00dev, TX_MAX_CNT0, rt2x00dev->tx[0].limit);
274 rt2800_register_write(rt2x00dev, TX_CTX_IDX0, 0);
275 rt2800_register_write(rt2x00dev, TX_DTX_IDX0, 0);
277 entry_priv = rt2x00dev->tx[1].entries[0].priv_data;
278 rt2800_register_write(rt2x00dev, TX_BASE_PTR1, entry_priv->desc_dma);
279 rt2800_register_write(rt2x00dev, TX_MAX_CNT1, rt2x00dev->tx[1].limit);
280 rt2800_register_write(rt2x00dev, TX_CTX_IDX1, 0);
281 rt2800_register_write(rt2x00dev, TX_DTX_IDX1, 0);
283 entry_priv = rt2x00dev->tx[2].entries[0].priv_data;
284 rt2800_register_write(rt2x00dev, TX_BASE_PTR2, entry_priv->desc_dma);
285 rt2800_register_write(rt2x00dev, TX_MAX_CNT2, rt2x00dev->tx[2].limit);
286 rt2800_register_write(rt2x00dev, TX_CTX_IDX2, 0);
287 rt2800_register_write(rt2x00dev, TX_DTX_IDX2, 0);
289 entry_priv = rt2x00dev->tx[3].entries[0].priv_data;
290 rt2800_register_write(rt2x00dev, TX_BASE_PTR3, entry_priv->desc_dma);
291 rt2800_register_write(rt2x00dev, TX_MAX_CNT3, rt2x00dev->tx[3].limit);
292 rt2800_register_write(rt2x00dev, TX_CTX_IDX3, 0);
293 rt2800_register_write(rt2x00dev, TX_DTX_IDX3, 0);
295 entry_priv = rt2x00dev->rx->entries[0].priv_data;
296 rt2800_register_write(rt2x00dev, RX_BASE_PTR, entry_priv->desc_dma);
297 rt2800_register_write(rt2x00dev, RX_MAX_CNT, rt2x00dev->rx[0].limit);
298 rt2800_register_write(rt2x00dev, RX_CRX_IDX, rt2x00dev->rx[0].limit - 1);
299 rt2800_register_write(rt2x00dev, RX_DRX_IDX, 0);
304 rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
308 rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
310 rt2800_register_write(rt2x00dev, DELAY_INT_CFG, 0);
318 static void rt2800pci_toggle_rx(struct rt2x00_dev *rt2x00dev,
323 rt2800_register_read(rt2x00dev, MAC_SYS_CTRL, &reg);
327 rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, reg);
330 static void rt2800pci_toggle_irq(struct rt2x00_dev *rt2x00dev,
342 rt2800_register_read(rt2x00dev, INT_SOURCE_CSR, &reg);
343 rt2800_register_write(rt2x00dev, INT_SOURCE_CSR, reg);
346 rt2800_register_read(rt2x00dev, INT_MASK_CSR, &reg);
365 rt2800_register_write(rt2x00dev, INT_MASK_CSR, reg);
368 static int rt2800pci_init_registers(struct rt2x00_dev *rt2x00dev)
375 rt2800_register_read(rt2x00dev, WPDMA_RST_IDX, &reg);
383 rt2800_register_write(rt2x00dev, WPDMA_RST_IDX, reg);
385 rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e1f);
386 rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e00);
388 rt2800_register_write(rt2x00dev, PWR_PIN_CFG, 0x00000003);
390 rt2800_register_read(rt2x00dev, MAC_SYS_CTRL, &reg);
393 rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, reg);
395 rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, 0x00000000);
400 static int rt2800pci_enable_radio(struct rt2x00_dev *rt2x00dev)
408 if (unlikely(rt2800_wait_wpdma_ready(rt2x00dev) ||
409 rt2800pci_init_queues(rt2x00dev) ||
410 rt2800_init_registers(rt2x00dev) ||
411 rt2800_wait_wpdma_ready(rt2x00dev) ||
412 rt2800_init_bbp(rt2x00dev) ||
413 rt2800_init_rfcsr(rt2x00dev)))
419 rt2800_mcu_request(rt2x00dev, MCU_BOOT_SIGNAL, 0, 0, 0);
424 rt2800_register_read(rt2x00dev, MAC_SYS_CTRL, &reg);
427 rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, reg);
429 rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
434 rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
436 rt2800_register_read(rt2x00dev, MAC_SYS_CTRL, &reg);
439 rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, reg);
444 rt2x00_eeprom_read(rt2x00dev, EEPROM_LED1, &word);
445 rt2800_mcu_request(rt2x00dev, MCU_LED_1, 0xff,
448 rt2x00_eeprom_read(rt2x00dev, EEPROM_LED2, &word);
449 rt2800_mcu_request(rt2x00dev, MCU_LED_2, 0xff,
452 rt2x00_eeprom_read(rt2x00dev, EEPROM_LED3, &word);
453 rt2800_mcu_request(rt2x00dev, MCU_LED_3, 0xff,
459 static void rt2800pci_disable_radio(struct rt2x00_dev *rt2x00dev)
463 rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
469 rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
471 rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, 0);
472 rt2800_register_write(rt2x00dev, PWR_PIN_CFG, 0);
473 rt2800_register_write(rt2x00dev, TX_PIN_CFG, 0);
475 rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00001280);
477 rt2800_register_read(rt2x00dev, WPDMA_RST_IDX, &reg);
485 rt2800_register_write(rt2x00dev, WPDMA_RST_IDX, reg);
487 rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e1f);
488 rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e00);
491 rt2800_wait_wpdma_ready(rt2x00dev);
494 static int rt2800pci_set_state(struct rt2x00_dev *rt2x00dev,
502 rt2800_mcu_request(rt2x00dev, MCU_SLEEP, 0xff, 0, 2);
505 rt2800_mcu_request(rt2x00dev, MCU_WAKEUP, TOKEN_WAKUP, 0, 0);
506 rt2800pci_mcu_status(rt2x00dev, TOKEN_WAKUP);
512 static int rt2800pci_set_device_state(struct rt2x00_dev *rt2x00dev,
524 rt2800pci_set_state(rt2x00dev, STATE_AWAKE);
526 retval = rt2800pci_enable_radio(rt2x00dev);
533 rt2800pci_disable_radio(rt2x00dev);
534 rt2800pci_set_state(rt2x00dev, STATE_SLEEP);
540 rt2800pci_toggle_rx(rt2x00dev, state);
546 rt2800pci_toggle_irq(rt2x00dev, state);
552 retval = rt2800pci_set_state(rt2x00dev, state);
560 ERROR(rt2x00dev, "Device failed to enter state %d (%d).\n",
578 static void rt2800pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
634 static void rt2800pci_kick_tx_queue(struct rt2x00_dev *rt2x00dev,
643 queue = rt2x00queue_get_queue(rt2x00dev, queue_idx);
651 rt2800_register_write(rt2x00dev, TX_CTX_IDX(qidx), idx);
654 static void rt2800pci_kill_tx_queue(struct rt2x00_dev *rt2x00dev,
660 rt2800_register_write(rt2x00dev, BCN_TIME_CFG, 0);
664 rt2800_register_read(rt2x00dev, WPDMA_RST_IDX, &reg);
669 rt2800_register_write(rt2x00dev, WPDMA_RST_IDX, reg);
678 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
725 rt2800_register_write(rt2x00dev, RX_CRX_IDX, entry->entry_idx);
731 static void rt2800pci_txdone(struct rt2x00_dev *rt2x00dev)
753 rt2800_register_read(rt2x00dev, TX_STA_FIFO, &reg);
768 queue = rt2x00queue_get_queue(rt2x00dev, pid - 1);
790 WARNING(rt2x00dev, "invalid TX_STA_FIFO content\n");
835 static void rt2800pci_wakeup(struct rt2x00_dev *rt2x00dev)
840 rt2800_config(rt2x00dev, &libconf, IEEE80211_CONF_CHANGE_PS);
845 struct rt2x00_dev *rt2x00dev = dev_instance;
846 u32 reg = rt2x00dev->irqvalue[0];
852 rt2x00lib_pretbtt(rt2x00dev);
858 rt2x00lib_beacondone(rt2x00dev);
864 rt2x00pci_rxdone(rt2x00dev);
870 rt2800pci_txdone(rt2x00dev);
876 rt2800pci_wakeup(rt2x00dev);
879 rt2x00dev->ops->lib->set_device_state(rt2x00dev,
887 struct rt2x00_dev *rt2x00dev = dev_instance;
891 rt2800_register_read(rt2x00dev, INT_SOURCE_CSR, &reg);
892 rt2800_register_write(rt2x00dev, INT_SOURCE_CSR, reg);
897 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
901 rt2x00dev->irqvalue[0] = reg;
904 rt2x00dev->ops->lib->set_device_state(rt2x00dev,
914 static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
919 if (rt2x00_is_soc(rt2x00dev))
920 rt2800pci_read_eeprom_soc(rt2x00dev);
921 else if (rt2800pci_efuse_detect(rt2x00dev))
922 rt2800pci_read_eeprom_efuse(rt2x00dev);
924 rt2800pci_read_eeprom_pci(rt2x00dev);
926 return rt2800_validate_eeprom(rt2x00dev);
929 static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev)
936 retval = rt2800pci_validate_eeprom(rt2x00dev);
940 retval = rt2800_init_eeprom(rt2x00dev);
947 retval = rt2800_probe_hw_mode(rt2x00dev);
955 __set_bit(DRIVER_SUPPORT_CONTROL_FILTERS, &rt2x00dev->flags);
956 __set_bit(DRIVER_SUPPORT_CONTROL_FILTER_PSPOLL, &rt2x00dev->flags);
962 __set_bit(DRIVER_SUPPORT_PRE_TBTT_INTERRUPT, &rt2x00dev->flags);
967 if (!rt2x00_is_soc(rt2x00dev))
968 __set_bit(DRIVER_REQUIRE_FIRMWARE, &rt2x00dev->flags);
969 __set_bit(DRIVER_REQUIRE_DMA, &rt2x00dev->flags);
970 __set_bit(DRIVER_REQUIRE_L2PAD, &rt2x00dev->flags);
972 __set_bit(CONFIG_SUPPORT_HW_CRYPTO, &rt2x00dev->flags);
973 __set_bit(DRIVER_SUPPORT_LINK_TUNING, &rt2x00dev->flags);
978 rt2x00dev->rssi_offset = DEFAULT_RSSI_OFFSET;