qcacld-3.0: Make RX wakelock duration configurable
Propagation from qcacld-2.0 Change hard coded RX wakelock duration into an ini configuration item. Only aquire the wakelock for unicast traffic, and if the configured wakelock item is greater than 0. Change-Id: I46b946ddfeae510a5446ff4ab012c09e4964a50c CRs-Fixed: 1068594
This commit is contained in:
4
Kbuild
4
Kbuild
@@ -1479,10 +1479,6 @@ ifeq ($(CONFIG_SMP),y)
|
||||
CDEFINES += -DQCA_CONFIG_SMP
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_WLAN_FEATURE_RX_WAKELOCK), y)
|
||||
CDEFINES += -DWLAN_FEATURE_HOLD_RX_WAKELOCK
|
||||
endif
|
||||
|
||||
#Enable Channel Matrix restriction for all Rome only targets
|
||||
ifneq (y,$(filter y,$(CONFIG_CNSS_EOS) $(CONFIG_ICNSS)))
|
||||
CDEFINES += -DWLAN_ENABLE_CHNL_MATRIX_RESTRICTION
|
||||
|
4
Kconfig
4
Kconfig
@@ -108,10 +108,6 @@ config WLAN_LRO
|
||||
depends on CONFIG_INET_LRO
|
||||
default n
|
||||
|
||||
config WLAN_FEATURE_RX_WAKELOCK
|
||||
bool "Enable RX wake lock feature"
|
||||
default n
|
||||
|
||||
config WLAN_SYNC_TSF
|
||||
bool "Enable QCOM sync multi devices tsf feature"
|
||||
default n
|
||||
|
@@ -3597,6 +3597,29 @@ enum dot11p_mode {
|
||||
#define CFG_CRASH_FW_TIMEOUT_ENABLE (1)
|
||||
#define CFG_CRASH_FW_TIMEOUT_DEFAULT (0)
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* rx_wakelock_timeout - Amount of time to hold wakelock for RX unicast packets
|
||||
* @Min: 0
|
||||
* @Max: 100
|
||||
* @Default: 50
|
||||
*
|
||||
* This ini item configures the amount of time, in milliseconds, that the driver
|
||||
* should prevent system power collapse after receiving an RX unicast packet.
|
||||
* A conigured value of 0 disables the RX Wakelock feature completely.
|
||||
*
|
||||
* Related: None.
|
||||
*
|
||||
* Supported Feature: RX Wakelock
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_RX_WAKELOCK_TIMEOUT_NAME "rx_wakelock_timeout"
|
||||
#define CFG_RX_WAKELOCK_TIMEOUT_DEFAULT (50)
|
||||
#define CFG_RX_WAKELOCK_TIMEOUT_MIN (0)
|
||||
#define CFG_RX_WAKELOCK_TIMEOUT_MAX (100)
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
Type declarations
|
||||
@@ -4269,6 +4292,7 @@ struct hdd_config {
|
||||
bool sta_prefer_80MHz_over_160MHz;
|
||||
uint8_t sap_max_inactivity_override;
|
||||
bool fw_timeout_crash;
|
||||
uint32_t rx_wakelock_timeout;
|
||||
};
|
||||
|
||||
#define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var))
|
||||
|
@@ -219,9 +219,6 @@
|
||||
|
||||
#define WLAN_HDD_PUBLIC_ACTION_TDLS_DISC_RESP 14
|
||||
#define WLAN_HDD_TDLS_ACTION_FRAME 12
|
||||
#ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK
|
||||
#define HDD_WAKE_LOCK_DURATION 50 /* in msecs */
|
||||
#endif
|
||||
|
||||
#define WLAN_HDD_QOS_ACTION_FRAME 1
|
||||
#define WLAN_HDD_QOS_MAP_CONFIGURE 4
|
||||
@@ -1341,10 +1338,7 @@ struct hdd_context_s {
|
||||
/** P2P Device MAC Address for the adapter */
|
||||
struct qdf_mac_addr p2pDeviceAddress;
|
||||
|
||||
#ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK
|
||||
qdf_wake_lock_t rx_wake_lock;
|
||||
#endif
|
||||
|
||||
qdf_wake_lock_t sap_wake_lock;
|
||||
|
||||
#ifdef FEATURE_WLAN_TDLS
|
||||
|
@@ -4048,6 +4048,12 @@ REG_TABLE_ENTRY g_registry_table[] = {
|
||||
CFG_CRASH_FW_TIMEOUT_DEFAULT,
|
||||
CFG_CRASH_FW_TIMEOUT_DISABLE,
|
||||
CFG_CRASH_FW_TIMEOUT_ENABLE),
|
||||
REG_VARIABLE(CFG_RX_WAKELOCK_TIMEOUT_NAME, WLAN_PARAM_Integer,
|
||||
struct hdd_config, rx_wakelock_timeout,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_RX_WAKELOCK_TIMEOUT_DEFAULT,
|
||||
CFG_RX_WAKELOCK_TIMEOUT_MIN,
|
||||
CFG_RX_WAKELOCK_TIMEOUT_MAX)
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -4654,7 +4654,6 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK
|
||||
/**
|
||||
* hdd_rx_wake_lock_destroy() - Destroy RX wakelock
|
||||
* @hdd_ctx: HDD context.
|
||||
@@ -4680,10 +4679,6 @@ static void hdd_rx_wake_lock_create(hdd_context_t *hdd_ctx)
|
||||
{
|
||||
qdf_wake_lock_create(&hdd_ctx->rx_wake_lock, "qcom_rx_wakelock");
|
||||
}
|
||||
#else
|
||||
static void hdd_rx_wake_lock_destroy(hdd_context_t *hdd_ctx) { }
|
||||
static void hdd_rx_wake_lock_create(hdd_context_t *hdd_ctx) { }
|
||||
#endif
|
||||
|
||||
/**
|
||||
* hdd_roc_context_init() - Init ROC context
|
||||
|
@@ -662,13 +662,18 @@ QDF_STATUS hdd_softap_rx_packet_cbk(void *context, qdf_nbuf_t rxBuf)
|
||||
sizeof(qdf_nbuf_data(rxBuf)), QDF_RX));
|
||||
|
||||
skb->protocol = eth_type_trans(skb, skb->dev);
|
||||
#ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK
|
||||
cds_host_diag_log_work(&pHddCtx->rx_wake_lock,
|
||||
HDD_WAKE_LOCK_DURATION,
|
||||
WIFI_POWER_EVENT_WAKELOCK_HOLD_RX);
|
||||
qdf_wake_lock_timeout_acquire(&pHddCtx->rx_wake_lock,
|
||||
HDD_WAKE_LOCK_DURATION);
|
||||
#endif
|
||||
|
||||
/* hold configurable wakelock for unicast traffic */
|
||||
if (pHddCtx->config->rx_wakelock_timeout &&
|
||||
skb->pkt_type != PACKET_BROADCAST &&
|
||||
skb->pkt_type != PACKET_MULTICAST) {
|
||||
cds_host_diag_log_work(&pHddCtx->rx_wake_lock,
|
||||
pHddCtx->config->rx_wakelock_timeout,
|
||||
WIFI_POWER_EVENT_WAKELOCK_HOLD_RX);
|
||||
qdf_wake_lock_timeout_acquire(&pHddCtx->rx_wake_lock,
|
||||
pHddCtx->config->
|
||||
rx_wakelock_timeout);
|
||||
}
|
||||
|
||||
/* Remove SKB from internal tracking table before submitting
|
||||
* it to stack
|
||||
|
@@ -1013,13 +1013,17 @@ QDF_STATUS hdd_rx_packet_cbk(void *context, qdf_nbuf_t rxBuf)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK
|
||||
cds_host_diag_log_work(&pHddCtx->rx_wake_lock,
|
||||
HDD_WAKE_LOCK_DURATION,
|
||||
WIFI_POWER_EVENT_WAKELOCK_HOLD_RX);
|
||||
qdf_wake_lock_timeout_acquire(&pHddCtx->rx_wake_lock,
|
||||
HDD_WAKE_LOCK_DURATION);
|
||||
#endif
|
||||
/* hold configurable wakelock for unicast traffic */
|
||||
if (pHddCtx->config->rx_wakelock_timeout &&
|
||||
skb->pkt_type != PACKET_BROADCAST &&
|
||||
skb->pkt_type != PACKET_MULTICAST) {
|
||||
cds_host_diag_log_work(&pHddCtx->rx_wake_lock,
|
||||
pHddCtx->config->rx_wakelock_timeout,
|
||||
WIFI_POWER_EVENT_WAKELOCK_HOLD_RX);
|
||||
qdf_wake_lock_timeout_acquire(&pHddCtx->rx_wake_lock,
|
||||
pHddCtx->config->
|
||||
rx_wakelock_timeout);
|
||||
}
|
||||
|
||||
/* Remove SKB from internal tracking table before submitting
|
||||
* it to stack
|
||||
|
Reference in New Issue
Block a user