iPXE
ath5k_desc.c File Reference
#include "ath5k.h"
#include "reg.h"
#include "base.h"

Go to the source code of this file.

Macros

#define FCS_LEN   4
#define _TX_FLAGS(_c, _flag)
#define _TX_FLAGS(_c, _flag)

Functions

 FILE_LICENCE (MIT)
 FILE_SECBOOT (FORBIDDEN)
static int ath5k_hw_setup_2word_tx_desc (struct ath5k_hw *ah, struct ath5k_desc *desc, unsigned int pkt_len, unsigned int hdr_len, enum ath5k_pkt_type type, unsigned int tx_power __unused, unsigned int tx_rate0, unsigned int tx_tries0, unsigned int key_index __unused, unsigned int antenna_mode, unsigned int flags, unsigned int rtscts_rate __unused, unsigned int rtscts_duration)
static int ath5k_hw_setup_4word_tx_desc (struct ath5k_hw *ah, struct ath5k_desc *desc, unsigned int pkt_len, unsigned int hdr_len __unused, enum ath5k_pkt_type type, unsigned int tx_power, unsigned int tx_rate0, unsigned int tx_tries0, unsigned int key_index __unused, unsigned int antenna_mode, unsigned int flags, unsigned int rtscts_rate, unsigned int rtscts_duration)
static int ath5k_hw_proc_2word_tx_status (struct ath5k_hw *ah __unused, struct ath5k_desc *desc, struct ath5k_tx_status *ts)
static int ath5k_hw_proc_4word_tx_status (struct ath5k_hw *ah __unused, struct ath5k_desc *desc, struct ath5k_tx_status *ts)
static int ath5k_hw_setup_rx_desc (struct ath5k_hw *ah __unused, struct ath5k_desc *desc, u32 size, unsigned int flags)
static int ath5k_hw_proc_5210_rx_status (struct ath5k_hw *ah __unused, struct ath5k_desc *desc, struct ath5k_rx_status *rs)
static int ath5k_hw_proc_5212_rx_status (struct ath5k_hw *ah __unused, struct ath5k_desc *desc, struct ath5k_rx_status *rs)
int ath5k_hw_init_desc_functions (struct ath5k_hw *ah)

Macro Definition Documentation

◆ FCS_LEN

#define FCS_LEN   4

◆ _TX_FLAGS [1/2]

#define _TX_FLAGS ( _c,
_flag )
Value:
if (flags & AR5K_TXDESC_##_flag) { \
tx_ctl->tx_control_##_c |= \
AR5K_2W_TX_DESC_CTL##_c##_##_flag; \
}
struct ath5k_hw_2w_tx_ctl tx_ctl
Definition desc.h:0
uint8_t flags
Flags.
Definition ena.h:7

Referenced by ath5k_hw_setup_2word_tx_desc(), and ath5k_hw_setup_4word_tx_desc().

◆ _TX_FLAGS [2/2]

#define _TX_FLAGS ( _c,
_flag )
Value:
if (flags & AR5K_TXDESC_##_flag) { \
tx_ctl->tx_control_##_c |= \
AR5K_4W_TX_DESC_CTL##_c##_##_flag; \
}

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( MIT )

◆ FILE_SECBOOT()

FILE_SECBOOT ( FORBIDDEN )

◆ ath5k_hw_setup_2word_tx_desc()

int ath5k_hw_setup_2word_tx_desc ( struct ath5k_hw * ah,
struct ath5k_desc * desc,
unsigned int pkt_len,
unsigned int hdr_len,
enum ath5k_pkt_type type,
unsigned int tx_power __unused,
unsigned int tx_rate0,
unsigned int tx_tries0,
unsigned int key_index __unused,
unsigned int antenna_mode,
unsigned int flags,
unsigned int rtscts_rate __unused,
unsigned int rtscts_duration )
static

Definition at line 43 of file ath5k_desc.c.

