Explorar el Código

qcacmn: For WDS EXT use descriptor fields for 4-addr

For WDS ext use fr_ds and to_ds fields to check for
4-addr instead of reading value from TLV

Change-Id: I261746018de2320367e8650332a5c355edfb1489
CRs-Fixed: 3410639
Chaithanya Garrepalli hace 2 años
padre
commit
4eedfd8cf7

+ 1 - 1
dp/wifi3.0/be/dp_be_rx.c

@@ -107,7 +107,7 @@ static inline void dp_wds_ext_peer_learn_be(struct dp_soc *soc,
 		return;
 
 	if (qdf_nbuf_is_rx_chfrag_start(nbuf) &&
-	    hal_rx_get_mpdu_mac_ad4_valid_be(rx_tlv_hdr)) {
+	    (qdf_nbuf_is_fr_ds_set(nbuf) && qdf_nbuf_is_to_ds_set(nbuf))) {
 		qdf_atomic_test_and_set_bit(WDS_EXT_PEER_INIT_BIT,
 					    &ta_txrx_peer->wds_ext.init);
 

+ 22 - 0
qdf/inc/qdf_nbuf.h

@@ -1876,6 +1876,28 @@ static inline int qdf_nbuf_is_raw_frame(qdf_nbuf_t buf)
 	return __qdf_nbuf_is_raw_frame(buf);
 }
 
+/**
+ * qdf_nbuf_is_fr_ds_set() - get from DS bit
+ * @buf: Network buffer
+ *
+ * Return: integer value - 0/1
+ */
+static inline int qdf_nbuf_is_fr_ds_set(qdf_nbuf_t buf)
+{
+	return __qdf_nbuf_is_fr_ds_set(buf);
+}
+
+/**
+ * qdf_nbuf_is_to_ds_set() - get to DS bit
+ * @buf: Network buffer
+ *
+ * Return: integer value - 0/1
+ */
+static inline int qdf_nbuf_is_to_ds_set(qdf_nbuf_t buf)
+{
+	return __qdf_nbuf_is_to_ds_set(buf);
+}
+
 /**
  * qdf_nbuf_set_tid_val() - set  tid_val
  * @buf: Network buffer

+ 6 - 0
qdf/linux/src/i_qdf_nbuf.h

@@ -249,6 +249,12 @@ typedef void (*qdf_nbuf_free_t)(__qdf_nbuf_t);
 #define __qdf_nbuf_is_raw_frame(skb) \
 	(QDF_NBUF_CB_RX_RAW_FRAME((skb)))
 
+#define __qdf_nbuf_is_fr_ds_set(skb) \
+	(QDF_NBUF_CB_RX_FROM_DS((skb)))
+
+#define __qdf_nbuf_is_to_ds_set(skb) \
+	(QDF_NBUF_CB_RX_TO_DS((skb)))
+
 #define __qdf_nbuf_get_tid_val(skb) \
 	(QDF_NBUF_CB_RX_TID_VAL((skb)))
 

+ 13 - 1
qdf/linux/src/i_qdf_nbuf_m.h

@@ -71,6 +71,8 @@
  * @u.rx.dev.priv_cb_m.reo_dest_ind_or_sw_excpt: reo destination indication or
  *					     sw exception bit from ring desc
  * @u.rx.dev.priv_cb_m.lmac_id: lmac id for RX packet
+ * @u.rx.dev.priv_cb_m.fr_ds: from DS bit in RX packet
+ * @u.rx.dev.priv_cb_m.to_ds: to DS bit in RX packet
  * @u.rx.dev.priv_cb_m.reserved1: reserved bits
  * @u.rx.dev.priv_cb_m.tcp_seq_num: TCP sequence number
  * @u.rx.dev.priv_cb_m.tcp_ack_num: TCP ACK number
@@ -211,7 +213,9 @@ struct qdf_nbuf_cb {
 						 ipa_smmu_map:1,
 						 reo_dest_ind_or_sw_excpt:5,
 						 lmac_id:2,
-						 reserved1:16;
+						 fr_ds:1,
+						 to_ds:1,
+						 reserved1:14;
 					uint32_t tcp_seq_num;
 					uint32_t tcp_ack_num;
 					union {
@@ -407,6 +411,14 @@ QDF_COMPILE_TIME_ASSERT(qdf_nbuf_cb_size,
 	(((struct qdf_nbuf_cb *) \
 	((skb)->cb))->u.rx.is_raw_frame)
 
+#define QDF_NBUF_CB_RX_FROM_DS(skb) \
+	(((struct qdf_nbuf_cb *) \
+	((skb)->cb))->u.rx.dev.priv_cb_m.fr_ds)
+
+#define QDF_NBUF_CB_RX_TO_DS(skb) \
+	(((struct qdf_nbuf_cb *) \
+	((skb)->cb))->u.rx.dev.priv_cb_m.to_ds)
+
 #define QDF_NBUF_CB_RX_TID_VAL(skb) \
 	(((struct qdf_nbuf_cb *) \
 	((skb)->cb))->u.rx.tid_val)

+ 8 - 0
qdf/linux/src/i_qdf_nbuf_w.h

@@ -393,6 +393,14 @@ QDF_COMPILE_TIME_ASSERT(qdf_nbuf_cb_size,
 	(((struct qdf_nbuf_cb *) \
 	((skb)->cb))->u.rx.hw_info.desc_tlv_members.is_raw_frame)
 
+#define QDF_NBUF_CB_RX_FROM_DS(skb) \
+	(((struct qdf_nbuf_cb *) \
+	  ((skb)->cb))->u.rx.hw_info.desc_tlv_members.fr_ds)
+
+#define QDF_NBUF_CB_RX_TO_DS(skb) \
+	(((struct qdf_nbuf_cb *) \
+	  ((skb)->cb))->u.rx.hw_info.desc_tlv_members.to_ds)
+
 #define QDF_NBUF_CB_RX_IS_FRAG(skb) \
 	(((struct qdf_nbuf_cb *) \
 	((skb)->cb))->u.rx.hw_info.desc_tlv_members.flag_is_frag)