vif->netdev = NULL;
        vif->wdev.iftype = NL80211_IFTYPE_UNSPECIFIED;
        eth_zero_addr(vif->mac_addr);
+       eth_zero_addr(vif->bssid);
 
        return 0;
 }
        qtnf_cmd_send_del_intf(vif);
 err_cmd:
        vif->wdev.iftype = NL80211_IFTYPE_UNSPECIFIED;
+       eth_zero_addr(vif->mac_addr);
+       eth_zero_addr(vif->bssid);
 
        return ERR_PTR(-EFAULT);
 }
             struct cfg80211_connect_params *sme)
 {
        struct qtnf_vif *vif = qtnf_netdev_get_priv(dev);
-       struct qtnf_bss_config *bss_cfg;
        int ret;
 
        if (vif->wdev.iftype != NL80211_IFTYPE_STATION)
        if (vif->sta_state != QTNF_STA_DISCONNECTED)
                return -EBUSY;
 
-       bss_cfg = &vif->bss_cfg;
-       memset(bss_cfg, 0, sizeof(*bss_cfg));
-
-       bss_cfg->ssid_len = sme->ssid_len;
-       memcpy(&bss_cfg->ssid, sme->ssid, bss_cfg->ssid_len);
-       bss_cfg->auth_type = sme->auth_type;
-       bss_cfg->privacy = sme->privacy;
-       bss_cfg->mfp = sme->mfp;
-
-       if ((sme->bg_scan_period > 0) &&
-           (sme->bg_scan_period <= QTNF_MAX_BG_SCAN_PERIOD))
-               bss_cfg->bg_scan_period = sme->bg_scan_period;
-       else if (sme->bg_scan_period == -1)
-               bss_cfg->bg_scan_period = QTNF_DEFAULT_BG_SCAN_PERIOD;
-       else
-               bss_cfg->bg_scan_period = 0; /* disabled */
-
-       bss_cfg->connect_flags = 0;
-
-       if (sme->flags & ASSOC_REQ_DISABLE_HT)
-               bss_cfg->connect_flags |= QLINK_STA_CONNECT_DISABLE_HT;
-       if (sme->flags & ASSOC_REQ_DISABLE_VHT)
-               bss_cfg->connect_flags |= QLINK_STA_CONNECT_DISABLE_VHT;
-       if (sme->flags & ASSOC_REQ_USE_RRM)
-               bss_cfg->connect_flags |= QLINK_STA_CONNECT_USE_RRM;
-
-       memcpy(&bss_cfg->crypto, &sme->crypto, sizeof(bss_cfg->crypto));
-
        if (sme->bssid)
-               ether_addr_copy(bss_cfg->bssid, sme->bssid);
+               ether_addr_copy(vif->bssid, sme->bssid);
        else
-               eth_zero_addr(bss_cfg->bssid);
+               eth_zero_addr(vif->bssid);
 
        ret = qtnf_cmd_send_connect(vif, sme);
        if (ret) {
                        break;
                case QTNF_STA_CONNECTING:
                        cfg80211_connect_result(vif->netdev,
-                                               vif->bss_cfg.bssid, NULL, 0,
+                                               vif->bssid, NULL, 0,
                                                NULL, 0,
                                                WLAN_STATUS_UNSPECIFIED_FAILURE,
                                                GFP_KERNEL);
                switch (vif->sta_state) {
                case QTNF_STA_CONNECTING:
                        cfg80211_connect_result(vif->netdev,
-                                               vif->bss_cfg.bssid, NULL, 0,
+                                               vif->bssid, NULL, 0,
                                                NULL, 0,
                                                WLAN_STATUS_UNSPECIFIED_FAILURE,
                                                GFP_KERNEL);
 
 {
        struct sk_buff *cmd_skb;
        struct qlink_cmd_connect *cmd;
-       struct qtnf_bss_config *bss_cfg = &vif->bss_cfg;
        struct qlink_auth_encr aen;
        u16 res_code = QLINK_CMD_RESULT_OK;
        int ret;
        int i;
+       u32 connect_flags = 0;
 
        cmd_skb = qtnf_cmd_alloc_new_cmdskb(vif->mac->macid, vif->vifid,
                                            QLINK_CMD_CONNECT,
 
        cmd = (struct qlink_cmd_connect *)cmd_skb->data;
 
-       ether_addr_copy(cmd->bssid, bss_cfg->bssid);
+       ether_addr_copy(cmd->bssid, vif->bssid);
 
        if (sme->channel)
                cmd->channel = cpu_to_le16(sme->channel->hw_value);
        else
                cmd->channel = 0;
 
-       cmd->bg_scan_period = cpu_to_le16(bss_cfg->bg_scan_period);
+       if ((sme->bg_scan_period > 0) &&
+           (sme->bg_scan_period <= QTNF_MAX_BG_SCAN_PERIOD))
+               cmd->bg_scan_period = cpu_to_le16(sme->bg_scan_period);
+       else if (sme->bg_scan_period == -1)
+               cmd->bg_scan_period = cpu_to_le16(QTNF_DEFAULT_BG_SCAN_PERIOD);
+       else
+               cmd->bg_scan_period = 0; /* disabled */
+
+       if (sme->flags & ASSOC_REQ_DISABLE_HT)
+               connect_flags |= QLINK_STA_CONNECT_DISABLE_HT;
+       if (sme->flags & ASSOC_REQ_DISABLE_VHT)
+               connect_flags |= QLINK_STA_CONNECT_DISABLE_VHT;
+       if (sme->flags & ASSOC_REQ_USE_RRM)
+               connect_flags |= QLINK_STA_CONNECT_USE_RRM;
+
+       cmd->flags = cpu_to_le32(connect_flags);
 
        memset(&aen, 0, sizeof(aen));
-       aen.auth_type = bss_cfg->auth_type;
-       aen.privacy = !!bss_cfg->privacy;
-       aen.mfp = bss_cfg->mfp;
-       aen.wpa_versions = cpu_to_le32(bss_cfg->crypto.wpa_versions);
-       aen.cipher_group = cpu_to_le32(bss_cfg->crypto.cipher_group);
+       aen.auth_type = sme->auth_type;
+       aen.privacy = !!sme->privacy;
+       aen.mfp = sme->mfp;
+       aen.wpa_versions = cpu_to_le32(sme->crypto.wpa_versions);
+       aen.cipher_group = cpu_to_le32(sme->crypto.cipher_group);
        aen.n_ciphers_pairwise = cpu_to_le32(
-                                       bss_cfg->crypto.n_ciphers_pairwise);
+               sme->crypto.n_ciphers_pairwise);
 
        for (i = 0; i < QLINK_MAX_NR_CIPHER_SUITES; i++)
                aen.ciphers_pairwise[i] = cpu_to_le32(
-                                       bss_cfg->crypto.ciphers_pairwise[i]);
+                       sme->crypto.ciphers_pairwise[i]);
 
-       aen.n_akm_suites = cpu_to_le32(bss_cfg->crypto.n_akm_suites);
+       aen.n_akm_suites = cpu_to_le32(sme->crypto.n_akm_suites);
 
        for (i = 0; i < QLINK_MAX_NR_AKM_SUITES; i++)
                aen.akm_suites[i] = cpu_to_le32(
-                                       bss_cfg->crypto.akm_suites[i]);
+                       sme->crypto.akm_suites[i]);
 
-       aen.control_port = bss_cfg->crypto.control_port;
+       aen.control_port = sme->crypto.control_port;
        aen.control_port_no_encrypt =
-                       bss_cfg->crypto.control_port_no_encrypt;
+               sme->crypto.control_port_no_encrypt;
        aen.control_port_ethertype = cpu_to_le16(be16_to_cpu(
-                               bss_cfg->crypto.control_port_ethertype));
+               sme->crypto.control_port_ethertype));
 
-       qtnf_cmd_skb_put_tlv_arr(cmd_skb, WLAN_EID_SSID, bss_cfg->ssid,
-                                bss_cfg->ssid_len);
+       qtnf_cmd_skb_put_tlv_arr(cmd_skb, WLAN_EID_SSID, sme->ssid,
+               sme->ssid_len);
        qtnf_cmd_skb_put_tlv_arr(cmd_skb, QTN_TLV_ID_CRYPTO, (u8 *)&aen,
                                 sizeof(aen));