1 /*
2 * Copyright (c) 2021, The Linux Foundation. All rights reserved.
3 * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4 *
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18 /**
19 * DOC: contains son hdd API implementation
20 */
21
22 #ifndef WLAN_HDD_SON_H
23 #define WLAN_HDD_SON_H
24
25 #include <qdf_types.h>
26 #include <wlan_hdd_main.h>
27
28 /*
29 * Determines type of event sent for MLME_EVENT_ASSOC_DISASSOC
30 * @ALD_ASSOC_EVENT: event name to send assoc event
31 * @ALD_DISASSOC_EVENT: event name to send disassoc event
32 */
33 enum assoc_disassoc_event {
34 ALD_ASSOC_EVENT,
35 ALD_DISASSOC_EVENT,
36 };
37
38 #ifdef WLAN_FEATURE_SON
39
40 /**
41 * hdd_son_register_callbacks() - register hdd callback for son
42 * @hdd_ctx: hdd context
43 *
44 * Return: void
45 */
46 void hdd_son_register_callbacks(struct hdd_context *hdd_ctx);
47
48 /**
49 * hdd_son_deliver_acs_complete_event() - send acs complete event to son
50 * @adapter: adapter object
51 *
52 * Return: 0 if event is sent successfully
53 */
54 int hdd_son_deliver_acs_complete_event(struct hdd_adapter *adapter);
55
56 /**
57 * hdd_son_deliver_cac_status_event() - send cac status to son
58 * @adapter: adapter object
59 * @freq: the operating frequency when radar is detected
60 * @radar_detected: true if radar is detected else false
61 *
62 * Return: 0 if event is sent successfully
63 */
64 int hdd_son_deliver_cac_status_event(struct hdd_adapter *adapter,
65 qdf_freq_t freq, bool radar_detected);
66
67 /**
68 * hdd_son_deliver_assoc_disassoc_event() - send sta assoc disassoc event
69 * to son
70 * @adapter: adapter object
71 * @sta_mac: Mac address of the sta
72 * @reason_code: reason code
73 * @flag: determines the type of event sent(Assoc/disassoc)
74 *
75 * Return: 0 if event is sent successfully
76 */
77 int hdd_son_deliver_assoc_disassoc_event(struct hdd_adapter *adapter,
78 struct qdf_mac_addr sta_mac,
79 uint32_t reason_code,
80 enum assoc_disassoc_event flag);
81 /**
82 * hdd_son_deliver_peer_authorize_event() - Deliver peer auth event to SON
83 * @link_info: Link info pointer in HDD adapter
84 * @peer_mac: Peer mac address
85 *
86 * Return: Void
87 */
88 void hdd_son_deliver_peer_authorize_event(struct wlan_hdd_link_info *link_info,
89 uint8_t *peer_mac);
90
91 /**
92 * hdd_son_send_set_wifi_generic_command() - Send Generic SET command to SON
93 * @wiphy: standard kernel wiphy
94 * @wdev: wireless device
95 * @tb: NL attributes
96 *
97 * Return: 0 on success
98 */
99 int hdd_son_send_set_wifi_generic_command(struct wiphy *wiphy,
100 struct wireless_dev *wdev,
101 struct nlattr **tb);
102
103 /**
104 * hdd_son_send_get_wifi_generic_command() - Send Generic GET command to SON
105 * @wiphy: standard kernel wiphy
106 * @wdev: wireless device
107 * @tb: NL attributes
108 *
109 * Return: 0 on success
110 */
111 int hdd_son_send_get_wifi_generic_command(struct wiphy *wiphy,
112 struct wireless_dev *wdev,
113 struct nlattr **tb);
114
115 /**
116 * hdd_son_get_peer_max_mcs_idx() - Get peer max mcs index
117 * @vdev: vdev object
118 * @peer: peer obj
119 *
120 * Return: number of max mcs on success or 0 on failure
121 */
122 uint32_t hdd_son_get_peer_max_mcs_idx(struct wlan_objmgr_vdev *vdev,
123 struct wlan_objmgr_peer *peer);
124
125 /**
126 * hdd_son_deliver_chan_change_event() - send chan change to SON
127 * @adapter: pointer to adapter
128 * @freq: new operating channel frequency
129 *
130 * Return: 0 on success
131 */
132 int hdd_son_deliver_chan_change_event(struct hdd_adapter *adapter,
133 qdf_freq_t freq);
134 #else
135
hdd_son_register_callbacks(struct hdd_context * hdd_ctx)136 static inline void hdd_son_register_callbacks(struct hdd_context *hdd_ctx)
137 {
138 }
139
140 static inline int
hdd_son_deliver_acs_complete_event(struct hdd_adapter * adapter)141 hdd_son_deliver_acs_complete_event(struct hdd_adapter *adapter)
142 {
143 return 0;
144 }
145
146 static inline int
hdd_son_deliver_cac_status_event(struct hdd_adapter * adapter,qdf_freq_t freq,bool radar_detected)147 hdd_son_deliver_cac_status_event(struct hdd_adapter *adapter,
148 qdf_freq_t freq, bool radar_detected)
149 {
150 return 0;
151 }
152
153 static inline int
hdd_son_deliver_assoc_disassoc_event(struct hdd_adapter * adapter,struct qdf_mac_addr sta_mac,uint32_t reason_code,enum assoc_disassoc_event flag)154 hdd_son_deliver_assoc_disassoc_event(struct hdd_adapter *adapter,
155 struct qdf_mac_addr sta_mac,
156 uint32_t reason_code,
157 enum assoc_disassoc_event flag)
158 {
159 return 0;
160 }
161
162 static inline void
hdd_son_deliver_peer_authorize_event(struct wlan_hdd_link_info * link_info,uint8_t * peer_mac)163 hdd_son_deliver_peer_authorize_event(struct wlan_hdd_link_info *link_info,
164 uint8_t *peer_mac)
165 {
166 }
167
168 static inline
hdd_son_send_set_wifi_generic_command(struct wiphy * wiphy,struct wireless_dev * wdev,struct nlattr ** tb)169 int hdd_son_send_set_wifi_generic_command(struct wiphy *wiphy,
170 struct wireless_dev *wdev,
171 struct nlattr **tb)
172 {
173 return -EINVAL;
174 }
175
176 static inline
hdd_son_send_get_wifi_generic_command(struct wiphy * wiphy,struct wireless_dev * wdev,struct nlattr ** tb)177 int hdd_son_send_get_wifi_generic_command(struct wiphy *wiphy,
178 struct wireless_dev *wdev,
179 struct nlattr **tb)
180 {
181 return -EINVAL;
182 }
183
184 static inline
hdd_son_get_peer_max_mcs_idx(struct wlan_objmgr_vdev * vdev,struct wlan_objmgr_peer * peer)185 uint32_t hdd_son_get_peer_max_mcs_idx(struct wlan_objmgr_vdev *vdev,
186 struct wlan_objmgr_peer *peer)
187 {
188 return 0;
189 }
190
191 static inline
hdd_son_deliver_chan_change_event(struct hdd_adapter * adapter,qdf_freq_t freq)192 int hdd_son_deliver_chan_change_event(struct hdd_adapter *adapter,
193 qdf_freq_t freq)
194 {
195 return 0;
196 }
197 #endif /* WLAN_FEATURE_SON */
198 #endif
199