source: mainline/uspace/drv/nic/ar9271/htc.h@ b7fd2a0

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since b7fd2a0 was b7fd2a0, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 8 years ago

Use errno_t in all uspace and kernel code.

Change type of every variable, parameter and return value that holds an
<errno.h> constant to either errno_t (the usual case), or sys_errno_t
(some places in kernel). This is for the purpose of self-documentation,
as well as for type-checking with a bit of type definition hackery.

Although this is a massive commit, it is a simple text replacement, and thus
is very easy to verify. Simply do the following:

`
git checkout <this commit's hash>
git reset HEAD
git add .
tools/srepl '\berrno_t\b' int
git add .
tools/srepl '\bsys_errno_t\b' sysarg_t
git reset
git diff
`

While this doesn't ensure that the replacements are correct, it does ensure
that the commit doesn't do anything except those replacements. Since errno_t
is typedef'd to int in the usual case (and sys_errno_t to sysarg_t), even if
incorrect, this commit cannot change behavior.

  • Property mode set to 100644
File size: 7.6 KB
Line 
1/*
2 * Copyright (c) 2014 Jan Kolarik
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @file htc.h
30 *
31 * Definitions of the Atheros HTC (Host Target Communication) technology
32 * for communication between host (PC) and target (device firmware).
33 *
34 */
35
36#ifndef ATHEROS_HTC_H
37#define ATHEROS_HTC_H
38
39#include <ieee80211.h>
40#include <fibril_synch.h>
41#include <usb/dev/driver.h>
42#include <stddef.h>
43#include <stdint.h>
44#include <nic.h>
45#include "ath.h"
46
47#define HTC_RTS_THRESHOLD 2304
48#define HTC_RATES_MAX_LENGTH 30
49
50/** HTC message IDs.
51 *
52 */
53typedef enum {
54 HTC_MESSAGE_READY = 1,
55 HTC_MESSAGE_CONNECT_SERVICE,
56 HTC_MESSAGE_CONNECT_SERVICE_RESPONSE,
57 HTC_MESSAGE_SETUP_COMPLETE,
58 HTC_MESSAGE_CONFIG
59} htc_message_id_t;
60
61/** HTC response message status codes.
62 *
63 */
64typedef enum {
65 HTC_SERVICE_SUCCESS = 0,
66 HTC_SERVICE_NOT_FOUND,
67 HTC_SERVICE_FAILED,
68 HTC_SERVICE_NO_RESOURCES,
69 HTC_SERVICE_NO_MORE_EP
70} htc_response_status_code_t;
71
72/** HTC operating mode definition.
73 *
74 */
75typedef enum {
76 HTC_OPMODE_ADHOC = 0,
77 HTC_OPMODE_STATION = 1,
78 HTC_OPMODE_MESH = 2,
79 HTC_OPMODE_AP = 6
80} htc_operating_mode_t;
81
82/** HTC data type indicator.
83 *
84 */
85typedef enum {
86 HTC_DATA_AMPDU = 1,
87 HTC_DATA_NORMAL = 2,
88 HTC_DATA_BEACON = 3,
89 HTC_DATA_MGMT = 4
90} htc_data_type_t;
91
92/** HTC endpoint numbers.
93 *
94 */
95typedef struct {
96 int ctrl_endpoint;
97 int wmi_endpoint;
98 int beacon_endpoint;
99 int cab_endpoint;
100 int uapsd_endpoint;
101 int mgmt_endpoint;
102 int data_be_endpoint;
103 int data_bk_endpoint;
104 int data_video_endpoint;
105 int data_voice_endpoint;
106} htc_pipes_t;
107
108/** HTC device data.
109 *
110 */
111typedef struct {
112 /** WMI message sequence number */
113 uint16_t sequence_number;
114
115 /** HTC endpoints numbers */
116 htc_pipes_t endpoints;
117
118 /** Lock for receiver */
119 fibril_mutex_t rx_lock;
120
121 /** Lock for transmitter */
122 fibril_mutex_t tx_lock;
123
124 /** Pointer to related IEEE 802.11 device */
125 ieee80211_dev_t *ieee80211_dev;
126
127 /** Pointer to Atheros WiFi device structure */
128 ath_t *ath_device;
129} htc_device_t;
130
131/** HTC frame header structure.
132 *
133 */
134typedef struct {
135 uint8_t endpoint_id;
136 uint8_t flags;
137 uint16_t payload_length; /**< Big Endian value! */
138 uint8_t control_bytes[4];
139} __attribute__((packed)) htc_frame_header_t;
140
141/** HTC management TX frame header structure.
142 *
143 */
144typedef struct {
145 uint8_t node_idx;
146 uint8_t vif_idx;
147 uint8_t tidno;
148 uint8_t flags;
149 uint8_t key_type;
150 uint8_t keyix;
151 uint8_t cookie;
152 uint8_t pad;
153} __attribute__((packed)) htc_tx_management_header_t;
154
155/** HTC data TX frame header structure.
156 *
157 */
158typedef struct {
159 uint8_t data_type;
160 uint8_t node_idx;
161 uint8_t vif_idx;
162 uint8_t tidno;
163 uint32_t flags; /**< Big Endian value! */
164 uint8_t key_type;
165 uint8_t keyix;
166 uint8_t cookie;
167 uint8_t pad;
168} __attribute__((packed)) htc_tx_data_header_t;
169
170/** HTC ready message structure.
171 *
172 */
173typedef struct {
174 uint16_t message_id; /**< Big Endian value! */
175 uint16_t credits; /**< Big Endian value! */
176 uint16_t credit_size; /**< Big Endian value! */
177
178 uint8_t max_endpoints;
179 uint8_t pad;
180} __attribute__((packed)) htc_ready_msg_t;
181
182/** HTC service message structure.
183 *
184 */
185typedef struct {
186 uint16_t message_id; /**< Big Endian value! */
187 uint16_t service_id; /**< Big Endian value! */
188 uint16_t connection_flags; /**< Big Endian value! */
189
190 uint8_t download_pipe_id;
191 uint8_t upload_pipe_id;
192 uint8_t service_meta_length;
193 uint8_t pad;
194} __attribute__((packed)) htc_service_msg_t;
195
196/** HTC service response message structure.
197 *
198 */
199typedef struct {
200 uint16_t message_id; /**< Big Endian value! */
201 uint16_t service_id; /**< Big Endian value! */
202 uint8_t status;
203 uint8_t endpoint_id;
204 uint16_t max_message_length; /**< Big Endian value! */
205 uint8_t service_meta_length;
206 uint8_t pad;
207} __attribute__((packed)) htc_service_resp_msg_t;
208
209/** HTC credits config message structure.
210 *
211 */
212typedef struct {
213 uint16_t message_id; /**< Big Endian value! */
214 uint8_t pipe_id;
215 uint8_t credits;
216} __attribute__((packed)) htc_config_msg_t;
217
218/** HTC new virtual interface message.
219 *
220 */
221typedef struct {
222 uint8_t index;
223 uint8_t op_mode;
224 uint8_t addr[ETH_ADDR];
225 uint8_t ath_cap;
226 uint16_t rts_thres; /**< Big Endian value! */
227 uint8_t pad;
228} __attribute__((packed)) htc_vif_msg_t;
229
230/** HTC new station message.
231 *
232 */
233typedef struct {
234 uint8_t addr[ETH_ADDR];
235 uint8_t bssid[ETH_ADDR];
236 uint8_t sta_index;
237 uint8_t vif_index;
238 uint8_t is_vif_sta;
239
240 uint16_t flags; /**< Big Endian value! */
241 uint16_t ht_cap; /**< Big Endian value! */
242 uint16_t max_ampdu; /**< Big Endian value! */
243
244 uint8_t pad;
245} __attribute__((packed)) htc_sta_msg_t;
246
247/** HTC message to inform target about available capabilities.
248 *
249 */
250typedef struct {
251 uint32_t ampdu_limit; /**< Big Endian value! */
252 uint8_t ampdu_subframes;
253 uint8_t enable_coex;
254 uint8_t tx_chainmask;
255 uint8_t pad;
256} __attribute__((packed)) htc_cap_msg_t;
257
258typedef struct {
259 uint8_t sta_index;
260 uint8_t is_new;
261 uint32_t cap_flags; /**< Big Endian value! */
262 uint8_t legacy_rates_count;
263 uint8_t legacy_rates[HTC_RATES_MAX_LENGTH];
264 uint16_t pad;
265} htc_rate_msg_t;
266
267/** HTC RX status structure used in incoming HTC data messages.
268 *
269 */
270typedef struct {
271 uint64_t timestamp; /**< Big Endian value! */
272 uint16_t data_length; /**< Big Endian value! */
273 uint8_t status;
274 uint8_t phy_err;
275 int8_t rssi;
276 int8_t rssi_ctl[3];
277 int8_t rssi_ext[3];
278 uint8_t keyix;
279 uint8_t rate;
280 uint8_t antenna;
281 uint8_t more;
282 uint8_t is_aggr;
283 uint8_t more_aggr;
284 uint8_t num_delims;
285 uint8_t flags;
286 uint8_t dummy;
287 uint32_t evm0; /**< Big Endian value! */
288 uint32_t evm1; /**< Big Endian value! */
289 uint32_t evm2; /**< Big Endian value! */
290} htc_rx_status_t;
291
292/** HTC setup complete message structure
293 *
294 */
295typedef struct {
296 uint16_t message_id; /**< Big Endian value! */
297} __attribute__((packed)) htc_setup_complete_msg_t;
298
299extern errno_t htc_device_init(ath_t *, ieee80211_dev_t *, htc_device_t *);
300extern errno_t htc_init(htc_device_t *);
301extern errno_t htc_init_new_vif(htc_device_t *);
302extern errno_t htc_read_control_message(htc_device_t *, void *, size_t, size_t *);
303extern errno_t htc_read_data_message(htc_device_t *, void *, size_t, size_t *);
304extern errno_t htc_send_control_message(htc_device_t *, void *, size_t, uint8_t);
305extern errno_t htc_send_data_message(htc_device_t *, void *, size_t, uint8_t);
306
307#endif /* ATHEROS_HTC_H */
Note: See TracBrowser for help on using the repository browser.