CHROMIUM: ath10k: add tx delay into timestamp IE of probe response

Add tx delay and tbtt offset value into probe response timestamp
IE similar to beacon timestamp.


BUG=b:167645146
TEST=Basic sanity

Change-Id: I4e7efebff75824f5d39e522d287270b7171e7705
Signed-off-by: Tamizh Chelvam <tamizhr@codeaurora.org>
Signed-off-by: Maharaja Kennadyrajan <mkenna@codeaurora.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/2402806
Commit-Queue: Srinivasa duvvuri <sduvvuri@google.com>
Tested-by: Srinivasa duvvuri <sduvvuri@google.com>
Reviewed-by: Srinivasa duvvuri <sduvvuri@google.com>
diff --git a/drivers/net/wireless-4.2/ath/ath10k/mac.c b/drivers/net/wireless-4.2/ath/ath10k/mac.c
index 35b0373..2dfc885 100644
--- a/drivers/net/wireless-4.2/ath/ath10k/mac.c
+++ b/drivers/net/wireless-4.2/ath/ath10k/mac.c
@@ -4233,9 +4233,12 @@
 	struct ieee80211_vif *vif = info->control.vif;
 	struct ieee80211_sta *sta = control->sta;
 	struct ieee80211_txq *txq = NULL;
+	struct ath10k_vif *arvif = (void *)vif->drv_priv;
 	struct ieee80211_hdr *hdr = (void *)skb->data;
 	enum ath10k_hw_txrx_mode txmode;
 	enum ath10k_mac_tx_path txpath;
+	struct ieee80211_mgmt *mgmt;
+	u64 adjusted_tsf;
 	bool is_htt;
 	bool is_mgmt;
 	bool is_presp;
@@ -4275,6 +4278,14 @@
 			ieee80211_free_txskb(ar->hw, skb);
 			return;
 		}
+		if (is_presp) {
+			mgmt = (struct ieee80211_mgmt *)skb->data;
+			adjusted_tsf =
+				cpu_to_le64(0ULL -
+					    arvif->tbttoffset_list[arvif->vdev_id]);
+			memcpy(&mgmt->u.probe_resp.timestamp,
+			       &adjusted_tsf, sizeof(adjusted_tsf));
+		}
 		spin_unlock_bh(&ar->htt.tx_lock);
 	}