1 // SPDX-License-Identifier: GPL-2.0
2 /******************************************************************************
4 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
6 ******************************************************************************/
7 #include <osdep_service.h>
12 #include <rtl8188e_hal.h>
16 void dump_chip_info(struct HAL_VERSION chip_vers)
21 cnt += sprintf((buf+cnt), "Chip Version Info: CHIP_8188E_");
22 cnt += sprintf((buf+cnt), "%s_", chip_vers.ChipType == NORMAL_CHIP ?
23 "Normal_Chip" : "Test_Chip");
24 cnt += sprintf((buf+cnt), "%s_", chip_vers.VendorType == CHIP_VENDOR_TSMC ?
26 if (chip_vers.CUTVersion == A_CUT_VERSION)
27 cnt += sprintf((buf+cnt), "A_CUT_");
28 else if (chip_vers.CUTVersion == B_CUT_VERSION)
29 cnt += sprintf((buf+cnt), "B_CUT_");
30 else if (chip_vers.CUTVersion == C_CUT_VERSION)
31 cnt += sprintf((buf+cnt), "C_CUT_");
32 else if (chip_vers.CUTVersion == D_CUT_VERSION)
33 cnt += sprintf((buf+cnt), "D_CUT_");
34 else if (chip_vers.CUTVersion == E_CUT_VERSION)
35 cnt += sprintf((buf+cnt), "E_CUT_");
37 cnt += sprintf((buf+cnt), "UNKNOWN_CUT(%d)_",
38 chip_vers.CUTVersion);
39 cnt += sprintf((buf+cnt), "1T1R_");
40 cnt += sprintf((buf+cnt), "RomVer(0)\n");
45 #define CHAN_PLAN_HW 0x80
47 /* return the final channel plan decision */
48 u8 hal_com_get_channel_plan(u8 hw_channel_plan, u8 sw_channel_plan,
49 u8 def_channel_plan, bool load_fail)
56 if (!rtw_is_channel_plan_valid(sw_channel_plan))
58 if (hw_channel_plan & CHAN_PLAN_HW)
63 chnlplan = sw_channel_plan;
65 chnlplan = hw_channel_plan & (~CHAN_PLAN_HW);
67 if (!rtw_is_channel_plan_valid(chnlplan))
68 chnlplan = def_channel_plan;
73 u8 MRateToHwRate(u8 rate)
78 /* CCK and OFDM non-HT rates */
79 case IEEE80211_CCK_RATE_1MB:
82 case IEEE80211_CCK_RATE_2MB:
85 case IEEE80211_CCK_RATE_5MB:
88 case IEEE80211_CCK_RATE_11MB:
91 case IEEE80211_OFDM_RATE_6MB:
94 case IEEE80211_OFDM_RATE_9MB:
97 case IEEE80211_OFDM_RATE_12MB:
100 case IEEE80211_OFDM_RATE_18MB:
103 case IEEE80211_OFDM_RATE_24MB:
106 case IEEE80211_OFDM_RATE_36MB:
109 case IEEE80211_OFDM_RATE_48MB:
112 case IEEE80211_OFDM_RATE_54MB:
121 void hal_set_brate_cfg(u8 *brates, u16 *rate_cfg)
123 u8 i, is_brate, brate;
125 for (i = 0; i < NDIS_802_11_LENGTH_RATES_EX; i++) {
126 is_brate = brates[i] & IEEE80211_BASIC_RATE_MASK;
127 brate = brates[i] & 0x7f;
131 case IEEE80211_CCK_RATE_1MB:
132 *rate_cfg |= RATE_1M;
134 case IEEE80211_CCK_RATE_2MB:
135 *rate_cfg |= RATE_2M;
137 case IEEE80211_CCK_RATE_5MB:
138 *rate_cfg |= RATE_5_5M;
140 case IEEE80211_CCK_RATE_11MB:
141 *rate_cfg |= RATE_11M;
143 case IEEE80211_OFDM_RATE_6MB:
144 *rate_cfg |= RATE_6M;
146 case IEEE80211_OFDM_RATE_9MB:
147 *rate_cfg |= RATE_9M;
149 case IEEE80211_OFDM_RATE_12MB:
150 *rate_cfg |= RATE_12M;
152 case IEEE80211_OFDM_RATE_18MB:
153 *rate_cfg |= RATE_18M;
155 case IEEE80211_OFDM_RATE_24MB:
156 *rate_cfg |= RATE_24M;
158 case IEEE80211_OFDM_RATE_36MB:
159 *rate_cfg |= RATE_36M;
161 case IEEE80211_OFDM_RATE_48MB:
162 *rate_cfg |= RATE_48M;
164 case IEEE80211_OFDM_RATE_54MB:
165 *rate_cfg |= RATE_54M;
172 static void one_out_pipe(struct adapter *adapter)
174 struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(adapter);
176 pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[0];/* VO */
177 pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[0];/* VI */
178 pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[0];/* BE */
179 pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[0];/* BK */
181 pdvobjpriv->Queue2Pipe[4] = pdvobjpriv->RtOutPipe[0];/* BCN */
182 pdvobjpriv->Queue2Pipe[5] = pdvobjpriv->RtOutPipe[0];/* MGT */
183 pdvobjpriv->Queue2Pipe[6] = pdvobjpriv->RtOutPipe[0];/* HIGH */
184 pdvobjpriv->Queue2Pipe[7] = pdvobjpriv->RtOutPipe[0];/* TXCMD */
187 static void two_out_pipe(struct adapter *adapter, bool wifi_cfg)
189 struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(adapter);
194 * BK, BE, VI, VO, BCN, CMD, MGT, HIGH, HCCA
195 * 0, 1, 0, 1, 0, 0, 0, 0, 0
198 pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[1];/* VO */
199 pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[0];/* VI */
200 pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[1];/* BE */
201 pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[0];/* BK */
203 pdvobjpriv->Queue2Pipe[4] = pdvobjpriv->RtOutPipe[0];/* BCN */
204 pdvobjpriv->Queue2Pipe[5] = pdvobjpriv->RtOutPipe[0];/* MGT */
205 pdvobjpriv->Queue2Pipe[6] = pdvobjpriv->RtOutPipe[0];/* HIGH */
206 pdvobjpriv->Queue2Pipe[7] = pdvobjpriv->RtOutPipe[0];/* TXCMD */
210 * BK, BE, VI, VO, BCN, CMD, MGT, HIGH, HCCA
211 * 1, 1, 0, 0, 0, 0, 0, 0, 0
214 pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[0];/* VO */
215 pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[0];/* VI */
216 pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[1];/* BE */
217 pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[1];/* BK */
219 pdvobjpriv->Queue2Pipe[4] = pdvobjpriv->RtOutPipe[0];/* BCN */
220 pdvobjpriv->Queue2Pipe[5] = pdvobjpriv->RtOutPipe[0];/* MGT */
221 pdvobjpriv->Queue2Pipe[6] = pdvobjpriv->RtOutPipe[0];/* HIGH */
222 pdvobjpriv->Queue2Pipe[7] = pdvobjpriv->RtOutPipe[0];/* TXCMD */
226 static void three_out_pipe(struct adapter *adapter, bool wifi_cfg)
228 struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(adapter);
233 * BK, BE, VI, VO, BCN, CMD, MGT, HIGH, HCCA
234 * 1, 2, 1, 0, 0, 0, 0, 0, 0
237 pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[0];/* VO */
238 pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[1];/* VI */
239 pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[2];/* BE */
240 pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[1];/* BK */
242 pdvobjpriv->Queue2Pipe[4] = pdvobjpriv->RtOutPipe[0];/* BCN */
243 pdvobjpriv->Queue2Pipe[5] = pdvobjpriv->RtOutPipe[0];/* MGT */
244 pdvobjpriv->Queue2Pipe[6] = pdvobjpriv->RtOutPipe[0];/* HIGH */
245 pdvobjpriv->Queue2Pipe[7] = pdvobjpriv->RtOutPipe[0];/* TXCMD */
249 * BK, BE, VI, VO, BCN, CMD, MGT, HIGH, HCCA
250 * 2, 2, 1, 0, 0, 0, 0, 0, 0
253 pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[0];/* VO */
254 pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[1];/* VI */
255 pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[2];/* BE */
256 pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[2];/* BK */
258 pdvobjpriv->Queue2Pipe[4] = pdvobjpriv->RtOutPipe[0];/* BCN */
259 pdvobjpriv->Queue2Pipe[5] = pdvobjpriv->RtOutPipe[0];/* MGT */
260 pdvobjpriv->Queue2Pipe[6] = pdvobjpriv->RtOutPipe[0];/* HIGH */
261 pdvobjpriv->Queue2Pipe[7] = pdvobjpriv->RtOutPipe[0];/* TXCMD */
265 bool hal_mapping_out_pipe(struct adapter *adapter, u8 numoutpipe)
267 struct registry_priv *pregistrypriv = &adapter->registrypriv;
268 bool wifi_cfg = (pregistrypriv->wifi_spec) ? true : false;
271 switch (numoutpipe) {
273 one_out_pipe(adapter);
276 two_out_pipe(adapter, wifi_cfg);
279 three_out_pipe(adapter, wifi_cfg);