summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CORE/MAC/inc/sirApi.h2
-rw-r--r--CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c1
-rw-r--r--CORE/SERVICES/WMA/wma.c49
-rw-r--r--CORE/SERVICES/WMA/wma.h5
-rw-r--r--CORE/SME/src/csr/csrApiScan.c2
5 files changed, 42 insertions, 17 deletions
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index fa75e425d33a..17d44c0e1a56 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -863,6 +863,7 @@ typedef struct sSirSmeScanReq
*/
tANI_U32 minChannelTimeBtc; //in units of milliseconds
tANI_U32 maxChannelTimeBtc; //in units of milliseconds
+ tANI_U32 restTime; //in units of milliseconds, ignored when not connected
tANI_U8 returnAfterFirstMatch;
/**
@@ -4510,6 +4511,7 @@ typedef struct sSirScanOffloadReq {
tSirScanType scanType;
tANI_U32 minChannelTime;
tANI_U32 maxChannelTime;
+ tANI_U32 restTime; //in units of milliseconds, ignored when not connected
tSirP2pScanType p2pScanType;
tANI_U16 uIEFieldLen;
tANI_U16 uIEFieldOffset;
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index 75b604d0d090..3777c9b8766f 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -1155,6 +1155,7 @@ static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac,
pScanOffloadReq->scanType = pScanReq->scanType;
pScanOffloadReq->minChannelTime = pScanReq->minChannelTime;
pScanOffloadReq->maxChannelTime = pScanReq->maxChannelTime;
+ pScanOffloadReq->restTime= pScanReq->restTime;
/* for normal scan, the value for p2pScanType should be 0
always */
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 0840e1fd72f1..eadcb3d16052 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -4374,6 +4374,7 @@ bool wma_check_scan_in_progress(WMA_HANDLE handle)
return false;
}
+
/* function : wma_get_buf_start_scan_cmd
* Descriptin :
* Args :
@@ -4442,26 +4443,41 @@ VOS_STATUS wma_get_buf_start_scan_cmd(tp_wma_handle wma_handle,
WMI_SCAN_EVENT_PREEMPTED |
WMI_SCAN_EVENT_RESTARTED;
+ /* CSR sends min and max dwell time values, but expects the firmware
+ * to use only max dwell time value. It does not send separate values
+ * for active and passive. We use the same value for now.
+ * CSR will pass 40 or 110 ms as maxChannelTime value to us.
+ */
cmd->dwell_time_active = scan_req->maxChannelTime;
cmd->dwell_time_passive = scan_req->maxChannelTime;
+ /* Ensure correct number of probes are sent on active channel */
+ cmd->repeat_probe_time = cmd->dwell_time_active / WMA_SCAN_NPROBES_DEFAULT;
+
+ /* CSR sends only one value restTime for staying on home channel
+ * to continue data traffic. Rome fw has facility to monitor the traffic
+ * and move to next channel. Stay on the channel for at least half
+ * of the requested time and then leave if there is no traffic.
+ */
+ cmd->min_rest_time = scan_req->restTime / 2;
+ cmd->max_rest_time = scan_req->restTime;
+
+ /* Check for traffic at idle_time interval after min_rest_time.
+ * Default value is 25 ms to allow full use of max_rest_time
+ * when voice packets are running at 20 ms interval.
+ */
+ cmd->idle_time = WMA_SCAN_IDLE_TIME_DEFAULT;
+
+ /* Large timeout value for full scan cycle, 30 seconds */
cmd->max_scan_time = WMA_HW_DEF_SCAN_MAX_DURATION;
+
cmd->scan_ctrl_flags |= WMI_SCAN_ADD_OFDM_RATES;
- if (scan_req->scanType == eSIR_PASSIVE_SCAN)
- cmd->burst_duration = 0;
- else {
- if (scan_req->channelList.numChannels <
- WMA_BURST_SCAN_MAX_NUM_OFFCHANNELS) {
- cmd->burst_duration =
- scan_req->channelList.numChannels *
- scan_req->maxChannelTime;
- } else {
- cmd->burst_duration =
- WMA_BURST_SCAN_MAX_NUM_OFFCHANNELS *
- scan_req->maxChannelTime;
- }
- }
+ /* Do not combine multiple channels in a single burst. Come back
+ * to home channel for data traffic after every foreign channel.
+ * By default, prefer throughput performance over scan cycle time.
+ */
+ cmd->burst_duration = 0;
if (!scan_req->p2pScanType) {
WMA_LOGD("Normal Scan request");
@@ -4471,7 +4487,6 @@ VOS_STATUS wma_get_buf_start_scan_cmd(tp_wma_handle wma_handle,
if (scan_req->scanType == eSIR_PASSIVE_SCAN)
cmd->scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
cmd->scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
- cmd->repeat_probe_time = scan_req->maxChannelTime/3;
}
else {
WMA_LOGD("P2P Scan");
@@ -4487,6 +4502,10 @@ VOS_STATUS wma_get_buf_start_scan_cmd(tp_wma_handle wma_handle,
WMA_LOGD("P2P_SCAN_TYPE_SEARCH");
cmd->scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
cmd->repeat_probe_time = scan_req->maxChannelTime/3;
+ /* Default P2P burst duration of 120 ms will cover
+ * 3 channels with default max dwell time 40 ms.
+ */
+ cmd->burst_duration = WMA_P2P_SCAN_MAX_BURST_DURATION;
break;
default:
WMA_LOGE("Invalid scan type");
diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h
index ae3cd8fad4c0..c18d3033158f 100644
--- a/CORE/SERVICES/WMA/wma.h
+++ b/CORE/SERVICES/WMA/wma.h
@@ -139,7 +139,10 @@
#define WMA_HW_DEF_SCAN_MAX_DURATION 30000 /* 30 secs */
/* Max offchannel duration */
-#define WMA_BURST_SCAN_MAX_NUM_OFFCHANNELS 5
+#define WMA_BURST_SCAN_MAX_NUM_OFFCHANNELS (5)
+#define WMA_SCAN_NPROBES_DEFAULT (2)
+#define WMA_SCAN_IDLE_TIME_DEFAULT (25)
+#define WMA_P2P_SCAN_MAX_BURST_DURATION (120)
/* Roaming default values
* All time and period values are in milliseconds.
diff --git a/CORE/SME/src/csr/csrApiScan.c b/CORE/SME/src/csr/csrApiScan.c
index 50f28cf64f28..3375810f6493 100644
--- a/CORE/SME/src/csr/csrApiScan.c
+++ b/CORE/SME/src/csr/csrApiScan.c
@@ -5673,7 +5673,7 @@ eHalStatus csrSendMBScanReq( tpAniSirGlobal pMac, tANI_U16 sessionId,
//hidden SSID option
pMsg->hiddenSsid = pScanReqParam->hiddenSsid;
//rest time
- //pMsg->restTime = pScanReq->restTime;
+ pMsg->restTime = pScanReq->restTime;
pMsg->returnAfterFirstMatch = pScanReqParam->bReturnAfter1stMatch;
// All the scan results caching will be done by Roaming
// We do not want LIM to do any caching of scan results,