1 /******************************************************************************
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 ******************************************************************************/
16 #include "odm_precomp.h"
18 static bool CheckCondition(const u32 Condition, const u32 Hex)
20 u32 _board = (Hex & 0x000000FF);
21 u32 _interface = (Hex & 0x0000FF00) >> 8;
22 u32 _platform = (Hex & 0x00FF0000) >> 16;
25 if (Condition == 0xCDCDCDCD)
28 cond = Condition & 0x000000FF;
29 if ((_board == cond) && cond != 0x00)
32 cond = Condition & 0x0000FF00;
34 if ((_interface & cond) == 0 && cond != 0x07)
37 cond = Condition & 0x00FF0000;
39 if ((_platform & cond) == 0 && cond != 0x0F)
44 /******************************************************************************
46 ******************************************************************************/
48 static u32 Array_AGC_TAB_1T_8723A[] = {
211 #define READ_NEXT_PAIR(v1, v2, i) \
213 i += 2; v1 = Array[i]; v2 = Array[i+1]; \
216 void ODM_ReadAndConfig_AGC_TAB_1T_8723A(struct dm_odm_t *pDM_Odm)
221 u8 board = pDM_Odm->BoardType;
222 u32 ArrayLen = sizeof(Array_AGC_TAB_1T_8723A)/sizeof(u32);
223 u32 *Array = Array_AGC_TAB_1T_8723A;
226 hex += ODM_ITRF_USB << 8;
227 hex += platform << 16;
229 for (i = 0; i < ArrayLen; i += 2) {
233 /* This (offset, data) pair meets the condition. */
234 if (v1 < 0xCDCDCDCD) {
235 odm_ConfigBB_AGC_8723A(pDM_Odm, v1, v2);
238 if (!CheckCondition(Array[i], hex)) {
239 /* Discard the following (offset, data) pairs */
240 READ_NEXT_PAIR(v1, v2, i);
241 while (v2 != 0xDEAD &&
243 v2 != 0xCDCD && i < ArrayLen - 2)
244 READ_NEXT_PAIR(v1, v2, i);
245 i -= 2; /* prevent from for-loop += 2 */
247 /* Configure matched pairs and skip to
249 READ_NEXT_PAIR(v1, v2, i);
250 while (v2 != 0xDEAD &&
252 v2 != 0xCDCD && i < ArrayLen - 2) {
253 odm_ConfigBB_AGC_8723A(pDM_Odm, v1, v2);
254 READ_NEXT_PAIR(v1, v2, i);
256 while (v2 != 0xDEAD && i < ArrayLen - 2)
257 READ_NEXT_PAIR(v1, v2, i);
263 /******************************************************************************
265 ******************************************************************************/
267 static u32 Array_PHY_REG_1T_8723A[] = {
464 void ODM_ReadAndConfig_PHY_REG_1T_8723A(struct dm_odm_t *pDM_Odm)
469 u8 board = pDM_Odm->BoardType;
470 u32 ArrayLen = sizeof(Array_PHY_REG_1T_8723A)/sizeof(u32);
471 u32 *Array = Array_PHY_REG_1T_8723A;
474 hex += ODM_ITRF_USB << 8;
475 hex += platform << 16;
477 for (i = 0; i < ArrayLen; i += 2) {
481 /* This (offset, data) pair meets the condition. */
482 if (v1 < 0xCDCDCDCD) {
483 odm_ConfigBB_PHY_8723A(pDM_Odm, v1, v2);
486 if (!CheckCondition(Array[i], hex)) {
487 /* Discard the following (offset, data) pairs */
488 READ_NEXT_PAIR(v1, v2, i);
489 while (v2 != 0xDEAD &&
491 v2 != 0xCDCD && i < ArrayLen - 2)
492 READ_NEXT_PAIR(v1, v2, i);
493 i -= 2; /* prevent from for-loop += 2 */
495 /* Configure matched pairs and skip to
497 READ_NEXT_PAIR(v1, v2, i);
498 while (v2 != 0xDEAD &&
500 v2 != 0xCDCD && i < ArrayLen - 2) {
501 odm_ConfigBB_PHY_8723A(pDM_Odm, v1, v2);
502 READ_NEXT_PAIR(v1, v2, i);
504 while (v2 != 0xDEAD && i < ArrayLen - 2)
505 READ_NEXT_PAIR(v1, v2, i);
511 /******************************************************************************
513 ******************************************************************************/
515 static u32 Array_PHY_REG_MP_8723A[] = {
520 void ODM_ReadAndConfig_PHY_REG_MP_8723A(struct dm_odm_t *pDM_Odm)
525 u8 board = pDM_Odm->BoardType;
526 u32 ArrayLen = sizeof(Array_PHY_REG_MP_8723A)/sizeof(u32);
527 u32 *Array = Array_PHY_REG_MP_8723A;
530 hex += ODM_ITRF_USB << 8;
531 hex += platform << 16;
533 for (i = 0; i < ArrayLen; i += 2) {
537 /* This (offset, data) pair meets the condition. */
538 if (v1 < 0xCDCDCDCD) {
539 odm_ConfigBB_PHY_8723A(pDM_Odm, v1, v2);
542 if (!CheckCondition(Array[i], hex)) {
543 /* Discard the following (offset, data) pairs */
544 READ_NEXT_PAIR(v1, v2, i);
545 while (v2 != 0xDEAD &&
547 v2 != 0xCDCD && i < ArrayLen - 2)
548 READ_NEXT_PAIR(v1, v2, i);
549 i -= 2; /* prevent from for-loop += 2 */
551 /* Configure matched pairs and skip to
553 READ_NEXT_PAIR(v1, v2, i);
554 while (v2 != 0xDEAD &&
556 v2 != 0xCDCD && i < ArrayLen - 2) {
557 odm_ConfigBB_PHY_8723A(pDM_Odm, v1, v2);
558 READ_NEXT_PAIR(v1, v2, i);
560 while (v2 != 0xDEAD && i < ArrayLen - 2)
561 READ_NEXT_PAIR(v1, v2, i);