| #ifndef B43_LO_H_ |
| #define B43_LO_H_ |
| |
| #include "phy.h" |
| |
| struct b43_wldev; |
| |
| /* Local Oscillator control value-pair. */ |
| struct b43_loctl { |
| /* Control values. */ |
| s8 i; |
| s8 q; |
| /* "Used by hardware" flag. */ |
| bool used; |
| #ifdef CONFIG_B43_DEBUG |
| /* Is this lo-control-array entry calibrated? */ |
| bool calibrated; |
| #endif |
| }; |
| |
| /* Debugging: Poison value for i and q values. */ |
| #define B43_LOCTL_POISON 111 |
| |
| /* loctl->calibrated debugging mechanism */ |
| #ifdef CONFIG_B43_DEBUG |
| static inline void b43_loctl_set_calibrated(struct b43_loctl *loctl, |
| bool calibrated) |
| { |
| loctl->calibrated = calibrated; |
| } |
| static inline bool b43_loctl_is_calibrated(struct b43_loctl *loctl) |
| { |
| return loctl->calibrated; |
| } |
| #else |
| static inline void b43_loctl_set_calibrated(struct b43_loctl *loctl, |
| bool calibrated) |
| { |
| } |
| static inline bool b43_loctl_is_calibrated(struct b43_loctl *loctl) |
| { |
| return 1; |
| } |
| #endif |
| |
| /* TX Power LO Control Array. |
| * Value-pairs to adjust the LocalOscillator are stored |
| * in this structure. |
| * There are two different set of values. One for "Flag is Set" |
| * and one for "Flag is Unset". |
| * By "Flag" the flag in struct b43_rfatt is meant. |
| * The Value arrays are two-dimensional. The first index |
| * is the baseband attenuation and the second index |
| * is the radio attenuation. |
| * Use b43_get_lo_g_ctl() to retrieve a value from the lists. |
| */ |
| struct b43_txpower_lo_control { |
| #define B43_NR_BB 12 |
| #define B43_NR_RF 16 |
| /* LO Control values, with PAD Mixer */ |
| struct b43_loctl with_padmix[B43_NR_BB][B43_NR_RF]; |
| /* LO Control values, without PAD Mixer */ |
| struct b43_loctl no_padmix[B43_NR_BB][B43_NR_RF]; |
| |
| /* Flag to indicate a complete rebuild of the two tables above |
| * to the LO measuring code. */ |
| bool rebuild; |
| |
| /* Lists of valid RF and BB attenuation values for this device. */ |
| struct b43_rfatt_list rfatt_list; |
| struct b43_bbatt_list bbatt_list; |
| |
| /* Current TX Bias value */ |
| u8 tx_bias; |
| /* Current TX Magnification Value (if used by the device) */ |
| u8 tx_magn; |
| |
| /* GPHY LO is measured. */ |
| bool lo_measured; |
| |
| /* Saved device PowerVector */ |
| u64 power_vector; |
| }; |
| |
| /* Measure the BPHY Local Oscillator. */ |
| void b43_lo_b_measure(struct b43_wldev *dev); |
| /* Measure the BPHY/GPHY Local Oscillator. */ |
| void b43_lo_g_measure(struct b43_wldev *dev); |
| |
| /* Adjust the Local Oscillator to the saved attenuation |
| * and txctl values. |
| */ |
| void b43_lo_g_adjust(struct b43_wldev *dev); |
| /* Adjust to specific values. */ |
| void b43_lo_g_adjust_to(struct b43_wldev *dev, |
| u16 rfatt, u16 bbatt, u16 tx_control); |
| |
| /* Mark all possible b43_lo_g_ctl as "unused" */ |
| void b43_lo_g_ctl_mark_all_unused(struct b43_wldev *dev); |
| /* Mark the b43_lo_g_ctl corresponding to the current |
| * attenuation values as used. |
| */ |
| void b43_lo_g_ctl_mark_cur_used(struct b43_wldev *dev); |
| |
| /* Get a reference to a LO Control value pair in the |
| * TX Power LO Control Array. |
| */ |
| struct b43_loctl *b43_get_lo_g_ctl(struct b43_wldev *dev, |
| const struct b43_rfatt *rfatt, |
| const struct b43_bbatt *bbatt); |
| |
| #endif /* B43_LO_H_ */ |