summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2014-07-24 17:03:19 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2014-07-24 17:03:19 -0700
commit122bc2c9c4b860fdcdc1260d09a207f79d01c0bc (patch)
tree60554e83f6d6c7a0df1b8b5e7b7f90853ed46816
parent003d8b7ee677fa946e9a2404624ec29db607b928 (diff)
parent4ec35ecc5b7c972bdaef57b9bab42afb5c83bab2 (diff)
Merge "Release 1.0.0.153 QCACLD WLAN Driver"
-rw-r--r--CORE/EPPING/src/epping_main.c5
-rw-r--r--CORE/EPPING/src/epping_tx.c9
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c4
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c180
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/MAC/src/pe/include/limGlobal.h2
-rw-r--r--CORE/SERVICES/HIF/PCIe/copy_engine.c27
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c8
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)
{