iPXE
ath9k_init.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2008-2011 Atheros Communications Inc.
3 *
4 * Modified for iPXE by Scott K Logan <logans@cottsay.net> July 2011
5 * Original from Linux kernel 3.0.1
6 *
7 * Permission to use, copy, modify, and/or distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20FILE_LICENCE ( BSD2 );
21FILE_SECBOOT ( FORBIDDEN );
22
23#include <ipxe/malloc.h>
24#include <ipxe/pci_io.h>
25#include <ipxe/pci.h>
26#include <ipxe/ethernet.h>
27
28#include "ath9k.h"
29
31/* We use the hw_value as an index into our private channel structure */
32
33#define CHAN2G(_freq, _idx) { \
34 .band = NET80211_BAND_2GHZ, \
35 .center_freq = (_freq), \
36 .hw_value = (_idx), \
37 .maxpower = 20, \
38}
39
40#define CHAN5G(_freq, _idx) { \
41 .band = NET80211_BAND_5GHZ, \
42 .center_freq = (_freq), \
43 .hw_value = (_idx), \
44 .maxpower = 20, \
45}
46
47/* Some 2 GHz radios are actually tunable on 2312-2732
48 * on 5 MHz steps, we support the channels which we know
49 * we have calibration data for all cards though to make
50 * this static */
51static const struct net80211_channel ath9k_2ghz_chantable[] = {
52 CHAN2G(2412, 0), /* Channel 1 */
53 CHAN2G(2417, 1), /* Channel 2 */
54 CHAN2G(2422, 2), /* Channel 3 */
55 CHAN2G(2427, 3), /* Channel 4 */
56 CHAN2G(2432, 4), /* Channel 5 */
57 CHAN2G(2437, 5), /* Channel 6 */
58 CHAN2G(2442, 6), /* Channel 7 */
59 CHAN2G(2447, 7), /* Channel 8 */
60 CHAN2G(2452, 8), /* Channel 9 */
61 CHAN2G(2457, 9), /* Channel 10 */
62 CHAN2G(2462, 10), /* Channel 11 */
63 CHAN2G(2467, 11), /* Channel 12 */
64 CHAN2G(2472, 12), /* Channel 13 */
65 CHAN2G(2484, 13), /* Channel 14 */
66};
67
68/* Some 5 GHz radios are actually tunable on XXXX-YYYY
69 * on 5 MHz steps, we support the channels which we know
70 * we have calibration data for all cards though to make
71 * this static */
72static const struct net80211_channel ath9k_5ghz_chantable[] = {
73 /* _We_ call this UNII 1 */
74 CHAN5G(5180, 14), /* Channel 36 */
75 CHAN5G(5200, 15), /* Channel 40 */
76 CHAN5G(5220, 16), /* Channel 44 */
77 CHAN5G(5240, 17), /* Channel 48 */
78 /* _We_ call this UNII 2 */
79 CHAN5G(5260, 18), /* Channel 52 */
80 CHAN5G(5280, 19), /* Channel 56 */
81 CHAN5G(5300, 20), /* Channel 60 */
82 CHAN5G(5320, 21), /* Channel 64 */
83 /* _We_ call this "Middle band" */
84 CHAN5G(5500, 22), /* Channel 100 */
85 CHAN5G(5520, 23), /* Channel 104 */
86 CHAN5G(5540, 24), /* Channel 108 */
87 CHAN5G(5560, 25), /* Channel 112 */
88 CHAN5G(5580, 26), /* Channel 116 */
89 CHAN5G(5600, 27), /* Channel 120 */
90 CHAN5G(5620, 28), /* Channel 124 */
91 CHAN5G(5640, 29), /* Channel 128 */
92 CHAN5G(5660, 30), /* Channel 132 */
93 CHAN5G(5680, 31), /* Channel 136 */
94 CHAN5G(5700, 32), /* Channel 140 */
95 /* _We_ call this UNII 3 */
96 CHAN5G(5745, 33), /* Channel 149 */
97 CHAN5G(5765, 34), /* Channel 153 */
98 CHAN5G(5785, 35), /* Channel 157 */
99 CHAN5G(5805, 36), /* Channel 161 */
100 CHAN5G(5825, 37), /* Channel 165 */
101};
102
103/* Atheros hardware rate code addition for short premble */
104#define SHPCHECK(__hw_rate, __flags) \
105 ((__flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE) ? (__hw_rate | 0x04 ) : 0)
106
107#define RATE(_bitrate, _hw_rate, _flags) { \
108 .bitrate = (_bitrate), \
109 .flags = (_flags), \
110 .hw_value = (_hw_rate), \
111 .hw_value_short = (SHPCHECK(_hw_rate, _flags)) \
112}
113
115 RATE(10, 0x1b, 0),
119 RATE(60, 0x0b, 0),
120 RATE(90, 0x0f, 0),
121 RATE(120, 0x0a, 0),
122 RATE(180, 0x0e, 0),
123 RATE(240, 0x09, 0),
124 RATE(360, 0x0d, 0),
125 RATE(480, 0x08, 0),
126 RATE(540, 0x0c, 0),
127};
128
129static void ath9k_deinit_softc(struct ath_softc *sc);
130
131/*
132 * Read and write, they both share the same lock. We do this to serialize
133 * reads and writes on Atheros 802.11n PCI devices only. This is required
134 * as the FIFO on these devices can only accept sanely 2 requests.
135 */
136
137static void ath9k_iowrite32(void *hw_priv, u32 val, u32 reg_offset)
138{
139 struct ath_hw *ah = (struct ath_hw *) hw_priv;
141 struct ath_softc *sc = (struct ath_softc *) common->priv;
142
143 writel(val, sc->mem + reg_offset);
144}
145
146static unsigned int ath9k_ioread32(void *hw_priv, u32 reg_offset)
147{
148 struct ath_hw *ah = (struct ath_hw *) hw_priv;
150 struct ath_softc *sc = (struct ath_softc *) common->priv;
151 u32 val;
152
153 val = readl(sc->mem + reg_offset);
154 return val;
155}
156
157static unsigned int ath9k_reg_rmw(void *hw_priv, u32 reg_offset, u32 set, u32 clr)
158{
159 struct ath_hw *ah = (struct ath_hw *) hw_priv;
161 struct ath_softc *sc = (struct ath_softc *) common->priv;
162 u32 val;
163
164 val = readl(sc->mem + reg_offset);
165 val &= ~clr;
166 val |= set;
167 writel(val, sc->mem + reg_offset);
168
169 return val;
170}
171
172/**************************/
173/* Initialization */
174/**************************/
175
176/*
177 * This function will allocate both the DMA descriptor structure, and the
178 * buffers it contains. These are used to contain the descriptors used
179 * by the system.
180*/
181int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
182 struct list_head *head, const char *name,
183 int nbuf, int ndesc, int is_tx)
184{
185#define DS2PHYS(_dd, _ds) \
186 ((_dd)->dd_desc_paddr + ((char *)(_ds) - (char *)(_dd)->dd_desc))
187#define ATH_DESC_4KB_BOUND_CHECK(_daddr) ((((_daddr) & 0xFFF) > 0xF9F) ? 1 : 0)
188 u8 *ds;
189 struct ath_buf *bf;
190 int i, bsize, error, desc_len;
191
192 DBG2("ath9k: %s DMA: %d buffers %d desc/buf\n",
193 name, nbuf, ndesc);
194
196
197 if (is_tx)
198 desc_len = sc->sc_ah->caps.tx_desc_len;
199 else
200 desc_len = sizeof(struct ath_desc);
201
202 /* ath_desc must be a multiple of DWORDs */
203 if ((desc_len % 4) != 0) {
204 DBG("ath9k: ath_desc not DWORD aligned\n");
205 error = -ENOMEM;
206 goto fail;
207 }
208
209 dd->dd_desc_len = desc_len * nbuf * ndesc;
210
211 /*
212 * Need additional DMA memory because we can't use
213 * descriptors that cross the 4K page boundary.
214 * However, iPXE only utilizes 16 buffers, which
215 * will never make up more than half of one page,
216 * so we will only ever skip 1 descriptor, if that.
217 */
219 u32 ndesc_skipped = 1;
220 u32 dma_len;
221
222 dma_len = ndesc_skipped * desc_len;
223 dd->dd_desc_len += dma_len;
224 }
225
226 /* allocate descriptors */
227 dd->dd_desc = malloc_phys(dd->dd_desc_len, 16);
228 if (dd->dd_desc == NULL) {
229 error = -ENOMEM;
230 goto fail;
231 }
233 ds = (u8 *) dd->dd_desc;
234 DBG2("ath9k: %s DMA map: %p (%d) -> %llx (%d)\n",
235 name, ds, (u32) dd->dd_desc_len,
236 ito64(dd->dd_desc_paddr), /*XXX*/(u32) dd->dd_desc_len);
237
238 /* allocate buffers */
239 bsize = sizeof(struct ath_buf) * nbuf;
240 bf = zalloc(bsize);
241 if (bf == NULL) {
242 error = -ENOMEM;
243 goto fail2;
244 }
245 dd->dd_bufptr = bf;
246
247 for (i = 0; i < nbuf; i++, bf++, ds += (desc_len * ndesc)) {
248 bf->bf_desc = ds;
249 bf->bf_daddr = DS2PHYS(dd, ds);
250
251 if (!(sc->sc_ah->caps.hw_caps &
253 /*
254 * Skip descriptor addresses which can cause 4KB
255 * boundary crossing (addr + length) with a 32 dword
256 * descriptor fetch.
257 */
259 ds += (desc_len * ndesc);
260 bf->bf_desc = ds;
261 bf->bf_daddr = DS2PHYS(dd, ds);
262 }
263 }
264 list_add_tail(&bf->list, head);
265 }
266 return 0;
267fail2:
268 free_phys(dd->dd_desc, dd->dd_desc_len);
269fail:
270 memset(dd, 0, sizeof(*dd));
271 return error;
272#undef ATH_DESC_4KB_BOUND_CHECK
273#undef DS2PHYS
274}
275
277{
278 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
279 unsigned int i = 0;
280
281 /* Get the hardware key cache size. */
282 common->keymax = AR_KEYTABLE_SIZE;
283
284 /*
285 * Reset the key cache since some parts do not
286 * reset the contents on initial power up.
287 */
288 for (i = 0; i < common->keymax; i++)
290
291 /*
292 * Check whether the separate key cache entries
293 * are required to handle both tx+rx MIC keys.
294 * With split mic keys the number of stations is limited
295 * to 27 otherwise 59.
296 */
298 common->crypt_caps |= ATH_CRYPT_CAP_MIC_COMBINED;
299}
300
301static int ath9k_init_queues(struct ath_softc *sc)
302{
303 int i = 0;
304
305 for (i = 0; i < WME_NUM_AC; i++) {
307 sc->tx.txq_map[i]->mac80211_qnum = i;
308 }
309 return 0;
310}
311
313{
314 unsigned int i;
315
317
318 if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ) {
320
322
323 for (i = 0; i < ARRAY_SIZE(ath9k_legacy_rates); i++)
326 }
327
328 if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ) {
330
332
333 for (i = 4; i < ARRAY_SIZE(ath9k_legacy_rates); i++)
334 sc->hwinfo->rates[NET80211_BAND_5GHZ][i - 4] = ath9k_legacy_rates[i].bitrate;
336 }
337 return 0;
338}
339
340static void ath9k_init_misc(struct ath_softc *sc)
341{
342 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
343
344 common->ani.timer = 0;
345
347
348 common->tx_chainmask = sc->sc_ah->caps.tx_chainmask;
349 common->rx_chainmask = sc->sc_ah->caps.rx_chainmask;
350
353
354 memcpy(common->bssidmask, eth_broadcast, ETH_ALEN);
355}
356
357static int ath9k_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
358 const struct ath_bus_ops *bus_ops)
359{
360 struct ath_hw *ah = NULL;
361 struct ath_common *common;
362 int ret = 0, i;
363 int csz = 0;
364
365 ah = zalloc(sizeof(struct ath_hw));
366 if (!ah)
367 return -ENOMEM;
368
369 ah->dev = sc->dev;
370 ah->hw_version.devid = devid;
371 ah->hw_version.subsysid = subsysid;
372 ah->reg_ops.read = ath9k_ioread32;
373 ah->reg_ops.write = ath9k_iowrite32;
374 ah->reg_ops.rmw = ath9k_reg_rmw;
375 sc->sc_ah = ah;
376
377 sc->hwinfo = zalloc(sizeof(*sc->hwinfo));
378 if (!sc->hwinfo) {
379 DBG("ath9k: cannot allocate 802.11 hardware info structure\n");
380 return -ENOMEM;
381 }
382
383 ah->ah_flags |= AH_USE_EEPROM;
384 sc->sc_ah->led_pin = -1;
385
387 common->ops = &ah->reg_ops;
388 common->bus_ops = bus_ops;
389 common->ah = ah;
390 common->dev = sc->dev;
391 common->priv = sc;
392
394
395 /*
396 * Cache line size is used to size and align various
397 * structures used to communicate with the hardware.
398 */
400 common->cachelsz = csz << 2; /* convert to bytes */
401
402 /* Initializes the hardware for all supported chipsets */
403 ret = ath9k_hw_init(ah);
404 if (ret)
405 goto err_hw;
406
407 memcpy(sc->hwinfo->hwaddr, common->macaddr, ETH_ALEN);
408
409 ret = ath9k_init_queues(sc);
410 if (ret)
411 goto err_queues;
412
414 if (ret)
415 goto err_btcoex;
416
418 ath9k_init_misc(sc);
419
420 return 0;
421
422err_btcoex:
423 for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
424 if (ATH_TXQ_SETUP(sc, i))
425 ath_tx_cleanupq(sc, &sc->tx.txq[i]);
426err_queues:
428err_hw:
429 free(sc->hwinfo);
430 sc->hwinfo = NULL;
431
432 free(ah);
433 sc->sc_ah = NULL;
434
435 return ret;
436}
437
438static void ath9k_init_band_txpower(struct ath_softc *sc, int band)
439{
440 struct net80211_channel *chan;
441 struct ath_hw *ah = sc->sc_ah;
443 int i;
444
445 for (i = 0; i < sc->hwinfo->nr_channels; i++) {
446 chan = &sc->hwinfo->channels[i];
447 if(chan->band != band)
448 continue;
449 ah->curchan = &ah->channels[chan->hw_value];
451 chan->maxpower = reg->max_power_level / 2;
452 }
453}
454
456{
457 struct ath_hw *ah = sc->sc_ah;
458 struct ath9k_channel *curchan = ah->curchan;
459
460 if (ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ)
462 if (ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
464
465 ah->curchan = curchan;
466}
467
469{
470 sc->hwinfo->flags = NET80211_HW_RX_HAS_FCS;
471 sc->hwinfo->signal_type = NET80211_SIGNAL_DB;
472 sc->hwinfo->signal_max = 40; /* 35dB should give perfect 54Mbps */
473 sc->hwinfo->channel_change_time = 5000;
474
476 {
479 }
481 {
484 }
485}
486
487int ath9k_init_device(u16 devid, struct ath_softc *sc, u16 subsysid,
488 const struct ath_bus_ops *bus_ops)
489{
490 struct net80211_device *dev = sc->dev;
491 /*struct ath_common *common;
492 struct ath_hw *ah;*/
493 int error = 0;
494 /*struct ath_regulatory *reg;*/
495
496 /* Bring up device */
497 error = ath9k_init_softc(devid, sc, subsysid, bus_ops);
498 if (error != 0)
499 goto error_init;
500
501 /*ah = sc->sc_ah;
502 common = ath9k_hw_common(ah);*/
503 ath9k_set_hw_capab(sc, dev);
504 /* TODO Cottsay: reg */
505 /* Initialize regulatory */
506 /*error = ath_regd_init(&common->regulatory, sc->dev->wiphy,
507 ath9k_reg_notifier);
508 if (error)
509 goto error_regd;
510
511 reg = &common->regulatory;*/
512
513 /* Setup TX DMA */
515 if (error != 0)
516 goto error_tx;
517
518 /* Setup RX DMA */
520 if (error != 0)
521 goto error_rx;
522
524
525 /* Register with mac80211 */
527 if (error)
528 goto error_register;
529
530 /* TODO Cottsay: reg */
531 /* Handle world regulatory */
532 /*if (!ath_is_world_regd(reg)) {
533 error = regulatory_hint(hw->wiphy, reg->alpha2);
534 if (error)
535 goto error_world;
536 }*/
537
540
541 /* TODO Cottsay: rfkill */
542 /*ath_start_rfkill_poll(sc);*/
543
544 return 0;
545
546//error_world:
547// net80211_unregister(dev);
548error_register:
549 ath_rx_cleanup(sc);
550error_rx:
551 ath_tx_cleanup(sc);
552error_tx:
554error_init:
555 return error;
556}
557
558/*****************************/
559/* De-Initialization */
560/*****************************/
561
562static void ath9k_deinit_softc(struct ath_softc *sc)
563{
564 int i = 0;
565
566 for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
567 if (ATH_TXQ_SETUP(sc, i))
568 ath_tx_cleanupq(sc, &sc->tx.txq[i]);
569
571
572 free(sc->hwinfo);
573 sc->hwinfo = NULL;
574 free(sc->sc_ah);
575 sc->sc_ah = NULL;
576}
577
579{
580 struct net80211_device *dev = sc->dev;
581
583 ath_rx_cleanup(sc);
584 ath_tx_cleanup(sc);
586}
587
589 struct ath_descdma *dd,
590 struct list_head *head)
591{
592 free_phys(dd->dd_desc, dd->dd_desc_len);
593
595 free(dd->dd_bufptr);
596 memset(dd, 0, sizeof(*dd));
597}
#define NULL
NULL pointer (VOID *)
Definition Base.h:322
struct arbelprm_completion_with_error error
Definition arbel.h:1
#define AR_PCU_MIC_NEW_LOC_ENA
Definition reg.h:1643
int ath_tx_init(struct ath_softc *sc, int nbufs)
Definition ath9k_xmit.c:790
void ath9k_tasklet(struct ath_softc *sc)
Definition ath9k_main.c:341
void ath_tx_cleanupq(struct ath_softc *sc, struct ath_txq *txq)
Definition ath9k_xmit.c:257
int is_ath9k_unloaded
Definition ath9k_init.c:30
int ath_rx_init(struct ath_softc *sc, int nbufs)
Definition ath9k_recv.c:99
#define ATH_TXQ_SETUP(sc, i)
Definition ath9k.h:63
@ IEEE80211_TX_RC_USE_SHORT_PREAMBLE
Definition ath9k.h:400
void ath_hw_pll_work(struct ath_softc *sc)
Definition ath9k_main.c:327
static void ath_read_cachesize(struct ath_common *common, int *csz)
Definition ath9k.h:496
#define ATH_TXPOWER_MAX
Definition ath9k.h:360
void ath_tx_cleanup(struct ath_softc *sc)
Definition ath9k_xmit.c:811
struct ath_txq * ath_txq_setup(struct ath_softc *sc, int qtype, int subtype)
Definition ath9k_xmit.c:108
struct net80211_device_operations ath9k_ops
Definition ath9k_main.c:911
void ath_rx_cleanup(struct ath_softc *sc)
Definition ath9k_recv.c:144
#define ito64(x)
Definition ath9k.h:38
void ath9k_hw_deinit(struct ath_hw *ah)
Definition ath9k_hw.c:852
u32 ath9k_hw_getdefantenna(struct ath_hw *ah)
Definition ath9k_hw.c:1868
int ath9k_hw_init(struct ath_hw *ah)
Definition ath9k_hw.c:571
const char * name
Definition ath9k_hw.c:1986
void ath9k_hw_set_txpowerlimit(struct ath_hw *ah, u32 limit, int test)
Definition ath9k_hw.c:1939
static const struct net80211_channel ath9k_5ghz_chantable[]
Definition ath9k_init.c:72
static void ath9k_init_txpower_limits(struct ath_softc *sc)
Definition ath9k_init.c:455
static unsigned int ath9k_ioread32(void *hw_priv, u32 reg_offset)
Definition ath9k_init.c:146
#define DS2PHYS(_dd, _ds)
void ath9k_set_hw_capab(struct ath_softc *sc, struct net80211_device *dev __unused)
Definition ath9k_init.c:468
#define RATE(_bitrate, _hw_rate, _flags)
Definition ath9k_init.c:107
#define ATH_DESC_4KB_BOUND_CHECK(_daddr)
static int ath9k_init_channels_rates(struct ath_softc *sc)
Definition ath9k_init.c:312
static void ath9k_iowrite32(void *hw_priv, u32 val, u32 reg_offset)
Definition ath9k_init.c:137
#define CHAN5G(_freq, _idx)
Definition ath9k_init.c:40
static void ath9k_init_band_txpower(struct ath_softc *sc, int band)
Definition ath9k_init.c:438
#define CHAN2G(_freq, _idx)
Definition ath9k_init.c:33
static void ath9k_deinit_softc(struct ath_softc *sc)
Definition ath9k_init.c:562
static struct ath9k_legacy_rate ath9k_legacy_rates[]
Definition ath9k_init.c:114
void ath9k_deinit_device(struct ath_softc *sc)
Definition ath9k_init.c:578
static unsigned int ath9k_reg_rmw(void *hw_priv, u32 reg_offset, u32 set, u32 clr)
Definition ath9k_init.c:157
int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd, struct list_head *head, const char *name, int nbuf, int ndesc, int is_tx)
Definition ath9k_init.c:181
static int ath9k_init_queues(struct ath_softc *sc)
Definition ath9k_init.c:301
void ath9k_init_crypto(struct ath_softc *sc)
Definition ath9k_init.c:276
void ath_descdma_cleanup(struct ath_softc *sc __unused, struct ath_descdma *dd, struct list_head *head)
Definition ath9k_init.c:588
static int ath9k_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid, const struct ath_bus_ops *bus_ops)
Definition ath9k_init.c:357
static const struct net80211_channel ath9k_2ghz_chantable[]
Definition ath9k_init.c:51
static void ath9k_init_misc(struct ath_softc *sc)
Definition ath9k_init.c:340
int ath9k_init_device(u16 devid, struct ath_softc *sc, u16 subsysid, const struct ath_bus_ops *bus_ops)
Definition ath9k_init.c:487
int ath_hw_keyreset(struct ath_common *common, u16 entry)
Definition ath_key.c:43
@ ATH_CRYPT_CAP_MIC_COMBINED
Definition ath.h:151
#define ATH_TXBUF
Definition base.h:54
#define ATH_RXBUF
Definition base.h:53
#define WME_NUM_AC
Definition common.h:36
#define ATH_RSSI_DUMMY_MARKER
Definition common.h:38
#define ARRAY_SIZE(x)
Definition efx_common.h:43
uint8_t eth_broadcast[ETH_ALEN]
Ethernet broadcast MAC address.
Definition ethernet.c:48
Ethernet protocol.
#define __unused
Declare a variable or data structure as unused.
Definition compiler.h:573
#define DBG2(...)
Definition compiler.h:515
#define DBG(...)
Print a debugging message.
Definition compiler.h:498
uint8_t head
Head number.
Definition int13.h:23
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
#define NET80211_BAND_BIT_2GHZ
Bitmask for the 2GHz band.
Definition net80211.h:52
#define NET80211_BAND_2GHZ
The 2.4 GHz ISM band, unlicensed in most countries.
Definition net80211.h:45
#define NET80211_BAND_5GHZ
The band from 4.9 GHz to 5.7 GHz, which tends to be more restricted.
Definition net80211.h:47
#define NET80211_BAND_BIT_5GHZ
Bitmask for the 5GHz band.
Definition net80211.h:54
int net80211_register(struct net80211_device *dev, struct net80211_device_operations *ops, struct net80211_hw_info *hw)
Register 802.11 device with network stack.
Definition net80211.c:792
void net80211_unregister(struct net80211_device *dev)
Unregister 802.11 device from network stack.
Definition net80211.c:825
#define NET80211_MODE_A
802.11a: 54 Mbps operation using OFDM signaling on the 5GHz band
Definition net80211.h:63
#define NET80211_MODE_G
802.11g: 54 Mbps operation using ERP/OFDM signaling on the 2.4GHz band
Definition net80211.h:69
#define NET80211_MODE_B
802.11b: 1-11 Mbps operation using DSSS/CCK signaling on the 2.4GHz band
Definition net80211.h:66
#define ENOMEM
Not enough space.
Definition errno.h:535
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
Definition compiler.h:926
static void ath9k_hw_set_diversity(struct ath_hw *ah, int value)
Definition hw-ops.h:242
@ ATH9K_HW_CAP_5GHZ
Definition hw.h:195
@ ATH9K_HW_CAP_2GHZ
Definition hw.h:194
@ ATH9K_HW_CAP_4KB_SPLITTRANS
Definition hw.h:186
static struct ath_regulatory * ath9k_hw_regulatory(struct ath_hw *ah)
Definition hw.h:875
#define AR_KEYTABLE_SIZE
Definition hw.h:149
#define MAX_RATE_POWER
Definition hw.h:145
static struct ath_common * ath9k_hw_common(struct ath_hw *ah)
Definition hw.h:870
#define AH_USE_EEPROM
Definition hw.h:654
struct ib_cm_common common
Definition ib_mad.h:0
#define ETH_ALEN
Definition if_ether.h:9
#define u8
Definition igbvf_osdep.h:40
static __always_inline unsigned long virt_to_bus(volatile const void *addr)
Convert virtual address to a bus address.
Definition io.h:184
PCI I/O API.
void __asmcall int val
Definition setjmp.h:12
void * memcpy(void *dest, const void *src, size_t len) __nonnull
void * memset(void *dest, int character, size_t len) __nonnull
uint32_t ds
Definition librm.h:5
#define list_add_tail(new, head)
Add a new entry to the tail of a list.
Definition list.h:94
#define INIT_LIST_HEAD(list)
Initialise a list head.
Definition list.h:46
@ ATH9K_TX_QUEUE_DATA
Definition mac.h:578
#define ATH9K_NUM_TX_QUEUES
Definition mac.h:581
void * zalloc(size_t size)
Allocate cleared memory.
Definition malloc.c:662
void * malloc_phys(size_t size, size_t phys_align)
Allocate memory with specified physical alignment.
Definition malloc.c:707
void free_phys(void *ptr, size_t size)
Free memory allocated with malloc_phys()
Definition malloc.c:723
Dynamic memory allocation.
static unsigned int unsigned int reg
Definition myson.h:162
if(natsemi->flags &NATSEMI_64BIT) return 1
struct option_descriptor set[0]
Definition nvo_cmd.c:112
PCI bus.
static void(* free)(struct refcnt *refcnt))
Definition refcnt.h:55
uint8_t ah
Definition registers.h:1
struct list_head list
Definition ath9k.h:221
void * bf_desc
Definition ath9k.h:226
u32 bf_daddr
Definition ath9k.h:227
const struct ath_bus_ops * bus_ops
Definition ath.h:226
u16 txpowlimit
Definition ath9k.h:66
void * dd_desc
Definition ath9k.h:107
u32 dd_desc_len
Definition ath9k.h:109
u32 dd_desc_paddr
Definition ath9k.h:108
struct ath_buf * dd_bufptr
Definition ath9k.h:110
Definition hw.h:657
u32 misc_mode
Definition hw.h:750
int led_pin
Definition hw.h:796
struct ath9k_hw_capabilities caps
Definition hw.h:664
u8 defant
Definition ath9k.h:298
void(* intr_tq)(struct ath_softc *sc)
Definition ath9k.h:454
void * mem
Definition ath9k.h:456
void(* hw_pll_work)(struct ath_softc *sc)
Definition ath9k.h:487
struct net80211_device * dev
Definition ath9k.h:446
int last_rssi
Definition ath9k.h:483
struct ath_tx tx
Definition ath9k.h:477
struct ath_rx rx
Definition ath9k.h:476
struct ath_config config
Definition ath9k.h:475
struct net80211_hw_info * hwinfo
Definition ath9k.h:478
struct ath_hw * sc_ah
Definition ath9k.h:455
struct ath9k_legacy_rate rates[NET80211_MAX_RATES]
Definition ath9k.h:479
struct ath_txq txq[ATH9K_NUM_TX_QUEUES]
Definition ath9k.h:286
struct ath_txq * txq_map[WME_NUM_AC]
Definition ath9k.h:288
int mac80211_qnum
Definition ath9k.h:182
A doubly-linked list entry (or list head)
Definition list.h:19
An 802.11 RF channel.
Definition net80211.h:386
u16 hw_value
Hardware channel value.
Definition net80211.h:414
u8 maxpower
Maximum allowable transmit power, in dBm.
Definition net80211.h:425
u8 band
The band with which this channel is associated.
Definition net80211.h:388
Structure encapsulating the complete state of an 802.11 device.
Definition net80211.h:787
int modes
A bitwise OR of the 802.11x modes supported by this device.
Definition net80211.h:450
enum net80211_hw_info::@277203366166200071173154201003141076360026365126 flags
A set of flags indicating peculiarities of this device.
int nr_rates[NET80211_NR_BANDS]
Number of supported rates, indexed by band.
Definition net80211.h:511
int bands
A bitwise OR of the bands on which this device can communicate.
Definition net80211.h:453
unsigned channel_change_time
Estimate of the time required to change channels, in microseconds.
Definition net80211.h:518
struct net80211_channel channels[NET80211_MAX_CHANNELS]
List of RF channels supported by the card.
Definition net80211.h:498
u8 hwaddr[ETH_ALEN]
Default hardware MAC address.
Definition net80211.h:447
unsigned signal_max
Maximum signal in arbitrary cases.
Definition net80211.h:495
int nr_channels
Number of supported channels.
Definition net80211.h:501
enum net80211_hw_info::@160150106134320172247032061203111226300065160315 signal_type
Signal strength information that can be provided by the device.
u16 rates[NET80211_NR_BANDS][NET80211_MAX_RATES]
List of transmission rates supported by the card, indexed by band.
Definition net80211.h:508
#define u16
Definition vga.h:20
#define u32
Definition vga.h:21
#define readl
Definition w89c840.c:157
#define writel
Definition w89c840.c:160