Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9756f6f9 authored by Linux Build Service Account's avatar Linux Build Service Account
Browse files

Merge a5cce07a on remote branch

Change-Id: I2ea23f5b6d5d6ce0d09402e534c1c6fec9712452
parents 976c122a a5cce07a
Loading
Loading
Loading
Loading
+91 −91
Original line number Original line Diff line number Diff line
@@ -894,6 +894,74 @@ int8_t mlme_get_max_reg_power(struct wlan_objmgr_vdev *vdev)
	return vdev_mlme->mgmt.generic.maxregpower;
	return vdev_mlme->mgmt.generic.maxregpower;
}
}


/**
 * mlme_get_vdev_types() - get vdev type and subtype from its operation mode
 * @mode: operation mode of vdev
 * @type: type of vdev
 * @sub_type: sub_type of vdev
 *
 * This API is called to get vdev type and subtype from its operation mode.
 * Vdev operation modes are defined in enum QDF_OPMODE.
 *
 * Type of vdev are WLAN_VDEV_MLME_TYPE_AP, WLAN_VDEV_MLME_TYPE_STA,
 * WLAN_VDEV_MLME_TYPE_IBSS, ,WLAN_VDEV_MLME_TYPE_MONITOR,
 * WLAN_VDEV_MLME_TYPE_NAN, WLAN_VDEV_MLME_TYPE_OCB, WLAN_VDEV_MLME_TYPE_NDI
 *
 * Sub_types of vdev are WLAN_VDEV_MLME_SUBTYPE_P2P_DEVICE,
 * WLAN_VDEV_MLME_SUBTYPE_P2P_CLIENT, WLAN_VDEV_MLME_SUBTYPE_P2P_GO,
 * WLAN_VDEV_MLME_SUBTYPE_PROXY_STA, WLAN_VDEV_MLME_SUBTYPE_MESH
 * Return: QDF_STATUS
 */

static QDF_STATUS mlme_get_vdev_types(enum QDF_OPMODE mode, uint8_t *type,
				      uint8_t *sub_type)
{
	QDF_STATUS status = QDF_STATUS_SUCCESS;
	*type = 0;
	*sub_type = 0;

	switch (mode) {
	case QDF_STA_MODE:
		*type = WLAN_VDEV_MLME_TYPE_STA;
		break;
	case QDF_SAP_MODE:
		*type = WLAN_VDEV_MLME_TYPE_AP;
		break;
	case QDF_P2P_DEVICE_MODE:
		*type = WLAN_VDEV_MLME_TYPE_AP;
		*sub_type = WLAN_VDEV_MLME_SUBTYPE_P2P_DEVICE;
		break;
	case QDF_P2P_CLIENT_MODE:
		*type = WLAN_VDEV_MLME_TYPE_STA;
		*sub_type = WLAN_VDEV_MLME_SUBTYPE_P2P_CLIENT;
		break;
	case QDF_P2P_GO_MODE:
		*type = WLAN_VDEV_MLME_TYPE_AP;
		*sub_type = WLAN_VDEV_MLME_SUBTYPE_P2P_GO;
		break;
	case QDF_OCB_MODE:
		*type = WLAN_VDEV_MLME_TYPE_OCB;
		break;
	case QDF_IBSS_MODE:
		*type = WLAN_VDEV_MLME_TYPE_IBSS;
		break;
	case QDF_MONITOR_MODE:
		*type = WMI_HOST_VDEV_TYPE_MONITOR;
		break;
	case QDF_NDI_MODE:
		*type = WLAN_VDEV_MLME_TYPE_NDI;
		break;
	case QDF_NAN_DISC_MODE:
		*type = WLAN_VDEV_MLME_TYPE_NAN;
		break;
	default:
		mlme_err("Invalid device mode %d", mode);
		status = QDF_STATUS_E_INVAL;
		break;
	}
	return status;
}

