瀏覽代碼

qcacmn: Add support for TWT get capabilities

Add support for TWT get capabilities.

Change-Id: Ib52401f1ef57b0ffab4fb32aa45a2e9435612fc4
CRs-Fixed: 3085389
Srinivas Girigowda 3 年之前
父節點
當前提交
2040cc94c8

+ 66 - 0
umac/twt/core/src/wlan_twt_common.c

@@ -395,6 +395,72 @@ wlan_twt_responder_enable(struct wlan_objmgr_psoc *psoc,
 	return tgt_twt_enable_req_send(psoc, req);
 }
 
+QDF_STATUS
+wlan_twt_set_peer_capabilities(struct wlan_objmgr_psoc *psoc,
+			       struct qdf_mac_addr *peer_mac,
+			       uint8_t peer_cap)
+{
+	struct twt_peer_priv_obj *peer_priv;
+	struct wlan_objmgr_peer *peer;
+
+	peer = wlan_objmgr_get_peer_by_mac(psoc, peer_mac->bytes,
+					   WLAN_TWT_ID);
+	if (!peer) {
+		twt_err("Peer object not found");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
+							  WLAN_UMAC_COMP_TWT);
+	if (!peer_priv) {
+		wlan_objmgr_peer_release_ref(peer, WLAN_TWT_ID);
+		twt_err("peer twt component object is NULL");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	qdf_mutex_acquire(&peer_priv->twt_peer_lock);
+	peer_priv->peer_capability = peer_cap;
+	qdf_mutex_release(&peer_priv->twt_peer_lock);
+
+	twt_debug("set peer cap: 0x%x", peer_cap);
+	wlan_objmgr_peer_release_ref(peer, WLAN_TWT_ID);
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS
+wlan_twt_get_peer_capabilities(struct wlan_objmgr_psoc *psoc,
+			       struct qdf_mac_addr *peer_mac,
+			       uint8_t *peer_cap)
+{
+	struct twt_peer_priv_obj *peer_priv;
+	struct wlan_objmgr_peer *peer;
+
+	peer = wlan_objmgr_get_peer_by_mac(psoc, peer_mac->bytes,
+					   WLAN_TWT_ID);
+	if (!peer) {
+		twt_err("Peer object not found");
+		*peer_cap = 0;
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
+							  WLAN_UMAC_COMP_TWT);
+	if (!peer_priv) {
+		wlan_objmgr_peer_release_ref(peer, WLAN_TWT_ID);
+		*peer_cap = 0;
+		twt_err("peer twt component object is NULL");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	qdf_mutex_acquire(&peer_priv->twt_peer_lock);
+	*peer_cap = peer_priv->peer_capability;
+	qdf_mutex_release(&peer_priv->twt_peer_lock);
+
+	twt_debug("get peer cap: 0x%x", *peer_cap);
+	wlan_objmgr_peer_release_ref(peer, WLAN_TWT_ID);
+	return QDF_STATUS_SUCCESS;
+}
+
 QDF_STATUS
 wlan_twt_enable_event_handler(struct wlan_objmgr_psoc *psoc,
 			      struct twt_enable_complete_event_param *event)

+ 28 - 0
umac/twt/core/src/wlan_twt_common.h

@@ -181,6 +181,34 @@ wlan_twt_responder_enable(struct wlan_objmgr_psoc *psoc,
 			  struct twt_enable_param *req,
 			  void *context);
 
+/**
+ * wlan_twt_set_peer_capabilities() - set twt peer capabilities
+ * @psoc: psoc handle
+ * @peer_mac: peer mac address
+ * @peer_cap: TWT peer capability bitmap. Refer enum
+ * wlan_twt_capabilities for representation.
+ *
+ * return: QDF_STATUS
+ */
+QDF_STATUS
+wlan_twt_set_peer_capabilities(struct wlan_objmgr_psoc *psoc,
+			       struct qdf_mac_addr *peer_mac,
+			       uint8_t peer_cap);
+
+/**
+ * ucfg_twt_get_peer_capabilities() - get twt peer capabilities
+ * @psoc: psoc handle
+ * @peer_mac: peer mac address
+ * @peer_cap: Pointer to output variable to hold TWT peer capability bitmap.
+ * Refer enum wlan_twt_capabilities for representation.
+ *
+ * return: QDF_STATUS
+ */
+QDF_STATUS
+wlan_twt_get_peer_capabilities(struct wlan_objmgr_psoc *psoc,
+			       struct qdf_mac_addr *peer_mac,
+			       uint8_t *peer_cap);
+
 /**
  * wlan_twt_enable_event_handler() - twt enable handler
  * @psoc: psoc handle

+ 15 - 0
umac/twt/dispatcher/inc/wlan_twt_api.h

@@ -106,6 +106,21 @@ wlan_twt_get_rx_ops(struct wlan_objmgr_psoc *psoc);
  */
 struct twt_psoc_priv_obj*
 wlan_twt_psoc_get_comp_private_obj(struct wlan_objmgr_psoc *psoc);
+
+/**
+ * wlan_set_peer_twt_capabilities() - set peer twt capabilities
+ * @psoc: psoc handle
+ * @peer_mac: peer mac address
+ * @peer_cap: TWT peer capability bitmap. Refer enum
+ * wlan_twt_capabilities for representation.
+ *
+ * return: QDF_STATUS
+ */
+QDF_STATUS
+wlan_set_peer_twt_capabilities(struct wlan_objmgr_psoc *psoc,
+			       struct qdf_mac_addr *peer_mac,
+			       uint8_t peer_cap);
+
 #else
 static inline
 QDF_STATUS twt_psoc_enable(struct wlan_objmgr_psoc *psoc)

+ 27 - 0
umac/twt/dispatcher/inc/wlan_twt_ucfg_api.h

@@ -306,4 +306,31 @@ ucfg_twt_responder_enable(struct wlan_objmgr_psoc *psoc,
 			  struct twt_enable_param *req,
 			  void *context);
 
+/**
+ * ucfg_twt_set_peer_capabilities() - set twt peer capabilities
+ * @psoc: psoc handle
+ * @peer_mac: peer mac address
+ * @peer_cap: TWT peer capability bitmap. Refer enum
+ * wlan_twt_capabilities for representation.
+ *
+ * return: QDF_STATUS
+ */
+QDF_STATUS
+ucfg_twt_set_peer_capabilities(struct wlan_objmgr_psoc *psoc,
+			       struct qdf_mac_addr *peer_mac,
+			       uint8_t peer_cap);
+
+/**
+ * ucfg_twt_get_peer_capabilities() - get twt peer capabilities
+ * @psoc: psoc handle
+ * @peer_mac: peer mac address
+ * @peer_cap: Pointer to output variable to hold TWT peer capability bitmap.
+ * Refer enum wlan_twt_capabilities for representation.
+ *
+ * return: QDF_STATUS
+ */
+QDF_STATUS
+ucfg_twt_get_peer_capabilities(struct wlan_objmgr_psoc *psoc,
+			       struct qdf_mac_addr *peer_mac,
+			       uint8_t *peer_cap);
 #endif /* _WLAN_TWT_UCFG_API_H_ */

+ 8 - 0
umac/twt/dispatcher/src/wlan_twt_api.c

@@ -21,6 +21,7 @@
  */
 #include <wlan_twt_api.h>
 #include "twt/core/src/wlan_twt_objmgr_handler.h"
+#include "twt/core/src/wlan_twt_common.h"
 
 struct wlan_lmac_if_twt_tx_ops *
 wlan_twt_get_tx_ops(struct wlan_objmgr_psoc *psoc)
@@ -256,3 +257,10 @@ QDF_STATUS twt_psoc_disable(struct wlan_objmgr_psoc *psoc)
 	return status;
 }
 
+QDF_STATUS
+wlan_set_peer_twt_capabilities(struct wlan_objmgr_psoc *psoc,
+			       struct qdf_mac_addr *peer_mac,
+			       uint8_t peer_cap)
+{
+	return wlan_twt_set_peer_capabilities(psoc, peer_mac, peer_cap);
+}

+ 15 - 0
umac/twt/dispatcher/src/wlan_twt_ucfg_api.c

@@ -107,3 +107,18 @@ QDF_STATUS ucfg_twt_responder_enable(struct wlan_objmgr_psoc *psoc,
 	return wlan_twt_responder_enable(psoc, req, context);
 }
 
+QDF_STATUS
+ucfg_twt_set_peer_capabilities(struct wlan_objmgr_psoc *psoc,
+			       struct qdf_mac_addr *peer_mac,
+			       uint8_t peer_cap)
+{
+	return wlan_twt_set_peer_capabilities(psoc, peer_mac, peer_cap);
+}
+
+QDF_STATUS
+ucfg_twt_get_peer_capabilities(struct wlan_objmgr_psoc *psoc,
+			       struct qdf_mac_addr *peer_mac,
+			       uint8_t *peer_cap)
+{
+	return wlan_twt_get_peer_capabilities(psoc, peer_mac, peer_cap);
+}