qcacld-3.0: Send ARP/NS/NA packets from HI PRIO queue

ARP/NS/NA packets will not get chance to be transmitted if
netif queues are paused due to low tx descriptor availability.
Send ARP/NS/NA packets from HI PRIO queue so that it can be transmitted
in noisy environment.

Change-Id: Ibb414463d1471c19d5db99e12517c77b02564318
CRs-Fixed: 2081348
diff --git a/core/dp/txrx/ol_txrx_flow_control.c b/core/dp/txrx/ol_txrx_flow_control.c
index a0517a1..8633e76 100644
--- a/core/dp/txrx/ol_txrx_flow_control.c
+++ b/core/dp/txrx/ol_txrx_flow_control.c
@@ -272,6 +272,26 @@
 }
 
 /**
+ * ol_tx_flow_pool_status_to_str() - convert flow pool status to string
+ * @status - flow pool status
+ *
+ * Returns: String corresponding to flow pool status
+ */
+static const char *ol_tx_flow_pool_status_to_str
+					(enum flow_pool_status status)
+{
+	switch (status) {
+	CASE_RETURN_STRING(FLOW_POOL_ACTIVE_UNPAUSED);
+	CASE_RETURN_STRING(FLOW_POOL_ACTIVE_PAUSED);
+	CASE_RETURN_STRING(FLOW_POOL_NON_PRIO_PAUSED);
+	CASE_RETURN_STRING(FLOW_POOL_INVALID);
+	CASE_RETURN_STRING(FLOW_POOL_INACTIVE);
+	default:
+		return "unknown";
+	}
+}
+
+/**
  * ol_tx_dump_flow_pool_info() - dump global_pool and flow_pool info
  *
  * Return: none
@@ -282,23 +302,19 @@
 	struct ol_tx_flow_pool_t *pool = NULL, *pool_prev = NULL;
 	struct ol_tx_flow_pool_t tmp_pool;
 
-	ol_txrx_dbg("Global Pool");
 	if (!pdev) {
 		ol_txrx_err("ERROR: pdev NULL");
 		QDF_ASSERT(0); /* traceback */
 		return;
 	}
-	ol_txrx_dbg("Total %d :: Available %d",
-		pdev->tx_desc.pool_size, pdev->tx_desc.num_free);
-	ol_txrx_dbg("Invalid flow_pool %d",
-		pdev->tx_desc.num_invalid_bin);
-	ol_txrx_dbg("No of pool map received %d",
-		pdev->pool_stats.pool_map_count);
-	ol_txrx_dbg("No of pool unmap received %d",
-		pdev->pool_stats.pool_unmap_count);
-	ol_txrx_dbg(
-		"Pkt dropped due to unavailablity of pool %d",
-		pdev->pool_stats.pkt_drop_no_pool);
+	ol_txrx_info("Global total %d :: avail %d invalid flow_pool %d "
+			"maps %d pool unmaps %d pkt drops %d",
+			pdev->tx_desc.pool_size,
+			pdev->tx_desc.num_free,
+			pdev->tx_desc.num_invalid_bin,
+			pdev->pool_stats.pool_map_count,
+			pdev->pool_stats.pool_unmap_count,
+			pdev->pool_stats.pkt_drop_no_pool);
 
 	/*
 	 * Nested spin lock.
@@ -317,23 +333,20 @@
 		if (pool_prev)
 			ol_tx_dec_pool_ref(pool_prev, false);
 
-		ol_txrx_dbg("\n");
-		ol_txrx_dbg(
-			"Flow_pool_id %d :: status %d",
-			tmp_pool.flow_pool_id, tmp_pool.status);
-		ol_txrx_dbg(
-			"Total %d :: Available %d :: Deficient %d",
-			tmp_pool.flow_pool_size, tmp_pool.avail_desc,
-			tmp_pool.deficient_desc);
-		ol_txrx_dbg(
-			"Start threshold %d :: Stop threshold %d",
-			 tmp_pool.start_th, tmp_pool.stop_th);
-		ol_txrx_dbg(
-			"Member flow_id  %d :: flow_type %d",
+		ol_txrx_info("flow_pool_id %d ::", tmp_pool.flow_pool_id);
+		ol_txrx_info("status %s flow_id %d flow_type %d",
+			ol_tx_flow_pool_status_to_str(tmp_pool.status),
 			tmp_pool.member_flow_id, tmp_pool.flow_type);
 		ol_txrx_dbg(
-			"Pkt dropped due to unavailablity of descriptors %d",
+			"total %d :: available %d :: deficient %d :: "
+			"pkt dropped (no desc) %d",
+			tmp_pool.flow_pool_size, tmp_pool.avail_desc,
+			tmp_pool.deficient_desc,
 			tmp_pool.pkt_drop_no_desc);
+		ol_txrx_info(
+			"thresh: start %d stop %d prio start %d prio stop %d",
+			 tmp_pool.start_th, tmp_pool.stop_th,
+			 tmp_pool.start_priority_th, tmp_pool.stop_priority_th);
 
 		pool_prev = pool;
 		qdf_spin_lock_bh(&pdev->tx_desc.flow_pool_list_lock);
@@ -510,6 +523,14 @@
 	pool->status = FLOW_POOL_ACTIVE_UNPAUSED;
 	pool->start_th = (start_threshold * flow_pool_size)/100;
 	pool->stop_th = (stop_threshold * flow_pool_size)/100;
+	pool->stop_priority_th = (TX_PRIORITY_TH * pool->stop_th)/100;
+	if (pool->stop_priority_th >= MAX_TSO_SEGMENT_DESC)
+		pool->stop_priority_th -= MAX_TSO_SEGMENT_DESC;
+
+	pool->start_priority_th = (TX_PRIORITY_TH * pool->start_th)/100;
+	if (pool->start_priority_th >= MAX_TSO_SEGMENT_DESC)
+			pool->start_priority_th -= MAX_TSO_SEGMENT_DESC;
+
 	qdf_spinlock_create(&pool->flow_pool_lock);
 	qdf_atomic_init(&pool->ref_cnt);
 	ol_tx_inc_pool_ref(pool);