| Michael Buesch | e4d6b79 | 2007-09-18 15:39:42 -0400 | [diff] [blame] | 1 | #ifndef B43_LO_H_ | 
|  | 2 | #define B43_LO_H_ | 
|  | 3 |  | 
| Michael Buesch | ef1a628 | 2008-08-27 18:53:02 +0200 | [diff] [blame] | 4 | /* G-PHY Local Oscillator */ | 
|  | 5 |  | 
|  | 6 | #include "phy_g.h" | 
| Michael Buesch | e4d6b79 | 2007-09-18 15:39:42 -0400 | [diff] [blame] | 7 |  | 
|  | 8 | struct b43_wldev; | 
|  | 9 |  | 
|  | 10 | /* Local Oscillator control value-pair. */ | 
|  | 11 | struct b43_loctl { | 
|  | 12 | /* Control values. */ | 
|  | 13 | s8 i; | 
|  | 14 | s8 q; | 
| Michael Buesch | e4d6b79 | 2007-09-18 15:39:42 -0400 | [diff] [blame] | 15 | }; | 
| Michael Buesch | e4d6b79 | 2007-09-18 15:39:42 -0400 | [diff] [blame] | 16 | /* Debugging: Poison value for i and q values. */ | 
|  | 17 | #define B43_LOCTL_POISON	111 | 
|  | 18 |  | 
| Michael Buesch | f5eda47 | 2008-04-20 16:03:32 +0200 | [diff] [blame] | 19 | /* This struct holds calibrated LO settings for a set of | 
|  | 20 | * Baseband and RF attenuation settings. */ | 
|  | 21 | struct b43_lo_calib { | 
|  | 22 | /* The set of attenuation values this set of LO | 
|  | 23 | * control values is calibrated for. */ | 
|  | 24 | struct b43_bbatt bbatt; | 
|  | 25 | struct b43_rfatt rfatt; | 
|  | 26 | /* The set of control values for the LO. */ | 
|  | 27 | struct b43_loctl ctl; | 
|  | 28 | /* The time when these settings were calibrated (in jiffies) */ | 
|  | 29 | unsigned long calib_time; | 
|  | 30 | /* List. */ | 
|  | 31 | struct list_head list; | 
|  | 32 | }; | 
| Michael Buesch | e4d6b79 | 2007-09-18 15:39:42 -0400 | [diff] [blame] | 33 |  | 
| Michael Buesch | f5eda47 | 2008-04-20 16:03:32 +0200 | [diff] [blame] | 34 | /* Size of the DC Lookup Table in 16bit words. */ | 
|  | 35 | #define B43_DC_LT_SIZE		32 | 
|  | 36 |  | 
|  | 37 | /* Local Oscillator calibration information */ | 
| Michael Buesch | e4d6b79 | 2007-09-18 15:39:42 -0400 | [diff] [blame] | 38 | struct b43_txpower_lo_control { | 
| Michael Buesch | f5eda47 | 2008-04-20 16:03:32 +0200 | [diff] [blame] | 39 | /* Lists of RF and BB attenuation values for this device. | 
|  | 40 | * Used for building hardware power control tables. */ | 
| Michael Buesch | e4d6b79 | 2007-09-18 15:39:42 -0400 | [diff] [blame] | 41 | struct b43_rfatt_list rfatt_list; | 
|  | 42 | struct b43_bbatt_list bbatt_list; | 
|  | 43 |  | 
| Michael Buesch | f5eda47 | 2008-04-20 16:03:32 +0200 | [diff] [blame] | 44 | /* The DC Lookup Table is cached in memory here. | 
|  | 45 | * Note that this is only used for Hardware Power Control. */ | 
|  | 46 | u16 dc_lt[B43_DC_LT_SIZE]; | 
|  | 47 |  | 
|  | 48 | /* List of calibrated control values (struct b43_lo_calib). */ | 
|  | 49 | struct list_head calib_list; | 
|  | 50 | /* Last time the power vector was read (jiffies). */ | 
|  | 51 | unsigned long pwr_vec_read_time; | 
|  | 52 | /* Last time the txctl values were measured (jiffies). */ | 
|  | 53 | unsigned long txctl_measured_time; | 
|  | 54 |  | 
| Michael Buesch | e4d6b79 | 2007-09-18 15:39:42 -0400 | [diff] [blame] | 55 | /* Current TX Bias value */ | 
|  | 56 | u8 tx_bias; | 
|  | 57 | /* Current TX Magnification Value (if used by the device) */ | 
|  | 58 | u8 tx_magn; | 
|  | 59 |  | 
| Michael Buesch | e4d6b79 | 2007-09-18 15:39:42 -0400 | [diff] [blame] | 60 | /* Saved device PowerVector */ | 
|  | 61 | u64 power_vector; | 
|  | 62 | }; | 
|  | 63 |  | 
| Michael Buesch | f5eda47 | 2008-04-20 16:03:32 +0200 | [diff] [blame] | 64 | /* Calibration expire timeouts. | 
|  | 65 | * Timeouts must be multiple of 15 seconds. To make sure | 
|  | 66 | * the item really expired when the 15 second timer hits, we | 
|  | 67 | * subtract two additional seconds from the timeout. */ | 
|  | 68 | #define B43_LO_CALIB_EXPIRE	(HZ * (30 - 2)) | 
|  | 69 | #define B43_LO_PWRVEC_EXPIRE	(HZ * (30 - 2)) | 
|  | 70 | #define B43_LO_TXCTL_EXPIRE	(HZ * (180 - 4)) | 
|  | 71 |  | 
| Michael Buesch | e4d6b79 | 2007-09-18 15:39:42 -0400 | [diff] [blame] | 72 |  | 
|  | 73 | /* Adjust the Local Oscillator to the saved attenuation | 
|  | 74 | * and txctl values. | 
|  | 75 | */ | 
|  | 76 | void b43_lo_g_adjust(struct b43_wldev *dev); | 
|  | 77 | /* Adjust to specific values. */ | 
|  | 78 | void b43_lo_g_adjust_to(struct b43_wldev *dev, | 
|  | 79 | u16 rfatt, u16 bbatt, u16 tx_control); | 
|  | 80 |  | 
| Michael Buesch | f5eda47 | 2008-04-20 16:03:32 +0200 | [diff] [blame] | 81 | void b43_gphy_dc_lt_init(struct b43_wldev *dev, bool update_all); | 
| Michael Buesch | e4d6b79 | 2007-09-18 15:39:42 -0400 | [diff] [blame] | 82 |  | 
| Michael Buesch | f5eda47 | 2008-04-20 16:03:32 +0200 | [diff] [blame] | 83 | void b43_lo_g_maintanance_work(struct b43_wldev *dev); | 
|  | 84 | void b43_lo_g_cleanup(struct b43_wldev *dev); | 
|  | 85 | void b43_lo_g_init(struct b43_wldev *dev); | 
| Michael Buesch | e4d6b79 | 2007-09-18 15:39:42 -0400 | [diff] [blame] | 86 |  | 
|  | 87 | #endif /* B43_LO_H_ */ |