diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2018-08-07 07:18:48 -0700 |
|---|---|---|
| committer | Linux Build Service Account <lnxbuild@localhost> | 2018-08-07 07:18:48 -0700 |
| commit | a9684428112bfbed3ff4d376e992576723989a7c (patch) | |
| tree | 7a448b3dc21fdd1b1e75af16e9062a5ed387c5a9 | |
| parent | 578c9a9ead740097d94296e5b3e1c3c029272058 (diff) | |
| parent | 908d3ffb76f73b64029fd3f13468c396597466aa (diff) | |
Merge 908d3ffb76f73b64029fd3f13468c396597466aa on remote branch
Change-Id: I64e00107d1bced921543597a91273a650365fb00
| -rw-r--r-- | hif/src/hif_napi.c | 1 | ||||
| -rw-r--r-- | hif/src/sdio/if_sdio.c | 13 | ||||
| -rw-r--r-- | qdf/linux/src/qdf_idr.c | 3 | ||||
| -rw-r--r-- | wmi/inc/wmi_unified_param.h | 8 | ||||
| -rw-r--r-- | wmi/src/wmi_unified_tlv.c | 66 |
5 files changed, 60 insertions, 31 deletions
diff --git a/hif/src/hif_napi.c b/hif/src/hif_napi.c index bf4e241b834c..b42be4ea3037 100644 --- a/hif/src/hif_napi.c +++ b/hif/src/hif_napi.c @@ -1094,7 +1094,6 @@ static int hnc_link_clusters(struct qca_napi_data *napid) i, cl); if ((cl < HNC_MIN_CLUSTER) || (cl > HNC_MAX_CLUSTER)) { NAPI_DEBUG("Bad cluster (%d). SKIPPED\n", cl); - QDF_ASSERT(0); /* continue if ASSERTs are disabled */ continue; }; diff --git a/hif/src/sdio/if_sdio.c b/hif/src/sdio/if_sdio.c index d5bc45800902..75afbe850ef5 100644 --- a/hif/src/sdio/if_sdio.c +++ b/hif/src/sdio/if_sdio.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2017 The Linux Foundation. All rights reserved. + * Copyright (c) 2013-2018 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -178,8 +178,6 @@ static A_STATUS hif_sdio_probe(void *context, void *hif_handle) if (athdiag_procfs_init(scn) != 0) { QDF_TRACE(QDF_MODULE_ID_HIF, QDF_TRACE_LEVEL_ERROR, "%s athdiag_procfs_init failed", __func__); - ret = QDF_STATUS_E_FAILURE; - goto err_attach1; } atomic_set(&hif_sdio_load_state, true); @@ -187,10 +185,6 @@ static A_STATUS hif_sdio_probe(void *context, void *hif_handle) return 0; -err_attach1: - if (scn->ramdump_base) - pld_hif_sdio_release_ramdump_mem(scn->ramdump_base); - qdf_mem_free(ol_sc); err_attach: qdf_mem_free(scn); scn = NULL; @@ -429,6 +423,11 @@ QDF_STATUS hif_sdio_enable_bus(struct hif_softc *hif_sc, wait_event_interruptible_timeout(sync_wait_queue, atomic_read(&hif_sdio_load_state) == true, HIF_SDIO_LOAD_TIMEOUT); + + if (!ol_sc || !scn) { + HIF_ERROR("wlan: %s ol_sc or scn is null", __func__); + return QDF_STATUS_E_INVAL; + } hif_sc->hostdef = ol_sc->hostdef; hif_sc->targetdef = ol_sc->targetdef; hif_sc->bus_type = ol_sc->bus_type; diff --git a/qdf/linux/src/qdf_idr.c b/qdf/linux/src/qdf_idr.c index e6c2b7f34341..9749083746b8 100644 --- a/qdf/linux/src/qdf_idr.c +++ b/qdf/linux/src/qdf_idr.c @@ -116,7 +116,8 @@ QDF_STATUS qdf_idr_remove(qdf_idr *idp, int32_t id) return QDF_STATUS_E_INVAL; qdf_spinlock_acquire(&idp->lock); - idr_remove(&idp->idr, id); + if (idr_find(&idp->idr, id)) + idr_remove(&idp->idr, id); qdf_spinlock_release(&idp->lock); return QDF_STATUS_SUCCESS; diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index f3e0c86382b4..d050b498ccc9 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -3405,6 +3405,7 @@ struct periodic_tx_pattern { * @kek_len: Kek length * @ullKeyReplayCounter: replay counter * @bssid: bss id + * @is_fils_connection: Whether the present connection with the AP is FILS */ struct gtk_offload_params { uint32_t ulFlags; @@ -3413,6 +3414,7 @@ struct gtk_offload_params { uint32_t kek_len; uint64_t ullKeyReplayCounter; struct qdf_mac_addr bssid; + bool is_fils_connection; }; /** @@ -7379,6 +7381,9 @@ struct action_wakeup_set_param { * @WMI_ACTION_OUI_CONNECT_1X1: for 1x1 connection only * @WMI_ACTION_OUI_ITO_EXTENSION: for extending inactivity time of station * @WMI_ACTION_OUI_CCKM_1X1: for TX with CCKM 1x1 only + * @WMI_ACTION_OUI_ITO_ALTERNATE: for alternate inactivity time of station + * WMI_ACTION_OUI_SWITCH_TO_11N_MODE: for switching to 11n mode connection + * WMI_ACTION_OUI_CONNECT_1x1_WITH_1_CHAIN: for 1x1 connection with 1 Chain * @WMI_ACTION_OUI_MAXIMUM_ID: maximun number of action oui types */ enum wmi_action_oui_id { @@ -7387,7 +7392,8 @@ enum wmi_action_oui_id { WMI_ACTION_OUI_CCKM_1X1 = 2, WMI_ACTION_OUI_ITO_ALTERNATE = 3, WMI_ACTION_OUI_SWITCH_TO_11N_MODE = 4, - WMI_ACTION_OUI_MAXIMUM_ID = 5, + WMI_ACTION_OUI_CONNECT_1x1_WITH_1_CHAIN = 5, + WMI_ACTION_OUI_MAXIMUM_ID = 6, }; /** diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 11f0d412e47c..9450a7805fa8 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -9230,6 +9230,34 @@ send_cmd: return QDF_STATUS_SUCCESS; } +static void +fill_fils_tlv_params(WMI_GTK_OFFLOAD_CMD_fixed_param *cmd, + uint8_t vdev_id, + struct gtk_offload_params *params) +{ + uint8_t *buf_ptr; + wmi_gtk_offload_fils_tlv_param *ext_param; + + buf_ptr = (uint8_t *) cmd + sizeof(*cmd); + WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, + sizeof(*ext_param)); + buf_ptr += WMI_TLV_HDR_SIZE; + ext_param = (wmi_gtk_offload_fils_tlv_param *)buf_ptr; + WMITLV_SET_HDR(&ext_param->tlv_header, + WMITLV_TAG_STRUC_wmi_gtk_offload_extended_tlv_param, + WMITLV_GET_STRUCT_TLVLEN( + wmi_gtk_offload_fils_tlv_param)); + ext_param->vdev_id = vdev_id; + ext_param->flags = cmd->flags; + ext_param->kek_len = params->kek_len; + qdf_mem_copy(ext_param->KEK, params->aKEK, params->kek_len); + qdf_mem_copy(ext_param->KCK, params->aKCK, + WMI_GTK_OFFLOAD_KCK_BYTES); + qdf_mem_copy(ext_param->replay_counter, + ¶ms->ullKeyReplayCounter, + GTK_REPLAY_COUNTER_BYTES); +} + /** * send_gtk_offload_cmd_tlv() - send GTK offload command to fw * @wmi_handle: wmi handle @@ -9246,13 +9274,18 @@ QDF_STATUS send_gtk_offload_cmd_tlv(wmi_unified_t wmi_handle, uint8_t vdev_id, int len; wmi_buf_t buf; WMI_GTK_OFFLOAD_CMD_fixed_param *cmd; - wmi_gtk_offload_fils_tlv_param *ext_param; QDF_STATUS status = QDF_STATUS_SUCCESS; - uint8_t *buf_ptr; WMI_LOGD("%s Enter", __func__); - len = sizeof(*cmd) + WMI_TLV_HDR_SIZE + sizeof(*ext_param); + len = sizeof(*cmd); + /** + * In case of FILS connection, the buf will contain fixed params + * and the FILS lv params, so accordingly allocate the buffer. + */ + if (params->is_fils_connection) + len += WMI_TLV_HDR_SIZE + + sizeof(wmi_gtk_offload_fils_tlv_param); /* alloc wmi buffer */ buf = wmi_buf_alloc(wmi_handle, len); @@ -9263,7 +9296,6 @@ QDF_STATUS send_gtk_offload_cmd_tlv(wmi_unified_t wmi_handle, uint8_t vdev_id, } cmd = (WMI_GTK_OFFLOAD_CMD_fixed_param *) wmi_buf_data(buf); - buf_ptr = (uint8_t *)cmd; WMITLV_SET_HDR(&cmd->tlv_header, WMITLV_TAG_STRUC_WMI_GTK_OFFLOAD_CMD_fixed_param, WMITLV_GET_STRUCT_TLVLEN @@ -9284,22 +9316,9 @@ QDF_STATUS send_gtk_offload_cmd_tlv(wmi_unified_t wmi_handle, uint8_t vdev_id, } else { cmd->flags = gtk_offload_opcode; } - buf_ptr += sizeof(*cmd); - WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, sizeof(*ext_param)); - buf_ptr += WMI_TLV_HDR_SIZE; - - ext_param = (wmi_gtk_offload_fils_tlv_param *)buf_ptr; - WMITLV_SET_HDR(&ext_param->tlv_header, - WMITLV_TAG_STRUC_wmi_gtk_offload_extended_tlv_param, - WMITLV_GET_STRUCT_TLVLEN( - wmi_gtk_offload_fils_tlv_param)); - ext_param->vdev_id = vdev_id; - ext_param->flags = cmd->flags; - ext_param->kek_len = params->kek_len; - qdf_mem_copy(ext_param->KEK, params->aKEK, params->kek_len); - qdf_mem_copy(ext_param->KCK, params->aKCK, WMI_GTK_OFFLOAD_KCK_BYTES); - qdf_mem_copy(ext_param->replay_counter, ¶ms->ullKeyReplayCounter, - GTK_REPLAY_COUNTER_BYTES); + /* In case of FILS connection the FW requires FILS tlv params */ + if (params->is_fils_connection) + fill_fils_tlv_params(cmd, vdev_id, params); WMI_LOGD("VDEVID: %d, GTK_FLAGS: x%x kek len %d", vdev_id, cmd->flags, params->kek_len); @@ -14150,11 +14169,16 @@ wmi_get_action_oui_id(enum wmi_action_oui_id action_id, case WMI_ACTION_OUI_ITO_ALTERNATE: *id = WMI_VENDOR_OUI_ACTION_ALT_ITO; + return true; case WMI_ACTION_OUI_SWITCH_TO_11N_MODE: *id = WMI_VENDOR_OUI_ACTION_SWITCH_TO_11N_MODE; return true; + case WMI_ACTION_OUI_CONNECT_1x1_WITH_1_CHAIN: + *id = WMI_VENDOR_OUI_ACTION_CONNECTION_1X1_NUM_TX_RX_CHAINS_1; + return true; + default: return false; } @@ -14702,7 +14726,7 @@ extract_roam_scan_stats_res_evt_tlv(wmi_unified_t wmi_handle, void *evt_buf, roam->trigger_value = roam_reason[i].trigger_value; } - if (chan_info) { + if (chan_info && num_channels) { for (j = 0; j < num_channels[i]; j++) roam->scan_freqs[j] = chan_info[chan_idx++]; } |
