qcacld-3.0: Changes to update mac_id in packetlog

Changes to update mac_id in packetlog header
for DBS.

Change-Id: I602d399e1ef34077b5d7bfc867fb60678ed8612c
CRs-fixed: 1047382
diff --git a/core/cds/inc/cds_sched.h b/core/cds/inc/cds_sched.h
index 0a26900..dfed8a8 100644
--- a/core/cds/inc/cds_sched.h
+++ b/core/cds/inc/cds_sched.h
@@ -310,6 +310,8 @@
 	void (*sme_get_nss_for_vdev)(void*, enum tQDF_ADAPTER_MODE,
 		uint8_t *, uint8_t *);
 
+	void (*ol_txrx_update_mac_id)(uint8_t , uint8_t);
+
 	/* This list is not sessionized. This mandatory channel list would be
 	 * as per OEMs preference as per the regulatory/other considerations.
 	 * So, this would remain same for all the interfaces.
diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c
index 376f197..998853e 100644
--- a/core/cds/src/cds_api.c
+++ b/core/cds/src/cds_api.c
@@ -378,6 +378,8 @@
 		goto err_sme_close;
 	}
 
+	gp_cds_context->ol_txrx_update_mac_id = ol_txrx_update_mac_id;
+
 	QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_INFO_HIGH,
 		  "%s: CDS successfully Opened", __func__);
 
diff --git a/core/cds/src/cds_concurrency.c b/core/cds/src/cds_concurrency.c
index 24bd527..7132040 100644
--- a/core/cds/src/cds_concurrency.c
+++ b/core/cds/src/cds_concurrency.c
@@ -2129,6 +2129,14 @@
 		uint32_t vdev_id,
 		bool in_use)
 {
+	cds_context_type *cds_ctx;
+
+	cds_ctx = cds_get_context(QDF_MODULE_ID_QDF);
+	if (!cds_ctx) {
+		cds_err("Invalid CDS Context");
+		return;
+	}
+
 	if (conn_index >= MAX_NUMBER_OF_CONC_CONNECTIONS) {
 		cds_err("Number of connections exceeded conn_index: %d",
 			conn_index);
@@ -2144,6 +2152,9 @@
 	conc_connection_list[conn_index].in_use = in_use;
 
 	cds_dump_connection_status_info();
+	if (cds_ctx->ol_txrx_update_mac_id)
+		cds_ctx->ol_txrx_update_mac_id(vdev_id, mac);
+
 }
 
 /**
diff --git a/core/dp/txrx/ol_rx.c b/core/dp/txrx/ol_rx.c
index db52497..d201313 100644
--- a/core/dp/txrx/ol_rx.c
+++ b/core/dp/txrx/ol_rx.c
@@ -64,6 +64,27 @@
 void ol_rx_data_process(struct ol_txrx_peer_t *peer,
 			qdf_nbuf_t rx_buf_list);
 
+/**
+ * ol_rx_send_pktlog_event() - send rx packetlog event
+ * @pdev: pdev handle
+ * @peer: peer handle
+ * @msdu: skb list
+ *
+ * Return: none
+ */
+void ol_rx_send_pktlog_event(struct ol_txrx_pdev_t *pdev,
+		struct ol_txrx_peer_t *peer, qdf_nbuf_t msdu)
+{
+	struct ol_rx_remote_data data;
+
+	data.msdu = msdu;
+	if (peer)
+		data.mac_id = peer->vdev->mac_id;
+	else
+		data.mac_id = 0;
+
+	wdi_event_handler(WDI_EVENT_RX_DESC_REMOTE, pdev, &data);
+}
 
 #ifdef HTT_RX_RESTORE
 
@@ -508,8 +529,7 @@
 
 				/* Pktlog */
 #ifdef WDI_EVENT_ENABLE
