net: wireless: rockchip: add rtl8822be pcie wifi driver
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8822be / hal / phydm / rtl8822b / halhwimg8822b_mac.c
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8822be/hal/phydm/rtl8822b/halhwimg8822b_mac.c b/drivers/net/wireless/rockchip_wlan/rtl8822be/hal/phydm/rtl8822b/halhwimg8822b_mac.c
new file mode 100644 (file)
index 0000000..efc4fa2
--- /dev/null
@@ -0,0 +1,316 @@
+/****************************************************************************** \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.25*/\r
+#include "mp_precomp.h"\r
+#include "../phydm_precomp.h"\r
+\r
+#if (RTL8822B_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
+\r
+       u1Byte  cut_version_for_para   = (pDM_Odm->CutVersion == ODM_CUT_A) ? 15 : pDM_Odm->CutVersion;\r
+       u1Byte  pkg_type_for_para   = (pDM_Odm->PackageType == 0) ? 15 : pDM_Odm->PackageType;\r
+\r
+       u4Byte    driver1 = cut_version_for_para       << 24 | \r
+                               (pDM_Odm->SupportInterface & 0xF0) << 16 | \r
+                               pDM_Odm->SupportPlatform  << 16 | \r
+                               pkg_type_for_para      << 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_8822B_MAC_REG[] = { \r
+               0x029, 0x000000F9,\r
+               0x420, 0x00000080,\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, 0x000000F0,\r
+               0x446, 0x00000001,\r
+               0x447, 0x000000FE,\r
+               0x448, 0x00000000,\r
+               0x449, 0x00000000,\r
+               0x44A, 0x00000000,\r
+               0x44B, 0x00000040,\r
+               0x44C, 0x00000010,\r
+               0x44D, 0x000000F0,\r
+               0x44E, 0x0000003F,\r
+               0x44F, 0x00000000,\r
+               0x450, 0x00000000,\r
+               0x451, 0x00000000,\r
+               0x452, 0x00000000,\r
+               0x453, 0x00000040,\r
+               0x455, 0x00000070,\r
+               0x45E, 0x00000004,\r
+               0x49C, 0x00000010,\r
+               0x49D, 0x000000F0,\r
+               0x49E, 0x00000000,\r
+               0x49F, 0x00000006,\r
+               0x4A0, 0x000000E0,\r
+               0x4A1, 0x00000003,\r
+               0x4A2, 0x00000000,\r
+               0x4A3, 0x00000040,\r
+               0x4A4, 0x00000015,\r
+               0x4A5, 0x000000F0,\r
+               0x4A6, 0x00000000,\r
+               0x4A7, 0x00000006,\r
+               0x4A8, 0x000000E0,\r
+               0x4A9, 0x00000000,\r
+               0x4AA, 0x00000000,\r
+               0x4AB, 0x00000000,\r
+               0x7DA, 0x00000008,\r
+               0x1448, 0x00000006,\r
+               0x144A, 0x00000006,\r
+               0x144C, 0x00000006,\r
+               0x144E, 0x00000006,\r
+               0x4C8, 0x000000FF,\r
+               0x4C9, 0x00000008,\r
+               0x4CA, 0x00000020,\r
+               0x4CB, 0x00000020,\r
+               0x4CC, 0x000000FF,\r
+               0x4CD, 0x000000FF,\r
+               0x4CE, 0x00000001,\r
+               0x4CF, 0x00000008,\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
+               0x521, 0x0000002F,\r
+               0x525, 0x0000004F,\r
+               0x551, 0x00000010,\r
+               0x559, 0x00000002,\r
+               0x55C, 0x00000050,\r
+               0x55D, 0x000000FF,\r
+               0x577, 0x0000000B,\r
+               0x5BE, 0x00000064,\r
+               0x605, 0x00000030,\r
+               0x608, 0x0000000E,\r
+               0x609, 0x00000022,\r
+               0x60C, 0x00000018,\r
+               0x6A0, 0x000000FF,\r
+               0x6A1, 0x000000FF,\r
+               0x6A2, 0x000000FF,\r
+               0x6A3, 0x000000FF,\r
+               0x6A4, 0x000000FF,\r
+               0x6A5, 0x000000FF,\r
+               0x6DE, 0x00000084,\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, 0x00000050,\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
+               0x718, 0x00000040,\r
+               0x7D4, 0x00000098,\r
+\r
+};\r
+\r
+void\r
+ODM_ReadAndConfig_MP_8822B_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_8822B_MAC_REG)/sizeof(u4Byte);\r
+       pu4Byte    Array       = Array_MP_8822B_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_8822B_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_8822B(pDM_Odm, v1, (u1Byte)v2);\r
+               }\r
+               i = i + 2;\r
+       }\r
+}\r
+\r
+u4Byte\r
+ODM_GetVersion_MP_8822B_MAC_REG(void)\r
+{\r
+          return 68;\r
+}\r
+\r
+#endif /* end of HWIMG_SUPPORT*/\r
+\r