net: wireless: rockchip_wlan: add rtl8188fu support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8188fu / hal / phydm / rtl8188f / halhwimg8188f_bb.c
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188fu/hal/phydm/rtl8188f/halhwimg8188f_bb.c b/drivers/net/wireless/rockchip_wlan/rtl8188fu/hal/phydm/rtl8188f/halhwimg8188f_bb.c
new file mode 100644 (file)
index 0000000..c4e1f64
--- /dev/null
@@ -0,0 +1,594 @@
+/****************************************************************************** \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
+*                           AGC_TAB.TXT\r
+******************************************************************************/\r
+\r
+u4Byte Array_MP_8188F_AGC_TAB[] = { \r
+               0xC78, 0xFC000001,\r
+               0xC78, 0xFB010001,\r
+               0xC78, 0xFA020001,\r
+               0xC78, 0xF9030001,\r
+               0xC78, 0xF8040001,\r
+               0xC78, 0xF7050001,\r
+               0xC78, 0xF6060001,\r
+               0xC78, 0xF5070001,\r
+               0xC78, 0xF4080001,\r
+               0xC78, 0xF3090001,\r
+               0xC78, 0xF20A0001,\r
+               0xC78, 0xF10B0001,\r
+               0xC78, 0xF00C0001,\r
+               0xC78, 0xEF0D0001,\r
+               0xC78, 0xEE0E0001,\r
+               0xC78, 0xED0F0001,\r
+               0xC78, 0xEC100001,\r
+               0xC78, 0xEB110001,\r
+               0xC78, 0xEA120001,\r
+               0xC78, 0xE9130001,\r
+               0xC78, 0xE8140001,\r
+               0xC78, 0xE7150001,\r
+               0xC78, 0xE6160001,\r
+               0xC78, 0xE5170001,\r
+               0xC78, 0xE4180001,\r
+               0xC78, 0xE3190001,\r
+               0xC78, 0xE21A0001,\r
+               0xC78, 0xE11B0001,\r
+               0xC78, 0xE01C0001,\r
+               0xC78, 0xC21D0001,\r
+               0xC78, 0xC11E0001,\r
+               0xC78, 0xC01F0001,\r
+               0xC78, 0xA5200001,\r
+               0xC78, 0xA4210001,\r
+               0xC78, 0xA3220001,\r
+               0xC78, 0xA2230001,\r
+               0xC78, 0xA1240001,\r
+               0xC78, 0xA0250001,\r
+               0xC78, 0x65260001,\r
+               0xC78, 0x64270001,\r
+               0xC78, 0x63280001,\r
+               0xC78, 0x62290001,\r
+               0xC78, 0x612A0001,\r
+               0xC78, 0x442B0001,\r
+               0xC78, 0x432C0001,\r
+               0xC78, 0x422D0001,\r
+               0xC78, 0x412E0001,\r
+               0xC78, 0x402F0001,\r
+               0xC78, 0x21300001,\r
+               0xC78, 0x20310001,\r
+               0xC78, 0x05320001,\r
+               0xC78, 0x04330001,\r
+               0xC78, 0x03340001,\r
+               0xC78, 0x02350001,\r
+               0xC78, 0x01360001,\r
+               0xC78, 0x00370001,\r
+               0xC78, 0x00380001,\r
+               0xC78, 0x00390001,\r
+               0xC78, 0x003A0001,\r
+               0xC78, 0x003B0001,\r
+               0xC78, 0x003C0001,\r
+               0xC78, 0x003D0001,\r
+               0xC78, 0x003E0001,\r
+               0xC78, 0x003F0001,\r
+               0xC50, 0x69553422,\r
+               0xC50, 0x69553420,\r
+\r
+};\r
+\r
+void\r
+ODM_ReadAndConfig_MP_8188F_AGC_TAB(\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_AGC_TAB)/sizeof(u4Byte);\r
+       pu4Byte    Array       = Array_MP_8188F_AGC_TAB;\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_AGC_TAB\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_ConfigBB_AGC_8188F(pDM_Odm, v1, bMaskDWord, v2);\r
+               }\r
+               i = i + 2;\r
+       }\r
+}\r
+\r
+u4Byte\r
+ODM_GetVersion_MP_8188F_AGC_TAB(void)\r
+{\r
+          return 31;\r
+}\r
+\r
+/******************************************************************************\r
+*                           PHY_REG.TXT\r
+******************************************************************************/\r
+\r
+u4Byte Array_MP_8188F_PHY_REG[] = { \r
+               0x800, 0x80045700,\r
+               0x804, 0x00000001,\r
+               0x808, 0x0000FC00,\r
+               0x80C, 0x0000000A,\r
+               0x810, 0x10001331,\r
+               0x814, 0x020C3D10,\r
+               0x818, 0x00200385,\r
+               0x81C, 0x00000000,\r
+               0x820, 0x01000100,\r
+               0x824, 0x00390204,\r
+               0x828, 0x00000000,\r
+               0x82C, 0x00000000,\r
+               0x830, 0x00000000,\r
+               0x834, 0x00000000,\r
+               0x838, 0x00000000,\r
+               0x83C, 0x00000000,\r
+               0x840, 0x00010000,\r
+               0x844, 0x00000000,\r
+               0x848, 0x00000000,\r
+               0x84C, 0x00000000,\r
+               0x850, 0x00030000,\r
+               0x854, 0x00000000,\r
+               0x858, 0x569A569A,\r
+               0x85C, 0x569A569A,\r
+               0x860, 0x00000130,\r
+               0x864, 0x00000000,\r
+               0x868, 0x00000000,\r
+               0x86C, 0x27272700,\r
+               0x870, 0x00000000,\r
+               0x874, 0x25004000,\r
+               0x878, 0x00000808,\r
+               0x87C, 0x004F0201,\r
+               0x880, 0xB0000B1E,\r
+               0x884, 0x00000007,\r
+               0x888, 0x00000000,\r
+               0x88C, 0xCCC000C0,\r
+               0x890, 0x00000800,\r
+               0x894, 0xFFFFFFFE,\r
+               0x898, 0x40302010,\r
+               0x89C, 0x00706050,\r
+               0x900, 0x00000000,\r
+               0x904, 0x00000023,\r
+               0x908, 0x00000000,\r
+               0x90C, 0x81121111,\r
+               0x910, 0x00000002,\r
+               0x914, 0x00000201,\r
+               0x948, 0x99000000,\r
+               0x94C, 0x00000010,\r
+               0x950, 0x20003000,\r
+               0x954, 0x4A880000,\r
+               0x958, 0x4BC5D87A,\r
+               0x95C, 0x04EB9B79,\r
+               0x96C, 0x00000003,\r
+               0xA00, 0x00D047C8,\r
+               0xA04, 0x80FF800C,\r
+       0x80000400,     0x00000000,     0x40000000,     0x00000000,\r
+               0xA08, 0x8C038300,\r
+       0xA0000000,     0x00000000,\r
+               0xA08, 0x8C898300,\r
+       0xB0000000,     0x00000000,\r
+               0xA0C, 0x2E7F120F,\r
+               0xA10, 0x9500BB78,\r
+               0xA14, 0x1114D028,\r
+               0xA18, 0x00881117,\r
+               0xA1C, 0x89140F00,\r
+               0xA20, 0xD1D80000,\r
+               0xA24, 0x5A7DA0BD,\r
+               0xA28, 0x0000223B,\r
+               0xA2C, 0x00D30000,\r
+               0xA70, 0x101FBF00,\r
+               0xA74, 0x00000007,\r
+       0x80000400,     0x00000000,     0x40000000,     0x00000000,\r
+               0xA78, 0x00008900,\r
+       0xA0000000,     0x00000000,\r
+               0xA78, 0x00000900,\r
+       0xB0000000,     0x00000000,\r
+               0xA7C, 0x225B0606,\r
+               0xA80, 0x218075B1,\r
+               0xA84, 0x00120000,\r
+               0xA88, 0x040C0000,\r
+               0xA8C, 0x12345678,\r
+               0xA90, 0xABCDEF00,\r
+               0xA94, 0x001B1B89,\r
+               0xA98, 0x05100000,\r
+               0xA9C, 0x3F000000,\r
+               0xAA0, 0x00000000,\r
+               0xB2C, 0x00000000,\r
+               0xC00, 0x48071D40,\r
+               0xC04, 0x03A05611,\r
+               0xC08, 0x000000E4,\r
+               0xC0C, 0x6C6C6C6C,\r
+               0xC10, 0x18800000,\r
+               0xC14, 0x40000100,\r
+               0xC18, 0x08800000,\r
+               0xC1C, 0x40000100,\r
+               0xC20, 0x00000000,\r
+               0xC24, 0x00000000,\r
+               0xC28, 0x00000000,\r
+               0xC2C, 0x00000000,\r
+               0xC30, 0x69E9CC4A,\r
+               0xC34, 0x31000040,\r
+               0xC38, 0x21688080,\r
+               0xC3C, 0x00001714,\r
+               0xC40, 0x1F78403F,\r
+               0xC44, 0x00010036,\r
+               0xC48, 0xEC020107,\r
+               0xC4C, 0x007F037F,\r
+               0xC50, 0x69553420,\r
+               0xC54, 0x43BC0094,\r
+               0xC58, 0x00013169,\r
+               0xC5C, 0x00250492,\r
+               0xC60, 0x00000000,\r
+               0xC64, 0x7112848B,\r
+               0xC68, 0x47C07BFF,\r
+               0xC6C, 0x00000036,\r
+               0xC70, 0x2C7F000D,\r
+               0xC74, 0x020600DB,\r
+               0xC78, 0x0000001F,\r
+               0xC7C, 0x00B91612,\r
+               0xC80, 0x390000E4,\r
+       0x80000400,     0x00000000,     0x40000000,     0x00000000,\r
+               0xC84, 0x21F60000,\r
+       0xA0000000,     0x00000000,\r
+               0xC84, 0x11F60000,\r
+       0xB0000000,     0x00000000,\r
+               0xC88, 0x40000100,\r
+               0xC8C, 0x20200000,\r
+               0xC90, 0x00091521,\r
+               0xC94, 0x00000000,\r
+               0xC98, 0x00121820,\r
+               0xC9C, 0x00007F7F,\r
+               0xCA0, 0x00000000,\r
+               0xCA4, 0x000300A0,\r
+               0xCA8, 0x00000000,\r
+               0xCAC, 0x00000000,\r
+               0xCB0, 0x00000000,\r
+               0xCB4, 0x00000000,\r
+               0xCB8, 0x00000000,\r
+               0xCBC, 0x28000000,\r
+               0xCC0, 0x00000000,\r
+               0xCC4, 0x00000000,\r
+               0xCC8, 0x00000000,\r
+               0xCCC, 0x00000000,\r
+               0xCD0, 0x00000000,\r
+               0xCD4, 0x00000000,\r
+               0xCD8, 0x64B22427,\r
+               0xCDC, 0x00766932,\r
+               0xCE0, 0x00222222,\r
+               0xCE4, 0x10000000,\r
+               0xCE8, 0x37644302,\r
+               0xCEC, 0x2F97D40C,\r
+               0xD00, 0x04030740,\r
+               0xD04, 0x40020401,\r
+               0xD08, 0x0000907F,\r
+               0xD0C, 0x20010201,\r
+               0xD10, 0xA0633333,\r
+               0xD14, 0x3333BC53,\r
+               0xD18, 0x7A8F5B6F,\r
+               0xD2C, 0xCB979975,\r
+               0xD30, 0x00000000,\r
+               0xD34, 0x80608000,\r
+               0xD38, 0x98000000,\r
+               0xD3C, 0x40127353,\r
+               0xD40, 0x00000000,\r
+               0xD44, 0x00000000,\r
+               0xD48, 0x00000000,\r
+               0xD4C, 0x00000000,\r
+               0xD50, 0x6437140A,\r
+               0xD54, 0x00000000,\r
+               0xD58, 0x00000282,\r
+               0xD5C, 0x30032064,\r
+               0xD60, 0x4653DE68,\r
+               0xD64, 0x04518A3C,\r
+               0xD68, 0x00002101,\r
+               0xD6C, 0x2A201C16,\r
+               0xD70, 0x1812362E,\r
+               0xD74, 0x322C2220,\r
+               0xD78, 0x000E3C24,\r
+               0xE00, 0x2D2D2D2D,\r
+               0xE04, 0x2D2D2D2D,\r
+               0xE08, 0x0390272D,\r
+               0xE10, 0x2D2D2D2D,\r
+               0xE14, 0x2D2D2D2D,\r
+               0xE18, 0x2D2D2D2D,\r
+               0xE1C, 0x2D2D2D2D,\r
+               0xE28, 0x00000000,\r
+               0xE30, 0x1000DC1F,\r
+               0xE34, 0x10008C1F,\r
+               0xE38, 0x02140102,\r
+               0xE3C, 0x681604C2,\r
+               0xE40, 0x01007C00,\r
+               0xE44, 0x01004800,\r
+               0xE48, 0xFB000000,\r
+               0xE4C, 0x000028D1,\r
+               0xE50, 0x1000DC1F,\r
+               0xE54, 0x10008C1F,\r
+               0xE58, 0x02140102,\r
+               0xE5C, 0x28160D05,\r
+               0xE60, 0x00000008,\r
+               0xE60, 0x021400A0,\r
+               0xE64, 0x281600A0,\r
+               0xE6C, 0x01C00010,\r
+               0xE70, 0x01C00010,\r
+               0xE74, 0x02000010,\r
+               0xE78, 0x02000010,\r
+               0xE7C, 0x02000010,\r
+               0xE80, 0x02000010,\r
+               0xE84, 0x01C00010,\r
+               0xE88, 0x02000010,\r
+               0xE8C, 0x01C00010,\r
+               0xED0, 0x01C00010,\r
+               0xED4, 0x01C00010,\r
+               0xED8, 0x01C00010,\r
+               0xEDC, 0x00000010,\r
+               0xEE0, 0x00000010,\r
+               0xEEC, 0x03C00010,\r
+               0xF14, 0x00000003,\r
+               0xF4C, 0x00000000,\r
+               0xF00, 0x00000300,\r
+\r
+};\r
+\r
+void\r
+ODM_ReadAndConfig_MP_8188F_PHY_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_PHY_REG)/sizeof(u4Byte);\r
+       pu4Byte    Array       = Array_MP_8188F_PHY_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_PHY_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_ConfigBB_PHY_8188F(pDM_Odm, v1, bMaskDWord, v2);\r
+               }\r
+               i = i + 2;\r
+       }\r
+}\r
+\r
+u4Byte\r
+ODM_GetVersion_MP_8188F_PHY_REG(void)\r
+{\r
+          return 31;\r
+}\r
+\r
+/******************************************************************************\r
+*                           PHY_REG_PG.TXT\r
+******************************************************************************/\r
+\r
+u4Byte Array_MP_8188F_PHY_REG_PG[] = { \r
+       0, 0, 0, 0x00000e08, 0x0000ff00, 0x00003200,\r
+       0, 0, 0, 0x0000086c, 0xffffff00, 0x32323200,\r
+       0, 0, 0, 0x00000e00, 0xffffffff, 0x34363636,\r
+       0, 0, 0, 0x00000e04, 0xffffffff, 0x28303234,\r
+       0, 0, 0, 0x00000e10, 0xffffffff, 0x30343434,\r
+       0, 0, 0, 0x00000e14, 0xffffffff, 0x26262830\r
+};\r
+\r
+void\r
+ODM_ReadAndConfig_MP_8188F_PHY_REG_PG(\r
+       IN   PDM_ODM_T  pDM_Odm\r
+)\r
+{\r
+       u4Byte     i         = 0;\r
+       u4Byte     ArrayLen    = sizeof(Array_MP_8188F_PHY_REG_PG)/sizeof(u4Byte);\r
+       pu4Byte    Array       = Array_MP_8188F_PHY_REG_PG;\r
+\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PADAPTER                Adapter = pDM_Odm->Adapter;\r
+       HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
+\r
+       PlatformZeroMemory(pHalData->BufOfLinesPwrByRate, MAX_LINES_HWCONFIG_TXT*MAX_BYTES_LINE_HWCONFIG_TXT);\r
+       pHalData->nLinesReadPwrByRate = ArrayLen/6;\r
+#endif\r
+\r
+       ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8188F_PHY_REG_PG\n"));\r
+\r
+       pDM_Odm->PhyRegPgVersion = 1;\r
+       pDM_Odm->PhyRegPgValueType = PHY_REG_PG_EXACT_VALUE;\r
+\r
+       for (i = 0; i < ArrayLen; i += 6) {\r
+               u4Byte v1 = Array[i];\r
+               u4Byte v2 = Array[i+1];\r
+               u4Byte v3 = Array[i+2];\r
+               u4Byte v4 = Array[i+3];\r
+               u4Byte v5 = Array[i+4];\r
+               u4Byte v6 = Array[i+5];\r
+\r
+           odm_ConfigBB_PHY_REG_PG_8188F(pDM_Odm, v1, v2, v3, v4, v5, v6);\r
+\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       rsprintf((char *)pHalData->BufOfLinesPwrByRate[i/6], 100, "%s, %s, %s, 0x%X, 0x%08X, 0x%08X,",\r
+               (v1 == 0?"2.4G":"  5G"), (v2 == 0?"A":"B"), (v3 == 0?"1Tx":"2Tx"), v4, v5, v6);\r
+#endif\r
+       }\r
+}\r
+\r
+\r
+\r
+#endif /* end of HWIMG_SUPPORT*/\r
+\r