1 /******************************************************************************
\r
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
\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
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
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
19 ******************************************************************************/
\r
21 /*Image2HeaderVersion: 2.14*/
\r
22 #include "mp_precomp.h"
\r
23 #include "../phydm_precomp.h"
\r
25 #if (RTL8723B_SUPPORT == 1)
\r
28 IN PDM_ODM_T pDM_Odm,
\r
29 IN const u4Byte Condition1,
\r
30 IN const u4Byte Condition2,
\r
31 IN const u4Byte Condition3,
\r
32 IN const u4Byte Condition4
\r
35 u1Byte _BoardType = ((pDM_Odm->BoardType & BIT4) >> 4) << 0 | /* _GLNA*/
\r
36 ((pDM_Odm->BoardType & BIT3) >> 3) << 1 | /* _GPA*/
\r
37 ((pDM_Odm->BoardType & BIT7) >> 7) << 2 | /* _ALNA*/
\r
38 ((pDM_Odm->BoardType & BIT6) >> 6) << 3 | /* _APA */
\r
39 ((pDM_Odm->BoardType & BIT2) >> 2) << 4; /* _BT*/
\r
41 u4Byte cond1 = Condition1, cond2 = Condition2, cond3 = Condition3, cond4 = Condition4;
\r
42 u4Byte driver1 = pDM_Odm->CutVersion << 24 |
\r
43 (pDM_Odm->SupportInterface & 0xF0) << 16 |
\r
44 pDM_Odm->SupportPlatform << 16 |
\r
45 pDM_Odm->PackageType << 12 |
\r
46 (pDM_Odm->SupportInterface & 0x0F) << 8 |
\r
49 u4Byte driver2 = (pDM_Odm->TypeGLNA & 0xFF) << 0 |
\r
50 (pDM_Odm->TypeGPA & 0xFF) << 8 |
\r
51 (pDM_Odm->TypeALNA & 0xFF) << 16 |
\r
52 (pDM_Odm->TypeAPA & 0xFF) << 24;
\r
56 u4Byte driver4 = (pDM_Odm->TypeGLNA & 0xFF00) >> 8 |
\r
57 (pDM_Odm->TypeGPA & 0xFF00) |
\r
58 (pDM_Odm->TypeALNA & 0xFF00) << 8 |
\r
59 (pDM_Odm->TypeAPA & 0xFF00) << 16;
\r
61 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE,
\r
62 ("===> CheckPositive (cond1, cond2, cond3, cond4) = (0x%X 0x%X 0x%X 0x%X)\n", cond1, cond2, cond3, cond4));
\r
63 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE,
\r
64 ("===> CheckPositive (driver1, driver2, driver3, driver4) = (0x%X 0x%X 0x%X 0x%X)\n", driver1, driver2, driver3, driver4));
\r
66 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE,
\r
67 (" (Platform, Interface) = (0x%X, 0x%X)\n", pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface));
\r
68 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE,
\r
69 (" (Board, Package) = (0x%X, 0x%X)\n", pDM_Odm->BoardType, pDM_Odm->PackageType));
\r
72 /*============== Value Defined Check ===============*/
\r
73 /*QFN Type [15:12] and Cut Version [27:24] need to do value check*/
\r
75 if (((cond1 & 0x0000F000) != 0) && ((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))
\r
77 if (((cond1 & 0x0F000000) != 0) && ((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))
\r
80 /*=============== Bit Defined Check ================*/
\r
81 /* We don't care [31:28] */
\r
83 cond1 &= 0x00FF0FFF;
\r
84 driver1 &= 0x00FF0FFF;
\r
86 if ((cond1 & driver1) == cond1) {
\r
89 if ((cond1 & 0x0F) == 0) /* BoardType is DONTCARE*/
\r
92 if ((cond1 & BIT0) != 0) /*GLNA*/
\r
93 bitMask |= 0x000000FF;
\r
94 if ((cond1 & BIT1) != 0) /*GPA*/
\r
95 bitMask |= 0x0000FF00;
\r
96 if ((cond1 & BIT2) != 0) /*ALNA*/
\r
97 bitMask |= 0x00FF0000;
\r
98 if ((cond1 & BIT3) != 0) /*APA*/
\r
99 bitMask |= 0xFF000000;
\r
101 if (((cond2 & bitMask) == (driver2 & bitMask)) && ((cond4 & bitMask) == (driver4 & bitMask))) /* BoardType of each RF path is matched*/
\r
110 IN PDM_ODM_T pDM_Odm,
\r
111 IN const u4Byte Condition1,
\r
112 IN const u4Byte Condition2
\r
118 /******************************************************************************
\r
120 ******************************************************************************/
\r
122 u4Byte Array_MP_8723B_MAC_REG[] = {
\r
230 ODM_ReadAndConfig_MP_8723B_MAC_REG(
\r
231 IN PDM_ODM_T pDM_Odm
\r
236 BOOLEAN bMatched = TRUE, bSkipped = FALSE;
\r
237 u4Byte ArrayLen = sizeof(Array_MP_8723B_MAC_REG)/sizeof(u4Byte);
\r
238 pu4Byte Array = Array_MP_8723B_MAC_REG;
\r
240 u4Byte v1 = 0, v2 = 0, pre_v1 = 0, pre_v2 = 0;
\r
242 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_MAC_REG\n"));
\r
244 while ((i + 1) < ArrayLen) {
\r
248 if (v1 & (BIT31 | BIT30)) {/*positive & negative condition*/
\r
249 if (v1 & BIT31) {/* positive condition*/
\r
250 cCond = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);
\r
251 if (cCond == COND_ENDIF) {/*end*/
\r
254 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ENDIF\n"));
\r
255 } else if (cCond == COND_ELSE) { /*else*/
\r
256 bMatched = bSkipped?FALSE:TRUE;
\r
257 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ELSE\n"));
\r
259 else {/*if , else if*/
\r
262 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("IF or ELSE IF\n"));
\r
264 } else if (v1 & BIT30) { /*negative condition*/
\r
265 if (bSkipped == FALSE) {
\r
266 if (CheckPositive(pDM_Odm, pre_v1, pre_v2, v1, v2)) {
\r
278 odm_ConfigMAC_8723B(pDM_Odm, v1, (u1Byte)v2);
\r
285 ODM_GetVersion_MP_8723B_MAC_REG(void)
\r
290 #endif /* end of HWIMG_SUPPORT*/
\r