/**
/**
 * vdevmgr_mlme_ext_hdl_create () - Create mlme legacy priv object
 * vdevmgr_mlme_ext_hdl_create () - Create mlme legacy priv object
 * @vdev_mlme: vdev mlme object
 * @vdev_mlme: vdev mlme object
@@ -903,6 +971,8 @@ int8_t mlme_get_max_reg_power(struct wlan_objmgr_vdev *vdev)
static
static
QDF_STATUS vdevmgr_mlme_ext_hdl_create(struct vdev_mlme_obj *vdev_mlme)
QDF_STATUS vdevmgr_mlme_ext_hdl_create(struct vdev_mlme_obj *vdev_mlme)
{
{
	QDF_STATUS status;

	mlme_legacy_debug("vdev id = %d ",
	mlme_legacy_debug("vdev id = %d ",
			  vdev_mlme->vdev->vdev_objmgr.vdev_id);
			  vdev_mlme->vdev->vdev_objmgr.vdev_id);
	vdev_mlme->ext_vdev_ptr =
	vdev_mlme->ext_vdev_ptr =
@@ -912,7 +982,26 @@ QDF_STATUS vdevmgr_mlme_ext_hdl_create(struct vdev_mlme_obj *vdev_mlme)
		return QDF_STATUS_E_NOMEM;
		return QDF_STATUS_E_NOMEM;
	}
	}


	return QDF_STATUS_SUCCESS;
	sme_get_vdev_type_nss(wlan_vdev_mlme_get_opmode(vdev_mlme->vdev),
			      &vdev_mlme->proto.generic.nss_2g,
			      &vdev_mlme->proto.generic.nss_5g);

	status = mlme_get_vdev_types(wlan_vdev_mlme_get_opmode(vdev_mlme->vdev),
				     &vdev_mlme->mgmt.generic.type,
				     &vdev_mlme->mgmt.generic.subtype);
	if (QDF_IS_STATUS_ERROR(status)) {
		mlme_err("Get vdev type failed; status:%d", status);
		return status;
	}

	status = vdev_mgr_create_send(vdev_mlme);
	if (QDF_IS_STATUS_ERROR(status)) {
		mlme_err("Failed to create vdev for vdev id %d",
			 wlan_vdev_get_id(vdev_mlme->vdev));
		return status;
	}

	return status;
}
}


/**
/**
@@ -1186,99 +1275,10 @@ QDF_STATUS mlme_vdev_self_peer_create(struct wlan_objmgr_vdev *vdev)
	return wma_vdev_self_peer_create(vdev_mlme);
	return wma_vdev_self_peer_create(vdev_mlme);
}
}


/**
 * mlme_get_vdev_types() - get vdev type and subtype from its operation mode
 * @mode: operation mode of vdev
 * @type: type of vdev
 * @sub_type: sub_type of vdev
 *
 * This API is called to get vdev type and subtype from its operation mode.
 * Vdev operation modes are defined in enum QDF_OPMODE.
 *
 * Type of vdev are WLAN_VDEV_MLME_TYPE_AP, WLAN_VDEV_MLME_TYPE_STA,
 * WLAN_VDEV_MLME_TYPE_IBSS, ,WLAN_VDEV_MLME_TYPE_MONITOR,
 * WLAN_VDEV_MLME_TYPE_NAN, WLAN_VDEV_MLME_TYPE_OCB, WLAN_VDEV_MLME_TYPE_NDI
 *
 * Sub_types of vdev are WLAN_VDEV_MLME_SUBTYPE_P2P_DEVICE,
 * WLAN_VDEV_MLME_SUBTYPE_P2P_CLIENT, WLAN_VDEV_MLME_SUBTYPE_P2P_GO,
 * WLAN_VDEV_MLME_SUBTYPE_PROXY_STA, WLAN_VDEV_MLME_SUBTYPE_MESH
 * Return: QDF_STATUS
 */

