74c100e9f9317fcd7a80dcebddff1a2824426c6e
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bs / hal / OUTSRC / rtl8723b / HalHWImg8723B_MAC.c
1 /****************************************************************************** \r
2\r
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. \r
4\r
5 * This program is free software; you can redistribute it and/or modify it \r
6 * under the terms of version 2 of the GNU General Public License as \r
7 * published by the Free Software Foundation. \r
8\r
9 * This program is distributed in the hope that it will be useful, but WITHOUT \r
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or \r
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for \r
12 * more details. \r
13\r
14 * You should have received a copy of the GNU General Public License along with \r
15 * this program; if not, write to the Free Software Foundation, Inc., \r
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA \r
17\r
18\r
19 ******************************************************************************/\r
20 \r
21 #include "Mp_Precomp.h"\r
22 #include "../phydm_precomp.h"\r
23 \r
24 #if (RTL8723B_SUPPORT == 1)\r
25 static BOOLEAN\r
26 CheckPositive(\r
27     IN  PDM_ODM_T     pDM_Odm,\r
28     IN  const u4Byte  Condition1,\r
29     IN  const u4Byte  Condition2\r
30     )\r
31 {\r
32     u1Byte    _BoardType = ((pDM_Odm->BoardType & BIT4) >> 4) << 0 | // _GLNA\r
33                            ((pDM_Odm->BoardType & BIT3) >> 3) << 1 | // _GPA \r
34                            ((pDM_Odm->BoardType & BIT7) >> 7) << 2 | // _ALNA\r
35                            ((pDM_Odm->BoardType & BIT6) >> 6) << 3 | // _APA \r
36                            ((pDM_Odm->BoardType & BIT2) >> 2) << 4;  // _BT  \r
37 \r
38         u4Byte    cond1   = Condition1, cond2 = Condition2;\r
39         u4Byte    driver1 = pDM_Odm->CutVersion       << 24 |  \r
40                                 pDM_Odm->SupportPlatform  << 16 | \r
41                                 pDM_Odm->PackageType      << 12 | \r
42                                 pDM_Odm->SupportInterface << 8  |\r
43                                 _BoardType;\r
44 \r
45         u4Byte    driver2 = pDM_Odm->TypeGLNA <<  0 |  \r
46                                 pDM_Odm->TypeGPA  <<  8 | \r
47                                 pDM_Odm->TypeALNA << 16 | \r
48                                 pDM_Odm->TypeAPA  << 24; \r
49 \r
50     ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, \r
51                 ("===> [8812A] CheckPositive (cond1, cond2) = (0x%X 0x%X)\n", cond1, cond2));\r
52     ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, \r
53                 ("===> [8812A] CheckPositive (driver1, driver2) = (0x%X 0x%X)\n", driver1, driver2));\r
54 \r
55     ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, \r
56                 ("      (Platform, Interface) = (0x%X, 0x%X)\n", pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface));\r
57     ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, \r
58                 ("      (Board, Package) = (0x%X, 0x%X)\n", pDM_Odm->BoardType, pDM_Odm->PackageType));\r
59 \r
60 \r
61         //============== Value Defined Check ===============//\r
62         //QFN Type [15:12] and Cut Version [27:24] need to do value check\r
63         \r
64         if(((cond1 & 0x0000F000) != 0) &&((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))\r
65                 return FALSE;\r
66         if(((cond1 & 0x0F000000) != 0) &&((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))\r
67                 return FALSE;           \r
68 \r
69         //=============== Bit Defined Check ================//\r
70     // We don't care [31:28] and [23:20]\r
71     //\r
72         cond1   &= 0x000F0FFF; \r
73         driver1 &= 0x000F0FFF; \r
74 \r
75     if ((cond1 & driver1) == cond1) \r
76     {\r
77         u4Byte bitMask = 0;\r
78         if ((cond1 & 0x0F) == 0) // BoardType is DONTCARE\r
79             return TRUE;\r
80 \r
81         if ((cond1 & BIT0) != 0) //GLNA\r
82             bitMask |= 0x000000FF;\r
83         if ((cond1 & BIT1) != 0) //GPA\r
84             bitMask |= 0x0000FF00;\r
85         if ((cond1 & BIT2) != 0) //ALNA\r
86             bitMask |= 0x00FF0000;\r
87         if ((cond1 & BIT3) != 0) //APA\r
88             bitMask |= 0xFF000000;\r
89 \r
90         if ((cond2 & bitMask) == (driver2 & bitMask)) // BoardType of each RF path is matched\r
91             return TRUE;\r
92         else\r
93             return FALSE;\r
94     }\r
95     else \r
96     {\r
97         return FALSE;\r
98     }\r
99 }\r
100 static BOOLEAN\r
101 CheckNegative(\r
102     IN  PDM_ODM_T     pDM_Odm,\r
103     IN  const u4Byte  Condition1,\r
104     IN  const u4Byte  Condition2\r
105     )\r
106 {\r
107     return TRUE;\r
108 }\r
109 \r
110 /******************************************************************************\r
111 *                           MAC_REG.TXT\r
112 ******************************************************************************/\r
113 \r
114 u4Byte Array_MP_8723B_MAC_REG[] = { \r
115                 0x02F, 0x00000030,\r
116                 0x035, 0x00000000,\r
117                 0x039, 0x00000008,\r
118                 0x04E, 0x000000E0,\r
119                 0x064, 0x00000000,\r
120                 0x067, 0x00000020,\r
121                 0x428, 0x0000000A,\r
122                 0x429, 0x00000010,\r
123                 0x430, 0x00000000,\r
124                 0x431, 0x00000000,\r
125                 0x432, 0x00000000,\r
126                 0x433, 0x00000001,\r
127                 0x434, 0x00000004,\r
128                 0x435, 0x00000005,\r
129                 0x436, 0x00000007,\r
130                 0x437, 0x00000008,\r
131                 0x43C, 0x00000004,\r
132                 0x43D, 0x00000005,\r
133                 0x43E, 0x00000007,\r
134                 0x43F, 0x00000008,\r
135                 0x440, 0x0000005D,\r
136                 0x441, 0x00000001,\r
137                 0x442, 0x00000000,\r
138                 0x444, 0x00000010,\r
139                 0x445, 0x00000000,\r
140                 0x446, 0x00000000,\r
141                 0x447, 0x00000000,\r
142                 0x448, 0x00000000,\r
143                 0x449, 0x000000F0,\r
144                 0x44A, 0x0000000F,\r
145                 0x44B, 0x0000003E,\r
146                 0x44C, 0x00000010,\r
147                 0x44D, 0x00000000,\r
148                 0x44E, 0x00000000,\r
149                 0x44F, 0x00000000,\r
150                 0x450, 0x00000000,\r
151                 0x451, 0x000000F0,\r
152                 0x452, 0x0000000F,\r
153                 0x453, 0x00000000,\r
154                 0x456, 0x0000005E,\r
155                 0x460, 0x00000066,\r
156                 0x461, 0x00000066,\r
157                 0x4C8, 0x000000FF,\r
158                 0x4C9, 0x00000008,\r
159                 0x4CC, 0x000000FF,\r
160                 0x4CD, 0x000000FF,\r
161                 0x4CE, 0x00000001,\r
162                 0x500, 0x00000026,\r
163                 0x501, 0x000000A2,\r
164                 0x502, 0x0000002F,\r
165                 0x503, 0x00000000,\r
166                 0x504, 0x00000028,\r
167                 0x505, 0x000000A3,\r
168                 0x506, 0x0000005E,\r
169                 0x507, 0x00000000,\r
170                 0x508, 0x0000002B,\r
171                 0x509, 0x000000A4,\r
172                 0x50A, 0x0000005E,\r
173                 0x50B, 0x00000000,\r
174                 0x50C, 0x0000004F,\r
175                 0x50D, 0x000000A4,\r
176                 0x50E, 0x00000000,\r
177                 0x50F, 0x00000000,\r
178                 0x512, 0x0000001C,\r
179                 0x514, 0x0000000A,\r
180                 0x516, 0x0000000A,\r
181                 0x525, 0x0000004F,\r
182                 0x550, 0x00000010,\r
183                 0x551, 0x00000010,\r
184                 0x559, 0x00000002,\r
185                 0x55C, 0x00000050,\r
186                 0x55D, 0x000000FF,\r
187                 0x605, 0x00000030,\r
188                 0x608, 0x0000000E,\r
189                 0x609, 0x0000002A,\r
190                 0x620, 0x000000FF,\r
191                 0x621, 0x000000FF,\r
192                 0x622, 0x000000FF,\r
193                 0x623, 0x000000FF,\r
194                 0x624, 0x000000FF,\r
195                 0x625, 0x000000FF,\r
196                 0x626, 0x000000FF,\r
197                 0x627, 0x000000FF,\r
198                 0x638, 0x00000050,\r
199                 0x63C, 0x0000000A,\r
200                 0x63D, 0x0000000A,\r
201                 0x63E, 0x0000000E,\r
202                 0x63F, 0x0000000E,\r
203                 0x640, 0x00000040,\r
204                 0x642, 0x00000040,\r
205                 0x643, 0x00000000,\r
206                 0x652, 0x000000C8,\r
207                 0x66E, 0x00000005,\r
208                 0x700, 0x00000021,\r
209                 0x701, 0x00000043,\r
210                 0x702, 0x00000065,\r
211                 0x703, 0x00000087,\r
212                 0x708, 0x00000021,\r
213                 0x709, 0x00000043,\r
214                 0x70A, 0x00000065,\r
215                 0x70B, 0x00000087,\r
216                 0x765, 0x00000018,\r
217                 0x76E, 0x00000004,\r
218 \r
219 };\r
220 \r
221 void\r
222 ODM_ReadAndConfig_MP_8723B_MAC_REG(\r
223         IN   PDM_ODM_T  pDM_Odm\r
224         )\r
225 {\r
226     u4Byte     i         = 0;\r
227     u1Byte     cCond;\r
228     BOOLEAN bMatched = TRUE, bSkipped = FALSE;\r
229 //ask by Luke.Lee\r
230     u4Byte     ArrayLen    = sizeof(Array_MP_8723B_MAC_REG)/sizeof(u4Byte);\r
231     pu4Byte    Array       = Array_MP_8723B_MAC_REG;\r
232         \r
233     ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_MAC_REG\n"));\r
234 \r
235         while(( i+1) < ArrayLen)\r
236         {\r
237                 u4Byte v1 = Array[i];\r
238                 u4Byte v2 = Array[i+1];\r
239 \r
240                 if(v1 & (BIT31|BIT30)) //positive & negative condition\r
241                 {\r
242                         if(v1 & BIT31) // positive condition\r
243                         {\r
244                                 cCond  = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);\r
245                                 if(cCond == COND_ENDIF) //end\r
246                                 {\r
247                                         bMatched = TRUE;\r
248                                         bSkipped = FALSE;\r
249                                 }\r
250                                 else if(cCond == COND_ELSE) //else\r
251                                 {\r
252                                         bMatched = bSkipped?FALSE:TRUE;\r
253                                 }\r
254                                 else //if , else if\r
255                                 {\r
256                                         if(bSkipped)\r
257                                                 bMatched = FALSE;\r
258                                         else\r
259                                         {\r
260                                                 if(CheckPositive(pDM_Odm, v1, v2))\r
261                                                 {\r
262                                                         bMatched = TRUE;\r
263                                                         bSkipped = TRUE;\r
264                                                 }\r
265                                                 else\r
266                                                 {\r
267                                                         bMatched = FALSE;\r
268                                                         bSkipped = FALSE;\r
269                                                 }\r
270                                         }\r
271                                 }\r
272                         }\r
273                         else if(v1 & BIT30){ //negative condition\r
274                         //do nothing\r
275                         }\r
276                 }\r
277                 else\r
278                 {\r
279                         if(bMatched)\r
280                         odm_ConfigMAC_8723B(pDM_Odm, v1, (u1Byte)v2);\r
281                 }\r
282         i = i + 2;\r
283         }\r
284 }\r
285 \r
286 u4Byte\r
287 ODM_GetVersion_MP_8723B_MAC_REG(void)\r
288 {\r
289            return 12;\r
290 }\r
291 \r
292 #endif // end of HWIMG_SUPPORT\r
293 \r