Quellcode durchsuchen

qcacmn: Handiling FT action frames in driver

STA is unable to do roam from one AP to another AP due
to not handiling FT action frames that are received from
the STA.
So, Added changes to handle FT action frames without
dropping the FT action frames in driver.

Change-Id: I6461fe84ffb29b33636b6831e6ed046fae22e19e
Shiva Sankar Gajula vor 5 Jahren
Ursprung
Commit
8e829748d9

+ 18 - 0
umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_utils_api.h

@@ -240,6 +240,20 @@ enum rrm_actioncode {
 	RRM_NEIGHBOR_RPT,
 	RRM_NEIGHBOR_RPT,
 };
 };
 
 
+/**
+ * enum ft_actioncode - ft action frames
+ * @FT_FAST_BSS_TRNST_REQ: ft request frame
+ * @FT_FAST_BSS_TRNST_RES: ft response frame
+ * @FT_FAST_BSS_TRNST_CONFIRM: ft confirm frame
+ * @FT_FAST_BSS_TRNST_ACK: ft ACK frame
+ */
+enum ft_actioncode {
+	FT_FAST_BSS_TRNST_REQ = 1,
+	FT_FAST_BSS_TRNST_RES,
+	FT_FAST_BSS_TRNST_CONFIRM,
+	FT_FAST_BSS_TRNST_ACK,
+};
+
 /**
 /**
  * enum ht_actioncode - ht action frames
  * enum ht_actioncode - ht action frames
  * @HT_ACTION_NOTIFY_CHANWIDTH: ht notify bw action frame
  * @HT_ACTION_NOTIFY_CHANWIDTH: ht notify bw action frame
@@ -602,6 +616,10 @@ enum mgmt_frame_type {
 	MGMT_ACTION_RRM_LINK_MEASUREMENT_RPT,
 	MGMT_ACTION_RRM_LINK_MEASUREMENT_RPT,
 	MGMT_ACTION_RRM_NEIGHBOR_REQ,
 	MGMT_ACTION_RRM_NEIGHBOR_REQ,
 	MGMT_ACTION_RRM_NEIGHBOR_RPT,
 	MGMT_ACTION_RRM_NEIGHBOR_RPT,
+	MGMT_ACTION_FT_REQUEST,
+	MGMT_ACTION_FT_RESPONSE,
+	MGMT_ACTION_FT_CONFIRM,
+	MGMT_ACTION_FT_ACK,
 	MGMT_ACTION_HT_NOTIFY_CHANWIDTH,
 	MGMT_ACTION_HT_NOTIFY_CHANWIDTH,
 	MGMT_ACTION_HT_SMPS,
 	MGMT_ACTION_HT_SMPS,
 	MGMT_ACTION_HT_PSMP,
 	MGMT_ACTION_HT_PSMP,

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

@@ -258,6 +258,32 @@ mgmt_get_rrm_action_subtype(uint8_t action_code)
 	return frm_type;
 	return frm_type;
 }
 }
 
 
+static enum mgmt_frame_type
+mgmt_get_ft_action_subtype(uint8_t action_code)
+{
+	enum mgmt_frame_type frm_type;
+
+	switch (action_code) {
+	case FT_FAST_BSS_TRNST_REQ:
+		frm_type = MGMT_ACTION_FT_REQUEST;
+		break;
+	case FT_FAST_BSS_TRNST_RES:
+		frm_type = MGMT_ACTION_FT_RESPONSE;
+		break;
+	case FT_FAST_BSS_TRNST_CONFIRM:
+		frm_type = MGMT_ACTION_FT_CONFIRM;
+		break;
+	case FT_FAST_BSS_TRNST_ACK:
+		frm_type = MGMT_ACTION_FT_ACK;
+		break;
+	default:
+		frm_type = MGMT_FRM_UNSPECIFIED;
+		break;
+	}
+
+	return frm_type;
+}
+
 /**
 /**
  * mgmt_get_ht_action_subtype() - gets ht action subtype
  * mgmt_get_ht_action_subtype() - gets ht action subtype
  * @action_code: action code
  * @action_code: action code
@@ -710,6 +736,9 @@ mgmt_txrx_get_action_frm_subtype(uint8_t *mpdu_data_ptr)
 		frm_type = mgmt_get_spec_mgmt_action_subtype(
 		frm_type = mgmt_get_spec_mgmt_action_subtype(
 						action_hdr->action_code);
 						action_hdr->action_code);
 		break;
 		break;
+	case ACTION_FAST_BSS_TRNST:
+		frm_type = mgmt_get_ft_action_subtype(action_hdr->action_code);
+		break;
 	case ACTION_CATEGORY_QOS:
 	case ACTION_CATEGORY_QOS:
 		frm_type = mgmt_get_qos_action_subtype(action_hdr->action_code);
 		frm_type = mgmt_get_qos_action_subtype(action_hdr->action_code);
 		break;
 		break;