Prechádzať zdrojové kódy

qcacmn: Enable/Disable multi group key support

Support to Enable/Disable multi group key and configure
maximum number of group keys.

Change-Id: Ie6ce2a38d0ad04a47f966fc281f35a8af7125447
CRs-Fixed: 2490599
Gurumoorthi Gnanasambandhan 5 rokov pred
rodič
commit
80e1ae17a6

+ 6 - 0
target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_tx_ops.c

@@ -306,6 +306,12 @@ target_if_vdev_mlme_id_2_wmi(uint32_t cfg_id)
 	case WLAN_MLME_CFG_LISTEN_INTERVAL:
 		wmi_id = wmi_vdev_param_listen_interval;
 		break;
+	case WLAN_MLME_CFG_ENABLE_MULTI_GROUP_KEY:
+		wmi_id = wmi_vdev_param_enable_multi_group_key;
+		break;
+	case WLAN_MLME_CFG_MAX_GROUP_KEYS:
+		wmi_id = wmi_vdev_param_max_group_keys;
+		break;
 	default:
 		wmi_id = cfg_id;
 		break;

+ 2 - 0
umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_ucfg_api.h

@@ -101,6 +101,8 @@ enum wlan_mlme_cfg_id {
 	WLAN_MLME_CFG_BCN_TX_RATE,
 	WLAN_MLME_CFG_BCN_TX_RATE_CODE,
 	WLAN_MLME_CFG_RATEMASK_CAPS,
+	WLAN_MLME_CFG_ENABLE_MULTI_GROUP_KEY,
+	WLAN_MLME_CFG_MAX_GROUP_KEYS,
 	WLAN_MLME_CFG_MAX
 };
 

+ 27 - 21
umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_utils_api.c

