Lines Matching refs:rt2x00dev
65 static void rt61pci_bbp_write(struct rt2x00_dev *rt2x00dev, in rt61pci_bbp_write() argument
70 mutex_lock(&rt2x00dev->csr_mutex); in rt61pci_bbp_write()
76 if (WAIT_FOR_BBP(rt2x00dev, ®)) { in rt61pci_bbp_write()
83 rt2x00mmio_register_write(rt2x00dev, PHY_CSR3, reg); in rt61pci_bbp_write()
86 mutex_unlock(&rt2x00dev->csr_mutex); in rt61pci_bbp_write()
89 static void rt61pci_bbp_read(struct rt2x00_dev *rt2x00dev, in rt61pci_bbp_read() argument
94 mutex_lock(&rt2x00dev->csr_mutex); in rt61pci_bbp_read()
104 if (WAIT_FOR_BBP(rt2x00dev, ®)) { in rt61pci_bbp_read()
110 rt2x00mmio_register_write(rt2x00dev, PHY_CSR3, reg); in rt61pci_bbp_read()
112 WAIT_FOR_BBP(rt2x00dev, ®); in rt61pci_bbp_read()
117 mutex_unlock(&rt2x00dev->csr_mutex); in rt61pci_bbp_read()
120 static void rt61pci_rf_write(struct rt2x00_dev *rt2x00dev, in rt61pci_rf_write() argument
125 mutex_lock(&rt2x00dev->csr_mutex); in rt61pci_rf_write()
131 if (WAIT_FOR_RF(rt2x00dev, ®)) { in rt61pci_rf_write()
138 rt2x00mmio_register_write(rt2x00dev, PHY_CSR4, reg); in rt61pci_rf_write()
139 rt2x00_rf_write(rt2x00dev, word, value); in rt61pci_rf_write()
142 mutex_unlock(&rt2x00dev->csr_mutex); in rt61pci_rf_write()
145 static void rt61pci_mcu_request(struct rt2x00_dev *rt2x00dev, in rt61pci_mcu_request() argument
151 mutex_lock(&rt2x00dev->csr_mutex); in rt61pci_mcu_request()
157 if (WAIT_FOR_MCU(rt2x00dev, ®)) { in rt61pci_mcu_request()
162 rt2x00mmio_register_write(rt2x00dev, H2M_MAILBOX_CSR, reg); in rt61pci_mcu_request()
164 rt2x00mmio_register_read(rt2x00dev, HOST_CMD_CSR, ®); in rt61pci_mcu_request()
167 rt2x00mmio_register_write(rt2x00dev, HOST_CMD_CSR, reg); in rt61pci_mcu_request()
170 mutex_unlock(&rt2x00dev->csr_mutex); in rt61pci_mcu_request()
176 struct rt2x00_dev *rt2x00dev = eeprom->data; in rt61pci_eepromregister_read() local
179 rt2x00mmio_register_read(rt2x00dev, E2PROM_CSR, ®); in rt61pci_eepromregister_read()
191 struct rt2x00_dev *rt2x00dev = eeprom->data; in rt61pci_eepromregister_write() local
201 rt2x00mmio_register_write(rt2x00dev, E2PROM_CSR, reg); in rt61pci_eepromregister_write()
239 static int rt61pci_rfkill_poll(struct rt2x00_dev *rt2x00dev) in rt61pci_rfkill_poll() argument
243 rt2x00mmio_register_read(rt2x00dev, MAC_CSR13, ®); in rt61pci_rfkill_poll()
255 (enabled && led->rt2x00dev->curr_band == IEEE80211_BAND_5GHZ); in rt61pci_brightness_set()
257 (enabled && led->rt2x00dev->curr_band == IEEE80211_BAND_2GHZ); in rt61pci_brightness_set()
260 rt2x00_set_field16(&led->rt2x00dev->led_mcu_reg, in rt61pci_brightness_set()
263 rt61pci_mcu_request(led->rt2x00dev, MCU_LED, 0xff, in rt61pci_brightness_set()
264 (led->rt2x00dev->led_mcu_reg & 0xff), in rt61pci_brightness_set()
265 ((led->rt2x00dev->led_mcu_reg >> 8))); in rt61pci_brightness_set()
267 rt2x00_set_field16(&led->rt2x00dev->led_mcu_reg, in rt61pci_brightness_set()
269 rt2x00_set_field16(&led->rt2x00dev->led_mcu_reg, in rt61pci_brightness_set()
272 rt61pci_mcu_request(led->rt2x00dev, MCU_LED, 0xff, in rt61pci_brightness_set()
273 (led->rt2x00dev->led_mcu_reg & 0xff), in rt61pci_brightness_set()
274 ((led->rt2x00dev->led_mcu_reg >> 8))); in rt61pci_brightness_set()
281 rt61pci_mcu_request(led->rt2x00dev, MCU_LED_STRENGTH, 0xff, in rt61pci_brightness_set()
294 rt2x00mmio_register_read(led->rt2x00dev, MAC_CSR14, ®); in rt61pci_blink_set()
297 rt2x00mmio_register_write(led->rt2x00dev, MAC_CSR14, reg); in rt61pci_blink_set()
302 static void rt61pci_init_led(struct rt2x00_dev *rt2x00dev, in rt61pci_init_led() argument
306 led->rt2x00dev = rt2x00dev; in rt61pci_init_led()
317 static int rt61pci_config_shared_key(struct rt2x00_dev *rt2x00dev, in rt61pci_config_shared_key() argument
339 rt2x00mmio_register_read(rt2x00dev, SEC_CSR0, ®); in rt61pci_config_shared_key()
358 rt2x00mmio_register_multiwrite(rt2x00dev, reg, in rt61pci_config_shared_key()
372 rt2x00mmio_register_read(rt2x00dev, SEC_CSR1, ®); in rt61pci_config_shared_key()
374 rt2x00mmio_register_write(rt2x00dev, SEC_CSR1, reg); in rt61pci_config_shared_key()
379 rt2x00mmio_register_read(rt2x00dev, SEC_CSR5, ®); in rt61pci_config_shared_key()
381 rt2x00mmio_register_write(rt2x00dev, SEC_CSR5, reg); in rt61pci_config_shared_key()
404 rt2x00mmio_register_read(rt2x00dev, SEC_CSR0, ®); in rt61pci_config_shared_key()
409 rt2x00mmio_register_write(rt2x00dev, SEC_CSR0, reg); in rt61pci_config_shared_key()
414 static int rt61pci_config_pairwise_key(struct rt2x00_dev *rt2x00dev, in rt61pci_config_pairwise_key() argument
433 rt2x00mmio_register_read(rt2x00dev, SEC_CSR2, ®); in rt61pci_config_pairwise_key()
436 rt2x00mmio_register_read(rt2x00dev, SEC_CSR3, ®); in rt61pci_config_pairwise_key()
458 rt2x00mmio_register_multiwrite(rt2x00dev, reg, in rt61pci_config_pairwise_key()
462 rt2x00mmio_register_multiwrite(rt2x00dev, reg, in rt61pci_config_pairwise_key()
470 rt2x00mmio_register_read(rt2x00dev, SEC_CSR4, ®); in rt61pci_config_pairwise_key()
472 rt2x00mmio_register_write(rt2x00dev, SEC_CSR4, reg); in rt61pci_config_pairwise_key()
495 rt2x00mmio_register_read(rt2x00dev, SEC_CSR2, ®); in rt61pci_config_pairwise_key()
500 rt2x00mmio_register_write(rt2x00dev, SEC_CSR2, reg); in rt61pci_config_pairwise_key()
504 rt2x00mmio_register_read(rt2x00dev, SEC_CSR3, ®); in rt61pci_config_pairwise_key()
509 rt2x00mmio_register_write(rt2x00dev, SEC_CSR3, reg); in rt61pci_config_pairwise_key()
515 static void rt61pci_config_filter(struct rt2x00_dev *rt2x00dev, in rt61pci_config_filter() argument
526 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR0, ®); in rt61pci_config_filter()
535 !rt2x00dev->intf_ap_count); in rt61pci_config_filter()
542 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR0, reg); in rt61pci_config_filter()
545 static void rt61pci_config_intf(struct rt2x00_dev *rt2x00dev, in rt61pci_config_intf() argument
556 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR9, ®); in rt61pci_config_intf()
558 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR9, reg); in rt61pci_config_intf()
566 rt2x00mmio_register_multiwrite(rt2x00dev, MAC_CSR2, in rt61pci_config_intf()
575 rt2x00mmio_register_multiwrite(rt2x00dev, MAC_CSR4, in rt61pci_config_intf()
581 static void rt61pci_config_erp(struct rt2x00_dev *rt2x00dev, in rt61pci_config_erp() argument
587 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR0, ®); in rt61pci_config_erp()
590 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR0, reg); in rt61pci_config_erp()
593 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR4, ®); in rt61pci_config_erp()
597 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR4, reg); in rt61pci_config_erp()
601 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR5, in rt61pci_config_erp()
605 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR9, ®); in rt61pci_config_erp()
608 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR9, reg); in rt61pci_config_erp()
612 rt2x00mmio_register_read(rt2x00dev, MAC_CSR9, ®); in rt61pci_config_erp()
614 rt2x00mmio_register_write(rt2x00dev, MAC_CSR9, reg); in rt61pci_config_erp()
616 rt2x00mmio_register_read(rt2x00dev, MAC_CSR8, ®); in rt61pci_config_erp()
620 rt2x00mmio_register_write(rt2x00dev, MAC_CSR8, reg); in rt61pci_config_erp()
624 static void rt61pci_config_antenna_5x(struct rt2x00_dev *rt2x00dev, in rt61pci_config_antenna_5x() argument
631 rt61pci_bbp_read(rt2x00dev, 3, &r3); in rt61pci_config_antenna_5x()
632 rt61pci_bbp_read(rt2x00dev, 4, &r4); in rt61pci_config_antenna_5x()
633 rt61pci_bbp_read(rt2x00dev, 77, &r77); in rt61pci_config_antenna_5x()
635 rt2x00_set_field8(&r3, BBP_R3_SMART_MODE, rt2x00_rf(rt2x00dev, RF5325)); in rt61pci_config_antenna_5x()
644 (rt2x00dev->curr_band != IEEE80211_BAND_5GHZ)); in rt61pci_config_antenna_5x()
649 if (rt2x00dev->curr_band == IEEE80211_BAND_5GHZ) in rt61pci_config_antenna_5x()
658 if (rt2x00dev->curr_band == IEEE80211_BAND_5GHZ) in rt61pci_config_antenna_5x()
665 rt61pci_bbp_write(rt2x00dev, 77, r77); in rt61pci_config_antenna_5x()
666 rt61pci_bbp_write(rt2x00dev, 3, r3); in rt61pci_config_antenna_5x()
667 rt61pci_bbp_write(rt2x00dev, 4, r4); in rt61pci_config_antenna_5x()
670 static void rt61pci_config_antenna_2x(struct rt2x00_dev *rt2x00dev, in rt61pci_config_antenna_2x() argument
677 rt61pci_bbp_read(rt2x00dev, 3, &r3); in rt61pci_config_antenna_2x()
678 rt61pci_bbp_read(rt2x00dev, 4, &r4); in rt61pci_config_antenna_2x()
679 rt61pci_bbp_read(rt2x00dev, 77, &r77); in rt61pci_config_antenna_2x()
681 rt2x00_set_field8(&r3, BBP_R3_SMART_MODE, rt2x00_rf(rt2x00dev, RF2529)); in rt61pci_config_antenna_2x()
683 !rt2x00_has_cap_frame_type(rt2x00dev)); in rt61pci_config_antenna_2x()
703 rt61pci_bbp_write(rt2x00dev, 77, r77); in rt61pci_config_antenna_2x()
704 rt61pci_bbp_write(rt2x00dev, 3, r3); in rt61pci_config_antenna_2x()
705 rt61pci_bbp_write(rt2x00dev, 4, r4); in rt61pci_config_antenna_2x()
708 static void rt61pci_config_antenna_2529_rx(struct rt2x00_dev *rt2x00dev, in rt61pci_config_antenna_2529_rx() argument
713 rt2x00mmio_register_read(rt2x00dev, MAC_CSR13, ®); in rt61pci_config_antenna_2529_rx()
721 rt2x00mmio_register_write(rt2x00dev, MAC_CSR13, reg); in rt61pci_config_antenna_2529_rx()
724 static void rt61pci_config_antenna_2529(struct rt2x00_dev *rt2x00dev, in rt61pci_config_antenna_2529() argument
731 rt61pci_bbp_read(rt2x00dev, 3, &r3); in rt61pci_config_antenna_2529()
732 rt61pci_bbp_read(rt2x00dev, 4, &r4); in rt61pci_config_antenna_2529()
733 rt61pci_bbp_read(rt2x00dev, 77, &r77); in rt61pci_config_antenna_2529()
742 rt61pci_config_antenna_2529_rx(rt2x00dev, 0, 0); in rt61pci_config_antenna_2529()
754 rt61pci_config_antenna_2529_rx(rt2x00dev, 1, 1); in rt61pci_config_antenna_2529()
758 rt61pci_bbp_write(rt2x00dev, 77, r77); in rt61pci_config_antenna_2529()
759 rt61pci_bbp_write(rt2x00dev, 3, r3); in rt61pci_config_antenna_2529()
760 rt61pci_bbp_write(rt2x00dev, 4, r4); in rt61pci_config_antenna_2529()
794 static void rt61pci_config_ant(struct rt2x00_dev *rt2x00dev, in rt61pci_config_ant() argument
809 if (rt2x00dev->curr_band == IEEE80211_BAND_5GHZ) { in rt61pci_config_ant()
811 lna = rt2x00_has_cap_external_lna_a(rt2x00dev); in rt61pci_config_ant()
814 lna = rt2x00_has_cap_external_lna_bg(rt2x00dev); in rt61pci_config_ant()
818 rt61pci_bbp_write(rt2x00dev, sel[i].word, sel[i].value[lna]); in rt61pci_config_ant()
820 rt2x00mmio_register_read(rt2x00dev, PHY_CSR0, ®); in rt61pci_config_ant()
823 rt2x00dev->curr_band == IEEE80211_BAND_2GHZ); in rt61pci_config_ant()
825 rt2x00dev->curr_band == IEEE80211_BAND_5GHZ); in rt61pci_config_ant()
827 rt2x00mmio_register_write(rt2x00dev, PHY_CSR0, reg); in rt61pci_config_ant()
829 if (rt2x00_rf(rt2x00dev, RF5225) || rt2x00_rf(rt2x00dev, RF5325)) in rt61pci_config_ant()
830 rt61pci_config_antenna_5x(rt2x00dev, ant); in rt61pci_config_ant()
831 else if (rt2x00_rf(rt2x00dev, RF2527)) in rt61pci_config_ant()
832 rt61pci_config_antenna_2x(rt2x00dev, ant); in rt61pci_config_ant()
833 else if (rt2x00_rf(rt2x00dev, RF2529)) { in rt61pci_config_ant()
834 if (rt2x00_has_cap_double_antenna(rt2x00dev)) in rt61pci_config_ant()
835 rt61pci_config_antenna_2x(rt2x00dev, ant); in rt61pci_config_ant()
837 rt61pci_config_antenna_2529(rt2x00dev, ant); in rt61pci_config_ant()
841 static void rt61pci_config_lna_gain(struct rt2x00_dev *rt2x00dev, in rt61pci_config_lna_gain() argument
848 if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) in rt61pci_config_lna_gain()
851 rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_OFFSET_BG, &eeprom); in rt61pci_config_lna_gain()
854 if (rt2x00_has_cap_external_lna_a(rt2x00dev)) in rt61pci_config_lna_gain()
857 rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_OFFSET_A, &eeprom); in rt61pci_config_lna_gain()
861 rt2x00dev->lna_gain = lna_gain; in rt61pci_config_lna_gain()
864 static void rt61pci_config_channel(struct rt2x00_dev *rt2x00dev, in rt61pci_config_channel() argument
872 rt2x00_set_field32(&rf->rf4, RF4_FREQ_OFFSET, rt2x00dev->freq_offset); in rt61pci_config_channel()
874 smart = !(rt2x00_rf(rt2x00dev, RF5225) || rt2x00_rf(rt2x00dev, RF2527)); in rt61pci_config_channel()
876 rt61pci_bbp_read(rt2x00dev, 3, &r3); in rt61pci_config_channel()
878 rt61pci_bbp_write(rt2x00dev, 3, r3); in rt61pci_config_channel()
885 rt61pci_bbp_write(rt2x00dev, 94, r94); in rt61pci_config_channel()
887 rt61pci_rf_write(rt2x00dev, 1, rf->rf1); in rt61pci_config_channel()
888 rt61pci_rf_write(rt2x00dev, 2, rf->rf2); in rt61pci_config_channel()
889 rt61pci_rf_write(rt2x00dev, 3, rf->rf3 & ~0x00000004); in rt61pci_config_channel()
890 rt61pci_rf_write(rt2x00dev, 4, rf->rf4); in rt61pci_config_channel()
894 rt61pci_rf_write(rt2x00dev, 1, rf->rf1); in rt61pci_config_channel()
895 rt61pci_rf_write(rt2x00dev, 2, rf->rf2); in rt61pci_config_channel()
896 rt61pci_rf_write(rt2x00dev, 3, rf->rf3 | 0x00000004); in rt61pci_config_channel()
897 rt61pci_rf_write(rt2x00dev, 4, rf->rf4); in rt61pci_config_channel()
901 rt61pci_rf_write(rt2x00dev, 1, rf->rf1); in rt61pci_config_channel()
902 rt61pci_rf_write(rt2x00dev, 2, rf->rf2); in rt61pci_config_channel()
903 rt61pci_rf_write(rt2x00dev, 3, rf->rf3 & ~0x00000004); in rt61pci_config_channel()
904 rt61pci_rf_write(rt2x00dev, 4, rf->rf4); in rt61pci_config_channel()
909 static void rt61pci_config_txpower(struct rt2x00_dev *rt2x00dev, in rt61pci_config_txpower() argument
914 rt2x00_rf_read(rt2x00dev, 1, &rf.rf1); in rt61pci_config_txpower()
915 rt2x00_rf_read(rt2x00dev, 2, &rf.rf2); in rt61pci_config_txpower()
916 rt2x00_rf_read(rt2x00dev, 3, &rf.rf3); in rt61pci_config_txpower()
917 rt2x00_rf_read(rt2x00dev, 4, &rf.rf4); in rt61pci_config_txpower()
919 rt61pci_config_channel(rt2x00dev, &rf, txpower); in rt61pci_config_txpower()
922 static void rt61pci_config_retry_limit(struct rt2x00_dev *rt2x00dev, in rt61pci_config_retry_limit() argument
927 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR4, ®); in rt61pci_config_retry_limit()
935 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR4, reg); in rt61pci_config_retry_limit()
938 static void rt61pci_config_ps(struct rt2x00_dev *rt2x00dev, in rt61pci_config_ps() argument
947 rt2x00mmio_register_read(rt2x00dev, MAC_CSR11, ®); in rt61pci_config_ps()
949 rt2x00dev->beacon_int - 10); in rt61pci_config_ps()
956 rt2x00mmio_register_write(rt2x00dev, MAC_CSR11, reg); in rt61pci_config_ps()
959 rt2x00mmio_register_write(rt2x00dev, MAC_CSR11, reg); in rt61pci_config_ps()
961 rt2x00mmio_register_write(rt2x00dev, SOFT_RESET_CSR, in rt61pci_config_ps()
963 rt2x00mmio_register_write(rt2x00dev, IO_CNTL_CSR, 0x0000001c); in rt61pci_config_ps()
964 rt2x00mmio_register_write(rt2x00dev, PCI_USEC_CSR, 0x00000060); in rt61pci_config_ps()
966 rt61pci_mcu_request(rt2x00dev, MCU_SLEEP, 0xff, 0, 0); in rt61pci_config_ps()
968 rt2x00mmio_register_read(rt2x00dev, MAC_CSR11, ®); in rt61pci_config_ps()
973 rt2x00mmio_register_write(rt2x00dev, MAC_CSR11, reg); in rt61pci_config_ps()
975 rt2x00mmio_register_write(rt2x00dev, SOFT_RESET_CSR, in rt61pci_config_ps()
977 rt2x00mmio_register_write(rt2x00dev, IO_CNTL_CSR, 0x00000018); in rt61pci_config_ps()
978 rt2x00mmio_register_write(rt2x00dev, PCI_USEC_CSR, 0x00000020); in rt61pci_config_ps()
980 rt61pci_mcu_request(rt2x00dev, MCU_WAKEUP, 0xff, 0, 0); in rt61pci_config_ps()
984 static void rt61pci_config(struct rt2x00_dev *rt2x00dev, in rt61pci_config() argument
989 rt61pci_config_lna_gain(rt2x00dev, libconf); in rt61pci_config()
992 rt61pci_config_channel(rt2x00dev, &libconf->rf, in rt61pci_config()
996 rt61pci_config_txpower(rt2x00dev, libconf->conf->power_level); in rt61pci_config()
998 rt61pci_config_retry_limit(rt2x00dev, libconf); in rt61pci_config()
1000 rt61pci_config_ps(rt2x00dev, libconf); in rt61pci_config()
1006 static void rt61pci_link_stats(struct rt2x00_dev *rt2x00dev, in rt61pci_link_stats() argument
1014 rt2x00mmio_register_read(rt2x00dev, STA_CSR0, ®); in rt61pci_link_stats()
1020 rt2x00mmio_register_read(rt2x00dev, STA_CSR1, ®); in rt61pci_link_stats()
1024 static inline void rt61pci_set_vgc(struct rt2x00_dev *rt2x00dev, in rt61pci_set_vgc() argument
1028 rt61pci_bbp_write(rt2x00dev, 17, vgc_level); in rt61pci_set_vgc()
1034 static void rt61pci_reset_tuner(struct rt2x00_dev *rt2x00dev, in rt61pci_reset_tuner() argument
1037 rt61pci_set_vgc(rt2x00dev, qual, 0x20); in rt61pci_reset_tuner()
1040 static void rt61pci_link_tuner(struct rt2x00_dev *rt2x00dev, in rt61pci_link_tuner() argument
1049 if (rt2x00dev->curr_band == IEEE80211_BAND_5GHZ) { in rt61pci_link_tuner()
1052 if (rt2x00_has_cap_external_lna_a(rt2x00dev)) { in rt61pci_link_tuner()
1059 if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) { in rt61pci_link_tuner()
1069 if (!rt2x00dev->intf_associated) in rt61pci_link_tuner()
1076 rt61pci_set_vgc(rt2x00dev, qual, 0x60); in rt61pci_link_tuner()
1084 rt61pci_set_vgc(rt2x00dev, qual, up_bound); in rt61pci_link_tuner()
1092 rt61pci_set_vgc(rt2x00dev, qual, low_bound + 0x10); in rt61pci_link_tuner()
1100 rt61pci_set_vgc(rt2x00dev, qual, low_bound + 0x08); in rt61pci_link_tuner()
1113 rt61pci_set_vgc(rt2x00dev, qual, up_bound); in rt61pci_link_tuner()
1124 rt61pci_set_vgc(rt2x00dev, qual, ++qual->vgc_level); in rt61pci_link_tuner()
1126 rt61pci_set_vgc(rt2x00dev, qual, --qual->vgc_level); in rt61pci_link_tuner()
1134 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt61pci_start_queue() local
1139 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR0, ®); in rt61pci_start_queue()
1141 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR0, reg); in rt61pci_start_queue()
1144 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR9, ®); in rt61pci_start_queue()
1148 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR9, reg); in rt61pci_start_queue()
1157 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt61pci_kick_queue() local
1162 rt2x00mmio_register_read(rt2x00dev, TX_CNTL_CSR, ®); in rt61pci_kick_queue()
1164 rt2x00mmio_register_write(rt2x00dev, TX_CNTL_CSR, reg); in rt61pci_kick_queue()
1167 rt2x00mmio_register_read(rt2x00dev, TX_CNTL_CSR, ®); in rt61pci_kick_queue()
1169 rt2x00mmio_register_write(rt2x00dev, TX_CNTL_CSR, reg); in rt61pci_kick_queue()
1172 rt2x00mmio_register_read(rt2x00dev, TX_CNTL_CSR, ®); in rt61pci_kick_queue()
1174 rt2x00mmio_register_write(rt2x00dev, TX_CNTL_CSR, reg); in rt61pci_kick_queue()
1177 rt2x00mmio_register_read(rt2x00dev, TX_CNTL_CSR, ®); in rt61pci_kick_queue()
1179 rt2x00mmio_register_write(rt2x00dev, TX_CNTL_CSR, reg); in rt61pci_kick_queue()
1188 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt61pci_stop_queue() local
1193 rt2x00mmio_register_read(rt2x00dev, TX_CNTL_CSR, ®); in rt61pci_stop_queue()
1195 rt2x00mmio_register_write(rt2x00dev, TX_CNTL_CSR, reg); in rt61pci_stop_queue()
1198 rt2x00mmio_register_read(rt2x00dev, TX_CNTL_CSR, ®); in rt61pci_stop_queue()
1200 rt2x00mmio_register_write(rt2x00dev, TX_CNTL_CSR, reg); in rt61pci_stop_queue()
1203 rt2x00mmio_register_read(rt2x00dev, TX_CNTL_CSR, ®); in rt61pci_stop_queue()
1205 rt2x00mmio_register_write(rt2x00dev, TX_CNTL_CSR, reg); in rt61pci_stop_queue()
1208 rt2x00mmio_register_read(rt2x00dev, TX_CNTL_CSR, ®); in rt61pci_stop_queue()
1210 rt2x00mmio_register_write(rt2x00dev, TX_CNTL_CSR, reg); in rt61pci_stop_queue()
1213 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR0, ®); in rt61pci_stop_queue()
1215 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR0, reg); in rt61pci_stop_queue()
1218 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR9, ®); in rt61pci_stop_queue()
1222 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR9, reg); in rt61pci_stop_queue()
1227 tasklet_kill(&rt2x00dev->tbtt_tasklet); in rt61pci_stop_queue()
1237 static char *rt61pci_get_firmware_name(struct rt2x00_dev *rt2x00dev) in rt61pci_get_firmware_name() argument
1242 pci_read_config_word(to_pci_dev(rt2x00dev->dev), PCI_DEVICE_ID, &chip); in rt61pci_get_firmware_name()
1261 static int rt61pci_check_firmware(struct rt2x00_dev *rt2x00dev, in rt61pci_check_firmware() argument
1290 static int rt61pci_load_firmware(struct rt2x00_dev *rt2x00dev, in rt61pci_load_firmware() argument
1300 rt2x00mmio_register_read(rt2x00dev, MAC_CSR0, ®); in rt61pci_load_firmware()
1307 rt2x00_err(rt2x00dev, "Unstable hardware\n"); in rt61pci_load_firmware()
1316 rt2x00mmio_register_write(rt2x00dev, MCU_CNTL_CSR, reg); in rt61pci_load_firmware()
1317 rt2x00mmio_register_write(rt2x00dev, M2H_CMD_DONE_CSR, 0xffffffff); in rt61pci_load_firmware()
1318 rt2x00mmio_register_write(rt2x00dev, H2M_MAILBOX_CSR, 0); in rt61pci_load_firmware()
1319 rt2x00mmio_register_write(rt2x00dev, HOST_CMD_CSR, 0); in rt61pci_load_firmware()
1327 rt2x00mmio_register_write(rt2x00dev, MCU_CNTL_CSR, reg); in rt61pci_load_firmware()
1329 rt2x00mmio_register_multiwrite(rt2x00dev, FIRMWARE_IMAGE_BASE, in rt61pci_load_firmware()
1333 rt2x00mmio_register_write(rt2x00dev, MCU_CNTL_CSR, reg); in rt61pci_load_firmware()
1336 rt2x00mmio_register_write(rt2x00dev, MCU_CNTL_CSR, reg); in rt61pci_load_firmware()
1339 rt2x00mmio_register_read(rt2x00dev, MCU_CNTL_CSR, ®); in rt61pci_load_firmware()
1346 rt2x00_err(rt2x00dev, "MCU Control register not ready\n"); in rt61pci_load_firmware()
1361 rt2x00mmio_register_write(rt2x00dev, MAC_CSR1, reg); in rt61pci_load_firmware()
1363 rt2x00mmio_register_read(rt2x00dev, MAC_CSR1, ®); in rt61pci_load_firmware()
1366 rt2x00mmio_register_write(rt2x00dev, MAC_CSR1, reg); in rt61pci_load_firmware()
1368 rt2x00mmio_register_read(rt2x00dev, MAC_CSR1, ®); in rt61pci_load_firmware()
1370 rt2x00mmio_register_write(rt2x00dev, MAC_CSR1, reg); in rt61pci_load_firmware()
1418 static int rt61pci_init_queues(struct rt2x00_dev *rt2x00dev) in rt61pci_init_queues() argument
1426 rt2x00mmio_register_read(rt2x00dev, TX_RING_CSR0, ®); in rt61pci_init_queues()
1428 rt2x00dev->tx[0].limit); in rt61pci_init_queues()
1430 rt2x00dev->tx[1].limit); in rt61pci_init_queues()
1432 rt2x00dev->tx[2].limit); in rt61pci_init_queues()
1434 rt2x00dev->tx[3].limit); in rt61pci_init_queues()
1435 rt2x00mmio_register_write(rt2x00dev, TX_RING_CSR0, reg); in rt61pci_init_queues()
1437 rt2x00mmio_register_read(rt2x00dev, TX_RING_CSR1, ®); in rt61pci_init_queues()
1439 rt2x00dev->tx[0].desc_size / 4); in rt61pci_init_queues()
1440 rt2x00mmio_register_write(rt2x00dev, TX_RING_CSR1, reg); in rt61pci_init_queues()
1442 entry_priv = rt2x00dev->tx[0].entries[0].priv_data; in rt61pci_init_queues()
1443 rt2x00mmio_register_read(rt2x00dev, AC0_BASE_CSR, ®); in rt61pci_init_queues()
1446 rt2x00mmio_register_write(rt2x00dev, AC0_BASE_CSR, reg); in rt61pci_init_queues()
1448 entry_priv = rt2x00dev->tx[1].entries[0].priv_data; in rt61pci_init_queues()
1449 rt2x00mmio_register_read(rt2x00dev, AC1_BASE_CSR, ®); in rt61pci_init_queues()
1452 rt2x00mmio_register_write(rt2x00dev, AC1_BASE_CSR, reg); in rt61pci_init_queues()
1454 entry_priv = rt2x00dev->tx[2].entries[0].priv_data; in rt61pci_init_queues()
1455 rt2x00mmio_register_read(rt2x00dev, AC2_BASE_CSR, ®); in rt61pci_init_queues()
1458 rt2x00mmio_register_write(rt2x00dev, AC2_BASE_CSR, reg); in rt61pci_init_queues()
1460 entry_priv = rt2x00dev->tx[3].entries[0].priv_data; in rt61pci_init_queues()
1461 rt2x00mmio_register_read(rt2x00dev, AC3_BASE_CSR, ®); in rt61pci_init_queues()
1464 rt2x00mmio_register_write(rt2x00dev, AC3_BASE_CSR, reg); in rt61pci_init_queues()
1466 rt2x00mmio_register_read(rt2x00dev, RX_RING_CSR, ®); in rt61pci_init_queues()
1467 rt2x00_set_field32(®, RX_RING_CSR_RING_SIZE, rt2x00dev->rx->limit); in rt61pci_init_queues()
1469 rt2x00dev->rx->desc_size / 4); in rt61pci_init_queues()
1471 rt2x00mmio_register_write(rt2x00dev, RX_RING_CSR, reg); in rt61pci_init_queues()
1473 entry_priv = rt2x00dev->rx->entries[0].priv_data; in rt61pci_init_queues()
1474 rt2x00mmio_register_read(rt2x00dev, RX_BASE_CSR, ®); in rt61pci_init_queues()
1477 rt2x00mmio_register_write(rt2x00dev, RX_BASE_CSR, reg); in rt61pci_init_queues()
1479 rt2x00mmio_register_read(rt2x00dev, TX_DMA_DST_CSR, ®); in rt61pci_init_queues()
1484 rt2x00mmio_register_write(rt2x00dev, TX_DMA_DST_CSR, reg); in rt61pci_init_queues()
1486 rt2x00mmio_register_read(rt2x00dev, LOAD_TX_RING_CSR, ®); in rt61pci_init_queues()
1491 rt2x00mmio_register_write(rt2x00dev, LOAD_TX_RING_CSR, reg); in rt61pci_init_queues()
1493 rt2x00mmio_register_read(rt2x00dev, RX_CNTL_CSR, ®); in rt61pci_init_queues()
1495 rt2x00mmio_register_write(rt2x00dev, RX_CNTL_CSR, reg); in rt61pci_init_queues()
1500 static int rt61pci_init_registers(struct rt2x00_dev *rt2x00dev) in rt61pci_init_registers() argument
1504 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR0, ®); in rt61pci_init_registers()
1508 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR0, reg); in rt61pci_init_registers()
1510 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR1, ®); in rt61pci_init_registers()
1519 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR1, reg); in rt61pci_init_registers()
1524 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR2, ®); in rt61pci_init_registers()
1533 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR2, reg); in rt61pci_init_registers()
1538 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR3, ®); in rt61pci_init_registers()
1545 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR3, reg); in rt61pci_init_registers()
1547 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR7, ®); in rt61pci_init_registers()
1552 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR7, reg); in rt61pci_init_registers()
1554 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR8, ®); in rt61pci_init_registers()
1559 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR8, reg); in rt61pci_init_registers()
1561 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR9, ®); in rt61pci_init_registers()
1568 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR9, reg); in rt61pci_init_registers()
1570 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR15, 0x0000000f); in rt61pci_init_registers()
1572 rt2x00mmio_register_write(rt2x00dev, MAC_CSR6, 0x00000fff); in rt61pci_init_registers()
1574 rt2x00mmio_register_read(rt2x00dev, MAC_CSR9, ®); in rt61pci_init_registers()
1576 rt2x00mmio_register_write(rt2x00dev, MAC_CSR9, reg); in rt61pci_init_registers()
1578 rt2x00mmio_register_write(rt2x00dev, MAC_CSR10, 0x0000071c); in rt61pci_init_registers()
1580 if (rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_AWAKE)) in rt61pci_init_registers()
1583 rt2x00mmio_register_write(rt2x00dev, MAC_CSR13, 0x0000e000); in rt61pci_init_registers()
1589 rt2x00mmio_register_write(rt2x00dev, SEC_CSR0, 0x00000000); in rt61pci_init_registers()
1590 rt2x00mmio_register_write(rt2x00dev, SEC_CSR1, 0x00000000); in rt61pci_init_registers()
1591 rt2x00mmio_register_write(rt2x00dev, SEC_CSR5, 0x00000000); in rt61pci_init_registers()
1593 rt2x00mmio_register_write(rt2x00dev, PHY_CSR1, 0x000023b0); in rt61pci_init_registers()
1594 rt2x00mmio_register_write(rt2x00dev, PHY_CSR5, 0x060a100c); in rt61pci_init_registers()
1595 rt2x00mmio_register_write(rt2x00dev, PHY_CSR6, 0x00080606); in rt61pci_init_registers()
1596 rt2x00mmio_register_write(rt2x00dev, PHY_CSR7, 0x00000a08); in rt61pci_init_registers()
1598 rt2x00mmio_register_write(rt2x00dev, PCI_CFG_CSR, 0x28ca4404); in rt61pci_init_registers()
1600 rt2x00mmio_register_write(rt2x00dev, TEST_MODE_CSR, 0x00000200); in rt61pci_init_registers()
1602 rt2x00mmio_register_write(rt2x00dev, M2H_CMD_DONE_CSR, 0xffffffff); in rt61pci_init_registers()
1610 rt2x00mmio_register_write(rt2x00dev, HW_BEACON_BASE0, 0); in rt61pci_init_registers()
1611 rt2x00mmio_register_write(rt2x00dev, HW_BEACON_BASE1, 0); in rt61pci_init_registers()
1612 rt2x00mmio_register_write(rt2x00dev, HW_BEACON_BASE2, 0); in rt61pci_init_registers()
1613 rt2x00mmio_register_write(rt2x00dev, HW_BEACON_BASE3, 0); in rt61pci_init_registers()
1620 rt2x00mmio_register_read(rt2x00dev, STA_CSR0, ®); in rt61pci_init_registers()
1621 rt2x00mmio_register_read(rt2x00dev, STA_CSR1, ®); in rt61pci_init_registers()
1622 rt2x00mmio_register_read(rt2x00dev, STA_CSR2, ®); in rt61pci_init_registers()
1627 rt2x00mmio_register_read(rt2x00dev, MAC_CSR1, ®); in rt61pci_init_registers()
1630 rt2x00mmio_register_write(rt2x00dev, MAC_CSR1, reg); in rt61pci_init_registers()
1632 rt2x00mmio_register_read(rt2x00dev, MAC_CSR1, ®); in rt61pci_init_registers()
1635 rt2x00mmio_register_write(rt2x00dev, MAC_CSR1, reg); in rt61pci_init_registers()
1637 rt2x00mmio_register_read(rt2x00dev, MAC_CSR1, ®); in rt61pci_init_registers()
1639 rt2x00mmio_register_write(rt2x00dev, MAC_CSR1, reg); in rt61pci_init_registers()
1644 static int rt61pci_wait_bbp_ready(struct rt2x00_dev *rt2x00dev) in rt61pci_wait_bbp_ready() argument
1650 rt61pci_bbp_read(rt2x00dev, 0, &value); in rt61pci_wait_bbp_ready()
1656 rt2x00_err(rt2x00dev, "BBP register access failed, aborting\n"); in rt61pci_wait_bbp_ready()
1660 static int rt61pci_init_bbp(struct rt2x00_dev *rt2x00dev) in rt61pci_init_bbp() argument
1667 if (unlikely(rt61pci_wait_bbp_ready(rt2x00dev))) in rt61pci_init_bbp()
1670 rt61pci_bbp_write(rt2x00dev, 3, 0x00); in rt61pci_init_bbp()
1671 rt61pci_bbp_write(rt2x00dev, 15, 0x30); in rt61pci_init_bbp()
1672 rt61pci_bbp_write(rt2x00dev, 21, 0xc8); in rt61pci_init_bbp()
1673 rt61pci_bbp_write(rt2x00dev, 22, 0x38); in rt61pci_init_bbp()
1674 rt61pci_bbp_write(rt2x00dev, 23, 0x06); in rt61pci_init_bbp()
1675 rt61pci_bbp_write(rt2x00dev, 24, 0xfe); in rt61pci_init_bbp()
1676 rt61pci_bbp_write(rt2x00dev, 25, 0x0a); in rt61pci_init_bbp()
1677 rt61pci_bbp_write(rt2x00dev, 26, 0x0d); in rt61pci_init_bbp()
1678 rt61pci_bbp_write(rt2x00dev, 34, 0x12); in rt61pci_init_bbp()
1679 rt61pci_bbp_write(rt2x00dev, 37, 0x07); in rt61pci_init_bbp()
1680 rt61pci_bbp_write(rt2x00dev, 39, 0xf8); in rt61pci_init_bbp()
1681 rt61pci_bbp_write(rt2x00dev, 41, 0x60); in rt61pci_init_bbp()
1682 rt61pci_bbp_write(rt2x00dev, 53, 0x10); in rt61pci_init_bbp()
1683 rt61pci_bbp_write(rt2x00dev, 54, 0x18); in rt61pci_init_bbp()
1684 rt61pci_bbp_write(rt2x00dev, 60, 0x10); in rt61pci_init_bbp()
1685 rt61pci_bbp_write(rt2x00dev, 61, 0x04); in rt61pci_init_bbp()
1686 rt61pci_bbp_write(rt2x00dev, 62, 0x04); in rt61pci_init_bbp()
1687 rt61pci_bbp_write(rt2x00dev, 75, 0xfe); in rt61pci_init_bbp()
1688 rt61pci_bbp_write(rt2x00dev, 86, 0xfe); in rt61pci_init_bbp()
1689 rt61pci_bbp_write(rt2x00dev, 88, 0xfe); in rt61pci_init_bbp()
1690 rt61pci_bbp_write(rt2x00dev, 90, 0x0f); in rt61pci_init_bbp()
1691 rt61pci_bbp_write(rt2x00dev, 99, 0x00); in rt61pci_init_bbp()
1692 rt61pci_bbp_write(rt2x00dev, 102, 0x16); in rt61pci_init_bbp()
1693 rt61pci_bbp_write(rt2x00dev, 107, 0x04); in rt61pci_init_bbp()
1696 rt2x00_eeprom_read(rt2x00dev, EEPROM_BBP_START + i, &eeprom); in rt61pci_init_bbp()
1701 rt61pci_bbp_write(rt2x00dev, reg_id, value); in rt61pci_init_bbp()
1711 static void rt61pci_toggle_irq(struct rt2x00_dev *rt2x00dev, in rt61pci_toggle_irq() argument
1723 rt2x00mmio_register_read(rt2x00dev, INT_SOURCE_CSR, ®); in rt61pci_toggle_irq()
1724 rt2x00mmio_register_write(rt2x00dev, INT_SOURCE_CSR, reg); in rt61pci_toggle_irq()
1726 rt2x00mmio_register_read(rt2x00dev, MCU_INT_SOURCE_CSR, ®); in rt61pci_toggle_irq()
1727 rt2x00mmio_register_write(rt2x00dev, MCU_INT_SOURCE_CSR, reg); in rt61pci_toggle_irq()
1734 spin_lock_irqsave(&rt2x00dev->irqmask_lock, flags); in rt61pci_toggle_irq()
1736 rt2x00mmio_register_read(rt2x00dev, INT_MASK_CSR, ®); in rt61pci_toggle_irq()
1742 rt2x00mmio_register_write(rt2x00dev, INT_MASK_CSR, reg); in rt61pci_toggle_irq()
1744 rt2x00mmio_register_read(rt2x00dev, MCU_INT_MASK_CSR, ®); in rt61pci_toggle_irq()
1754 rt2x00mmio_register_write(rt2x00dev, MCU_INT_MASK_CSR, reg); in rt61pci_toggle_irq()
1756 spin_unlock_irqrestore(&rt2x00dev->irqmask_lock, flags); in rt61pci_toggle_irq()
1762 tasklet_kill(&rt2x00dev->txstatus_tasklet); in rt61pci_toggle_irq()
1763 tasklet_kill(&rt2x00dev->rxdone_tasklet); in rt61pci_toggle_irq()
1764 tasklet_kill(&rt2x00dev->autowake_tasklet); in rt61pci_toggle_irq()
1765 tasklet_kill(&rt2x00dev->tbtt_tasklet); in rt61pci_toggle_irq()
1769 static int rt61pci_enable_radio(struct rt2x00_dev *rt2x00dev) in rt61pci_enable_radio() argument
1776 if (unlikely(rt61pci_init_queues(rt2x00dev) || in rt61pci_enable_radio()
1777 rt61pci_init_registers(rt2x00dev) || in rt61pci_enable_radio()
1778 rt61pci_init_bbp(rt2x00dev))) in rt61pci_enable_radio()
1784 rt2x00mmio_register_read(rt2x00dev, RX_CNTL_CSR, ®); in rt61pci_enable_radio()
1786 rt2x00mmio_register_write(rt2x00dev, RX_CNTL_CSR, reg); in rt61pci_enable_radio()
1791 static void rt61pci_disable_radio(struct rt2x00_dev *rt2x00dev) in rt61pci_disable_radio() argument
1796 rt2x00mmio_register_write(rt2x00dev, MAC_CSR10, 0x00001818); in rt61pci_disable_radio()
1799 static int rt61pci_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state) in rt61pci_set_state() argument
1807 rt2x00mmio_register_read(rt2x00dev, MAC_CSR12, ®); in rt61pci_set_state()
1810 rt2x00mmio_register_write(rt2x00dev, MAC_CSR12, reg); in rt61pci_set_state()
1818 rt2x00mmio_register_read(rt2x00dev, MAC_CSR12, ®2); in rt61pci_set_state()
1822 rt2x00mmio_register_write(rt2x00dev, MAC_CSR12, reg); in rt61pci_set_state()
1829 static int rt61pci_set_device_state(struct rt2x00_dev *rt2x00dev, in rt61pci_set_device_state() argument
1836 retval = rt61pci_enable_radio(rt2x00dev); in rt61pci_set_device_state()
1839 rt61pci_disable_radio(rt2x00dev); in rt61pci_set_device_state()
1843 rt61pci_toggle_irq(rt2x00dev, state); in rt61pci_set_device_state()
1849 retval = rt61pci_set_state(rt2x00dev, state); in rt61pci_set_device_state()
1857 rt2x00_err(rt2x00dev, "Device failed to enter state %d (%d)\n", in rt61pci_set_device_state()
1907 TXPOWER_TO_DEV(entry->queue->rt2x00dev->tx_power)); in rt61pci_write_tx_desc()
1967 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt61pci_write_beacon() local
1977 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR9, ®); in rt61pci_write_beacon()
1980 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR9, reg); in rt61pci_write_beacon()
1990 rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_BEACON, entry->skb); in rt61pci_write_beacon()
1997 rt2x00_err(rt2x00dev, "Failure padding beacon, aborting\n"); in rt61pci_write_beacon()
2000 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR9, orig_reg); in rt61pci_write_beacon()
2005 rt2x00mmio_register_multiwrite(rt2x00dev, beacon_base, in rt61pci_write_beacon()
2007 rt2x00mmio_register_multiwrite(rt2x00dev, beacon_base + TXINFO_SIZE, in rt61pci_write_beacon()
2017 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR10, 0x00001008); in rt61pci_write_beacon()
2020 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR9, reg); in rt61pci_write_beacon()
2031 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt61pci_clear_beacon() local
2038 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR9, &orig_reg); in rt61pci_clear_beacon()
2041 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR9, reg); in rt61pci_clear_beacon()
2046 rt2x00mmio_register_write(rt2x00dev, in rt61pci_clear_beacon()
2052 rt2x00mmio_register_write(rt2x00dev, TXRX_CSR9, orig_reg); in rt61pci_clear_beacon()
2058 static int rt61pci_agc_to_rssi(struct rt2x00_dev *rt2x00dev, int rxd_w1) in rt61pci_agc_to_rssi() argument
2060 u8 offset = rt2x00dev->lna_gain; in rt61pci_agc_to_rssi()
2078 if (rt2x00dev->curr_band == IEEE80211_BAND_5GHZ) { in rt61pci_agc_to_rssi()
2089 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt61pci_fill_rxdone() local
2137 rxdesc->rssi = rt61pci_agc_to_rssi(rt2x00dev, word1); in rt61pci_fill_rxdone()
2151 static void rt61pci_txdone(struct rt2x00_dev *rt2x00dev) in rt61pci_txdone() argument
2173 for (i = 0; i < rt2x00dev->tx->limit; i++) { in rt61pci_txdone()
2174 rt2x00mmio_register_read(rt2x00dev, STA_CSR4, ®); in rt61pci_txdone()
2183 queue = rt2x00queue_get_tx_queue(rt2x00dev, type); in rt61pci_txdone()
2208 rt2x00_warn(rt2x00dev, "TX status report missed for entry %d\n", in rt61pci_txdone()
2242 static void rt61pci_wakeup(struct rt2x00_dev *rt2x00dev) in rt61pci_wakeup() argument
2244 struct rt2x00lib_conf libconf = { .conf = &rt2x00dev->hw->conf }; in rt61pci_wakeup()
2246 rt61pci_config(rt2x00dev, &libconf, IEEE80211_CONF_CHANGE_PS); in rt61pci_wakeup()
2249 static inline void rt61pci_enable_interrupt(struct rt2x00_dev *rt2x00dev, in rt61pci_enable_interrupt() argument
2258 spin_lock_irq(&rt2x00dev->irqmask_lock); in rt61pci_enable_interrupt()
2260 rt2x00mmio_register_read(rt2x00dev, INT_MASK_CSR, ®); in rt61pci_enable_interrupt()
2262 rt2x00mmio_register_write(rt2x00dev, INT_MASK_CSR, reg); in rt61pci_enable_interrupt()
2264 spin_unlock_irq(&rt2x00dev->irqmask_lock); in rt61pci_enable_interrupt()
2267 static void rt61pci_enable_mcu_interrupt(struct rt2x00_dev *rt2x00dev, in rt61pci_enable_mcu_interrupt() argument
2276 spin_lock_irq(&rt2x00dev->irqmask_lock); in rt61pci_enable_mcu_interrupt()
2278 rt2x00mmio_register_read(rt2x00dev, MCU_INT_MASK_CSR, ®); in rt61pci_enable_mcu_interrupt()
2280 rt2x00mmio_register_write(rt2x00dev, MCU_INT_MASK_CSR, reg); in rt61pci_enable_mcu_interrupt()
2282 spin_unlock_irq(&rt2x00dev->irqmask_lock); in rt61pci_enable_mcu_interrupt()
2287 struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data; in rt61pci_txstatus_tasklet() local
2288 rt61pci_txdone(rt2x00dev); in rt61pci_txstatus_tasklet()
2289 if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt61pci_txstatus_tasklet()
2290 rt61pci_enable_interrupt(rt2x00dev, INT_MASK_CSR_TXDONE); in rt61pci_txstatus_tasklet()
2295 struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data; in rt61pci_tbtt_tasklet() local
2296 rt2x00lib_beacondone(rt2x00dev); in rt61pci_tbtt_tasklet()
2297 if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt61pci_tbtt_tasklet()
2298 rt61pci_enable_interrupt(rt2x00dev, INT_MASK_CSR_BEACON_DONE); in rt61pci_tbtt_tasklet()
2303 struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data; in rt61pci_rxdone_tasklet() local
2304 if (rt2x00mmio_rxdone(rt2x00dev)) in rt61pci_rxdone_tasklet()
2305 tasklet_schedule(&rt2x00dev->rxdone_tasklet); in rt61pci_rxdone_tasklet()
2306 else if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt61pci_rxdone_tasklet()
2307 rt61pci_enable_interrupt(rt2x00dev, INT_MASK_CSR_RXDONE); in rt61pci_rxdone_tasklet()
2312 struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data; in rt61pci_autowake_tasklet() local
2313 rt61pci_wakeup(rt2x00dev); in rt61pci_autowake_tasklet()
2314 rt2x00mmio_register_write(rt2x00dev, in rt61pci_autowake_tasklet()
2316 if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt61pci_autowake_tasklet()
2317 rt61pci_enable_mcu_interrupt(rt2x00dev, MCU_INT_MASK_CSR_TWAKEUP); in rt61pci_autowake_tasklet()
2322 struct rt2x00_dev *rt2x00dev = dev_instance; in rt61pci_interrupt() local
2330 rt2x00mmio_register_read(rt2x00dev, MCU_INT_SOURCE_CSR, ®_mcu); in rt61pci_interrupt()
2331 rt2x00mmio_register_write(rt2x00dev, MCU_INT_SOURCE_CSR, reg_mcu); in rt61pci_interrupt()
2333 rt2x00mmio_register_read(rt2x00dev, INT_SOURCE_CSR, ®); in rt61pci_interrupt()
2334 rt2x00mmio_register_write(rt2x00dev, INT_SOURCE_CSR, reg); in rt61pci_interrupt()
2339 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt61pci_interrupt()
2346 tasklet_schedule(&rt2x00dev->rxdone_tasklet); in rt61pci_interrupt()
2349 tasklet_schedule(&rt2x00dev->txstatus_tasklet); in rt61pci_interrupt()
2352 tasklet_hi_schedule(&rt2x00dev->tbtt_tasklet); in rt61pci_interrupt()
2355 tasklet_schedule(&rt2x00dev->autowake_tasklet); in rt61pci_interrupt()
2369 spin_lock(&rt2x00dev->irqmask_lock); in rt61pci_interrupt()
2371 rt2x00mmio_register_read(rt2x00dev, INT_MASK_CSR, ®); in rt61pci_interrupt()
2373 rt2x00mmio_register_write(rt2x00dev, INT_MASK_CSR, reg); in rt61pci_interrupt()
2375 rt2x00mmio_register_read(rt2x00dev, MCU_INT_MASK_CSR, ®); in rt61pci_interrupt()
2377 rt2x00mmio_register_write(rt2x00dev, MCU_INT_MASK_CSR, reg); in rt61pci_interrupt()
2379 spin_unlock(&rt2x00dev->irqmask_lock); in rt61pci_interrupt()
2387 static int rt61pci_validate_eeprom(struct rt2x00_dev *rt2x00dev) in rt61pci_validate_eeprom() argument
2395 rt2x00mmio_register_read(rt2x00dev, E2PROM_CSR, ®); in rt61pci_validate_eeprom()
2397 eeprom.data = rt2x00dev; in rt61pci_validate_eeprom()
2407 eeprom_93cx6_multiread(&eeprom, EEPROM_BASE, rt2x00dev->eeprom, in rt61pci_validate_eeprom()
2413 mac = rt2x00_eeprom_addr(rt2x00dev, EEPROM_MAC_ADDR_0); in rt61pci_validate_eeprom()
2416 rt2x00_eeprom_dbg(rt2x00dev, "MAC: %pM\n", mac); in rt61pci_validate_eeprom()
2419 rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &word); in rt61pci_validate_eeprom()
2430 rt2x00_eeprom_write(rt2x00dev, EEPROM_ANTENNA, word); in rt61pci_validate_eeprom()
2431 rt2x00_eeprom_dbg(rt2x00dev, "Antenna: 0x%04x\n", word); in rt61pci_validate_eeprom()
2434 rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC, &word); in rt61pci_validate_eeprom()
2443 rt2x00_eeprom_write(rt2x00dev, EEPROM_NIC, word); in rt61pci_validate_eeprom()
2444 rt2x00_eeprom_dbg(rt2x00dev, "NIC: 0x%04x\n", word); in rt61pci_validate_eeprom()
2447 rt2x00_eeprom_read(rt2x00dev, EEPROM_LED, &word); in rt61pci_validate_eeprom()
2451 rt2x00_eeprom_write(rt2x00dev, EEPROM_LED, word); in rt61pci_validate_eeprom()
2452 rt2x00_eeprom_dbg(rt2x00dev, "Led: 0x%04x\n", word); in rt61pci_validate_eeprom()
2455 rt2x00_eeprom_read(rt2x00dev, EEPROM_FREQ, &word); in rt61pci_validate_eeprom()
2459 rt2x00_eeprom_write(rt2x00dev, EEPROM_FREQ, word); in rt61pci_validate_eeprom()
2460 rt2x00_eeprom_dbg(rt2x00dev, "Freq: 0x%04x\n", word); in rt61pci_validate_eeprom()
2463 rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_OFFSET_BG, &word); in rt61pci_validate_eeprom()
2467 rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_OFFSET_BG, word); in rt61pci_validate_eeprom()
2468 rt2x00_eeprom_dbg(rt2x00dev, "RSSI OFFSET BG: 0x%04x\n", word); in rt61pci_validate_eeprom()
2476 rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_OFFSET_BG, word); in rt61pci_validate_eeprom()
2479 rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_OFFSET_A, &word); in rt61pci_validate_eeprom()
2483 rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_OFFSET_A, word); in rt61pci_validate_eeprom()
2484 rt2x00_eeprom_dbg(rt2x00dev, "RSSI OFFSET A: 0x%04x\n", word); in rt61pci_validate_eeprom()
2492 rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_OFFSET_A, word); in rt61pci_validate_eeprom()
2498 static int rt61pci_init_eeprom(struct rt2x00_dev *rt2x00dev) in rt61pci_init_eeprom() argument
2507 rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &eeprom); in rt61pci_init_eeprom()
2513 rt2x00mmio_register_read(rt2x00dev, MAC_CSR0, ®); in rt61pci_init_eeprom()
2514 rt2x00_set_chip(rt2x00dev, rt2x00_get_field32(reg, MAC_CSR0_CHIPSET), in rt61pci_init_eeprom()
2517 if (!rt2x00_rf(rt2x00dev, RF5225) && in rt61pci_init_eeprom()
2518 !rt2x00_rf(rt2x00dev, RF5325) && in rt61pci_init_eeprom()
2519 !rt2x00_rf(rt2x00dev, RF2527) && in rt61pci_init_eeprom()
2520 !rt2x00_rf(rt2x00dev, RF2529)) { in rt61pci_init_eeprom()
2521 rt2x00_err(rt2x00dev, "Invalid RF chipset detected\n"); in rt61pci_init_eeprom()
2529 __set_bit(CAPABILITY_DOUBLE_ANTENNA, &rt2x00dev->cap_flags); in rt61pci_init_eeprom()
2534 rt2x00dev->default_ant.tx = in rt61pci_init_eeprom()
2536 rt2x00dev->default_ant.rx = in rt61pci_init_eeprom()
2543 __set_bit(CAPABILITY_FRAME_TYPE, &rt2x00dev->cap_flags); in rt61pci_init_eeprom()
2549 __set_bit(CAPABILITY_HW_BUTTON, &rt2x00dev->cap_flags); in rt61pci_init_eeprom()
2554 rt2x00_eeprom_read(rt2x00dev, EEPROM_FREQ, &eeprom); in rt61pci_init_eeprom()
2556 __set_bit(CAPABILITY_RF_SEQUENCE, &rt2x00dev->cap_flags); in rt61pci_init_eeprom()
2558 rt2x00dev->freq_offset = rt2x00_get_field16(eeprom, EEPROM_FREQ_OFFSET); in rt61pci_init_eeprom()
2563 rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC, &eeprom); in rt61pci_init_eeprom()
2566 __set_bit(CAPABILITY_EXTERNAL_LNA_A, &rt2x00dev->cap_flags); in rt61pci_init_eeprom()
2568 __set_bit(CAPABILITY_EXTERNAL_LNA_BG, &rt2x00dev->cap_flags); in rt61pci_init_eeprom()
2575 if (rt2x00_rf(rt2x00dev, RF2529) && in rt61pci_init_eeprom()
2576 !rt2x00_has_cap_double_antenna(rt2x00dev)) { in rt61pci_init_eeprom()
2577 rt2x00dev->default_ant.rx = in rt61pci_init_eeprom()
2579 rt2x00dev->default_ant.tx = in rt61pci_init_eeprom()
2583 rt2x00dev->default_ant.tx = ANTENNA_SW_DIVERSITY; in rt61pci_init_eeprom()
2585 rt2x00dev->default_ant.rx = ANTENNA_SW_DIVERSITY; in rt61pci_init_eeprom()
2594 rt2x00_eeprom_read(rt2x00dev, EEPROM_LED, &eeprom); in rt61pci_init_eeprom()
2597 rt61pci_init_led(rt2x00dev, &rt2x00dev->led_radio, LED_TYPE_RADIO); in rt61pci_init_eeprom()
2598 rt61pci_init_led(rt2x00dev, &rt2x00dev->led_assoc, LED_TYPE_ASSOC); in rt61pci_init_eeprom()
2600 rt61pci_init_led(rt2x00dev, &rt2x00dev->led_qual, in rt61pci_init_eeprom()
2603 rt2x00_set_field16(&rt2x00dev->led_mcu_reg, MCU_LEDCS_LED_MODE, value); in rt61pci_init_eeprom()
2604 rt2x00_set_field16(&rt2x00dev->led_mcu_reg, MCU_LEDCS_POLARITY_GPIO_0, in rt61pci_init_eeprom()
2607 rt2x00_set_field16(&rt2x00dev->led_mcu_reg, MCU_LEDCS_POLARITY_GPIO_1, in rt61pci_init_eeprom()
2610 rt2x00_set_field16(&rt2x00dev->led_mcu_reg, MCU_LEDCS_POLARITY_GPIO_2, in rt61pci_init_eeprom()
2613 rt2x00_set_field16(&rt2x00dev->led_mcu_reg, MCU_LEDCS_POLARITY_GPIO_3, in rt61pci_init_eeprom()
2616 rt2x00_set_field16(&rt2x00dev->led_mcu_reg, MCU_LEDCS_POLARITY_GPIO_4, in rt61pci_init_eeprom()
2619 rt2x00_set_field16(&rt2x00dev->led_mcu_reg, MCU_LEDCS_POLARITY_ACT, in rt61pci_init_eeprom()
2621 rt2x00_set_field16(&rt2x00dev->led_mcu_reg, MCU_LEDCS_POLARITY_READY_BG, in rt61pci_init_eeprom()
2624 rt2x00_set_field16(&rt2x00dev->led_mcu_reg, MCU_LEDCS_POLARITY_READY_A, in rt61pci_init_eeprom()
2746 static int rt61pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev) in rt61pci_probe_hw_mode() argument
2748 struct hw_mode_spec *spec = &rt2x00dev->spec; in rt61pci_probe_hw_mode()
2756 rt2x00dev->hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; in rt61pci_probe_hw_mode()
2761 ieee80211_hw_set(rt2x00dev->hw, PS_NULLFUNC_STACK); in rt61pci_probe_hw_mode()
2762 ieee80211_hw_set(rt2x00dev->hw, SUPPORTS_PS); in rt61pci_probe_hw_mode()
2763 ieee80211_hw_set(rt2x00dev->hw, HOST_BROADCAST_PS_BUFFERING); in rt61pci_probe_hw_mode()
2764 ieee80211_hw_set(rt2x00dev->hw, SIGNAL_DBM); in rt61pci_probe_hw_mode()
2766 SET_IEEE80211_DEV(rt2x00dev->hw, rt2x00dev->dev); in rt61pci_probe_hw_mode()
2767 SET_IEEE80211_PERM_ADDR(rt2x00dev->hw, in rt61pci_probe_hw_mode()
2768 rt2x00_eeprom_addr(rt2x00dev, in rt61pci_probe_hw_mode()
2780 rt2x00dev->hw->max_rates = 1; in rt61pci_probe_hw_mode()
2781 rt2x00dev->hw->max_report_rates = 7; in rt61pci_probe_hw_mode()
2782 rt2x00dev->hw->max_rate_tries = 1; in rt61pci_probe_hw_mode()
2790 if (!rt2x00_has_cap_rf_sequence(rt2x00dev)) { in rt61pci_probe_hw_mode()
2798 if (rt2x00_rf(rt2x00dev, RF5225) || rt2x00_rf(rt2x00dev, RF5325)) { in rt61pci_probe_hw_mode()
2812 tx_power = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_G_START); in rt61pci_probe_hw_mode()
2819 tx_power = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A_START); in rt61pci_probe_hw_mode()
2830 static int rt61pci_probe_hw(struct rt2x00_dev *rt2x00dev) in rt61pci_probe_hw() argument
2838 rt2x00mmio_register_write(rt2x00dev, SOFT_RESET_CSR, 0x00000007); in rt61pci_probe_hw()
2843 retval = rt61pci_validate_eeprom(rt2x00dev); in rt61pci_probe_hw()
2847 retval = rt61pci_init_eeprom(rt2x00dev); in rt61pci_probe_hw()
2855 rt2x00mmio_register_read(rt2x00dev, MAC_CSR13, ®); in rt61pci_probe_hw()
2857 rt2x00mmio_register_write(rt2x00dev, MAC_CSR13, reg); in rt61pci_probe_hw()
2862 retval = rt61pci_probe_hw_mode(rt2x00dev); in rt61pci_probe_hw()
2870 __set_bit(CAPABILITY_CONTROL_FILTERS, &rt2x00dev->cap_flags); in rt61pci_probe_hw()
2875 __set_bit(REQUIRE_FIRMWARE, &rt2x00dev->cap_flags); in rt61pci_probe_hw()
2876 __set_bit(REQUIRE_DMA, &rt2x00dev->cap_flags); in rt61pci_probe_hw()
2878 __set_bit(CAPABILITY_HW_CRYPTO, &rt2x00dev->cap_flags); in rt61pci_probe_hw()
2879 __set_bit(CAPABILITY_LINK_TUNING, &rt2x00dev->cap_flags); in rt61pci_probe_hw()
2884 rt2x00dev->rssi_offset = DEFAULT_RSSI_OFFSET; in rt61pci_probe_hw()
2896 struct rt2x00_dev *rt2x00dev = hw->priv; in rt61pci_conf_tx() local
2920 queue = rt2x00queue_get_tx_queue(rt2x00dev, queue_idx); in rt61pci_conf_tx()
2927 rt2x00mmio_register_read(rt2x00dev, offset, ®); in rt61pci_conf_tx()
2929 rt2x00mmio_register_write(rt2x00dev, offset, reg); in rt61pci_conf_tx()
2935 rt2x00mmio_register_read(rt2x00dev, AIFSN_CSR, ®); in rt61pci_conf_tx()
2937 rt2x00mmio_register_write(rt2x00dev, AIFSN_CSR, reg); in rt61pci_conf_tx()
2939 rt2x00mmio_register_read(rt2x00dev, CWMIN_CSR, ®); in rt61pci_conf_tx()
2941 rt2x00mmio_register_write(rt2x00dev, CWMIN_CSR, reg); in rt61pci_conf_tx()
2943 rt2x00mmio_register_read(rt2x00dev, CWMAX_CSR, ®); in rt61pci_conf_tx()
2945 rt2x00mmio_register_write(rt2x00dev, CWMAX_CSR, reg); in rt61pci_conf_tx()
2952 struct rt2x00_dev *rt2x00dev = hw->priv; in rt61pci_get_tsf() local
2956 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR13, ®); in rt61pci_get_tsf()
2958 rt2x00mmio_register_read(rt2x00dev, TXRX_CSR12, ®); in rt61pci_get_tsf()