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_AGC_TAB[] = {
\r
258 ODM_ReadAndConfig_MP_8723B_AGC_TAB(
\r
259 IN PDM_ODM_T pDM_Odm
\r
264 BOOLEAN bMatched = TRUE, bSkipped = FALSE;
\r
265 u4Byte ArrayLen = sizeof(Array_MP_8723B_AGC_TAB)/sizeof(u4Byte);
\r
266 pu4Byte Array = Array_MP_8723B_AGC_TAB;
\r
268 u4Byte v1 = 0, v2 = 0, pre_v1 = 0, pre_v2 = 0;
\r
270 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_AGC_TAB\n"));
\r
272 while ((i + 1) < ArrayLen) {
\r
276 if (v1 & (BIT31 | BIT30)) {/*positive & negative condition*/
\r
277 if (v1 & BIT31) {/* positive condition*/
\r
278 cCond = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);
\r
279 if (cCond == COND_ENDIF) {/*end*/
\r
282 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ENDIF\n"));
\r
283 } else if (cCond == COND_ELSE) { /*else*/
\r
284 bMatched = bSkipped?FALSE:TRUE;
\r
285 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ELSE\n"));
\r
287 else {/*if , else if*/
\r
290 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("IF or ELSE IF\n"));
\r
292 } else if (v1 & BIT30) { /*negative condition*/
\r
293 if (bSkipped == FALSE) {
\r
294 if (CheckPositive(pDM_Odm, pre_v1, pre_v2, v1, v2)) {
\r
306 odm_ConfigBB_AGC_8723B(pDM_Odm, v1, bMaskDWord, v2);
\r
313 ODM_GetVersion_MP_8723B_AGC_TAB(void)
\r
318 /******************************************************************************
\r
320 ******************************************************************************/
\r
322 u4Byte Array_MP_8723B_PHY_REG[] = {
\r
520 ODM_ReadAndConfig_MP_8723B_PHY_REG(
\r
521 IN PDM_ODM_T pDM_Odm
\r
526 BOOLEAN bMatched = TRUE, bSkipped = FALSE;
\r
527 u4Byte ArrayLen = sizeof(Array_MP_8723B_PHY_REG)/sizeof(u4Byte);
\r
528 pu4Byte Array = Array_MP_8723B_PHY_REG;
\r
530 u4Byte v1 = 0, v2 = 0, pre_v1 = 0, pre_v2 = 0;
\r
532 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_PHY_REG\n"));
\r
534 while ((i + 1) < ArrayLen) {
\r
538 if (v1 & (BIT31 | BIT30)) {/*positive & negative condition*/
\r
539 if (v1 & BIT31) {/* positive condition*/
\r
540 cCond = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);
\r
541 if (cCond == COND_ENDIF) {/*end*/
\r
544 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ENDIF\n"));
\r
545 } else if (cCond == COND_ELSE) { /*else*/
\r
546 bMatched = bSkipped?FALSE:TRUE;
\r
547 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ELSE\n"));
\r
549 else {/*if , else if*/
\r
552 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("IF or ELSE IF\n"));
\r
554 } else if (v1 & BIT30) { /*negative condition*/
\r
555 if (bSkipped == FALSE) {
\r
556 if (CheckPositive(pDM_Odm, pre_v1, pre_v2, v1, v2)) {
\r
568 odm_ConfigBB_PHY_8723B(pDM_Odm, v1, bMaskDWord, v2);
\r
575 ODM_GetVersion_MP_8723B_PHY_REG(void)
\r
580 /******************************************************************************
\r
582 ******************************************************************************/
\r
584 u4Byte Array_MP_8723B_PHY_REG_PG[] = {
\r
585 0, 0, 0, 0x00000e08, 0x0000ff00, 0x00003800,
\r
586 0, 0, 0, 0x0000086c, 0xffffff00, 0x32343600,
\r
587 0, 0, 0, 0x00000e00, 0xffffffff, 0x40424444,
\r
588 0, 0, 0, 0x00000e04, 0xffffffff, 0x28323638,
\r
589 0, 0, 0, 0x00000e10, 0xffffffff, 0x38404244,
\r
590 0, 0, 0, 0x00000e14, 0xffffffff, 0x26303436
\r
594 ODM_ReadAndConfig_MP_8723B_PHY_REG_PG(
\r
595 IN PDM_ODM_T pDM_Odm
\r
599 u4Byte ArrayLen = sizeof(Array_MP_8723B_PHY_REG_PG)/sizeof(u4Byte);
\r
600 pu4Byte Array = Array_MP_8723B_PHY_REG_PG;
\r
602 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
\r
603 PADAPTER Adapter = pDM_Odm->Adapter;
\r
604 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
\r
606 PlatformZeroMemory(pHalData->BufOfLinesPwrByRate, MAX_LINES_HWCONFIG_TXT*MAX_BYTES_LINE_HWCONFIG_TXT);
\r
607 pHalData->nLinesReadPwrByRate = ArrayLen/6;
\r
610 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_PHY_REG_PG\n"));
\r
612 pDM_Odm->PhyRegPgVersion = 1;
\r
613 pDM_Odm->PhyRegPgValueType = PHY_REG_PG_EXACT_VALUE;
\r
615 for (i = 0; i < ArrayLen; i += 6) {
\r
616 u4Byte v1 = Array[i];
\r
617 u4Byte v2 = Array[i+1];
\r
618 u4Byte v3 = Array[i+2];
\r
619 u4Byte v4 = Array[i+3];
\r
620 u4Byte v5 = Array[i+4];
\r
621 u4Byte v6 = Array[i+5];
\r
623 odm_ConfigBB_PHY_REG_PG_8723B(pDM_Odm, v1, v2, v3, v4, v5, v6);
\r
625 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
\r
626 rsprintf(pHalData->BufOfLinesPwrByRate[i/6], 100, "%s, %s, %s, 0x%X, 0x%08X, 0x%08X,",
\r
627 (v1 == 0?"2.4G":" 5G"), (v2 == 0?"A":"B"), (v3 == 0?"1Tx":"2Tx"), v4, v5, v6);
\r
634 #endif /* end of HWIMG_SUPPORT*/
\r