602
602
EXPORT_SYMBOL_GPL(rt2800_process_rxwi);
604
static bool rt2800_txdone_entry_check(struct queue_entry *entry, u32 reg)
609
int tx_wcid, tx_ack, tx_pid;
611
if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) ||
612
!test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags)) {
613
WARNING(entry->queue->rt2x00dev,
614
"Data pending for entry %u in queue %u\n",
615
entry->entry_idx, entry->queue->qid);
620
wcid = rt2x00_get_field32(reg, TX_STA_FIFO_WCID);
621
ack = rt2x00_get_field32(reg, TX_STA_FIFO_TX_ACK_REQUIRED);
622
pid = rt2x00_get_field32(reg, TX_STA_FIFO_PID_TYPE);
625
* This frames has returned with an IO error,
626
* so the status report is not intended for this
629
if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags)) {
630
rt2x00lib_txdone_noinfo(entry, TXDONE_FAILURE);
635
* Validate if this TX status report is intended for
636
* this entry by comparing the WCID/ACK/PID fields.
638
txwi = rt2800_drv_get_txwi(entry);
640
rt2x00_desc_read(txwi, 1, &word);
641
tx_wcid = rt2x00_get_field32(word, TXWI_W1_WIRELESS_CLI_ID);
642
tx_ack = rt2x00_get_field32(word, TXWI_W1_ACK);
643
tx_pid = rt2x00_get_field32(word, TXWI_W1_PACKETID);
645
if ((wcid != tx_wcid) || (ack != tx_ack) || (pid != tx_pid)) {
646
WARNING(entry->queue->rt2x00dev,
647
"TX status report missed for queue %d entry %d\n",
648
entry->queue->qid, entry->entry_idx);
649
rt2x00lib_txdone_noinfo(entry, TXDONE_UNKNOWN);
656
void rt2800_txdone_entry(struct queue_entry *entry, u32 status)
604
void rt2800_txdone_entry(struct queue_entry *entry, u32 status, __le32 *txwi)
658
606
struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
659
607
struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
1019
911
* Configuration handlers.
1021
static void rt2800_config_wcid_attr(struct rt2x00_dev *rt2x00dev,
1022
struct rt2x00lib_crypto *crypto,
1023
struct ieee80211_key_conf *key)
913
static void rt2800_config_wcid(struct rt2x00_dev *rt2x00dev,
1025
917
struct mac_wcid_entry wcid_entry;
920
offset = MAC_WCID_ENTRY(wcid);
922
memset(&wcid_entry, 0xff, sizeof(wcid_entry));
924
memcpy(wcid_entry.mac, address, ETH_ALEN);
926
rt2800_register_multiwrite(rt2x00dev, offset,
927
&wcid_entry, sizeof(wcid_entry));
930
static void rt2800_delete_wcid_attr(struct rt2x00_dev *rt2x00dev, int wcid)
933
offset = MAC_WCID_ATTR_ENTRY(wcid);
934
rt2800_register_write(rt2x00dev, offset, 0);
937
static void rt2800_config_wcid_attr_bssidx(struct rt2x00_dev *rt2x00dev,
938
int wcid, u32 bssidx)
940
u32 offset = MAC_WCID_ATTR_ENTRY(wcid);
944
* The BSS Idx numbers is split in a main value of 3 bits,
945
* and a extended field for adding one additional bit to the value.
947
rt2800_register_read(rt2x00dev, offset, ®);
948
rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_BSS_IDX, (bssidx & 0x7));
949
rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_BSS_IDX_EXT,
950
(bssidx & 0x8) >> 3);
951
rt2800_register_write(rt2x00dev, offset, reg);
954
static void rt2800_config_wcid_attr_cipher(struct rt2x00_dev *rt2x00dev,
955
struct rt2x00lib_crypto *crypto,
956
struct ieee80211_key_conf *key)
1026
958
struct mac_iveiv_entry iveiv_entry;
1177
1115
* Update WCID information
1179
rt2800_config_wcid_attr(rt2x00dev, crypto, key);
1117
rt2800_config_wcid_attr_cipher(rt2x00dev, crypto, key);
1183
1121
EXPORT_SYMBOL_GPL(rt2800_config_pairwise_key);
1123
int rt2800_sta_add(struct rt2x00_dev *rt2x00dev, struct ieee80211_vif *vif,
1124
struct ieee80211_sta *sta)
1127
struct rt2x00_sta *sta_priv = sta_to_rt2x00_sta(sta);
1130
* Find next free WCID.
1132
wcid = rt2800_find_wcid(rt2x00dev);
1135
* Store selected wcid even if it is invalid so that we can
1136
* later decide if the STA is uploaded into the hw.
1138
sta_priv->wcid = wcid;
1141
* No space left in the device, however, we can still communicate
1142
* with the STA -> No error.
1148
* Clean up WCID attributes and write STA address to the device.
1150
rt2800_delete_wcid_attr(rt2x00dev, wcid);
1151
rt2800_config_wcid(rt2x00dev, sta->addr, wcid);
1152
rt2800_config_wcid_attr_bssidx(rt2x00dev, wcid,
1153
rt2x00lib_get_bssidx(rt2x00dev, vif));
1156
EXPORT_SYMBOL_GPL(rt2800_sta_add);
1158
int rt2800_sta_remove(struct rt2x00_dev *rt2x00dev, int wcid)
1161
* Remove WCID entry, no need to clean the attributes as they will
1162
* get renewed when the WCID is reused.
1164
rt2800_config_wcid(rt2x00dev, NULL, wcid);
1168
EXPORT_SYMBOL_GPL(rt2800_sta_remove);
1185
1170
void rt2800_config_filter(struct rt2x00_dev *rt2x00dev,
1186
1171
const unsigned int filter_flags)
1442
1427
EXPORT_SYMBOL_GPL(rt2800_config_erp);
1429
static void rt2800_config_3572bt_ant(struct rt2x00_dev *rt2x00dev)
1433
u8 led_ctrl, led_g_mode, led_r_mode;
1435
rt2800_register_read(rt2x00dev, GPIO_SWITCH, ®);
1436
if (rt2x00dev->curr_band == IEEE80211_BAND_5GHZ) {
1437
rt2x00_set_field32(®, GPIO_SWITCH_0, 1);
1438
rt2x00_set_field32(®, GPIO_SWITCH_1, 1);
1440
rt2x00_set_field32(®, GPIO_SWITCH_0, 0);
1441
rt2x00_set_field32(®, GPIO_SWITCH_1, 0);
1443
rt2800_register_write(rt2x00dev, GPIO_SWITCH, reg);
1445
rt2800_register_read(rt2x00dev, LED_CFG, ®);
1446
led_g_mode = rt2x00_get_field32(reg, LED_CFG_LED_POLAR) ? 3 : 0;
1447
led_r_mode = rt2x00_get_field32(reg, LED_CFG_LED_POLAR) ? 0 : 3;
1448
if (led_g_mode != rt2x00_get_field32(reg, LED_CFG_G_LED_MODE) ||
1449
led_r_mode != rt2x00_get_field32(reg, LED_CFG_R_LED_MODE)) {
1450
rt2x00_eeprom_read(rt2x00dev, EEPROM_FREQ, &eeprom);
1451
led_ctrl = rt2x00_get_field16(eeprom, EEPROM_FREQ_LED_MODE);
1452
if (led_ctrl == 0 || led_ctrl > 0x40) {
1453
rt2x00_set_field32(®, LED_CFG_G_LED_MODE, led_g_mode);
1454
rt2x00_set_field32(®, LED_CFG_R_LED_MODE, led_r_mode);
1455
rt2800_register_write(rt2x00dev, LED_CFG, reg);
1457
rt2800_mcu_request(rt2x00dev, MCU_BAND_SELECT, 0xff,
1458
(led_g_mode << 2) | led_r_mode, 1);
1444
1463
static void rt2800_set_ant_diversity(struct rt2x00_dev *rt2x00dev,
1445
1464
enum antenna ant)
1638
1673
rt2800_rfcsr_write(rt2x00dev, 7, rfcsr);
1676
static void rt2800_config_channel_rf3052(struct rt2x00_dev *rt2x00dev,
1677
struct ieee80211_conf *conf,
1678
struct rf_channel *rf,
1679
struct channel_info *info)
1684
if (rf->channel <= 14) {
1685
rt2800_bbp_write(rt2x00dev, 25, 0x15);
1686
rt2800_bbp_write(rt2x00dev, 26, 0x85);
1688
rt2800_bbp_write(rt2x00dev, 25, 0x09);
1689
rt2800_bbp_write(rt2x00dev, 26, 0xff);
1692
rt2800_rfcsr_write(rt2x00dev, 2, rf->rf1);
1693
rt2800_rfcsr_write(rt2x00dev, 3, rf->rf3);
1695
rt2800_rfcsr_read(rt2x00dev, 6, &rfcsr);
1696
rt2x00_set_field8(&rfcsr, RFCSR6_R1, rf->rf2);
1697
if (rf->channel <= 14)
1698
rt2x00_set_field8(&rfcsr, RFCSR6_TXDIV, 2);
1700
rt2x00_set_field8(&rfcsr, RFCSR6_TXDIV, 1);
1701
rt2800_rfcsr_write(rt2x00dev, 6, rfcsr);
1703
rt2800_rfcsr_read(rt2x00dev, 5, &rfcsr);
1704
if (rf->channel <= 14)
1705
rt2x00_set_field8(&rfcsr, RFCSR5_R1, 1);
1707
rt2x00_set_field8(&rfcsr, RFCSR5_R1, 2);
1708
rt2800_rfcsr_write(rt2x00dev, 5, rfcsr);
1710
rt2800_rfcsr_read(rt2x00dev, 12, &rfcsr);
1711
if (rf->channel <= 14) {
1712
rt2x00_set_field8(&rfcsr, RFCSR12_DR0, 3);
1713
rt2x00_set_field8(&rfcsr, RFCSR12_TX_POWER,
1714
(info->default_power1 & 0x3) |
1715
((info->default_power1 & 0xC) << 1));
1717
rt2x00_set_field8(&rfcsr, RFCSR12_DR0, 7);
1718
rt2x00_set_field8(&rfcsr, RFCSR12_TX_POWER,
1719
(info->default_power1 & 0x3) |
1720
((info->default_power1 & 0xC) << 1));
1722
rt2800_rfcsr_write(rt2x00dev, 12, rfcsr);
1724
rt2800_rfcsr_read(rt2x00dev, 13, &rfcsr);
1725
if (rf->channel <= 14) {
1726
rt2x00_set_field8(&rfcsr, RFCSR13_DR0, 3);
1727
rt2x00_set_field8(&rfcsr, RFCSR13_TX_POWER,
1728
(info->default_power2 & 0x3) |
1729
((info->default_power2 & 0xC) << 1));
1731
rt2x00_set_field8(&rfcsr, RFCSR13_DR0, 7);
1732
rt2x00_set_field8(&rfcsr, RFCSR13_TX_POWER,
1733
(info->default_power2 & 0x3) |
1734
((info->default_power2 & 0xC) << 1));
1736
rt2800_rfcsr_write(rt2x00dev, 13, rfcsr);
1738
rt2800_rfcsr_read(rt2x00dev, 1, &rfcsr);
1739
rt2x00_set_field8(&rfcsr, RFCSR1_RF_BLOCK_EN, 1);
1740
rt2x00_set_field8(&rfcsr, RFCSR1_RX0_PD, 0);
1741
rt2x00_set_field8(&rfcsr, RFCSR1_TX0_PD, 0);
1742
rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 0);
1743
rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 0);
1744
if (test_bit(CAPABILITY_BT_COEXIST, &rt2x00dev->cap_flags)) {
1745
if (rf->channel <= 14) {
1746
rt2x00_set_field8(&rfcsr, RFCSR1_RX0_PD, 1);
1747
rt2x00_set_field8(&rfcsr, RFCSR1_TX0_PD, 1);
1749
rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 1);
1750
rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD, 1);
1752
switch (rt2x00dev->default_ant.tx_chain_num) {
1754
rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 1);
1756
rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD, 1);
1760
switch (rt2x00dev->default_ant.rx_chain_num) {
1762
rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 1);
1764
rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 1);
1768
rt2800_rfcsr_write(rt2x00dev, 1, rfcsr);
1770
rt2800_rfcsr_read(rt2x00dev, 23, &rfcsr);
1771
rt2x00_set_field8(&rfcsr, RFCSR23_FREQ_OFFSET, rt2x00dev->freq_offset);
1772
rt2800_rfcsr_write(rt2x00dev, 23, rfcsr);
1774
rt2800_rfcsr_write(rt2x00dev, 24,
1775
rt2x00dev->calibration[conf_is_ht40(conf)]);
1776
rt2800_rfcsr_write(rt2x00dev, 31,
1777
rt2x00dev->calibration[conf_is_ht40(conf)]);
1779
if (rf->channel <= 14) {
1780
rt2800_rfcsr_write(rt2x00dev, 7, 0xd8);
1781
rt2800_rfcsr_write(rt2x00dev, 9, 0xc3);
1782
rt2800_rfcsr_write(rt2x00dev, 10, 0xf1);
1783
rt2800_rfcsr_write(rt2x00dev, 11, 0xb9);
1784
rt2800_rfcsr_write(rt2x00dev, 15, 0x53);
1785
rt2800_rfcsr_write(rt2x00dev, 16, 0x4c);
1786
rt2800_rfcsr_write(rt2x00dev, 17, 0x23);
1787
rt2800_rfcsr_write(rt2x00dev, 19, 0x93);
1788
rt2800_rfcsr_write(rt2x00dev, 20, 0xb3);
1789
rt2800_rfcsr_write(rt2x00dev, 25, 0x15);
1790
rt2800_rfcsr_write(rt2x00dev, 26, 0x85);
1791
rt2800_rfcsr_write(rt2x00dev, 27, 0x00);
1792
rt2800_rfcsr_write(rt2x00dev, 29, 0x9b);
1794
rt2800_rfcsr_write(rt2x00dev, 7, 0x14);
1795
rt2800_rfcsr_write(rt2x00dev, 9, 0xc0);
1796
rt2800_rfcsr_write(rt2x00dev, 10, 0xf1);
1797
rt2800_rfcsr_write(rt2x00dev, 11, 0x00);
1798
rt2800_rfcsr_write(rt2x00dev, 15, 0x43);
1799
rt2800_rfcsr_write(rt2x00dev, 16, 0x7a);
1800
rt2800_rfcsr_write(rt2x00dev, 17, 0x23);
1801
if (rf->channel <= 64) {
1802
rt2800_rfcsr_write(rt2x00dev, 19, 0xb7);
1803
rt2800_rfcsr_write(rt2x00dev, 20, 0xf6);
1804
rt2800_rfcsr_write(rt2x00dev, 25, 0x3d);
1805
} else if (rf->channel <= 128) {
1806
rt2800_rfcsr_write(rt2x00dev, 19, 0x74);
1807
rt2800_rfcsr_write(rt2x00dev, 20, 0xf4);
1808
rt2800_rfcsr_write(rt2x00dev, 25, 0x01);
1810
rt2800_rfcsr_write(rt2x00dev, 19, 0x72);
1811
rt2800_rfcsr_write(rt2x00dev, 20, 0xf3);
1812
rt2800_rfcsr_write(rt2x00dev, 25, 0x01);
1814
rt2800_rfcsr_write(rt2x00dev, 26, 0x87);
1815
rt2800_rfcsr_write(rt2x00dev, 27, 0x01);
1816
rt2800_rfcsr_write(rt2x00dev, 29, 0x9f);
1819
rt2800_register_read(rt2x00dev, GPIO_CTRL_CFG, ®);
1820
rt2x00_set_field32(®, GPIO_CTRL_CFG_GPIOD_BIT7, 0);
1821
if (rf->channel <= 14)
1822
rt2x00_set_field32(®, GPIO_CTRL_CFG_BIT7, 1);
1824
rt2x00_set_field32(®, GPIO_CTRL_CFG_BIT7, 0);
1825
rt2800_register_write(rt2x00dev, GPIO_CTRL_CFG, reg);
1827
rt2800_rfcsr_read(rt2x00dev, 7, &rfcsr);
1828
rt2x00_set_field8(&rfcsr, RFCSR7_RF_TUNING, 1);
1829
rt2800_rfcsr_write(rt2x00dev, 7, rfcsr);
1642
1832
#define RT5390_POWER_BOUND 0x27
1643
1833
#define RT5390_FREQ_OFFSET_BOUND 0x5f
3117
3328
rt2800_rfcsr_write(rt2x00dev, 29, 0x8f);
3118
3329
rt2800_rfcsr_write(rt2x00dev, 30, 0x20);
3119
3330
rt2800_rfcsr_write(rt2x00dev, 31, 0x0f);
3331
} else if (rt2x00_rt(rt2x00dev, RT3572)) {
3332
rt2800_rfcsr_write(rt2x00dev, 0, 0x70);
3333
rt2800_rfcsr_write(rt2x00dev, 1, 0x81);
3334
rt2800_rfcsr_write(rt2x00dev, 2, 0xf1);
3335
rt2800_rfcsr_write(rt2x00dev, 3, 0x02);
3336
rt2800_rfcsr_write(rt2x00dev, 4, 0x4c);
3337
rt2800_rfcsr_write(rt2x00dev, 5, 0x05);
3338
rt2800_rfcsr_write(rt2x00dev, 6, 0x4a);
3339
rt2800_rfcsr_write(rt2x00dev, 7, 0xd8);
3340
rt2800_rfcsr_write(rt2x00dev, 9, 0xc3);
3341
rt2800_rfcsr_write(rt2x00dev, 10, 0xf1);
3342
rt2800_rfcsr_write(rt2x00dev, 11, 0xb9);
3343
rt2800_rfcsr_write(rt2x00dev, 12, 0x70);
3344
rt2800_rfcsr_write(rt2x00dev, 13, 0x65);
3345
rt2800_rfcsr_write(rt2x00dev, 14, 0xa0);
3346
rt2800_rfcsr_write(rt2x00dev, 15, 0x53);
3347
rt2800_rfcsr_write(rt2x00dev, 16, 0x4c);
3348
rt2800_rfcsr_write(rt2x00dev, 17, 0x23);
3349
rt2800_rfcsr_write(rt2x00dev, 18, 0xac);
3350
rt2800_rfcsr_write(rt2x00dev, 19, 0x93);
3351
rt2800_rfcsr_write(rt2x00dev, 20, 0xb3);
3352
rt2800_rfcsr_write(rt2x00dev, 21, 0xd0);
3353
rt2800_rfcsr_write(rt2x00dev, 22, 0x00);
3354
rt2800_rfcsr_write(rt2x00dev, 23, 0x3c);
3355
rt2800_rfcsr_write(rt2x00dev, 24, 0x16);
3356
rt2800_rfcsr_write(rt2x00dev, 25, 0x15);
3357
rt2800_rfcsr_write(rt2x00dev, 26, 0x85);
3358
rt2800_rfcsr_write(rt2x00dev, 27, 0x00);
3359
rt2800_rfcsr_write(rt2x00dev, 28, 0x00);
3360
rt2800_rfcsr_write(rt2x00dev, 29, 0x9b);
3361
rt2800_rfcsr_write(rt2x00dev, 30, 0x09);
3362
rt2800_rfcsr_write(rt2x00dev, 31, 0x10);
3120
3363
} else if (rt2800_is_305x_soc(rt2x00dev)) {
3121
3364
rt2800_rfcsr_write(rt2x00dev, 0, 0x50);
3122
3365
rt2800_rfcsr_write(rt2x00dev, 1, 0x01);