-				wdi_event_handler(WDI_EVENT_RX_DESC_REMOTE,
-						  pdev, head_msdu);
+		ol_rx_send_pktlog_event(pdev, peer, head_msdu);
 #endif
 
 				if (msdu_chaining) {
@@ -586,9 +606,8 @@
 #ifdef WDI_EVENT_ENABLE
 				if (status != htt_rx_status_ctrl_mgmt_null) {
 					/* Pktlog */
-					wdi_event_handler(
-						WDI_EVENT_RX_DESC_REMOTE, pdev,
-						msdu);
+					ol_rx_send_pktlog_event(pdev,
+						 peer, head_msdu);
 				}
 #endif
 				if (status == htt_rx_status_err_inv_peer) {
@@ -1332,7 +1351,7 @@
 
 	/* Pktlog */
 #ifdef WDI_EVENT_ENABLE
-	wdi_event_handler(WDI_EVENT_RX_DESC_REMOTE, pdev, head_msdu);
+	ol_rx_send_pktlog_event(pdev, peer, head_msdu);
 #endif
 
 	/* if this is an offload indication, peer id is carried in the
diff --git a/core/dp/txrx/ol_txrx.c b/core/dp/txrx/ol_txrx.c
index 09c85ac..435f3a9 100644
--- a/core/dp/txrx/ol_txrx.c
+++ b/core/dp/txrx/ol_txrx.c
@@ -3783,6 +3783,25 @@
 	vdev->disable_intrabss_fwd = val;
 }
 
+/**
+ * ol_txrx_update_mac_id() - update mac_id for vdev
+ * @vdev_id: vdev id
+ * @mac_id: mac id
+ *
+ * Return: none
+ */
+void ol_txrx_update_mac_id(uint8_t vdev_id, uint8_t mac_id)
+{
+	ol_txrx_vdev_handle vdev = ol_txrx_get_vdev_from_vdev_id(vdev_id);
+
+	if (NULL == vdev) {
+		QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
+			  "%s: Invalid vdev_id %d", __func__, vdev_id);
+		return;
+	}
+	vdev->mac_id = mac_id;
+}
+
 #ifdef QCA_LL_LEGACY_TX_FLOW_CONTROL
 
 /**
diff --git a/core/dp/txrx/ol_txrx.h b/core/dp/txrx/ol_txrx.h
index e02647e..e4d463d 100644
--- a/core/dp/txrx/ol_txrx.h
+++ b/core/dp/txrx/ol_txrx.h
@@ -133,4 +133,5 @@
 void htt_pkt_log_init(struct ol_txrx_pdev_t *handle, void *scn);
 QDF_STATUS ol_txrx_set_wisa_mode(ol_txrx_vdev_handle vdev,
 			bool enable);
+void ol_txrx_update_mac_id(uint8_t vdev_id, uint8_t mac_id);
 #endif /* _OL_TXRX__H_ */
diff --git a/core/dp/txrx/ol_txrx_types.h b/core/dp/txrx/ol_txrx_types.h
index 78e16c2..ea1ccc6 100644
--- a/core/dp/txrx/ol_txrx_types.h
+++ b/core/dp/txrx/ol_txrx_types.h
@@ -1060,6 +1060,7 @@
 	uint64_t fwd_tx_packets;
 	uint64_t fwd_rx_packets;
 	bool is_wisa_mode_enable;
+	uint8_t mac_id;
 };
 
 struct ol_rx_reorder_array_elem_t {
@@ -1253,4 +1254,10 @@
 		struct ol_mic_error_info mic_err;
 	} u;
 };
+
+struct ol_rx_remote_data {
+	qdf_nbuf_t msdu;
+	uint8_t mac_id;
+};
+
 #endif /* _OL_TXRX_TYPES__H_ */
diff --git a/core/utils/pktlog/include/pktlog_ac_i.h b/core/utils/pktlog/include/pktlog_ac_i.h
index 7dbf443..5c4e9d6 100644
--- a/core/utils/pktlog/include/pktlog_ac_i.h
+++ b/core/utils/pktlog/include/pktlog_ac_i.h
@@ -43,7 +43,12 @@
 	struct ath_pktlog_info *pl_info;
 	uint32_t flags;
 	uint16_t missed_cnt;
+#ifdef HELIUMPLUS
+	uint8_t log_type;
+	uint8_t macId;
+#else
 	uint16_t log_type;
+#endif
 	size_t log_size;
 	uint16_t timestamp;
 #ifdef HELIUMPLUS
