aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorLarry Finger <Larry.Finger@lwfinger.net>2014-03-04 17:53:47 -0500
committerJohn W. Linville <linville@tuxdriver.com>2014-03-06 14:29:56 -0500
commitf3355dd9f7c261d2a3e505ba5c62ffe3cd4df97a (patch)
treebeea2255a875b3917b3df64ec42585c2ffae6c93 /drivers/net/wireless
parent997bc71a3601b25dbbe3ac75b77b4f49582c0ae5 (diff)
rtlwifi: rtl8192ce: rtl8192cu: rtl8192de: rtl8192se: rtl8723ae: rtl8723be: rtl8188eu: Modify for new API
The addition of a driver for the RTL8821AE requires a new API for the fill_tx_desc() and set_desc() callback routines. This commit makes the appropriate modifications in all the other drivers. Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c2
-rw-r--r--drivers/net/wireless/rtlwifi/pci.c64
-rw-r--r--drivers/net/wireless/rtlwifi/pci.h10
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/trx.c8
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/trx.h8
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/trx.c5
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/trx.h7
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/trx.c2
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/trx.h2
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192de/trx.c5
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192de/trx.h7
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192se/trx.c5
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192se/trx.h8
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8723ae/trx.c5
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8723ae/trx.h7
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8723be/trx.c5
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8723be/trx.h7
-rw-r--r--drivers/net/wireless/rtlwifi/usb.c2
-rw-r--r--drivers/net/wireless/rtlwifi/wifi.h201
19 files changed, 282 insertions, 78 deletions
diff --git a/drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c b/drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c
index 9e1217f2c966..b6722de64a31 100644
--- a/drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c
+++ b/drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c
@@ -980,7 +980,7 @@ void exhalbtc_set_chip_type(u8 chip_type)
980 case BT_RTL8723A: 980 case BT_RTL8723A:
981 gl_bt_coexist.board_info.bt_chip_type = BTC_CHIP_RTL8723A; 981 gl_bt_coexist.board_info.bt_chip_type = BTC_CHIP_RTL8723A;
982 break; 982 break;
983 case BT_RTL8821: 983 case BT_RTL8821A:
984 gl_bt_coexist.board_info.bt_chip_type = BTC_CHIP_RTL8821; 984 gl_bt_coexist.board_info.bt_chip_type = BTC_CHIP_RTL8821;
985 break; 985 break;
986 case BT_RTL8723B: 986 case BT_RTL8723B:
diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c
index 257726860a43..f26f4ffc771d 100644
--- a/drivers/net/wireless/rtlwifi/pci.c
+++ b/drivers/net/wireless/rtlwifi/pci.c
@@ -811,19 +811,19 @@ done:
811 if (pci_dma_mapping_error(rtlpci->pdev, bufferaddress)) 811 if (pci_dma_mapping_error(rtlpci->pdev, bufferaddress))
812 return; 812 return;
813 tmp_one = 1; 813 tmp_one = 1;
814 rtlpriv->cfg->ops->set_desc((u8 *) pdesc, false, 814 rtlpriv->cfg->ops->set_desc(hw, (u8 *)pdesc, false,
815 HW_DESC_RXBUFF_ADDR, 815 HW_DESC_RXBUFF_ADDR,
816 (u8 *)&bufferaddress); 816 (u8 *)&bufferaddress);
817 rtlpriv->cfg->ops->set_desc((u8 *)pdesc, false, 817 rtlpriv->cfg->ops->set_desc(hw, (u8 *)pdesc, false,
818 HW_DESC_RXPKT_LEN, 818 HW_DESC_RXPKT_LEN,
819 (u8 *)&rtlpci->rxbuffersize); 819 (u8 *)&rtlpci->rxbuffersize);
820 820
821 if (index == rtlpci->rxringcount - 1) 821 if (index == rtlpci->rxringcount - 1)
822 rtlpriv->cfg->ops->set_desc((u8 *)pdesc, false, 822 rtlpriv->cfg->ops->set_desc(hw, (u8 *)pdesc, false,
823 HW_DESC_RXERO, 823 HW_DESC_RXERO,
824 &tmp_one); 824 &tmp_one);
825 825
826 rtlpriv->cfg->ops->set_desc((u8 *)pdesc, false, HW_DESC_RXOWN, 826 rtlpriv->cfg->ops->set_desc(hw, (u8 *)pdesc, false, HW_DESC_RXOWN,
827 &tmp_one); 827 &tmp_one);
828 828
829 index = (index + 1) % rtlpci->rxringcount; 829 index = (index + 1) % rtlpci->rxringcount;
@@ -983,6 +983,8 @@ static void _rtl_pci_prepare_bcn_tasklet(struct ieee80211_hw *hw)
983 struct sk_buff *pskb = NULL; 983 struct sk_buff *pskb = NULL;
984 struct rtl_tx_desc *pdesc = NULL; 984 struct rtl_tx_desc *pdesc = NULL;
985 struct rtl_tcb_desc tcb_desc; 985 struct rtl_tcb_desc tcb_desc;
986 /*This is for new trx flow*/
987 struct rtl_tx_buffer_desc *pbuffer_desc = NULL;
986 u8 temp_one = 1; 988 u8 temp_one = 1;
987 989
988 memset(&tcb_desc, 0, sizeof(struct rtl_tcb_desc)); 990 memset(&tcb_desc, 0, sizeof(struct rtl_tcb_desc));
@@ -1004,11 +1006,12 @@ static void _rtl_pci_prepare_bcn_tasklet(struct ieee80211_hw *hw)
1004 info = IEEE80211_SKB_CB(pskb); 1006 info = IEEE80211_SKB_CB(pskb);
1005 pdesc = &ring->desc[0]; 1007 pdesc = &ring->desc[0];
1006 rtlpriv->cfg->ops->fill_tx_desc(hw, hdr, (u8 *) pdesc, 1008 rtlpriv->cfg->ops->fill_tx_desc(hw, hdr, (u8 *) pdesc,
1007 info, NULL, pskb, BEACON_QUEUE, &tcb_desc); 1009 (u8 *)pbuffer_desc, info, NULL, pskb,
1010 BEACON_QUEUE, &tcb_desc);
1008 1011
1009 __skb_queue_tail(&ring->queue, pskb); 1012 __skb_queue_tail(&ring->queue, pskb);
1010 1013
1011 rtlpriv->cfg->ops->set_desc((u8 *) pdesc, true, HW_DESC_OWN, 1014 rtlpriv->cfg->ops->set_desc(hw, (u8 *)pdesc, true, HW_DESC_OWN,
1012 &temp_one); 1015 &temp_one);
1013 1016
1014 return; 1017 return;
@@ -1113,7 +1116,7 @@ static int _rtl_pci_init_tx_ring(struct ieee80211_hw *hw,
1113 ((i + 1) % entries) * 1116 ((i + 1) % entries) *
1114 sizeof(*ring); 1117 sizeof(*ring);
1115 1118
1116 rtlpriv->cfg->ops->set_desc((u8 *)&(ring[i]), 1119 rtlpriv->cfg->ops->set_desc(hw, (u8 *)&(ring[i]),
1117 true, HW_DESC_TX_NEXTDESC_ADDR, 1120 true, HW_DESC_TX_NEXTDESC_ADDR,
1118 (u8 *)&nextdescaddress); 1121 (u8 *)&nextdescaddress);
1119 } 1122 }
@@ -1188,19 +1191,19 @@ static int _rtl_pci_init_rx_ring(struct ieee80211_hw *hw)
1188 dev_kfree_skb_any(skb); 1191 dev_kfree_skb_any(skb);
1189 return 1; 1192 return 1;
1190 } 1193 }
1191 rtlpriv->cfg->ops->set_desc((u8 *)entry, false, 1194 rtlpriv->cfg->ops->set_desc(hw, (u8 *)entry, false,
1192 HW_DESC_RXBUFF_ADDR, 1195 HW_DESC_RXBUFF_ADDR,
1193 (u8 *)&bufferaddress); 1196 (u8 *)&bufferaddress);
1194 rtlpriv->cfg->ops->set_desc((u8 *)entry, false, 1197 rtlpriv->cfg->ops->set_desc(hw, (u8 *)entry, false,
1195 HW_DESC_RXPKT_LEN, 1198 HW_DESC_RXPKT_LEN,
1196 (u8 *)&rtlpci-> 1199 (u8 *)&rtlpci->
1197 rxbuffersize); 1200 rxbuffersize);
1198 rtlpriv->cfg->ops->set_desc((u8 *) entry, false, 1201 rtlpriv->cfg->ops->set_desc(hw, (u8 *)entry, false,
1199 HW_DESC_RXOWN, 1202 HW_DESC_RXOWN,
1200 &tmp_one); 1203 &tmp_one);
1201 } 1204 }
1202 1205
1203 rtlpriv->cfg->ops->set_desc((u8 *) entry, false, 1206 rtlpriv->cfg->ops->set_desc(hw, (u8 *)entry, false,
1204 HW_DESC_RXERO, &tmp_one); 1207 HW_DESC_RXERO, &tmp_one);
1205 } 1208 }
1206 return 0; 1209 return 0;
@@ -1331,7 +1334,7 @@ int rtl_pci_reset_trx_ring(struct ieee80211_hw *hw)
1331 1334
1332 for (i = 0; i < rtlpci->rxringcount; i++) { 1335 for (i = 0; i < rtlpci->rxringcount; i++) {
1333 entry = &rtlpci->rx_ring[rx_queue_idx].desc[i]; 1336 entry = &rtlpci->rx_ring[rx_queue_idx].desc[i];
1334 rtlpriv->cfg->ops->set_desc((u8 *) entry, 1337 rtlpriv->cfg->ops->set_desc(hw, (u8 *)entry,
1335 false, 1338 false,
1336 HW_DESC_RXOWN, 1339 HW_DESC_RXOWN,
1337 &tmp_one); 1340 &tmp_one);
@@ -1424,6 +1427,7 @@ static int rtl_pci_tx(struct ieee80211_hw *hw,
1424 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); 1427 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1425 struct rtl8192_tx_ring *ring; 1428 struct rtl8192_tx_ring *ring;
1426 struct rtl_tx_desc *pdesc; 1429 struct rtl_tx_desc *pdesc;
1430 struct rtl_tx_buffer_desc *ptx_bd_desc = NULL;
1427 u8 idx; 1431 u8 idx;
1428 u8 hw_queue = _rtl_mac_to_hwqueue(hw, skb); 1432 u8 hw_queue = _rtl_mac_to_hwqueue(hw, skb);
1429 unsigned long flags; 1433 unsigned long flags;
@@ -1464,17 +1468,22 @@ static int rtl_pci_tx(struct ieee80211_hw *hw,
1464 idx = 0; 1468 idx = 0;
1465 1469
1466 pdesc = &ring->desc[idx]; 1470 pdesc = &ring->desc[idx];
1467 own = (u8) rtlpriv->cfg->ops->get_desc((u8 *) pdesc, 1471 if (rtlpriv->use_new_trx_flow) {
1468 true, HW_DESC_OWN); 1472 ptx_bd_desc = &ring->buffer_desc[idx];
1473 } else {
1474 own = (u8) rtlpriv->cfg->ops->get_desc((u8 *)pdesc,
1475 true, HW_DESC_OWN);
1469 1476
1470 if ((own == 1) && (hw_queue != BEACON_QUEUE)) { 1477 if ((own == 1) && (hw_queue != BEACON_QUEUE)) {
1471 RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, 1478 RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
1472 "No more TX desc@%d, ring->idx = %d, idx = %d, skb_queue_len = 0x%d\n", 1479 "No more TX desc@%d, ring->idx = %d, idx = %d, skb_queue_len = 0x%d\n",
1473 hw_queue, ring->idx, idx, 1480 hw_queue, ring->idx, idx,
1474 skb_queue_len(&ring->queue)); 1481 skb_queue_len(&ring->queue));
1475 1482
1476 spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags); 1483 spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock,
1477 return skb->len; 1484 flags);
1485 return skb->len;
1486 }
1478 } 1487 }
1479 1488
1480 if (ieee80211_is_data_qos(fc)) { 1489 if (ieee80211_is_data_qos(fc)) {
@@ -1494,17 +1503,20 @@ static int rtl_pci_tx(struct ieee80211_hw *hw,
1494 rtlpriv->cfg->ops->led_control(hw, LED_CTL_TX); 1503 rtlpriv->cfg->ops->led_control(hw, LED_CTL_TX);
1495 1504
1496 rtlpriv->cfg->ops->fill_tx_desc(hw, hdr, (u8 *)pdesc, 1505 rtlpriv->cfg->ops->fill_tx_desc(hw, hdr, (u8 *)pdesc,
1497 info, sta, skb, hw_queue, ptcb_desc); 1506 (u8 *)ptx_bd_desc, info, sta, skb, hw_queue, ptcb_desc);
1498 1507
1499 __skb_queue_tail(&ring->queue, skb); 1508 __skb_queue_tail(&ring->queue, skb);
1500 1509
1501 rtlpriv->cfg->ops->set_desc((u8 *)pdesc, true, 1510 if (rtlpriv->use_new_trx_flow) {
1502 HW_DESC_OWN, &temp_one); 1511 rtlpriv->cfg->ops->set_desc(hw, (u8 *)pdesc, true,
1503 1512 HW_DESC_OWN, (u8 *)&hw_queue);
1513 } else {
1514 rtlpriv->cfg->ops->set_desc(hw, (u8 *)pdesc, true,
1515 HW_DESC_OWN, (u8 *)&temp_one);
1516 }
1504 1517
1505 if ((ring->entries - skb_queue_len(&ring->queue)) < 2 && 1518 if ((ring->entries - skb_queue_len(&ring->queue)) < 2 &&
1506 hw_queue != BEACON_QUEUE) { 1519 hw_queue != BEACON_QUEUE) {
1507
1508 RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD, 1520 RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
1509 "less desc left, stop skb_queue@%d, ring->idx = %d, idx = %d, skb_queue_len = 0x%d\n", 1521 "less desc left, stop skb_queue@%d, ring->idx = %d, idx = %d, skb_queue_len = 0x%d\n",
1510 hw_queue, ring->idx, idx, 1522 hw_queue, ring->idx, idx,
diff --git a/drivers/net/wireless/rtlwifi/pci.h b/drivers/net/wireless/rtlwifi/pci.h
index 2a3333523ac4..90174a814a6d 100644
--- a/drivers/net/wireless/rtlwifi/pci.h
+++ b/drivers/net/wireless/rtlwifi/pci.h
@@ -137,12 +137,22 @@ struct rtl_tx_cmd_desc {
137 u32 dword[16]; 137 u32 dword[16];
138} __packed; 138} __packed;
139 139
140/* In new TRX flow, Buffer_desc is new concept
141 * But TX wifi info == TX descriptor in old flow
142 * RX wifi info == RX descriptor in old flow
143 */
144struct rtl_tx_buffer_desc {
145 u32 dword[8]; /*seg = 4*/
146} __packed;
147
140struct rtl8192_tx_ring { 148struct rtl8192_tx_ring {
141 struct rtl_tx_desc *desc; 149 struct rtl_tx_desc *desc;
142 dma_addr_t dma; 150 dma_addr_t dma;
143 unsigned int idx; 151 unsigned int idx;
144 unsigned int entries; 152 unsigned int entries;
145 struct sk_buff_head queue; 153 struct sk_buff_head queue;
154 /*add for new trx flow*/
155 struct rtl_tx_buffer_desc *buffer_desc; /*tx buffer descriptor*/
146}; 156};
147 157
148struct rtl8192_rx_ring { 158struct rtl8192_rx_ring {
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/trx.c b/drivers/net/wireless/rtlwifi/rtl8188ee/trx.c
index 27ace3054d56..2ba6f510d884 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/trx.c
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/trx.c
@@ -489,9 +489,8 @@ bool rtl88ee_rx_query_desc(struct ieee80211_hw *hw,
489 489
490void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw, 490void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
491 struct ieee80211_hdr *hdr, u8 *pdesc_tx, 491 struct ieee80211_hdr *hdr, u8 *pdesc_tx,
492 struct ieee80211_tx_info *info, 492 u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
493 struct ieee80211_sta *sta, 493 struct ieee80211_sta *sta, struct sk_buff *skb,
494 struct sk_buff *skb,
495 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc) 494 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc)
496{ 495{
497 struct rtl_priv *rtlpriv = rtl_priv(hw); 496 struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -734,7 +733,8 @@ void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw,
734 pdesc, TX_DESC_SIZE); 733 pdesc, TX_DESC_SIZE);
735} 734}
736 735
737void rtl88ee_set_desc(u8 *pdesc, bool istx, u8 desc_name, u8 *val) 736void rtl88ee_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
737 u8 desc_name, u8 *val)
738{ 738{
739 if (istx == true) { 739 if (istx == true) {
740 switch (desc_name) { 740 switch (desc_name) {
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/trx.h b/drivers/net/wireless/rtlwifi/rtl8188ee/trx.h
index 21ca33a7c770..8c2609412d2c 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/trx.h
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/trx.h
@@ -777,15 +777,15 @@ struct rx_desc_88e {
777 777
778void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw, 778void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
779 struct ieee80211_hdr *hdr, u8 *pdesc_tx, 779 struct ieee80211_hdr *hdr, u8 *pdesc_tx,
780 struct ieee80211_tx_info *info, 780 u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
781 struct ieee80211_sta *sta, 781 struct ieee80211_sta *sta, struct sk_buff *skb,
782 struct sk_buff *skb,
783 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc); 782 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc);
784bool rtl88ee_rx_query_desc(struct ieee80211_hw *hw, 783bool rtl88ee_rx_query_desc(struct ieee80211_hw *hw,
785 struct rtl_stats *status, 784 struct rtl_stats *status,
786 struct ieee80211_rx_status *rx_status, 785 struct ieee80211_rx_status *rx_status,
787 u8 *pdesc, struct sk_buff *skb); 786 u8 *pdesc, struct sk_buff *skb);
788void rtl88ee_set_desc(u8 *pdesc, bool istx, u8 desc_name, u8 *val); 787void rtl88ee_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
788 u8 desc_name, u8 *val);
789u32 rtl88ee_get_desc(u8 *pdesc, bool istx, u8 desc_name); 789u32 rtl88ee_get_desc(u8 *pdesc, bool istx, u8 desc_name);
790void rtl88ee_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); 790void rtl88ee_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
791void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, 791void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c
index 114858d46158..8f04817cb7ec 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c
@@ -426,7 +426,7 @@ bool rtl92ce_rx_query_desc(struct ieee80211_hw *hw,
426 426
427void rtl92ce_tx_fill_desc(struct ieee80211_hw *hw, 427void rtl92ce_tx_fill_desc(struct ieee80211_hw *hw,
428 struct ieee80211_hdr *hdr, u8 *pdesc_tx, 428 struct ieee80211_hdr *hdr, u8 *pdesc_tx,
429 struct ieee80211_tx_info *info, 429 u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
430 struct ieee80211_sta *sta, 430 struct ieee80211_sta *sta,
431 struct sk_buff *skb, 431 struct sk_buff *skb,
432 u8 hw_queue, struct rtl_tcb_desc *tcb_desc) 432 u8 hw_queue, struct rtl_tcb_desc *tcb_desc)
@@ -666,7 +666,8 @@ void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw,
666 "H2C Tx Cmd Content", pdesc, TX_DESC_SIZE); 666 "H2C Tx Cmd Content", pdesc, TX_DESC_SIZE);
667} 667}
668 668
669void rtl92ce_set_desc(u8 *pdesc, bool istx, u8 desc_name, u8 *val) 669void rtl92ce_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
670 u8 desc_name, u8 *val)
670{ 671{
671 if (istx) { 672 if (istx) {
672 switch (desc_name) { 673 switch (desc_name) {
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.h b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.h
index a7cdd514cb2e..9a39ec4204dd 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.h
+++ b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.h
@@ -711,8 +711,8 @@ struct rx_desc_92c {
711} __packed; 711} __packed;
712 712
713void rtl92ce_tx_fill_desc(struct ieee80211_hw *hw, 713void rtl92ce_tx_fill_desc(struct ieee80211_hw *hw,
714 struct ieee80211_hdr *hdr, 714 struct ieee80211_hdr *hdr, u8 *pdesc,
715 u8 *pdesc, struct ieee80211_tx_info *info, 715 u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
716 struct ieee80211_sta *sta, 716 struct ieee80211_sta *sta,
717 struct sk_buff *skb, u8 hw_queue, 717 struct sk_buff *skb, u8 hw_queue,
718 struct rtl_tcb_desc *ptcb_desc); 718 struct rtl_tcb_desc *ptcb_desc);
@@ -720,7 +720,8 @@ bool rtl92ce_rx_query_desc(struct ieee80211_hw *hw,
720 struct rtl_stats *stats, 720 struct rtl_stats *stats,
721 struct ieee80211_rx_status *rx_status, 721 struct ieee80211_rx_status *rx_status,
722 u8 *pdesc, struct sk_buff *skb); 722 u8 *pdesc, struct sk_buff *skb);
723void rtl92ce_set_desc(u8 *pdesc, bool istx, u8 desc_name, u8 *val); 723void rtl92ce_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
724 u8 desc_name, u8 *val);
724u32 rtl92ce_get_desc(u8 *pdesc, bool istx, u8 desc_name); 725u32 rtl92ce_get_desc(u8 *pdesc, bool istx, u8 desc_name);
725void rtl92ce_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); 726void rtl92ce_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
726void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, 727void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c b/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
index 1bc21ccfa71b..035e0dc3922c 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
@@ -495,7 +495,7 @@ static void _rtl_tx_desc_checksum(u8 *txdesc)
495 495
496void rtl92cu_tx_fill_desc(struct ieee80211_hw *hw, 496void rtl92cu_tx_fill_desc(struct ieee80211_hw *hw,
497 struct ieee80211_hdr *hdr, u8 *pdesc_tx, 497 struct ieee80211_hdr *hdr, u8 *pdesc_tx,
498 struct ieee80211_tx_info *info, 498 u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
499 struct ieee80211_sta *sta, 499 struct ieee80211_sta *sta,
500 struct sk_buff *skb, 500 struct sk_buff *skb,
501 u8 queue_index, 501 u8 queue_index,
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/trx.h b/drivers/net/wireless/rtlwifi/rtl8192cu/trx.h
index 725c53accc58..fd8051dcd98a 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/trx.h
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/trx.h
@@ -420,7 +420,7 @@ struct sk_buff *rtl8192c_tx_aggregate_hdl(struct ieee80211_hw *,
420 struct sk_buff_head *); 420 struct sk_buff_head *);
421void rtl92cu_tx_fill_desc(struct ieee80211_hw *hw, 421void rtl92cu_tx_fill_desc(struct ieee80211_hw *hw,
422 struct ieee80211_hdr *hdr, u8 *pdesc_tx, 422 struct ieee80211_hdr *hdr, u8 *pdesc_tx,
423 struct ieee80211_tx_info *info, 423 u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
424 struct ieee80211_sta *sta, 424 struct ieee80211_sta *sta,
425 struct sk_buff *skb, 425 struct sk_buff *skb,
426 u8 queue_index, 426 u8 queue_index,
diff --git a/drivers/net/wireless/rtlwifi/rtl8192de/trx.c b/drivers/net/wireless/rtlwifi/rtl8192de/trx.c
index 0eb0f4ae5920..99c2ab5dfceb 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192de/trx.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192de/trx.c
@@ -545,7 +545,7 @@ static void _rtl92de_insert_emcontent(struct rtl_tcb_desc *ptcb_desc,
545 545
546void rtl92de_tx_fill_desc(struct ieee80211_hw *hw, 546void rtl92de_tx_fill_desc(struct ieee80211_hw *hw,
547 struct ieee80211_hdr *hdr, u8 *pdesc_tx, 547 struct ieee80211_hdr *hdr, u8 *pdesc_tx,
548 struct ieee80211_tx_info *info, 548 u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
549 struct ieee80211_sta *sta, 549 struct ieee80211_sta *sta,
550 struct sk_buff *skb, 550 struct sk_buff *skb,
551 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc) 551 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc)
@@ -786,7 +786,8 @@ void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw,
786 SET_TX_DESC_OWN(pdesc, 1); 786 SET_TX_DESC_OWN(pdesc, 1);
787} 787}
788 788
789void rtl92de_set_desc(u8 *pdesc, bool istx, u8 desc_name, u8 *val) 789void rtl92de_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
790 u8 desc_name, u8 *val)
790{ 791{
791 if (istx) { 792 if (istx) {
792 switch (desc_name) { 793 switch (desc_name) {
diff --git a/drivers/net/wireless/rtlwifi/rtl8192de/trx.h b/drivers/net/wireless/rtlwifi/rtl8192de/trx.h
index c1b5dfb79d53..fb5cf0634e8d 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192de/trx.h
+++ b/drivers/net/wireless/rtlwifi/rtl8192de/trx.h
@@ -728,8 +728,8 @@ struct rx_desc_92d {
728} __packed; 728} __packed;
729 729
730void rtl92de_tx_fill_desc(struct ieee80211_hw *hw, 730void rtl92de_tx_fill_desc(struct ieee80211_hw *hw,
731 struct ieee80211_hdr *hdr, 731 struct ieee80211_hdr *hdr, u8 *pdesc,
732 u8 *pdesc, struct ieee80211_tx_info *info, 732 u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
733 struct ieee80211_sta *sta, 733 struct ieee80211_sta *sta,
734 struct sk_buff *skb, u8 hw_queue, 734 struct sk_buff *skb, u8 hw_queue,
735 struct rtl_tcb_desc *ptcb_desc); 735 struct rtl_tcb_desc *ptcb_desc);
@@ -737,7 +737,8 @@ bool rtl92de_rx_query_desc(struct ieee80211_hw *hw,
737 struct rtl_stats *stats, 737 struct rtl_stats *stats,
738 struct ieee80211_rx_status *rx_status, 738 struct ieee80211_rx_status *rx_status,
739 u8 *pdesc, struct sk_buff *skb); 739 u8 *pdesc, struct sk_buff *skb);
740void rtl92de_set_desc(u8 *pdesc, bool istx, u8 desc_name, u8 *val); 740void rtl92de_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
741 u8 desc_name, u8 *val);
741u32 rtl92de_get_desc(u8 *pdesc, bool istx, u8 desc_name); 742u32 rtl92de_get_desc(u8 *pdesc, bool istx, u8 desc_name);
742void rtl92de_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); 743void rtl92de_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
743void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, 744void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
diff --git a/drivers/net/wireless/rtlwifi/rtl8192se/trx.c b/drivers/net/wireless/rtlwifi/rtl8192se/trx.c
index 163a681962c6..36b48be8329c 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192se/trx.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192se/trx.c
@@ -336,7 +336,7 @@ bool rtl92se_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats,
336 336
337void rtl92se_tx_fill_desc(struct ieee80211_hw *hw, 337void rtl92se_tx_fill_desc(struct ieee80211_hw *hw,
338 struct ieee80211_hdr *hdr, u8 *pdesc_tx, 338 struct ieee80211_hdr *hdr, u8 *pdesc_tx,
339 struct ieee80211_tx_info *info, 339 u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
340 struct ieee80211_sta *sta, 340 struct ieee80211_sta *sta,
341 struct sk_buff *skb, 341 struct sk_buff *skb,
342 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc) 342 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc)
@@ -573,7 +573,8 @@ void rtl92se_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
573 } 573 }
574} 574}
575 575
576void rtl92se_set_desc(u8 *pdesc, bool istx, u8 desc_name, u8 *val) 576void rtl92se_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
577 u8 desc_name, u8 *val)
577{ 578{
578 if (istx) { 579 if (istx) {
579 switch (desc_name) { 580 switch (desc_name) {
diff --git a/drivers/net/wireless/rtlwifi/rtl8192se/trx.h b/drivers/net/wireless/rtlwifi/rtl8192se/trx.h
index 64dd66f287c1..5a13f17e3b41 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192se/trx.h
+++ b/drivers/net/wireless/rtlwifi/rtl8192se/trx.h
@@ -29,8 +29,9 @@
29#ifndef __REALTEK_PCI92SE_TRX_H__ 29#ifndef __REALTEK_PCI92SE_TRX_H__
30#define __REALTEK_PCI92SE_TRX_H__ 30#define __REALTEK_PCI92SE_TRX_H__
31 31
32void rtl92se_tx_fill_desc(struct ieee80211_hw *hw, struct ieee80211_hdr *hdr, 32void rtl92se_tx_fill_desc(struct ieee80211_hw *hw,
33 u8 *pdesc, struct ieee80211_tx_info *info, 33 struct ieee80211_hdr *hdr, u8 *pdesc,
34 u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
34 struct ieee80211_sta *sta, 35 struct ieee80211_sta *sta,
35 struct sk_buff *skb, u8 hw_queue, 36 struct sk_buff *skb, u8 hw_queue,
36 struct rtl_tcb_desc *ptcb_desc); 37 struct rtl_tcb_desc *ptcb_desc);
@@ -39,7 +40,8 @@ void rtl92se_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, bool firstseg,
39bool rtl92se_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats, 40bool rtl92se_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats,
40 struct ieee80211_rx_status *rx_status, u8 *pdesc, 41 struct ieee80211_rx_status *rx_status, u8 *pdesc,
41 struct sk_buff *skb); 42 struct sk_buff *skb);
42void rtl92se_set_desc(u8 *pdesc, bool istx, u8 desc_name, u8 *val); 43void rtl92se_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
44 u8 desc_name, u8 *val);
43u32 rtl92se_get_desc(u8 *pdesc, bool istx, u8 desc_name); 45u32 rtl92se_get_desc(u8 *pdesc, bool istx, u8 desc_name);
44void rtl92se_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); 46void rtl92se_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
45 47
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/trx.c b/drivers/net/wireless/rtlwifi/rtl8723ae/trx.c
index 721162cacc3a..29adf55c6fd3 100644
--- a/drivers/net/wireless/rtlwifi/rtl8723ae/trx.c
+++ b/drivers/net/wireless/rtlwifi/rtl8723ae/trx.c
@@ -365,7 +365,7 @@ bool rtl8723ae_rx_query_desc(struct ieee80211_hw *hw,
365 365
366void rtl8723ae_tx_fill_desc(struct ieee80211_hw *hw, 366void rtl8723ae_tx_fill_desc(struct ieee80211_hw *hw,
367 struct ieee80211_hdr *hdr, u8 *pdesc_tx, 367 struct ieee80211_hdr *hdr, u8 *pdesc_tx,
368 struct ieee80211_tx_info *info, 368 u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
369 struct ieee80211_sta *sta, 369 struct ieee80211_sta *sta,
370 struct sk_buff *skb, u8 hw_queue, 370 struct sk_buff *skb, u8 hw_queue,
371 struct rtl_tcb_desc *ptcdesc) 371 struct rtl_tcb_desc *ptcdesc)
@@ -597,7 +597,8 @@ void rtl8723ae_tx_fill_cmddesc(struct ieee80211_hw *hw,
597 pdesc, TX_DESC_SIZE); 597 pdesc, TX_DESC_SIZE);
598} 598}
599 599
600void rtl8723ae_set_desc(u8 *pdesc, bool istx, u8 desc_name, u8 *val) 600void rtl8723ae_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
601 u8 desc_name, u8 *val)
601{ 602{
602 if (istx == true) { 603 if (istx == true) {
603 switch (desc_name) { 604 switch (desc_name) {
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/trx.h b/drivers/net/wireless/rtlwifi/rtl8723ae/trx.h
index c75bfe8d570c..4380b7d3a91a 100644
--- a/drivers/net/wireless/rtlwifi/rtl8723ae/trx.h
+++ b/drivers/net/wireless/rtlwifi/rtl8723ae/trx.h
@@ -700,8 +700,8 @@ struct rx_desc_8723e {
700} __packed; 700} __packed;
701 701
702void rtl8723ae_tx_fill_desc(struct ieee80211_hw *hw, 702void rtl8723ae_tx_fill_desc(struct ieee80211_hw *hw,
703 struct ieee80211_hdr *hdr, u8 *pdesc_tx, 703 struct ieee80211_hdr *hdr, u8 *pdesc,
704 struct ieee80211_tx_info *info, 704 u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
705 struct ieee80211_sta *sta, 705 struct ieee80211_sta *sta,
706 struct sk_buff *skb, u8 hw_queue, 706 struct sk_buff *skb, u8 hw_queue,
707 struct rtl_tcb_desc *ptcb_desc); 707 struct rtl_tcb_desc *ptcb_desc);
@@ -709,7 +709,8 @@ bool rtl8723ae_rx_query_desc(struct ieee80211_hw *hw,
709 struct rtl_stats *status, 709 struct rtl_stats *status,
710 struct ieee80211_rx_status *rx_status, 710 struct ieee80211_rx_status *rx_status,
711 u8 *pdesc, struct sk_buff *skb); 711 u8 *pdesc, struct sk_buff *skb);
712void rtl8723ae_set_desc(u8 *pdesc, bool istx, u8 desc_name, u8 *val); 712void rtl8723ae_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
713 u8 desc_name, u8 *val);
713u32 rtl8723ae_get_desc(u8 *pdesc, bool istx, u8 desc_name); 714u32 rtl8723ae_get_desc(u8 *pdesc, bool istx, u8 desc_name);
714void rtl8723ae_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); 715void rtl8723ae_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
715void rtl8723ae_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, 716void rtl8723ae_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
diff --git a/drivers/net/wireless/rtlwifi/rtl8723be/trx.c b/drivers/net/wireless/rtlwifi/rtl8723be/trx.c
index 7779531919fb..74a75dceab08 100644
--- a/drivers/net/wireless/rtlwifi/rtl8723be/trx.c
+++ b/drivers/net/wireless/rtlwifi/rtl8723be/trx.c
@@ -639,7 +639,7 @@ bool rtl8723be_rx_query_desc(struct ieee80211_hw *hw,
639 639
640void rtl8723be_tx_fill_desc(struct ieee80211_hw *hw, 640void rtl8723be_tx_fill_desc(struct ieee80211_hw *hw,
641 struct ieee80211_hdr *hdr, u8 *pdesc_tx, 641 struct ieee80211_hdr *hdr, u8 *pdesc_tx,
642 struct ieee80211_tx_info *info, 642 u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
643 struct ieee80211_sta *sta, struct sk_buff *skb, 643 struct ieee80211_sta *sta, struct sk_buff *skb,
644 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc) 644 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc)
645{ 645{
@@ -858,7 +858,8 @@ void rtl8723be_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
858 SET_TX_DESC_USE_RATE(pdesc, 1); 858 SET_TX_DESC_USE_RATE(pdesc, 1);
859} 859}
860 860
861void rtl8723be_set_desc(u8 *pdesc, bool istx, u8 desc_name, u8 *val) 861void rtl8723be_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
862 u8 desc_name, u8 *val)
862{ 863{
863 if (istx) { 864 if (istx) {
864 switch (desc_name) { 865 switch (desc_name) {
diff --git a/drivers/net/wireless/rtlwifi/rtl8723be/trx.h b/drivers/net/wireless/rtlwifi/rtl8723be/trx.h
index d375cf01c3dc..102f33dcc988 100644
--- a/drivers/net/wireless/rtlwifi/rtl8723be/trx.h
+++ b/drivers/net/wireless/rtlwifi/rtl8723be/trx.h
@@ -597,15 +597,16 @@ struct rx_desc_8723be {
597} __packed; 597} __packed;
598 598
599void rtl8723be_tx_fill_desc(struct ieee80211_hw *hw, 599void rtl8723be_tx_fill_desc(struct ieee80211_hw *hw,
600 struct ieee80211_hdr *hdr, u8 *pdesc_tx, 600 struct ieee80211_hdr *hdr, u8 *pdesc,
601 struct ieee80211_tx_info *info, 601 u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
602 struct ieee80211_sta *sta, struct sk_buff *skb, 602 struct ieee80211_sta *sta, struct sk_buff *skb,
603 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc); 603 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc);
604bool rtl8723be_rx_query_desc(struct ieee80211_hw *hw, 604bool rtl8723be_rx_query_desc(struct ieee80211_hw *hw,
605 struct rtl_stats *status, 605 struct rtl_stats *status,
606 struct ieee80211_rx_status *rx_status, 606 struct ieee80211_rx_status *rx_status,
607 u8 *pdesc, struct sk_buff *skb); 607 u8 *pdesc, struct sk_buff *skb);
608void rtl8723be_set_desc(u8 *pdesc, bool istx, u8 desc_name, u8 *val); 608void rtl8723be_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
609 u8 desc_name, u8 *val);
609u32 rtl8723be_get_desc(u8 *pdesc, bool istx, u8 desc_name); 610u32 rtl8723be_get_desc(u8 *pdesc, bool istx, u8 desc_name);
610bool rtl8723be_is_tx_desc_closed(struct ieee80211_hw *hw, 611bool rtl8723be_is_tx_desc_closed(struct ieee80211_hw *hw,
611 u8 hw_queue, u16 index); 612 u8 hw_queue, u16 index);
diff --git a/drivers/net/wireless/rtlwifi/usb.c b/drivers/net/wireless/rtlwifi/usb.c
index 4e2a726cdb16..0398d3ea15b0 100644
--- a/drivers/net/wireless/rtlwifi/usb.c
+++ b/drivers/net/wireless/rtlwifi/usb.c
@@ -994,7 +994,7 @@ static void _rtl_usb_tx_preprocess(struct ieee80211_hw *hw,
994 seq_number += 1; 994 seq_number += 1;
995 seq_number <<= 4; 995 seq_number <<= 4;
996 } 996 }
997 rtlpriv->cfg->ops->fill_tx_desc(hw, hdr, (u8 *)pdesc, info, sta, skb, 997 rtlpriv->cfg->ops->fill_tx_desc(hw, hdr, (u8 *)pdesc, NULL, info, sta, skb,
998 hw_queue, &tcb_desc); 998 hw_queue, &tcb_desc);
999 if (!ieee80211_has_morefrags(hdr->frame_control)) { 999 if (!ieee80211_has_morefrags(hdr->frame_control)) {
1000 if (qc) 1000 if (qc)
diff --git a/drivers/net/wireless/rtlwifi/wifi.h b/drivers/net/wireless/rtlwifi/wifi.h
index 2304c7f23361..5cb799e6bd08 100644
--- a/drivers/net/wireless/rtlwifi/wifi.h
+++ b/drivers/net/wireless/rtlwifi/wifi.h
@@ -41,6 +41,22 @@
41#include <linux/completion.h> 41#include <linux/completion.h>
42#include "debug.h" 42#include "debug.h"
43 43
44#define MASKBYTE0 0xff
45#define MASKBYTE1 0xff00
46#define MASKBYTE2 0xff0000
47#define MASKBYTE3 0xff000000
48#define MASKHWORD 0xffff0000
49#define MASKLWORD 0x0000ffff
50#define MASKDWORD 0xffffffff
51#define MASK12BITS 0xfff
52#define MASKH4BITS 0xf0000000
53#define MASKOFDM_D 0xffc00000
54#define MASKCCK 0x3f3f3f3f
55
56#define MASK4BITS 0x0f
57#define MASK20BITS 0xfffff
58#define RFREG_OFFSET_MASK 0xfffff
59
44#define RF_CHANGE_BY_INIT 0 60#define RF_CHANGE_BY_INIT 0
45#define RF_CHANGE_BY_IPS BIT(28) 61#define RF_CHANGE_BY_IPS BIT(28)
46#define RF_CHANGE_BY_PS BIT(29) 62#define RF_CHANGE_BY_PS BIT(29)
@@ -87,7 +103,18 @@
87#define MAC80211_4ADDR_LEN 30 103#define MAC80211_4ADDR_LEN 30
88 104
89#define CHANNEL_MAX_NUMBER (14 + 24 + 21) /* 14 is the max channel no */ 105#define CHANNEL_MAX_NUMBER (14 + 24 + 21) /* 14 is the max channel no */
106#define CHANNEL_MAX_NUMBER_2G 14
107#define CHANNEL_MAX_NUMBER_5G 54 /* Please refer to
108 *"phy_GetChnlGroup8812A" and
109 * "Hal_ReadTxPowerInfo8812A"
110 */
111#define CHANNEL_MAX_NUMBER_5G_80M 7
90#define CHANNEL_GROUP_MAX (3 + 9) /* ch1~3, 4~9, 10~14 = three groups */ 112#define CHANNEL_GROUP_MAX (3 + 9) /* ch1~3, 4~9, 10~14 = three groups */
113#define CHANNEL_MAX_NUMBER_5G 54 /* Please refer to
114 *"phy_GetChnlGroup8812A" and
115 * "Hal_ReadTxPowerInfo8812A"
116 */
117#define CHANNEL_MAX_NUMBER_5G_80M 7
91#define MAX_PG_GROUP 13 118#define MAX_PG_GROUP 13
92#define CHANNEL_GROUP_MAX_2G 3 119#define CHANNEL_GROUP_MAX_2G 3
93#define CHANNEL_GROUP_IDX_5GL 3 120#define CHANNEL_GROUP_IDX_5GL 3
@@ -115,6 +142,11 @@
115#define MAX_BASE_NUM_IN_PHY_REG_PG_24G 6 142#define MAX_BASE_NUM_IN_PHY_REG_PG_24G 6
116#define MAX_BASE_NUM_IN_PHY_REG_PG_5G 5 143#define MAX_BASE_NUM_IN_PHY_REG_PG_5G 5
117 144
145#define RTL8192EE_SEG_NUM 1 /* 0:2 seg, 1: 4 seg, 2: 8 seg */
146
147#define DEL_SW_IDX_SZ 30
148#define BAND_NUM 3
149
118enum rf_tx_num { 150enum rf_tx_num {
119 RF_1TX = 0, 151 RF_1TX = 0,
120 RF_2TX, 152 RF_2TX,
@@ -140,6 +172,8 @@ struct txpower_info_5g {
140 u8 ofdm_diff[MAX_RF_PATH][MAX_TX_COUNT]; 172 u8 ofdm_diff[MAX_RF_PATH][MAX_TX_COUNT];
141 u8 bw20_diff[MAX_RF_PATH][MAX_TX_COUNT]; 173 u8 bw20_diff[MAX_RF_PATH][MAX_TX_COUNT];
142 u8 bw40_diff[MAX_RF_PATH][MAX_TX_COUNT]; 174 u8 bw40_diff[MAX_RF_PATH][MAX_TX_COUNT];
175 u8 bw80_diff[MAX_RF_PATH][MAX_TX_COUNT];
176 u8 bw160_diff[MAX_RF_PATH][MAX_TX_COUNT];
143}; 177};
144 178
145enum rate_section { 179enum rate_section {
@@ -186,6 +220,8 @@ enum hardware_type {
186 HARDWARE_TYPE_RTL8723U, 220 HARDWARE_TYPE_RTL8723U,
187 HARDWARE_TYPE_RTL8723BE, 221 HARDWARE_TYPE_RTL8723BE,
188 HARDWARE_TYPE_RTL8188EE, 222 HARDWARE_TYPE_RTL8188EE,
223 HARDWARE_TYPE_RTL8821AE,
224 HARDWARE_TYPE_RTL8812AE,
189 225
190 /* keep it last */ 226 /* keep it last */
191 HARDWARE_TYPE_NUM 227 HARDWARE_TYPE_NUM
@@ -230,6 +266,8 @@ enum hardware_type {
230 266
231enum scan_operation_backup_opt { 267enum scan_operation_backup_opt {
232 SCAN_OPT_BACKUP = 0, 268 SCAN_OPT_BACKUP = 0,
269 SCAN_OPT_BACKUP_BAND0 = 0,
270 SCAN_OPT_BACKUP_BAND1,
233 SCAN_OPT_RESTORE, 271 SCAN_OPT_RESTORE,
234 SCAN_OPT_MAX 272 SCAN_OPT_MAX
235}; 273};
@@ -264,7 +302,9 @@ struct bb_reg_def {
264 302
265enum io_type { 303enum io_type {
266 IO_CMD_PAUSE_DM_BY_SCAN = 0, 304 IO_CMD_PAUSE_DM_BY_SCAN = 0,
267 IO_CMD_RESUME_DM_BY_SCAN = 1, 305 IO_CMD_PAUSE_BAND0_DM_BY_SCAN = 0,
306 IO_CMD_PAUSE_BAND1_DM_BY_SCAN = 1,
307 IO_CMD_RESUME_DM_BY_SCAN = 2,
268}; 308};
269 309
270enum hw_variables { 310enum hw_variables {
@@ -331,6 +371,7 @@ enum hw_variables {
331 HW_VAR_SET_RPWM, 371 HW_VAR_SET_RPWM,
332 HW_VAR_H2C_FW_PWRMODE, 372 HW_VAR_H2C_FW_PWRMODE,
333 HW_VAR_H2C_FW_JOINBSSRPT, 373 HW_VAR_H2C_FW_JOINBSSRPT,
374 HW_VAR_H2C_FW_MEDIASTATUSRPT,
334 HW_VAR_H2C_FW_P2P_PS_OFFLOAD, 375 HW_VAR_H2C_FW_P2P_PS_OFFLOAD,
335 HW_VAR_FW_PSMODE_STATUS, 376 HW_VAR_FW_PSMODE_STATUS,
336 HW_VAR_RESUME_CLK_ON, 377 HW_VAR_RESUME_CLK_ON,
@@ -364,6 +405,7 @@ enum hw_variables {
364 HAL_DEF_WOWLAN, 405 HAL_DEF_WOWLAN,
365 HW_VAR_MRC, 406 HW_VAR_MRC,
366 HW_VAR_KEEP_ALIVE, 407 HW_VAR_KEEP_ALIVE,
408 HW_VAR_NAV_UPPER,
367 409
368 HW_VAR_MGT_FILTER, 410 HW_VAR_MGT_FILTER,
369 HW_VAR_CTRL_FILTER, 411 HW_VAR_CTRL_FILTER,
@@ -423,6 +465,7 @@ enum hw_descs {
423 HW_DESC_RXBUFF_ADDR, 465 HW_DESC_RXBUFF_ADDR,
424 HW_DESC_RXPKT_LEN, 466 HW_DESC_RXPKT_LEN,
425 HW_DESC_RXERO, 467 HW_DESC_RXERO,
468 HW_DESC_RX_PREPARE,
426}; 469};
427 470
428enum prime_sc { 471enum prime_sc {
@@ -441,6 +484,7 @@ enum rf_type {
441enum ht_channel_width { 484enum ht_channel_width {
442 HT_CHANNEL_WIDTH_20 = 0, 485 HT_CHANNEL_WIDTH_20 = 0,
443 HT_CHANNEL_WIDTH_20_40 = 1, 486 HT_CHANNEL_WIDTH_20_40 = 1,
487 HT_CHANNEL_WIDTH_80 = 2,
444}; 488};
445 489
446/* Ref: 802.11i sepc D10.0 7.3.2.25.1 490/* Ref: 802.11i sepc D10.0 7.3.2.25.1
@@ -505,6 +549,9 @@ enum rtl_var_map {
505 MAC_RCR_ACRC32, 549 MAC_RCR_ACRC32,
506 MAC_RCR_ACF, 550 MAC_RCR_ACF,
507 MAC_RCR_AAP, 551 MAC_RCR_AAP,
552 MAC_HIMR,
553 MAC_HIMRE,
554 MAC_HSISR,
508 555
509 /*efuse map */ 556 /*efuse map */
510 EFUSE_TEST, 557 EFUSE_TEST,
@@ -679,7 +726,9 @@ enum wireless_mode {
679 WIRELESS_MODE_G = 0x04, 726 WIRELESS_MODE_G = 0x04,
680 WIRELESS_MODE_AUTO = 0x08, 727 WIRELESS_MODE_AUTO = 0x08,
681 WIRELESS_MODE_N_24G = 0x10, 728 WIRELESS_MODE_N_24G = 0x10,
682 WIRELESS_MODE_N_5G = 0x20 729 WIRELESS_MODE_N_5G = 0x20,
730 WIRELESS_MODE_AC_5G = 0x40,
731 WIRELESS_MODE_AC_24G = 0x80
683}; 732};
684 733
685#define IS_WIRELESS_MODE_A(wirelessmode) \ 734#define IS_WIRELESS_MODE_A(wirelessmode) \
@@ -703,6 +752,8 @@ enum ratr_table_mode {
703 RATR_INX_WIRELESS_B = 6, 752 RATR_INX_WIRELESS_B = 6,
704 RATR_INX_WIRELESS_MC = 7, 753 RATR_INX_WIRELESS_MC = 7,
705 RATR_INX_WIRELESS_A = 8, 754 RATR_INX_WIRELESS_A = 8,
755 RATR_INX_WIRELESS_AC_5N = 8,
756 RATR_INX_WIRELESS_AC_24N = 9,
706}; 757};
707 758
708enum rtl_link_state { 759enum rtl_link_state {
@@ -837,8 +888,12 @@ struct wireless_stats {
837 long signal_strength; 888 long signal_strength;
838 889
839 u8 rx_rssi_percentage[4]; 890 u8 rx_rssi_percentage[4];
891 u8 rx_evm_dbm[4];
840 u8 rx_evm_percentage[2]; 892 u8 rx_evm_percentage[2];
841 893
894 u16 rx_cfo_short[4];
895 u16 rx_cfo_tail[4];
896
842 struct rt_smooth_data ui_rssi; 897 struct rt_smooth_data ui_rssi;
843 struct rt_smooth_data ui_link_quality; 898 struct rt_smooth_data ui_link_quality;
844}; 899};
@@ -867,6 +922,10 @@ struct rate_adaptive {
867 u32 ping_rssi_thresh_for_ra; 922 u32 ping_rssi_thresh_for_ra;
868 u32 last_ratr; 923 u32 last_ratr;
869 u8 pre_ratr_state; 924 u8 pre_ratr_state;
925 u8 ldpc_thres;
926 bool use_ldpc;
927 bool lower_rts_rate;
928 bool is_special_data;
870}; 929};
871 930
872struct regd_pair_mapping { 931struct regd_pair_mapping {
@@ -875,6 +934,16 @@ struct regd_pair_mapping {
875 u16 reg_2ghz_ctl; 934 u16 reg_2ghz_ctl;
876}; 935};
877 936
937struct dynamic_primary_cca {
938 u8 pricca_flag;
939 u8 intf_flag;
940 u8 intf_type;
941 u8 dup_rts_flag;
942 u8 monitor_flag;
943 u8 ch_offset;
944 u8 mf_state;
945};
946
878struct rtl_regulatory { 947struct rtl_regulatory {
879 char alpha2[2]; 948 char alpha2[2];
880 u16 country_code; 949 u16 country_code;
@@ -1010,11 +1079,14 @@ struct rtl_phy {
1010 u32 iqk_bb_backup[10]; 1079 u32 iqk_bb_backup[10];
1011 bool iqk_initialized; 1080 bool iqk_initialized;
1012 1081
1082 bool rfpath_rx_enable[MAX_RF_PATH];
1083 u8 reg_837;
1013 /* Dual mac */ 1084 /* Dual mac */
1014 bool need_iqk; 1085 bool need_iqk;
1015 struct iqk_matrix_regs iqk_matrix[IQK_MATRIX_SETTINGS_NUM]; 1086 struct iqk_matrix_regs iqk_matrix[IQK_MATRIX_SETTINGS_NUM];
1016 1087
1017 bool rfpi_enable; 1088 bool rfpi_enable;
1089 bool iqk_in_progress;
1018 1090
1019 u8 pwrgroup_cnt; 1091 u8 pwrgroup_cnt;
1020 u8 cck_high_power; 1092 u8 cck_high_power;
@@ -1027,6 +1099,9 @@ struct rtl_phy {
1027 u8 txpwr_by_rate_base_24g[TX_PWR_BY_RATE_NUM_RF] 1099 u8 txpwr_by_rate_base_24g[TX_PWR_BY_RATE_NUM_RF]
1028 [TX_PWR_BY_RATE_NUM_RF] 1100 [TX_PWR_BY_RATE_NUM_RF]
1029 [MAX_BASE_NUM_IN_PHY_REG_PG_24G]; 1101 [MAX_BASE_NUM_IN_PHY_REG_PG_24G];
1102 u8 txpwr_by_rate_base_5g[TX_PWR_BY_RATE_NUM_RF]
1103 [TX_PWR_BY_RATE_NUM_RF]
1104 [MAX_BASE_NUM_IN_PHY_REG_PG_5G];
1030 u8 default_initialgain[4]; 1105 u8 default_initialgain[4];
1031 1106
1032 /* the current Tx power level */ 1107 /* the current Tx power level */
@@ -1039,6 +1114,7 @@ struct rtl_phy {
1039 bool apk_done; 1114 bool apk_done;
1040 u32 reg_rf3c[2]; /* pathA / pathB */ 1115 u32 reg_rf3c[2]; /* pathA / pathB */
1041 1116
1117 u32 backup_rf_0x1a;/*92ee*/
1042 /* bfsync */ 1118 /* bfsync */
1043 u8 framesync; 1119 u8 framesync;
1044 u32 framesync_c34; 1120 u32 framesync_c34;
@@ -1047,6 +1123,7 @@ struct rtl_phy {
1047 struct phy_parameters hwparam_tables[MAX_TAB]; 1123 struct phy_parameters hwparam_tables[MAX_TAB];
1048 u16 rf_pathmap; 1124 u16 rf_pathmap;
1049 1125
1126 u8 hw_rof_enable; /*Enable GPIO[9] as WL RF HW PDn source*/
1050 enum rt_polarity_ctl polarity_ctl; 1127 enum rt_polarity_ctl polarity_ctl;
1051}; 1128};
1052 1129
@@ -1174,6 +1251,7 @@ struct rtl_mac {
1174 u8 use_cts_protect; 1251 u8 use_cts_protect;
1175 u8 cur_40_prime_sc; 1252 u8 cur_40_prime_sc;
1176 u8 cur_40_prime_sc_bk; 1253 u8 cur_40_prime_sc_bk;
1254 u8 cur_80_prime_sc;
1177 u64 tsf; 1255 u64 tsf;
1178 u8 retry_short; 1256 u8 retry_short;
1179 u8 retry_long; 1257 u8 retry_long;
@@ -1276,6 +1354,7 @@ struct rtl_hal {
1276 /*Reserve page start offset except beacon in TxQ. */ 1354 /*Reserve page start offset except beacon in TxQ. */
1277 u8 fw_rsvdpage_startoffset; 1355 u8 fw_rsvdpage_startoffset;
1278 u8 h2c_txcmd_seq; 1356 u8 h2c_txcmd_seq;
1357 u8 current_ra_rate;
1279 1358
1280 /* FW Cmd IO related */ 1359 /* FW Cmd IO related */
1281 u16 fwcmd_iomap; 1360 u16 fwcmd_iomap;
@@ -1315,6 +1394,9 @@ struct rtl_hal {
1315 bool disable_amsdu_8k; 1394 bool disable_amsdu_8k;
1316 bool master_of_dmsp; 1395 bool master_of_dmsp;
1317 bool slave_of_dmsp; 1396 bool slave_of_dmsp;
1397
1398 u16 rx_tag;/*for 92ee*/
1399 u8 rts_en;
1318}; 1400};
1319 1401
1320struct rtl_security { 1402struct rtl_security {
@@ -1412,11 +1494,18 @@ struct rtl_dm {
1412 u8 txpower_track_control; 1494 u8 txpower_track_control;
1413 bool interrupt_migration; 1495 bool interrupt_migration;
1414 bool disable_tx_int; 1496 bool disable_tx_int;
1415 char ofdm_index[2]; 1497 char ofdm_index[MAX_RF_PATH];
1498 u8 default_ofdm_index;
1499 u8 default_cck_index;
1416 char cck_index; 1500 char cck_index;
1417 char delta_power_index[MAX_RF_PATH]; 1501 char delta_power_index[MAX_RF_PATH];
1418 char delta_power_index_last[MAX_RF_PATH]; 1502 char delta_power_index_last[MAX_RF_PATH];
1419 char power_index_offset[MAX_RF_PATH]; 1503 char power_index_offset[MAX_RF_PATH];
1504 char absolute_ofdm_swing_idx[MAX_RF_PATH];
1505 char remnant_ofdm_swing_idx[MAX_RF_PATH];
1506 char remnant_cck_idx;
1507 bool modify_txagc_flag_path_a;
1508 bool modify_txagc_flag_path_b;
1420 1509
1421 bool one_entry_only; 1510 bool one_entry_only;
1422 struct dm_phy_dbg_info dbginfo; 1511 struct dm_phy_dbg_info dbginfo;
@@ -1431,9 +1520,10 @@ struct rtl_dm {
1431 u8 cfo_threshold; 1520 u8 cfo_threshold;
1432 u32 packet_count; 1521 u32 packet_count;
1433 u32 packet_count_pre; 1522 u32 packet_count_pre;
1523 u8 tx_rate;
1434 1524
1435 /*88e tx power tracking*/ 1525 /*88e tx power tracking*/
1436 u8 swing_idx_ofdm[2]; 1526 u8 swing_idx_ofdm[MAX_RF_PATH];
1437 u8 swing_idx_ofdm_cur; 1527 u8 swing_idx_ofdm_cur;
1438 u8 swing_idx_ofdm_base[MAX_RF_PATH]; 1528 u8 swing_idx_ofdm_base[MAX_RF_PATH];
1439 bool swing_flag_ofdm; 1529 bool swing_flag_ofdm;
@@ -1442,10 +1532,43 @@ struct rtl_dm {
1442 u8 swing_idx_cck_base; 1532 u8 swing_idx_cck_base;
1443 bool swing_flag_cck; 1533 bool swing_flag_cck;
1444 1534
1535 char swing_diff_2g;
1536 char swing_diff_5g;
1537
1538 u8 delta_swing_table_idx_24gccka_p[DEL_SW_IDX_SZ];
1539 u8 delta_swing_table_idx_24gccka_n[DEL_SW_IDX_SZ];
1540 u8 delta_swing_table_idx_24gcckb_p[DEL_SW_IDX_SZ];
1541 u8 delta_swing_table_idx_24gcckb_n[DEL_SW_IDX_SZ];
1542 u8 delta_swing_table_idx_24ga_p[DEL_SW_IDX_SZ];
1543 u8 delta_swing_table_idx_24ga_n[DEL_SW_IDX_SZ];
1544 u8 delta_swing_table_idx_24gb_p[DEL_SW_IDX_SZ];
1545 u8 delta_swing_table_idx_24gb_n[DEL_SW_IDX_SZ];
1546 u8 delta_swing_table_idx_5ga_p[BAND_NUM][DEL_SW_IDX_SZ];
1547 u8 delta_swing_table_idx_5ga_n[BAND_NUM][DEL_SW_IDX_SZ];
1548 u8 delta_swing_table_idx_5gb_p[BAND_NUM][DEL_SW_IDX_SZ];
1549 u8 delta_swing_table_idx_5gb_n[BAND_NUM][DEL_SW_IDX_SZ];
1550 u8 delta_swing_table_idx_24ga_p_8188e[DEL_SW_IDX_SZ];
1551 u8 delta_swing_table_idx_24ga_n_8188e[DEL_SW_IDX_SZ];
1552
1445 /* DMSP */ 1553 /* DMSP */
1446 bool supp_phymode_switch; 1554 bool supp_phymode_switch;
1447 1555
1556 /* DulMac */
1448 struct fast_ant_training fat_table; 1557 struct fast_ant_training fat_table;
1558
1559 u8 resp_tx_path;
1560 u8 path_sel;
1561 u32 patha_sum;
1562 u32 pathb_sum;
1563 u32 patha_cnt;
1564 u32 pathb_cnt;
1565
1566 u8 pre_channel;
1567 u8 *p_channel;
1568 u8 linked_interval;
1569
1570 u64 last_tx_ok_cnt;
1571 u64 last_rx_ok_cnt;
1449}; 1572};
1450 1573
1451#define EFUSE_MAX_LOGICAL_SIZE 256 1574#define EFUSE_MAX_LOGICAL_SIZE 256
@@ -1491,11 +1614,6 @@ struct rtl_efuse {
1491 u8 eeprom_chnlarea_txpwr_cck[MAX_RF_PATH][CHANNEL_GROUP_MAX_2G]; 1614 u8 eeprom_chnlarea_txpwr_cck[MAX_RF_PATH][CHANNEL_GROUP_MAX_2G];
1492 u8 eeprom_chnlarea_txpwr_ht40_1s[MAX_RF_PATH][CHANNEL_GROUP_MAX]; 1615 u8 eeprom_chnlarea_txpwr_ht40_1s[MAX_RF_PATH][CHANNEL_GROUP_MAX];
1493 u8 eprom_chnl_txpwr_ht40_2sdf[MAX_RF_PATH][CHANNEL_GROUP_MAX]; 1616 u8 eprom_chnl_txpwr_ht40_2sdf[MAX_RF_PATH][CHANNEL_GROUP_MAX];
1494 u8 txpwrlevel_cck[2][CHANNEL_MAX_NUMBER_2G];
1495 /* For HT 40MHZ pwr */
1496 u8 txpwrlevel_ht40_1s[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
1497 u8 txpwrlevel_ht40_2s[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
1498 u8 txpwr_ht40diff[MAX_RF_PATH][MAX_TX_COUNT];/*BW40_24G_Diff*/
1499 1617
1500 u8 internal_pa_5g[2]; /* pathA / pathB */ 1618 u8 internal_pa_5g[2]; /* pathA / pathB */
1501 u8 eeprom_c9; 1619 u8 eeprom_c9;
@@ -1506,9 +1624,38 @@ struct rtl_efuse {
1506 u8 pwrgroup_ht20[2][CHANNEL_MAX_NUMBER]; 1624 u8 pwrgroup_ht20[2][CHANNEL_MAX_NUMBER];
1507 u8 pwrgroup_ht40[2][CHANNEL_MAX_NUMBER]; 1625 u8 pwrgroup_ht40[2][CHANNEL_MAX_NUMBER];
1508 1626
1509 char txpwr_ht20diff[2][CHANNEL_MAX_NUMBER]; /*HT 20<->40 Pwr diff */ 1627 u8 txpwrlevel_cck[MAX_RF_PATH][CHANNEL_MAX_NUMBER_2G];
1510 /*For HT<->legacy pwr diff*/ 1628 /*For HT 40MHZ pwr */
1511 u8 txpwr_legacyhtdiff[2][CHANNEL_MAX_NUMBER]; 1629 u8 txpwrlevel_ht40_1s[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
1630 /*For HT 40MHZ pwr */
1631 u8 txpwrlevel_ht40_2s[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
1632
1633 /*--------------------------------------------------------*
1634 * 8192CE\8192SE\8192DE\8723AE use the following 4 arrays,
1635 * other ICs (8188EE\8723BE\8192EE\8812AE...)
1636 * define new arrays in Windows code.
1637 * BUT, in linux code, we use the same array for all ICs.
1638 *
1639 * The Correspondance relation between two arrays is:
1640 * txpwr_cckdiff[][] == CCK_24G_Diff[][]
1641 * txpwr_ht20diff[][] == BW20_24G_Diff[][]
1642 * txpwr_ht40diff[][] == BW40_24G_Diff[][]
1643 * txpwr_legacyhtdiff[][] == OFDM_24G_Diff[][]
1644 *
1645 * Sizes of these arrays are decided by the larger ones.
1646 */
1647 char txpwr_cckdiff[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
1648 char txpwr_ht20diff[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
1649 char txpwr_ht40diff[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
1650 char txpwr_legacyhtdiff[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
1651
1652 u8 txpwr_5g_bw40base[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
1653 u8 txpwr_5g_bw80base[MAX_RF_PATH][CHANNEL_MAX_NUMBER_5G_80M];
1654 char txpwr_5g_ofdmdiff[MAX_RF_PATH][MAX_TX_COUNT];
1655 char txpwr_5g_bw20diff[MAX_RF_PATH][MAX_TX_COUNT];
1656 char txpwr_5g_bw40diff[MAX_RF_PATH][MAX_TX_COUNT];
1657 char txpwr_5g_bw80diff[MAX_RF_PATH][MAX_TX_COUNT];
1658
1512 u8 txpwr_safetyflag; /* Band edge enable flag */ 1659 u8 txpwr_safetyflag; /* Band edge enable flag */
1513 u16 eeprom_txpowerdiff; 1660 u16 eeprom_txpowerdiff;
1514 u8 legacy_httxpowerdiff; /* Legacy to HT rate power diff */ 1661 u8 legacy_httxpowerdiff; /* Legacy to HT rate power diff */
@@ -1639,7 +1786,9 @@ struct rtl_stats {
1639 bool rx_is40Mhzpacket; 1786 bool rx_is40Mhzpacket;
1640 u32 rx_pwdb_all; 1787 u32 rx_pwdb_all;
1641 u8 rx_mimo_signalstrength[4]; /*in 0~100 index */ 1788 u8 rx_mimo_signalstrength[4]; /*in 0~100 index */
1642 s8 rx_mimo_sig_qual[2]; 1789 s8 rx_mimo_sig_qual[4];
1790 u8 rx_pwr[4]; /* per-path's pwdb */
1791 u8 rx_snr[4]; /* per-path's SNR */
1643 bool packet_matchbssid; 1792 bool packet_matchbssid;
1644 bool is_cck; 1793 bool is_cck;
1645 bool is_ht; 1794 bool is_ht;
@@ -1743,9 +1892,17 @@ struct rtl_hal_ops {
1743 void (*set_hw_reg) (struct ieee80211_hw *hw, u8 variable, u8 *val); 1892 void (*set_hw_reg) (struct ieee80211_hw *hw, u8 variable, u8 *val);
1744 void (*update_rate_tbl) (struct ieee80211_hw *hw, 1893 void (*update_rate_tbl) (struct ieee80211_hw *hw,
1745 struct ieee80211_sta *sta, u8 rssi_level); 1894 struct ieee80211_sta *sta, u8 rssi_level);
1895 void (*pre_fill_tx_bd_desc)(struct ieee80211_hw *hw, u8 *tx_bd_desc,
1896 u8 *desc, u8 queue_index,
1897 struct sk_buff *skb, dma_addr_t addr);
1746 void (*update_rate_mask) (struct ieee80211_hw *hw, u8 rssi_level); 1898 void (*update_rate_mask) (struct ieee80211_hw *hw, u8 rssi_level);
1899 u16 (*rx_desc_buff_remained_cnt)(struct ieee80211_hw *hw,
1900 u8 queue_index);
1901 void (*rx_check_dma_ok)(struct ieee80211_hw *hw, u8 *header_desc,
1902 u8 queue_index);
1747 void (*fill_tx_desc) (struct ieee80211_hw *hw, 1903 void (*fill_tx_desc) (struct ieee80211_hw *hw,
1748 struct ieee80211_hdr *hdr, u8 *pdesc_tx, 1904 struct ieee80211_hdr *hdr, u8 *pdesc_tx,
1905 u8 *pbd_desc_tx,
1749 struct ieee80211_tx_info *info, 1906 struct ieee80211_tx_info *info,
1750 struct ieee80211_sta *sta, 1907 struct ieee80211_sta *sta,
1751 struct sk_buff *skb, u8 hw_queue, 1908 struct sk_buff *skb, u8 hw_queue,
@@ -1768,7 +1925,8 @@ struct rtl_hal_ops {
1768 enum rf_pwrstate rfpwr_state); 1925 enum rf_pwrstate rfpwr_state);
1769 void (*led_control) (struct ieee80211_hw *hw, 1926 void (*led_control) (struct ieee80211_hw *hw,
1770 enum led_ctl_mode ledaction); 1927 enum led_ctl_mode ledaction);
1771 void (*set_desc) (u8 *pdesc, bool istx, u8 desc_name, u8 *val); 1928 void (*set_desc)(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
1929 u8 desc_name, u8 *val);
1772 u32 (*get_desc) (u8 *pdesc, bool istx, u8 desc_name); 1930 u32 (*get_desc) (u8 *pdesc, bool istx, u8 desc_name);
1773 bool (*is_tx_desc_closed) (struct ieee80211_hw *hw, 1931 bool (*is_tx_desc_closed) (struct ieee80211_hw *hw,
1774 u8 hw_queue, u16 index); 1932 u8 hw_queue, u16 index);
@@ -1812,6 +1970,8 @@ struct rtl_hal_ops {
1812 u32 cmd_len, u8 *p_cmdbuffer); 1970 u32 cmd_len, u8 *p_cmdbuffer);
1813 bool (*get_btc_status) (void); 1971 bool (*get_btc_status) (void);
1814 bool (*is_fw_header) (struct rtl92c_firmware_header *hdr); 1972 bool (*is_fw_header) (struct rtl92c_firmware_header *hdr);
1973 u32 (*rx_command_packet)(struct ieee80211_hw *hw,
1974 struct rtl_stats status, struct sk_buff *skb);
1815}; 1975};
1816 1976
1817struct rtl_intf_ops { 1977struct rtl_intf_ops {
@@ -1921,6 +2081,8 @@ struct rtl_locks {
1921 2081
1922 /*Easy concurrent*/ 2082 /*Easy concurrent*/
1923 spinlock_t check_sendpkt_lock; 2083 spinlock_t check_sendpkt_lock;
2084
2085 spinlock_t iqk_lock;
1924}; 2086};
1925 2087
1926struct rtl_works { 2088struct rtl_works {
@@ -2014,6 +2176,7 @@ struct dig_t {
2014 u8 cursta_cstate; 2176 u8 cursta_cstate;
2015 u8 presta_cstate; 2177 u8 presta_cstate;
2016 u8 curmultista_cstate; 2178 u8 curmultista_cstate;
2179 u8 stop_dig;
2017 char back_val; 2180 char back_val;
2018 char back_range_max; 2181 char back_range_max;
2019 char back_range_min; 2182 char back_range_min;
@@ -2031,6 +2194,7 @@ struct dig_t {
2031 u8 cur_ccasate; 2194 u8 cur_ccasate;
2032 u8 large_fa_hit; 2195 u8 large_fa_hit;
2033 u8 dig_dynamic_min; 2196 u8 dig_dynamic_min;
2197 u8 dig_dynamic_min_1;
2034 u8 forbidden_igi; 2198 u8 forbidden_igi;
2035 u8 dig_state; 2199 u8 dig_state;
2036 u8 dig_highpwrstate; 2200 u8 dig_highpwrstate;
@@ -2174,6 +2338,7 @@ struct rtl_priv {
2174 2338
2175 struct rtl_ps_ctl psc; 2339 struct rtl_ps_ctl psc;
2176 struct rate_adaptive ra; 2340 struct rate_adaptive ra;
2341 struct dynamic_primary_cca primarycca;
2177 struct wireless_stats stats; 2342 struct wireless_stats stats;
2178 struct rt_link_detect link_info; 2343 struct rt_link_detect link_info;
2179 struct false_alarm_statistics falsealm_cnt; 2344 struct false_alarm_statistics falsealm_cnt;
@@ -2259,9 +2424,15 @@ enum bt_co_type {
2259 BT_CSR_BC8 = 4, 2424 BT_CSR_BC8 = 4,
2260 BT_RTL8756 = 5, 2425 BT_RTL8756 = 5,
2261 BT_RTL8723A = 6, 2426 BT_RTL8723A = 6,
2262 BT_RTL8821 = 7, 2427 BT_RTL8821A = 7,
2263 BT_RTL8723B = 8, 2428 BT_RTL8723B = 8,
2264 BT_RTL8192E = 9, 2429 BT_RTL8192E = 9,
2430 BT_RTL8812A = 11,
2431};
2432
2433enum bt_total_ant_num {
2434 ANT_TOTAL_X2 = 0,
2435 ANT_TOTAL_X1 = 1
2265}; 2436};
2266 2437
2267enum bt_cur_state { 2438enum bt_cur_state {