diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath5k/ani.c')
| -rw-r--r-- | drivers/net/wireless/ath/ath5k/ani.c | 91 | 
1 files changed, 58 insertions, 33 deletions
diff --git a/drivers/net/wireless/ath/ath5k/ani.c b/drivers/net/wireless/ath/ath5k/ani.c index bea90e6be70..bf674161a21 100644 --- a/drivers/net/wireless/ath/ath5k/ani.c +++ b/drivers/net/wireless/ath/ath5k/ani.c @@ -27,15 +27,21 @@   * or reducing sensitivity as necessary.   *   * The parameters are: + *   *   - "noise immunity" + *   *   - "spur immunity" + *   *   - "firstep level" + *   *   - "OFDM weak signal detection" + *   *   - "CCK weak signal detection"   *   * Basically we look at the amount of ODFM and CCK timing errors we get and then   * raise or lower immunity accordingly by setting one or more of these   * parameters. + *   * Newer chipsets have PHY error counters in hardware which will generate a MIB   * interrupt when they overflow. Older hardware has too enable PHY error frames   * by setting a RX flag and then count every single PHY error. When a specified @@ -45,11 +51,13 @@   */ -/*** ANI parameter control ***/ +/***********************\ +* ANI parameter control * +\***********************/  /**   * ath5k_ani_set_noise_immunity_level() - Set noise immunity level - * + * @ah: The &struct ath5k_hw   * @level: level between 0 and @ATH5K_ANI_MAX_NOISE_IMM_LVL   */  void @@ -91,12 +99,11 @@ ath5k_ani_set_noise_immunity_level(struct ath5k_hw *ah, int level)  	ATH5K_DBG_UNLIMIT(ah, ATH5K_DEBUG_ANI, "new level %d", level);  } -  /**   * ath5k_ani_set_spur_immunity_level() - Set spur immunity level - * + * @ah: The &struct ath5k_hw   * @level: level between 0 and @max_spur_level (the maximum level is dependent - *	on the chip revision). + * on the chip revision).   */  void  ath5k_ani_set_spur_immunity_level(struct ath5k_hw *ah, int level) @@ -117,10 +124,9 @@ ath5k_ani_set_spur_immunity_level(struct ath5k_hw *ah, int level)  	ATH5K_DBG_UNLIMIT(ah, ATH5K_DEBUG_ANI, "new level %d", level);  } -  /**   * ath5k_ani_set_firstep_level() - Set "firstep" level - * + * @ah: The &struct ath5k_hw   * @level: level between 0 and @ATH5K_ANI_MAX_FIRSTEP_LVL   */  void @@ -140,11 +146,9 @@ ath5k_ani_set_firstep_level(struct ath5k_hw *ah, int level)  	ATH5K_DBG_UNLIMIT(ah, ATH5K_DEBUG_ANI, "new level %d", level);  } -  /** - * ath5k_ani_set_ofdm_weak_signal_detection() - Control OFDM weak signal - *						detection - * + * ath5k_ani_set_ofdm_weak_signal_detection() - Set OFDM weak signal detection + * @ah: The &struct ath5k_hw   * @on: turn on or off   */  void @@ -182,10 +186,9 @@ ath5k_ani_set_ofdm_weak_signal_detection(struct ath5k_hw *ah, bool on)  			  on ? "on" : "off");  } -  /** - * ath5k_ani_set_cck_weak_signal_detection() - control CCK weak signal detection - * + * ath5k_ani_set_cck_weak_signal_detection() - Set CCK weak signal detection + * @ah: The &struct ath5k_hw   * @on: turn on or off   */  void @@ -200,13 +203,16 @@ ath5k_ani_set_cck_weak_signal_detection(struct ath5k_hw *ah, bool on)  } -/*** ANI algorithm ***/ +/***************\ +* ANI algorithm * +\***************/  /**   * ath5k_ani_raise_immunity() - Increase noise immunity - * + * @ah: The &struct ath5k_hw + * @as: The &struct ath5k_ani_state   * @ofdm_trigger: If this is true we are called because of too many OFDM errors, - *	the algorithm will tune more parameters then. + * the algorithm will tune more parameters then.   *   * Try to raise noise immunity (=decrease sensitivity) in several steps   * depending on the average RSSI of the beacons we received. @@ -290,9 +296,10 @@ ath5k_ani_raise_immunity(struct ath5k_hw *ah, struct ath5k_ani_state *as,  	*/  } -  /**   * ath5k_ani_lower_immunity() - Decrease noise immunity + * @ah: The &struct ath5k_hw + * @as: The &struct ath5k_ani_state   *   * Try to lower noise immunity (=increase sensitivity) in several steps   * depending on the average RSSI of the beacons we received. @@ -352,9 +359,10 @@ ath5k_ani_lower_immunity(struct ath5k_hw *ah, struct ath5k_ani_state *as)  	}  } -  /**   * ath5k_hw_ani_get_listen_time() - Update counters and return listening time + * @ah: The &struct ath5k_hw + * @as: The &struct ath5k_ani_state   *   * Return an approximation of the time spent "listening" in milliseconds (ms)   * since the last call of this function. @@ -379,9 +387,10 @@ ath5k_hw_ani_get_listen_time(struct ath5k_hw *ah, struct ath5k_ani_state *as)  	return listen;  } -  /**   * ath5k_ani_save_and_clear_phy_errors() - Clear and save PHY error counters + * @ah: The &struct ath5k_hw + * @as: The &struct ath5k_ani_state   *   * Clear the PHY error counters as soon as possible, since this might be called   * from a MIB interrupt and we want to make sure we don't get interrupted again. @@ -429,14 +438,14 @@ ath5k_ani_save_and_clear_phy_errors(struct ath5k_hw *ah,  	return 1;  } -  /**   * ath5k_ani_period_restart() - Restart ANI period + * @as: The &struct ath5k_ani_state   *   * Just reset counters, so they are clear for the next "ani period".   */  static void -ath5k_ani_period_restart(struct ath5k_hw *ah, struct ath5k_ani_state *as) +ath5k_ani_period_restart(struct ath5k_ani_state *as)  {  	/* keep last values for debugging */  	as->last_ofdm_errors = as->ofdm_errors; @@ -448,9 +457,9 @@ ath5k_ani_period_restart(struct ath5k_hw *ah, struct ath5k_ani_state *as)  	as->listen_time = 0;  } -  /**   * ath5k_ani_calibration() - The main ANI calibration function + * @ah: The &struct ath5k_hw   *   * We count OFDM and CCK errors relative to the time where we did not send or   * receive ("listen" time) and raise or lower immunity accordingly. @@ -492,7 +501,7 @@ ath5k_ani_calibration(struct ath5k_hw *ah)  		/* too many PHY errors - we have to raise immunity */  		bool ofdm_flag = as->ofdm_errors > ofdm_high ? true : false;  		ath5k_ani_raise_immunity(ah, as, ofdm_flag); -		ath5k_ani_period_restart(ah, as); +		ath5k_ani_period_restart(as);  	} else if (as->listen_time > 5 * ATH5K_ANI_LISTEN_PERIOD) {  		/* If more than 5 (TODO: why 5?) periods have passed and we got @@ -504,15 +513,18 @@ ath5k_ani_calibration(struct ath5k_hw *ah)  		if (as->ofdm_errors <= ofdm_low && as->cck_errors <= cck_low)  			ath5k_ani_lower_immunity(ah, as); -		ath5k_ani_period_restart(ah, as); +		ath5k_ani_period_restart(as);  	}  } -/*** INTERRUPT HANDLER ***/ +/*******************\ +* Interrupt handler * +\*******************/  /**   * ath5k_ani_mib_intr() - Interrupt handler for ANI MIB counters + * @ah: The &struct ath5k_hw   *   * Just read & reset the registers quickly, so they don't generate more   * interrupts, save the counters and schedule the tasklet to decide whether @@ -549,9 +561,11 @@ ath5k_ani_mib_intr(struct ath5k_hw *ah)  		tasklet_schedule(&ah->ani_tasklet);  } -  /** - * ath5k_ani_phy_error_report() - Used by older HW to report PHY errors + * ath5k_ani_phy_error_report - Used by older HW to report PHY errors + * + * @ah: The &struct ath5k_hw + * @phyerr: One of enum ath5k_phy_error_code   *   * This is used by hardware without PHY error counters to report PHY errors   * on a frame-by-frame basis, instead of the interrupt. @@ -574,10 +588,13 @@ ath5k_ani_phy_error_report(struct ath5k_hw *ah,  } -/*** INIT ***/ +/****************\ +* Initialization * +\****************/  /**   * ath5k_enable_phy_err_counters() - Enable PHY error counters + * @ah: The &struct ath5k_hw   *   * Enable PHY error counters for OFDM and CCK timing errors.   */ @@ -596,9 +613,9 @@ ath5k_enable_phy_err_counters(struct ath5k_hw *ah)  	ath5k_hw_reg_write(ah, 0, AR5K_CCK_FIL_CNT);  } -  /**   * ath5k_disable_phy_err_counters() - Disable PHY error counters + * @ah: The &struct ath5k_hw   *   * Disable PHY error counters for OFDM and CCK timing errors.   */ @@ -615,10 +632,10 @@ ath5k_disable_phy_err_counters(struct ath5k_hw *ah)  	ath5k_hw_reg_write(ah, 0, AR5K_CCK_FIL_CNT);  } -  /**   * ath5k_ani_init() - Initialize ANI - * @mode: Which mode to use (auto, manual high, manual low, off) + * @ah: The &struct ath5k_hw + * @mode: One of enum ath5k_ani_mode   *   * Initialize ANI according to mode.   */ @@ -695,10 +712,18 @@ ath5k_ani_init(struct ath5k_hw *ah, enum ath5k_ani_mode mode)  } -/*** DEBUG ***/ +/**************\ +* Debug output * +\**************/  #ifdef CONFIG_ATH5K_DEBUG +/** + * ath5k_ani_print_counters() - Print ANI counters + * @ah: The &struct ath5k_hw + * + * Used for debugging ANI + */  void  ath5k_ani_print_counters(struct ath5k_hw *ah)  {  |