@@ -59,7 +64,7 @@
 
 A_STATUS process_tx_info(struct ol_txrx_pdev_t *pdev, void *data);
 A_STATUS process_rx_info(void *pdev, void *data);
-A_STATUS process_rx_info_remote(void *pdev, qdf_nbuf_t amsdu);
+A_STATUS process_rx_info_remote(void *pdev, void *data);
 A_STATUS process_rate_find(void *pdev, void *data);
 A_STATUS process_rate_update(void *pdev, void *data);
 
diff --git a/core/utils/pktlog/pktlog_internal.c b/core/utils/pktlog/pktlog_internal.c
index 5d70836..0519d17 100644
--- a/core/utils/pktlog/pktlog_internal.c
+++ b/core/utils/pktlog/pktlog_internal.c
@@ -69,6 +69,9 @@
 	uint16_t log_type;
 	size_t log_size;
 	uint32_t flags;
+#ifdef HELIUMPLUS
+	uint8_t mac_id;
+#endif
 
 	if (!plarg) {
 		printk("Invalid parg in %s\n", __func__);
@@ -76,7 +79,12 @@
 	}
 
 	pl_info = plarg->pl_info;
+#ifdef HELIUMPLUS
+	mac_id = plarg->macId;
 	log_type = plarg->log_type;
+#else
+	log_type = plarg->log_type;
+#endif
 	log_size = plarg->log_size;
 	log_buf = pl_info->buf;
 	flags = plarg->flags;
@@ -100,8 +108,14 @@
 	}
 
 	log_hdr = (struct ath_pktlog_hdr *)(log_buf->log_data + cur_wr_offset);
-	log_hdr->log_type = log_type;
+
 	log_hdr->flags = flags;
+#ifdef HELIUMPLUS
+	log_hdr->macId = mac_id;
+	log_hdr->log_type = log_type;
+#else
+	log_hdr->log_type = log_type;
+#endif
 	log_hdr->size = (uint16_t) log_size;
 	log_hdr->missed_cnt = plarg->missed_cnt;
 	log_hdr->timestamp = plarg->timestamp;
@@ -167,7 +181,12 @@
 	uint8_t flags = 0;
 
 	plarg.pl_info = pl_info;
+#ifdef HELIUMPLUS
+	plarg.macId = pl_hdr->macId;
 	plarg.log_type = pl_hdr->log_type;
+#else
+	plarg.log_type = pl_hdr->log_type;
+#endif
 	plarg.log_size = log_size;
 	plarg.flags = pl_hdr->flags;
 	plarg.missed_cnt = pl_hdr->missed_cnt;
@@ -379,9 +398,18 @@
 	pl_hdr.missed_cnt = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_MISSED_CNT_OFFSET) &
 			     ATH_PKTLOG_HDR_MISSED_CNT_MASK) >>
 			    ATH_PKTLOG_HDR_MISSED_CNT_SHIFT;
+#ifdef HELIUMPLUS
+	pl_hdr.log_type = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_LOG_TYPE_OFFSET) &
+		   ATH_PKTLOG_HDR_LOG_TYPE_MASK) >>
+		  ATH_PKTLOG_HDR_LOG_TYPE_SHIFT;
+	pl_hdr.macId = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_MAC_ID_OFFSET) &
+		   ATH_PKTLOG_HDR_MAC_ID_MASK) >>
+		  ATH_PKTLOG_HDR_MAC_ID_SHIFT;
+#else
 	pl_hdr.log_type = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_LOG_TYPE_OFFSET) &
 			   ATH_PKTLOG_HDR_LOG_TYPE_MASK) >>
 			  ATH_PKTLOG_HDR_LOG_TYPE_SHIFT;
+#endif
 	pl_hdr.size = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_SIZE_OFFSET) &
 		       ATH_PKTLOG_HDR_SIZE_MASK) >> ATH_PKTLOG_HDR_SIZE_SHIFT;
 	pl_hdr.timestamp = *(pl_tgt_hdr + ATH_PKTLOG_HDR_TIMESTAMP_OFFSET);
@@ -501,7 +529,7 @@
 	return A_OK;
 }
 
