GNU Linux-libre 4.14.332-gnu1
[releases.git] / drivers / staging / rtl8723bs / include / hal_com_phycfg.h
1 /******************************************************************************
2  *
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of version 2 of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12  * more details.
13  *
14  ******************************************************************************/
15 #ifndef __HAL_COM_PHYCFG_H__
16 #define __HAL_COM_PHYCFG_H__
17
18 #define         PathA           0x0     /*  Useless */
19 #define         PathB           0x1
20 #define         PathC           0x2
21 #define         PathD           0x3
22
23 enum RATE_SECTION {
24         CCK = 0,
25         OFDM,
26         HT_MCS0_MCS7,
27         HT_MCS8_MCS15,
28         HT_MCS16_MCS23,
29         HT_MCS24_MCS31,
30         VHT_1SSMCS0_1SSMCS9,
31         VHT_2SSMCS0_2SSMCS9,
32         VHT_3SSMCS0_3SSMCS9,
33         VHT_4SSMCS0_4SSMCS9,
34 };
35
36 enum RF_TX_NUM {
37         RF_1TX = 0,
38         RF_2TX,
39         RF_3TX,
40         RF_4TX,
41         RF_MAX_TX_NUM,
42         RF_TX_NUM_NONIMPLEMENT,
43 };
44
45 #define MAX_POWER_INDEX                 0x3F
46
47 enum _REGULATION_TXPWR_LMT {
48         TXPWR_LMT_FCC = 0,
49         TXPWR_LMT_MKK,
50         TXPWR_LMT_ETSI,
51         TXPWR_LMT_WW,
52         TXPWR_LMT_MAX_REGULATION_NUM,
53 };
54
55 /*------------------------------Define structure----------------------------*/
56 struct bb_register_def {
57         u32 rfintfs;                    /*  set software control: */
58                                         /*      0x870~0x877[8 bytes] */
59
60         u32 rfintfo;                    /*  output data: */
61                                         /*      0x860~0x86f [16 bytes] */
62
63         u32 rfintfe;                    /*  output enable: */
64                                         /*      0x860~0x86f [16 bytes] */
65
66         u32 rf3wireOffset;              /*  LSSI data: */
67                                         /*      0x840~0x84f [16 bytes] */
68
69         u32 rfHSSIPara2;                /*  wire parameter control2 : */
70                                         /*      0x824~0x827, 0x82c~0x82f,
71                                          *      0x834~0x837, 0x83c~0x83f
72                                          */
73         u32 rfLSSIReadBack;             /* LSSI RF readback data SI mode */
74                                         /*      0x8a0~0x8af [16 bytes] */
75
76         u32 rfLSSIReadBackPi;           /* LSSI RF readback data PI mode
77                                          *      0x8b8-8bc for Path A and B */
78
79 };
80
81 u8
82 PHY_GetTxPowerByRateBase(
83 struct adapter *        Adapter,
84 u8              Band,
85 u8              RfPath,
86 u8              TxNum,
87 enum RATE_SECTION       RateSection
88         );
89
90 u8
91 PHY_GetRateSectionIndexOfTxPowerByRate(
92 struct adapter *padapter,
93 u32             RegAddr,
94 u32             BitMask
95         );
96
97 void
98 PHY_GetRateValuesOfTxPowerByRate(
99 struct adapter *padapter,
100 u32             RegAddr,
101 u32             BitMask,
102 u32             Value,
103         u8*             RateIndex,
104         s8*             PwrByRateVal,
105         u8*             RateNum
106         );
107
108 u8
109 PHY_GetRateIndexOfTxPowerByRate(
110 u8 Rate
111         );
112
113 void
114 PHY_SetTxPowerIndexByRateSection(
115 struct adapter *        padapter,
116 u8              RFPath,
117 u8              Channel,
118 u8              RateSection
119         );
120
121 s8
122 PHY_GetTxPowerByRate(
123 struct adapter *padapter,
124 u8      Band,
125 u8      RFPath,
126 u8      TxNum,
127 u8      RateIndex
128         );
129
130 void
131 PHY_SetTxPowerByRate(
132 struct adapter *padapter,
133 u8      Band,
134 u8      RFPath,
135 u8      TxNum,
136 u8      Rate,
137 s8                      Value
138         );
139
140 void
141 PHY_SetTxPowerLevelByPath(
142 struct adapter *Adapter,
143 u8      channel,
144 u8      path
145         );
146
147 void
148 PHY_SetTxPowerIndexByRateArray(
149 struct adapter *        padapter,
150 u8              RFPath,
151 enum CHANNEL_WIDTH      BandWidth,
152 u8              Channel,
153 u8*                     Rates,
154 u8              RateArraySize
155         );
156
157 void
158 PHY_InitTxPowerByRate(
159 struct adapter *padapter
160         );
161
162 void
163 PHY_StoreTxPowerByRate(
164 struct adapter *padapter,
165 u32             Band,
166 u32             RfPath,
167 u32             TxNum,
168 u32             RegAddr,
169 u32             BitMask,
170 u32             Data
171         );
172
173 void
174 PHY_TxPowerByRateConfiguration(
175         struct adapter *                padapter
176         );
177
178 u8
179 PHY_GetTxPowerIndexBase(
180 struct adapter *        padapter,
181 u8              RFPath,
182 u8              Rate,
183 enum CHANNEL_WIDTH      BandWidth,
184 u8              Channel,
185         bool            *bIn24G
186         );
187
188 s8 PHY_GetTxPowerLimit (struct adapter *adapter, u32 RegPwrTblSel,
189                         enum BAND_TYPE Band, enum CHANNEL_WIDTH Bandwidth,
190 u8              RfPath,
191 u8              DataRate,
192 u8              Channel
193         );
194
195 void
196 PHY_SetTxPowerLimit(
197 struct adapter *                Adapter,
198 u8                      *Regulation,
199 u8                      *Band,
200 u8                      *Bandwidth,
201 u8                      *RateSection,
202 u8                      *RfPath,
203 u8                      *Channel,
204 u8                      *PowerLimit
205         );
206
207 void
208 PHY_ConvertTxPowerLimitToPowerIndex(
209 struct adapter *                Adapter
210         );
211
212 void
213 PHY_InitTxPowerLimit(
214 struct adapter *                Adapter
215         );
216
217 s8
218 PHY_GetTxPowerTrackingOffset(
219         struct adapter *padapter,
220         u8      Rate,
221         u8      RFPath
222         );
223
224 u8
225 PHY_GetTxPowerIndex(
226 struct adapter *                padapter,
227 u8                      RFPath,
228 u8                      Rate,
229 enum CHANNEL_WIDTH              BandWidth,
230 u8                      Channel
231         );
232
233 void
234 PHY_SetTxPowerIndex(
235 struct adapter *        padapter,
236 u32                     PowerIndex,
237 u8              RFPath,
238 u8              Rate
239         );
240
241 void
242 Hal_ChannelPlanToRegulation(
243 struct adapter *        Adapter,
244 u16                     ChannelPlan
245         );
246
247 #define MAX_PARA_FILE_BUF_LEN   25600
248
249 #define LOAD_MAC_PARA_FILE                              BIT0
250 #define LOAD_BB_PARA_FILE                                       BIT1
251 #define LOAD_BB_PG_PARA_FILE                            BIT2
252 #define LOAD_BB_MP_PARA_FILE                            BIT3
253 #define LOAD_RF_PARA_FILE                                       BIT4
254 #define LOAD_RF_TXPWR_TRACK_PARA_FILE   BIT5
255 #define LOAD_RF_TXPWR_LMT_PARA_FILE             BIT6
256
257 int phy_ConfigMACWithParaFile(struct adapter *Adapter, char*pFileName);
258
259 int phy_ConfigBBWithParaFile(struct adapter *Adapter, char*pFileName, u32 ConfigType);
260
261 int phy_ConfigBBWithPgParaFile(struct adapter *Adapter, char*pFileName);
262
263 int phy_ConfigBBWithMpParaFile(struct adapter *Adapter, char*pFileName);
264
265 int PHY_ConfigRFWithParaFile(struct adapter *Adapter, char*pFileName, u8 eRFPath);
266
267 int PHY_ConfigRFWithTxPwrTrackParaFile(struct adapter *Adapter, char*pFileName);
268
269 int PHY_ConfigRFWithPowerLimitTableParaFile(struct adapter *Adapter, char*pFileName);
270
271 void phy_free_filebuf(struct adapter *padapter);
272
273 #endif /* __HAL_COMMON_H__ */