#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"
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*/
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) ||
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)
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);