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.26*/
\r
22 #include "mp_precomp.h"
\r
23 #include "../phydm_precomp.h"
\r
25 #if (RTL8723D_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
40 ((pDM_Odm->BoardType & BIT1) >> 1) << 5; /* _NGFF*/
\r
42 u4Byte cond1 = Condition1, cond2 = Condition2, cond3 = Condition3, cond4 = Condition4;
\r
44 u1Byte cut_version_for_para = (pDM_Odm->CutVersion == ODM_CUT_A) ? 15 : pDM_Odm->CutVersion;
\r
45 u1Byte pkg_type_for_para = (pDM_Odm->PackageType == 0) ? 15 : pDM_Odm->PackageType;
\r
47 u4Byte driver1 = cut_version_for_para << 24 |
\r
48 (pDM_Odm->SupportInterface & 0xF0) << 16 |
\r
49 pDM_Odm->SupportPlatform << 16 |
\r
50 pkg_type_for_para << 12 |
\r
51 (pDM_Odm->SupportInterface & 0x0F) << 8 |
\r
54 u4Byte driver2 = (pDM_Odm->TypeGLNA & 0xFF) << 0 |
\r
55 (pDM_Odm->TypeGPA & 0xFF) << 8 |
\r
56 (pDM_Odm->TypeALNA & 0xFF) << 16 |
\r
57 (pDM_Odm->TypeAPA & 0xFF) << 24;
\r
61 u4Byte driver4 = (pDM_Odm->TypeGLNA & 0xFF00) >> 8 |
\r
62 (pDM_Odm->TypeGPA & 0xFF00) |
\r
63 (pDM_Odm->TypeALNA & 0xFF00) << 8 |
\r
64 (pDM_Odm->TypeAPA & 0xFF00) << 16;
\r
66 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE,
\r
67 ("===> CheckPositive (cond1, cond2, cond3, cond4) = (0x%X 0x%X 0x%X 0x%X)\n", cond1, cond2, cond3, cond4));
\r
68 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE,
\r
69 ("===> CheckPositive (driver1, driver2, driver3, driver4) = (0x%X 0x%X 0x%X 0x%X)\n", driver1, driver2, driver3, driver4));
\r
71 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE,
\r
72 (" (Platform, Interface) = (0x%X, 0x%X)\n", pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface));
\r
73 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE,
\r
74 (" (Board, Package) = (0x%X, 0x%X)\n", pDM_Odm->BoardType, pDM_Odm->PackageType));
\r
77 /*============== Value Defined Check ===============*/
\r
78 /*QFN Type [15:12] and Cut Version [27:24] need to do value check*/
\r
80 if (((cond1 & 0x0000F000) != 0) && ((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))
\r
82 if (((cond1 & 0x0F000000) != 0) && ((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))
\r
85 /*=============== Bit Defined Check ================*/
\r
86 /* We don't care [31:28] */
\r
88 cond1 &= 0x00FF0FFF;
\r
89 driver1 &= 0x00FF0FFF;
\r
91 if ((cond1 & driver1) == cond1) {
\r
94 if ((cond1 & 0x0F) == 0) /* BoardType is DONTCARE*/
\r
97 if ((cond1 & BIT0) != 0) /*GLNA*/
\r
98 bitMask |= 0x000000FF;
\r
99 if ((cond1 & BIT1) != 0) /*GPA*/
\r
100 bitMask |= 0x0000FF00;
\r
101 if ((cond1 & BIT2) != 0) /*ALNA*/
\r
102 bitMask |= 0x00FF0000;
\r
103 if ((cond1 & BIT3) != 0) /*APA*/
\r
104 bitMask |= 0xFF000000;
\r
106 if (((cond2 & bitMask) == (driver2 & bitMask)) && ((cond4 & bitMask) == (driver4 & bitMask))) /* BoardType of each RF path is matched*/
\r
115 IN PDM_ODM_T pDM_Odm,
\r
116 IN const u4Byte Condition1,
\r
117 IN const u4Byte Condition2
\r
123 /******************************************************************************
\r
125 ******************************************************************************/
\r
127 u4Byte Array_MP_8723D_AGC_TAB[] = {
\r
518 ODM_ReadAndConfig_MP_8723D_AGC_TAB(
\r
519 IN PDM_ODM_T pDM_Odm
\r
524 BOOLEAN bMatched = TRUE, bSkipped = FALSE;
\r
525 u4Byte ArrayLen = sizeof(Array_MP_8723D_AGC_TAB)/sizeof(u4Byte);
\r
526 pu4Byte Array = Array_MP_8723D_AGC_TAB;
\r
528 u4Byte v1 = 0, v2 = 0, pre_v1 = 0, pre_v2 = 0;
\r
530 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723D_AGC_TAB\n"));
\r
532 while ((i + 1) < ArrayLen) {
\r
536 if (v1 & (BIT31 | BIT30)) {/*positive & negative condition*/
\r
537 if (v1 & BIT31) {/* positive condition*/
\r
538 cCond = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);
\r
539 if (cCond == COND_ENDIF) {/*end*/
\r
542 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ENDIF\n"));
\r
543 } else if (cCond == COND_ELSE) { /*else*/
\r
544 bMatched = bSkipped?FALSE:TRUE;
\r
545 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ELSE\n"));
\r
546 } else {/*if , else if*/
\r
549 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("IF or ELSE IF\n"));
\r
551 } else if (v1 & BIT30) { /*negative condition*/
\r
552 if (bSkipped == FALSE) {
\r
553 if (CheckPositive(pDM_Odm, pre_v1, pre_v2, v1, v2)) {
\r
565 odm_ConfigBB_AGC_8723D(pDM_Odm, v1, bMaskDWord, v2);
\r
572 ODM_GetVersion_MP_8723D_AGC_TAB(void)
\r
577 /******************************************************************************
\r
579 ******************************************************************************/
\r
581 u4Byte Array_MP_8723D_PHY_REG[] = {
\r
809 ODM_ReadAndConfig_MP_8723D_PHY_REG(
\r
810 IN PDM_ODM_T pDM_Odm
\r
815 BOOLEAN bMatched = TRUE, bSkipped = FALSE;
\r
816 u4Byte ArrayLen = sizeof(Array_MP_8723D_PHY_REG)/sizeof(u4Byte);
\r
817 pu4Byte Array = Array_MP_8723D_PHY_REG;
\r
819 u4Byte v1 = 0, v2 = 0, pre_v1 = 0, pre_v2 = 0;
\r
821 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723D_PHY_REG\n"));
\r
823 while ((i + 1) < ArrayLen) {
\r
827 if (v1 & (BIT31 | BIT30)) {/*positive & negative condition*/
\r
828 if (v1 & BIT31) {/* positive condition*/
\r
829 cCond = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);
\r
830 if (cCond == COND_ENDIF) {/*end*/
\r
833 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ENDIF\n"));
\r
834 } else if (cCond == COND_ELSE) { /*else*/
\r
835 bMatched = bSkipped?FALSE:TRUE;
\r
836 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ELSE\n"));
\r
837 } else {/*if , else if*/
\r
840 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("IF or ELSE IF\n"));
\r
842 } else if (v1 & BIT30) { /*negative condition*/
\r
843 if (bSkipped == FALSE) {
\r
844 if (CheckPositive(pDM_Odm, pre_v1, pre_v2, v1, v2)) {
\r
856 odm_ConfigBB_PHY_8723D(pDM_Odm, v1, bMaskDWord, v2);
\r
863 ODM_GetVersion_MP_8723D_PHY_REG(void)
\r
868 /******************************************************************************
\r
870 ******************************************************************************/
\r
872 u4Byte Array_MP_8723D_PHY_REG_PG[] = {
\r
873 0, 0, 0, 0x00000e08, 0x0000ff00, 0x00003200,
\r
874 0, 0, 0, 0x0000086c, 0xffffff00, 0x32323200,
\r
875 0, 0, 0, 0x00000e00, 0xffffffff, 0x32343434,
\r
876 0, 0, 0, 0x00000e04, 0xffffffff, 0x28303032,
\r
877 0, 0, 0, 0x00000e10, 0xffffffff, 0x30323234,
\r
878 0, 0, 0, 0x00000e14, 0xffffffff, 0x26282830
\r
882 ODM_ReadAndConfig_MP_8723D_PHY_REG_PG(
\r
883 IN PDM_ODM_T pDM_Odm
\r
887 u4Byte ArrayLen = sizeof(Array_MP_8723D_PHY_REG_PG)/sizeof(u4Byte);
\r
888 pu4Byte Array = Array_MP_8723D_PHY_REG_PG;
\r
890 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
\r
891 PADAPTER Adapter = pDM_Odm->Adapter;
\r
892 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
\r
894 PlatformZeroMemory(pHalData->BufOfLinesPwrByRate, MAX_LINES_HWCONFIG_TXT*MAX_BYTES_LINE_HWCONFIG_TXT);
\r
895 pHalData->nLinesReadPwrByRate = ArrayLen/6;
\r
898 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723D_PHY_REG_PG\n"));
\r
900 pDM_Odm->PhyRegPgVersion = 1;
\r
901 pDM_Odm->PhyRegPgValueType = PHY_REG_PG_EXACT_VALUE;
\r
903 for (i = 0; i < ArrayLen; i += 6) {
\r
904 u4Byte v1 = Array[i];
\r
905 u4Byte v2 = Array[i+1];
\r
906 u4Byte v3 = Array[i+2];
\r
907 u4Byte v4 = Array[i+3];
\r
908 u4Byte v5 = Array[i+4];
\r
909 u4Byte v6 = Array[i+5];
\r
911 odm_ConfigBB_PHY_REG_PG_8723D(pDM_Odm, v1, v2, v3, v4, v5, v6);
\r
913 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
\r
914 rsprintf((char *)pHalData->BufOfLinesPwrByRate[i/6], 100, "%s, %s, %s, 0x%X, 0x%08X, 0x%08X,",
\r
915 (v1 == 0?"2.4G":" 5G"), (v2 == 0?"A":"B"), (v3 == 0?"1Tx":"2Tx"), v4, v5, v6);
\r
922 #endif /* end of HWIMG_SUPPORT*/
\r