From: Srishti Piplani Date: Sun, 16 Sep 2018 14:43:29 +0000 (+0530) Subject: [NEUS7920-477] [9610] wlbt: Support for configuring Latency Mode X-Git-Tag: MMI-QSAS30.62-33-3~842 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=c5097e746656d40099bbf3d4fa5ce0eef61b79ce;p=GitHub%2FMotorolaMobilityLLC%2Fkernel-slsi.git [NEUS7920-477] [9610] wlbt: Support for configuring Latency Mode Host changes to set the latency mode according to the value supplied in the ioctl SET_LATENCY_MODE. Change-Id: Ibc388c8513ae2a622efcc856270ab87082e8bd4e SCSC-Bug-Id: SSB-52771 Signed-off-by: Srishti Piplani --- diff --git a/drivers/net/wireless/scsc/Kconfig b/drivers/net/wireless/scsc/Kconfig index ce055300ece4..1f8719951dba 100755 --- a/drivers/net/wireless/scsc/Kconfig +++ b/drivers/net/wireless/scsc/Kconfig @@ -228,3 +228,10 @@ config SCSC_WLAN_SET_NUM_ANTENNAS default n ---help--- This option tells whether configuring of number of antennas is enabled or not. + +config SCSC_WLAN_LOW_LATENCY_MODE + bool "Support enabling/disabling roaming as per latency mode" + default n + ---help--- + This option tells whether support is provided for enabling + or disabling roaming as per the latency mode. diff --git a/drivers/net/wireless/scsc/ioctl.c b/drivers/net/wireless/scsc/ioctl.c index f1e2b0a89e8c..f90c8dc20479 100755 --- a/drivers/net/wireless/scsc/ioctl.c +++ b/drivers/net/wireless/scsc/ioctl.c @@ -73,6 +73,9 @@ #define CMD_TDLSCHANNELSWITCH "TDLS_CHANNEL_SWITCH" #define CMD_SETROAMOFFLOAD "SETROAMOFFLOAD" #define CMD_SETROAMOFFLAPLIST "SETROAMOFFLAPLIST" +#ifdef CONFIG_SCSC_WLAN_LOW_LATENCY_MODE +#define CMD_SET_LATENCY_MODE "SET_LATENCY_MODE" +#endif #define CMD_SETBAND "SETBAND" #define CMD_GETBAND "GETBAND" @@ -2246,6 +2249,21 @@ static int slsi_get_assoc_reject_info(struct net_device *dev, char *command, int return len; } +#ifdef CONFIG_SCSC_WLAN_LOW_LATENCY_MODE +int slsi_set_latency_mode(struct net_device *dev, char *cmd, int cmd_len) +{ + struct netdev_vif *ndev_vif = netdev_priv(dev); + struct slsi_dev *sdev = ndev_vif->sdev; + bool enable_roaming; + + /* latency_mode =0 (Normal), latency_mode =1 (Low) */ + enable_roaming = (cmd[0] == '0') ? true : false; + SLSI_DBG1(sdev, SLSI_CFG80211, "Setting latency mode %d\n", cmd[0] - '0'); + + return slsi_set_mib_soft_roaming_enabled(sdev, dev, enable_roaming); +} +#endif + int slsi_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { #define MAX_LEN_PRIV_COMMAND 4096 /*This value is the max reply size set in supplicant*/ @@ -2507,6 +2525,11 @@ int slsi_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) ret = slsi_get_sta_info(dev, command, priv_cmd.total_len); } else if (strncasecmp(command, CMD_GETASSOCREJECTINFO, strlen(CMD_GETASSOCREJECTINFO)) == 0) { ret = slsi_get_assoc_reject_info(dev, command, priv_cmd.total_len); +#ifdef CONFIG_SCSC_WLAN_LOW_LATENCY_MODE + } else if (strncasecmp(command, CMD_SET_LATENCY_MODE, strlen(CMD_SET_LATENCY_MODE)) == 0) { + ret = slsi_set_latency_mode(dev, command + strlen(CMD_SET_LATENCY_MODE) + 1, + priv_cmd.total_len - (strlen(CMD_SET_LATENCY_MODE) + 1)); +#endif } else if ((strncasecmp(command, CMD_RXFILTERSTART, strlen(CMD_RXFILTERSTART)) == 0) || (strncasecmp(command, CMD_RXFILTERSTOP, strlen(CMD_RXFILTERSTOP)) == 0) || (strncasecmp(command, CMD_BTCOEXMODE, strlen(CMD_BTCOEXMODE)) == 0) || diff --git a/drivers/net/wireless/scsc/mgt.c b/drivers/net/wireless/scsc/mgt.c index 2b5394cddcf2..0134c6df57dc 100755 --- a/drivers/net/wireless/scsc/mgt.c +++ b/drivers/net/wireless/scsc/mgt.c @@ -4769,6 +4769,25 @@ int slsi_set_mib_rssi_boost(struct slsi_dev *sdev, struct net_device *dev, u16 p return error; } +#ifdef CONFIG_SCSC_WLAN_LOW_LATENCY_MODE +int slsi_set_mib_soft_roaming_enabled(struct slsi_dev *sdev, struct net_device *dev, bool enable) +{ + struct slsi_mib_data mib_data = { 0, NULL }; + int error = SLSI_MIB_STATUS_FAILURE; + + if (slsi_mib_encode_bool(&mib_data, SLSI_PSID_UNIFI_ROAM_SOFT_ROAMING_ENABLED, + enable, 0) == SLSI_MIB_STATUS_SUCCESS) + if (mib_data.dataLength) { + error = slsi_mlme_set(sdev, dev, mib_data.data, mib_data.dataLength); + if (error) + SLSI_ERR(sdev, "Err Setting MIB failed. error = %d\n", error); + kfree(mib_data.data); + } + + return error; +} +#endif + void slsi_modify_ies_on_channel_switch(struct net_device *dev, struct cfg80211_ap_settings *settings, u8 *ds_params_ie, u8 *ht_operation_ie, struct ieee80211_mgmt *mgmt, u16 beacon_ie_head_len) diff --git a/drivers/net/wireless/scsc/mgt.h b/drivers/net/wireless/scsc/mgt.h index 7f4399499626..90f442465991 100755 --- a/drivers/net/wireless/scsc/mgt.h +++ b/drivers/net/wireless/scsc/mgt.h @@ -476,6 +476,9 @@ int slsi_ap_prepare_add_info_ies(struct netdev_vif *ndev_vif, const u8 *ies, siz int slsi_set_mib_roam(struct slsi_dev *dev, struct net_device *ndev, u16 psid, int value); void slsi_reset_throughput_stats(struct net_device *dev); int slsi_set_mib_rssi_boost(struct slsi_dev *sdev, struct net_device *dev, u16 psid, int index, int boost); +#ifdef CONFIG_SCSC_WLAN_LOW_LATENCY_MODE +int slsi_set_mib_soft_roaming_enabled(struct slsi_dev *sdev, struct net_device *dev, bool enable); +#endif void slsi_modify_ies_on_channel_switch(struct net_device *dev, struct cfg80211_ap_settings *settings, u8 *ds_params_ie, u8 *ht_operation_ie, struct ieee80211_mgmt *mgmt, u16 beacon_ie_head_len); diff --git a/drivers/net/wireless/scsc/mib.h b/drivers/net/wireless/scsc/mib.h index d869efe35cc0..864da806cd8f 100755 --- a/drivers/net/wireless/scsc/mib.h +++ b/drivers/net/wireless/scsc/mib.h @@ -7295,6 +7295,9 @@ void slsi_mib_buf_append(struct slsi_mib_data *dst, size_t bufferLength, u8 *buf *******************************************************************************/ #define SLSI_PSID_UNIFI_READ_REG 0x1F73 +/*AUTOGEN TBD*/ +#define SLSI_PSID_UNIFI_ROAM_SOFT_ROAMING_ENABLED 0x0806 + #ifdef __cplusplus } #endif