summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2017-04-06 16:53:50 -0600
committerLinux Build Service Account <lnxbuild@localhost>2017-04-06 16:53:50 -0600
commit9b7277430775e3384cab2d7434fbfd0cdc0a2e85 (patch)
tree1232aeb3604ca6a1cc26fea6fe0562fb7a4a0754
parent95da3277289953d4b5b975ea437f9531eae4929f (diff)
parent3d3341c4df4217476a8af8cccd9c0a247aefa0d9 (diff)
Promotion of wlan-cmn.driver.lnx.1.0-00142.
CRs Change ID Subject -------------------------------------------------------------------------------------------------------------- 2016580 Icee39c896802c4d7136e0b8ef442a33feeb4799c qcacmn: Auto Detect SoC Power Collapse Failure changes 2026821 I14a77b9017ada3bc2f10fc78c69cb31b22452052 qcacmn: Reduce log level to avoid watchdog 2028524 I493fb063c8f57e38525e2dc1701a6e972d2ec0e6 qcacmn: Handle failure scenario for qdf_nbuf_map() 2028318 I06f7b43e80ddf0ce5e096351b38ce954eb634a95 qcacmn: Decouple LRO register/deregister from vdev start 2029297 I4d652c38a23f0e31ff21321692bcecc9456bf03a qcacmn: clear qdf_net_buf_track_free_list in nbuf memory Change-Id: I336fff1f952de60d07cdd08a452b36222fc2d573 CRs-Fixed: 2026821, 2028318, 2028524, 2029297, 2016580
-rw-r--r--hif/inc/hif.h1
-rw-r--r--hif/src/ce/ce_internal.h1
-rw-r--r--hif/src/ce/ce_main.c11
-rw-r--r--hif/src/ce/ce_tasklet.c4
-rw-r--r--hif/src/hif_napi.c8
-rw-r--r--htc/htc_send.c27
-rw-r--r--qdf/linux/src/qdf_nbuf.c3
-rw-r--r--wmi/inc/wmi_unified_api.h2
-rw-r--r--wmi/inc/wmi_unified_priv.h2
-rw-r--r--wmi/inc/wmi_unified_tlv.h2
-rw-r--r--wmi/src/wmi_unified_api.c2
-rw-r--r--wmi/src/wmi_unified_tlv.c20
12 files changed, 44 insertions, 39 deletions
diff --git a/hif/inc/hif.h b/hif/inc/hif.h
index 84602715c2fe..0cf307b9d40d 100644
--- a/hif/inc/hif.h
+++ b/hif/inc/hif.h
@@ -147,7 +147,6 @@ struct qca_napi_info {
/* will only be present for data rx CE's */
void (*lro_flush_cb)(void *);
void *lro_ctx;
- qdf_spinlock_t lro_unloading_lock;
};
/**
diff --git a/hif/src/ce/ce_internal.h b/hif/src/ce/ce_internal.h
index 70f658dd403f..d542da2e1ab2 100644
--- a/hif/src/ce/ce_internal.h
+++ b/hif/src/ce/ce_internal.h
@@ -151,7 +151,6 @@ struct CE_state {
bool htt_rx_data;
void (*lro_flush_cb)(void *);
void *lro_data;
- qdf_spinlock_t lro_unloading_lock;
};
/* Descriptor rings must be aligned to this boundary */
diff --git a/hif/src/ce/ce_main.c b/hif/src/ce/ce_main.c
index ed70cf30a66a..2cd0ec6a0bed 100644
--- a/hif/src/ce/ce_main.c
+++ b/hif/src/ce/ce_main.c
@@ -705,7 +705,6 @@ struct CE_handle *ce_init(struct hif_softc *scn,
CE_state->ctrl_addr = ctrl_addr;
CE_state->state = CE_RUNNING;
CE_state->attr_flags = attr->flags;
- qdf_spinlock_create(&CE_state->lro_unloading_lock);
}
CE_state->scn = scn;
@@ -1230,8 +1229,6 @@ void ce_fini(struct CE_handle *copyeng)
CE_state->state = CE_UNUSED;
scn->ce_id_to_state[CE_id] = NULL;
- qdf_spinlock_destroy(&CE_state->lro_unloading_lock);
-
if (CE_state->src_ring) {
/* Cleanup the datapath Tx ring */
ce_h2t_tx_ce_cleanup(copyeng);
@@ -1682,7 +1679,7 @@ static void hif_post_recv_buffers_failure(struct HIF_CE_pipe_info *pipe_info,
qdf_spin_lock_bh(&pipe_info->recv_bufs_needed_lock);
error_cnt_tmp = ++(*error_cnt);
qdf_spin_unlock_bh(&pipe_info->recv_bufs_needed_lock);
- HIF_ERROR("%s: pipe_num %d, needed %d, err_cnt = %u, fail_type = %s",
+ HIF_DBG("%s: pipe_num %d, needed %d, err_cnt = %u, fail_type = %s",
__func__, pipe_info->pipe_num, bufs_needed_tmp, error_cnt_tmp,
failure_type_string);
hif_record_ce_desc_event(scn, ce_id, failure_type,
@@ -2652,15 +2649,9 @@ int ce_lro_flush_cb_deregister(struct hif_opaque_softc *hif_hdl,
for (i = 0; i < scn->ce_count; i++) {
ce_state = scn->ce_id_to_state[i];
if ((ce_state != NULL) && (ce_state->htt_rx_data)) {
- qdf_spin_lock_bh(
- &ce_state->lro_unloading_lock);
ce_state->lro_flush_cb = NULL;
lro_deinit_cb(ce_state->lro_data);
ce_state->lro_data = NULL;
- qdf_spin_unlock_bh(
- &ce_state->lro_unloading_lock);
- qdf_spinlock_destroy(
- &ce_state->lro_unloading_lock);
rc++;
}
}
diff --git a/hif/src/ce/ce_tasklet.c b/hif/src/ce/ce_tasklet.c
index 7a06230863bb..910d90c53088 100644
--- a/hif/src/ce/ce_tasklet.c
+++ b/hif/src/ce/ce_tasklet.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015-2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2017 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -172,13 +172,11 @@ static void ce_tasklet(unsigned long data)
QDF_BUG(0);
}
- qdf_spin_lock_bh(&CE_state->lro_unloading_lock);
ce_per_engine_service(scn, tasklet_entry->ce_id);
if (CE_state->lro_flush_cb != NULL) {
CE_state->lro_flush_cb(CE_state->lro_data);
}
- qdf_spin_unlock_bh(&CE_state->lro_unloading_lock);
if (ce_check_rx_pending(CE_state)) {
/*
diff --git a/hif/src/hif_napi.c b/hif/src/hif_napi.c
index a9aeae549711..47336e5d7214 100644
--- a/hif/src/hif_napi.c
+++ b/hif/src/hif_napi.c
@@ -179,7 +179,6 @@ int hif_napi_create(struct hif_opaque_softc *hif_ctx,
HIF_WARN("%s: bad IRQ value for CE %d: %d",
__func__, i, napii->irq);
- qdf_spinlock_create(&napii->lro_unloading_lock);
init_dummy_netdev(&(napii->netdev));
NAPI_DEBUG("adding napi=%p to netdev=%p (poll=%p, bdgt=%d)",
@@ -295,7 +294,6 @@ int hif_napi_destroy(struct hif_opaque_softc *hif_ctx,
napii->netdev.napi_list.prev,
napii->netdev.napi_list.next);
- qdf_spinlock_destroy(&napii->lro_unloading_lock);
netif_napi_del(&(napii->napi));
napid->ce_map &= ~(0x01 << ce);
@@ -395,12 +393,9 @@ void hif_napi_lro_flush_cb_deregister(struct hif_opaque_softc *hif_hdl,
HIF_DBG("deRegistering LRO for ce_id %d NAPI callback for %d flush_cb %p, lro_data %p\n",
i, napii->id, napii->lro_flush_cb,
napii->lro_ctx);
- qdf_spin_lock_bh(&napii->lro_unloading_lock);
napii->lro_flush_cb = NULL;
lro_deinit_cb(napii->lro_ctx);
napii->lro_ctx = NULL;
- qdf_spin_unlock_bh(
- &napii->lro_unloading_lock);
}
}
} else {
@@ -847,15 +842,12 @@ int hif_napi_poll(struct hif_opaque_softc *hif_ctx,
hif_record_ce_desc_event(hif, NAPI_ID2PIPE(napi_info->id),
NAPI_POLL_ENTER, NULL, NULL, cpu);
- qdf_spin_lock_bh(&napi_info->lro_unloading_lock);
-
rc = ce_per_engine_service(hif, NAPI_ID2PIPE(napi_info->id));
NAPI_DEBUG("%s: ce_per_engine_service processed %d msgs",
__func__, rc);
if (napi_info->lro_flush_cb)
napi_info->lro_flush_cb(napi_info->lro_ctx);
- qdf_spin_unlock_bh(&napi_info->lro_unloading_lock);
/* do not return 0, if there was some work done,
* even if it is below the scale
diff --git a/htc/htc_send.c b/htc/htc_send.c
index f50073b045fc..09fd9ed69a92 100644
--- a/htc/htc_send.c
+++ b/htc/htc_send.c
@@ -549,6 +549,7 @@ static A_STATUS htc_issue_packets(HTC_TARGET *target,
HTC_FRAME_HDR *pHtcHdr;
uint32_t data_attr = 0;
enum qdf_bus_type bus_type;
+ QDF_STATUS ret;
bus_type = hif_get_bus_type(target->hif_dev);
@@ -618,9 +619,16 @@ static A_STATUS htc_issue_packets(HTC_TARGET *target,
*/
if (pPacket->PktInfo.AsTx.
Flags & HTC_TX_PACKET_FLAG_FIXUP_NETBUF) {
- qdf_nbuf_map(target->osdev,
- GET_HTC_PACKET_NET_BUF_CONTEXT
- (pPacket), QDF_DMA_TO_DEVICE);
+ ret = qdf_nbuf_map(target->osdev,
+ GET_HTC_PACKET_NET_BUF_CONTEXT
+ (pPacket), QDF_DMA_TO_DEVICE);
+ if (ret != QDF_STATUS_SUCCESS) {
+ AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
+ ("%s: nbuf map failed, endpoint %p\n",
+ __func__, pEndpoint));
+ status = A_ERROR;
+ break;
+ }
}
}
LOCK_HTC_TX(target);
@@ -1347,6 +1355,7 @@ A_STATUS htc_send_pkts_multiple(HTC_HANDLE HTCHandle, HTC_PACKET_QUEUE *pPktQueu
HTC_PACKET *pPacket;
qdf_nbuf_t netbuf;
HTC_FRAME_HDR *pHtcHdr;
+ QDF_STATUS status;
AR_DEBUG_PRINTF(ATH_DEBUG_SEND,
("+htc_send_pkts_multiple: Queue: %p, Pkts %d \n",
@@ -1404,9 +1413,15 @@ A_STATUS htc_send_pkts_multiple(HTC_HANDLE HTCHandle, HTC_PACKET_QUEUE *pPktQueu
* mapped. This only applies to non-data frames, since data frames
* were already mapped as they entered into the driver.
*/
- qdf_nbuf_map(target->osdev,
- GET_HTC_PACKET_NET_BUF_CONTEXT(pPacket),
- QDF_DMA_TO_DEVICE);
+ status = qdf_nbuf_map(target->osdev,
+ GET_HTC_PACKET_NET_BUF_CONTEXT(pPacket),
+ QDF_DMA_TO_DEVICE);
+ if (status != QDF_STATUS_SUCCESS) {
+ AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
+ ("%s: nbuf map failed, endpoint %p, seq_no. %d\n",
+ __func__, pEndpoint, pEndpoint->SeqNo));
+ return A_ERROR;
+ }
pPacket->PktInfo.AsTx.Flags |= HTC_TX_PACKET_FLAG_FIXUP_NETBUF;
}
diff --git a/qdf/linux/src/qdf_nbuf.c b/qdf/linux/src/qdf_nbuf.c
index fb2edf3ee547..a2457e90b677 100644
--- a/qdf/linux/src/qdf_nbuf.c
+++ b/qdf/linux/src/qdf_nbuf.c
@@ -196,7 +196,7 @@ struct sk_buff *__qdf_nbuf_alloc(qdf_device_t osdev, size_t size, int reserve,
skb = dev_alloc_skb(size);
if (!skb) {
- pr_err("ERROR:NBUF alloc failed\n");
+ pr_info("ERROR:NBUF alloc failed\n");
return NULL;
}
memset(skb->cb, 0x0, sizeof(skb->cb));
@@ -1403,6 +1403,7 @@ static void qdf_nbuf_track_memory_manager_destroy(void)
spin_unlock_irqrestore(&qdf_net_buf_track_free_list_lock, irq_flag);
kmem_cache_destroy(nbuf_tracking_cache);
+ qdf_net_buf_track_free_list = NULL;
}
/**
diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h
index aa545493d52e..3c032c9d4d8b 100644
--- a/wmi/inc/wmi_unified_api.h
+++ b/wmi/inc/wmi_unified_api.h
@@ -695,7 +695,7 @@ QDF_STATUS wmi_unified_pktlog_wmi_send_cmd(void *wmi_hdl,
QDF_STATUS wmi_unified_add_wow_wakeup_event_cmd(void *wmi_hdl,
uint32_t vdev_id,
- uint32_t bitmap,
+ uint32_t *bitmap,
bool enable);
QDF_STATUS wmi_unified_wow_patterns_to_fw_cmd(void *wmi_hdl,
diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h
index 22880dcc1795..9d968f2dcf00 100644
--- a/wmi/inc/wmi_unified_priv.h
+++ b/wmi/inc/wmi_unified_priv.h
@@ -542,7 +542,7 @@ QDF_STATUS
QDF_STATUS (*send_add_wow_wakeup_event_cmd)(wmi_unified_t wmi_handle,
uint32_t vdev_id,
- uint32_t bitmap,
+ uint32_t *bitmap,
bool enable);
QDF_STATUS (*send_wow_patterns_to_fw_cmd)(wmi_unified_t wmi_handle,
diff --git a/wmi/inc/wmi_unified_tlv.h b/wmi/inc/wmi_unified_tlv.h
index e285728930f8..3ec87efc49ee 100644
--- a/wmi/inc/wmi_unified_tlv.h
+++ b/wmi/inc/wmi_unified_tlv.h
@@ -384,7 +384,7 @@ QDF_STATUS send_pktlog_wmi_send_cmd_tlv(wmi_unified_t wmi_handle,
QDF_STATUS send_add_wow_wakeup_event_cmd_tlv(wmi_unified_t wmi_handle,
uint32_t vdev_id,
- uint32_t bitmap,
+ uint32_t *event_bitmap,
bool enable);
QDF_STATUS send_wow_patterns_to_fw_cmd_tlv(wmi_unified_t wmi_handle,
diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c
index 8dc13e1fa505..232cb9becc7a 100644
--- a/wmi/src/wmi_unified_api.c
+++ b/wmi/src/wmi_unified_api.c
@@ -2352,7 +2352,7 @@ QDF_STATUS wmi_unified_pktlog_wmi_send_cmd(void *wmi_hdl,
*/
QDF_STATUS wmi_unified_add_wow_wakeup_event_cmd(void *wmi_hdl,
uint32_t vdev_id,
- uint32_t bitmap,
+ uint32_t *bitmap,
bool enable)
{
wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c
index 2e78f3f817b3..51619a946e9b 100644
--- a/wmi/src/wmi_unified_tlv.c
+++ b/wmi/src/wmi_unified_tlv.c
@@ -1824,6 +1824,7 @@ QDF_STATUS send_mgmt_cmd_tlv(wmi_unified_t wmi_handle,
uint64_t dma_addr;
void *qdf_ctx = param->qdf_ctx;
uint8_t *bufp;
+ QDF_STATUS status;
int32_t bufp_len = (param->frm_len < mgmt_tx_dl_frm_len) ? param->frm_len :
mgmt_tx_dl_frm_len;
@@ -1852,7 +1853,14 @@ QDF_STATUS send_mgmt_cmd_tlv(wmi_unified_t wmi_handle,
sizeof(uint32_t)));
bufp += WMI_TLV_HDR_SIZE;
qdf_mem_copy(bufp, param->pdata, bufp_len);
- qdf_nbuf_map_single(qdf_ctx, param->tx_frame, QDF_DMA_TO_DEVICE);
+
+ status = qdf_nbuf_map_single(qdf_ctx, param->tx_frame,
+ QDF_DMA_TO_DEVICE);
+ if (status != QDF_STATUS_SUCCESS) {
+ WMI_LOGE("%s: wmi buf map failed", __func__);
+ goto err1;
+ }
+
dma_addr = qdf_nbuf_get_frag_paddr(param->tx_frame, 0);
cmd->paddr_lo = (uint32_t)(dma_addr & 0xffffffff);
#if defined(HTT_PADDR64)
@@ -7669,7 +7677,7 @@ wmi_send_failed:
*/
QDF_STATUS send_add_wow_wakeup_event_cmd_tlv(wmi_unified_t wmi_handle,
uint32_t vdev_id,
- uint32_t bitmap,
+ uint32_t *bitmap,
bool enable)
{
WMI_WOW_ADD_DEL_EVT_CMD_fixed_param *cmd;
@@ -7690,7 +7698,8 @@ QDF_STATUS send_add_wow_wakeup_event_cmd_tlv(wmi_unified_t wmi_handle,
(WMI_WOW_ADD_DEL_EVT_CMD_fixed_param));
cmd->vdev_id = vdev_id;
cmd->is_add = enable;
- cmd->event_bitmap = bitmap;
+ qdf_mem_copy(&(cmd->event_bitmaps[0]), bitmap, sizeof(uint32_t) *
+ WMI_WOW_MAX_EVENT_BM_LEN);
ret = wmi_unified_cmd_send(wmi_handle, buf, len,
WMI_WOW_ENABLE_DISABLE_WAKE_EVENT_CMDID);
@@ -7700,8 +7709,9 @@ QDF_STATUS send_add_wow_wakeup_event_cmd_tlv(wmi_unified_t wmi_handle,
return QDF_STATUS_E_FAILURE;
}
- WMI_LOGD("Wakeup pattern 0x%x %s in fw", bitmap,
- enable ? "enabled" : "disabled");
+ WMI_LOGD("Wakeup pattern 0x%x%x%x%x %s in fw", cmd->event_bitmaps[0],
+ cmd->event_bitmaps[1], cmd->event_bitmaps[2],
+ cmd->event_bitmaps[3], enable ? "enabled" : "disabled");
return QDF_STATUS_SUCCESS;
}