From c50efb4f56acbdaa9460467b4006595dd08f46a7 Mon Sep 17 00:00:00 2001 From: sheenam monga Date: Tue, 24 Mar 2020 13:12:07 +0530 Subject: [PATCH] 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 --- .../dispatcher/inc/wlan_mgmt_txrx_utils_api.h | 34 +++++++++++++- .../dispatcher/src/wlan_mgmt_txrx_tgt_api.c | 44 +++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_utils_api.h b/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_utils_api.h index 1044b04a7233..d9ce0cba7376 100644 --- a/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_utils_api.h +++ b/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, }; diff --git a/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_tgt_api.c b/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_tgt_api.c index 21cc0f3e0422..b35df5478296 100644 --- a/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_tgt_api.c +++ b/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;