linux/drivers/staging/r8188eu/hal/HalHWImg8188E_BB.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/* Copyright(c) 2007 - 2011 Realtek Corporation. */
   3
   4#include "../include/odm_precomp.h"
   5#include "../include/rtw_iol.h"
   6
   7#define read_next_pair(array, v1, v2, i)                \
   8         do {                                           \
   9                 i += 2;                                \
  10                 v1 = array[i];                         \
  11                 v2 = array[i + 1];                     \
  12         } while (0)
  13
  14static bool CheckCondition(const u32  condition, const u32  hex)
  15{
  16        u32 _board     = (hex & 0x000000FF);
  17        u32 _interface = (hex & 0x0000FF00) >> 8;
  18        u32 _platform  = (hex & 0x00FF0000) >> 16;
  19        u32 cond = condition;
  20
  21        if (condition == 0xCDCDCDCD)
  22                return true;
  23
  24        cond = condition & 0x000000FF;
  25        if ((_board == cond) && cond != 0x00)
  26                return false;
  27
  28        cond = condition & 0x0000FF00;
  29        cond = cond >> 8;
  30        if ((_interface & cond) == 0 && cond != 0x07)
  31                return false;
  32
  33        cond = condition & 0x00FF0000;
  34        cond = cond >> 16;
  35        if ((_platform & cond) == 0 && cond != 0x0F)
  36                return false;
  37        return true;
  38}
  39
  40/******************************************************************************
  41*                           AGC_TAB_1T.TXT
  42******************************************************************************/
  43
  44static u32 array_agc_tab_1t_8188e[] = {
  45                0xC78, 0xFB000001,
  46                0xC78, 0xFB010001,
  47                0xC78, 0xFB020001,
  48                0xC78, 0xFB030001,
  49                0xC78, 0xFB040001,
  50                0xC78, 0xFB050001,
  51                0xC78, 0xFA060001,
  52                0xC78, 0xF9070001,
  53                0xC78, 0xF8080001,
  54                0xC78, 0xF7090001,
  55                0xC78, 0xF60A0001,
  56                0xC78, 0xF50B0001,
  57                0xC78, 0xF40C0001,
  58                0xC78, 0xF30D0001,
  59                0xC78, 0xF20E0001,
  60                0xC78, 0xF10F0001,
  61                0xC78, 0xF0100001,
  62                0xC78, 0xEF110001,
  63                0xC78, 0xEE120001,
  64                0xC78, 0xED130001,
  65                0xC78, 0xEC140001,
  66                0xC78, 0xEB150001,
  67                0xC78, 0xEA160001,
  68                0xC78, 0xE9170001,
  69                0xC78, 0xE8180001,
  70                0xC78, 0xE7190001,
  71                0xC78, 0xE61A0001,
  72                0xC78, 0xE51B0001,
  73                0xC78, 0xE41C0001,
  74                0xC78, 0xE31D0001,
  75                0xC78, 0xE21E0001,
  76                0xC78, 0xE11F0001,
  77                0xC78, 0x8A200001,
  78                0xC78, 0x89210001,
  79                0xC78, 0x88220001,
  80                0xC78, 0x87230001,
  81                0xC78, 0x86240001,
  82                0xC78, 0x85250001,
  83                0xC78, 0x84260001,
  84                0xC78, 0x83270001,
  85                0xC78, 0x82280001,
  86                0xC78, 0x6B290001,
  87                0xC78, 0x6A2A0001,
  88                0xC78, 0x692B0001,
  89                0xC78, 0x682C0001,
  90                0xC78, 0x672D0001,
  91                0xC78, 0x662E0001,
  92                0xC78, 0x652F0001,
  93                0xC78, 0x64300001,
  94                0xC78, 0x63310001,
  95                0xC78, 0x62320001,
  96                0xC78, 0x61330001,
  97                0xC78, 0x46340001,
  98                0xC78, 0x45350001,
  99                0xC78, 0x44360001,
 100                0xC78, 0x43370001,
 101                0xC78, 0x42380001,
 102                0xC78, 0x41390001,
 103                0xC78, 0x403A0001,
 104                0xC78, 0x403B0001,
 105                0xC78, 0x403C0001,
 106                0xC78, 0x403D0001,
 107                0xC78, 0x403E0001,
 108                0xC78, 0x403F0001,
 109                0xC78, 0xFB400001,
 110                0xC78, 0xFB410001,
 111                0xC78, 0xFB420001,
 112                0xC78, 0xFB430001,
 113                0xC78, 0xFB440001,
 114                0xC78, 0xFB450001,
 115                0xC78, 0xFB460001,
 116                0xC78, 0xFB470001,
 117                0xC78, 0xFB480001,
 118                0xC78, 0xFA490001,
 119                0xC78, 0xF94A0001,
 120                0xC78, 0xF84B0001,
 121                0xC78, 0xF74C0001,
 122                0xC78, 0xF64D0001,
 123                0xC78, 0xF54E0001,
 124                0xC78, 0xF44F0001,
 125                0xC78, 0xF3500001,
 126                0xC78, 0xF2510001,
 127                0xC78, 0xF1520001,
 128                0xC78, 0xF0530001,
 129                0xC78, 0xEF540001,
 130                0xC78, 0xEE550001,
 131                0xC78, 0xED560001,
 132                0xC78, 0xEC570001,
 133                0xC78, 0xEB580001,
 134                0xC78, 0xEA590001,
 135                0xC78, 0xE95A0001,
 136                0xC78, 0xE85B0001,
 137                0xC78, 0xE75C0001,
 138                0xC78, 0xE65D0001,
 139                0xC78, 0xE55E0001,
 140                0xC78, 0xE45F0001,
 141                0xC78, 0xE3600001,
 142                0xC78, 0xE2610001,
 143                0xC78, 0xC3620001,
 144                0xC78, 0xC2630001,
 145                0xC78, 0xC1640001,
 146                0xC78, 0x8B650001,
 147                0xC78, 0x8A660001,
 148                0xC78, 0x89670001,
 149                0xC78, 0x88680001,
 150                0xC78, 0x87690001,
 151                0xC78, 0x866A0001,
 152                0xC78, 0x856B0001,
 153                0xC78, 0x846C0001,
 154                0xC78, 0x676D0001,
 155                0xC78, 0x666E0001,
 156                0xC78, 0x656F0001,
 157                0xC78, 0x64700001,
 158                0xC78, 0x63710001,
 159                0xC78, 0x62720001,
 160                0xC78, 0x61730001,
 161                0xC78, 0x60740001,
 162                0xC78, 0x46750001,
 163                0xC78, 0x45760001,
 164                0xC78, 0x44770001,
 165                0xC78, 0x43780001,
 166                0xC78, 0x42790001,
 167                0xC78, 0x417A0001,
 168                0xC78, 0x407B0001,
 169                0xC78, 0x407C0001,
 170                0xC78, 0x407D0001,
 171                0xC78, 0x407E0001,
 172                0xC78, 0x407F0001,
 173};
 174
 175enum HAL_STATUS ODM_ReadAndConfig_AGC_TAB_1T_8188E(struct odm_dm_struct *dm_odm)
 176{
 177        u32     hex         = 0;
 178        u32     i           = 0;
 179        u8     platform    = dm_odm->SupportPlatform;
 180        u8     interfaceValue   = dm_odm->SupportInterface;
 181        u8     board       = dm_odm->BoardType;
 182        u32     arraylen    = sizeof(array_agc_tab_1t_8188e) / sizeof(u32);
 183        u32    *array       = array_agc_tab_1t_8188e;
 184        bool            biol = false;
 185        struct adapter *adapter =  dm_odm->Adapter;
 186        struct xmit_frame *pxmit_frame = NULL;
 187        u8 bndy_cnt = 1;
 188        enum HAL_STATUS rst = HAL_STATUS_SUCCESS;
 189
 190        hex += board;
 191        hex += interfaceValue << 8;
 192        hex += platform << 16;
 193        hex += 0xFF000000;
 194        biol = rtw_IOL_applied(adapter);
 195
 196        if (biol) {
 197                pxmit_frame = rtw_IOL_accquire_xmit_frame(adapter);
 198                if (!pxmit_frame) {
 199                        pr_info("rtw_IOL_accquire_xmit_frame failed\n");
 200                        return HAL_STATUS_FAILURE;
 201                }
 202        }
 203
 204        for (i = 0; i < arraylen; i += 2) {
 205                u32 v1 = array[i];
 206                u32 v2 = array[i + 1];
 207
 208                /*  This (offset, data) pair meets the condition. */
 209                if (v1 < 0xCDCDCDCD) {
 210                        if (biol) {
 211                                if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
 212                                        bndy_cnt++;
 213                                rtw_IOL_append_WD_cmd(pxmit_frame, (u16)v1, v2, bMaskDWord);
 214                        } else {
 215                                odm_ConfigBB_AGC_8188E(dm_odm, v1, bMaskDWord, v2);
 216                        }
 217                        continue;
 218                } else {
 219                        /*  This line is the start line of branch. */
 220                        if (!CheckCondition(array[i], hex)) {
 221                                /*  Discard the following (offset, data) pairs. */
 222                                read_next_pair(array, v1, v2, i);
 223                                while (v2 != 0xDEAD &&
 224                                       v2 != 0xCDEF &&
 225                                       v2 != 0xCDCD && i < arraylen - 2)
 226                                        read_next_pair(array, v1, v2, i);
 227                                i -= 2; /*  prevent from for-loop += 2 */
 228                        } else { /*  Configure matched pairs and skip to end of if-else. */
 229                                read_next_pair(array, v1, v2, i);
 230                                while (v2 != 0xDEAD &&
 231                                       v2 != 0xCDEF &&
 232                                       v2 != 0xCDCD && i < arraylen - 2) {
 233                                        if (biol) {
 234                                                if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
 235                                                        bndy_cnt++;
 236                                                rtw_IOL_append_WD_cmd(pxmit_frame, (u16)v1, v2, bMaskDWord);
 237                                        } else {
 238                                                odm_ConfigBB_AGC_8188E(dm_odm, v1, bMaskDWord, v2);
 239                                        }
 240                                        read_next_pair(array, v1, v2, i);
 241                                }
 242
 243                                while (v2 != 0xDEAD && i < arraylen - 2)
 244                                        read_next_pair(array, v1, v2, i);
 245                        }
 246                }
 247        }
 248        if (biol) {
 249                if (!rtw_IOL_exec_cmds_sync(dm_odm->Adapter, pxmit_frame, 1000, bndy_cnt)) {
 250                        printk("~~~ %s IOL_exec_cmds Failed !!!\n", __func__);
 251                        rst = HAL_STATUS_FAILURE;
 252                }
 253        }
 254        return rst;
 255}
 256
 257/******************************************************************************
 258*                           PHY_REG_1T.TXT
 259******************************************************************************/
 260
 261static u32 array_phy_reg_1t_8188e[] = {
 262                0x800, 0x80040000,
 263                0x804, 0x00000003,
 264                0x808, 0x0000FC00,
 265                0x80C, 0x0000000A,
 266                0x810, 0x10001331,
 267                0x814, 0x020C3D10,
 268                0x818, 0x02200385,
 269                0x81C, 0x00000000,
 270                0x820, 0x01000100,
 271                0x824, 0x00390204,
 272                0x828, 0x00000000,
 273                0x82C, 0x00000000,
 274                0x830, 0x00000000,
 275                0x834, 0x00000000,
 276                0x838, 0x00000000,
 277                0x83C, 0x00000000,
 278                0x840, 0x00010000,
 279                0x844, 0x00000000,
 280                0x848, 0x00000000,
 281                0x84C, 0x00000000,
 282                0x850, 0x00000000,
 283                0x854, 0x00000000,
 284                0x858, 0x569A11A9,
 285                0x85C, 0x01000014,
 286                0x860, 0x66F60110,
 287                0x864, 0x061F0649,
 288                0x868, 0x00000000,
 289                0x86C, 0x27272700,
 290                0x870, 0x07000760,
 291                0x874, 0x25004000,
 292                0x878, 0x00000808,
 293                0x87C, 0x00000000,
 294                0x880, 0xB0000C1C,
 295                0x884, 0x00000001,
 296                0x888, 0x00000000,
 297                0x88C, 0xCCC000C0,
 298                0x890, 0x00000800,
 299                0x894, 0xFFFFFFFE,
 300                0x898, 0x40302010,
 301                0x89C, 0x00706050,
 302                0x900, 0x00000000,
 303                0x904, 0x00000023,
 304                0x908, 0x00000000,
 305                0x90C, 0x81121111,
 306                0x910, 0x00000002,
 307                0x914, 0x00000201,
 308                0xA00, 0x00D047C8,
 309                0xA04, 0x80FF000C,
 310                0xA08, 0x8C838300,
 311                0xA0C, 0x2E7F120F,
 312                0xA10, 0x9500BB78,
 313                0xA14, 0x1114D028,
 314                0xA18, 0x00881117,
 315                0xA1C, 0x89140F00,
 316                0xA20, 0x1A1B0000,
 317                0xA24, 0x090E1317,
 318                0xA28, 0x00000204,
 319                0xA2C, 0x00D30000,
 320                0xA70, 0x101FBF00,
 321                0xA74, 0x00000007,
 322                0xA78, 0x00000900,
 323                0xA7C, 0x225B0606,
 324                0xA80, 0x218075B1,
 325                0xB2C, 0x80000000,
 326                0xC00, 0x48071D40,
 327                0xC04, 0x03A05611,
 328                0xC08, 0x000000E4,
 329                0xC0C, 0x6C6C6C6C,
 330                0xC10, 0x08800000,
 331                0xC14, 0x40000100,
 332                0xC18, 0x08800000,
 333                0xC1C, 0x40000100,
 334                0xC20, 0x00000000,
 335                0xC24, 0x00000000,
 336                0xC28, 0x00000000,
 337                0xC2C, 0x00000000,
 338                0xC30, 0x69E9AC47,
 339                0xC34, 0x469652AF,
 340                0xC38, 0x49795994,
 341                0xC3C, 0x0A97971C,
 342                0xC40, 0x1F7C403F,
 343                0xC44, 0x000100B7,
 344                0xC48, 0xEC020107,
 345                0xC4C, 0x007F037F,
 346                0xC50, 0x69553420,
 347                0xC54, 0x43BC0094,
 348                0xC58, 0x00013169,
 349                0xC5C, 0x00250492,
 350                0xC60, 0x00000000,
 351                0xC64, 0x7112848B,
 352                0xC68, 0x47C00BFF,
 353                0xC6C, 0x00000036,
 354                0xC70, 0x2C7F000D,
 355                0xC74, 0x020610DB,
 356                0xC78, 0x0000001F,
 357                0xC7C, 0x00B91612,
 358                0xC80, 0x390000E4,
 359                0xC84, 0x20F60000,
 360                0xC88, 0x40000100,
 361                0xC8C, 0x20200000,
 362                0xC90, 0x00091521,
 363                0xC94, 0x00000000,
 364                0xC98, 0x00121820,
 365                0xC9C, 0x00007F7F,
 366                0xCA0, 0x00000000,
 367                0xCA4, 0x000300A0,
 368                0xCA8, 0x00000000,
 369                0xCAC, 0x00000000,
 370                0xCB0, 0x00000000,
 371                0xCB4, 0x00000000,
 372                0xCB8, 0x00000000,
 373                0xCBC, 0x28000000,
 374                0xCC0, 0x00000000,
 375                0xCC4, 0x00000000,
 376                0xCC8, 0x00000000,
 377                0xCCC, 0x00000000,
 378                0xCD0, 0x00000000,
 379                0xCD4, 0x00000000,
 380                0xCD8, 0x64B22427,
 381                0xCDC, 0x00766932,
 382                0xCE0, 0x00222222,
 383                0xCE4, 0x00000000,
 384                0xCE8, 0x37644302,
 385                0xCEC, 0x2F97D40C,
 386                0xD00, 0x00000740,
 387                0xD04, 0x00020401,
 388                0xD08, 0x0000907F,
 389                0xD0C, 0x20010201,
 390                0xD10, 0xA0633333,
 391                0xD14, 0x3333BC43,
 392                0xD18, 0x7A8F5B6F,
 393                0xD2C, 0xCC979975,
 394                0xD30, 0x00000000,
 395                0xD34, 0x80608000,
 396                0xD38, 0x00000000,
 397                0xD3C, 0x00127353,
 398                0xD40, 0x00000000,
 399                0xD44, 0x00000000,
 400                0xD48, 0x00000000,
 401                0xD4C, 0x00000000,
 402                0xD50, 0x6437140A,
 403                0xD54, 0x00000000,
 404                0xD58, 0x00000282,
 405                0xD5C, 0x30032064,
 406                0xD60, 0x4653DE68,
 407                0xD64, 0x04518A3C,
 408                0xD68, 0x00002101,
 409                0xD6C, 0x2A201C16,
 410                0xD70, 0x1812362E,
 411                0xD74, 0x322C2220,
 412                0xD78, 0x000E3C24,
 413                0xE00, 0x2D2D2D2D,
 414                0xE04, 0x2D2D2D2D,
 415                0xE08, 0x0390272D,
 416                0xE10, 0x2D2D2D2D,
 417                0xE14, 0x2D2D2D2D,
 418                0xE18, 0x2D2D2D2D,
 419                0xE1C, 0x2D2D2D2D,
 420                0xE28, 0x00000000,
 421                0xE30, 0x1000DC1F,
 422                0xE34, 0x10008C1F,
 423                0xE38, 0x02140102,
 424                0xE3C, 0x681604C2,
 425                0xE40, 0x01007C00,
 426                0xE44, 0x01004800,
 427                0xE48, 0xFB000000,
 428                0xE4C, 0x000028D1,
 429                0xE50, 0x1000DC1F,
 430                0xE54, 0x10008C1F,
 431                0xE58, 0x02140102,
 432                0xE5C, 0x28160D05,
 433                0xE60, 0x00000008,
 434                0xE68, 0x001B25A4,
 435                0xE6C, 0x00C00014,
 436                0xE70, 0x00C00014,
 437                0xE74, 0x01000014,
 438                0xE78, 0x01000014,
 439                0xE7C, 0x01000014,
 440                0xE80, 0x01000014,
 441                0xE84, 0x00C00014,
 442                0xE88, 0x01000014,
 443                0xE8C, 0x00C00014,
 444                0xED0, 0x00C00014,
 445                0xED4, 0x00C00014,
 446                0xED8, 0x00C00014,
 447                0xEDC, 0x00000014,
 448                0xEE0, 0x00000014,
 449                0xEEC, 0x01C00014,
 450                0xF14, 0x00000003,
 451                0xF4C, 0x00000000,
 452                0xF00, 0x00000300,
 453};
 454
 455enum HAL_STATUS ODM_ReadAndConfig_PHY_REG_1T_8188E(struct odm_dm_struct *dm_odm)
 456{
 457        u32     hex         = 0;
 458        u32     i           = 0;
 459        u8     platform    = dm_odm->SupportPlatform;
 460        u8     interfaceValue   = dm_odm->SupportInterface;
 461        u8     board       = dm_odm->BoardType;
 462        u32     arraylen    = sizeof(array_phy_reg_1t_8188e) / sizeof(u32);
 463        u32    *array       = array_phy_reg_1t_8188e;
 464        bool    biol = false;
 465        struct adapter *adapter =  dm_odm->Adapter;
 466        struct xmit_frame *pxmit_frame = NULL;
 467        u8 bndy_cnt = 1;
 468        enum HAL_STATUS rst = HAL_STATUS_SUCCESS;
 469        hex += board;
 470        hex += interfaceValue << 8;
 471        hex += platform << 16;
 472        hex += 0xFF000000;
 473        biol = rtw_IOL_applied(adapter);
 474
 475        if (biol) {
 476                pxmit_frame = rtw_IOL_accquire_xmit_frame(adapter);
 477                if (!pxmit_frame) {
 478                        pr_info("rtw_IOL_accquire_xmit_frame failed\n");
 479                        return HAL_STATUS_FAILURE;
 480                }
 481        }
 482
 483        for (i = 0; i < arraylen; i += 2) {
 484                u32 v1 = array[i];
 485                u32 v2 = array[i + 1];
 486
 487                /*  This (offset, data) pair meets the condition. */
 488                if (v1 < 0xCDCDCDCD) {
 489                        if (biol) {
 490                                if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
 491                                        bndy_cnt++;
 492                                if (v1 == 0xfe) {
 493                                        rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 50);
 494                                } else if (v1 == 0xfd) {
 495                                        rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 5);
 496                                } else if (v1 == 0xfc) {
 497                                        rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 1);
 498                                } else if (v1 == 0xfb) {
 499                                        rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 50);
 500                                } else if (v1 == 0xfa) {
 501                                        rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 5);
 502                                } else if (v1 == 0xf9) {
 503                                        rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 1);
 504                                } else {
 505                                        if (v1 == 0xa24)
 506                                                dm_odm->RFCalibrateInfo.RegA24 = v2;
 507                                        rtw_IOL_append_WD_cmd(pxmit_frame, (u16)v1, v2, bMaskDWord);
 508                                }
 509                        } else {
 510                                odm_ConfigBB_PHY_8188E(dm_odm, v1, bMaskDWord, v2);
 511                        }
 512                        continue;
 513                } else { /*  This line is the start line of branch. */
 514                        if (!CheckCondition(array[i], hex)) {
 515                                /*  Discard the following (offset, data) pairs. */
 516                                read_next_pair(array, v1, v2, i);
 517                                while (v2 != 0xDEAD &&
 518                                       v2 != 0xCDEF &&
 519                                       v2 != 0xCDCD && i < arraylen - 2)
 520                                        read_next_pair(array, v1, v2, i);
 521                                i -= 2; /*  prevent from for-loop += 2 */
 522                        } else { /*  Configure matched pairs and skip to end of if-else. */
 523                                read_next_pair(array, v1, v2, i);
 524                                while (v2 != 0xDEAD &&
 525                                       v2 != 0xCDEF &&
 526                                       v2 != 0xCDCD && i < arraylen - 2) {
 527                                        if (biol) {
 528                                                if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
 529                                                        bndy_cnt++;
 530                                                if (v1 == 0xfe) {
 531                                                        rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 50);
 532                                                } else if (v1 == 0xfd) {
 533                                                        rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 5);
 534                                                } else if (v1 == 0xfc) {
 535                                                        rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 1);
 536                                                } else if (v1 == 0xfb) {
 537                                                        rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 50);
 538                                                } else if (v1 == 0xfa) {
 539                                                        rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 5);
 540                                                } else if (v1 == 0xf9) {
 541                                                        rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 1);
 542                                                } else {
 543                                                        if (v1 == 0xa24)
 544                                                                dm_odm->RFCalibrateInfo.RegA24 = v2;
 545
 546                                                        rtw_IOL_append_WD_cmd(pxmit_frame, (u16)v1, v2, bMaskDWord);
 547                                                }
 548                                        } else {
 549                                                odm_ConfigBB_PHY_8188E(dm_odm, v1, bMaskDWord, v2);
 550                                        }
 551                                        read_next_pair(array, v1, v2, i);
 552                                }
 553
 554                                while (v2 != 0xDEAD && i < arraylen - 2)
 555                                        read_next_pair(array, v1, v2, i);
 556                        }
 557                }
 558        }
 559        if (biol) {
 560                if (!rtw_IOL_exec_cmds_sync(dm_odm->Adapter, pxmit_frame, 1000, bndy_cnt)) {
 561                        rst = HAL_STATUS_FAILURE;
 562                        pr_info("~~~ IOL Config %s Failed !!!\n", __func__);
 563                }
 564        }
 565        return rst;
 566}
 567
 568/******************************************************************************
 569*                           PHY_REG_PG.TXT
 570******************************************************************************/
 571
 572static u32 array_phy_reg_pg_8188e[] = {
 573                0xE00, 0xFFFFFFFF, 0x06070809,
 574                0xE04, 0xFFFFFFFF, 0x02020405,
 575                0xE08, 0x0000FF00, 0x00000006,
 576                0x86C, 0xFFFFFF00, 0x00020400,
 577                0xE10, 0xFFFFFFFF, 0x08090A0B,
 578                0xE14, 0xFFFFFFFF, 0x01030607,
 579                0xE18, 0xFFFFFFFF, 0x08090A0B,
 580                0xE1C, 0xFFFFFFFF, 0x01030607,
 581                0xE00, 0xFFFFFFFF, 0x00000000,
 582                0xE04, 0xFFFFFFFF, 0x00000000,
 583                0xE08, 0x0000FF00, 0x00000000,
 584                0x86C, 0xFFFFFF00, 0x00000000,
 585                0xE10, 0xFFFFFFFF, 0x00000000,
 586                0xE14, 0xFFFFFFFF, 0x00000000,
 587                0xE18, 0xFFFFFFFF, 0x00000000,
 588                0xE1C, 0xFFFFFFFF, 0x00000000,
 589                0xE00, 0xFFFFFFFF, 0x02020202,
 590                0xE04, 0xFFFFFFFF, 0x00020202,
 591                0xE08, 0x0000FF00, 0x00000000,
 592                0x86C, 0xFFFFFF00, 0x00000000,
 593                0xE10, 0xFFFFFFFF, 0x04040404,
 594                0xE14, 0xFFFFFFFF, 0x00020404,
 595                0xE18, 0xFFFFFFFF, 0x00000000,
 596                0xE1C, 0xFFFFFFFF, 0x00000000,
 597                0xE00, 0xFFFFFFFF, 0x02020202,
 598                0xE04, 0xFFFFFFFF, 0x00020202,
 599                0xE08, 0x0000FF00, 0x00000000,
 600                0x86C, 0xFFFFFF00, 0x00000000,
 601                0xE10, 0xFFFFFFFF, 0x04040404,
 602                0xE14, 0xFFFFFFFF, 0x00020404,
 603                0xE18, 0xFFFFFFFF, 0x00000000,
 604                0xE1C, 0xFFFFFFFF, 0x00000000,
 605                0xE00, 0xFFFFFFFF, 0x00000000,
 606                0xE04, 0xFFFFFFFF, 0x00000000,
 607                0xE08, 0x0000FF00, 0x00000000,
 608                0x86C, 0xFFFFFF00, 0x00000000,
 609                0xE10, 0xFFFFFFFF, 0x00000000,
 610                0xE14, 0xFFFFFFFF, 0x00000000,
 611                0xE18, 0xFFFFFFFF, 0x00000000,
 612                0xE1C, 0xFFFFFFFF, 0x00000000,
 613                0xE00, 0xFFFFFFFF, 0x02020202,
 614                0xE04, 0xFFFFFFFF, 0x00020202,
 615                0xE08, 0x0000FF00, 0x00000000,
 616                0x86C, 0xFFFFFF00, 0x00000000,
 617                0xE10, 0xFFFFFFFF, 0x04040404,
 618                0xE14, 0xFFFFFFFF, 0x00020404,
 619                0xE18, 0xFFFFFFFF, 0x00000000,
 620                0xE1C, 0xFFFFFFFF, 0x00000000,
 621                0xE00, 0xFFFFFFFF, 0x00000000,
 622                0xE04, 0xFFFFFFFF, 0x00000000,
 623                0xE08, 0x0000FF00, 0x00000000,
 624                0x86C, 0xFFFFFF00, 0x00000000,
 625                0xE10, 0xFFFFFFFF, 0x00000000,
 626                0xE14, 0xFFFFFFFF, 0x00000000,
 627                0xE18, 0xFFFFFFFF, 0x00000000,
 628                0xE1C, 0xFFFFFFFF, 0x00000000,
 629                0xE00, 0xFFFFFFFF, 0x00000000,
 630                0xE04, 0xFFFFFFFF, 0x00000000,
 631                0xE08, 0x0000FF00, 0x00000000,
 632                0x86C, 0xFFFFFF00, 0x00000000,
 633                0xE10, 0xFFFFFFFF, 0x00000000,
 634                0xE14, 0xFFFFFFFF, 0x00000000,
 635                0xE18, 0xFFFFFFFF, 0x00000000,
 636                0xE1C, 0xFFFFFFFF, 0x00000000,
 637                0xE00, 0xFFFFFFFF, 0x00000000,
 638                0xE04, 0xFFFFFFFF, 0x00000000,
 639                0xE08, 0x0000FF00, 0x00000000,
 640                0x86C, 0xFFFFFF00, 0x00000000,
 641                0xE10, 0xFFFFFFFF, 0x00000000,
 642                0xE14, 0xFFFFFFFF, 0x00000000,
 643                0xE18, 0xFFFFFFFF, 0x00000000,
 644                0xE1C, 0xFFFFFFFF, 0x00000000,
 645                0xE00, 0xFFFFFFFF, 0x00000000,
 646                0xE04, 0xFFFFFFFF, 0x00000000,
 647                0xE08, 0x0000FF00, 0x00000000,
 648                0x86C, 0xFFFFFF00, 0x00000000,
 649                0xE10, 0xFFFFFFFF, 0x00000000,
 650                0xE14, 0xFFFFFFFF, 0x00000000,
 651                0xE18, 0xFFFFFFFF, 0x00000000,
 652                0xE1C, 0xFFFFFFFF, 0x00000000,
 653                0xE00, 0xFFFFFFFF, 0x00000000,
 654                0xE04, 0xFFFFFFFF, 0x00000000,
 655                0xE08, 0x0000FF00, 0x00000000,
 656                0x86C, 0xFFFFFF00, 0x00000000,
 657                0xE10, 0xFFFFFFFF, 0x00000000,
 658                0xE14, 0xFFFFFFFF, 0x00000000,
 659                0xE18, 0xFFFFFFFF, 0x00000000,
 660                0xE1C, 0xFFFFFFFF, 0x00000000,
 661
 662};
 663
 664void ODM_ReadAndConfig_PHY_REG_PG_8188E(struct odm_dm_struct *dm_odm)
 665{
 666        u32  hex;
 667        u32  i           = 0;
 668        u8  platform    = dm_odm->SupportPlatform;
 669        u8  interfaceValue   = dm_odm->SupportInterface;
 670        u8  board       = dm_odm->BoardType;
 671        u32  arraylen    = sizeof(array_phy_reg_pg_8188e) / sizeof(u32);
 672        u32 *array       = array_phy_reg_pg_8188e;
 673
 674        hex = board + (interfaceValue << 8);
 675        hex += (platform << 16) + 0xFF000000;
 676
 677        for (i = 0; i < arraylen; i += 3) {
 678                u32 v1 = array[i];
 679                u32 v2 = array[i + 1];
 680                u32 v3 = array[i + 2];
 681
 682                /*  this line is a line of pure_body */
 683                if (v1 < 0xCDCDCDCD) {
 684                        odm_ConfigBB_PHY_REG_PG_8188E(dm_odm, v1, v2, v3);
 685                        continue;
 686                } else { /*  this line is the start of branch */
 687                        if (!CheckCondition(array[i], hex)) {
 688                                /*  don't need the hw_body */
 689                                i += 2; /*  skip the pair of expression */
 690                                v1 = array[i];
 691                                v2 = array[i + 1];
 692                                v3 = array[i + 2];
 693                                while (v2 != 0xDEAD) {
 694                                        i += 3;
 695                                        v1 = array[i];
 696                                        v2 = array[i + 1];
 697                                        v3 = array[i + 1];
 698                                }
 699                        }
 700                }
 701        }
 702}
 703