static QDF_STATUS mlme_get_vdev_types(enum QDF_OPMODE mode, uint8_t *type,
				      uint8_t *sub_type)
{
	QDF_STATUS status = QDF_STATUS_SUCCESS;
	*type = 0;
	*sub_type = 0;

	switch (mode) {
	case QDF_STA_MODE:
		*type = WLAN_VDEV_MLME_TYPE_STA;
		break;
	case QDF_SAP_MODE:
		*type = WLAN_VDEV_MLME_TYPE_AP;
		break;
	case QDF_P2P_DEVICE_MODE:
		*type = WLAN_VDEV_MLME_TYPE_AP;
		*sub_type = WLAN_VDEV_MLME_SUBTYPE_P2P_DEVICE;
		break;
	case QDF_P2P_CLIENT_MODE:
		*type = WLAN_VDEV_MLME_TYPE_STA;
		*sub_type = WLAN_VDEV_MLME_SUBTYPE_P2P_CLIENT;
		break;
	case QDF_P2P_GO_MODE:
		*type = WLAN_VDEV_MLME_TYPE_AP;
		*sub_type = WLAN_VDEV_MLME_SUBTYPE_P2P_GO;
		break;
	case QDF_OCB_MODE:
		*type = WLAN_VDEV_MLME_TYPE_OCB;
		break;
	case QDF_IBSS_MODE:
		*type = WLAN_VDEV_MLME_TYPE_IBSS;
		break;
	case QDF_MONITOR_MODE:
		*type = WMI_HOST_VDEV_TYPE_MONITOR;
		break;
	case QDF_NDI_MODE:
		*type = WLAN_VDEV_MLME_TYPE_NDI;
		break;
	case QDF_NAN_DISC_MODE:
		*type = WLAN_VDEV_MLME_TYPE_NAN;
		break;
	default:
		mlme_err("Invalid device mode %d", mode);
		status = QDF_STATUS_E_INVAL;
		break;
	}
	return status;
}

static
static
QDF_STATUS vdevmgr_mlme_ext_post_hdl_create(struct vdev_mlme_obj *vdev_mlme)
QDF_STATUS vdevmgr_mlme_ext_post_hdl_create(struct vdev_mlme_obj *vdev_mlme)
{
{
	QDF_STATUS status;
	return QDF_STATUS_SUCCESS;

	sme_get_vdev_type_nss(wlan_vdev_mlme_get_opmode(vdev_mlme->vdev),
			      &vdev_mlme->proto.generic.nss_2g,
			      &vdev_mlme->proto.generic.nss_5g);

	status = mlme_get_vdev_types(wlan_vdev_mlme_get_opmode(vdev_mlme->vdev),
				     &vdev_mlme->mgmt.generic.type,
				     &vdev_mlme->mgmt.generic.subtype);
	if (QDF_IS_STATUS_ERROR(status)) {
		mlme_err("Get vdev type failed; status:%d", status);
		return status;
	}

	status = vdev_mgr_create_send(vdev_mlme);
	if (QDF_IS_STATUS_ERROR(status)) {
		mlme_err("Failed to create vdev for vdev id %d",
			 wlan_vdev_get_id(vdev_mlme->vdev));
		return status;
	}

	return status;
}
}


