--- /dev/null
+/****************************************************************************** \r
+* \r
+* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. \r
+* \r
+* This program is free software; you can redistribute it and/or modify it \r
+* under the terms of version 2 of the GNU General Public License as \r
+* published by the Free Software Foundation. \r
+* \r
+* This program is distributed in the hope that it will be useful, but WITHOUT \r
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or \r
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for \r
+* more details. \r
+* \r
+* You should have received a copy of the GNU General Public License along with \r
+* this program; if not, write to the Free Software Foundation, Inc., \r
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA \r
+* \r
+* \r
+******************************************************************************/\r
+\r
+/*Image2HeaderVersion: 2.18*/\r
+#include "mp_precomp.h"\r
+#include "../phydm_precomp.h"\r
+\r
+#if (RTL8188F_SUPPORT == 1)\r
+static BOOLEAN\r
+CheckPositive(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN const u4Byte Condition1,\r
+ IN const u4Byte Condition2,\r
+ IN const u4Byte Condition3,\r
+ IN const u4Byte Condition4\r
+)\r
+{\r
+ u1Byte _BoardType = ((pDM_Odm->BoardType & BIT4) >> 4) << 0 | /* _GLNA*/\r
+ ((pDM_Odm->BoardType & BIT3) >> 3) << 1 | /* _GPA*/ \r
+ ((pDM_Odm->BoardType & BIT7) >> 7) << 2 | /* _ALNA*/\r
+ ((pDM_Odm->BoardType & BIT6) >> 6) << 3 | /* _APA */\r
+ ((pDM_Odm->BoardType & BIT2) >> 2) << 4; /* _BT*/ \r
+\r
+ u4Byte cond1 = Condition1, cond2 = Condition2, cond3 = Condition3, cond4 = Condition4;\r
+ u4Byte driver1 = pDM_Odm->CutVersion << 24 | \r
+ (pDM_Odm->SupportInterface & 0xF0) << 16 | \r
+ pDM_Odm->SupportPlatform << 16 | \r
+ pDM_Odm->PackageType << 12 | \r
+ (pDM_Odm->SupportInterface & 0x0F) << 8 |\r
+ _BoardType;\r
+\r
+ u4Byte driver2 = (pDM_Odm->TypeGLNA & 0xFF) << 0 | \r
+ (pDM_Odm->TypeGPA & 0xFF) << 8 | \r
+ (pDM_Odm->TypeALNA & 0xFF) << 16 | \r
+ (pDM_Odm->TypeAPA & 0xFF) << 24; \r
+\r
+u4Byte driver3 = 0;\r
+\r
+ u4Byte driver4 = (pDM_Odm->TypeGLNA & 0xFF00) >> 8 |\r
+ (pDM_Odm->TypeGPA & 0xFF00) |\r
+ (pDM_Odm->TypeALNA & 0xFF00) << 8 |\r
+ (pDM_Odm->TypeAPA & 0xFF00) << 16;\r
+\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, \r
+ ("===> CheckPositive (cond1, cond2, cond3, cond4) = (0x%X 0x%X 0x%X 0x%X)\n", cond1, cond2, cond3, cond4));\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, \r
+ ("===> CheckPositive (driver1, driver2, driver3, driver4) = (0x%X 0x%X 0x%X 0x%X)\n", driver1, driver2, driver3, driver4));\r
+\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, \r
+ (" (Platform, Interface) = (0x%X, 0x%X)\n", pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface));\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, \r
+ (" (Board, Package) = (0x%X, 0x%X)\n", pDM_Odm->BoardType, pDM_Odm->PackageType));\r
+\r
+\r
+ /*============== Value Defined Check ===============*/\r
+ /*QFN Type [15:12] and Cut Version [27:24] need to do value check*/\r
+ \r
+ if (((cond1 & 0x0000F000) != 0) && ((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))\r
+ return FALSE;\r
+ if (((cond1 & 0x0F000000) != 0) && ((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))\r
+ return FALSE;\r
+\r
+ /*=============== Bit Defined Check ================*/\r
+ /* We don't care [31:28] */\r
+\r
+ cond1 &= 0x00FF0FFF; \r
+ driver1 &= 0x00FF0FFF; \r
+\r
+ if ((cond1 & driver1) == cond1) {\r
+ u4Byte bitMask = 0;\r
+\r
+ if ((cond1 & 0x0F) == 0) /* BoardType is DONTCARE*/\r
+ return TRUE;\r
+\r
+ if ((cond1 & BIT0) != 0) /*GLNA*/\r
+ bitMask |= 0x000000FF;\r
+ if ((cond1 & BIT1) != 0) /*GPA*/\r
+ bitMask |= 0x0000FF00;\r
+ if ((cond1 & BIT2) != 0) /*ALNA*/\r
+ bitMask |= 0x00FF0000;\r
+ if ((cond1 & BIT3) != 0) /*APA*/\r
+ bitMask |= 0xFF000000;\r
+\r
+ if (((cond2 & bitMask) == (driver2 & bitMask)) && ((cond4 & bitMask) == (driver4 & bitMask))) /* BoardType of each RF path is matched*/\r
+ return TRUE;\r
+ else\r
+ return FALSE;\r
+ } else\r
+ return FALSE;\r
+}\r
+static BOOLEAN\r
+CheckNegative(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN const u4Byte Condition1,\r
+ IN const u4Byte Condition2\r
+)\r
+{\r
+ return TRUE;\r
+}\r
+\r
+/******************************************************************************\r
+* MAC_REG.TXT\r
+******************************************************************************/\r
+\r
+u4Byte Array_MP_8188F_MAC_REG[] = { \r
+ 0x024, 0x000000DF,\r
+ 0x025, 0x00000007,\r
+ 0x02B, 0x0000001C,\r
+ 0x283, 0x00000020,\r
+ 0x421, 0x0000000F,\r
+ 0x428, 0x0000000A,\r
+ 0x429, 0x00000010,\r
+ 0x430, 0x00000000,\r
+ 0x431, 0x00000000,\r
+ 0x432, 0x00000000,\r
+ 0x433, 0x00000001,\r
+ 0x434, 0x00000004,\r
+ 0x435, 0x00000005,\r
+ 0x436, 0x00000007,\r
+ 0x437, 0x00000008,\r
+ 0x43C, 0x00000004,\r
+ 0x43D, 0x00000005,\r
+ 0x43E, 0x00000007,\r
+ 0x43F, 0x00000008,\r
+ 0x440, 0x0000005D,\r
+ 0x441, 0x00000001,\r
+ 0x442, 0x00000000,\r
+ 0x444, 0x00000010,\r
+ 0x445, 0x00000000,\r
+ 0x446, 0x00000000,\r
+ 0x447, 0x00000000,\r
+ 0x448, 0x00000000,\r
+ 0x449, 0x000000F0,\r
+ 0x44A, 0x0000000F,\r
+ 0x44B, 0x0000003E,\r
+ 0x44C, 0x00000010,\r
+ 0x44D, 0x00000000,\r
+ 0x44E, 0x00000000,\r
+ 0x44F, 0x00000000,\r
+ 0x450, 0x00000000,\r
+ 0x451, 0x000000F0,\r
+ 0x452, 0x0000000F,\r
+ 0x453, 0x00000000,\r
+ 0x456, 0x0000005E,\r
+ 0x460, 0x00000044,\r
+ 0x461, 0x00000044,\r
+ 0x4BC, 0x000000C0,\r
+ 0x4C8, 0x000000FF,\r
+ 0x4C9, 0x00000008,\r
+ 0x4CC, 0x000000FF,\r
+ 0x4CD, 0x000000FF,\r
+ 0x4CE, 0x00000001,\r
+ 0x500, 0x00000026,\r
+ 0x501, 0x000000A2,\r
+ 0x502, 0x0000002F,\r
+ 0x503, 0x00000000,\r
+ 0x504, 0x00000028,\r
+ 0x505, 0x000000A3,\r
+ 0x506, 0x0000005E,\r
+ 0x507, 0x00000000,\r
+ 0x508, 0x0000002B,\r
+ 0x509, 0x000000A4,\r
+ 0x50A, 0x0000005E,\r
+ 0x50B, 0x00000000,\r
+ 0x50C, 0x0000004F,\r
+ 0x50D, 0x000000A4,\r
+ 0x50E, 0x00000000,\r
+ 0x50F, 0x00000000,\r
+ 0x512, 0x0000001C,\r
+ 0x514, 0x0000000A,\r
+ 0x516, 0x0000000A,\r
+ 0x525, 0x0000004F,\r
+ 0x550, 0x00000010,\r
+ 0x551, 0x00000010,\r
+ 0x559, 0x00000002,\r
+ 0x55C, 0x00000028,\r
+ 0x55D, 0x000000FF,\r
+ 0x605, 0x00000030,\r
+ 0x608, 0x0000000E,\r
+ 0x609, 0x0000002A,\r
+ 0x620, 0x000000FF,\r
+ 0x621, 0x000000FF,\r
+ 0x622, 0x000000FF,\r
+ 0x623, 0x000000FF,\r
+ 0x624, 0x000000FF,\r
+ 0x625, 0x000000FF,\r
+ 0x626, 0x000000FF,\r
+ 0x627, 0x000000FF,\r
+ 0x638, 0x00000028,\r
+ 0x63C, 0x0000000A,\r
+ 0x63D, 0x0000000A,\r
+ 0x63E, 0x0000000E,\r
+ 0x63F, 0x0000000E,\r
+ 0x640, 0x00000040,\r
+ 0x642, 0x00000040,\r
+ 0x643, 0x00000000,\r
+ 0x652, 0x000000C8,\r
+ 0x66E, 0x00000005,\r
+ 0x700, 0x00000021,\r
+ 0x701, 0x00000043,\r
+ 0x702, 0x00000065,\r
+ 0x703, 0x00000087,\r
+ 0x708, 0x00000021,\r
+ 0x709, 0x00000043,\r
+ 0x70A, 0x00000065,\r
+ 0x70B, 0x00000087,\r
+\r
+};\r
+\r
+void\r
+ODM_ReadAndConfig_MP_8188F_MAC_REG(\r
+ IN PDM_ODM_T pDM_Odm\r
+)\r
+{\r
+ u4Byte i = 0;\r
+ u1Byte cCond;\r
+ BOOLEAN bMatched = TRUE, bSkipped = FALSE;\r
+ u4Byte ArrayLen = sizeof(Array_MP_8188F_MAC_REG)/sizeof(u4Byte);\r
+ pu4Byte Array = Array_MP_8188F_MAC_REG;\r
+ \r
+ u4Byte v1 = 0, v2 = 0, pre_v1 = 0, pre_v2 = 0;\r
+\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8188F_MAC_REG\n"));\r
+\r
+ while ((i + 1) < ArrayLen) {\r
+ v1 = Array[i];\r
+ v2 = Array[i + 1];\r
+\r
+ if (v1 & (BIT31 | BIT30)) {/*positive & negative condition*/\r
+ if (v1 & BIT31) {/* positive condition*/\r
+ cCond = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);\r
+ if (cCond == COND_ENDIF) {/*end*/\r
+ bMatched = TRUE;\r
+ bSkipped = FALSE;\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ENDIF\n"));\r
+ } else if (cCond == COND_ELSE) { /*else*/\r
+ bMatched = bSkipped?FALSE:TRUE;\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ELSE\n"));\r
+ } else {/*if , else if*/\r
+ pre_v1 = v1;\r
+ pre_v2 = v2;\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("IF or ELSE IF\n"));\r
+ }\r
+ } else if (v1 & BIT30) { /*negative condition*/\r
+ if (bSkipped == FALSE) {\r
+ if (CheckPositive(pDM_Odm, pre_v1, pre_v2, v1, v2)) {\r
+ bMatched = TRUE;\r
+ bSkipped = TRUE;\r
+ } else {\r
+ bMatched = FALSE;\r
+ bSkipped = FALSE;\r
+ }\r
+ } else\r
+ bMatched = FALSE;\r
+ }\r
+ } else {\r
+ if (bMatched)\r
+ odm_ConfigMAC_8188F(pDM_Odm, v1, (u1Byte)v2);\r
+ }\r
+ i = i + 2;\r
+ }\r
+}\r
+\r
+u4Byte\r
+ODM_GetVersion_MP_8188F_MAC_REG(void)\r
+{\r
+ return 31;\r
+}\r
+\r
+#endif /* end of HWIMG_SUPPORT*/\r
+\r