]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - sys/dev/bwi/bwirf.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / sys / dev / bwi / bwirf.h
1 /*
2  * Copyright (c) 2007 The DragonFly Project.  All rights reserved.
3  * 
4  * This code is derived from software contributed to The DragonFly Project
5  * by Sepherosa Ziehau <sepherosa@gmail.com>
6  * 
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in
15  *    the documentation and/or other materials provided with the
16  *    distribution.
17  * 3. Neither the name of The DragonFly Project nor the names of its
18  *    contributors may be used to endorse or promote products derived
19  *    from this software without specific, prior written permission.
20  * 
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
25  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
31  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32  * SUCH DAMAGE.
33  * 
34  * $DragonFly: src/sys/dev/netif/bwi/bwirf.h,v 1.3 2007/10/03 04:53:19 sephe Exp $
35  * $FreeBSD$
36  */
37
38 #ifndef _BWI_RF_H
39 #define _BWI_RF_H
40
41 int             bwi_rf_attach(struct bwi_mac *);
42 void            bwi_rf_clear_state(struct bwi_rf *);
43
44 int             bwi_rf_map_txpower(struct bwi_mac *);
45 void            bwi_rf_lo_adjust(struct bwi_mac *, const struct bwi_tpctl *);
46 void            bwi_rf_set_chan(struct bwi_mac *, u_int, int);
47 void            bwi_rf_get_gains(struct bwi_mac *);
48 void            bwi_rf_init(struct bwi_mac *);
49 void            bwi_rf_init_bcm2050(struct bwi_mac *);
50 void            bwi_rf_init_hw_nrssi_table(struct bwi_mac *, uint16_t);
51 void            bwi_rf_set_ant_mode(struct bwi_mac *, int);
52
53 void            bwi_rf_clear_tssi(struct bwi_mac *);
54 int             bwi_rf_get_latest_tssi(struct bwi_mac *, int8_t[], uint16_t);
55 int             bwi_rf_tssi2dbm(struct bwi_mac *, int8_t, int8_t *);
56
57 void            bwi_rf_write(struct bwi_mac *, uint16_t, uint16_t);
58 uint16_t        bwi_rf_read(struct bwi_mac *, uint16_t);
59
60 static __inline void
61 bwi_rf_off(struct bwi_mac *_mac)
62 {
63         _mac->mac_rf.rf_off(_mac);
64         /* TODO:LED */
65
66         _mac->mac_rf.rf_flags &= ~BWI_RF_F_ON;
67 }
68
69 static __inline void
70 bwi_rf_on(struct bwi_mac *_mac)
71 {
72         if (_mac->mac_rf.rf_flags & BWI_RF_F_ON)
73                 return;
74
75         _mac->mac_rf.rf_on(_mac);
76         /* TODO: LED */
77
78         _mac->mac_rf.rf_flags |= BWI_RF_F_ON;
79 }
80
81 static __inline void
82 bwi_rf_calc_nrssi_slope(struct bwi_mac *_mac)
83 {
84         _mac->mac_rf.rf_calc_nrssi_slope(_mac);
85 }
86
87 static __inline void
88 bwi_rf_set_nrssi_thr(struct bwi_mac *_mac)
89 {
90         _mac->mac_rf.rf_set_nrssi_thr(_mac);
91 }
92
93 static __inline int
94 bwi_rf_calc_rssi(struct bwi_mac *_mac, const struct bwi_rxbuf_hdr *_hdr)
95 {
96         return _mac->mac_rf.rf_calc_rssi(_mac, _hdr);
97 }
98
99 static __inline int
100 bwi_rf_calc_noise(struct bwi_mac *_mac)
101 {
102         return _mac->mac_rf.rf_calc_noise(_mac);
103 }
104
105 static __inline void
106 bwi_rf_lo_update(struct bwi_mac *_mac)
107 {
108         return _mac->mac_rf.rf_lo_update(_mac);
109 }
110
111 #define RF_WRITE(mac, ofs, val)         bwi_rf_write((mac), (ofs), (val))
112 #define RF_READ(mac, ofs)               bwi_rf_read((mac), (ofs))
113
114 #define RF_SETBITS(mac, ofs, bits)              \
115         RF_WRITE((mac), (ofs), RF_READ((mac), (ofs)) | (bits))
116 #define RF_CLRBITS(mac, ofs, bits)              \
117         RF_WRITE((mac), (ofs), RF_READ((mac), (ofs)) & ~(bits))
118 #define RF_FILT_SETBITS(mac, ofs, filt, bits)   \
119         RF_WRITE((mac), (ofs), (RF_READ((mac), (ofs)) & (filt)) | (bits))
120
121 #define BWI_RFR_ATTEN                   0x43
122
123 #define BWI_RFR_TXPWR                   0x52
124 #define BWI_RFR_TXPWR1_MASK             __BITS(6, 4)
125
126 #define BWI_RFR_BBP_ATTEN               0x60
127 #define BWI_RFR_BBP_ATTEN_CALIB_BIT     __BIT(0)
128 #define BWI_RFR_BBP_ATTEN_CALIB_IDX     __BITS(4, 1)
129
130 /*
131  * TSSI -- TX power maps
132  */
133 /*
134  * http://bcm-specs.sipsolutions.net/TSSI_to_DBM_Table
135  * B PHY
136  */
137 #define BWI_TXPOWER_MAP_11B \
138         0x4d,   0x4c,   0x4b,   0x4a,   0x4a,   0x49,   0x48,   0x47,   \
139         0x47,   0x46,   0x45,   0x45,   0x44,   0x43,   0x42,   0x42,   \
140         0x41,   0x40,   0x3f,   0x3e,   0x3d,   0x3c,   0x3b,   0x3a,   \
141         0x39,   0x38,   0x37,   0x36,   0x35,   0x34,   0x32,   0x31,   \
142         0x30,   0x2f,   0x2d,   0x2c,   0x2b,   0x29,   0x28,   0x26,   \
143         0x25,   0x23,   0x21,   0x1f,   0x1d,   0x1a,   0x17,   0x14,   \
144         0x10,   0x0c,   0x06,   0x00,   -7,     -7,     -7,     -7,     \
145         -7,     -7,     -7,     -7,     -7,     -7,     -7,     -7
146 /*
147  * http://bcm-specs.sipsolutions.net/TSSI_to_DBM_Table
148  * G PHY
149  */
150 #define BWI_TXPOWER_MAP_11G \
151         77,     77,     77,     76,     76,     76,     75,     75,     \
152         74,     74,     73,     73,     73,     72,     72,     71,     \
153         71,     70,     70,     69,     68,     68,     67,     67,     \
154         66,     65,     65,     64,     63,     63,     62,     61,     \
155         60,     59,     58,     57,     56,     55,     54,     53,     \
156         52,     50,     49,     47,     45,     43,     40,     37,     \
157         33,     28,     22,     14,     5,      -7,     -20,    -20,    \
158         -20,    -20,    -20,    -20,    -20,    -20,    -20,    -20
159
160 #endif  /* !_BWI_RF_H */