Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003 
0004   Broadcom B43legacy wireless driver
0005 
0006   Copyright (c) 2005 Martin Langer <martin-langer@gmx.de>,
0007              Stefano Brivio <stefano.brivio@polimi.it>
0008              Michael Buesch <m@bues.ch>
0009              Danny van Dyk <kugelfang@gentoo.org>
0010              Andreas Jaggi <andreas.jaggi@waterwave.ch>
0011   Copyright (c) 2007 Larry Finger <Larry.Finger@lwfinger.net>
0012 
0013   Some parts of the code in this file are derived from the ipw2200
0014   driver  Copyright(c) 2003 - 2004 Intel Corporation.
0015 
0016 
0017 */
0018 
0019 #ifndef B43legacy_PHY_H_
0020 #define B43legacy_PHY_H_
0021 
0022 #include <linux/types.h>
0023 
0024 enum {
0025     B43legacy_ANTENNA0,   /* Antenna 0 */
0026     B43legacy_ANTENNA1,   /* Antenna 0 */
0027     B43legacy_ANTENNA_AUTO1,  /* Automatic, starting with antenna 1 */
0028     B43legacy_ANTENNA_AUTO0,  /* Automatic, starting with antenna 0 */
0029 
0030     B43legacy_ANTENNA_AUTO  = B43legacy_ANTENNA_AUTO0,
0031     B43legacy_ANTENNA_DEFAULT = B43legacy_ANTENNA_AUTO,
0032 };
0033 
0034 enum {
0035     B43legacy_INTERFMODE_NONE,
0036     B43legacy_INTERFMODE_NONWLAN,
0037     B43legacy_INTERFMODE_MANUALWLAN,
0038     B43legacy_INTERFMODE_AUTOWLAN,
0039 };
0040 
0041 /*** PHY Registers ***/
0042 
0043 /* Routing */
0044 #define B43legacy_PHYROUTE_OFDM_GPHY    0x400
0045 #define B43legacy_PHYROUTE_EXT_GPHY 0x800
0046 
0047 /* Base registers. */
0048 #define B43legacy_PHY_BASE(reg) (reg)
0049 /* OFDM (A) registers of a G-PHY */
0050 #define B43legacy_PHY_OFDM(reg) ((reg) | B43legacy_PHYROUTE_OFDM_GPHY)
0051 /* Extended G-PHY registers */
0052 #define B43legacy_PHY_EXTG(reg) ((reg) | B43legacy_PHYROUTE_EXT_GPHY)
0053 
0054 
0055 /* Extended G-PHY Registers */
0056 #define B43legacy_PHY_CLASSCTL      B43legacy_PHY_EXTG(0x02)    /* Classify control */
0057 #define B43legacy_PHY_GTABCTL       B43legacy_PHY_EXTG(0x03)    /* G-PHY table control (see below) */
0058 #define  B43legacy_PHY_GTABOFF      0x03FF          /* G-PHY table offset (see below) */
0059 #define  B43legacy_PHY_GTABNR       0xFC00          /* G-PHY table number (see below) */
0060 #define  B43legacy_PHY_GTABNR_SHIFT 10
0061 #define B43legacy_PHY_GTABDATA      B43legacy_PHY_EXTG(0x04)    /* G-PHY table data */
0062 #define B43legacy_PHY_LO_MASK       B43legacy_PHY_EXTG(0x0F)    /* Local Oscillator control mask */
0063 #define B43legacy_PHY_LO_CTL        B43legacy_PHY_EXTG(0x10)    /* Local Oscillator control */
0064 #define B43legacy_PHY_RFOVER        B43legacy_PHY_EXTG(0x11)    /* RF override */
0065 #define B43legacy_PHY_RFOVERVAL     B43legacy_PHY_EXTG(0x12)    /* RF override value */
0066 /*** OFDM table numbers ***/
0067 #define B43legacy_OFDMTAB(number, offset)               \
0068               (((number) << B43legacy_PHY_OTABLENR_SHIFT)   \
0069               | (offset))
0070 #define B43legacy_OFDMTAB_AGC1      B43legacy_OFDMTAB(0x00, 0)
0071 #define B43legacy_OFDMTAB_GAIN0     B43legacy_OFDMTAB(0x00, 0)
0072 #define B43legacy_OFDMTAB_GAINX     B43legacy_OFDMTAB(0x01, 0)
0073 #define B43legacy_OFDMTAB_GAIN1     B43legacy_OFDMTAB(0x01, 4)
0074 #define B43legacy_OFDMTAB_AGC3      B43legacy_OFDMTAB(0x02, 0)
0075 #define B43legacy_OFDMTAB_GAIN2     B43legacy_OFDMTAB(0x02, 3)
0076 #define B43legacy_OFDMTAB_LNAHPFGAIN1   B43legacy_OFDMTAB(0x03, 0)
0077 #define B43legacy_OFDMTAB_WRSSI     B43legacy_OFDMTAB(0x04, 0)
0078 #define B43legacy_OFDMTAB_LNAHPFGAIN2   B43legacy_OFDMTAB(0x04, 0)
0079 #define B43legacy_OFDMTAB_NOISESCALE    B43legacy_OFDMTAB(0x05, 0)
0080 #define B43legacy_OFDMTAB_AGC2      B43legacy_OFDMTAB(0x06, 0)
0081 #define B43legacy_OFDMTAB_ROTOR     B43legacy_OFDMTAB(0x08, 0)
0082 #define B43legacy_OFDMTAB_ADVRETARD B43legacy_OFDMTAB(0x09, 0)
0083 #define B43legacy_OFDMTAB_DAC       B43legacy_OFDMTAB(0x0C, 0)
0084 #define B43legacy_OFDMTAB_DC        B43legacy_OFDMTAB(0x0E, 7)
0085 #define B43legacy_OFDMTAB_PWRDYN2   B43legacy_OFDMTAB(0x0E, 12)
0086 #define B43legacy_OFDMTAB_LNAGAIN   B43legacy_OFDMTAB(0x0E, 13)
0087 
0088 #define B43legacy_OFDMTAB_LPFGAIN   B43legacy_OFDMTAB(0x0F, 12)
0089 #define B43legacy_OFDMTAB_RSSI      B43legacy_OFDMTAB(0x10, 0)
0090 
0091 #define B43legacy_OFDMTAB_AGC1_R1   B43legacy_OFDMTAB(0x13, 0)
0092 #define B43legacy_OFDMTAB_GAINX_R1  B43legacy_OFDMTAB(0x14, 0)
0093 #define B43legacy_OFDMTAB_MINSIGSQ  B43legacy_OFDMTAB(0x14, 1)
0094 #define B43legacy_OFDMTAB_AGC3_R1   B43legacy_OFDMTAB(0x15, 0)
0095 #define B43legacy_OFDMTAB_WRSSI_R1  B43legacy_OFDMTAB(0x15, 4)
0096 #define B43legacy_OFDMTAB_TSSI      B43legacy_OFDMTAB(0x15, 0)
0097 #define B43legacy_OFDMTAB_DACRFPABB B43legacy_OFDMTAB(0x16, 0)
0098 #define B43legacy_OFDMTAB_DACOFF    B43legacy_OFDMTAB(0x17, 0)
0099 #define B43legacy_OFDMTAB_DCBIAS    B43legacy_OFDMTAB(0x18, 0)
0100 
0101 void b43legacy_put_attenuation_into_ranges(int *_bbatt, int *_rfatt);
0102 
0103 /* OFDM (A) PHY Registers */
0104 #define B43legacy_PHY_VERSION_OFDM  B43legacy_PHY_OFDM(0x00)    /* Versioning register for A-PHY */
0105 #define B43legacy_PHY_BBANDCFG      B43legacy_PHY_OFDM(0x01)    /* Baseband config */
0106 #define  B43legacy_PHY_BBANDCFG_RXANT   0x180           /* RX Antenna selection */
0107 #define  B43legacy_PHY_BBANDCFG_RXANT_SHIFT 7
0108 #define B43legacy_PHY_PWRDOWN       B43legacy_PHY_OFDM(0x03)    /* Powerdown */
0109 #define B43legacy_PHY_CRSTHRES1     B43legacy_PHY_OFDM(0x06)    /* CRS Threshold 1 */
0110 #define B43legacy_PHY_LNAHPFCTL     B43legacy_PHY_OFDM(0x1C)    /* LNA/HPF control */
0111 #define B43legacy_PHY_ADIVRELATED   B43legacy_PHY_OFDM(0x27)    /* FIXME rename */
0112 #define B43legacy_PHY_CRS0      B43legacy_PHY_OFDM(0x29)
0113 #define B43legacy_PHY_ANTDWELL      B43legacy_PHY_OFDM(0x2B)    /* Antenna dwell */
0114 #define  B43legacy_PHY_ANTDWELL_AUTODIV1    0x0100          /* Automatic RX diversity start antenna */
0115 #define B43legacy_PHY_ENCORE        B43legacy_PHY_OFDM(0x49)    /* "Encore" (RangeMax / BroadRange) */
0116 #define  B43legacy_PHY_ENCORE_EN    0x0200              /* Encore enable */
0117 #define B43legacy_PHY_LMS       B43legacy_PHY_OFDM(0x55)
0118 #define B43legacy_PHY_OFDM61        B43legacy_PHY_OFDM(0x61)    /* FIXME rename */
0119 #define  B43legacy_PHY_OFDM61_10    0x0010              /* FIXME rename */
0120 #define B43legacy_PHY_IQBAL     B43legacy_PHY_OFDM(0x69)    /* I/Q balance */
0121 #define B43legacy_PHY_OTABLECTL     B43legacy_PHY_OFDM(0x72)    /* OFDM table control (see below) */
0122 #define  B43legacy_PHY_OTABLEOFF    0x03FF              /* OFDM table offset (see below) */
0123 #define  B43legacy_PHY_OTABLENR     0xFC00              /* OFDM table number (see below) */
0124 #define  B43legacy_PHY_OTABLENR_SHIFT   10
0125 #define B43legacy_PHY_OTABLEI       B43legacy_PHY_OFDM(0x73)    /* OFDM table data I */
0126 #define B43legacy_PHY_OTABLEQ       B43legacy_PHY_OFDM(0x74)    /* OFDM table data Q */
0127 #define B43legacy_PHY_HPWR_TSSICTL  B43legacy_PHY_OFDM(0x78)    /* Hardware power TSSI control */
0128 #define B43legacy_PHY_NRSSITHRES    B43legacy_PHY_OFDM(0x8A)    /* NRSSI threshold */
0129 #define B43legacy_PHY_ANTWRSETT     B43legacy_PHY_OFDM(0x8C)    /* Antenna WR settle */
0130 #define  B43legacy_PHY_ANTWRSETT_ARXDIV 0x2000              /* Automatic RX diversity enabled */
0131 #define B43legacy_PHY_CLIPPWRDOWNT  B43legacy_PHY_OFDM(0x93)    /* Clip powerdown threshold */
0132 #define B43legacy_PHY_OFDM9B        B43legacy_PHY_OFDM(0x9B)    /* FIXME rename */
0133 #define B43legacy_PHY_N1P1GAIN      B43legacy_PHY_OFDM(0xA0)
0134 #define B43legacy_PHY_P1P2GAIN      B43legacy_PHY_OFDM(0xA1)
0135 #define B43legacy_PHY_N1N2GAIN      B43legacy_PHY_OFDM(0xA2)
0136 #define B43legacy_PHY_CLIPTHRES     B43legacy_PHY_OFDM(0xA3)
0137 #define B43legacy_PHY_CLIPN1P2THRES B43legacy_PHY_OFDM(0xA4)
0138 #define B43legacy_PHY_DIVSRCHIDX    B43legacy_PHY_OFDM(0xA8)    /* Divider search gain/index */
0139 #define B43legacy_PHY_CLIPP2THRES   B43legacy_PHY_OFDM(0xA9)
0140 #define B43legacy_PHY_CLIPP3THRES   B43legacy_PHY_OFDM(0xAA)
0141 #define B43legacy_PHY_DIVP1P2GAIN   B43legacy_PHY_OFDM(0xAB)
0142 #define B43legacy_PHY_DIVSRCHGAINBACK   B43legacy_PHY_OFDM(0xAD)    /* Divider search gain back */
0143 #define B43legacy_PHY_DIVSRCHGAINCHNG   B43legacy_PHY_OFDM(0xAE)    /* Divider search gain change */
0144 #define B43legacy_PHY_CRSTHRES1_R1  B43legacy_PHY_OFDM(0xC0)    /* CRS Threshold 1 (rev 1 only) */
0145 #define B43legacy_PHY_CRSTHRES2_R1  B43legacy_PHY_OFDM(0xC1)    /* CRS Threshold 2 (rev 1 only) */
0146 #define B43legacy_PHY_TSSIP_LTBASE  B43legacy_PHY_OFDM(0x380)   /* TSSI power lookup table base */
0147 #define B43legacy_PHY_DC_LTBASE     B43legacy_PHY_OFDM(0x3A0)   /* DC lookup table base */
0148 #define B43legacy_PHY_GAIN_LTBASE   B43legacy_PHY_OFDM(0x3C0)   /* Gain lookup table base */
0149 
0150 void b43legacy_put_attenuation_into_ranges(int *_bbatt, int *_rfatt);
0151 
0152 /* Masks for the different PHY versioning registers. */
0153 #define B43legacy_PHYVER_ANALOG     0xF000
0154 #define B43legacy_PHYVER_ANALOG_SHIFT   12
0155 #define B43legacy_PHYVER_TYPE       0x0F00
0156 #define B43legacy_PHYVER_TYPE_SHIFT 8
0157 #define B43legacy_PHYVER_VERSION    0x00FF
0158 
0159 struct b43legacy_wldev;
0160 
0161 void b43legacy_phy_lock(struct b43legacy_wldev *dev);
0162 void b43legacy_phy_unlock(struct b43legacy_wldev *dev);
0163 
0164 /* Card uses the loopback gain stuff */
0165 #define has_loopback_gain(phy)           \
0166     (((phy)->rev > 1) || ((phy)->gmode))
0167 
0168 u16 b43legacy_phy_read(struct b43legacy_wldev *dev, u16 offset);
0169 void b43legacy_phy_write(struct b43legacy_wldev *dev, u16 offset, u16 val);
0170 
0171 int b43legacy_phy_init_tssi2dbm_table(struct b43legacy_wldev *dev);
0172 int b43legacy_phy_init(struct b43legacy_wldev *dev);
0173 
0174 void b43legacy_set_rx_antenna(struct b43legacy_wldev *dev, int antenna);
0175 
0176 void b43legacy_phy_set_antenna_diversity(struct b43legacy_wldev *dev);
0177 void b43legacy_phy_calibrate(struct b43legacy_wldev *dev);
0178 int b43legacy_phy_connect(struct b43legacy_wldev *dev, int connect);
0179 
0180 void b43legacy_phy_lo_b_measure(struct b43legacy_wldev *dev);
0181 void b43legacy_phy_lo_g_measure(struct b43legacy_wldev *dev);
0182 void b43legacy_phy_xmitpower(struct b43legacy_wldev *dev);
0183 
0184 /* Adjust the LocalOscillator to the saved values.
0185  * "fixed" is only set to 1 once in initialization. Set to 0 otherwise.
0186  */
0187 void b43legacy_phy_lo_adjust(struct b43legacy_wldev *dev, int fixed);
0188 void b43legacy_phy_lo_mark_all_unused(struct b43legacy_wldev *dev);
0189 
0190 void b43legacy_phy_set_baseband_attenuation(struct b43legacy_wldev *dev,
0191                         u16 baseband_attenuation);
0192 
0193 void b43legacy_power_saving_ctl_bits(struct b43legacy_wldev *dev,
0194                      int bit25, int bit26);
0195 
0196 #endif /* B43legacy_PHY_H_ */