-A_STATUS process_rx_info_remote(void *pdev, qdf_nbuf_t amsdu)
+A_STATUS process_rx_info_remote(void *pdev, void *data)
 {
 	struct ol_pktlog_dev_t *pl_dev;
 	struct ath_pktlog_info *pl_info;
@@ -509,19 +537,20 @@
 	struct ath_pktlog_hdr pl_hdr;
 	struct ath_pktlog_rx_info rxstat_log;
 	size_t log_size;
+	struct ol_rx_remote_data *r_data = (struct ol_rx_remote_data *)data;
 	qdf_nbuf_t msdu;
 
 	if (!pdev) {
 		printk("Invalid pdev in %s\n", __func__);
 		return A_ERROR;
 	}
-	if (!amsdu) {
+	if (!r_data) {
 		printk("Invalid data in %s\n", __func__);
 		return A_ERROR;
 	}
 	pl_dev = ((struct ol_txrx_pdev_t *)pdev)->pl_dev;
 	pl_info = pl_dev->pl_info;
-	msdu = amsdu;
+	msdu = r_data->msdu;
 
 	while (msdu) {
 		rx_desc =
@@ -535,7 +564,12 @@
 		 */
 		pl_hdr.flags = (1 << PKTLOG_FLG_FRM_TYPE_REMOTE_S);
 		pl_hdr.missed_cnt = 0;
+#if defined(HELIUMPLUS)
+		pl_hdr.macId = r_data->mac_id;
 		pl_hdr.log_type = PKTLOG_TYPE_RX_STAT;
+#else
+		pl_hdr.log_type = PKTLOG_TYPE_RX_STAT;
+#endif
 		pl_hdr.size = sizeof(*rx_desc) -
 			      sizeof(struct htt_host_fw_desc_base);
 #if defined(HELIUMPLUS)
@@ -576,9 +610,19 @@
 	pl_hdr.missed_cnt = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_MISSED_CNT_OFFSET) &
 			     ATH_PKTLOG_HDR_MISSED_CNT_MASK) >>
 			    ATH_PKTLOG_HDR_MISSED_CNT_SHIFT;
+#ifdef HELIUMPLUS
 	pl_hdr.log_type = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_LOG_TYPE_OFFSET) &
 			   ATH_PKTLOG_HDR_LOG_TYPE_MASK) >>
 			  ATH_PKTLOG_HDR_LOG_TYPE_SHIFT;
+	pl_hdr.macId = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_MAC_ID_OFFSET) &
+			   ATH_PKTLOG_HDR_MAC_ID_MASK) >>
+			  ATH_PKTLOG_HDR_MAC_ID_SHIFT;
+#else
+	pl_hdr.log_type = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_LOG_TYPE_OFFSET) &
+				   ATH_PKTLOG_HDR_LOG_TYPE_MASK) >>
+				  ATH_PKTLOG_HDR_LOG_TYPE_SHIFT;
+#endif
+
 	pl_hdr.size = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_SIZE_OFFSET) &
 		       ATH_PKTLOG_HDR_SIZE_MASK) >> ATH_PKTLOG_HDR_SIZE_SHIFT;
 	pl_hdr.timestamp = *(pl_tgt_hdr + ATH_PKTLOG_HDR_TIMESTAMP_OFFSET);
@@ -627,9 +671,19 @@
 	pl_hdr.missed_cnt = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_MISSED_CNT_OFFSET) &
 			     ATH_PKTLOG_HDR_MISSED_CNT_MASK) >>
 			    ATH_PKTLOG_HDR_MISSED_CNT_SHIFT;
+#ifdef HELIUMPLUS
 	pl_hdr.log_type = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_LOG_TYPE_OFFSET) &
 			   ATH_PKTLOG_HDR_LOG_TYPE_MASK) >>
 			  ATH_PKTLOG_HDR_LOG_TYPE_SHIFT;
