Просмотр исходного кода

qcacmn: Add Support for ACTION_CATEGORY_RVS

Currently, mgmt_txrx_get_action_frm_subtype does not handle
ACTION_CATEGORY_RVS. In case action_category is
ACTION_CATEGORY_RVS, mgmt_txrx_get_action_frm_subtype
returns MGMT_FRM_UNSPECIFIED due to default handling. Function
tgt_mgmt_txrx_rx_frame_handler returns QDF_STATUS_E_FAILURE
on receiving MGMT_FRM_UNSPECIFIED frame type and drops mgmt
frames.

Fix is to add support for ACTION_CATEGORY_RVS in
mgmt_txrx_get_action_frm_subtype to avoid drop of MCSC
frames. Add new management frames MGMT_ACTION_SCS_REQ,
MGMT_ACTION_SCS_RSP, MGMT_ACTION_GROUP_MEMBERSHIP_REQ,
MGMT_ACTION_GROUP_MEMBERSHIP_RSP, MGMT_ACTION_MCSC_REQ,
MGMT_ACTION_MCSC_RSP and new element ACTION_CATEGORY_RVS
in mgmt_action_category. mgmt_txrx_get_action_frm_subtype
Finds rvs frame subtype and returns subtype instead of returning
MGMT_FRM_UNSPECIFIED.

Change-Id: Iad1abac120770724f9ae6d86f524c4d722fb0aaa
CRs-Fixed: 2649900
sheenam monga 5 лет назад
Родитель
Сommit
c50efb4f56

+ 33 - 1
umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_utils_api.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-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
@@ -112,6 +112,7 @@ enum mgmt_subtype {
  * @ACTION_CATEGORY_DMG: unprotected dmg action category
  * @ACTION_CATEGORY_WMM: wmm action category
  * @ACTION_CATEGORY_FST: fst action category
+ * @ACTION_CATEGORY_RVS: robust av streaming action category
  * @ACTION_CATEGORY_UNPROT_DMG: dmg action category
  * @ACTION_CATEGORY_VHT: vht action category
  * @ACTION_CATEGORY_VENDOR_SPECIFIC_PROTECTED: vendor specific protected
@@ -138,6 +139,7 @@ enum mgmt_action_category {
 	ACTION_CATEGORY_DMG = 16,
 	ACTION_CATEGORY_WMM = 17,
 	ACTION_CATEGORY_FST = 18,
+	ACTION_CATEGORY_RVS = 19,
 	ACTION_CATEGORY_UNPROT_DMG = 20,
 	ACTION_CATEGORY_VHT = 21,
 	ACTION_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126,
@@ -439,6 +441,24 @@ enum fst_actioncode {
 	FST_ON_CHANNEL_TUNNEL,
 };
 
+/**
+ * enum rvs_actioncode - Robust av streaming action frames
+ * @SCS_REQ: scs request frame
+ * @SCS_RSP: scs response frame
+ * @GROUP_MEMBERSHIP_REQ:  Group Membership Request frame
+ * @GROUP_MEMBERSHIP_RSP: Group Membership Response frame
+ * @MCSC_REQ: mcsc request frame
+ * @MCSC_RSP: mcsc response frame
+ */
+enum rvs_actioncode {
+	SCS_REQ,
+	SCS_RSP,
+	GROUP_MEMBERSHIP_REQ,
+	GROUP_MEMBERSHIP_RSP,
+	MCSC_REQ,
+	MCSC_RSP,
+};
+
 /**
  * enum vht_actioncode - vht action frames
  * @VHT_ACTION_COMPRESSED_BF: vht compressed bf action frame
@@ -573,6 +593,12 @@ struct action_frm_hdr {
  * @MGMT_ACTION_FST_ACK_REQ: FST ack frame for request
  * @MGMT_ACTION_FST_ACK_RSP: FST ack frame for response
  * @MGMT_ACTION_FST_ON_CHANNEL_TUNNEL: FST on channel tunnel frame
+ * @MGMT_ACTION_SCS_REQ: SCS request frame
+ * @MGMT_ACTION_SCS_RSP: SCS response frame
+ * @MGMT_ACTION_GROUP_MEMBERSHIP_REQ: group membership request frame
+ * @MGMT_ACTION_GROUP_MEMBERSHIP_RSP: group membership response frame
+ * @MGMT_ACTION_MCSC_REQ: MCSC request frame
+ * @MGMT_ACTION_MCSC_RSP: MCSC response frame
  * @MGMT_FRAME_TYPE_ALL:         mgmt frame type for all type of frames
  * @MGMT_MAX_FRAME_TYPE:         max. mgmt frame types
  */
@@ -691,6 +717,12 @@ enum mgmt_frame_type {
 	MGMT_ACTION_FST_ACK_REQ,
 	MGMT_ACTION_FST_ACK_RSP,
 	MGMT_ACTION_FST_ON_CHANNEL_TUNNEL,
+	MGMT_ACTION_SCS_REQ,
+	MGMT_ACTION_SCS_RSP,
+	MGMT_ACTION_GROUP_MEMBERSHIP_REQ,
+	MGMT_ACTION_GROUP_MEMBERSHIP_RSP,
+	MGMT_ACTION_MCSC_REQ,
+	MGMT_ACTION_MCSC_RSP,
 	MGMT_FRAME_TYPE_ALL,
 	MGMT_MAX_FRAME_TYPE,
 };

+ 44 - 0
umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_tgt_api.c

@@ -715,6 +715,46 @@ mgmt_get_fst_action_subtype(uint8_t action_code)
 	return frm_type;
 }
 
+/**
+ * mgmt_get_rvs_action_subtype() - gets rvs action subtype
+ * @action_code: action code
+ *
+ * This function returns the subtype for rvs action
+ * category.
+ *
+ * Return: mgmt frame type
+ */
+static enum mgmt_frame_type
+mgmt_get_rvs_action_subtype(uint8_t action_code)
+{
+	enum mgmt_frame_type frm_type;
+
+	switch (action_code) {
+	case SCS_REQ:
+		frm_type = MGMT_ACTION_SCS_REQ;
+		break;
+	case SCS_RSP:
+		frm_type = MGMT_ACTION_SCS_RSP;
+		break;
+	case GROUP_MEMBERSHIP_REQ:
+		frm_type = MGMT_ACTION_GROUP_MEMBERSHIP_REQ;
+		break;
+	case GROUP_MEMBERSHIP_RSP:
+		frm_type = MGMT_ACTION_GROUP_MEMBERSHIP_RSP;
+		break;
+	case MCSC_REQ:
+		frm_type = MGMT_ACTION_MCSC_REQ;
+		break;
+	case MCSC_RSP:
+		frm_type = MGMT_ACTION_MCSC_RSP;
+	default:
+		frm_type = MGMT_FRM_UNSPECIFIED;
+		break;
+	}
+
+	return frm_type;
+}
+
 /**
  * mgmt_txrx_get_action_frm_subtype() - gets action frm subtype
  * @mpdu_data_ptr: pointer to mpdu data
@@ -794,6 +834,10 @@ mgmt_txrx_get_action_frm_subtype(uint8_t *mpdu_data_ptr)
 	case ACTION_CATEGORY_FST:
 		frm_type = mgmt_get_fst_action_subtype(action_hdr->action_code);
 		break;
+	case ACTION_CATEGORY_RVS:
+		frm_type =
+			mgmt_get_rvs_action_subtype(action_hdr->action_code);
+		break;
 	default:
 		frm_type = MGMT_FRM_UNSPECIFIED;
 		break;