Browse Source

qcacmn: Add support to get fwr phymode for frequency

Currently, wifi-pos uses channel number to get the fwr phymode.
For adding 6g support wifi-pos need to get the phymode from
frequency instead of channel number
As a part of fix, Add handler for getting phymode based on
frequency

CRs-Fixed: 2617903
Change-Id: I007edebe41bf5ca750a1262c85043f628dc9f89f
Vinay Gannevaram 5 years ago
parent
commit
2250592dcd

+ 13 - 0
umac/wifi_pos/inc/wifi_pos_api.h

@@ -409,6 +409,19 @@ static inline QDF_STATUS wifi_pos_init_cir_cfr_rings(
 }
 #endif
 
+/**
+ * wifi_pos_register_get_fw_phy_mode_for_freq_cb: API to register callback
+ * to get current PHY mode
+ * @psoc: pointer to psoc object
+ * @handler: callback to be registered
+ *
+ * Return: QDF_STATUS_SUCCESS in case of success, error codes in
+ * case of failure
+ */
+QDF_STATUS wifi_pos_register_get_fw_phy_mode_for_freq_cb(
+			struct wlan_objmgr_psoc *psoc,
+			void (*handler)(uint32_t, uint32_t, uint32_t *));
+
 /**
  * wifi_pos_register_get_phy_mode_cb: API to register callback to get
  * current PHY mode

+ 27 - 1
umac/wifi_pos/src/wifi_pos_api.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -350,6 +350,32 @@ QDF_STATUS wifi_pos_register_get_phy_mode_cb(
 	return QDF_STATUS_SUCCESS;
 }
 
+QDF_STATUS wifi_pos_register_get_fw_phy_mode_for_freq_cb(
+				struct wlan_objmgr_psoc *psoc,
+				void (*handler)(uint32_t, uint32_t, uint32_t *))
+{
+	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc;
+
+	if (!psoc) {
+		wifi_pos_err("psoc is null");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	if (!handler) {
+		wifi_pos_err("Null callback");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+	wifi_pos_psoc = wifi_pos_get_psoc_priv_obj(psoc);
+	if (!wifi_pos_psoc) {
+		wifi_pos_err("wifi_pos priv obj is null");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	wifi_pos_psoc->wifi_pos_get_fw_phy_mode_for_freq = handler;
+
+	return QDF_STATUS_SUCCESS;
+}
+
 QDF_STATUS wifi_pos_register_send_action(
 				struct wlan_objmgr_psoc *psoc,
 				void (*handler)(struct wlan_objmgr_psoc *psoc,

+ 8 - 0
umac/wifi_pos/src/wifi_pos_utils_i.h

@@ -304,6 +304,12 @@ struct wifi_pos_dma_rings_cfg {
  * @oem_6g_support_disable: oem target 6ghz support is disabled if set
  * @wifi_pos_req_handler: function pointer to handle TLV or non-TLV
  * @wifi_pos_send_rsp: function pointer to send msg to userspace APP
+ * @wifi_pos_get_phy_mode: function pointer to get wlan phymode for given
+ *                         channel, channel width
+ * @wifi_pos_get_fw_phy_mode_for_freq: function pointer to get fw phymode
+ *                                     for given freq and channel width
+ * @wifi_pos_send_action: function pointer to send registered action frames
+ *                        to userspace APP
  *
  * wifi pos request messages
  * <----- fine_time_meas_cap (in bits) ----->
@@ -344,6 +350,8 @@ struct wifi_pos_psoc_priv_obj {
 				    struct wifi_pos_req_msg *req);
 	void (*wifi_pos_send_rsp)(uint32_t, uint32_t, uint32_t, uint8_t *);
 	void (*wifi_pos_get_phy_mode)(uint8_t, uint32_t, uint32_t *);
+	void (*wifi_pos_get_fw_phy_mode_for_freq)(uint32_t, uint32_t,
+						  uint32_t *);
 	void (*wifi_pos_send_action)(struct wlan_objmgr_psoc *psoc,
 				     uint32_t oem_subtype, uint8_t *buf,
 				     uint32_t len);