diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 07f28b07388b..7c512b989a42 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -5798,6 +5798,29 @@ enum hdd_link_speed_rpt_type { #define CFG_RATE_FOR_TX_MGMT_5G_MAX (WNI_CFG_RATE_FOR_TX_MGMT_5G_STAMAX) #define CFG_RATE_FOR_TX_MGMT_5G_DEFAULT (WNI_CFG_RATE_FOR_TX_MGMT_5G_STADEF) +/* + * + * gPreventLinkDown - Enable to prevent bus link from going down + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * Enable to prevent bus link from going down. Useful for platforms that do not + * (yet) support link down suspend cases. + * + * Related: N/A + * + * Supported Feature: Suspend/Resume + * + * Usage: Internal + * + * + */ +#define CFG_PREVENT_LINK_DOWN_NAME "gPreventLinkDown" +#define CFG_PREVENT_LINK_DOWN_MIN (0) +#define CFG_PREVENT_LINK_DOWN_MAX (1) +#define CFG_PREVENT_LINK_DOWN_DEFAULT (0) + #ifdef FEATURE_WLAN_TDLS /* * @@ -10848,6 +10871,7 @@ struct hdd_config { uint8_t enable_tx_ldpc; uint8_t enable_rx_ldpc; bool enable5gEBT; + bool prevent_link_down; #ifdef FEATURE_WLAN_TDLS bool fEnableTDLSSupport; bool fEnableTDLSImplicitTrigger; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 6e69b7206480..0a29fc058c43 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -2197,6 +2197,13 @@ struct reg_table_entry g_registry_table[] = { CFG_PPS_ENABLE_5G_EBT_FEATURE_MIN, CFG_PPS_ENABLE_5G_EBT_FEATURE_MAX), + REG_VARIABLE(CFG_PREVENT_LINK_DOWN_NAME, WLAN_PARAM_Integer, + struct hdd_config, prevent_link_down, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_PREVENT_LINK_DOWN_DEFAULT, + CFG_PREVENT_LINK_DOWN_MIN, + CFG_PREVENT_LINK_DOWN_MAX), + #ifdef FEATURE_WLAN_TDLS REG_VARIABLE(CFG_TDLS_SUPPORT_ENABLE, WLAN_PARAM_Integer, struct hdd_config, fEnableTDLSSupport, diff --git a/core/hdd/src/wlan_hdd_driver_ops.c b/core/hdd/src/wlan_hdd_driver_ops.c index 0dc6b35b9d3d..8b657b77ac51 100644 --- a/core/hdd/src/wlan_hdd_driver_ops.c +++ b/core/hdd/src/wlan_hdd_driver_ops.c @@ -230,6 +230,9 @@ int hdd_hif_open(struct device *dev, void *bdev, const struct hif_bus_id *bid, goto err_hif_close; } + if (hdd_ctx->config->prevent_link_down) + hif_vote_link_up(hif_ctx); + status = hif_enable(hif_ctx, dev, bdev, bid, bus_type, (reinit == true) ? HIF_ENABLE_TYPE_REINIT : HIF_ENABLE_TYPE_PROBE);