/**
/**
+2 −0
Original line number Original line Diff line number Diff line
@@ -184,6 +184,8 @@ static void wlan_pmo_init_cfg(struct wlan_objmgr_psoc *psoc,
	psoc_cfg->sta_mod_dtim = cfg_get(psoc, CFG_PMO_ENABLE_MODULATED_DTIM);
	psoc_cfg->sta_mod_dtim = cfg_get(psoc, CFG_PMO_ENABLE_MODULATED_DTIM);
	psoc_cfg->enable_mc_list = cfg_get(psoc, CFG_PMO_MC_ADDR_LIST_ENABLE);
	psoc_cfg->enable_mc_list = cfg_get(psoc, CFG_PMO_MC_ADDR_LIST_ENABLE);
	psoc_cfg->power_save_mode = cfg_get(psoc, CFG_PMO_POWERSAVE_MODE);
	psoc_cfg->power_save_mode = cfg_get(psoc, CFG_PMO_POWERSAVE_MODE);
	psoc_cfg->is_mod_dtim_on_sys_suspend_enabled =
			cfg_get(psoc, CFG_PMO_MOD_DTIM_ON_SYS_SUSPEND);
	psoc_cfg->max_ps_poll = cfg_get(psoc, CFG_PMO_MAX_PS_POLL);
	psoc_cfg->max_ps_poll = cfg_get(psoc, CFG_PMO_MAX_PS_POLL);


	psoc_cfg->wow_enable = cfg_get(psoc, CFG_PMO_WOW_ENABLE);
	psoc_cfg->wow_enable = cfg_get(psoc, CFG_PMO_WOW_ENABLE);
+20 −2
Original line number Original line Diff line number Diff line
@@ -730,16 +730,19 @@ QDF_STATUS pmo_core_psoc_user_space_resume_req(struct wlan_objmgr_psoc *psoc,
 * @psoc: objmgr psoc handle
 * @psoc: objmgr psoc handle
 * @psoc_ctx: pmo psoc private ctx
 * @psoc_ctx: pmo psoc private ctx
 * @wow_params: collection of wow enable override parameters
 * @wow_params: collection of wow enable override parameters
 * @type: type of wow suspend
 *
 *
 * Return: QDF status
 * Return: QDF status
 */
 */
static QDF_STATUS
static QDF_STATUS
pmo_core_enable_wow_in_fw(struct wlan_objmgr_psoc *psoc,
pmo_core_enable_wow_in_fw(struct wlan_objmgr_psoc *psoc,
			  struct pmo_psoc_priv_obj *psoc_ctx,
			  struct pmo_psoc_priv_obj *psoc_ctx,
			  struct pmo_wow_enable_params *wow_params)
			  struct pmo_wow_enable_params *wow_params,
			  enum qdf_suspend_type type)
{
{
	int host_credits, wmi_pending_cmds;
	int host_credits, wmi_pending_cmds;
	struct pmo_wow_cmd_params param = {0};
	struct pmo_wow_cmd_params param = {0};
	struct pmo_psoc_cfg *psoc_cfg = &psoc_ctx->psoc_cfg;
	QDF_STATUS status;
	QDF_STATUS status;


	pmo_enter();
	pmo_enter();
@@ -810,6 +813,19 @@ pmo_core_enable_wow_in_fw(struct wlan_objmgr_psoc *psoc,
		pmo_info("Prevent link down, non-drv wow is enabled");
		pmo_info("Prevent link down, non-drv wow is enabled");
	}
	}


	if (type == QDF_SYSTEM_SUSPEND) {
		pmo_info("system suspend wow");
		param.flags |= WMI_WOW_FLAG_SYSTEM_SUSPEND_WOW;
	} else {
		pmo_info("RTPM wow");
	}

	if ((psoc_cfg) &&
	    (psoc_cfg->is_mod_dtim_on_sys_suspend_enabled)) {
		pmo_info("mod DTIM enabled");
		param.flags |= WMI_WOW_FLAG_MOD_DTIM_ON_SYS_SUSPEND;
	}

