xref: /wlan-driver/qcacld-3.0/core/sme/inc/sme_rrm_internal.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2011-2012, 2014-2018, 2020 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name #if !defined(__SMERRMINTERNAL_H)
21*5113495bSYour Name #define __SMERRMINTERNAL_H
22*5113495bSYour Name 
23*5113495bSYour Name /**
24*5113495bSYour Name  * \file  sme_rrm_internal.h
25*5113495bSYour Name  *
26*5113495bSYour Name  * \brief prototype for SME RRM APIs
27*5113495bSYour Name  */
28*5113495bSYour Name 
29*5113495bSYour Name /*--------------------------------------------------------------------------
30*5113495bSYour Name   Include Files
31*5113495bSYour Name   ------------------------------------------------------------------------*/
32*5113495bSYour Name #include "qdf_lock.h"
33*5113495bSYour Name #include "qdf_trace.h"
34*5113495bSYour Name #include "qdf_mem.h"
35*5113495bSYour Name #include "qdf_types.h"
36*5113495bSYour Name #include "rrm_global.h"
37*5113495bSYour Name 
38*5113495bSYour Name /*--------------------------------------------------------------------------
39*5113495bSYour Name   Type declarations
40*5113495bSYour Name   ------------------------------------------------------------------------*/
41*5113495bSYour Name typedef struct sRrmNeighborReportDesc {
42*5113495bSYour Name 	tListElem List;
43*5113495bSYour Name 	tSirNeighborBssDescription *pNeighborBssDescription;
44*5113495bSYour Name 	uint32_t roamScore;
45*5113495bSYour Name 	uint8_t sessionId;
46*5113495bSYour Name } tRrmNeighborReportDesc, *tpRrmNeighborReportDesc;
47*5113495bSYour Name 
48*5113495bSYour Name typedef void (*NeighborReportRspCallback)(void *context,
49*5113495bSYour Name 		QDF_STATUS qdf_status);
50*5113495bSYour Name 
51*5113495bSYour Name typedef struct sRrmNeighborRspCallbackInfo {
52*5113495bSYour Name 	uint32_t timeout;       /* in ms.. min value is 10 (10ms) */
53*5113495bSYour Name 	NeighborReportRspCallback neighborRspCallback;
54*5113495bSYour Name 	void *neighborRspCallbackContext;
55*5113495bSYour Name } tRrmNeighborRspCallbackInfo, *tpRrmNeighborRspCallbackInfo;
56*5113495bSYour Name 
57*5113495bSYour Name typedef struct sRrmNeighborRequestControlInfo {
58*5113495bSYour Name 	/* To check whether a neighbor req is already sent & response pending */
59*5113495bSYour Name 	bool isNeighborRspPending;
60*5113495bSYour Name 	qdf_mc_timer_t neighborRspWaitTimer;
61*5113495bSYour Name 	tRrmNeighborRspCallbackInfo neighborRspCallbackInfo;
62*5113495bSYour Name } tRrmNeighborRequestControlInfo, *tpRrmNeighborRequestControlInfo;
63*5113495bSYour Name 
64*5113495bSYour Name /**
65*5113495bSYour Name  * enum rrm_measurement_type: measurement type
66*5113495bSYour Name  * @RRM_CHANNEL_LOAD: measurement type for channel load req
67*5113495bSYour Name  * @RRM_BEACON_REPORT: measurement type for beacon report request
68*5113495bSYour Name  */
69*5113495bSYour Name enum rrm_measurement_type {
70*5113495bSYour Name 	RRM_CHANNEL_LOAD = 0,
71*5113495bSYour Name 	RRM_BEACON_REPORT = 1,
72*5113495bSYour Name };
73*5113495bSYour Name 
74*5113495bSYour Name /**
75*5113495bSYour Name  * enum channel_load_req_info: channel load request info
76*5113495bSYour Name  * @channel: channel for which the host receives the channel load req from AP
77*5113495bSYour Name  * @req_chan_width: channel width for which the host receives the channel load
78*5113495bSYour Name  * req from AP
79*5113495bSYour Name  * @rrm_scan_tsf: to store jiffies for RRM scan to process chan load req
80*5113495bSYour Name  * @bw_ind: Contains info for Bandwidth Indication IE
81*5113495bSYour Name  * @wide_bw: Contains info for Wide Bandwidth Channel IE
82*5113495bSYour Name  */
83*5113495bSYour Name struct channel_load_req_info {
84*5113495bSYour Name 	uint8_t channel;
85*5113495bSYour Name 	qdf_freq_t req_freq;
86*5113495bSYour Name 	enum phy_ch_width req_chan_width;
87*5113495bSYour Name 	qdf_time_t rrm_scan_tsf;
88*5113495bSYour Name 	struct bw_ind_element bw_ind;
89*5113495bSYour Name 	struct wide_bw_chan_switch wide_bw;
90*5113495bSYour Name };
91*5113495bSYour Name 
92*5113495bSYour Name typedef struct sRrmSMEContext {
93*5113495bSYour Name 	uint16_t token;
94*5113495bSYour Name 	struct qdf_mac_addr sessionBssId;
95*5113495bSYour Name 	uint8_t regClass;
96*5113495bSYour Name 	uint8_t measurement_idx;
97*5113495bSYour Name 	enum rrm_measurement_type measurement_type;
98*5113495bSYour Name 	struct channel_load_req_info chan_load_req_info;
99*5113495bSYour Name 	/* list of all channels to be measured. */
100*5113495bSYour Name 	tCsrChannelInfo channelList;
101*5113495bSYour Name 	uint8_t currentIndex;
102*5113495bSYour Name 	/* SSID used in the measuring beacon report. */
103*5113495bSYour Name 	tAniSSID ssId;
104*5113495bSYour Name 	tSirMacAddr bssId;      /* bssid used for beacon report measurement. */
105*5113495bSYour Name 	/* Randomization interval to be used in subsequent measurements. */
106*5113495bSYour Name 	uint16_t randnIntvl;
107*5113495bSYour Name 	uint16_t duration[SIR_ESE_MAX_MEAS_IE_REQS];
108*5113495bSYour Name 	uint8_t measMode[SIR_ESE_MAX_MEAS_IE_REQS];
109*5113495bSYour Name 	uint32_t scan_id;
110*5113495bSYour Name 	tDblLinkList neighborReportCache;
111*5113495bSYour Name 	tRrmNeighborRequestControlInfo neighborReqControlInfo;
112*5113495bSYour Name 
113*5113495bSYour Name #ifdef FEATURE_WLAN_ESE
114*5113495bSYour Name 	tCsrEseBeaconReq eseBcnReqInfo;
115*5113495bSYour Name 	bool eseBcnReqInProgress;
116*5113495bSYour Name #endif /* FEATURE_WLAN_ESE */
117*5113495bSYour Name 	tRrmMsgReqSource msgSource;
118*5113495bSYour Name 	wlan_scan_requester req_id;
119*5113495bSYour Name } tRrmSMEContext, *tpRrmSMEContext;
120*5113495bSYour Name 
121*5113495bSYour Name typedef struct sRrmNeighborReq {
122*5113495bSYour Name 	uint8_t no_ssid;
123*5113495bSYour Name 	tSirMacSSid ssid;
124*5113495bSYour Name 	bool neighbor_report_offload;
125*5113495bSYour Name } tRrmNeighborReq, *tpRrmNeighborReq;
126*5113495bSYour Name 
127*5113495bSYour Name /**
128*5113495bSYour Name  * sme_rrm_issue_scan_req() - To issue rrm scan request
129*5113495bSYour Name  * @mac_ctx: pointer to mac context
130*5113495bSYour Name  *
131*5113495bSYour Name  * This routine is called to issue rrm scan request
132*5113495bSYour Name  *
133*5113495bSYour Name  * Return: QDF_STATUS
134*5113495bSYour Name  */
135*5113495bSYour Name QDF_STATUS sme_rrm_issue_scan_req(struct mac_context *mac_ctx, uint8_t idx);
136*5113495bSYour Name 
137*5113495bSYour Name #endif /* #if !defined( __SMERRMINTERNAL_H ) */
138