--- a/core.c
+++ b/core.c
-@@ -692,7 +692,7 @@ static void mwl_chnl_switch_event(struct
+@@ -718,7 +718,7 @@ static void mwl_chnl_switch_event(struct
vif = container_of((void *)mwl_vif, struct ieee80211_vif,
drv_priv);
spin_unlock_bh(&priv->vif_lock);
--- a/debugfs.c
+++ b/debugfs.c
-@@ -462,9 +462,9 @@ static ssize_t mwl_debugfs_vif_read(stru
+@@ -498,9 +498,9 @@ static ssize_t mwl_debugfs_vif_read(stru
switch (vif->type) {
case NL80211_IFTYPE_AP:
len += scnprintf(p + len, size - len, "type: ap\n");
len += scnprintf(p + len, size - len,
"ssid: %s\n", ssid);
len += scnprintf(p + len, size - len,
-@@ -486,8 +486,8 @@ static ssize_t mwl_debugfs_vif_read(stru
+@@ -522,8 +522,8 @@ static ssize_t mwl_debugfs_vif_read(stru
"type: unknown\n");
break;
}
len += scnprintf(p + len, size - len,
"channel: %d: width: %d\n",
chan_def->chan->hw_value,
-@@ -573,28 +573,28 @@ static ssize_t mwl_debugfs_sta_read(stru
- "amsdu cap: 0x%02x\n",
- sta_info->amsdu_ctrl.cap);
- }
-- if (sta->ht_cap.ht_supported) {
-+ if (sta->deflink.ht_cap.ht_supported) {
- len += scnprintf(p + len, size - len,
- "ht_cap: 0x%04x, ampdu: %02x, %02x\n",
-- sta->ht_cap.cap,
-- sta->ht_cap.ampdu_factor,
-- sta->ht_cap.ampdu_density);
-+ sta->deflink.ht_cap.cap,
-+ sta->deflink.ht_cap.ampdu_factor,
-+ sta->deflink.ht_cap.ampdu_density);
- len += scnprintf(p + len, size - len,
- "rx_mask: 0x%02x, %02x, %02x, %02x\n",
-- sta->ht_cap.mcs.rx_mask[0],
-- sta->ht_cap.mcs.rx_mask[1],
-- sta->ht_cap.mcs.rx_mask[2],
-- sta->ht_cap.mcs.rx_mask[3]);
-+ sta->deflink.ht_cap.mcs.rx_mask[0],
-+ sta->deflink.ht_cap.mcs.rx_mask[1],
-+ sta->deflink.ht_cap.mcs.rx_mask[2],
-+ sta->deflink.ht_cap.mcs.rx_mask[3]);
- }
-- if (sta->vht_cap.vht_supported) {
-+ if (sta->deflink.vht_cap.vht_supported) {
- len += scnprintf(p + len, size - len,
- "vht_cap: 0x%08x, mcs: %02x, %02x\n",
-- sta->vht_cap.cap,
-- sta->vht_cap.vht_mcs.rx_mcs_map,
-- sta->vht_cap.vht_mcs.tx_mcs_map);
-+ sta->deflink.vht_cap.cap,
-+ sta->deflink.vht_cap.vht_mcs.rx_mcs_map,
-+ sta->deflink.vht_cap.vht_mcs.tx_mcs_map);
- }
- len += scnprintf(p + len, size - len, "rx_bw: %d, rx_nss: %d\n",
-- sta->bandwidth, sta->rx_nss);
-+ sta->deflink.bandwidth, sta->deflink.rx_nss);
- len += scnprintf(p + len, size - len,
- "tdls: %d, tdls_init: %d\n",
- sta->tdls, sta->tdls_initiator);
+@@ -596,18 +596,18 @@ static ssize_t mwl_debugfs_sta_read(stru
+ sta_info->wds ? "true" : "false",
+ sta_info->ba_hist.enable ? "enable" : "disable",
+ sta_info->is_amsdu_allowed ? sta_info->amsdu_ctrl.cap : 0 ,
+- sta->ht_cap.ht_supported ? sta->ht_cap.cap : 0,
+- sta->ht_cap.ht_supported ? sta->ht_cap.ampdu_factor : 0,
+- sta->ht_cap.ht_supported ? sta->ht_cap.ampdu_density : 0,
+- sta->ht_cap.ht_supported ? sta->ht_cap.mcs.rx_mask[0] : 0,
+- sta->ht_cap.ht_supported ? sta->ht_cap.mcs.rx_mask[1] : 0,
+- sta->ht_cap.ht_supported ? sta->ht_cap.mcs.rx_mask[2] : 0,
+- sta->ht_cap.ht_supported ? sta->ht_cap.mcs.rx_mask[3] : 0,
+- sta->vht_cap.vht_supported ? sta->vht_cap.cap : 0,
+- sta->vht_cap.vht_supported ? sta->vht_cap.vht_mcs.rx_mcs_map : 0,
+- sta->vht_cap.vht_supported ? sta->vht_cap.vht_mcs.tx_mcs_map : 0,
+- sta->bandwidth,
+- sta->rx_nss,
++ sta->deflink.ht_cap.ht_supported ? sta->deflink.ht_cap.cap : 0,
++ sta->deflink.ht_cap.ht_supported ? sta->deflink.ht_cap.ampdu_factor : 0,
++ sta->deflink.ht_cap.ht_supported ? sta->deflink.ht_cap.ampdu_density : 0,
++ sta->deflink.ht_cap.ht_supported ? sta->deflink.ht_cap.mcs.rx_mask[0] : 0,
++ sta->deflink.ht_cap.ht_supported ? sta->deflink.ht_cap.mcs.rx_mask[1] : 0,
++ sta->deflink.ht_cap.ht_supported ? sta->deflink.ht_cap.mcs.rx_mask[2] : 0,
++ sta->deflink.ht_cap.ht_supported ? sta->deflink.ht_cap.mcs.rx_mask[3] : 0,
++ sta->deflink.vht_cap.vht_supported ? sta->deflink.vht_cap.cap : 0,
++ sta->deflink.vht_cap.vht_supported ? sta->deflink.vht_cap.vht_mcs.rx_mcs_map : 0,
++ sta->deflink.vht_cap.vht_supported ? sta->deflink.vht_cap.vht_mcs.tx_mcs_map : 0,
++ sta->deflink.bandwidth,
++ sta->deflink.rx_nss,
+ sta->tdls,
+ sta->tdls_initiator,
+ sta->wme,
--- a/hif/fwcmd.c
+++ b/hif/fwcmd.c
-@@ -634,8 +634,9 @@ einval:
+@@ -633,11 +633,15 @@ einval:
+ }
static int mwl_fwcmd_set_ap_beacon(struct mwl_priv *priv,
- struct mwl_vif *mwl_vif,
+- struct mwl_vif *mwl_vif,
- struct ieee80211_bss_conf *bss_conf)
+ struct ieee80211_vif *vif)
{
-+ struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
struct hostcmd_cmd_ap_beacon *pcmd;
struct ds_params *phy_ds_param_set;
++ struct mwl_vif *mwl_vif;
++ struct ieee80211_bss_conf *bss_conf;
++
++ mwl_vif = mwl_dev_get_vif(vif);
++ bss_conf = &vif->bss_conf;
-@@ -664,7 +665,7 @@ static int mwl_fwcmd_set_ap_beacon(struc
+ /* wmm structure of start command is defined less one byte,
+ * due to following field country is not used, add byte one
+@@ -664,7 +668,7 @@ static int mwl_fwcmd_set_ap_beacon(struc
pcmd->cmd_hdr.macid = mwl_vif->macid;
ether_addr_copy(pcmd->start_cmd.sta_mac_addr, mwl_vif->bssid);
if (priv->chip_type == MWL8997)
ether_addr_copy(pcmd->start_cmd.bssid, mwl_vif->bssid);
pcmd->start_cmd.bss_type = 1;
-@@ -2085,7 +2086,7 @@ int mwl_fwcmd_set_beacon(struct ieee8021
+@@ -2090,7 +2094,7 @@ int mwl_fwcmd_set_beacon(struct ieee8021
if (mwl_fwcmd_set_wsc_ie(hw, b_inf->ie_wsc_len, b_inf->ie_wsc_ptr))
goto err;
- if (mwl_fwcmd_set_ap_beacon(priv, mwl_vif, &vif->bss_conf))
-+ if (mwl_fwcmd_set_ap_beacon(priv, mwl_vif, vif))
++ if (mwl_fwcmd_set_ap_beacon(priv, vif))
goto err;
if (b_inf->cap_info & WLAN_CAPABILITY_SPECTRUM_MGMT)
-@@ -2147,38 +2148,38 @@ int mwl_fwcmd_set_new_stn_add(struct iee
+@@ -2152,38 +2156,38 @@ int mwl_fwcmd_set_new_stn_add(struct iee
ether_addr_copy(pcmd->mac_addr, sta->addr);
if (hw->conf.chandef.chan->band == NL80211_BAND_2GHZ)
}
pcmd->is_qos_sta = sta->wme;
-@@ -2234,38 +2235,38 @@ int mwl_fwcmd_set_new_stn_add_sc4(struct
+@@ -2239,38 +2243,38 @@ int mwl_fwcmd_set_new_stn_add_sc4(struct
ether_addr_copy(pcmd->mac_addr, sta->addr);
if (hw->conf.chandef.chan->band == NL80211_BAND_2GHZ)
}
pcmd->is_qos_sta = sta->wme;
-@@ -2782,9 +2783,9 @@ int mwl_fwcmd_create_ba(struct ieee80211
+@@ -2787,9 +2791,9 @@ int mwl_fwcmd_create_ba(struct ieee80211
pcmd->ba_info.create_params.flags = cpu_to_le32(ba_flags);
pcmd->ba_info.create_params.queue_id = stream->idx;
pcmd->ba_info.create_params.param_info =
IEEE80211_HT_AMPDU_PARM_DENSITY);
if (direction == BA_FLAG_DIRECTION_UP) {
pcmd->ba_info.create_params.reset_seq_no = 0;
-@@ -2794,9 +2795,9 @@ int mwl_fwcmd_create_ba(struct ieee80211
+@@ -2799,9 +2803,9 @@ int mwl_fwcmd_create_ba(struct ieee80211
pcmd->ba_info.create_params.current_seq = cpu_to_le16(0);
}
if (priv->chip_type == MWL8964 &&
IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK) >>
IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT);
}
+--- a/hif/pcie/8864/tx.c
++++ b/hif/pcie/8864/tx.c
+@@ -743,7 +743,7 @@ void pcie_8864_tx_xmit(struct ieee80211_
+ index = SYSADPT_TX_WMM_QUEUES - index - 1;
+ txpriority = index;
+
+- if (sta && sta->ht_cap.ht_supported &&
++ if (sta && sta->deflink.ht_cap.ht_supported &&
+ !(xmitcontrol & EAGLE_TXD_XMITCTRL_USE_MC_RATE) &&
+ ieee80211_is_data_qos(wh->frame_control)) {
+ tid = qos & 0xf;
+--- a/hif/pcie/8964/tx_ndp.c
++++ b/hif/pcie/8964/tx_ndp.c
+@@ -607,7 +607,7 @@ void pcie_tx_xmit_ndp(struct ieee80211_h
+ pcie_tx_encapsulate_frame(priv, skb, k_conf);
+ } else {
+ tid = qos & 0x7;
+- if (sta && sta->ht_cap.ht_supported && !eapol_frame &&
++ if (sta && sta->deflink.ht_cap.ht_supported && !eapol_frame &&
+ qos != 0xFFFF) {
+ pcie_tx_count_packet(sta, tid);
+ spin_lock_bh(&priv->stream_lock);
+--- a/hif/pcie/8997/tx.c
++++ b/hif/pcie/8997/tx.c
+@@ -81,7 +81,7 @@ static int pcie_txbd_ring_create(struct
+ wiphy_info(priv->hw->wiphy,
+ "TX ring: - base: %p, pbase: 0x%x, len: %d\n",
+ pcie_priv->txbd_ring_vbase,
+- pcie_priv->txbd_ring_pbase,
++ (u32)pcie_priv->txbd_ring_pbase,
+ pcie_priv->txbd_ring_size);
+
+ for (num = 0; num < PCIE_MAX_TXRX_BD; num++) {
+@@ -694,7 +694,7 @@ void pcie_8997_tx_xmit(struct ieee80211_
+ index = SYSADPT_TX_WMM_QUEUES - index - 1;
+ txpriority = index;
+
+- if (sta && sta->ht_cap.ht_supported &&
++ if (sta && sta->deflink.ht_cap.ht_supported &&
+ !(xmitcontrol & EAGLE_TXD_XMITCTRL_USE_MC_RATE) &&
+ ieee80211_is_data_qos(wh->frame_control)) {
+ tid = qos & 0xf;
--- a/mac80211.c
+++ b/mac80211.c
-@@ -371,15 +371,15 @@ static void mwl_mac80211_bss_info_change
+@@ -368,15 +368,15 @@ static void mwl_mac80211_bss_info_change
}
}
{
struct mwl_priv *priv = hw->priv;
struct mwl_vif *mwl_vif;
-@@ -429,8 +429,8 @@ static void mwl_mac80211_bss_info_change
+@@ -426,8 +426,8 @@ static void mwl_mac80211_bss_info_change
if (changed & (BSS_CHANGED_BEACON_INT | BSS_CHANGED_BEACON)) {
struct sk_buff *skb;
(!info->hidden_ssid)) {
if (mwl_vif->broadcast_ssid != true) {
mwl_fwcmd_broadcast_ssid_enable(hw, vif, true);
-@@ -444,7 +444,7 @@ static void mwl_mac80211_bss_info_change
+@@ -441,7 +441,7 @@ static void mwl_mac80211_bss_info_change
}
if (!mwl_vif->set_beacon) {
if (skb) {
mwl_fwcmd_set_beacon(hw, vif, skb->data, skb->len);
-@@ -461,7 +461,7 @@ static void mwl_mac80211_bss_info_change
+@@ -458,7 +458,7 @@ static void mwl_mac80211_bss_info_change
static void mwl_mac80211_bss_info_changed(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_bss_conf *info,
+ if (sta->deflink.ht_cap.ht_supported) {
sta_info->is_ampdu_allowed = true;
sta_info->is_amsdu_allowed = false;
-- if (sta->ht_cap.cap & IEEE80211_HT_CAP_MAX_AMSDU)
-+ if (sta->deflink.ht_cap.cap & IEEE80211_HT_CAP_MAX_AMSDU)
+- if (sta->ht_cap.cap & IEEE80211_HT_CAP_MAX_AMSDU) {
++ if (sta->deflink.ht_cap.cap & IEEE80211_HT_CAP_MAX_AMSDU) {
sta_info->amsdu_ctrl.cap = MWL_AMSDU_SIZE_8K;
- else
- sta_info->amsdu_ctrl.cap = MWL_AMSDU_SIZE_4K;
-@@ -668,7 +668,7 @@ static int mwl_mac80211_sta_remove(struc
+ sta_info->amsdu_ctrl.amsdu_allow_size = SYSADPT_AMSDU_8K_MAX_SIZE;
+ }
+@@ -670,7 +670,7 @@ static int mwl_mac80211_sta_remove(struc
static int mwl_mac80211_conf_tx(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
const struct ieee80211_tx_queue_params *params)
{
struct mwl_priv *priv = hw->priv;
-@@ -768,6 +768,7 @@ static int mwl_mac80211_ampdu_action(str
- spin_lock_bh(&priv->stream_lock);
- break;
- }
-+ break;
- case IEEE80211_AMPDU_RX_STOP:
- if (priv->chip_type == MWL8964) {
- struct mwl_ampdu_stream tmp;
-@@ -930,4 +931,5 @@ const struct ieee80211_ops mwl_mac80211_
+@@ -934,4 +934,5 @@ const struct ieee80211_ops mwl_mac80211_
.pre_channel_switch = mwl_mac80211_chnl_switch,
.sw_scan_start = mwl_mac80211_sw_scan_start,
.sw_scan_complete = mwl_mac80211_sw_scan_complete,
switch (format) {
case TX_RATE_FORMAT_LEGACY:
---- a/hif/pcie/tx.c
-+++ b/hif/pcie/tx.c
-@@ -157,7 +157,7 @@ static int pcie_txbd_ring_create(struct
- wiphy_info(priv->hw->wiphy,
- "TX ring: - base: %p, pbase: 0x%x, len: %d\n",
- pcie_priv->txbd_ring_vbase,
-- pcie_priv->txbd_ring_pbase,
-+ (u32)pcie_priv->txbd_ring_pbase,
- pcie_priv->txbd_ring_size);
-
- for (num = 0; num < PCIE_MAX_TXRX_BD; num++) {
-@@ -1153,7 +1153,7 @@ void pcie_tx_xmit(struct ieee80211_hw *h
- index = SYSADPT_TX_WMM_QUEUES - index - 1;
- txpriority = index;
-
-- if (sta && sta->ht_cap.ht_supported && !eapol_frame &&
-+ if (sta && sta->deflink.ht_cap.ht_supported && !eapol_frame &&
- ieee80211_is_data_qos(wh->frame_control)) {
- tid = qos & 0xf;
- pcie_tx_count_packet(sta, tid);
---- a/hif/pcie/tx_ndp.c
-+++ b/hif/pcie/tx_ndp.c
-@@ -602,7 +602,7 @@ void pcie_tx_xmit_ndp(struct ieee80211_h
- pcie_tx_encapsulate_frame(priv, skb, k_conf, NULL);
- } else {
- tid = qos & 0x7;
-- if (sta && sta->ht_cap.ht_supported && !eapol_frame &&
-+ if (sta && sta->deflink.ht_cap.ht_supported && !eapol_frame &&
- qos != 0xFFFF) {
- pcie_tx_count_packet(sta, tid);
- spin_lock_bh(&priv->stream_lock);