diff options
author | Christian Lamparter <chunkeey@web.de> | 2009-03-21 18:05:13 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-03-27 20:13:08 -0400 |
commit | e9348cdd280eb6a1d6d38fef513b578dc9ead363 (patch) | |
tree | 174f34bff07187d1d7d2d774d153df8250f63b7d /drivers/net/wireless/ar9170/ar9170.h | |
parent | 23b53f4f55d833ecc5a11b5fba646c78d3876927 (diff) |
ar9170: ar9170: mac80211 interaction code
This patch contains almost all mac80211 interaction code of AR9170.
Signed-off-by: Christian Lamparter <chunkeey@web.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ar9170/ar9170.h')
-rw-r--r-- | drivers/net/wireless/ar9170/ar9170.h | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/drivers/net/wireless/ar9170/ar9170.h b/drivers/net/wireless/ar9170/ar9170.h new file mode 100644 index 000000000000..c49d7138d574 --- /dev/null +++ b/drivers/net/wireless/ar9170/ar9170.h | |||
@@ -0,0 +1,209 @@ | |||
1 | /* | ||
2 | * Atheros AR9170 driver | ||
3 | * | ||
4 | * Driver specific definitions | ||
5 | * | ||
6 | * Copyright 2008, Johannes Berg <johannes@sipsolutions.net> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; see the file COPYING. If not, see | ||
20 | * http://www.gnu.org/licenses/. | ||
21 | * | ||
22 | * This file incorporates work covered by the following copyright and | ||
23 | * permission notice: | ||
24 | * Copyright (c) 2007-2008 Atheros Communications, Inc. | ||
25 | * | ||
26 | * Permission to use, copy, modify, and/or distribute this software for any | ||
27 | * purpose with or without fee is hereby granted, provided that the above | ||
28 | * copyright notice and this permission notice appear in all copies. | ||
29 | * | ||
30 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
31 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
32 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
33 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
34 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
35 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
36 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
37 | */ | ||
38 | #ifndef __AR9170_H | ||
39 | #define __AR9170_H | ||
40 | |||
41 | #include <linux/completion.h> | ||
42 | #include <linux/spinlock.h> | ||
43 | #include <net/wireless.h> | ||
44 | #include <net/mac80211.h> | ||
45 | #ifdef CONFIG_AR9170_LEDS | ||
46 | #include <linux/leds.h> | ||
47 | #endif /* CONFIG_AR9170_LEDS */ | ||
48 | #include "eeprom.h" | ||
49 | #include "hw.h" | ||
50 | |||
51 | #define PAYLOAD_MAX (AR9170_MAX_CMD_LEN/4 - 1) | ||
52 | |||
53 | enum ar9170_bw { | ||
54 | AR9170_BW_20, | ||
55 | AR9170_BW_40_BELOW, | ||
56 | AR9170_BW_40_ABOVE, | ||
57 | |||
58 | __AR9170_NUM_BW, | ||
59 | }; | ||
60 | |||
61 | enum ar9170_rf_init_mode { | ||
62 | AR9170_RFI_NONE, | ||
63 | AR9170_RFI_WARM, | ||
64 | AR9170_RFI_COLD, | ||
65 | }; | ||
66 | |||
67 | #define AR9170_MAX_RX_BUFFER_SIZE 8192 | ||
68 | |||
69 | #ifdef CONFIG_AR9170_LEDS | ||
70 | struct ar9170; | ||
71 | |||
72 | struct ar9170_led { | ||
73 | struct ar9170 *ar; | ||
74 | struct led_classdev l; | ||
75 | char name[32]; | ||
76 | unsigned int toggled; | ||
77 | bool registered; | ||
78 | }; | ||
79 | |||
80 | #endif /* CONFIG_AR9170_LEDS */ | ||
81 | |||
82 | enum ar9170_device_state { | ||
83 | AR9170_UNKNOWN_STATE, | ||
84 | AR9170_STOPPED, | ||
85 | AR9170_IDLE, | ||
86 | AR9170_STARTED, | ||
87 | AR9170_ASSOCIATED, | ||
88 | }; | ||
89 | |||
90 | struct ar9170 { | ||
91 | struct ieee80211_hw *hw; | ||
92 | struct mutex mutex; | ||
93 | enum ar9170_device_state state; | ||
94 | |||
95 | int (*open)(struct ar9170 *); | ||
96 | void (*stop)(struct ar9170 *); | ||
97 | int (*tx)(struct ar9170 *, struct sk_buff *, bool, unsigned int); | ||
98 | int (*exec_cmd)(struct ar9170 *, enum ar9170_cmd, u32 , | ||
99 | void *, u32 , void *); | ||
100 | void (*callback_cmd)(struct ar9170 *, u32 , void *); | ||
101 | |||
102 | /* interface mode settings */ | ||
103 | struct ieee80211_vif *vif; | ||
104 | u8 mac_addr[ETH_ALEN]; | ||
105 | u8 bssid[ETH_ALEN]; | ||
106 | |||
107 | /* beaconing */ | ||
108 | struct sk_buff *beacon; | ||
109 | struct work_struct beacon_work; | ||
110 | |||
111 | /* cryptographic engine */ | ||
112 | u64 usedkeys; | ||
113 | bool rx_software_decryption; | ||
114 | bool disable_offload; | ||
115 | |||
116 | /* filter settings */ | ||
117 | struct work_struct filter_config_work; | ||
118 | u64 cur_mc_hash, want_mc_hash; | ||
119 | u32 cur_filter, want_filter; | ||
120 | unsigned int filter_changed; | ||
121 | bool sniffer_enabled; | ||
122 | |||
123 | /* PHY */ | ||
124 | struct ieee80211_channel *channel; | ||
125 | int noise[4]; | ||
126 | |||
127 | /* power calibration data */ | ||
128 | u8 power_5G_leg[4]; | ||
129 | u8 power_2G_cck[4]; | ||
130 | u8 power_2G_ofdm[4]; | ||
131 | u8 power_5G_ht20[8]; | ||
132 | u8 power_5G_ht40[8]; | ||
133 | u8 power_2G_ht20[8]; | ||
134 | u8 power_2G_ht40[8]; | ||
135 | |||
136 | #ifdef CONFIG_AR9170_LEDS | ||
137 | struct delayed_work led_work; | ||
138 | struct ar9170_led leds[AR9170_NUM_LEDS]; | ||
139 | #endif /* CONFIG_AR9170_LEDS */ | ||
140 | |||
141 | /* qos queue settings */ | ||
142 | spinlock_t tx_stats_lock; | ||
143 | struct ieee80211_tx_queue_stats tx_stats[5]; | ||
144 | struct ieee80211_tx_queue_params edcf[5]; | ||
145 | |||
146 | spinlock_t cmdlock; | ||
147 | __le32 cmdbuf[PAYLOAD_MAX + 1]; | ||
148 | |||
149 | /* MAC statistics */ | ||
150 | struct ieee80211_low_level_stats stats; | ||
151 | |||
152 | /* EEPROM */ | ||
153 | struct ar9170_eeprom eeprom; | ||
154 | |||
155 | /* global tx status for unregistered Stations. */ | ||
156 | struct sk_buff_head global_tx_status; | ||
157 | struct sk_buff_head global_tx_status_waste; | ||
158 | struct delayed_work tx_status_janitor; | ||
159 | }; | ||
160 | |||
161 | struct ar9170_sta_info { | ||
162 | struct sk_buff_head tx_status; | ||
163 | }; | ||
164 | |||
165 | #define IS_STARTED(a) (a->state >= AR9170_STARTED) | ||
166 | #define IS_ACCEPTING_CMD(a) (a->state >= AR9170_IDLE) | ||
167 | |||
168 | #define AR9170_FILTER_CHANGED_PROMISC BIT(0) | ||
169 | #define AR9170_FILTER_CHANGED_MULTICAST BIT(1) | ||
170 | #define AR9170_FILTER_CHANGED_FRAMEFILTER BIT(2) | ||
171 | |||
172 | /* exported interface */ | ||
173 | void *ar9170_alloc(size_t priv_size); | ||
174 | int ar9170_register(struct ar9170 *ar, struct device *pdev); | ||
175 | void ar9170_rx(struct ar9170 *ar, struct sk_buff *skb); | ||
176 | void ar9170_unregister(struct ar9170 *ar); | ||
177 | void ar9170_handle_tx_status(struct ar9170 *ar, struct sk_buff *skb, | ||
178 | bool update_statistics, u16 tx_status); | ||
179 | |||
180 | /* MAC */ | ||
181 | int ar9170_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb); | ||
182 | int ar9170_init_mac(struct ar9170 *ar); | ||
183 | int ar9170_set_qos(struct ar9170 *ar); | ||
184 | int ar9170_update_multicast(struct ar9170 *ar); | ||
185 | int ar9170_update_frame_filter(struct ar9170 *ar); | ||
186 | int ar9170_set_operating_mode(struct ar9170 *ar); | ||
187 | int ar9170_set_beacon_timers(struct ar9170 *ar); | ||
188 | int ar9170_set_hwretry_limit(struct ar9170 *ar, u32 max_retry); | ||
189 | int ar9170_update_beacon(struct ar9170 *ar); | ||
190 | void ar9170_new_beacon(struct work_struct *work); | ||
191 | int ar9170_upload_key(struct ar9170 *ar, u8 id, const u8 *mac, u8 ktype, | ||
192 | u8 keyidx, u8 *keydata, int keylen); | ||
193 | int ar9170_disable_key(struct ar9170 *ar, u8 id); | ||
194 | |||
195 | /* LEDs */ | ||
196 | #ifdef CONFIG_AR9170_LEDS | ||
197 | int ar9170_register_leds(struct ar9170 *ar); | ||
198 | void ar9170_unregister_leds(struct ar9170 *ar); | ||
199 | #endif /* CONFIG_AR9170_LEDS */ | ||
200 | int ar9170_init_leds(struct ar9170 *ar); | ||
201 | int ar9170_set_leds_state(struct ar9170 *ar, u32 led_state); | ||
202 | |||
203 | /* PHY / RF */ | ||
204 | int ar9170_init_phy(struct ar9170 *ar, enum ieee80211_band band); | ||
205 | int ar9170_init_rf(struct ar9170 *ar); | ||
206 | int ar9170_set_channel(struct ar9170 *ar, struct ieee80211_channel *channel, | ||
207 | enum ar9170_rf_init_mode rfi, enum ar9170_bw bw); | ||
208 | |||
209 | #endif /* __AR9170_H */ | ||