48{
49 u32 frame_type;
51 unsigned int frame_len;
52
53 tx_ctl = &desc->ud.ds_tx5210.tx_ctl;
54
55 /*
56 * Validate input
57 * - Zero retries don't make sense.
58 * - A zero rate will put the HW into a mode where it continously sends
59 * noise on the channel, so it is important to avoid this.
60 */
61 if (tx_tries0 == 0) {
62 DBG("ath5k: zero retries\n");
63 return -EINVAL;
64 }
65 if (tx_rate0 == 0) {
66 DBG("ath5k: zero rate\n");
67 return -EINVAL;
68 }
69
70 /* Clear descriptor */
71 memset(&desc->ud.ds_tx5210, 0, sizeof(struct ath5k_hw_5210_tx_desc));
72
73 /* Setup control descriptor */
74
75 /* Verify and set frame length */
76
77 frame_len = pkt_len + FCS_LEN;
78
79 if (frame_len & ~AR5K_2W_TX_DESC_CTL0_FRAME_LEN)
80 return -EINVAL;
81
82 tx_ctl->tx_control_0 = frame_len & AR5K_2W_TX_DESC_CTL0_FRAME_LEN;
83
84 /* Verify and set buffer length */
85
87 return -EINVAL;
88
90
91 /*
92 * Verify and set header length
93 * XXX: I only found that on 5210 code, does it work on 5211 ?
94 */
95 if (ah->ah_version == AR5K_AR5210) {
97 return -EINVAL;
98 tx_ctl->tx_control_0 |=
100 }
101
102 /*Diferences between 5210-5211*/
103 if (ah->ah_version == AR5K_AR5210) {
104 switch (type) {
108 break;
111 break;
112 default:
113 frame_type = type /*<< 2 ?*/;
114 break;
115 }
116
117 tx_ctl->tx_control_0 |=
120
121 } else {
122 tx_ctl->tx_control_0 |=
124 AR5K_REG_SM(antenna_mode,
126 tx_ctl->tx_control_1 |=
128 }
129#define _TX_FLAGS(_c, _flag) \
130 if (flags & AR5K_TXDESC_##_flag) { \
131 tx_ctl->tx_control_##_c |= \
132 AR5K_2W_TX_DESC_CTL##_c##_##_flag; \
133 }
134
135 _TX_FLAGS(0, CLRDMASK);
136 _TX_FLAGS(0, VEOL);
137 _TX_FLAGS(0, INTREQ);
138 _TX_FLAGS(0, RTSENA);
139 _TX_FLAGS(1, NOACK);
140
141#undef _TX_FLAGS
142
143 /*
144 * RTS/CTS Duration [5210 ?]
145 */
146 if ((ah->ah_version == AR5K_AR5210) &&
148 tx_ctl->tx_control_1 |= rtscts_duration &
150
151 return 0;
152}
uint16_t pkt_len
Definition aqc1xx.h:2
@ AR5K_PKT_TYPE_BEACON
Definition ath5k.h:530
@ AR5K_PKT_TYPE_PROBE_RESP
Definition ath5k.h:531
@ AR5K_PKT_TYPE_PIFS
Definition ath5k.h:532
#define AR5K_REG_SM(_val, _flags)
Definition ath5k.h:86
@ AR5K_AR5210
Definition ath5k.h:256
#define _TX_FLAGS(_c, _flag)
#define FCS_LEN
Definition ath5k_desc.c:37
#define AR5K_2W_TX_DESC_CTL0_FRAME_TYPE
Definition desc.h:145
#define AR5K_2W_TX_DESC_CTL0_XMIT_RATE
Definition desc.h:139
#define AR5K_2W_TX_DESC_CTL0_HEADER_LEN
Definition desc.h:137
#define AR5K_2W_TX_DESC_CTL0_ANT_MODE_XMIT
Definition desc.h:150
#define AR5K_TXDESC_RTSENA
Definition desc.h:330
#define AR5K_AR5210_TX_DESC_FRAME_TYPE_PIFS
Definition desc.h:181
#define AR5K_2W_TX_DESC_CTL0_FRAME_LEN
Definition desc.h:136
#define AR5K_TXDESC_CTSENA
Definition desc.h:331
#define AR5K_2W_TX_DESC_CTL1_FRAME_TYPE
Definition desc.h:171
#define AR5K_2W_TX_DESC_CTL1_RTS_DURATION
Definition desc.h:174
#define AR5K_2W_TX_DESC_CTL1_BUF_LEN
Definition desc.h:160
#define AR5K_AR5210_TX_DESC_FRAME_TYPE_NO_DELAY
Definition desc.h:180
uint32_t type
Operating system type.
Definition ena.h:1
struct ena_llq_option desc
Descriptor counts.
Definition ena.h:9
#define DBG(...)
Print a debugging message.
Definition compiler.h:498
#define EINVAL
Invalid argument.
Definition errno.h:429
void * memset(void *dest, int character, size_t len) __nonnull
uint8_t ah
Definition registers.h:1
#define u32
Definition vga.h:21

References __unused, _TX_FLAGS, ah, AR5K_2W_TX_DESC_CTL0_ANT_MODE_XMIT, AR5K_2W_TX_DESC_CTL0_FRAME_LEN, AR5K_2W_TX_DESC_CTL0_FRAME_TYPE, AR5K_2W_TX_DESC_CTL0_HEADER_LEN, AR5K_2W_TX_DESC_CTL0_XMIT_RATE, AR5K_2W_TX_DESC_CTL1_BUF_LEN, AR5K_2W_TX_DESC_CTL1_FRAME_TYPE, AR5K_2W_TX_DESC_CTL1_RTS_DURATION, AR5K_AR5210, AR5K_AR5210_TX_DESC_FRAME_TYPE_NO_DELAY, AR5K_AR5210_TX_DESC_FRAME_TYPE_PIFS, AR5K_PKT_TYPE_BEACON, AR5K_PKT_TYPE_PIFS, AR5K_PKT_TYPE_PROBE_RESP, AR5K_REG_SM, AR5K_TXDESC_CTSENA, AR5K_TXDESC_RTSENA, DBG, desc, EINVAL, FCS_LEN, flags, memset(), pkt_len, tx_ctl, type, and u32.

Referenced by ath5k_hw_init_desc_functions().

◆ ath5k_hw_setup_4word_tx_desc()

int ath5k_hw_setup_4word_tx_desc ( struct ath5k_hw * ah,
struct ath5k_desc * desc,
unsigned int pkt_len,
unsigned int hdr_len __unused,
enum ath5k_pkt_type type,
unsigned int tx_power,
unsigned int tx_rate0,
unsigned int tx_tries0,
unsigned int key_index __unused,
unsigned int antenna_mode,
unsigned int flags,
unsigned int rtscts_rate,
unsigned int rtscts_duration )
static

Definition at line 157 of file ath5k_desc.c.

164{
166 unsigned int frame_len;
167
168 tx_ctl = &desc->ud.ds_tx5212.tx_ctl;
169
170 /*
171 * Validate input
172 * - Zero retries don't make sense.
173 * - A zero rate will put the HW into a mode where it continously sends
174 * noise on the channel, so it is important to avoid this.
175 */
176 if (tx_tries0 == 0) {
177 DBG("ath5k: zero retries\n");
178 return -EINVAL;
179 }
180 if (tx_rate0 == 0) {
181 DBG("ath5k: zero rate\n");
182 return -EINVAL;
183 }
184
185 tx_power += ah->ah_txpower.txp_offset;
186 if (tx_power > AR5K_TUNE_MAX_TXPOWER)
187 tx_power = AR5K_TUNE_MAX_TXPOWER;
188
189 /* Clear descriptor */
190 memset(&desc->ud.ds_tx5212, 0, sizeof(struct ath5k_hw_5212_tx_desc));
191
192 /* Setup control descriptor */
193
194 /* Verify and set frame length */
195
196 frame_len = pkt_len + FCS_LEN;
197
198 if (frame_len & ~AR5K_4W_TX_DESC_CTL0_FRAME_LEN)
199 return -EINVAL;
200
201 tx_ctl->tx_control_0 = frame_len & AR5K_4W_TX_DESC_CTL0_FRAME_LEN;
202
203 /* Verify and set buffer length */
204
206 return -EINVAL;
207
209
210 tx_ctl->tx_control_0 |=
213 tx_ctl->tx_control_1 |= AR5K_REG_SM(type,
215 tx_ctl->tx_control_2 = AR5K_REG_SM(tx_tries0 + AR5K_TUNE_HWTXTRIES,
217 tx_ctl->tx_control_3 = tx_rate0 & AR5K_4W_TX_DESC_CTL3_XMIT_RATE0;
218
219#define _TX_FLAGS(_c, _flag) \
220 if (flags & AR5K_TXDESC_##_flag) { \
221 tx_ctl->tx_control_##_c |= \
222 AR5K_4W_TX_DESC_CTL##_c##_##_flag; \
223 }
224
225 _TX_FLAGS(0, CLRDMASK);
226 _TX_FLAGS(0, VEOL);
227 _TX_FLAGS(0, INTREQ);
228 _TX_FLAGS(0, RTSENA);
229 _TX_FLAGS(0, CTSENA);
230 _TX_FLAGS(1, NOACK);
231
232#undef _TX_FLAGS
233
234 /*
235 * RTS/CTS
236 */
238 if ((flags & AR5K_TXDESC_RTSENA) &&
240 return -EINVAL;
241 tx_ctl->tx_control_2 |= rtscts_duration &
243 tx_ctl->tx_control_3 |= AR5K_REG_SM(rtscts_rate,
245 }
246
247 return 0;
248}
#define AR5K_TUNE_MAX_TXPOWER
Definition ath5k.h:193
#define AR5K_TUNE_HWTXTRIES
Definition ath5k.h:197
#define AR5K_4W_TX_DESC_CTL3_RTS_CTS_RATE
Definition desc.h:239
#define AR5K_4W_TX_DESC_CTL1_FRAME_TYPE
Definition desc.h:207
#define AR5K_4W_TX_DESC_CTL3_XMIT_RATE0
Definition desc.h:232
#define AR5K_4W_TX_DESC_CTL2_RTS_DURATION
Definition desc.h:219
#define AR5K_4W_TX_DESC_CTL2_XMIT_TRIES0
Definition desc.h:221
#define AR5K_4W_TX_DESC_CTL1_BUF_LEN
Definition desc.h:203
#define AR5K_4W_TX_DESC_CTL0_FRAME_LEN
Definition desc.h:189
#define AR5K_4W_TX_DESC_CTL0_ANT_MODE_XMIT
Definition desc.h:195
#define AR5K_4W_TX_DESC_CTL0_XMIT_POWER
Definition desc.h:190

References __unused, _TX_FLAGS, ah, AR5K_4W_TX_DESC_CTL0_ANT_MODE_XMIT, AR5K_4W_TX_DESC_CTL0_FRAME_LEN, AR5K_4W_TX_DESC_CTL0_XMIT_POWER, AR5K_4W_TX_DESC_CTL1_BUF_LEN, AR5K_4W_TX_DESC_CTL1_FRAME_TYPE, AR5K_4W_TX_DESC_CTL2_RTS_DURATION, AR5K_4W_TX_DESC_CTL2_XMIT_TRIES0, AR5K_4W_TX_DESC_CTL3_RTS_CTS_RATE, AR5K_4W_TX_DESC_CTL3_XMIT_RATE0, AR5K_REG_SM, AR5K_TUNE_HWTXTRIES, AR5K_TUNE_MAX_TXPOWER, AR5K_TXDESC_CTSENA, AR5K_TXDESC_RTSENA, DBG, desc, EINVAL, FCS_LEN, flags, memset(), pkt_len, tx_ctl, and type.

Referenced by ath5k_hw_init_desc_functions().

◆ ath5k_hw_proc_2word_tx_status()

int ath5k_hw_proc_2word_tx_status ( struct ath5k_hw *ah __unused,
struct ath5k_desc * desc,
struct ath5k_tx_status * ts )
static

Definition at line 253 of file ath5k_desc.c.

255{
257 struct ath5k_hw_tx_status *tx_status;
258
259 tx_ctl = &desc->ud.ds_tx5210.tx_ctl;
260 tx_status = &desc->ud.ds_tx5210.tx_stat;
261
262 /* No frame has been send or error */
263 if ((tx_status->tx_status_1 & AR5K_DESC_TX_STATUS1_DONE) == 0)
264 return -EINPROGRESS;
265
266 /*
267 * Get descriptor status
268 */
269 ts->ts_tstamp = AR5K_REG_MS(tx_status->tx_status_0,
271 ts->ts_shortretry = AR5K_REG_MS(tx_status->tx_status_0,
273 ts->ts_longretry = AR5K_REG_MS(tx_status->tx_status_0,
275 /*TODO: ts->ts_virtcol + test*/
276 ts->ts_seqnum = AR5K_REG_MS(tx_status->tx_status_1,
278 ts->ts_rssi = AR5K_REG_MS(tx_status->tx_status_1,
280 ts->ts_antenna = 1;
281 ts->ts_status = 0;
282 ts->ts_rate[0] = AR5K_REG_MS(tx_ctl->tx_control_0,
284 ts->ts_retry[0] = ts->ts_longretry;
285 ts->ts_final_idx = 0;
286
288 if (tx_status->tx_status_0 &
291
294
297 }
298
299 return 0;
300}
#define AR5K_TXERR_FIFO
Definition ath5k.h:435
#define AR5K_TXERR_FILT
Definition ath5k.h:434
#define AR5K_REG_MS(_val, _flags)
Definition ath5k.h:90
#define AR5K_TXERR_XRETRY
Definition ath5k.h:433
#define AR5K_DESC_TX_STATUS0_LONG_RETRY_COUNT
Definition desc.h:266
#define AR5K_DESC_TX_STATUS0_EXCESSIVE_RETRIES
Definition desc.h:253
#define AR5K_DESC_TX_STATUS1_SEQ_NUM
Definition desc.h:275
#define AR5K_DESC_TX_STATUS1_ACK_SIG_STRENGTH
Definition desc.h:277
#define AR5K_DESC_TX_STATUS0_SEND_TIMESTAMP
Definition desc.h:270
#define AR5K_DESC_TX_STATUS0_SHORT_RETRY_COUNT
Definition desc.h:260
#define AR5K_DESC_TX_STATUS0_FRAME_XMIT_OK
Definition desc.h:252
#define AR5K_DESC_TX_STATUS0_FIFO_UNDERRUN
Definition desc.h:254
#define AR5K_DESC_TX_STATUS0_FILTERED
Definition desc.h:255
#define AR5K_DESC_TX_STATUS1_DONE
Definition desc.h:274
#define EINPROGRESS
Operation in progress.
Definition errno.h:419
u8 ts_rate[4]
Definition ath5k.h:422
u8 ts_retry[4]
Definition ath5k.h:423

References __unused, ah, AR5K_2W_TX_DESC_CTL0_XMIT_RATE, AR5K_DESC_TX_STATUS0_EXCESSIVE_RETRIES, AR5K_DESC_TX_STATUS0_FIFO_UNDERRUN, AR5K_DESC_TX_STATUS0_FILTERED, AR5K_DESC_TX_STATUS0_FRAME_XMIT_OK, AR5K_DESC_TX_STATUS0_LONG_RETRY_COUNT, AR5K_DESC_TX_STATUS0_SEND_TIMESTAMP, AR5K_DESC_TX_STATUS0_SHORT_RETRY_COUNT, AR5K_DESC_TX_STATUS1_ACK_SIG_STRENGTH, AR5K_DESC_TX_STATUS1_DONE, AR5K_DESC_TX_STATUS1_SEQ_NUM, AR5K_REG_MS, AR5K_TXERR_FIFO, AR5K_TXERR_FILT, AR5K_TXERR_XRETRY, desc, EINPROGRESS, ath5k_tx_status::ts_antenna, ath5k_tx_status::ts_final_idx, ath5k_tx_status::ts_longretry, ath5k_tx_status::ts_rate, ath5k_tx_status::ts_retry, ath5k_tx_status::ts_rssi, ath5k_tx_status::ts_seqnum, ath5k_tx_status::ts_shortretry, ath5k_tx_status::ts_status, ath5k_tx_status::ts_tstamp, tx_ctl, ath5k_hw_tx_status::tx_status_0, and ath5k_hw_tx_status::tx_status_1.

Referenced by ath5k_hw_init_desc_functions().

◆ ath5k_hw_proc_4word_tx_status()

int ath5k_hw_proc_4word_tx_status ( struct ath5k_hw *ah __unused,
struct ath5k_desc * desc,
struct ath5k_tx_status * ts )
static

Definition at line 305 of file ath5k_desc.c.

307{
309 struct ath5k_hw_tx_status *tx_status;
310
311 tx_ctl = &desc->ud.ds_tx5212.tx_ctl;
312 tx_status = &desc->ud.ds_tx5212.tx_stat;
313
314 /* No frame has been send or error */
315 if (!(tx_status->tx_status_1 & AR5K_DESC_TX_STATUS1_DONE))
316 return -EINPROGRESS;
317
318 /*
319 * Get descriptor status
320 */
321 ts->ts_tstamp = AR5K_REG_MS(tx_status->tx_status_0,
323 ts->ts_shortretry = AR5K_REG_MS(tx_status->tx_status_0,
325 ts->ts_longretry = AR5K_REG_MS(tx_status->tx_status_0,
327 ts->ts_seqnum = AR5K_REG_MS(tx_status->tx_status_1,
329 ts->ts_rssi = AR5K_REG_MS(tx_status->tx_status_1,
331 ts->ts_antenna = (tx_status->tx_status_1 &
333 ts->ts_status = 0;
334
335 ts->ts_final_idx = AR5K_REG_MS(tx_status->tx_status_1,
337
338 ts->ts_retry[0] = ts->ts_longretry;
339 ts->ts_rate[0] = tx_ctl->tx_control_3 &
341
342 /* TX error */
344 if (tx_status->tx_status_0 &
347
350
353 }
354
355 return 0;
356}
#define AR5K_DESC_TX_STATUS1_XMIT_ANTENNA
Definition desc.h:282
#define AR5K_DESC_TX_STATUS1_FINAL_TS_INDEX
Definition desc.h:279

References __unused, ah, AR5K_4W_TX_DESC_CTL3_XMIT_RATE0, AR5K_DESC_TX_STATUS0_EXCESSIVE_RETRIES, AR5K_DESC_TX_STATUS0_FIFO_UNDERRUN, AR5K_DESC_TX_STATUS0_FILTERED, AR5K_DESC_TX_STATUS0_FRAME_XMIT_OK, AR5K_DESC_TX_STATUS0_LONG_RETRY_COUNT, AR5K_DESC_TX_STATUS0_SEND_TIMESTAMP, AR5K_DESC_TX_STATUS0_SHORT_RETRY_COUNT, AR5K_DESC_TX_STATUS1_ACK_SIG_STRENGTH, AR5K_DESC_TX_STATUS1_DONE, AR5K_DESC_TX_STATUS1_FINAL_TS_INDEX, AR5K_DESC_TX_STATUS1_SEQ_NUM, AR5K_DESC_TX_STATUS1_XMIT_ANTENNA, AR5K_REG_MS, AR5K_TXERR_FIFO, AR5K_TXERR_FILT, AR5K_TXERR_XRETRY, desc, EINPROGRESS, ath5k_tx_status::ts_antenna, ath5k_tx_status::ts_final_idx, ath5k_tx_status::ts_longretry, ath5k_tx_status::ts_rate, ath5k_tx_status::ts_retry, ath5k_tx_status::ts_rssi, ath5k_tx_status::ts_seqnum, ath5k_tx_status::ts_shortretry, ath5k_tx_status::ts_status, ath5k_tx_status::ts_tstamp, tx_ctl, ath5k_hw_tx_status::tx_status_0, and ath5k_hw_tx_status::tx_status_1.

Referenced by ath5k_hw_init_desc_functions().

◆ ath5k_hw_setup_rx_desc()

int ath5k_hw_setup_rx_desc ( struct ath5k_hw *ah __unused,
struct ath5k_desc * desc,
u32 size,
unsigned int flags )
static

Definition at line 365 of file ath5k_desc.c.

368{
369 struct ath5k_hw_rx_ctl *rx_ctl;
370
371 rx_ctl = &desc->ud.ds_rx.rx_ctl;
372
373 /*
374 * Clear the descriptor
375 * If we don't clean the status descriptor,
376 * while scanning we get too many results,
377 * most of them virtual, after some secs
378 * of scanning system hangs. M.F.
379 */
380 memset(&desc->ud.ds_rx, 0, sizeof(struct ath5k_hw_all_rx_desc));
381
382 /* Setup descriptor */
383 rx_ctl->rx_control_1 = size & AR5K_DESC_RX_CTL1_BUF_LEN;
384 if (rx_ctl->rx_control_1 != size)
385 return -EINVAL;
386
388 rx_ctl->rx_control_1 |= AR5K_DESC_RX_CTL1_INTREQ;
389
390 return 0;
391}
struct ath5k_hw_rx_ctl rx_ctl
Definition desc.h:0
#define AR5K_DESC_RX_CTL1_BUF_LEN
Definition desc.h:38
#define AR5K_DESC_RX_CTL1_INTREQ
Definition desc.h:39
#define AR5K_RXDESC_INTREQ
Definition desc.h:326
uint16_t size
Buffer size.
Definition dwmac.h:3

References __unused, ah, AR5K_DESC_RX_CTL1_BUF_LEN, AR5K_DESC_RX_CTL1_INTREQ, AR5K_RXDESC_INTREQ, desc, EINVAL, flags, memset(), rx_ctl, size, and u32.

Referenced by ath5k_hw_init_desc_functions().

◆ ath5k_hw_proc_5210_rx_status()

int ath5k_hw_proc_5210_rx_status ( struct ath5k_hw *ah __unused,
struct ath5k_desc * desc,
struct ath5k_rx_status * rs )
static

Definition at line 396 of file ath5k_desc.c.

398{
399 struct ath5k_hw_rx_status *rx_status;
400
401 rx_status = &desc->ud.ds_rx.u.rx_stat;
402
403 /* No frame received / not ready */
405 return -EINPROGRESS;
406
407 /*
408 * Frame receive status
409 */
410 rs->rs_datalen = rx_status->rx_status_0 &
412 rs->rs_rssi = AR5K_REG_MS(rx_status->rx_status_0,
414 rs->rs_rate = AR5K_REG_MS(rx_status->rx_status_0,
416 rs->rs_antenna = AR5K_REG_MS(rx_status->rx_status_0,
418 rs->rs_more = !!(rx_status->rx_status_0 &
420 /* TODO: this timestamp is 13 bit, later on we assume 15 bit */
421 rs->rs_tstamp = AR5K_REG_MS(rx_status->rx_status_1,
423 rs->rs_status = 0;
424 rs->rs_phyerr = 0;
426
427 /*
428 * Receive/descriptor errors
429 */
430 if (!(rx_status->rx_status_1 &
432 if (rx_status->rx_status_1 &
435
436 if (rx_status->rx_status_1 &
439
440 if (rx_status->rx_status_1 &
443 rs->rs_phyerr |= AR5K_REG_MS(rx_status->rx_status_1,
445 }
446
447 if (rx_status->rx_status_1 &
450 }
451
452 return 0;
453}
#define AR5K_RXERR_CRC
Definition ath5k.h:581
#define AR5K_RXERR_PHY
Definition ath5k.h:582
#define AR5K_RXERR_DECRYPT
Definition ath5k.h:584
#define AR5K_RXERR_FIFO
Definition ath5k.h:583
#define AR5K_RXKEYIX_INVALID
Definition ath5k.h:586
#define AR5K_5210_RX_DESC_STATUS0_RECEIVE_RATE
Definition desc.h:54
#define AR5K_5210_RX_DESC_STATUS1_FIFO_OVERRUN
Definition desc.h:65
#define AR5K_5210_RX_DESC_STATUS0_RECEIVE_SIGNAL
Definition desc.h:56
#define AR5K_5210_RX_DESC_STATUS0_MORE
Definition desc.h:53
#define AR5K_5210_RX_DESC_STATUS0_DATA_LEN
Definition desc.h:52
#define AR5K_5210_RX_DESC_STATUS1_CRC_ERROR
Definition desc.h:64
#define AR5K_5210_RX_DESC_STATUS1_PHY_ERROR
Definition desc.h:67
#define AR5K_5210_RX_DESC_STATUS1_RECEIVE_TIMESTAMP
Definition desc.h:72
#define AR5K_5210_RX_DESC_STATUS1_FRAME_RECEIVE_OK
Definition desc.h:63
#define AR5K_5210_RX_DESC_STATUS1_DONE
Definition desc.h:62
#define AR5K_5210_RX_DESC_STATUS1_DECRYPT_CRC_ERROR
Definition desc.h:66
#define AR5K_5210_RX_DESC_STATUS0_RECEIVE_ANTENNA
Definition desc.h:58

References __unused, ah, AR5K_5210_RX_DESC_STATUS0_DATA_LEN, AR5K_5210_RX_DESC_STATUS0_MORE, AR5K_5210_RX_DESC_STATUS0_RECEIVE_ANTENNA, AR5K_5210_RX_DESC_STATUS0_RECEIVE_RATE, AR5K_5210_RX_DESC_STATUS0_RECEIVE_SIGNAL, AR5K_5210_RX_DESC_STATUS1_CRC_ERROR, AR5K_5210_RX_DESC_STATUS1_DECRYPT_CRC_ERROR, AR5K_5210_RX_DESC_STATUS1_DONE, AR5K_5210_RX_DESC_STATUS1_FIFO_OVERRUN, AR5K_5210_RX_DESC_STATUS1_FRAME_RECEIVE_OK, AR5K_5210_RX_DESC_STATUS1_PHY_ERROR, AR5K_5210_RX_DESC_STATUS1_RECEIVE_TIMESTAMP, AR5K_REG_MS, AR5K_RXERR_CRC, AR5K_RXERR_DECRYPT, AR5K_RXERR_FIFO, AR5K_RXERR_PHY, AR5K_RXKEYIX_INVALID, desc, EINPROGRESS, ath5k_rx_status::rs_antenna, ath5k_rx_status::rs_datalen, ath5k_rx_status::rs_keyix, ath5k_rx_status::rs_more, ath5k_rx_status::rs_phyerr, ath5k_rx_status::rs_rate, ath5k_rx_status::rs_rssi, ath5k_rx_status::rs_status, ath5k_rx_status::rs_tstamp, ath5k_hw_rx_status::rx_status_0, and ath5k_hw_rx_status::rx_status_1.

Referenced by ath5k_hw_init_desc_functions().

◆ ath5k_hw_proc_5212_rx_status()

int ath5k_hw_proc_5212_rx_status ( struct ath5k_hw *ah __unused,
struct ath5k_desc * desc,
struct ath5k_rx_status * rs )
static

Definition at line 458 of file ath5k_desc.c.

460{
461 struct ath5k_hw_rx_status *rx_status;
463
464 rx_status = &desc->ud.ds_rx.u.rx_stat;
465
466 /* Overlay on error */
467 rx_err = &desc->ud.ds_rx.u.rx_err;
468
469 /* No frame received / not ready */
471 return -EINPROGRESS;
472
473 /*
474 * Frame receive status
475 */
476 rs->rs_datalen = rx_status->rx_status_0 &
478 rs->rs_rssi = AR5K_REG_MS(rx_status->rx_status_0,
480 rs->rs_rate = AR5K_REG_MS(rx_status->rx_status_0,
482 rs->rs_antenna = AR5K_REG_MS(rx_status->rx_status_0,
484 rs->rs_more = !!(rx_status->rx_status_0 &
486 rs->rs_tstamp = AR5K_REG_MS(rx_status->rx_status_1,
488 rs->rs_status = 0;
489 rs->rs_phyerr = 0;
491
492 /*
493 * Receive/descriptor errors
494 */
495 if (!(rx_status->rx_status_1 &
497 if (rx_status->rx_status_1 &
500
501 if (rx_status->rx_status_1 &
504 rs->rs_phyerr |= AR5K_REG_MS(rx_err->rx_error_1,
506 }
507
508 if (rx_status->rx_status_1 &
511
512 if (rx_status->rx_status_1 &
515 }
516
517 return 0;
518}
#define AR5K_RXERR_MIC
Definition ath5k.h:585
#define AR5K_5212_RX_DESC_STATUS0_RECEIVE_ANTENNA
Definition desc.h:85
#define AR5K_5212_RX_DESC_STATUS1_PHY_ERROR
Definition desc.h:93
#define AR5K_5212_RX_DESC_STATUS1_MIC_ERROR
Definition desc.h:94
#define AR5K_5212_RX_DESC_STATUS0_MORE
Definition desc.h:79
#define AR5K_5212_RX_DESC_STATUS1_DECRYPT_CRC_ERROR
Definition desc.h:92
#define AR5K_5212_RX_DESC_STATUS1_RECEIVE_TIMESTAMP
Definition desc.h:98
#define AR5K_5212_RX_DESC_STATUS0_DATA_LEN
Definition desc.h:78
#define AR5K_5212_RX_DESC_STATUS0_RECEIVE_SIGNAL
Definition desc.h:83
#define AR5K_RX_DESC_ERROR1_PHY_ERROR_CODE
Definition desc.h:114
#define AR5K_5212_RX_DESC_STATUS1_FRAME_RECEIVE_OK
Definition desc.h:90
struct ath5k_hw_rx_error rx_err
Definition desc.h:3
#define AR5K_5212_RX_DESC_STATUS0_RECEIVE_RATE
Definition desc.h:81
#define AR5K_5212_RX_DESC_STATUS1_DONE
Definition desc.h:89
#define AR5K_5212_RX_DESC_STATUS1_CRC_ERROR
Definition desc.h:91

References __unused, ah, AR5K_5212_RX_DESC_STATUS0_DATA_LEN, AR5K_5212_RX_DESC_STATUS0_MORE, AR5K_5212_RX_DESC_STATUS0_RECEIVE_ANTENNA, AR5K_5212_RX_DESC_STATUS0_RECEIVE_RATE, AR5K_5212_RX_DESC_STATUS0_RECEIVE_SIGNAL, AR5K_5212_RX_DESC_STATUS1_CRC_ERROR, AR5K_5212_RX_DESC_STATUS1_DECRYPT_CRC_ERROR, AR5K_5212_RX_DESC_STATUS1_DONE, AR5K_5212_RX_DESC_STATUS1_FRAME_RECEIVE_OK, AR5K_5212_RX_DESC_STATUS1_MIC_ERROR, AR5K_5212_RX_DESC_STATUS1_PHY_ERROR, AR5K_5212_RX_DESC_STATUS1_RECEIVE_TIMESTAMP, AR5K_REG_MS, AR5K_RX_DESC_ERROR1_PHY_ERROR_CODE, AR5K_RXERR_CRC, AR5K_RXERR_DECRYPT, AR5K_RXERR_MIC, AR5K_RXERR_PHY, AR5K_RXKEYIX_INVALID, desc, EINPROGRESS, ath5k_rx_status::rs_antenna, ath5k_rx_status::rs_datalen, ath5k_rx_status::rs_keyix, ath5k_rx_status::rs_more, ath5k_rx_status::rs_phyerr, ath5k_rx_status::rs_rate, ath5k_rx_status::rs_rssi, ath5k_rx_status::rs_status, ath5k_rx_status::rs_tstamp, rx_err, ath5k_hw_rx_status::rx_status_0, and ath5k_hw_rx_status::rx_status_1.

Referenced by ath5k_hw_init_desc_functions().

◆ ath5k_hw_init_desc_functions()

int ath5k_hw_init_desc_functions ( struct ath5k_hw * ah)

Definition at line 523 of file ath5k_desc.c.

524{
525
526 if (ah->ah_version != AR5K_AR5210 &&
527 ah->ah_version != AR5K_AR5211 &&
528 ah->ah_version != AR5K_AR5212)
529 return -ENOTSUP;
530
531 if (ah->ah_version == AR5K_AR5212) {
532 ah->ah_setup_rx_desc = ath5k_hw_setup_rx_desc;
533 ah->ah_setup_tx_desc = ath5k_hw_setup_4word_tx_desc;
534 ah->ah_proc_tx_desc = ath5k_hw_proc_4word_tx_status;
535 } else {
536 ah->ah_setup_rx_desc = ath5k_hw_setup_rx_desc;
537 ah->ah_setup_tx_desc = ath5k_hw_setup_2word_tx_desc;
538 ah->ah_proc_tx_desc = ath5k_hw_proc_2word_tx_status;
539 }
540
541 if (ah->ah_version == AR5K_AR5212)
542 ah->ah_proc_rx_desc = ath5k_hw_proc_5212_rx_status;
543 else if (ah->ah_version <= AR5K_AR5211)
544 ah->ah_proc_rx_desc = ath5k_hw_proc_5210_rx_status;
545
546 return 0;
547}
@ AR5K_AR5212
Definition ath5k.h:258
@ AR5K_AR5211
Definition ath5k.h:257
static int ath5k_hw_setup_rx_desc(struct ath5k_hw *ah __unused, struct ath5k_desc *desc, u32 size, unsigned int flags)
Definition ath5k_desc.c:365
static int ath5k_hw_proc_2word_tx_status(struct ath5k_hw *ah __unused, struct ath5k_desc *desc, struct ath5k_tx_status *ts)
Definition ath5k_desc.c:253
static int ath5k_hw_setup_4word_tx_desc(struct ath5k_hw *ah, struct ath5k_desc *desc, unsigned int pkt_len, unsigned int hdr_len __unused, enum ath5k_pkt_type type, unsigned int tx_power, unsigned int tx_rate0, unsigned int tx_tries0, unsigned int key_index __unused, unsigned int antenna_mode, unsigned int flags, unsigned int rtscts_rate, unsigned int rtscts_duration)
Definition ath5k_desc.c:157
static int ath5k_hw_setup_2word_tx_desc(struct ath5k_hw *ah, struct ath5k_desc *desc, unsigned int pkt_len, unsigned int hdr_len, enum ath5k_pkt_type type, unsigned int tx_power __unused, unsigned int tx_rate0, unsigned int tx_tries0, unsigned int key_index __unused, unsigned int antenna_mode, unsigned int flags, unsigned int rtscts_rate __unused, unsigned int rtscts_duration)
Definition ath5k_desc.c:43
static int ath5k_hw_proc_5212_rx_status(struct ath5k_hw *ah __unused, struct ath5k_desc *desc, struct ath5k_rx_status *rs)
Definition ath5k_desc.c:458
static int ath5k_hw_proc_4word_tx_status(struct ath5k_hw *ah __unused, struct ath5k_desc *desc, struct ath5k_tx_status *ts)
Definition ath5k_desc.c:305
static int ath5k_hw_proc_5210_rx_status(struct ath5k_hw *ah __unused, struct ath5k_desc *desc, struct ath5k_rx_status *rs)
Definition ath5k_desc.c:396
#define ENOTSUP
Operation not supported.
Definition errno.h:590

References ah, AR5K_AR5210, AR5K_AR5211, AR5K_AR5212, ath5k_hw_proc_2word_tx_status(), ath5k_hw_proc_4word_tx_status(), ath5k_hw_proc_5210_rx_status(), ath5k_hw_proc_5212_rx_status(), ath5k_hw_setup_2word_tx_desc(), ath5k_hw_setup_4word_tx_desc(), ath5k_hw_setup_rx_desc(), and ENOTSUP.

Referenced by ath5k_hw_attach().