	status = pmo_tgt_psoc_send_wow_enable_req(psoc, &param);
	status = pmo_tgt_psoc_send_wow_enable_req(psoc, &param);
	if (status != QDF_STATUS_SUCCESS) {
	if (status != QDF_STATUS_SUCCESS) {
		pmo_err("Failed to enable wow in fw");
		pmo_err("Failed to enable wow in fw");
@@ -927,7 +943,9 @@ QDF_STATUS pmo_core_psoc_bus_suspend_req(struct wlan_objmgr_psoc *psoc,


	begin = qdf_get_log_timestamp_usecs();
	begin = qdf_get_log_timestamp_usecs();
	if (wow_mode_selected)
	if (wow_mode_selected)
		status = pmo_core_enable_wow_in_fw(psoc, psoc_ctx, wow_params);
		status = pmo_core_enable_wow_in_fw(psoc, psoc_ctx,
						   wow_params,
						   type);
	else
	else
		status = pmo_core_psoc_suspend_target(psoc, 0);
		status = pmo_core_psoc_suspend_target(psoc, 0);
	end = qdf_get_log_timestamp_usecs();
	end = qdf_get_log_timestamp_usecs();
+30 −1
Original line number Original line Diff line number Diff line
@@ -219,6 +219,34 @@
	CFG_VALUE_OR_DEFAULT, \
	CFG_VALUE_OR_DEFAULT, \
	"Optimized Power Management")
	"Optimized Power Management")


/*
 * <ini>
 * enable_mod_dtim_on_system_suspend - enable modulated DTIM
 * on system suspend display off case
 * @Min: 0
 * @Max: 1
 * @Default: 0
 *
 * This ini is used to set modulated DTIM configuration:
 * Current values of enable_mod_dtim_on_system_suspend:
 * 0 -> Modulated DTIM will be enabled for every wow entry
 *      (RTPM wow + System suspend wow)
 * 1 -> Enable modulated  DTIM only for System suspend wow.
 *      For RTPM wow, the device will stay in DTIM 1 (non-modulated DTIM)
 *
 * Related: None
 *
 * Supported Feature: Modulated DTIM
 *
 * Usage: External
 *
 * </ini>
 */
#define CFG_PMO_MOD_DTIM_ON_SYS_SUSPEND CFG_INI_BOOL( \
	"enable_mod_dtim_on_system_suspend", \
	0, \
	"Modulated DTIM on System suspend wow")

/*
/*
 * <ini>
 * <ini>
 * gMaxPsPoll - Max powersave poll
 * gMaxPsPoll - Max powersave poll
@@ -433,6 +461,7 @@
	CFG(CFG_PMO_ACTIVE_MODE) \
	CFG(CFG_PMO_ACTIVE_MODE) \
	CFG(CFG_PMO_PWR_FAILURE) \
	CFG(CFG_PMO_PWR_FAILURE) \
	CFG(CFG_PMO_WOW_DATA_INACTIVITY_TIMEOUT) \
	CFG(CFG_PMO_WOW_DATA_INACTIVITY_TIMEOUT) \
	CFG(CFG_RA_RATE_LIMIT_INTERVAL)
	CFG(CFG_RA_RATE_LIMIT_INTERVAL) \
	CFG(CFG_PMO_MOD_DTIM_ON_SYS_SUSPEND)


#endif /* WLAN_PMO_COMMON_CFG_H__ */
#endif /* WLAN_PMO_COMMON_CFG_H__ */
+3 −0
Original line number Original line Diff line number Diff line
@@ -303,6 +303,8 @@ enum active_apf_mode {
 * @active_mc_bc_apf_mode: Setting that determines how APF is applied in
 * @active_mc_bc_apf_mode: Setting that determines how APF is applied in
 *	active mode for MC/BC packets
 *	active mode for MC/BC packets
 * @ito_repeat_count: Indicates ito repeated count
 * @ito_repeat_count: Indicates ito repeated count
 * @is_mod_dtim_on_sys_suspend_enabled: true when mod dtim is enabled for
 * system suspend wow else false
 */
 */
struct pmo_psoc_cfg {
struct pmo_psoc_cfg {
	bool ptrn_match_enable_all_vdev;
	bool ptrn_match_enable_all_vdev;
@@ -365,6 +367,7 @@ struct pmo_psoc_cfg {
	enum active_apf_mode active_uc_apf_mode;
	enum active_apf_mode active_uc_apf_mode;
	enum active_apf_mode active_mc_bc_apf_mode;
	enum active_apf_mode active_mc_bc_apf_mode;
	uint8_t ito_repeat_count;
	uint8_t ito_repeat_count;
	bool is_mod_dtim_on_sys_suspend_enabled;
};
};


/**
/**
Loading