1 /*
2  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 /**
18  * DOC: contains ll_lt_sap structure definitions specific to the bearer
19  * switch and channel selection functionalities
20  */
21 
22 #ifndef _WLAN_LL_SAP_PUBLIC_STRUCTS_H_
23 #define _WLAN_LL_SAP_PUBLIC_STRUCTS_H_
24 
25 #include "wlan_objmgr_psoc_obj.h"
26 #include <qdf_status.h>
27 
28 /* Indicates MAX bearer switch requesters at a time */
29 #define MAX_BEARER_SWITCH_REQUESTERS 5
30 #define BS_REQ_ID_INVALID 0xFFFFFFFF
31 typedef uint32_t wlan_bs_req_id;
32 
33 /**
34  * enum bearer_switch_req_type: Bearer switch request type
35  * @WLAN_BS_REQ_TO_NON_WLAN: Bearer switch request to non-wlan
36  * @WLAN_BS_REQ_TO_WLAN: Bearer switch request to wlan
37  * @WLAN_BS_REQ_INVALID: Invalid bearer switch request
38  */
39 enum bearer_switch_req_type {
40 	WLAN_BS_REQ_TO_NON_WLAN = 0,
41 	WLAN_BS_REQ_TO_WLAN = 1,
42 	WLAN_BS_REQ_INVALID,
43 };
44 
45 /**
46  * enum bearer_switch_status: Bearer switch status
47  * @WLAN_BS_STATUS_REJECTED: Bearer switch request rejected
48  * @WLAN_BS_STATUS_COMPLETED: Bearer switch request completed
49  * @WLAN_BS_STATUS_INVALID: Invalid bearer switch request
50  * @WLAN_BS_STATUS_TIMEOUT: Bearer switch request timedout
51  */
52 enum bearer_switch_status {
53 	WLAN_BS_STATUS_REJECTED = 0,
54 	WLAN_BS_STATUS_COMPLETED = 1,
55 	WLAN_BS_STATUS_TIMEOUT = 2,
56 	WLAN_BS_STATUS_INVALID,
57 };
58 
59 /**
60  * enum bearer_switch_req_source: Bearer switch requester source
61  * @BEARER_SWITCH_REQ_CONNECT: Bearer switch requester is connect
62  * @BEARER_SWITCH_REQ_CSA: Bearer switch requester is CSA
63  * @BEARER_SWITCH_REQ_FW: Bearer switch requester is FW
64  * @BEARER_SWITCH_REQ_MAX: Indicates MAX bearer switch requester
65  */
66 enum bearer_switch_req_source {
67 	BEARER_SWITCH_REQ_CONNECT,
68 	BEARER_SWITCH_REQ_CSA,
69 	BEARER_SWITCH_REQ_FW,
70 	BEARER_SWITCH_REQ_MAX,
71 };
72 
73 /**
74  * struct wlan_ll_lt_sap_mac_freq: LL_LT_SAP mac frequency
75  * @freq_5GHz_low: Low 5GHz frequency
76  * @freq_5GHz_high: High 5GHz frequency
77  * @freq_6GHz: 6GHz frequency
78  * @weight_5GHz_low: Weight of 5GHz low frequency
79  * @weight_5GHz_high: Weight of 5GHz high frequency
80  * @weight_6GHz: Weight of 6GHz frequency
81  */
82 struct wlan_ll_lt_sap_mac_freq {
83 	qdf_freq_t freq_5GHz_low;
84 	qdf_freq_t freq_5GHz_high;
85 	qdf_freq_t freq_6GHz;
86 	uint32_t weight_5GHz_low;
87 	uint32_t weight_5GHz_high;
88 	uint32_t weight_6GHz;
89 };
90 
91 /**
92  * struct wlan_ll_lt_sap_freq_list: LL_LT_SAP frequency list structure
93  * @standalone_mac: Select frequency from mac which doesn't have any
94  * concurrent interface present.
95  * @shared_mac: Select frequency from mac which has one concurrent
96  * interface present.
97  * @best_freq: Best freq present in ACS final list. This freq can be
98  * use to bring LL_LT_SAP if none of the above channels are present
99  * @prev_freq: Previous/current freq on which LL_LT_SAP is present.
100  * This will be use to avoid SCC channel selection while updating this
101  * list. This freq should be filled by user.
102  * @weight_best_freq: Weight of best frequency
103  */
104 struct wlan_ll_lt_sap_freq_list {
105 	struct wlan_ll_lt_sap_mac_freq standalone_mac;
106 	struct wlan_ll_lt_sap_mac_freq shared_mac;
107 	qdf_freq_t best_freq;
108 	qdf_freq_t prev_freq;
109 	uint32_t weight_best_freq;
110 };
111 
112 /**
113  * typedef bearer_switch_requester_cb() - Callback function, which will
114  * be invoked with the bearer switch request status.
115  * @psoc: Psoc pointer
116  * @vdev_id: vdev id of the requester
117  * @request_id: Request ID
118  * @status: Status of the bearer switch request
119  * @req_value: Request value for the bearer switch request
120  * @request_params: Request params for the bearer switch request
121  *
122  * Return: None
123  */
124 typedef void (*bearer_switch_requester_cb)(struct wlan_objmgr_psoc *psoc,
125 					   uint8_t vdev_id,
126 					   wlan_bs_req_id request_id,
127 					   QDF_STATUS status,
128 					   uint32_t req_value,
129 					   void *request_params);
130 
131 /**
132  * struct wlan_bearer_switch_request - Data structure to store the bearer switch
133  * request
134  * @vdev_id: Vdev id of the requester
135  * @request_id: Unique value to identify the request
136  * @req_type: Type of the request,  bearer switch to wlan or bearer switch
137  * to non-wlan
138  * @source: Bearer switch request source
139  * @requester_cb: Callback which needs to be invoked to indicate the status of
140  * the request to the requester, this callback will be passed by the requester
141  * when requester will send the request.
142  * @arg_value: argument value passed by requester, this will be returned back
143  * in the callback
144  * @arg: Argument passed by requester, this will be returned back in the
145  * callback
146  */
147 struct wlan_bearer_switch_request {
148 	uint8_t vdev_id;
149 	wlan_bs_req_id request_id;
150 	enum bearer_switch_req_type req_type;
151 	enum bearer_switch_req_source source;
152 	bearer_switch_requester_cb requester_cb;
153 	uint32_t arg_value;
154 	void *arg;
155 };
156 
157 /**
158  * struct wlan_ll_sap_tx_ops - defines southbound tx callbacks for
159  * LL_SAP (low latency sap) component
160  * @send_audio_transport_switch_resp: function pointer to indicate audio
161  * transport switch response to FW
162  */
163 struct wlan_ll_sap_tx_ops {
164 	QDF_STATUS (*send_audio_transport_switch_resp)(
165 					struct wlan_objmgr_psoc *psoc,
166 					enum bearer_switch_req_type req_type,
167 					enum bearer_switch_status status);
168 };
169 
170 /**
171  * struct wlan_ll_sap_rx_ops - defines southbound rx callbacks for
172  * LL_SAP (low latency SAP) component
173  * @audio_transport_switch_req: function pointer to indicate audio
174  * transport switch request from FW
175  */
176 struct wlan_ll_sap_rx_ops {
177 	QDF_STATUS (*audio_transport_switch_req)(
178 					struct wlan_objmgr_psoc *psoc,
179 					enum bearer_switch_req_type req_type);
180 };
181 
182 /**
183  * struct ll_sap_ops - ll_sap osif callbacks
184  * @ll_sap_send_audio_transport_switch_req_cb: Send audio transport request to
185  * userspace
186  */
187 struct ll_sap_ops {
188 		void (*ll_sap_send_audio_transport_switch_req_cb)(
189 					struct wlan_objmgr_vdev *vdev,
190 					enum bearer_switch_req_type req_type);
191 };
192 #endif /* _WLAN_LL_SAP_PUBLIC_STRUCTS_H_ */
193