Commit 26634c4b authored by Larry Finger's avatar Larry Finger Committed by John W. Linville

rtlwifi Modify existing bits to match vendor version 2013.02.07

These changes add the new variables for P2P and modify the various struct
definitions for other new features.

This patch updates files base.{c,h} for the changes in the newest vendor
driver.

This patch updates files ps.{c,h} for the changes in the newest vendor
driver.

This patch updates files debug.{c,h}, efuse.c, pci.{c,h}, and wifi.h for
the changes in the newest vendor driver.

This patch updates files core.c, ps.c, rc.c, and wifi.h for
the changes in the newest vendor driver.
Signed-off-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
Cc: jcheung@suse.com
Cc: machen@suse.com
Cc: mmarek@suse.cz
Cc: zhiyuan_yang@realsil.com.cn
Cc: page_he@realsil.com.cn
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent cbafb601
This diff is collapsed.
...@@ -113,6 +113,7 @@ void rtl_init_rx_config(struct ieee80211_hw *hw); ...@@ -113,6 +113,7 @@ void rtl_init_rx_config(struct ieee80211_hw *hw);
void rtl_init_rfkill(struct ieee80211_hw *hw); void rtl_init_rfkill(struct ieee80211_hw *hw);
void rtl_deinit_rfkill(struct ieee80211_hw *hw); void rtl_deinit_rfkill(struct ieee80211_hw *hw);
void rtl_beacon_statistic(struct ieee80211_hw *hw, struct sk_buff *skb);
void rtl_watch_dog_timer_callback(unsigned long data); void rtl_watch_dog_timer_callback(unsigned long data);
void rtl_deinit_deferred_work(struct ieee80211_hw *hw); void rtl_deinit_deferred_work(struct ieee80211_hw *hw);
...@@ -126,7 +127,12 @@ int rtl_tx_agg_stop(struct ieee80211_hw *hw, struct ieee80211_sta *sta, ...@@ -126,7 +127,12 @@ int rtl_tx_agg_stop(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
u16 tid); u16 tid);
int rtl_tx_agg_oper(struct ieee80211_hw *hw, struct ieee80211_sta *sta, int rtl_tx_agg_oper(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
u16 tid); u16 tid);
int rtl_rx_agg_start(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
u16 tid);
int rtl_rx_agg_stop(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
u16 tid);
void rtl_watchdog_wq_callback(void *data); void rtl_watchdog_wq_callback(void *data);
void rtl_fwevt_wq_callback(void *data);
void rtl_get_tcb_desc(struct ieee80211_hw *hw, void rtl_get_tcb_desc(struct ieee80211_hw *hw,
struct ieee80211_tx_info *info, struct ieee80211_tx_info *info,
...@@ -134,14 +140,18 @@ void rtl_get_tcb_desc(struct ieee80211_hw *hw, ...@@ -134,14 +140,18 @@ void rtl_get_tcb_desc(struct ieee80211_hw *hw,
struct sk_buff *skb, struct rtl_tcb_desc *tcb_desc); struct sk_buff *skb, struct rtl_tcb_desc *tcb_desc);
int rtl_send_smps_action(struct ieee80211_hw *hw, int rtl_send_smps_action(struct ieee80211_hw *hw,
struct ieee80211_sta *sta, u8 *da, u8 *bssid, struct ieee80211_sta *sta,
enum ieee80211_smps_mode smps); enum ieee80211_smps_mode smps);
u8 *rtl_find_ie(u8 *data, unsigned int len, u8 ie); u8 *rtl_find_ie(u8 *data, unsigned int len, u8 ie);
void rtl_recognize_peer(struct ieee80211_hw *hw, u8 *data, unsigned int len); void rtl_recognize_peer(struct ieee80211_hw *hw, u8 *data, unsigned int len);
u8 rtl_tid_to_ac(u8 tid); u8 rtl_tid_to_ac(u8 tid);
extern struct attribute_group rtl_attribute_group; extern struct attribute_group rtl_attribute_group;
void rtl_easy_concurrent_retrytimer_callback(unsigned long data);
extern struct rtl_global_var global_var;
int rtlwifi_rate_mapping(struct ieee80211_hw *hw, int rtlwifi_rate_mapping(struct ieee80211_hw *hw,
bool isht, u8 desc_rate, bool first_ampdu); bool isht, u8 desc_rate, bool first_ampdu);
bool rtl_tx_mgmt_proc(struct ieee80211_hw *hw, struct sk_buff *skb); bool rtl_tx_mgmt_proc(struct ieee80211_hw *hw, struct sk_buff *skb);
struct sk_buff *rtl_make_del_ba(struct ieee80211_hw *hw,
u8 *sa, u8 *bssid, u16 tid);
#endif #endif
This diff is collapsed.
...@@ -41,7 +41,10 @@ void rtl_dbgp_flag_init(struct ieee80211_hw *hw) ...@@ -41,7 +41,10 @@ void rtl_dbgp_flag_init(struct ieee80211_hw *hw)
COMP_BEACON | COMP_RATE | COMP_RXDESC | COMP_DIG | COMP_TXAGC | COMP_BEACON | COMP_RATE | COMP_RXDESC | COMP_DIG | COMP_TXAGC |
COMP_POWER | COMP_POWER_TRACKING | COMP_BB_POWERSAVING | COMP_SWAS | COMP_POWER | COMP_POWER_TRACKING | COMP_BB_POWERSAVING | COMP_SWAS |
COMP_RF | COMP_TURBO | COMP_RATR | COMP_CMD | COMP_RF | COMP_TURBO | COMP_RATR | COMP_CMD |
COMP_EFUSE | COMP_QOS | COMP_MAC80211 | COMP_REGD | COMP_CHAN; COMP_EFUSE | COMP_QOS | COMP_MAC80211 | COMP_REGD | COMP_CHAN |
COMP_EASY_CONCURRENT | COMP_EFUSE | COMP_QOS | COMP_MAC80211 |
COMP_REGD | COMP_CHAN | COMP_BT_COEXIST;
for (i = 0; i < DBGP_TYPE_MAX; i++) for (i = 0; i < DBGP_TYPE_MAX; i++)
rtlpriv->dbg.dbgp_type[i] = 0; rtlpriv->dbg.dbgp_type[i] = 0;
......
...@@ -135,6 +135,13 @@ ...@@ -135,6 +135,13 @@
#define PHY_TXPWR BIT(8) #define PHY_TXPWR BIT(8)
#define PHY_PWRDIFF BIT(9) #define PHY_PWRDIFF BIT(9)
/* Define Dynamic Mechanism check module bit --> FDM */
#define WA_IOT BIT(0)
#define DM_PWDB BIT(1)
#define DM_MONITOR BIT(2)
#define DM_DIG BIT(3)
#define DM_EDCA_TURBO BIT(4)
enum dbgp_flag_e { enum dbgp_flag_e {
FQOS = 0, FQOS = 0,
FTX = 1, FTX = 1,
......
...@@ -35,8 +35,6 @@ static const u8 MAX_PGPKT_SIZE = 9; ...@@ -35,8 +35,6 @@ static const u8 MAX_PGPKT_SIZE = 9;
static const u8 PGPKT_DATA_SIZE = 8; static const u8 PGPKT_DATA_SIZE = 8;
static const int EFUSE_MAX_SIZE = 512; static const int EFUSE_MAX_SIZE = 512;
static const u8 EFUSE_OOB_PROTECT_BYTES = 15;
static const struct efuse_map RTL8712_SDIO_EFUSE_TABLE[] = { static const struct efuse_map RTL8712_SDIO_EFUSE_TABLE[] = {
{0, 0, 0, 2}, {0, 0, 0, 2},
{0, 1, 0, 2}, {0, 1, 0, 2},
...@@ -240,6 +238,7 @@ void read_efuse(struct ieee80211_hw *hw, u16 _offset, u16 _size_byte, u8 *pbuf) ...@@ -240,6 +238,7 @@ void read_efuse(struct ieee80211_hw *hw, u16 _offset, u16 _size_byte, u8 *pbuf)
u8 rtemp8[1]; u8 rtemp8[1];
u16 efuse_addr = 0; u16 efuse_addr = 0;
u8 offset, wren; u8 offset, wren;
u8 u1temp = 0;
u16 i; u16 i;
u16 j; u16 j;
const u16 efuse_max_section = const u16 efuse_max_section =
...@@ -285,10 +284,31 @@ void read_efuse(struct ieee80211_hw *hw, u16 _offset, u16 _size_byte, u8 *pbuf) ...@@ -285,10 +284,31 @@ void read_efuse(struct ieee80211_hw *hw, u16 _offset, u16 _size_byte, u8 *pbuf)
} }
while ((*rtemp8 != 0xFF) && (efuse_addr < efuse_len)) { while ((*rtemp8 != 0xFF) && (efuse_addr < efuse_len)) {
offset = ((*rtemp8 >> 4) & 0x0f); /* Check PG header for section num. */
if ((*rtemp8 & 0x1F) == 0x0F) {/* extended header */
u1temp = ((*rtemp8 & 0xE0) >> 5);
read_efuse_byte(hw, efuse_addr, rtemp8);
if (offset < efuse_max_section) { if ((*rtemp8 & 0x0F) == 0x0F) {
efuse_addr++;
read_efuse_byte(hw, efuse_addr, rtemp8);
if (*rtemp8 != 0xFF &&
(efuse_addr < efuse_len)) {
efuse_addr++;
}
continue;
} else {
offset = ((*rtemp8 & 0xF0) >> 1) | u1temp;
wren = (*rtemp8 & 0x0F);
efuse_addr++;
}
} else {
offset = ((*rtemp8 >> 4) & 0x0f);
wren = (*rtemp8 & 0x0f); wren = (*rtemp8 & 0x0f);
}
if (offset < efuse_max_section) {
RTPRINT(rtlpriv, FEEPROM, EFUSE_READ_ALL, RTPRINT(rtlpriv, FEEPROM, EFUSE_READ_ALL,
"offset-%d Worden=%x\n", offset, wren); "offset-%d Worden=%x\n", offset, wren);
...@@ -391,7 +411,8 @@ bool efuse_shadow_update_chk(struct ieee80211_hw *hw) ...@@ -391,7 +411,8 @@ bool efuse_shadow_update_chk(struct ieee80211_hw *hw)
efuse_used = rtlefuse->efuse_usedbytes; efuse_used = rtlefuse->efuse_usedbytes;
if ((totalbytes + efuse_used) >= if ((totalbytes + efuse_used) >=
(EFUSE_MAX_SIZE - EFUSE_OOB_PROTECT_BYTES)) (EFUSE_MAX_SIZE -
rtlpriv->cfg->maps[EFUSE_OOB_PROTECT_BYTES_LEN]))
result = false; result = false;
RT_TRACE(rtlpriv, COMP_EFUSE, DBG_LOUD, RT_TRACE(rtlpriv, COMP_EFUSE, DBG_LOUD,
...@@ -932,8 +953,8 @@ static int efuse_pg_packet_write(struct ieee80211_hw *hw, ...@@ -932,8 +953,8 @@ static int efuse_pg_packet_write(struct ieee80211_hw *hw,
u8 badworden = 0x0F; u8 badworden = 0x0F;
static int repeat_times; static int repeat_times;
if (efuse_get_current_size(hw) >= if (efuse_get_current_size(hw) >= (EFUSE_MAX_SIZE -
(EFUSE_MAX_SIZE - EFUSE_OOB_PROTECT_BYTES)) { rtlpriv->cfg->maps[EFUSE_OOB_PROTECT_BYTES_LEN])) {
RTPRINT(rtlpriv, FEEPROM, EFUSE_PG, RTPRINT(rtlpriv, FEEPROM, EFUSE_PG,
"efuse_pg_packet_write error\n"); "efuse_pg_packet_write error\n");
return false; return false;
...@@ -949,8 +970,8 @@ static int efuse_pg_packet_write(struct ieee80211_hw *hw, ...@@ -949,8 +970,8 @@ static int efuse_pg_packet_write(struct ieee80211_hw *hw,
RTPRINT(rtlpriv, FEEPROM, EFUSE_PG, "efuse Power ON\n"); RTPRINT(rtlpriv, FEEPROM, EFUSE_PG, "efuse Power ON\n");
while (continual && (efuse_addr < while (continual && (efuse_addr < (EFUSE_MAX_SIZE -
(EFUSE_MAX_SIZE - EFUSE_OOB_PROTECT_BYTES))) { rtlpriv->cfg->maps[EFUSE_OOB_PROTECT_BYTES_LEN]))) {
if (write_state == PG_STATE_HEADER) { if (write_state == PG_STATE_HEADER) {
badworden = 0x0F; badworden = 0x0F;
...@@ -1003,7 +1024,8 @@ static int efuse_pg_packet_write(struct ieee80211_hw *hw, ...@@ -1003,7 +1024,8 @@ static int efuse_pg_packet_write(struct ieee80211_hw *hw,
} }
} }
if (efuse_addr >= (EFUSE_MAX_SIZE - EFUSE_OOB_PROTECT_BYTES)) { if (efuse_addr >= (EFUSE_MAX_SIZE -
rtlpriv->cfg->maps[EFUSE_OOB_PROTECT_BYTES_LEN])) {
RT_TRACE(rtlpriv, COMP_EFUSE, DBG_LOUD, RT_TRACE(rtlpriv, COMP_EFUSE, DBG_LOUD,
"efuse_addr(%#x) Out of size!!\n", efuse_addr); "efuse_addr(%#x) Out of size!!\n", efuse_addr);
} }
......
...@@ -59,7 +59,7 @@ static u8 _rtl_mac_to_hwqueue(struct ieee80211_hw *hw, ...@@ -59,7 +59,7 @@ static u8 _rtl_mac_to_hwqueue(struct ieee80211_hw *hw,
if (unlikely(ieee80211_is_beacon(fc))) if (unlikely(ieee80211_is_beacon(fc)))
return BEACON_QUEUE; return BEACON_QUEUE;
if (ieee80211_is_mgmt(fc)) if (ieee80211_is_mgmt(fc) || ieee80211_is_ctl(fc))
return MGNT_QUEUE; return MGNT_QUEUE;
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8192SE) if (rtlhal->hw_type == HARDWARE_TYPE_RTL8192SE)
if (ieee80211_is_nullfunc(fc)) if (ieee80211_is_nullfunc(fc))
...@@ -271,9 +271,6 @@ static void rtl_pci_enable_aspm(struct ieee80211_hw *hw) ...@@ -271,9 +271,6 @@ static void rtl_pci_enable_aspm(struct ieee80211_hw *hw)
struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw); struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw);
struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
u8 pcibridge_busnum = pcipriv->ndis_adapter.pcibridge_busnum;
u8 pcibridge_devnum = pcipriv->ndis_adapter.pcibridge_devnum;
u8 pcibridge_funcnum = pcipriv->ndis_adapter.pcibridge_funcnum;
u8 pcibridge_vendor = pcipriv->ndis_adapter.pcibridge_vendor; u8 pcibridge_vendor = pcipriv->ndis_adapter.pcibridge_vendor;
u8 num4bytes = pcipriv->ndis_adapter.num4bytes; u8 num4bytes = pcipriv->ndis_adapter.num4bytes;
u16 aspmlevel; u16 aspmlevel;
...@@ -302,8 +299,7 @@ static void rtl_pci_enable_aspm(struct ieee80211_hw *hw) ...@@ -302,8 +299,7 @@ static void rtl_pci_enable_aspm(struct ieee80211_hw *hw)
u_pcibridge_aspmsetting); u_pcibridge_aspmsetting);
RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
"PlatformEnableASPM():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n", "PlatformEnableASPM(): Write reg[%x] = %x\n",
pcibridge_busnum, pcibridge_devnum, pcibridge_funcnum,
(pcipriv->ndis_adapter.pcibridge_pciehdr_offset + 0x10), (pcipriv->ndis_adapter.pcibridge_pciehdr_offset + 0x10),
u_pcibridge_aspmsetting); u_pcibridge_aspmsetting);
...@@ -349,6 +345,49 @@ static bool rtl_pci_get_amd_l1_patch(struct ieee80211_hw *hw) ...@@ -349,6 +345,49 @@ static bool rtl_pci_get_amd_l1_patch(struct ieee80211_hw *hw)
return status; return status;
} }
static bool rtl_pci_check_buddy_priv(struct ieee80211_hw *hw,
struct rtl_priv **buddy_priv)
{
struct rtl_priv *rtlpriv = rtl_priv(hw);
struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw);
bool find_buddy_priv = false;
struct rtl_priv *tpriv = NULL;
struct rtl_pci_priv *tpcipriv = NULL;
if (!list_empty(&rtlpriv->glb_var->glb_priv_list)) {
list_for_each_entry(tpriv, &rtlpriv->glb_var->glb_priv_list,
list) {
if (tpriv) {
tpcipriv = (struct rtl_pci_priv *)tpriv->priv;
RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
"pcipriv->ndis_adapter.funcnumber %x\n",
pcipriv->ndis_adapter.funcnumber);
RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
"tpcipriv->ndis_adapter.funcnumber %x\n",
tpcipriv->ndis_adapter.funcnumber);
if ((pcipriv->ndis_adapter.busnumber ==
tpcipriv->ndis_adapter.busnumber) &&
(pcipriv->ndis_adapter.devnumber ==
tpcipriv->ndis_adapter.devnumber) &&
(pcipriv->ndis_adapter.funcnumber !=
tpcipriv->ndis_adapter.funcnumber)) {
find_buddy_priv = true;
break;
}
}
}
}
RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
"find_buddy_priv %d\n", find_buddy_priv);
if (find_buddy_priv)
*buddy_priv = tpriv;
return find_buddy_priv;
}
static void rtl_pci_get_linkcontrol_field(struct ieee80211_hw *hw) static void rtl_pci_get_linkcontrol_field(struct ieee80211_hw *hw)
{ {
struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw); struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw);
...@@ -420,17 +459,14 @@ static void _rtl_pci_io_handler_init(struct device *dev, ...@@ -420,17 +459,14 @@ static void _rtl_pci_io_handler_init(struct device *dev,
} }
static void _rtl_pci_io_handler_release(struct ieee80211_hw *hw)
{
}
static bool _rtl_update_earlymode_info(struct ieee80211_hw *hw, static bool _rtl_update_earlymode_info(struct ieee80211_hw *hw,
struct sk_buff *skb, struct rtl_tcb_desc *tcb_desc, u8 tid) struct sk_buff *skb, struct rtl_tcb_desc *tcb_desc, u8 tid)
{ {
struct rtl_priv *rtlpriv = rtl_priv(hw); struct rtl_priv *rtlpriv = rtl_priv(hw);
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
u8 additionlen = FCS_LEN; struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
struct sk_buff *next_skb; struct sk_buff *next_skb;
u8 additionlen = FCS_LEN;
/* here open is 4, wep/tkip is 8, aes is 12*/ /* here open is 4, wep/tkip is 8, aes is 12*/
if (info->control.hw_key) if (info->control.hw_key)
...@@ -455,7 +491,7 @@ static bool _rtl_update_earlymode_info(struct ieee80211_hw *hw, ...@@ -455,7 +491,7 @@ static bool _rtl_update_earlymode_info(struct ieee80211_hw *hw,
next_skb)) next_skb))
break; break;
if (tcb_desc->empkt_num >= 5) if (tcb_desc->empkt_num >= rtlhal->max_earlymode_num)
break; break;
} }
spin_unlock_bh(&rtlpriv->locks.waitq_lock); spin_unlock_bh(&rtlpriv->locks.waitq_lock);
...@@ -471,11 +507,17 @@ static void _rtl_pci_tx_chk_waitq(struct ieee80211_hw *hw) ...@@ -471,11 +507,17 @@ static void _rtl_pci_tx_chk_waitq(struct ieee80211_hw *hw)
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
struct sk_buff *skb = NULL; struct sk_buff *skb = NULL;
struct ieee80211_tx_info *info = NULL; struct ieee80211_tx_info *info = NULL;
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
int tid; int tid;
if (!rtlpriv->rtlhal.earlymode_enable) if (!rtlpriv->rtlhal.earlymode_enable)
return; return;
if (rtlpriv->dm.supp_phymode_switch &&
(rtlpriv->easy_concurrent_ctl.switch_in_process ||
(rtlpriv->buddy_priv &&
rtlpriv->buddy_priv->easy_concurrent_ctl.switch_in_process)))
return;
/* we juse use em for BE/BK/VI/VO */ /* we juse use em for BE/BK/VI/VO */
for (tid = 7; tid >= 0; tid--) { for (tid = 7; tid >= 0; tid--) {
u8 hw_queue = ac_to_hwq[rtl_tid_to_ac(tid)]; u8 hw_queue = ac_to_hwq[rtl_tid_to_ac(tid)];
...@@ -487,7 +529,8 @@ static void _rtl_pci_tx_chk_waitq(struct ieee80211_hw *hw) ...@@ -487,7 +529,8 @@ static void _rtl_pci_tx_chk_waitq(struct ieee80211_hw *hw)
spin_lock_bh(&rtlpriv->locks.waitq_lock); spin_lock_bh(&rtlpriv->locks.waitq_lock);
if (!skb_queue_empty(&mac->skb_waitq[tid]) && if (!skb_queue_empty(&mac->skb_waitq[tid]) &&
(ring->entries - skb_queue_len(&ring->queue) > 5)) { (ring->entries - skb_queue_len(&ring->queue) >
rtlhal->max_earlymode_num)) {
skb = skb_dequeue(&mac->skb_waitq[tid]); skb = skb_dequeue(&mac->skb_waitq[tid]);
} else { } else {
spin_unlock_bh(&rtlpriv->locks.waitq_lock); spin_unlock_bh(&rtlpriv->locks.waitq_lock);
...@@ -525,9 +568,8 @@ static void _rtl_pci_tx_isr(struct ieee80211_hw *hw, int prio) ...@@ -525,9 +568,8 @@ static void _rtl_pci_tx_isr(struct ieee80211_hw *hw, int prio)
u8 own = (u8) rtlpriv->cfg->ops->get_desc((u8 *) entry, true, u8 own = (u8) rtlpriv->cfg->ops->get_desc((u8 *) entry, true,
HW_DESC_OWN); HW_DESC_OWN);
/* /*beacon packet will only use the first
*beacon packet will only use the first *descriptor by defaut, and the own may not
*descriptor defautly,and the own may not
*be cleared by the hardware *be cleared by the hardware
*/ */
if (own) if (own)
...@@ -558,8 +600,9 @@ static void _rtl_pci_tx_isr(struct ieee80211_hw *hw, int prio) ...@@ -558,8 +600,9 @@ static void _rtl_pci_tx_isr(struct ieee80211_hw *hw, int prio)
} }
/* for sw LPS, just after NULL skb send out, we can /* for sw LPS, just after NULL skb send out, we can
* sure AP kown we are sleeped, our we should not let * sure AP knows we are sleeping, we should not let
* rf to sleep*/ * rf sleep
*/
fc = rtl_get_fc(skb); fc = rtl_get_fc(skb);
if (ieee80211_is_nullfunc(fc)) { if (ieee80211_is_nullfunc(fc)) {
if (ieee80211_has_pm(fc)) { if (ieee80211_has_pm(fc)) {
...@@ -569,6 +612,15 @@ static void _rtl_pci_tx_isr(struct ieee80211_hw *hw, int prio) ...@@ -569,6 +612,15 @@ static void _rtl_pci_tx_isr(struct ieee80211_hw *hw, int prio)
rtlpriv->psc.state_inap = false; rtlpriv->psc.state_inap = false;
} }
} }
if (ieee80211_is_action(fc)) {
struct ieee80211_mgmt *action_frame =
(struct ieee80211_mgmt *)skb->data;
if (action_frame->u.action.u.ht_smps.action ==
WLAN_HT_ACTION_SMPS) {
dev_kfree_skb(skb);
goto tx_status_ok;
}
}
/* update tid tx pkt num */ /* update tid tx pkt num */
tid = rtl_get_tid(skb); tid = rtl_get_tid(skb);
...@@ -637,6 +689,10 @@ static void _rtl_receive_one(struct ieee80211_hw *hw, struct sk_buff *skb, ...@@ -637,6 +689,10 @@ static void _rtl_receive_one(struct ieee80211_hw *hw, struct sk_buff *skb,
rtlpriv->link_info.num_rx_inperiod++; rtlpriv->link_info.num_rx_inperiod++;
} }
/* static bcn for roaming */
rtl_beacon_statistic(hw, skb);
rtl_p2p_info(hw, (void *)skb->data, skb->len);
/* for sw lps */ /* for sw lps */
rtl_swlps_beacon(hw, (void *)skb->data, skb->len); rtl_swlps_beacon(hw, (void *)skb->data, skb->len);
rtl_recognize_peer(hw, (void *)skb->data, skb->len); rtl_recognize_peer(hw, (void *)skb->data, skb->len);
...@@ -884,6 +940,16 @@ static irqreturn_t _rtl_pci_interrupt(int irq, void *dev_id) ...@@ -884,6 +940,16 @@ static irqreturn_t _rtl_pci_interrupt(int irq, void *dev_id)
_rtl_pci_rx_interrupt(hw); _rtl_pci_rx_interrupt(hw);
} }
/*fw related*/
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8723AE) {
if (inta & rtlpriv->cfg->maps[RTL_IMR_C2HCMD]) {
RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE,
"firmware interrupt!\n");
queue_delayed_work(rtlpriv->works.rtl_wq,
&rtlpriv->works.fwevt_wq, 0);
}
}
if (rtlpriv->rtlhal.earlymode_enable) if (rtlpriv->rtlhal.earlymode_enable)
tasklet_schedule(&rtlpriv->works.irq_tasklet); tasklet_schedule(&rtlpriv->works.irq_tasklet);
...@@ -1458,10 +1524,14 @@ static void rtl_pci_flush(struct ieee80211_hw *hw, bool drop) ...@@ -1458,10 +1524,14 @@ static void rtl_pci_flush(struct ieee80211_hw *hw, bool drop)
struct rtl_priv *rtlpriv = rtl_priv(hw); struct rtl_priv *rtlpriv = rtl_priv(hw);
struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw); struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw);
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
u16 i = 0; u16 i = 0;
int queue_id; int queue_id;
struct rtl8192_tx_ring *ring; struct rtl8192_tx_ring *ring;
if (mac->skip_scan)
return;
for (queue_id = RTL_PCI_MAX_TX_QUEUE_COUNT - 1; queue_id >= 0;) { for (queue_id = RTL_PCI_MAX_TX_QUEUE_COUNT - 1; queue_id >= 0;) {
u32 queue_len; u32 queue_len;
ring = &pcipriv->dev.tx_ring[queue_id]; ring = &pcipriv->dev.tx_ring[queue_id];
...@@ -1704,6 +1774,9 @@ static bool _rtl_pci_find_adapter(struct pci_dev *pdev, ...@@ -1704,6 +1774,9 @@ static bool _rtl_pci_find_adapter(struct pci_dev *pdev,
pcipriv->ndis_adapter.devnumber = PCI_SLOT(pdev->devfn); pcipriv->ndis_adapter.devnumber = PCI_SLOT(pdev->devfn);
pcipriv->ndis_adapter.funcnumber = PCI_FUNC(pdev->devfn); pcipriv->ndis_adapter.funcnumber = PCI_FUNC(pdev->devfn);
/* some ARM have no bridge_pdev and will crash here
* so we should check if bridge_pdev is NULL
*/
if (bridge_pdev) { if (bridge_pdev) {
/*find bridge info if available */ /*find bridge info if available */
pcipriv->ndis_adapter.pcibridge_vendorid = bridge_pdev->vendor; pcipriv->ndis_adapter.pcibridge_vendorid = bridge_pdev->vendor;
...@@ -1758,6 +1831,7 @@ static bool _rtl_pci_find_adapter(struct pci_dev *pdev, ...@@ -1758,6 +1831,7 @@ static bool _rtl_pci_find_adapter(struct pci_dev *pdev,
pcipriv->ndis_adapter.amd_l1_patch); pcipriv->ndis_adapter.amd_l1_patch);
rtl_pci_parse_configuration(pdev, hw); rtl_pci_parse_configuration(pdev, hw);
list_add_tail(&rtlpriv->list, &rtlpriv->glb_var->glb_priv_list);
return true; return true;
} }
...@@ -1804,6 +1878,7 @@ int rtl_pci_probe(struct pci_dev *pdev, ...@@ -1804,6 +1878,7 @@ int rtl_pci_probe(struct pci_dev *pdev,
pci_set_drvdata(pdev, hw); pci_set_drvdata(pdev, hw);
rtlpriv = hw->priv; rtlpriv = hw->priv;
rtlpriv->hw = hw;
pcipriv = (void *)rtlpriv->priv; pcipriv = (void *)rtlpriv->priv;
pcipriv->dev.pdev = pdev; pcipriv->dev.pdev = pdev;
init_completion(&rtlpriv->firmware_loading_complete); init_completion(&rtlpriv->firmware_loading_complete);
...@@ -1812,6 +1887,7 @@ int rtl_pci_probe(struct pci_dev *pdev, ...@@ -1812,6 +1887,7 @@ int rtl_pci_probe(struct pci_dev *pdev,
rtlpriv->rtlhal.interface = INTF_PCI; rtlpriv->rtlhal.interface = INTF_PCI;
rtlpriv->cfg = (struct rtl_hal_cfg *)(id->driver_data); rtlpriv->cfg = (struct rtl_hal_cfg *)(id->driver_data);
rtlpriv->intf_ops = &rtl_pci_ops; rtlpriv->intf_ops = &rtl_pci_ops;
rtlpriv->glb_var = &global_var;
/* /*
*init dbgp flags before all *init dbgp flags before all
...@@ -1916,7 +1992,6 @@ int rtl_pci_probe(struct pci_dev *pdev, ...@@ -1916,7 +1992,6 @@ int rtl_pci_probe(struct pci_dev *pdev,
fail3: fail3:
rtl_deinit_core(hw); rtl_deinit_core(hw);
_rtl_pci_io_handler_release(hw);
if (rtlpriv->io.pci_mem_start != 0) if (rtlpriv->io.pci_mem_start != 0)
pci_iounmap(pdev, (void __iomem *)rtlpriv->io.pci_mem_start); pci_iounmap(pdev, (void __iomem *)rtlpriv->io.pci_mem_start);
...@@ -1965,14 +2040,15 @@ void rtl_pci_disconnect(struct pci_dev *pdev) ...@@ -1965,14 +2040,15 @@ void rtl_pci_disconnect(struct pci_dev *pdev)
rtl_pci_deinit(hw); rtl_pci_deinit(hw);
rtl_deinit_core(hw); rtl_deinit_core(hw);
_rtl_pci_io_handler_release(hw);
rtlpriv->cfg->ops->deinit_sw_vars(hw); rtlpriv->cfg->ops->deinit_sw_vars(hw);
if (rtlpci->irq_alloc) { if (rtlpci->irq_alloc) {
synchronize_irq(rtlpci->pdev->irq);
free_irq(rtlpci->pdev->irq, hw); free_irq(rtlpci->pdev->irq, hw);
rtlpci->irq_alloc = 0; rtlpci->irq_alloc = 0;
} }
list_del(&rtlpriv->list);
if (rtlpriv->io.pci_mem_start != 0) { if (rtlpriv->io.pci_mem_start != 0) {
pci_iounmap(pdev, (void __iomem *)rtlpriv->io.pci_mem_start); pci_iounmap(pdev, (void __iomem *)rtlpriv->io.pci_mem_start);
pci_release_regions(pdev); pci_release_regions(pdev);
...@@ -2034,6 +2110,7 @@ struct rtl_intf_ops rtl_pci_ops = { ...@@ -2034,6 +2110,7 @@ struct rtl_intf_ops rtl_pci_ops = {
.read_efuse_byte = read_efuse_byte, .read_efuse_byte = read_efuse_byte,
.adapter_start = rtl_pci_start, .adapter_start = rtl_pci_start,
.adapter_stop = rtl_pci_stop, .adapter_stop = rtl_pci_stop,
.check_buddy_priv = rtl_pci_check_buddy_priv,
.adapter_tx = rtl_pci_tx, .adapter_tx = rtl_pci_tx,
.flush = rtl_pci_flush, .flush = rtl_pci_flush,
.reset_trx_ring = rtl_pci_reset_trx_ring, .reset_trx_ring = rtl_pci_reset_trx_ring,
......
...@@ -175,6 +175,7 @@ struct rtl_pci { ...@@ -175,6 +175,7 @@ struct rtl_pci {
/*irq */ /*irq */
u8 irq_alloc; u8 irq_alloc;
u32 irq_mask[2]; u32 irq_mask[2];
u32 sys_irq_mask;
/*Bcn control register setting */ /*Bcn control register setting */
u32 reg_bcn_ctrl_val; u32 reg_bcn_ctrl_val;
......
This diff is collapsed.
...@@ -47,5 +47,7 @@ void rtl_swlps_wq_callback(void *data); ...@@ -47,5 +47,7 @@ void rtl_swlps_wq_callback(void *data);
void rtl_swlps_rfon_wq_callback(void *data); void rtl_swlps_rfon_wq_callback(void *data);
void rtl_swlps_rf_awake(struct ieee80211_hw *hw); void rtl_swlps_rf_awake(struct ieee80211_hw *hw);
void rtl_swlps_rf_sleep(struct ieee80211_hw *hw); void rtl_swlps_rf_sleep(struct ieee80211_hw *hw);
void rtl_p2p_ps_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state);
void rtl_p2p_info(struct ieee80211_hw *hw, void *data, unsigned int len);
#endif #endif
...@@ -104,6 +104,7 @@ ...@@ -104,6 +104,7 @@
/* for early mode */ /* for early mode */
#define FCS_LEN 4 #define FCS_LEN 4
#define EM_HDR_LEN 8 #define EM_HDR_LEN 8
enum intf_type { enum intf_type {
INTF_PCI = 0, INTF_PCI = 0,
INTF_USB = 1, INTF_USB = 1,
...@@ -263,7 +264,7 @@ enum hw_variables { ...@@ -263,7 +264,7 @@ enum hw_variables {
HW_VAR_RATR_0, HW_VAR_RATR_0,
HW_VAR_RRSR, HW_VAR_RRSR,
HW_VAR_CPU_RST, HW_VAR_CPU_RST,
HW_VAR_CECHK_BSSID, HW_VAR_CHECK_BSSID,
HW_VAR_LBK_MODE, HW_VAR_LBK_MODE,
HW_VAR_AES_11N_FIX, HW_VAR_AES_11N_FIX,
HW_VAR_USB_RX_AGGR, HW_VAR_USB_RX_AGGR,
...@@ -278,7 +279,10 @@ enum hw_variables { ...@@ -278,7 +279,10 @@ enum hw_variables {
HW_VAR_SET_RPWM, HW_VAR_SET_RPWM,
HW_VAR_H2C_FW_PWRMODE, HW_VAR_H2C_FW_PWRMODE,
HW_VAR_H2C_FW_JOINBSSRPT, HW_VAR_H2C_FW_JOINBSSRPT,
HW_VAR_H2C_FW_P2P_PS_OFFLOAD,
HW_VAR_FW_PSMODE_STATUS, HW_VAR_FW_PSMODE_STATUS,
HW_VAR_RESUME_CLK_ON,
HW_VAR_FW_LPS_ACTION,
HW_VAR_1X1_RECV_COMBINE, HW_VAR_1X1_RECV_COMBINE,
HW_VAR_STOP_SEND_BEACON, HW_VAR_STOP_SEND_BEACON,
HW_VAR_TSF_TIMER, HW_VAR_TSF_TIMER,
...@@ -305,6 +309,7 @@ enum hw_variables { ...@@ -305,6 +309,7 @@ enum hw_variables {
HW_VAR_INT_AC, HW_VAR_INT_AC,
HW_VAR_RF_TIMING, HW_VAR_RF_TIMING,
HAL_DEF_WOWLAN,
HW_VAR_MRC, HW_VAR_MRC,
HW_VAR_MGT_FILTER, HW_VAR_MGT_FILTER,
...@@ -461,6 +466,7 @@ enum rtl_var_map { ...@@ -461,6 +466,7 @@ enum rtl_var_map {
EFUSE_MAX_SECTION_MAP, EFUSE_MAX_SECTION_MAP,
EFUSE_REAL_CONTENT_SIZE, EFUSE_REAL_CONTENT_SIZE,
EFUSE_OOB_PROTECT_BYTES_LEN, EFUSE_OOB_PROTECT_BYTES_LEN,
EFUSE_ACCESS,
/*CAM map */ /*CAM map */
RWCAM, RWCAM,
...@@ -742,6 +748,11 @@ struct false_alarm_statistics { ...@@ -742,6 +748,11 @@ struct false_alarm_statistics {
u32 cnt_ofdm_fail; u32 cnt_ofdm_fail;
u32 cnt_cck_fail; u32 cnt_cck_fail;
u32 cnt_all; u32 cnt_all;
u32 cnt_ofdm_cca;
u32 cnt_cck_cca;
u32 cnt_cca_all;
u32 cnt_bw_usc;
u32 cnt_bw_lsc;
}; };
struct init_gain { struct init_gain {
...@@ -826,8 +837,67 @@ struct rtl_rfkill { ...@@ -826,8 +837,67 @@ struct rtl_rfkill {
bool rfkill_state; /*0 is off, 1 is on */ bool rfkill_state; /*0 is off, 1 is on */
}; };
/*for P2P PS**/
#define P2P_MAX_NOA_NUM 2
enum p2p_role {
P2P_ROLE_DISABLE = 0,
P2P_ROLE_DEVICE = 1,
P2P_ROLE_CLIENT = 2,
P2P_ROLE_GO = 3
};
enum p2p_ps_state {
P2P_PS_DISABLE = 0,
P2P_PS_ENABLE = 1,
P2P_PS_SCAN = 2,
P2P_PS_SCAN_DONE = 3,
P2P_PS_ALLSTASLEEP = 4, /* for P2P GO */
};
enum p2p_ps_mode {
P2P_PS_NONE = 0,
P2P_PS_CTWINDOW = 1,
P2P_PS_NOA = 2,
P2P_PS_MIX = 3, /* CTWindow and NoA */
};
struct rtl_p2p_ps_info {
enum p2p_ps_mode p2p_ps_mode; /* indicate p2p ps mode */
enum p2p_ps_state p2p_ps_state; /* indicate p2p ps state */
u8 noa_index; /* Identifies instance of Notice of Absence timing. */
/* Client traffic window. A period of time in TU after TBTT. */
u8 ctwindow;
u8 opp_ps; /* opportunistic power save. */
u8 noa_num; /* number of NoA descriptor in P2P IE. */
/* Count for owner, Type of client. */
u8 noa_count_type[P2P_MAX_NOA_NUM];
/* Max duration for owner, preferred or min acceptable duration
* for client.
*/
u32 noa_duration[P2P_MAX_NOA_NUM];
/* Length of interval for owner, preferred or max acceptable intervali
* of client.
*/
u32 noa_interval[P2P_MAX_NOA_NUM];
/* schedule in terms of the lower 4 bytes of the TSF timer. */
u32 noa_start_time[P2P_MAX_NOA_NUM];
};
struct p2p_ps_offload_t {
u8 offload_en:1;
u8 role:1; /* 1: Owner, 0: Client */
u8 ctwindow_en:1;
u8 noa0_en:1;
u8 noa1_en:1;
u8 allstasleep:1;
u8 discovery:1;
u8 reserved:1;
};
#define IQK_MATRIX_REG_NUM 8 #define IQK_MATRIX_REG_NUM 8
#define IQK_MATRIX_SETTINGS_NUM (1 + 24 + 21) #define IQK_MATRIX_SETTINGS_NUM (1 + 24 + 21)
struct iqk_matrix_regs { struct iqk_matrix_regs {
bool iqk_done; bool iqk_done;
long value[1][IQK_MATRIX_REG_NUM]; long value[1][IQK_MATRIX_REG_NUM];
...@@ -902,6 +972,8 @@ struct rtl_phy { ...@@ -902,6 +972,8 @@ struct rtl_phy {
/* the current Tx power level */ /* the current Tx power level */
u8 cur_cck_txpwridx; u8 cur_cck_txpwridx;
u8 cur_ofdm24g_txpwridx; u8 cur_ofdm24g_txpwridx;
u8 cur_bw20_txpwridx;
u8 cur_bw40_txpwridx;
u32 rfreg_chnlval[2]; u32 rfreg_chnlval[2];
bool apk_done; bool apk_done;
...@@ -940,20 +1012,21 @@ struct rtl_ht_agg { ...@@ -940,20 +1012,21 @@ struct rtl_ht_agg {
u8 rx_agg_state; u8 rx_agg_state;
}; };
struct rssi_sta {
long undec_sm_pwdb;
};
struct rtl_tid_data { struct rtl_tid_data {
u16 seq_number; u16 seq_number;
struct rtl_ht_agg agg; struct rtl_ht_agg agg;
}; };
struct rssi_sta {
long undec_sm_pwdb;
};
struct rtl_sta_info { struct rtl_sta_info {
struct list_head list; struct list_head list;
u8 ratr_index; u8 ratr_index;
u8 wireless_mode; u8 wireless_mode;
u8 mimo_ps; u8 mimo_ps;
u8 mac_addr[ETH_ALEN];
struct rtl_tid_data tids[MAX_TID_COUNT]; struct rtl_tid_data tids[MAX_TID_COUNT];
/* just used for ap adhoc or mesh*/ /* just used for ap adhoc or mesh*/
...@@ -1005,6 +1078,8 @@ struct rtl_mac { ...@@ -1005,6 +1078,8 @@ struct rtl_mac {
int n_bitrates; int n_bitrates;
bool offchan_delay; bool offchan_delay;
u8 p2p; /*using p2p role*/
bool p2p_in_use;
/*filters */ /*filters */
u32 rx_conf; u32 rx_conf;
...@@ -1014,11 +1089,11 @@ struct rtl_mac { ...@@ -1014,11 +1089,11 @@ struct rtl_mac {
bool act_scanning; bool act_scanning;
u8 cnt_after_linked; u8 cnt_after_linked;
bool skip_scan;
/* early mode */ /* early mode */
/* skb wait queue */ /* skb wait queue */
struct sk_buff_head skb_waitq[MAX_TID_COUNT]; struct sk_buff_head skb_waitq[MAX_TID_COUNT];
u8 earlymode_threshold;
/*RDG*/ /*RDG*/
bool rdg_en; bool rdg_en;
...@@ -1042,6 +1117,7 @@ struct rtl_mac { ...@@ -1042,6 +1117,7 @@ struct rtl_mac {
u8 retry_short; u8 retry_short;
u8 retry_long; u8 retry_long;
u16 assoc_id; u16 assoc_id;
bool hiddenssid;
/*IBSS*/ /*IBSS*/
int beacon_interval; int beacon_interval;
...@@ -1111,10 +1187,13 @@ struct bt_coexist_8723 { ...@@ -1111,10 +1187,13 @@ struct bt_coexist_8723 {
struct rtl_hal { struct rtl_hal {
struct ieee80211_hw *hw; struct ieee80211_hw *hw;
struct bt_coexist_8723 hal_coex_8723; bool driver_is_goingto_unload;
bool up_first_time; bool up_first_time;
bool first_init;
bool being_init_adapter; bool being_init_adapter;
bool bbrf_ready; bool bbrf_ready;
bool mac_func_enable;
struct bt_coexist_8723 hal_coex_8723;
enum intf_type interface; enum intf_type interface;
u16 hw_type; /*92c or 92d or 92s and so on */ u16 hw_type; /*92c or 92d or 92s and so on */
...@@ -1122,6 +1201,7 @@ struct rtl_hal { ...@@ -1122,6 +1201,7 @@ struct rtl_hal {
u8 oem_id; u8 oem_id;
u32 version; /*version of chip */ u32 version; /*version of chip */
u8 state; /*stop 0, start 1 */ u8 state; /*stop 0, start 1 */
u8 board_type;
/*firmware */ /*firmware */
u32 fwsize; u32 fwsize;
...@@ -1141,6 +1221,10 @@ struct rtl_hal { ...@@ -1141,6 +1221,10 @@ struct rtl_hal {
bool set_fwcmd_inprogress; bool set_fwcmd_inprogress;
u8 current_fwcmd_io; u8 current_fwcmd_io;
bool fw_clk_change_in_progress;
bool allow_sw_to_change_hwclc;
u8 fw_ps_state;
struct p2p_ps_offload_t p2p_ps_offload;
/**/ /**/
bool driver_going2unload; bool driver_going2unload;
...@@ -1157,6 +1241,7 @@ struct rtl_hal { ...@@ -1157,6 +1241,7 @@ struct rtl_hal {
/* just for DualMac S3S4 */ /* just for DualMac S3S4 */
u8 macphyctl_reg; u8 macphyctl_reg;
bool earlymode_enable; bool earlymode_enable;
u8 max_earlymode_num;
/* Dual mac*/ /* Dual mac*/
bool during_mac0init_radiob; bool during_mac0init_radiob;
bool during_mac1init_radioa; bool during_mac1init_radioa;
...@@ -1341,6 +1426,7 @@ struct rtl_ps_ctl { ...@@ -1341,6 +1426,7 @@ struct rtl_ps_ctl {
bool fw_current_inpsmode; bool fw_current_inpsmode;
u8 reg_max_lps_awakeintvl; u8 reg_max_lps_awakeintvl;
bool report_linked; bool report_linked;
bool low_power_enable;/*for 32k*/
/*for IPS */ /*for IPS */
bool inactiveps; bool inactiveps;
...@@ -1373,6 +1459,11 @@ struct rtl_ps_ctl { ...@@ -1373,6 +1459,11 @@ struct rtl_ps_ctl {
unsigned long last_beacon; unsigned long last_beacon;
unsigned long last_action; unsigned long last_action;
unsigned long last_slept; unsigned long last_slept;
/*For P2P PS */
struct rtl_p2p_ps_info p2p_ps_info;
u8 pwr_mode;
u8 smart_ps;
}; };
struct rtl_stats { struct rtl_stats {
...@@ -1553,7 +1644,7 @@ struct rtl_hal_ops { ...@@ -1553,7 +1644,7 @@ struct rtl_hal_ops {
void (*allow_all_destaddr)(struct ieee80211_hw *hw, void (*allow_all_destaddr)(struct ieee80211_hw *hw,
bool allow_all_da, bool write_into_reg); bool allow_all_da, bool write_into_reg);
void (*linked_set_reg) (struct ieee80211_hw *hw); void (*linked_set_reg) (struct ieee80211_hw *hw);
void (*check_switch_to_dmdp) (struct ieee80211_hw *hw); void (*chk_switch_dmdp) (struct ieee80211_hw *hw);
void (*dualmac_easy_concurrent) (struct ieee80211_hw *hw); void (*dualmac_easy_concurrent) (struct ieee80211_hw *hw);
void (*dualmac_switch_to_dmdp) (struct ieee80211_hw *hw); void (*dualmac_switch_to_dmdp) (struct ieee80211_hw *hw);
bool (*phy_rf6052_config) (struct ieee80211_hw *hw); bool (*phy_rf6052_config) (struct ieee80211_hw *hw);
...@@ -1662,6 +1753,8 @@ struct rtl_locks { ...@@ -1662,6 +1753,8 @@ struct rtl_locks {
/*spin lock */ /*spin lock */
spinlock_t ips_lock; spinlock_t ips_lock;
spinlock_t irq_th_lock; spinlock_t irq_th_lock;
spinlock_t irq_pci_lock;
spinlock_t tx_lock;
spinlock_t h2c_lock; spinlock_t h2c_lock;
spinlock_t rf_ps_lock; spinlock_t rf_ps_lock;
spinlock_t rf_lock; spinlock_t rf_lock;
...@@ -1670,6 +1763,9 @@ struct rtl_locks { ...@@ -1670,6 +1763,9 @@ struct rtl_locks {
spinlock_t entry_list_lock; spinlock_t entry_list_lock;
spinlock_t usb_lock; spinlock_t usb_lock;
/*FW clock change */
spinlock_t fw_ps_lock;
/*Dual mac*/ /*Dual mac*/
spinlock_t cck_and_rw_pagea_lock; spinlock_t cck_and_rw_pagea_lock;
...@@ -1683,6 +1779,8 @@ struct rtl_works { ...@@ -1683,6 +1779,8 @@ struct rtl_works {
/*timer */ /*timer */
struct timer_list watchdog_timer; struct timer_list watchdog_timer;
struct timer_list dualmac_easyconcurrent_retrytimer; struct timer_list dualmac_easyconcurrent_retrytimer;
struct timer_list fw_clockoff_timer;
struct timer_list fast_antenna_training_timer;
/*task */ /*task */
struct tasklet_struct irq_tasklet; struct tasklet_struct irq_tasklet;
...@@ -1696,6 +1794,7 @@ struct rtl_works { ...@@ -1696,6 +1794,7 @@ struct rtl_works {
/* For SW LPS */ /* For SW LPS */
struct delayed_work ps_work; struct delayed_work ps_work;
struct delayed_work ps_rfon_wq; struct delayed_work ps_rfon_wq;
struct delayed_work fwevt_wq;
struct work_struct lps_leave_work; struct work_struct lps_leave_work;
}; };
...@@ -1802,6 +1901,7 @@ struct rtl_global_var { ...@@ -1802,6 +1901,7 @@ struct rtl_global_var {
}; };
struct rtl_priv { struct rtl_priv {
struct ieee80211_hw *hw;
struct completion firmware_loading_complete; struct completion firmware_loading_complete;
struct list_head list; struct list_head list;
struct rtl_priv *buddy_priv; struct rtl_priv *buddy_priv;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment