diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-channel.h')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-channel.h | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-channel.h b/drivers/net/wireless/iwlwifi/iwl-channel.h new file mode 100644 index 000000000000..023c3f240cea --- /dev/null +++ b/drivers/net/wireless/iwlwifi/iwl-channel.h | |||
@@ -0,0 +1,161 @@ | |||
1 | /****************************************************************************** | ||
2 | * | ||
3 | * Copyright(c) 2005 - 2007 Intel Corporation. All rights reserved. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms of version 2 of the GNU General Public License as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
12 | * more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along with | ||
15 | * this program; if not, write to the Free Software Foundation, Inc., | ||
16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA | ||
17 | * | ||
18 | * The full GNU General Public License is included in this distribution in the | ||
19 | * file called LICENSE. | ||
20 | * | ||
21 | * Contact Information: | ||
22 | * James P. Ketrenos <ipw2100-admin@linux.intel.com> | ||
23 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
24 | * | ||
25 | *****************************************************************************/ | ||
26 | #ifndef __iwl_channel_h__ | ||
27 | #define __iwl_channel_h__ | ||
28 | |||
29 | #define IWL_NUM_SCAN_RATES (2) | ||
30 | |||
31 | struct iwl_channel_tgd_info { | ||
32 | u8 type; | ||
33 | s8 max_power; | ||
34 | }; | ||
35 | |||
36 | struct iwl_channel_tgh_info { | ||
37 | s64 last_radar_time; | ||
38 | }; | ||
39 | |||
40 | /* current Tx power values to use, one for each rate for each channel. | ||
41 | * requested power is limited by: | ||
42 | * -- regulatory EEPROM limits for this channel | ||
43 | * -- hardware capabilities (clip-powers) | ||
44 | * -- spectrum management | ||
45 | * -- user preference (e.g. iwconfig) | ||
46 | * when requested power is set, base power index must also be set. */ | ||
47 | struct iwl_channel_power_info { | ||
48 | struct iwl_tx_power tpc; /* actual radio and DSP gain settings */ | ||
49 | s8 power_table_index; /* actual (compenst'd) index into gain table */ | ||
50 | s8 base_power_index; /* gain index for power at factory temp. */ | ||
51 | s8 requested_power; /* power (dBm) requested for this chnl/rate */ | ||
52 | }; | ||
53 | |||
54 | /* current scan Tx power values to use, one for each scan rate for each | ||
55 | * channel. */ | ||
56 | struct iwl_scan_power_info { | ||
57 | struct iwl_tx_power tpc; /* actual radio and DSP gain settings */ | ||
58 | s8 power_table_index; /* actual (compenst'd) index into gain table */ | ||
59 | s8 requested_power; /* scan pwr (dBm) requested for chnl/rate */ | ||
60 | }; | ||
61 | |||
62 | /* Channel unlock period is 15 seconds. If no beacon or probe response | ||
63 | * has been received within 15 seconds on a locked channel then the channel | ||
64 | * remains locked. */ | ||
65 | #define TX_UNLOCK_PERIOD 15 | ||
66 | |||
67 | /* CSA lock period is 15 seconds. If a CSA has been received on a channel in | ||
68 | * the last 15 seconds, the channel is locked */ | ||
69 | #define CSA_LOCK_PERIOD 15 | ||
70 | /* | ||
71 | * One for each channel, holds all channel setup data | ||
72 | * Some of the fields (e.g. eeprom and flags/max_power_avg) are redundant | ||
73 | * with one another! | ||
74 | */ | ||
75 | #define IWL4965_MAX_RATE (33) | ||
76 | |||
77 | struct iwl_channel_info { | ||
78 | struct iwl_channel_tgd_info tgd; | ||
79 | struct iwl_channel_tgh_info tgh; | ||
80 | struct iwl_eeprom_channel eeprom; /* EEPROM regulatory limit */ | ||
81 | struct iwl_eeprom_channel fat_eeprom; /* EEPROM regulatory limit for | ||
82 | * FAT channel */ | ||
83 | |||
84 | u8 channel; /* channel number */ | ||
85 | u8 flags; /* flags copied from EEPROM */ | ||
86 | s8 max_power_avg; /* (dBm) regul. eeprom, normal Tx, any rate */ | ||
87 | s8 curr_txpow; /* (dBm) regulatory/spectrum/user (not h/w) */ | ||
88 | s8 min_power; /* always 0 */ | ||
89 | s8 scan_power; /* (dBm) regul. eeprom, direct scans, any rate */ | ||
90 | |||
91 | u8 group_index; /* 0-4, maps channel to group1/2/3/4/5 */ | ||
92 | u8 band_index; /* 0-4, maps channel to band1/2/3/4/5 */ | ||
93 | u8 phymode; /* MODE_IEEE80211{A,B,G} */ | ||
94 | |||
95 | /* Radio/DSP gain settings for each "normal" data Tx rate. | ||
96 | * These include, in addition to RF and DSP gain, a few fields for | ||
97 | * remembering/modifying gain settings (indexes). */ | ||
98 | struct iwl_channel_power_info power_info[IWL4965_MAX_RATE]; | ||
99 | |||
100 | #if IWL == 4965 | ||
101 | /* FAT channel info */ | ||
102 | s8 fat_max_power_avg; /* (dBm) regul. eeprom, normal Tx, any rate */ | ||
103 | s8 fat_curr_txpow; /* (dBm) regulatory/spectrum/user (not h/w) */ | ||
104 | s8 fat_min_power; /* always 0 */ | ||
105 | s8 fat_scan_power; /* (dBm) eeprom, direct scans, any rate */ | ||
106 | u8 fat_flags; /* flags copied from EEPROM */ | ||
107 | u8 fat_extension_channel; | ||
108 | #endif | ||
109 | |||
110 | /* Radio/DSP gain settings for each scan rate, for directed scans. */ | ||
111 | struct iwl_scan_power_info scan_pwr_info[IWL_NUM_SCAN_RATES]; | ||
112 | }; | ||
113 | |||
114 | struct iwl_clip_group { | ||
115 | /* maximum power level to prevent clipping for each rate, derived by | ||
116 | * us from this band's saturation power in EEPROM */ | ||
117 | const s8 clip_powers[IWL_MAX_RATES]; | ||
118 | }; | ||
119 | |||
120 | static inline int is_channel_valid(const struct iwl_channel_info *ch_info) | ||
121 | { | ||
122 | if (ch_info == NULL) | ||
123 | return 0; | ||
124 | return (ch_info->flags & EEPROM_CHANNEL_VALID) ? 1 : 0; | ||
125 | } | ||
126 | |||
127 | static inline int is_channel_narrow(const struct iwl_channel_info *ch_info) | ||
128 | { | ||
129 | return (ch_info->flags & EEPROM_CHANNEL_NARROW) ? 1 : 0; | ||
130 | } | ||
131 | |||
132 | static inline int is_channel_radar(const struct iwl_channel_info *ch_info) | ||
133 | { | ||
134 | return (ch_info->flags & EEPROM_CHANNEL_RADAR) ? 1 : 0; | ||
135 | } | ||
136 | |||
137 | static inline u8 is_channel_a_band(const struct iwl_channel_info *ch_info) | ||
138 | { | ||
139 | return ch_info->phymode == MODE_IEEE80211A; | ||
140 | } | ||
141 | |||
142 | static inline u8 is_channel_bg_band(const struct iwl_channel_info *ch_info) | ||
143 | { | ||
144 | return ((ch_info->phymode == MODE_IEEE80211B) || | ||
145 | (ch_info->phymode == MODE_IEEE80211G)); | ||
146 | } | ||
147 | |||
148 | static inline int is_channel_passive(const struct iwl_channel_info *ch) | ||
149 | { | ||
150 | return (!(ch->flags & EEPROM_CHANNEL_ACTIVE)) ? 1 : 0; | ||
151 | } | ||
152 | |||
153 | static inline int is_channel_ibss(const struct iwl_channel_info *ch) | ||
154 | { | ||
155 | return ((ch->flags & EEPROM_CHANNEL_IBSS)) ? 1 : 0; | ||
156 | } | ||
157 | |||
158 | extern const struct iwl_channel_info *iwl_get_channel_info( | ||
159 | const struct iwl_priv *priv, int phymode, u16 channel); | ||
160 | |||
161 | #endif | ||