mirror of https://gitee.com/openkylin/linux.git
113 lines
2.9 KiB
C
113 lines
2.9 KiB
C
|
#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_ */
|