blob: 0ca97bf607fbf42a36729e1ce9197cc537c051fc [file] [log] [blame]
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001/*
2 * Copyright (c) 2011-2015 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
23 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
26 */
27
28#ifndef __WLAN_HDD_OCB_H
29#define __WLAN_HDD_OCB_H
30
31#include <net/iw_handler.h>
32#include "sir_api.h"
33
34#define WLAN_OCB_CHANNEL_MAX 5
35
36/**
37 * struct ocb_qos_params - QoS Parameters for each AC
38 * @aifsn: Arbitration Inter-Frame Spacing
39 * @cwmin: Contention Window (Min)
40 * @cwmax: Contention Window (Max)
41 */
42struct ocb_qos_params {
43 uint8_t aifsn;
44 uint8_t cwmin;
45 uint8_t cwmax;
46};
47
48/**
49 * struct ocb_channel - Parameters for each OCB channel
50 * @channel_freq: Channel Center Frequency (MHz)
51 * @duration: Channel Duration (ms)
52 * @start_guard_interval: Start Guard Interval (ms)
53 * @channel_bandwidth: Channel Bandwidth (MHz)
54 * @tx_power: Transmit Power (1/2 dBm)
55 * @tx_rate: Transmit Data Rate (mbit)
56 * @qos_params: Array of QoS Parameters
57 * @per_packet_rx_stats: Enable per packet RX statistics
58 */
59struct ocb_channel {
60 uint32_t channel_freq;
61 uint32_t duration;
62 uint32_t start_guard_interval;
63 uint32_t channel_bandwidth;
64 uint32_t tx_power;
65 uint32_t tx_rate;
66 struct ocb_qos_params qos_params[MAX_NUM_AC];
67 uint32_t per_packet_rx_stats;
68};
69
70/**
71 * struct dot11p_channel_sched - OCB channel schedule
72 * @num_channels: Number of channels
73 * @channels: Array of channel parameters
74 * @off_channel_tx: Enable off channel TX
75 */
76struct dot11p_channel_sched {
77 uint32_t num_channels;
78 struct ocb_channel channels[WLAN_OCB_CHANNEL_MAX];
79 uint32_t off_channel_tx;
80};
81
82/**
83 * enum qca_wlan_vendor_attr_ocb_set_config - vendor subcmd to set ocb config
84 * @QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_CHANNEL_COUNT:
85 * number of channels in the configuration
86 * @QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_SCHEDULE_SIZE: size of the schedule
87 * @QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_CHANNEL_ARRAY: array of channels
88 * @QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_SCHEDULE_ARRAY:
89 * array of channels to be scheduled
90 * @QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_NDL_CHANNEL_ARRAY:
91 * array of NDL channel information
92 * @QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_NDL_ACTIVE_STATE_ARRAY:
93 * array of NDL active state configuration
94 * @QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_FLAGS:
95 * flag to set the absolute expiry
96 */
97enum qca_wlan_vendor_attr_ocb_set_config {
98 QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_INVALID = 0,
99 QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_CHANNEL_COUNT,
100 QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_SCHEDULE_SIZE,
101 QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_CHANNEL_ARRAY,
102 QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_SCHEDULE_ARRAY,
103 QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_NDL_CHANNEL_ARRAY,
104 QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_NDL_ACTIVE_STATE_ARRAY,
105 QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_FLAGS,
106 QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_AFTER_LAST,
107 QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_MAX =
108 QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_AFTER_LAST - 1,
109};
110
111/**
112 * enum qca_wlan_vendor_attr_ocb_set_utc_time - vendor subcmd to set UTC time
113 * @QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_VALUE:
114 * the UTC time as an array of 10 bytes
115 * @QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_ERROR:
116 * the time error as an array of 5 bytes
117 */
118enum qca_wlan_vendor_attr_ocb_set_utc_time {
119 QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_INVALID = 0,
120 QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_VALUE,
121 QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_ERROR,
122 QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_AFTER_LAST,
123 QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_MAX =
124 QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_AFTER_LAST - 1,
125};
126
127/**
128 * enum qca_wlan_vendor_attr_ocb_start_timing_advert - vendor subcmd to start
129 sending timing advert
130 frames
131 * @QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_CHANNEL_FREQ:
132 * channel frequency on which to send the frames
133 * @QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_REPEAT_RATE:
134 * number of times the frame is sent in 5 seconds
135 */
136enum qca_wlan_vendor_attr_ocb_start_timing_advert {
137 QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_INVALID = 0,
138 QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_CHANNEL_FREQ,
139 QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_REPEAT_RATE,
140 QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_AFTER_LAST,
141 QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_MAX =
142 QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_AFTER_LAST - 1,
143};
144
145/**
146 * enum qca_wlan_vendor_attr_ocb_stop_timing_advert - vendor subcmd to stop
147 * timing advert
148 * @QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_CHANNEL_FREQ:
149 * the channel frequency on which to stop the timing advert
150 */
151enum qca_wlan_vendor_attr_ocb_stop_timing_advert {
152 QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_INVALID = 0,
153 QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_CHANNEL_FREQ,
154 QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_AFTER_LAST,
155 QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_MAX =
156 QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_AFTER_LAST - 1,
157};
158
159/**
160 * enum qca_wlan_vendor_attr_dcc_get_tsf_response - vendor subcmd to get TSF
161 * timer value
162 * @QCA_WLAN_VENDOR_ATTR_OCB_GET_TSF_RESP_TIMER_HIGH:
163 * higher 32 bits of the timer
164 * @QCA_WLAN_VENDOR_ATTR_OCB_GET_TSF_RESP_TIMER_LOW:
165 * lower 32 bits of the timer
166 */
167enum qca_wlan_vendor_attr_ocb_get_tsf_resp {
168 QCA_WLAN_VENDOR_ATTR_OCB_GET_TSF_RESP_INVALID = 0,
169 QCA_WLAN_VENDOR_ATTR_OCB_GET_TSF_RESP_TIMER_HIGH,
170 QCA_WLAN_VENDOR_ATTR_OCB_GET_TSF_RESP_TIMER_LOW,
171 QCA_WLAN_VENDOR_ATTR_OCB_GET_TSF_RESP_AFTER_LAST,
172 QCA_WLAN_VENDOR_ATTR_OCB_GET_TSF_RESP_MAX =
173 QCA_WLAN_VENDOR_ATTR_OCB_GET_TSF_RESP_AFTER_LAST - 1,
174};
175
176/**
177 * enum qca_wlan_vendor_attr_dcc_get_stats - vendor subcmd to get
178 * dcc stats
179 * @QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_CHANNEL_COUNT:
180 * the number of channels in the request array
181 * @QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_REQUEST_ARRAY
182 * array of the channel and information being requested
183 */
184enum qca_wlan_vendor_attr_dcc_get_stats {
185 QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_INVALID = 0,
186 QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_CHANNEL_COUNT,
187 QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_REQUEST_ARRAY,
188 QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_AFTER_LAST,
189 QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_MAX =
190 QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_AFTER_LAST - 1,
191};
192
193/**
194 * enum qca_wlan_vendor_attr_dcc_get_stats_resp - response event from get
195 * dcc stats
196 * @QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_RESP_CHANNEL_COUNT:
197 * the number of channels in the request array
198 * @QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_RESP_STATS_ARRAY
199 * array of the information being requested
200 */
201enum qca_wlan_vendor_attr_dcc_get_stats_resp {
202 QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_RESP_INVALID = 0,
203 QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_RESP_CHANNEL_COUNT,
204 QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_RESP_STATS_ARRAY,
205 QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_RESP_AFTER_LAST,
206 QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_RESP_MAX =
207 QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_RESP_AFTER_LAST - 1,
208};
209
210/**
211 * enum qca_wlan_vendor_attr_dcc_clear_stats - vendor subcmd to clear DCC stats
212 * @QCA_WLAN_VENDOR_ATTR_DCC_CLEAR_STATS_BITMAP:
213 * mask of the type of stats to be cleared
214 */
215enum qca_wlan_vendor_attr_dcc_clear_stats {
216 QCA_WLAN_VENDOR_ATTR_DCC_CLEAR_STATS_INVALID = 0,
217 QCA_WLAN_VENDOR_ATTR_DCC_CLEAR_STATS_BITMAP,
218 QCA_WLAN_VENDOR_ATTR_DCC_CLEAR_STATS_AFTER_LAST,
219 QCA_WLAN_VENDOR_ATTR_DCC_CLEAR_STATS_MAX =
220 QCA_WLAN_VENDOR_ATTR_DCC_CLEAR_STATS_AFTER_LAST - 1,
221};
222
223/**
224 * enum qca_wlan_vendor_attr_ocb_set_config - vendor subcmd to update dcc
225 * @QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_CHANNEL_COUNT:
226 * number of channels in the configuration
227 * @QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_CHANNEL_ARRAY: the array of NDL
228 * channel info
229 * @QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_ACTIVE_STATE_ARRAY: the array of
230 * NDL active states
231 */
232enum qca_wlan_vendor_attr_dcc_update_ndl {
233 QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_INVALID = 0,
234 QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_CHANNEL_COUNT,
235 QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_CHANNEL_ARRAY,
236 QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_ACTIVE_STATE_ARRAY,
237 QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_AFTER_LAST,
238 QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_MAX =
239 QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_AFTER_LAST - 1,
240};
241
242void hdd_set_dot11p_config(hdd_context_t *hdd_ctx);
243
244void hdd_remove_ocb_tx_header(struct sk_buff *skb);
245
246int iw_set_dot11p_channel_sched(struct net_device *dev,
247 struct iw_request_info *info,
248 union iwreq_data *wrqu, char *extra);
249
250int wlan_hdd_cfg80211_ocb_set_config(struct wiphy *wiphy,
251 struct wireless_dev *wdev,
252 const void *data,
253 int data_len);
254
255int wlan_hdd_cfg80211_ocb_set_utc_time(struct wiphy *wiphy,
256 struct wireless_dev *wdev,
257 const void *data,
258 int data_len);
259
260int wlan_hdd_cfg80211_ocb_start_timing_advert(struct wiphy *wiphy,
261 struct wireless_dev *wdev,
262 const void *data,
263 int data_len);
264
265int wlan_hdd_cfg80211_ocb_stop_timing_advert(struct wiphy *wiphy,
266 struct wireless_dev *wdev,
267 const void *data,
268 int data_len);
269
270int wlan_hdd_cfg80211_ocb_get_tsf_timer(struct wiphy *wiphy,
271 struct wireless_dev *wdev,
272 const void *data,
273 int data_len);
274
275int wlan_hdd_cfg80211_dcc_get_stats(struct wiphy *wiphy,
276 struct wireless_dev *wdev,
277 const void *data,
278 int data_len);
279
280int wlan_hdd_cfg80211_dcc_clear_stats(struct wiphy *wiphy,
281 struct wireless_dev *wdev,
282 const void *data,
283 int data_len);
284
285int wlan_hdd_cfg80211_dcc_update_ndl(struct wiphy *wiphy,
286 struct wireless_dev *wdev,
287 const void *data,
288 int data_len);
289
290void wlan_hdd_dcc_register_for_dcc_stats_event(hdd_context_t *hdd_ctx);
291
292#endif /* __WLAN_HDD_OCB_H */