Commit | Line | Data |
---|---|---|
d172a5ef JB |
1 | /****************************************************************************** |
2 | * | |
3 | * This file is provided under a dual BSD/GPLv2 license. When using or | |
4 | * redistributing this file, you may do so under either license. | |
5 | * | |
6 | * GPL LICENSE SUMMARY | |
7 | * | |
8 | * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. | |
9 | * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH | |
10 | * Copyright(c) 2016 - 2017 Intel Deutschland GmbH | |
57e861d9 | 11 | * Copyright(c) 2018 Intel Corporation |
d172a5ef JB |
12 | * |
13 | * This program is free software; you can redistribute it and/or modify | |
14 | * it under the terms of version 2 of the GNU General Public License as | |
15 | * published by the Free Software Foundation. | |
16 | * | |
17 | * This program is distributed in the hope that it will be useful, but | |
18 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
20 | * General Public License for more details. | |
21 | * | |
22 | * The full GNU General Public License is included in this distribution | |
23 | * in the file called COPYING. | |
24 | * | |
25 | * Contact Information: | |
26 | * Intel Linux Wireless <linuxwifi@intel.com> | |
27 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | |
28 | * | |
29 | * BSD LICENSE | |
30 | * | |
31 | * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. | |
32 | * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH | |
33 | * Copyright(c) 2016 - 2017 Intel Deutschland GmbH | |
57e861d9 | 34 | * Copyright(c) 2018 Intel Corporation |
d172a5ef JB |
35 | * All rights reserved. |
36 | * | |
37 | * Redistribution and use in source and binary forms, with or without | |
38 | * modification, are permitted provided that the following conditions | |
39 | * are met: | |
40 | * | |
41 | * * Redistributions of source code must retain the above copyright | |
42 | * notice, this list of conditions and the following disclaimer. | |
43 | * * Redistributions in binary form must reproduce the above copyright | |
44 | * notice, this list of conditions and the following disclaimer in | |
45 | * the documentation and/or other materials provided with the | |
46 | * distribution. | |
47 | * * Neither the name Intel Corporation nor the names of its | |
48 | * contributors may be used to endorse or promote products derived | |
49 | * from this software without specific prior written permission. | |
50 | * | |
51 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
52 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
53 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
54 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
55 | * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
56 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
57 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
58 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
59 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
60 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
61 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
62 | * | |
63 | *****************************************************************************/ | |
64 | ||
65 | #ifndef __iwl_fw_api_tdls_h__ | |
66 | #define __iwl_fw_api_tdls_h__ | |
67 | ||
68 | #include "fw/api/tx.h" | |
69 | #include "fw/api/phy-ctxt.h" | |
70 | ||
71 | #define IWL_MVM_TDLS_STA_COUNT 4 | |
72 | ||
73 | /* Type of TDLS request */ | |
74 | enum iwl_tdls_channel_switch_type { | |
75 | TDLS_SEND_CHAN_SW_REQ = 0, | |
76 | TDLS_SEND_CHAN_SW_RESP_AND_MOVE_CH, | |
77 | TDLS_MOVE_CH, | |
78 | }; /* TDLS_STA_CHANNEL_SWITCH_CMD_TYPE_API_E_VER_1 */ | |
79 | ||
80 | /** | |
81 | * struct iwl_tdls_channel_switch_timing - Switch timing in TDLS channel-switch | |
82 | * @frame_timestamp: GP2 timestamp of channel-switch request/response packet | |
83 | * received from peer | |
84 | * @max_offchan_duration: What amount of microseconds out of a DTIM is given | |
85 | * to the TDLS off-channel communication. For instance if the DTIM is | |
86 | * 200TU and the TDLS peer is to be given 25% of the time, the value | |
87 | * given will be 50TU, or 50 * 1024 if translated into microseconds. | |
88 | * @switch_time: switch time the peer sent in its channel switch timing IE | |
89 | * @switch_timeout: switch timeout the peer sent in its channel switch timing IE | |
90 | */ | |
91 | struct iwl_tdls_channel_switch_timing { | |
92 | __le32 frame_timestamp; /* GP2 time of peer packet Rx */ | |
93 | __le32 max_offchan_duration; /* given in micro-seconds */ | |
94 | __le32 switch_time; /* given in micro-seconds */ | |
95 | __le32 switch_timeout; /* given in micro-seconds */ | |
96 | } __packed; /* TDLS_STA_CHANNEL_SWITCH_TIMING_DATA_API_S_VER_1 */ | |
97 | ||
98 | #define IWL_TDLS_CH_SW_FRAME_MAX_SIZE 200 | |
99 | ||
100 | /** | |
101 | * struct iwl_tdls_channel_switch_frame - TDLS channel switch frame template | |
102 | * | |
103 | * A template representing a TDLS channel-switch request or response frame | |
104 | * | |
105 | * @switch_time_offset: offset to the channel switch timing IE in the template | |
106 | * @tx_cmd: Tx parameters for the frame | |
107 | * @data: frame data | |
108 | */ | |
109 | struct iwl_tdls_channel_switch_frame { | |
110 | __le32 switch_time_offset; | |
111 | struct iwl_tx_cmd tx_cmd; | |
112 | u8 data[IWL_TDLS_CH_SW_FRAME_MAX_SIZE]; | |
113 | } __packed; /* TDLS_STA_CHANNEL_SWITCH_FRAME_API_S_VER_1 */ | |
114 | ||
57e861d9 DS |
115 | /** |
116 | * struct iwl_tdls_channel_switch_cmd_tail - tail of iwl_tdls_channel_switch_cmd | |
117 | * | |
118 | * @timing: timing related data for command | |
119 | * @frame: channel-switch request/response template, depending to switch_type | |
120 | */ | |
121 | struct iwl_tdls_channel_switch_cmd_tail { | |
122 | struct iwl_tdls_channel_switch_timing timing; | |
123 | struct iwl_tdls_channel_switch_frame frame; | |
124 | } __packed; | |
125 | ||
d172a5ef JB |
126 | /** |
127 | * struct iwl_tdls_channel_switch_cmd - TDLS channel switch command | |
128 | * | |
129 | * The command is sent to initiate a channel switch and also in response to | |
130 | * incoming TDLS channel-switch request/response packets from remote peers. | |
131 | * | |
132 | * @switch_type: see &enum iwl_tdls_channel_switch_type | |
133 | * @peer_sta_id: station id of TDLS peer | |
134 | * @ci: channel we switch to | |
57e861d9 | 135 | * @tail: command tail |
d172a5ef JB |
136 | */ |
137 | struct iwl_tdls_channel_switch_cmd { | |
138 | u8 switch_type; | |
139 | __le32 peer_sta_id; | |
140 | struct iwl_fw_channel_info ci; | |
57e861d9 | 141 | struct iwl_tdls_channel_switch_cmd_tail tail; |
d172a5ef JB |
142 | } __packed; /* TDLS_STA_CHANNEL_SWITCH_CMD_API_S_VER_1 */ |
143 | ||
144 | /** | |
145 | * struct iwl_tdls_channel_switch_notif - TDLS channel switch start notification | |
146 | * | |
147 | * @status: non-zero on success | |
148 | * @offchannel_duration: duration given in microseconds | |
149 | * @sta_id: peer currently performing the channel-switch with | |
150 | */ | |
151 | struct iwl_tdls_channel_switch_notif { | |
152 | __le32 status; | |
153 | __le32 offchannel_duration; | |
154 | __le32 sta_id; | |
155 | } __packed; /* TDLS_STA_CHANNEL_SWITCH_NTFY_API_S_VER_1 */ | |
156 | ||
157 | /** | |
158 | * struct iwl_tdls_sta_info - TDLS station info | |
159 | * | |
160 | * @sta_id: station id of the TDLS peer | |
161 | * @tx_to_peer_tid: TID reserved vs. the peer for FW based Tx | |
162 | * @tx_to_peer_ssn: initial SSN the FW should use for Tx on its TID vs the peer | |
163 | * @is_initiator: 1 if the peer is the TDLS link initiator, 0 otherwise | |
164 | */ | |
165 | struct iwl_tdls_sta_info { | |
166 | u8 sta_id; | |
167 | u8 tx_to_peer_tid; | |
168 | __le16 tx_to_peer_ssn; | |
169 | __le32 is_initiator; | |
170 | } __packed; /* TDLS_STA_INFO_VER_1 */ | |
171 | ||
172 | /** | |
173 | * struct iwl_tdls_config_cmd - TDLS basic config command | |
174 | * | |
175 | * @id_and_color: MAC id and color being configured | |
176 | * @tdls_peer_count: amount of currently connected TDLS peers | |
177 | * @tx_to_ap_tid: TID reverved vs. the AP for FW based Tx | |
178 | * @tx_to_ap_ssn: initial SSN the FW should use for Tx on its TID vs. the AP | |
179 | * @sta_info: per-station info. Only the first tdls_peer_count entries are set | |
180 | * @pti_req_data_offset: offset of network-level data for the PTI template | |
181 | * @pti_req_tx_cmd: Tx parameters for PTI request template | |
182 | * @pti_req_template: PTI request template data | |
183 | */ | |
184 | struct iwl_tdls_config_cmd { | |
185 | __le32 id_and_color; /* mac id and color */ | |
186 | u8 tdls_peer_count; | |
187 | u8 tx_to_ap_tid; | |
188 | __le16 tx_to_ap_ssn; | |
189 | struct iwl_tdls_sta_info sta_info[IWL_MVM_TDLS_STA_COUNT]; | |
190 | ||
191 | __le32 pti_req_data_offset; | |
192 | struct iwl_tx_cmd pti_req_tx_cmd; | |
193 | u8 pti_req_template[0]; | |
194 | } __packed; /* TDLS_CONFIG_CMD_API_S_VER_1 */ | |
195 | ||
196 | /** | |
197 | * struct iwl_tdls_config_sta_info_res - TDLS per-station config information | |
198 | * | |
199 | * @sta_id: station id of the TDLS peer | |
200 | * @tx_to_peer_last_seq: last sequence number used by FW during FW-based Tx to | |
201 | * the peer | |
202 | */ | |
203 | struct iwl_tdls_config_sta_info_res { | |
204 | __le16 sta_id; | |
205 | __le16 tx_to_peer_last_seq; | |
206 | } __packed; /* TDLS_STA_INFO_RSP_VER_1 */ | |
207 | ||
208 | /** | |
209 | * struct iwl_tdls_config_res - TDLS config information from FW | |
210 | * | |
211 | * @tx_to_ap_last_seq: last sequence number used by FW during FW-based Tx to AP | |
212 | * @sta_info: per-station TDLS config information | |
213 | */ | |
214 | struct iwl_tdls_config_res { | |
215 | __le32 tx_to_ap_last_seq; | |
216 | struct iwl_tdls_config_sta_info_res sta_info[IWL_MVM_TDLS_STA_COUNT]; | |
217 | } __packed; /* TDLS_CONFIG_RSP_API_S_VER_1 */ | |
218 | ||
219 | #endif /* __iwl_fw_api_tdls_h__ */ |