@@ -112,7 +112,7 @@ wlan_util_vdev_mlme_set_param(struct vdev_mlme_obj *vdev_mlme,
 	struct vdev_mlme_proto *mlme_proto;
 	struct vdev_mlme_mgmt *mlme_mgmt;
 	struct vdev_mlme_inactivity_params *inactivity_params;
-	int is_wmi_cmd = 0;
+	bool is_wmi_cmd = false;
 	int ret = QDF_STATUS_SUCCESS;
 	struct vdev_set_params param = {0};
 
@@ -128,27 +128,27 @@ wlan_util_vdev_mlme_set_param(struct vdev_mlme_obj *vdev_mlme,
 	switch (param_id) {
 	case WLAN_MLME_CFG_DTIM_PERIOD:
 		mlme_proto->generic.dtim_period = mlme_cfg.value;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_SLOT_TIME:
 		mlme_proto->generic.slot_time = mlme_cfg.value;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_PROTECTION_MODE:
 		mlme_proto->generic.protection_mode = mlme_cfg.value;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_BEACON_INTERVAL:
 		mlme_proto->generic.beacon_interval = mlme_cfg.value;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_LDPC:
 		mlme_proto->generic.ldpc = mlme_cfg.value;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_NSS:
 		mlme_proto->generic.nss = mlme_cfg.value;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_TSF_ADJUST:
 		mlme_proto->generic.tsfadjust = mlme_cfg.tsf;
@@ -181,22 +181,22 @@ wlan_util_vdev_mlme_set_param(struct vdev_mlme_obj *vdev_mlme,
 		mlme_proto->vht_info.bfee_sts_cap = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_TXBF_CAPS:
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_HT_CAPS:
 		mlme_proto->ht_info.ht_caps = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_HE_OPS:
 		mlme_proto->he_ops_info.he_ops = mlme_cfg.value;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_RTS_THRESHOLD:
 		mlme_mgmt->generic.rts_threshold = mlme_cfg.value;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_FRAG_THRESHOLD:
 		mlme_mgmt->generic.frag_threshold = mlme_cfg.value;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_PROBE_DELAY:
 		mlme_mgmt->generic.probe_delay = mlme_cfg.value;
@@ -206,19 +206,19 @@ wlan_util_vdev_mlme_set_param(struct vdev_mlme_obj *vdev_mlme,
 		break;
 	case WLAN_MLME_CFG_DROP_UNENCRY:
 		mlme_mgmt->generic.drop_unencry = mlme_cfg.value;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_TX_PWR_LIMIT:
 		mlme_mgmt->generic.tx_pwrlimit = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_TX_POWER:
 		mlme_mgmt->generic.tx_power = mlme_cfg.value;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_AMPDU:
 		mlme_mgmt->generic.ampdu = mlme_cfg.value;
 		mlme_cfg.value = (mlme_cfg.value << 8) + 0xFF;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_AMPDU_SIZE:
 		mlme_mgmt->generic.ampdu = mlme_cfg.value;
@@ -226,7 +226,7 @@ wlan_util_vdev_mlme_set_param(struct vdev_mlme_obj *vdev_mlme,
 	case WLAN_MLME_CFG_AMSDU:
 		mlme_mgmt->generic.amsdu = mlme_cfg.value;
 		mlme_cfg.value = (mlme_cfg.value << 8) + 0xFF;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_AMSDU_SIZE:
 		mlme_mgmt->generic.amsdu = mlme_cfg.value;
@@ -240,17 +240,17 @@ wlan_util_vdev_mlme_set_param(struct vdev_mlme_obj *vdev_mlme,
 	case WLAN_MLME_CFG_MIN_IDLE_INACTIVE_TIME:
 		inactivity_params->keepalive_min_idle_inactive_time_secs =
 							mlme_cfg.value;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_MAX_IDLE_INACTIVE_TIME:
 		inactivity_params->keepalive_max_idle_inactive_time_secs =
 							mlme_cfg.value;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_MAX_UNRESPONSIVE_INACTIVE_TIME:
 		inactivity_params->keepalive_max_unresponsive_time_secs =
 							mlme_cfg.value;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_RATE_FLAGS:
 		mlme_mgmt->rate_info.rate_flags = mlme_cfg.value;
@@ -281,7 +281,7 @@ wlan_util_vdev_mlme_set_param(struct vdev_mlme_obj *vdev_mlme,
 		break;
 	case WLAN_MLME_CFG_LISTEN_INTERVAL:
 		mlme_mgmt->powersave_info.listen_interval = mlme_cfg.value;
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_MODDTIM_CNT:
 		mlme_mgmt->powersave_info.moddtim_cnt = mlme_cfg.value;
@@ -345,10 +345,16 @@ wlan_util_vdev_mlme_set_param(struct vdev_mlme_obj *vdev_mlme,
 		mlme_mgmt->rate_info.bcn_tx_rate = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_BCN_TX_RATE_CODE:
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
 		break;
 	case WLAN_MLME_CFG_TX_MGMT_RATE_CODE:
-		is_wmi_cmd = 1;
+		is_wmi_cmd = true;
+		break;
+	case WLAN_MLME_CFG_ENABLE_MULTI_GROUP_KEY:
+		is_wmi_cmd = true;
+		break;
+	case WLAN_MLME_CFG_MAX_GROUP_KEYS:
+		is_wmi_cmd = true;
 		break;
 	default:
 		break;

+ 4 - 0
wmi/inc/wmi_unified_param.h

@@ -5157,6 +5157,8 @@ typedef enum {
 	wmi_vdev_param_rawmode_open_war,
 	wmi_vdev_param_max_mtu_size,
 	wmi_vdev_param_mcast_rc_stale_period,
+	wmi_vdev_param_enable_multi_group_key,
+	wmi_vdev_param_max_group_keys,
 } wmi_conv_vdev_param_id;
 
 /**
@@ -5474,6 +5476,7 @@ struct wmi_host_fw_abi_ver {
  *                    by the AP
  * @max_bssid_indicator: max number of MBSS VAPs
  * @three_way_coex_config_legacy_en: enable three way coex legacy feature
+ * @max_num_group_keys: max number of group keys supported for VLAN
  */
 typedef struct {
 	uint32_t num_vdevs;
@@ -5557,6 +5560,7 @@ typedef struct {
 		 eapol_minrate_ac_set:2;
 	bool tstamp64_en;
 	bool three_way_coex_config_legacy_en;
+	uint32_t max_num_group_keys;
 } target_resource_config;
 
 /**

+ 4 - 0
wmi/src/wmi_unified_tlv.c

@@ -472,6 +472,9 @@ static const uint32_t vdev_param_tlv[] = {
 	[wmi_vdev_param_max_mtu_size] = WMI_VDEV_PARAM_MAX_MTU_SIZE,
 	[wmi_vdev_param_mcast_rc_stale_period] =
 					WMI_VDEV_PARAM_MCAST_RC_STALE_PERIOD,
+	[wmi_vdev_param_enable_multi_group_key] =
+				WMI_VDEV_PARAM_ENABLE_MULTI_GROUP_KEY,
+	[wmi_vdev_param_max_group_keys] = WMI_VDEV_PARAM_NUM_GROUP_KEYS,
 };
 #endif
 
@@ -6474,6 +6477,7 @@ void wmi_copy_resource_config(wmi_resource_config *resource_cfg,
 	resource_cfg->num_packet_filters = tgt_res_cfg->num_packet_filters;
 	resource_cfg->num_max_sta_vdevs = tgt_res_cfg->num_max_sta_vdevs;
 	resource_cfg->max_bssid_indicator = tgt_res_cfg->max_bssid_indicator;
+	resource_cfg->max_num_group_keys = tgt_res_cfg->max_num_group_keys;
 	if (tgt_res_cfg->atf_config)
 		WMI_RSRC_CFG_FLAG_ATF_CONFIG_ENABLE_SET(resource_cfg->flag1, 1);
 	if (tgt_res_cfg->mgmt_comp_evt_bundle_support)