diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2014-07-24 17:03:19 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2014-07-24 17:03:19 -0700 |
| commit | 122bc2c9c4b860fdcdc1260d09a207f79d01c0bc (patch) | |
| tree | 60554e83f6d6c7a0df1b8b5e7b7f90853ed46816 | |
| parent | 003d8b7ee677fa946e9a2404624ec29db607b928 (diff) | |
| parent | 4ec35ecc5b7c972bdaef57b9bab42afb5c83bab2 (diff) | |
Merge "Release 1.0.0.153 QCACLD WLAN Driver"
| -rw-r--r-- | CORE/EPPING/src/epping_main.c | 5 | ||||
| -rw-r--r-- | CORE/EPPING/src/epping_tx.c | 9 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_hostapd.c | 4 | ||||
| -rwxr-xr-x | CORE/HDD/src/wlan_hdd_main.c | 180 | ||||
| -rw-r--r-- | CORE/MAC/inc/qwlan_version.h | 4 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/include/limGlobal.h | 2 | ||||
| -rw-r--r-- | CORE/SERVICES/HIF/PCIe/copy_engine.c | 27 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiRoam.c | 8 |
8 files changed, 212 insertions, 27 deletions
diff --git a/CORE/EPPING/src/epping_main.c b/CORE/EPPING/src/epping_main.c index 47c2d2b47ff5..20af18ef4ecd 100644 --- a/CORE/EPPING/src/epping_main.c +++ b/CORE/EPPING/src/epping_main.c @@ -379,6 +379,11 @@ int epping_wlan_startup(struct device *parent_dev, v_VOID_t *hif_sc) return -1; } pEpping_ctx->HTCHandle = vos_get_context(VOS_MODULE_ID_HTC, pVosContext); + if (pEpping_ctx->HTCHandle == NULL) { + EPPING_LOG(VOS_TRACE_LEVEL_FATAL, + "%s: HTCHandle is NULL", __func__); + return -1; + } scn->htc_handle = pEpping_ctx->HTCHandle; HIFClaimDevice(scn->hif_hdl, scn); diff --git a/CORE/EPPING/src/epping_tx.c b/CORE/EPPING/src/epping_tx.c index a00a0ae38f43..2499e15f1c21 100644 --- a/CORE/EPPING/src/epping_tx.c +++ b/CORE/EPPING/src/epping_tx.c @@ -143,6 +143,11 @@ static int epping_tx_send_int(adf_nbuf_t skb, /* prepare ep/HTC information */ ac = eppingHdr->StreamNo_h; eid = pAdapter->pEpping_ctx->EppingEndpoint[ac]; + if (eid < 0 || eid >= EPPING_MAX_NUM_EPIDS) { + EPPING_LOG(VOS_TRACE_LEVEL_FATAL, + "%s: invalid eid = %d, ac = %d\n", __func__, eid, ac); + return -1; + } if (tmpHdr.Cmd_h == EPPING_CMD_RESET_RECV_CNT || tmpHdr.Cmd_h == EPPING_CMD_CONT_RX_START) { epping_set_kperf_flag(pAdapter, eid, tmpHdr.CmdBuffer_t[0]); @@ -340,6 +345,8 @@ void epping_tx_complete_multiple(void *ctx, while (!HTC_QUEUE_EMPTY(pPacketQueue)) { htc_pkt = HTC_PACKET_DEQUEUE(pPacketQueue); + if (htc_pkt == NULL) + break; status=htc_pkt->Status; eid=htc_pkt->Endpoint; pktSkb=GET_HTC_PACKET_NET_BUF_CONTEXT(htc_pkt); @@ -382,6 +389,8 @@ void epping_tx_complete_multiple(void *ctx, while (adf_nbuf_queue_len(&skb_queue)) { /* use non-lock version */ pktSkb = adf_nbuf_queue_remove(&skb_queue); + if (pktSkb == NULL) + break; adf_nbuf_free(pktSkb); pEpping_ctx->total_tx_acks++; } diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index 8c53fa3c2dcb..d3d3be549f08 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -1712,7 +1712,7 @@ static VOS_STATUS hdd_print_acl(hdd_adapter_t *pHostapdAdapter) if (VOS_STATUS_SUCCESS == WLANSAP_GetACLAcceptList(pvosGCtx, &MacList[0], &listnum)) { pr_info("******* WHITE LIST ***********\n"); - if (listnum < MAX_ACL_MAC_ADDRESS) + if (listnum <= MAX_ACL_MAC_ADDRESS) print_mac_list(&MacList[0], listnum); } else { return VOS_STATUS_E_FAILURE; @@ -1721,7 +1721,7 @@ static VOS_STATUS hdd_print_acl(hdd_adapter_t *pHostapdAdapter) if (VOS_STATUS_SUCCESS == WLANSAP_GetACLDenyList(pvosGCtx, &MacList[0], &listnum)) { pr_info("******* BLACK LIST ***********\n"); - if (listnum < MAX_ACL_MAC_ADDRESS) + if (listnum <= MAX_ACL_MAC_ADDRESS) print_mac_list(&MacList[0], listnum); } else { return VOS_STATUS_E_FAILURE; diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index a34eebd29063..2a5ba1ff6611 100755 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -3514,6 +3514,164 @@ static int hdd_parse_setmaxtxpower_command(tANI_U8 *pValue, int *pTxPower) } /*End of hdd_parse_setmaxtxpower_command*/ +static int hdd_get_dwell_time(hdd_config_t *pCfg, tANI_U8 *command, char *extra, tANI_U8 n, tANI_U8 *len) +{ + int ret = 0; + + if (!pCfg || !command || !extra || !len) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: argument passed for GETDWELLTIME is incorrect", __func__); + ret = -EINVAL; + return ret; + } + + if (strncmp(command, "GETDWELLTIME ACTIVE MAX", 23) == 0) + { + *len = scnprintf(extra, n, "GETDWELLTIME ACTIVE MAX %u\n", + (int)pCfg->nActiveMaxChnTime); + return ret; + } + else if (strncmp(command, "GETDWELLTIME ACTIVE MIN", 23) == 0) + { + *len = scnprintf(extra, n, "GETDWELLTIME ACTIVE MIN %u\n", + (int)pCfg->nActiveMinChnTime); + return ret; + } + else if (strncmp(command, "GETDWELLTIME PASSIVE MAX", 24) == 0) + { + *len = scnprintf(extra, n, "GETDWELLTIME PASSIVE MAX %u\n", + (int)pCfg->nPassiveMaxChnTime); + return ret; + } + else if (strncmp(command, "GETDWELLTIME PASSIVE MIN", 24) == 0) + { + *len = scnprintf(extra, n, "GETDWELLTIME PASSIVE MIN %u\n", + (int)pCfg->nPassiveMinChnTime); + return ret; + } + else if (strncmp(command, "GETDWELLTIME", 12) == 0) + { + *len = scnprintf(extra, n, "GETDWELLTIME %u \n", + (int)pCfg->nActiveMaxChnTime); + return ret; + } + else + { + ret = -EINVAL; + } + + return ret; +} + +static int hdd_set_dwell_time(hdd_adapter_t *pAdapter, tANI_U8 *command) +{ + tHalHandle hHal; + hdd_config_t *pCfg; + tANI_U8 *value = command; + tSmeConfigParams smeConfig; + int val = 0, ret = 0, temp = 0; + + if (!pAdapter || !command || !(pCfg = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini) + || !(hHal = (WLAN_HDD_GET_HAL_CTX(pAdapter)))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: argument passed for SETDWELLTIME is incorrect", __func__); + ret = -EINVAL; + return ret; + } + + vos_mem_zero(&smeConfig, sizeof(smeConfig)); + sme_GetConfigParam(hHal, &smeConfig); + + if (strncmp(command, "SETDWELLTIME ACTIVE MAX", 23) == 0 ) + { + value = value + 24; + temp = kstrtou32(value, 10, &val); + if (temp != 0 || val < CFG_ACTIVE_MAX_CHANNEL_TIME_MIN || + val > CFG_ACTIVE_MAX_CHANNEL_TIME_MAX ) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: argument passed for SETDWELLTIME ACTIVE MAX is incorrect", __func__); + ret = -EFAULT; + return ret; + } + pCfg->nActiveMaxChnTime = val; + smeConfig.csrConfig.nActiveMaxChnTime = val; + sme_UpdateConfig(hHal, &smeConfig); + } + else if (strncmp(command, "SETDWELLTIME ACTIVE MIN", 23) == 0) + { + value = value + 24; + temp = kstrtou32(value, 10, &val); + if (temp !=0 || val < CFG_ACTIVE_MIN_CHANNEL_TIME_MIN || + val > CFG_ACTIVE_MIN_CHANNEL_TIME_MAX ) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: argument passed for SETDWELLTIME ACTIVE MIN is incorrect", __func__); + ret = -EFAULT; + return ret; + } + pCfg->nActiveMinChnTime = val; + smeConfig.csrConfig.nActiveMinChnTime = val; + sme_UpdateConfig(hHal, &smeConfig); + } + else if (strncmp(command, "SETDWELLTIME PASSIVE MAX", 24) == 0) + { + value = value + 25; + temp = kstrtou32(value, 10, &val); + if (temp != 0 || val < CFG_PASSIVE_MAX_CHANNEL_TIME_MIN || + val > CFG_PASSIVE_MAX_CHANNEL_TIME_MAX ) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: argument passed for SETDWELLTIME PASSIVE MAX is incorrect", __func__); + ret = -EFAULT; + return ret; + } + pCfg->nPassiveMaxChnTime = val; + smeConfig.csrConfig.nPassiveMaxChnTime = val; + sme_UpdateConfig(hHal, &smeConfig); + } + else if (strncmp(command, "SETDWELLTIME PASSIVE MIN", 24) == 0) + { + value = value + 25; + temp = kstrtou32(value, 10, &val); + if (temp != 0 || val < CFG_PASSIVE_MIN_CHANNEL_TIME_MIN || + val > CFG_PASSIVE_MIN_CHANNEL_TIME_MAX ) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: argument passed for SETDWELLTIME PASSIVE MIN is incorrect", __func__); + ret = -EFAULT; + return ret; + } + pCfg->nPassiveMinChnTime = val; + smeConfig.csrConfig.nPassiveMinChnTime = val; + sme_UpdateConfig(hHal, &smeConfig); + } + else if (strncmp(command, "SETDWELLTIME", 12) == 0) + { + value = value + 13; + temp = kstrtou32(value, 10, &val); + if (temp != 0 || val < CFG_ACTIVE_MAX_CHANNEL_TIME_MIN || + val > CFG_ACTIVE_MAX_CHANNEL_TIME_MAX ) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: argument passed for SETDWELLTIME is incorrect", __func__); + ret = -EFAULT; + return ret; + } + pCfg->nActiveMaxChnTime = val; + smeConfig.csrConfig.nActiveMaxChnTime = val; + sme_UpdateConfig(hHal, &smeConfig); + } + else + { + ret = -EINVAL; + } + + return ret; +} + static int hdd_driver_command(hdd_adapter_t *pAdapter, hdd_priv_data_t *ppriv_data) { @@ -5083,9 +5241,9 @@ static int hdd_driver_command(hdd_adapter_t *pAdapter, char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "GETDWELLTIME %u\n", - (int)pCfg->nActiveMaxChnTime); - if (copy_to_user(priv_data.buf, &extra, len + 1)) + memset(extra, 0, sizeof(extra)); + ret = hdd_get_dwell_time(pCfg, command, extra, sizeof(extra), &len); + if (ret != 0 || copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: failed to copy data to user buffer", __func__); @@ -5096,21 +5254,7 @@ static int hdd_driver_command(hdd_adapter_t *pAdapter, } else if (strncmp(command, "SETDWELLTIME", 12) == 0) { - tANI_U8 *value = command; - hdd_config_t *pCfg = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini; - int val = 0, temp; - - value = value + 13; - temp = kstrtou32(value, 10, &val); - if ( temp != 0 || val < CFG_ACTIVE_MAX_CHANNEL_TIME_MIN || - val > CFG_ACTIVE_MAX_CHANNEL_TIME_MAX ) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: argument passed for SETDWELLTIME is incorrect", __func__); - ret = -EFAULT; - goto exit; - } - pCfg->nActiveMaxChnTime = val; + ret = hdd_set_dwell_time(pAdapter, command); } else if ( strncasecmp(command, "MIRACAST", 8) == 0 ) { diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 28879d63d3c8..dd98ecdbe42e 100644 --- a/CORE/MAC/inc/qwlan_version.h +++ b/CORE/MAC/inc/qwlan_version.h @@ -42,9 +42,9 @@ BRIEF DESCRIPTION: #define QWLAN_VERSION_MINOR 0 #define QWLAN_VERSION_PATCH 0 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 152 +#define QWLAN_VERSION_BUILD 153 -#define QWLAN_VERSIONSTR "1.0.0.152" +#define QWLAN_VERSIONSTR "1.0.0.153" #ifdef QCA_WIFI_2_0 diff --git a/CORE/MAC/src/pe/include/limGlobal.h b/CORE/MAC/src/pe/include/limGlobal.h index f87ba013c518..cf92870edb87 100644 --- a/CORE/MAC/src/pe/include/limGlobal.h +++ b/CORE/MAC/src/pe/include/limGlobal.h @@ -72,7 +72,7 @@ #define LIM_HASH_MISS_TIMER_MS 10000 // Deferred Message Queue Length -#define MAX_DEFERRED_QUEUE_LEN 20 +#define MAX_DEFERRED_QUEUE_LEN 80 // Maximum Buffer size #define LIM_MAX_BUF_SIZE 8192 diff --git a/CORE/SERVICES/HIF/PCIe/copy_engine.c b/CORE/SERVICES/HIF/PCIe/copy_engine.c index e1e0055cc7e3..23d3793e55dc 100644 --- a/CORE/SERVICES/HIF/PCIe/copy_engine.c +++ b/CORE/SERVICES/HIF/PCIe/copy_engine.c @@ -1375,7 +1375,7 @@ CE_init(struct hif_pci_softc *sc, + (nentries * sizeof(void *)); /* per-send context */ ptr = A_MALLOC(CE_nbytes); if (!ptr) { - /* cannot allocate src ring. If teh CE_state is allocated + /* cannot allocate src ring. If the CE_state is allocated * locally free CE_State and return error. */ dev_err(&sc->pdev->dev, "ath ERROR: src ring has no mem\n"); if (malloc_CE_state) { @@ -1412,6 +1412,10 @@ CE_init(struct hif_pci_softc *sc, pci_alloc_consistent(scn->sc_osdev->bdev, (nentries * sizeof(struct CE_src_desc) + CE_DESC_RING_ALIGN), &base_addr); + if (src_ring->base_addr_owner_space_unaligned == NULL) { + dev_err(&sc->pdev->dev, "ath ERROR: src ring has no DMA mem\n"); + goto error_no_dma_mem; + } src_ring->base_addr_CE_space_unaligned = base_addr; @@ -1432,6 +1436,10 @@ CE_init(struct hif_pci_softc *sc, */ src_ring->shadow_base_unaligned = A_MALLOC( nentries * sizeof(struct CE_src_desc) + CE_DESC_RING_ALIGN); + if (src_ring->shadow_base_unaligned == NULL) { + dev_err(&sc->pdev->dev, "ath ERROR: src ring has no shadow_base mem\n"); + goto error_no_dma_mem; + } src_ring->shadow_base = (struct CE_src_desc *) (((size_t) src_ring->shadow_base_unaligned + CE_DESC_RING_ALIGN-1) & ~(CE_DESC_RING_ALIGN-1)); @@ -1502,6 +1510,10 @@ CE_init(struct hif_pci_softc *sc, pci_alloc_consistent(scn->sc_osdev->bdev, (nentries * sizeof(struct CE_dest_desc) + CE_DESC_RING_ALIGN), &base_addr); + if (dest_ring->base_addr_owner_space_unaligned == NULL) { + dev_err(&sc->pdev->dev, "ath ERROR: dest ring has no DMA mem\n"); + goto error_no_dma_mem; + } dest_ring->base_addr_CE_space_unaligned = base_addr; /* Correctly initialize memory to 0 to prevent garbage data @@ -1549,6 +1561,10 @@ CE_init(struct hif_pci_softc *sc, A_TARGET_ACCESS_END_RET_PTR(targid); return (struct CE_handle *)CE_state; + +error_no_dma_mem: + CE_fini((struct CE_handle *)CE_state); + return NULL; } void @@ -1562,14 +1578,17 @@ CE_fini(struct CE_handle *copyeng) CE_state->state = CE_UNUSED; CE_state->sc->CE_id_to_state[CE_id] = NULL; if (CE_state->src_ring) { - A_FREE(CE_state->src_ring->shadow_base_unaligned); - pci_free_consistent(scn->sc_osdev->bdev, + if (CE_state->src_ring->shadow_base_unaligned) + A_FREE(CE_state->src_ring->shadow_base_unaligned); + if (CE_state->src_ring->base_addr_owner_space_unaligned) + pci_free_consistent(scn->sc_osdev->bdev, (CE_state->src_ring->nentries * sizeof(struct CE_src_desc) + CE_DESC_RING_ALIGN), CE_state->src_ring->base_addr_owner_space_unaligned, CE_state->src_ring->base_addr_CE_space); A_FREE(CE_state->src_ring); } if (CE_state->dest_ring) { - pci_free_consistent(scn->sc_osdev->bdev, + if (CE_state->dest_ring->base_addr_owner_space_unaligned) + pci_free_consistent(scn->sc_osdev->bdev, (CE_state->dest_ring->nentries * sizeof(struct CE_dest_desc) + CE_DESC_RING_ALIGN), CE_state->dest_ring->base_addr_owner_space_unaligned, CE_state->dest_ring->base_addr_CE_space); A_FREE(CE_state->dest_ring); diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index 3f2bf6d0ee7b..47a67f30bdcb 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -1642,18 +1642,26 @@ eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pPa if (pParam->nActiveMaxChnTime) { pMac->roam.configParam.nActiveMaxChnTime = pParam->nActiveMaxChnTime; + cfgSetInt(pMac, WNI_CFG_ACTIVE_MAXIMUM_CHANNEL_TIME, + pParam->nActiveMaxChnTime); } if (pParam->nActiveMinChnTime) { pMac->roam.configParam.nActiveMinChnTime = pParam->nActiveMinChnTime; + cfgSetInt(pMac, WNI_CFG_ACTIVE_MINIMUM_CHANNEL_TIME, + pParam->nActiveMinChnTime); } if (pParam->nPassiveMaxChnTime) { pMac->roam.configParam.nPassiveMaxChnTime = pParam->nPassiveMaxChnTime; + cfgSetInt(pMac, WNI_CFG_PASSIVE_MAXIMUM_CHANNEL_TIME, + pParam->nPassiveMaxChnTime); } if (pParam->nPassiveMinChnTime) { pMac->roam.configParam.nPassiveMinChnTime = pParam->nPassiveMinChnTime; + cfgSetInt(pMac, WNI_CFG_PASSIVE_MINIMUM_CHANNEL_TIME, + pParam->nPassiveMinChnTime); } if (pParam->nActiveMaxChnTimeBtc) { |