+	pl_hdr.macId = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_MAC_ID_OFFSET) &
+			   ATH_PKTLOG_HDR_MAC_ID_MASK) >>
+			  ATH_PKTLOG_HDR_MAC_ID_SHIFT;
+#else
+	pl_hdr.log_type = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_LOG_TYPE_OFFSET) &
+			   ATH_PKTLOG_HDR_LOG_TYPE_MASK) >>
+			  ATH_PKTLOG_HDR_LOG_TYPE_SHIFT;
+#endif
+
 	pl_hdr.size = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_SIZE_OFFSET) &
 		       ATH_PKTLOG_HDR_SIZE_MASK) >> ATH_PKTLOG_HDR_SIZE_SHIFT;
 	pl_hdr.timestamp = *(pl_tgt_hdr + ATH_PKTLOG_HDR_TIMESTAMP_OFFSET);
@@ -674,9 +728,19 @@
 	pl_hdr.missed_cnt = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_MISSED_CNT_OFFSET) &
 			     ATH_PKTLOG_HDR_MISSED_CNT_MASK) >>
 			    ATH_PKTLOG_HDR_MISSED_CNT_SHIFT;
+#ifdef HELIUMPLUS
 	pl_hdr.log_type = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_LOG_TYPE_OFFSET) &
 			   ATH_PKTLOG_HDR_LOG_TYPE_MASK) >>
 			  ATH_PKTLOG_HDR_LOG_TYPE_SHIFT;
+	pl_hdr.macId = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_MAC_ID_OFFSET) &
+			   ATH_PKTLOG_HDR_MAC_ID_MASK) >>
+			  ATH_PKTLOG_HDR_MAC_ID_SHIFT;
+#else
+	pl_hdr.log_type = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_LOG_TYPE_OFFSET) &
+				   ATH_PKTLOG_HDR_LOG_TYPE_MASK) >>
+				  ATH_PKTLOG_HDR_LOG_TYPE_SHIFT;
+#endif
+
 	pl_hdr.size = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_SIZE_OFFSET) &
 		       ATH_PKTLOG_HDR_SIZE_MASK) >> ATH_PKTLOG_HDR_SIZE_SHIFT;
 	pl_hdr.timestamp = *(pl_tgt_hdr + ATH_PKTLOG_HDR_TIMESTAMP_OFFSET);
diff --git a/uapi/linux/pktlog_ac_fmt.h b/uapi/linux/pktlog_ac_fmt.h
index bde0d3e..27cd549 100644
--- a/uapi/linux/pktlog_ac_fmt.h
+++ b/uapi/linux/pktlog_ac_fmt.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
  *
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  *
@@ -57,7 +57,12 @@
 struct ath_pktlog_hdr {
 	uint16_t flags;
 	uint16_t missed_cnt;
+#ifdef HELIUMPLUS
+	uint8_t log_type;
+	uint8_t macId;
+#else
 	uint16_t log_type;
+#endif
 	uint16_t size;
 	uint32_t timestamp;
 #ifdef HELIUMPLUS
@@ -71,9 +76,19 @@
 #define ATH_PKTLOG_HDR_MISSED_CNT_MASK 0xffff0000
 #define ATH_PKTLOG_HDR_MISSED_CNT_SHIFT 16
 #define ATH_PKTLOG_HDR_MISSED_CNT_OFFSET 0
+#ifdef HELIUMPLUS
+#define ATH_PKTLOG_HDR_LOG_TYPE_MASK 0x00ff
+#define ATH_PKTLOG_HDR_LOG_TYPE_SHIFT 0
+#define ATH_PKTLOG_HDR_LOG_TYPE_OFFSET 1
+#define ATH_PKTLOG_HDR_MAC_ID_MASK 0xff00
+#define ATH_PKTLOG_HDR_MAC_ID_SHIFT 8
+#define ATH_PKTLOG_HDR_MAC_ID_OFFSET 1
+#else
 #define ATH_PKTLOG_HDR_LOG_TYPE_MASK 0xffff
 #define ATH_PKTLOG_HDR_LOG_TYPE_SHIFT 0
 #define ATH_PKTLOG_HDR_LOG_TYPE_OFFSET 1
+#endif
+
 #define ATH_PKTLOG_HDR_SIZE_MASK 0xffff0000
 #define ATH_PKTLOG_HDR_SIZE_SHIFT 16
 #define ATH_PKTLOG_HDR_SIZE_OFFSET 1