Commit | Line | Data |
---|---|---|
fa1c114f JS |
1 | /*- |
2 | * Copyright (c) 2002-2007 Sam Leffler, Errno Consulting | |
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 | * 1. Redistributions of source code must retain the above copyright | |
9 | * notice, this list of conditions and the following disclaimer, | |
10 | * without modification. | |
11 | * 2. Redistributions in binary form must reproduce at minimum a disclaimer | |
12 | * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any | |
13 | * redistribution must be conditioned upon including a substantially | |
14 | * similar Disclaimer requirement for further binary redistribution. | |
15 | * 3. Neither the names of the above-listed copyright holders nor the names | |
16 | * of any contributors may be used to endorse or promote products derived | |
17 | * from this software without specific prior written permission. | |
18 | * | |
19 | * Alternatively, this software may be distributed under the terms of the | |
20 | * GNU General Public License ("GPL") version 2 as published by the Free | |
21 | * Software Foundation. | |
22 | * | |
23 | * NO WARRANTY | |
24 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
25 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
26 | * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY | |
27 | * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL | |
28 | * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, | |
29 | * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
30 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
31 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER | |
32 | * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
33 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF | |
34 | * THE POSSIBILITY OF SUCH DAMAGES. | |
35 | * | |
36 | */ | |
37 | ||
38 | /* | |
39 | * Defintions for the Atheros Wireless LAN controller driver. | |
40 | */ | |
41 | #ifndef _DEV_ATH_ATHVAR_H | |
42 | #define _DEV_ATH_ATHVAR_H | |
43 | ||
44 | #include <linux/interrupt.h> | |
45 | #include <linux/list.h> | |
46 | #include <linux/wireless.h> | |
47 | #include <linux/if_ether.h> | |
3a078876 | 48 | #include <linux/leds.h> |
fa1c114f JS |
49 | |
50 | #include "ath5k.h" | |
51 | #include "debug.h" | |
52 | ||
53 | #define ATH_RXBUF 40 /* number of RX buffers */ | |
54 | #define ATH_TXBUF 200 /* number of TX buffers */ | |
55 | #define ATH_BCBUF 1 /* number of beacon buffers */ | |
56 | ||
57 | struct ath5k_buf { | |
58 | struct list_head list; | |
3a0f2c87 | 59 | unsigned int flags; /* rx descriptor flags */ |
fa1c114f JS |
60 | struct ath5k_desc *desc; /* virtual addr of desc */ |
61 | dma_addr_t daddr; /* physical addr of desc */ | |
62 | struct sk_buff *skb; /* skbuff for buf */ | |
63 | dma_addr_t skbaddr;/* physical addr of skb data */ | |
fa1c114f JS |
64 | }; |
65 | ||
66 | /* | |
67 | * Data transmit queue state. One of these exists for each | |
68 | * hardware transmit queue. Packets sent to us from above | |
69 | * are assigned to queues based on their priority. Not all | |
70 | * devices support a complete set of hardware transmit queues. | |
71 | * For those devices the array sc_ac2q will map multiple | |
72 | * priorities to fewer hardware queues (typically all to one | |
73 | * hardware queue). | |
74 | */ | |
75 | struct ath5k_txq { | |
76 | unsigned int qnum; /* hardware q number */ | |
77 | u32 *link; /* link ptr in last TX desc */ | |
78 | struct list_head q; /* transmit queue */ | |
79 | spinlock_t lock; /* lock on q and link */ | |
80 | bool setup; | |
81 | }; | |
82 | ||
3a078876 BC |
83 | #define ATH5K_LED_MAX_NAME_LEN 31 |
84 | ||
85 | /* | |
86 | * State for LED triggers | |
87 | */ | |
88 | struct ath5k_led | |
89 | { | |
90 | char name[ATH5K_LED_MAX_NAME_LEN + 1]; /* name of the LED in sysfs */ | |
91 | struct ath5k_softc *sc; /* driver state */ | |
92 | struct led_classdev led_dev; /* led classdev */ | |
93 | }; | |
94 | ||
95 | ||
fa1c114f JS |
96 | #if CHAN_DEBUG |
97 | #define ATH_CHAN_MAX (26+26+26+200+200) | |
98 | #else | |
d8ee398d | 99 | #define ATH_CHAN_MAX (14+14+14+252+20) |
fa1c114f JS |
100 | #endif |
101 | ||
102 | /* Software Carrier, keeps track of the driver state | |
103 | * associated with an instance of a device */ | |
104 | struct ath5k_softc { | |
105 | struct pci_dev *pdev; /* for dma mapping */ | |
106 | void __iomem *iobase; /* address of the device */ | |
107 | struct mutex lock; /* dev-level lock */ | |
57ffc589 JB |
108 | /* FIXME: how many does it really need? */ |
109 | struct ieee80211_tx_queue_stats tx_stats[16]; | |
fa1c114f JS |
110 | struct ieee80211_low_level_stats ll_stats; |
111 | struct ieee80211_hw *hw; /* IEEE 802.11 common */ | |
d8ee398d | 112 | struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS]; |
fa1c114f | 113 | struct ieee80211_channel channels[ATH_CHAN_MAX]; |
63266a65 BR |
114 | struct ieee80211_rate rates[IEEE80211_NUM_BANDS][AR5K_MAX_RATES]; |
115 | u8 rate_idx[IEEE80211_NUM_BANDS][AR5K_MAX_RATES]; | |
05c914fe | 116 | enum nl80211_iftype opmode; |
fa1c114f JS |
117 | struct ath5k_hw *ah; /* Atheros HW */ |
118 | ||
d8ee398d LR |
119 | struct ieee80211_supported_band *curband; |
120 | ||
b446197c | 121 | #ifdef CONFIG_ATH5K_DEBUG |
fa1c114f | 122 | struct ath5k_dbg_info debug; /* debug info */ |
b446197c | 123 | #endif /* CONFIG_ATH5K_DEBUG */ |
fa1c114f JS |
124 | |
125 | struct ath5k_buf *bufptr; /* allocated buffer ptr */ | |
126 | struct ath5k_desc *desc; /* TX/RX descriptors */ | |
127 | dma_addr_t desc_daddr; /* DMA (physical) address */ | |
128 | size_t desc_len; /* size of TX/RX descriptors */ | |
129 | u16 cachelsz; /* cache line size */ | |
130 | ||
8bdd5b9c | 131 | DECLARE_BITMAP(status, 5); |
fa1c114f JS |
132 | #define ATH_STAT_INVALID 0 /* disable hardware accesses */ |
133 | #define ATH_STAT_MRRETRY 1 /* multi-rate retry support */ | |
134 | #define ATH_STAT_PROMISC 2 | |
3a078876 | 135 | #define ATH_STAT_LEDSOFT 3 /* enable LED gpio status */ |
8bdd5b9c | 136 | #define ATH_STAT_STARTED 4 /* opened & irqs enabled */ |
fa1c114f JS |
137 | |
138 | unsigned int filter_flags; /* HW flags, AR5K_RX_FILTER_* */ | |
139 | unsigned int curmode; /* current phy mode */ | |
140 | struct ieee80211_channel *curchan; /* current h/w channel */ | |
141 | ||
32bfd35d | 142 | struct ieee80211_vif *vif; |
fa1c114f | 143 | |
fa1c114f JS |
144 | enum ath5k_int imask; /* interrupt mask copy */ |
145 | ||
146 | DECLARE_BITMAP(keymap, AR5K_KEYCACHE_SIZE); /* key use bit map */ | |
147 | ||
148 | u8 bssidmask[ETH_ALEN]; | |
149 | ||
150 | unsigned int led_pin, /* GPIO pin for driving LED */ | |
151 | led_on, /* pin setting for LED on */ | |
152 | led_off; /* off time for current blink */ | |
fa1c114f JS |
153 | |
154 | struct tasklet_struct restq; /* reset tasklet */ | |
155 | ||
156 | unsigned int rxbufsize; /* rx size based on mtu */ | |
157 | struct list_head rxbuf; /* receive buffer */ | |
158 | spinlock_t rxbuflock; | |
159 | u32 *rxlink; /* link ptr in last RX desc */ | |
160 | struct tasklet_struct rxtq; /* rx intr tasklet */ | |
3a078876 | 161 | struct ath5k_led rx_led; /* rx led */ |
fa1c114f JS |
162 | |
163 | struct list_head txbuf; /* transmit buffer */ | |
164 | spinlock_t txbuflock; | |
165 | unsigned int txbuf_len; /* buf count in txbuf list */ | |
166 | struct ath5k_txq txqs[2]; /* beacon and tx */ | |
167 | ||
168 | struct ath5k_txq *txq; /* beacon and tx*/ | |
169 | struct tasklet_struct txtq; /* tx intr tasklet */ | |
3a078876 | 170 | struct ath5k_led tx_led; /* tx led */ |
fa1c114f | 171 | |
00482973 | 172 | spinlock_t block; /* protects beacon */ |
fa1c114f JS |
173 | struct ath5k_buf *bbuf; /* beacon buffer */ |
174 | unsigned int bhalq, /* SW q for outgoing beacons */ | |
175 | bmisscount, /* missed beacon transmits */ | |
e535c1ac | 176 | bintval, /* beacon interval in TU */ |
fa1c114f | 177 | bsent; |
036cd1ec | 178 | unsigned int nexttbtt; /* next beacon time in TU */ |
fa1c114f JS |
179 | |
180 | struct timer_list calib_tim; /* calibration timer */ | |
d8ee398d | 181 | int power_level; /* Requested tx power in dbm */ |
02969b38 | 182 | bool assoc; /* assocate state */ |
fa1c114f JS |
183 | }; |
184 | ||
185 | #define ath5k_hw_hasbssidmask(_ah) \ | |
186 | (ath5k_hw_get_capability(_ah, AR5K_CAP_BSSIDMASK, 0, NULL) == 0) | |
187 | #define ath5k_hw_hasveol(_ah) \ | |
188 | (ath5k_hw_get_capability(_ah, AR5K_CAP_VEOL, 0, NULL) == 0) | |
189 | ||
190 | #endif |