diff options
Diffstat (limited to 'drivers/net/wireless/ath5k/eeprom.h')
-rw-r--r-- | drivers/net/wireless/ath5k/eeprom.h | 128 |
1 files changed, 87 insertions, 41 deletions
diff --git a/drivers/net/wireless/ath5k/eeprom.h b/drivers/net/wireless/ath5k/eeprom.h index 1deebc0257d4..b0c0606dea0b 100644 --- a/drivers/net/wireless/ath5k/eeprom.h +++ b/drivers/net/wireless/ath5k/eeprom.h | |||
@@ -173,6 +173,7 @@ | |||
173 | #define AR5K_EEPROM_N_5GHZ_CHAN 10 | 173 | #define AR5K_EEPROM_N_5GHZ_CHAN 10 |
174 | #define AR5K_EEPROM_N_2GHZ_CHAN 3 | 174 | #define AR5K_EEPROM_N_2GHZ_CHAN 3 |
175 | #define AR5K_EEPROM_N_2GHZ_CHAN_2413 4 | 175 | #define AR5K_EEPROM_N_2GHZ_CHAN_2413 4 |
176 | #define AR5K_EEPROM_N_2GHZ_CHAN_MAX 4 | ||
176 | #define AR5K_EEPROM_MAX_CHAN 10 | 177 | #define AR5K_EEPROM_MAX_CHAN 10 |
177 | #define AR5K_EEPROM_N_PWR_POINTS_5111 11 | 178 | #define AR5K_EEPROM_N_PWR_POINTS_5111 11 |
178 | #define AR5K_EEPROM_N_PCDAC 11 | 179 | #define AR5K_EEPROM_N_PCDAC 11 |
@@ -193,7 +194,7 @@ | |||
193 | #define AR5K_EEPROM_SCALE_OC_DELTA(_x) (((_x) * 2) / 10) | 194 | #define AR5K_EEPROM_SCALE_OC_DELTA(_x) (((_x) * 2) / 10) |
194 | #define AR5K_EEPROM_N_CTLS(_v) AR5K_EEPROM_OFF(_v, 16, 32) | 195 | #define AR5K_EEPROM_N_CTLS(_v) AR5K_EEPROM_OFF(_v, 16, 32) |
195 | #define AR5K_EEPROM_MAX_CTLS 32 | 196 | #define AR5K_EEPROM_MAX_CTLS 32 |
196 | #define AR5K_EEPROM_N_XPD_PER_CHANNEL 4 | 197 | #define AR5K_EEPROM_N_PD_CURVES 4 |
197 | #define AR5K_EEPROM_N_XPD0_POINTS 4 | 198 | #define AR5K_EEPROM_N_XPD0_POINTS 4 |
198 | #define AR5K_EEPROM_N_XPD3_POINTS 3 | 199 | #define AR5K_EEPROM_N_XPD3_POINTS 3 |
199 | #define AR5K_EEPROM_N_PD_GAINS 4 | 200 | #define AR5K_EEPROM_N_PD_GAINS 4 |
@@ -232,7 +233,7 @@ enum ath5k_ctl_mode { | |||
232 | AR5K_CTL_11B = 1, | 233 | AR5K_CTL_11B = 1, |
233 | AR5K_CTL_11G = 2, | 234 | AR5K_CTL_11G = 2, |
234 | AR5K_CTL_TURBO = 3, | 235 | AR5K_CTL_TURBO = 3, |
235 | AR5K_CTL_108G = 4, | 236 | AR5K_CTL_TURBOG = 4, |
236 | AR5K_CTL_2GHT20 = 5, | 237 | AR5K_CTL_2GHT20 = 5, |
237 | AR5K_CTL_5GHT20 = 6, | 238 | AR5K_CTL_5GHT20 = 6, |
238 | AR5K_CTL_2GHT40 = 7, | 239 | AR5K_CTL_2GHT40 = 7, |
@@ -240,65 +241,114 @@ enum ath5k_ctl_mode { | |||
240 | AR5K_CTL_MODE_M = 15, | 241 | AR5K_CTL_MODE_M = 15, |
241 | }; | 242 | }; |
242 | 243 | ||
244 | /* Default CTL ids for the 3 main reg domains. | ||
245 | * Atheros only uses these by default but vendors | ||
246 | * can have up to 32 different CTLs for different | ||
247 | * scenarios. Note that theese values are ORed with | ||
248 | * the mode id (above) so we can have up to 24 CTL | ||
249 | * datasets out of these 3 main regdomains. That leaves | ||
250 | * 8 ids that can be used by vendors and since 0x20 is | ||
251 | * missing from HAL sources i guess this is the set of | ||
252 | * custom CTLs vendors can use. */ | ||
253 | #define AR5K_CTL_FCC 0x10 | ||
254 | #define AR5K_CTL_CUSTOM 0x20 | ||
255 | #define AR5K_CTL_ETSI 0x30 | ||
256 | #define AR5K_CTL_MKK 0x40 | ||
257 | |||
258 | /* Indicates a CTL with only mode set and | ||
259 | * no reg domain mapping, such CTLs are used | ||
260 | * for world roaming domains or simply when | ||
261 | * a reg domain is not set */ | ||
262 | #define AR5K_CTL_NO_REGDOMAIN 0xf0 | ||
263 | |||
264 | /* Indicates an empty (invalid) CTL */ | ||
265 | #define AR5K_CTL_NO_CTL 0xff | ||
266 | |||
243 | /* Per channel calibration data, used for power table setup */ | 267 | /* Per channel calibration data, used for power table setup */ |
244 | struct ath5k_chan_pcal_info_rf5111 { | 268 | struct ath5k_chan_pcal_info_rf5111 { |
245 | /* Power levels in half dbm units | 269 | /* Power levels in half dbm units |
246 | * for one power curve. */ | 270 | * for one power curve. */ |
247 | u8 pwr[AR5K_EEPROM_N_PWR_POINTS_5111]; | 271 | u8 pwr[AR5K_EEPROM_N_PWR_POINTS_5111]; |
248 | /* PCDAC table steps | 272 | /* PCDAC table steps |
249 | * for the above values */ | 273 | * for the above values */ |
250 | u8 pcdac[AR5K_EEPROM_N_PWR_POINTS_5111]; | 274 | u8 pcdac[AR5K_EEPROM_N_PWR_POINTS_5111]; |
251 | /* Starting PCDAC step */ | 275 | /* Starting PCDAC step */ |
252 | u8 pcdac_min; | 276 | u8 pcdac_min; |
253 | /* Final PCDAC step */ | 277 | /* Final PCDAC step */ |
254 | u8 pcdac_max; | 278 | u8 pcdac_max; |
255 | }; | 279 | }; |
256 | 280 | ||
257 | struct ath5k_chan_pcal_info_rf5112 { | 281 | struct ath5k_chan_pcal_info_rf5112 { |
258 | /* Power levels in quarter dBm units | 282 | /* Power levels in quarter dBm units |
259 | * for lower (0) and higher (3) | 283 | * for lower (0) and higher (3) |
260 | * level curves */ | 284 | * level curves in 0.25dB units */ |
261 | s8 pwr_x0[AR5K_EEPROM_N_XPD0_POINTS]; | 285 | s8 pwr_x0[AR5K_EEPROM_N_XPD0_POINTS]; |
262 | s8 pwr_x3[AR5K_EEPROM_N_XPD3_POINTS]; | 286 | s8 pwr_x3[AR5K_EEPROM_N_XPD3_POINTS]; |
263 | /* PCDAC table steps | 287 | /* PCDAC table steps |
264 | * for the above values */ | 288 | * for the above values */ |
265 | u8 pcdac_x0[AR5K_EEPROM_N_XPD0_POINTS]; | 289 | u8 pcdac_x0[AR5K_EEPROM_N_XPD0_POINTS]; |
266 | u8 pcdac_x3[AR5K_EEPROM_N_XPD3_POINTS]; | 290 | u8 pcdac_x3[AR5K_EEPROM_N_XPD3_POINTS]; |
267 | }; | 291 | }; |
268 | 292 | ||
269 | struct ath5k_chan_pcal_info_rf2413 { | 293 | struct ath5k_chan_pcal_info_rf2413 { |
270 | /* Starting pwr/pddac values */ | 294 | /* Starting pwr/pddac values */ |
271 | s8 pwr_i[AR5K_EEPROM_N_PD_GAINS]; | 295 | s8 pwr_i[AR5K_EEPROM_N_PD_GAINS]; |
272 | u8 pddac_i[AR5K_EEPROM_N_PD_GAINS]; | 296 | u8 pddac_i[AR5K_EEPROM_N_PD_GAINS]; |
273 | /* (pwr,pddac) points */ | 297 | /* (pwr,pddac) points |
274 | s8 pwr[AR5K_EEPROM_N_PD_GAINS] | 298 | * power levels in 0.5dB units */ |
275 | [AR5K_EEPROM_N_PD_POINTS]; | 299 | s8 pwr[AR5K_EEPROM_N_PD_GAINS] |
276 | u8 pddac[AR5K_EEPROM_N_PD_GAINS] | 300 | [AR5K_EEPROM_N_PD_POINTS]; |
277 | [AR5K_EEPROM_N_PD_POINTS]; | 301 | u8 pddac[AR5K_EEPROM_N_PD_GAINS] |
302 | [AR5K_EEPROM_N_PD_POINTS]; | ||
303 | }; | ||
304 | |||
305 | enum ath5k_powertable_type { | ||
306 | AR5K_PWRTABLE_PWR_TO_PCDAC = 0, | ||
307 | AR5K_PWRTABLE_LINEAR_PCDAC = 1, | ||
308 | AR5K_PWRTABLE_PWR_TO_PDADC = 2, | ||
309 | }; | ||
310 | |||
311 | struct ath5k_pdgain_info { | ||
312 | u8 pd_points; | ||
313 | u8 *pd_step; | ||
314 | /* Power values are in | ||
315 | * 0.25dB units */ | ||
316 | s16 *pd_pwr; | ||
278 | }; | 317 | }; |
279 | 318 | ||
280 | struct ath5k_chan_pcal_info { | 319 | struct ath5k_chan_pcal_info { |
281 | /* Frequency */ | 320 | /* Frequency */ |
282 | u16 freq; | 321 | u16 freq; |
283 | /* Max available power */ | 322 | /* Tx power boundaries */ |
284 | s8 max_pwr; | 323 | s16 max_pwr; |
324 | s16 min_pwr; | ||
285 | union { | 325 | union { |
286 | struct ath5k_chan_pcal_info_rf5111 rf5111_info; | 326 | struct ath5k_chan_pcal_info_rf5111 rf5111_info; |
287 | struct ath5k_chan_pcal_info_rf5112 rf5112_info; | 327 | struct ath5k_chan_pcal_info_rf5112 rf5112_info; |
288 | struct ath5k_chan_pcal_info_rf2413 rf2413_info; | 328 | struct ath5k_chan_pcal_info_rf2413 rf2413_info; |
289 | }; | 329 | }; |
330 | /* Raw values used by phy code | ||
331 | * Curves are stored in order from lower | ||
332 | * gain to higher gain (max txpower -> min txpower) */ | ||
333 | struct ath5k_pdgain_info *pd_curves; | ||
290 | }; | 334 | }; |
291 | 335 | ||
292 | /* Per rate calibration data for each mode, used for power table setup */ | 336 | /* Per rate calibration data for each mode, |
337 | * used for rate power table setup. | ||
338 | * Note: Values in 0.5dB units */ | ||
293 | struct ath5k_rate_pcal_info { | 339 | struct ath5k_rate_pcal_info { |
294 | u16 freq; /* Frequency */ | 340 | u16 freq; /* Frequency */ |
295 | /* Power level for 6-24Mbit/s rates */ | 341 | /* Power level for 6-24Mbit/s rates or |
342 | * 1Mb rate */ | ||
296 | u16 target_power_6to24; | 343 | u16 target_power_6to24; |
297 | /* Power level for 36Mbit rate */ | 344 | /* Power level for 36Mbit rate or |
345 | * 2Mb rate */ | ||
298 | u16 target_power_36; | 346 | u16 target_power_36; |
299 | /* Power level for 48Mbit rate */ | 347 | /* Power level for 48Mbit rate or |
348 | * 5.5Mbit rate */ | ||
300 | u16 target_power_48; | 349 | u16 target_power_48; |
301 | /* Power level for 54Mbit rate */ | 350 | /* Power level for 54Mbit rate or |
351 | * 11Mbit rate */ | ||
302 | u16 target_power_54; | 352 | u16 target_power_54; |
303 | }; | 353 | }; |
304 | 354 | ||
@@ -330,12 +380,6 @@ struct ath5k_eeprom_info { | |||
330 | u16 ee_cck_ofdm_power_delta; | 380 | u16 ee_cck_ofdm_power_delta; |
331 | u16 ee_scaled_cck_delta; | 381 | u16 ee_scaled_cck_delta; |
332 | 382 | ||
333 | /* Used for tx thermal adjustment (eeprom_init, rfregs) */ | ||
334 | u16 ee_tx_clip; | ||
335 | u16 ee_pwd_84; | ||
336 | u16 ee_pwd_90; | ||
337 | u16 ee_gain_select; | ||
338 | |||
339 | /* RF Calibration settings (reset, rfregs) */ | 383 | /* RF Calibration settings (reset, rfregs) */ |
340 | u16 ee_i_cal[AR5K_EEPROM_N_MODES]; | 384 | u16 ee_i_cal[AR5K_EEPROM_N_MODES]; |
341 | u16 ee_q_cal[AR5K_EEPROM_N_MODES]; | 385 | u16 ee_q_cal[AR5K_EEPROM_N_MODES]; |
@@ -363,23 +407,25 @@ struct ath5k_eeprom_info { | |||
363 | /* Power calibration data */ | 407 | /* Power calibration data */ |
364 | u16 ee_false_detect[AR5K_EEPROM_N_MODES]; | 408 | u16 ee_false_detect[AR5K_EEPROM_N_MODES]; |
365 | 409 | ||
366 | /* Number of pd gain curves per mode (RF2413) */ | 410 | /* Number of pd gain curves per mode */ |
367 | u8 ee_pd_gains[AR5K_EEPROM_N_MODES]; | 411 | u8 ee_pd_gains[AR5K_EEPROM_N_MODES]; |
412 | /* Back mapping pdcurve number -> pdcurve index in pd->pd_curves */ | ||
413 | u8 ee_pdc_to_idx[AR5K_EEPROM_N_MODES][AR5K_EEPROM_N_PD_GAINS]; | ||
368 | 414 | ||
369 | u8 ee_n_piers[AR5K_EEPROM_N_MODES]; | 415 | u8 ee_n_piers[AR5K_EEPROM_N_MODES]; |
370 | struct ath5k_chan_pcal_info ee_pwr_cal_a[AR5K_EEPROM_N_5GHZ_CHAN]; | 416 | struct ath5k_chan_pcal_info ee_pwr_cal_a[AR5K_EEPROM_N_5GHZ_CHAN]; |
371 | struct ath5k_chan_pcal_info ee_pwr_cal_b[AR5K_EEPROM_N_2GHZ_CHAN]; | 417 | struct ath5k_chan_pcal_info ee_pwr_cal_b[AR5K_EEPROM_N_2GHZ_CHAN_MAX]; |
372 | struct ath5k_chan_pcal_info ee_pwr_cal_g[AR5K_EEPROM_N_2GHZ_CHAN]; | 418 | struct ath5k_chan_pcal_info ee_pwr_cal_g[AR5K_EEPROM_N_2GHZ_CHAN_MAX]; |
373 | 419 | ||
374 | /* Per rate target power levels */ | 420 | /* Per rate target power levels */ |
375 | u16 ee_rate_target_pwr_num[AR5K_EEPROM_N_MODES]; | 421 | u8 ee_rate_target_pwr_num[AR5K_EEPROM_N_MODES]; |
376 | struct ath5k_rate_pcal_info ee_rate_tpwr_a[AR5K_EEPROM_N_5GHZ_CHAN]; | 422 | struct ath5k_rate_pcal_info ee_rate_tpwr_a[AR5K_EEPROM_N_5GHZ_CHAN]; |
377 | struct ath5k_rate_pcal_info ee_rate_tpwr_b[AR5K_EEPROM_N_2GHZ_CHAN]; | 423 | struct ath5k_rate_pcal_info ee_rate_tpwr_b[AR5K_EEPROM_N_2GHZ_CHAN_MAX]; |
378 | struct ath5k_rate_pcal_info ee_rate_tpwr_g[AR5K_EEPROM_N_2GHZ_CHAN]; | 424 | struct ath5k_rate_pcal_info ee_rate_tpwr_g[AR5K_EEPROM_N_2GHZ_CHAN_MAX]; |
379 | 425 | ||
380 | /* Conformance test limits (Unused) */ | 426 | /* Conformance test limits (Unused) */ |
381 | u16 ee_ctls; | 427 | u8 ee_ctls; |
382 | u16 ee_ctl[AR5K_EEPROM_MAX_CTLS]; | 428 | u8 ee_ctl[AR5K_EEPROM_MAX_CTLS]; |
383 | struct ath5k_edge_power ee_ctl_pwr[AR5K_EEPROM_N_EDGES * AR5K_EEPROM_MAX_CTLS]; | 429 | struct ath5k_edge_power ee_ctl_pwr[AR5K_EEPROM_N_EDGES * AR5K_EEPROM_MAX_CTLS]; |
384 | 430 | ||
385 | /* Noise Floor Calibration settings */ | 431 | /* Noise Floor Calibration settings */ |