/******************************************************************************
*
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
******************************************************************************/

#include "odm_precomp.h"

static bool CheckCondition(const u32  Condition, const u32  Hex)
{
	u32 _board     = (Hex & 0x000000FF);
	u32 _interface = (Hex & 0x0000FF00) >> 8;
	u32 _platform  = (Hex & 0x00FF0000) >> 16;
	u32 cond = Condition;

	if (Condition == 0xCDCDCDCD)
		return true;

	cond = Condition & 0x000000FF;
	if ((_board == cond) && cond != 0x00)
		return false;

	cond = Condition & 0x0000FF00;
	cond >>= 8;
	if ((_interface & cond) == 0 && cond != 0x07)
		return false;

	cond = Condition & 0x00FF0000;
	cond >>= 16;
	if ((_platform & cond) == 0 && cond != 0x0F)
		return false;
	return true;
}

/******************************************************************************
*                           AGC_TAB_1T.TXT
******************************************************************************/

static u32 Array_AGC_TAB_1T_8723A[] = {
	0xC78, 0x7B000001,
	0xC78, 0x7B010001,
	0xC78, 0x7B020001,
	0xC78, 0x7B030001,
	0xC78, 0x7B040001,
	0xC78, 0x7B050001,
	0xC78, 0x7A060001,
	0xC78, 0x79070001,
	0xC78, 0x78080001,
	0xC78, 0x77090001,
	0xC78, 0x760A0001,
	0xC78, 0x750B0001,
	0xC78, 0x740C0001,
	0xC78, 0x730D0001,
	0xC78, 0x720E0001,
	0xC78, 0x710F0001,
	0xC78, 0x70100001,
	0xC78, 0x6F110001,
	0xC78, 0x6E120001,
	0xC78, 0x6D130001,
	0xC78, 0x6C140001,
	0xC78, 0x6B150001,
	0xC78, 0x6A160001,
	0xC78, 0x69170001,
	0xC78, 0x68180001,
	0xC78, 0x67190001,
	0xC78, 0x661A0001,
	0xC78, 0x651B0001,
	0xC78, 0x641C0001,
	0xC78, 0x631D0001,
	0xC78, 0x621E0001,
	0xC78, 0x611F0001,
	0xC78, 0x60200001,
	0xC78, 0x49210001,
	0xC78, 0x48220001,
	0xC78, 0x47230001,
	0xC78, 0x46240001,
	0xC78, 0x45250001,
	0xC78, 0x44260001,
	0xC78, 0x43270001,
	0xC78, 0x42280001,
	0xC78, 0x41290001,
	0xC78, 0x402A0001,
	0xC78, 0x262B0001,
	0xC78, 0x252C0001,
	0xC78, 0x242D0001,
	0xC78, 0x232E0001,
	0xC78, 0x222F0001,
	0xC78, 0x21300001,
	0xC78, 0x20310001,
	0xC78, 0x06320001,
	0xC78, 0x05330001,
	0xC78, 0x04340001,
	0xC78, 0x03350001,
	0xC78, 0x02360001,
	0xC78, 0x01370001,
	0xC78, 0x00380001,
	0xC78, 0x00390001,
	0xC78, 0x003A0001,
	0xC78, 0x003B0001,
	0xC78, 0x003C0001,
	0xC78, 0x003D0001,
	0xC78, 0x003E0001,
	0xC78, 0x003F0001,
	0xC78, 0x7B400001,
	0xC78, 0x7B410001,
	0xC78, 0x7B420001,
	0xC78, 0x7B430001,
	0xC78, 0x7B440001,
	0xC78, 0x7B450001,
	0xC78, 0x7A460001,
	0xC78, 0x79470001,
	0xC78, 0x78480001,
	0xC78, 0x77490001,
	0xC78, 0x764A0001,
	0xC78, 0x754B0001,
	0xC78, 0x744C0001,
	0xC78, 0x734D0001,
	0xC78, 0x724E0001,
	0xC78, 0x714F0001,
	0xC78, 0x70500001,
	0xC78, 0x6F510001,
	0xC78, 0x6E520001,
	0xC78, 0x6D530001,
	0xC78, 0x6C540001,
	0xC78, 0x6B550001,
	0xC78, 0x6A560001,
	0xC78, 0x69570001,
	0xC78, 0x68580001,
	0xC78, 0x67590001,
	0xC78, 0x665A0001,
	0xC78, 0x655B0001,
	0xC78, 0x645C0001,
	0xC78, 0x635D0001,
	0xC78, 0x625E0001,
	0xC78, 0x615F0001,
	0xC78, 0x60600001,
	0xC78, 0x49610001,
	0xC78, 0x48620001,
	0xC78, 0x47630001,
	0xC78, 0x46640001,
	0xC78, 0x45650001,
	0xC78, 0x44660001,
	0xC78, 0x43670001,
	0xC78, 0x42680001,
	0xC78, 0x41690001,
	0xC78, 0x406A0001,
	0xC78, 0x266B0001,
	0xC78, 0x256C0001,
	0xC78, 0x246D0001,
	0xC78, 0x236E0001,
	0xC78, 0x226F0001,
	0xC78, 0x21700001,
	0xC78, 0x20710001,
	0xC78, 0x06720001,
	0xC78, 0x05730001,
	0xC78, 0x04740001,
	0xC78, 0x03750001,
	0xC78, 0x02760001,
	0xC78, 0x01770001,
	0xC78, 0x00780001,
	0xC78, 0x00790001,
	0xC78, 0x007A0001,
	0xC78, 0x007B0001,
	0xC78, 0x007C0001,
	0xC78, 0x007D0001,
	0xC78, 0x007E0001,
	0xC78, 0x007F0001,
	0xC78, 0x3800001E,
	0xC78, 0x3801001E,
	0xC78, 0x3802001E,
	0xC78, 0x3803001E,
	0xC78, 0x3804001E,
	0xC78, 0x3805001E,
	0xC78, 0x3806001E,
	0xC78, 0x3807001E,
	0xC78, 0x3808001E,
	0xC78, 0x3C09001E,
	0xC78, 0x3E0A001E,
	0xC78, 0x400B001E,
	0xC78, 0x440C001E,
	0xC78, 0x480D001E,
	0xC78, 0x4C0E001E,
	0xC78, 0x500F001E,
	0xC78, 0x5210001E,
	0xC78, 0x5611001E,
	0xC78, 0x5A12001E,
	0xC78, 0x5E13001E,
	0xC78, 0x6014001E,
	0xC78, 0x6015001E,
	0xC78, 0x6016001E,
	0xC78, 0x6217001E,
	0xC78, 0x6218001E,
	0xC78, 0x6219001E,
	0xC78, 0x621A001E,
	0xC78, 0x621B001E,
	0xC78, 0x621C001E,
	0xC78, 0x621D001E,
	0xC78, 0x621E001E,
	0xC78, 0x621F001E,
};

#define READ_NEXT_PAIR(v1, v2, i)			\
	do {						\
		i += 2; v1 = Array[i]; v2 = Array[i+1];	\
	} while (0)

void ODM_ReadAndConfig_AGC_TAB_1T_8723A(struct dm_odm_t *pDM_Odm)
{
	u32 hex;
	u32 i;
	u8 platform = 0x04;
	u8 board = pDM_Odm->BoardType;
	u32 ArrayLen = ARRAY_SIZE(Array_AGC_TAB_1T_8723A);
	u32 *Array = Array_AGC_TAB_1T_8723A;

	hex = board;
	hex += ODM_ITRF_USB << 8;
	hex += platform << 16;
	hex += 0xFF000000;
	for (i = 0; i < ArrayLen; i += 2) {
		u32 v1 = Array[i];
		u32 v2 = Array[i+1];

		/*  This (offset, data) pair meets the condition. */
		if (v1 < 0xCDCDCDCD) {
			odm_ConfigBB_AGC_8723A(pDM_Odm, v1, v2);
			continue;
		} else {
			if (!CheckCondition(Array[i], hex)) {
				/* Discard the following (offset, data) pairs */
				READ_NEXT_PAIR(v1, v2, i);
				while (v2 != 0xDEAD &&
				       v2 != 0xCDEF &&
				       v2 != 0xCDCD && i < ArrayLen - 2)
					READ_NEXT_PAIR(v1, v2, i);
				i -= 2; /*  prevent from for-loop += 2 */
			} else {
				/*  Configure matched pairs and skip to
				    end of if-else. */
				READ_NEXT_PAIR(v1, v2, i);
				while (v2 != 0xDEAD &&
				       v2 != 0xCDEF &&
				       v2 != 0xCDCD && i < ArrayLen - 2) {
					odm_ConfigBB_AGC_8723A(pDM_Odm, v1, v2);
					READ_NEXT_PAIR(v1, v2, i);
				}
				while (v2 != 0xDEAD && i < ArrayLen - 2)
					READ_NEXT_PAIR(v1, v2, i);
			}
		}
	}
}

/******************************************************************************
*                           PHY_REG_1T.TXT
******************************************************************************/

static u32 Array_PHY_REG_1T_8723A[] = {
	0x800, 0x80040000,
	0x804, 0x00000003,
	0x808, 0x0000FC00,
	0x80C, 0x0000000A,
	0x810, 0x10001331,
	0x814, 0x020C3D10,
	0x818, 0x02200385,
	0x81C, 0x00000000,
	0x820, 0x01000100,
	0x824, 0x00390004,
	0x828, 0x00000000,
	0x82C, 0x00000000,
	0x830, 0x00000000,
	0x834, 0x00000000,
	0x838, 0x00000000,
	0x83C, 0x00000000,
	0x840, 0x00010000,
	0x844, 0x00000000,
	0x848, 0x00000000,
	0x84C, 0x00000000,
	0x850, 0x00000000,
	0x854, 0x00000000,
	0x858, 0x569A569A,
	0x85C, 0x001B25A4,
	0x860, 0x66F60110,
	0x864, 0x061F0130,
	0x868, 0x00000000,
	0x86C, 0x32323200,
	0x870, 0x07000760,
	0x874, 0x22004000,
	0x878, 0x00000808,
	0x87C, 0x00000000,
	0x880, 0xC0083070,
	0x884, 0x000004D5,
	0x888, 0x00000000,
	0x88C, 0xCCC000C0,
	0x890, 0x00000800,
	0x894, 0xFFFFFFFE,
	0x898, 0x40302010,
	0x89C, 0x00706050,
	0x900, 0x00000000,
	0x904, 0x00000023,
	0x908, 0x00000000,
	0x90C, 0x81121111,
	0xA00, 0x00D047C8,
	0xA04, 0x80FF000C,
	0xA08, 0x8C838300,
	0xA0C, 0x2E68120F,
	0xA10, 0x9500BB78,
	0xA14, 0x11144028,
	0xA18, 0x00881117,
	0xA1C, 0x89140F00,
	0xA20, 0x1A1B0000,
	0xA24, 0x090E1317,
	0xA28, 0x00000204,
	0xA2C, 0x00D30000,
	0xA70, 0x101FBF00,
	0xA74, 0x00000007,
	0xA78, 0x00000900,
	0xC00, 0x48071D40,
	0xC04, 0x03A05611,
	0xC08, 0x000000E4,
	0xC0C, 0x6C6C6C6C,
	0xC10, 0x08800000,
	0xC14, 0x40000100,
	0xC18, 0x08800000,
	0xC1C, 0x40000100,
	0xC20, 0x00000000,
	0xC24, 0x00000000,
	0xC28, 0x00000000,
	0xC2C, 0x00000000,
	0xC30, 0x69E9AC44,
	0xFF0F011F, 0xABCD,
	0xC34, 0x469652CF,
	0xCDCDCDCD, 0xCDCD,
	0xC34, 0x469652AF,
	0xFF0F011F, 0xDEAD,
	0xC38, 0x49795994,
	0xC3C, 0x0A97971C,
	0xC40, 0x1F7C403F,
	0xC44, 0x000100B7,
	0xC48, 0xEC020107,
	0xC4C, 0x007F037F,
	0xC50, 0x69543420,
	0xC54, 0x43BC0094,
	0xC58, 0x69543420,
	0xC5C, 0x433C0094,
	0xC60, 0x00000000,
	0xFF0F011F, 0xABCD,
	0xC64, 0x7116848B,
	0xCDCDCDCD, 0xCDCD,
	0xC64, 0x7112848B,
	0xFF0F011F, 0xDEAD,
	0xC68, 0x47C00BFF,
	0xC6C, 0x00000036,
	0xC70, 0x2C7F000D,
	0xC74, 0x018610DB,
	0xC78, 0x0000001F,
	0xC7C, 0x00B91612,
	0xC80, 0x40000100,
	0xC84, 0x20F60000,
	0xC88, 0x40000100,
	0xC8C, 0x20200000,
	0xC90, 0x00121820,
	0xC94, 0x00000000,
	0xC98, 0x00121820,
	0xC9C, 0x00007F7F,
	0xCA0, 0x00000000,
	0xCA4, 0x00000080,
	0xCA8, 0x00000000,
	0xCAC, 0x00000000,
	0xCB0, 0x00000000,
	0xCB4, 0x00000000,
	0xCB8, 0x00000000,
	0xCBC, 0x28000000,
	0xCC0, 0x00000000,
	0xCC4, 0x00000000,
	0xCC8, 0x00000000,
	0xCCC, 0x00000000,
	0xCD0, 0x00000000,
	0xCD4, 0x00000000,
	0xCD8, 0x64B22427,
	0xCDC, 0x00766932,
	0xCE0, 0x00222222,
	0xCE4, 0x00000000,
	0xCE8, 0x37644302,
	0xCEC, 0x2F97D40C,
	0xD00, 0x00080740,
	0xD04, 0x00020401,
	0xD08, 0x0000907F,
	0xD0C, 0x20010201,
	0xD10, 0xA0633333,
	0xD14, 0x3333BC43,
	0xD18, 0x7A8F5B6B,
	0xD2C, 0xCC979975,
	0xD30, 0x00000000,
	0xD34, 0x80608000,
	0xD38, 0x00000000,
	0xD3C, 0x00027293,
	0xD40, 0x00000000,
	0xD44, 0x00000000,
	0xD48, 0x00000000,
	0xD4C, 0x00000000,
	0xD50, 0x6437140A,
	0xD54, 0x00000000,
	0xD58, 0x00000000,
	0xD5C, 0x30032064,
	0xD60, 0x4653DE68,
	0xD64, 0x04518A3C,
	0xD68, 0x00002101,
	0xD6C, 0x2A201C16,
	0xD70, 0x1812362E,
	0xD74, 0x322C2220,
	0xD78, 0x000E3C24,
	0xE00, 0x2A2A2A2A,
	0xE04, 0x2A2A2A2A,
	0xE08, 0x03902A2A,
	0xE10, 0x2A2A2A2A,
	0xE14, 0x2A2A2A2A,
	0xE18, 0x2A2A2A2A,
	0xE1C, 0x2A2A2A2A,
	0xE28, 0x00000000,
	0xE30, 0x1000DC1F,
	0xE34, 0x10008C1F,
	0xE38, 0x02140102,
	0xE3C, 0x681604C2,
	0xE40, 0x01007C00,
	0xE44, 0x01004800,
	0xE48, 0xFB000000,
	0xE4C, 0x000028D1,
	0xE50, 0x1000DC1F,
	0xE54, 0x10008C1F,
	0xE58, 0x02140102,
	0xE5C, 0x28160D05,
	0xE60, 0x00000008,
	0xE68, 0x001B25A4,
	0xE6C, 0x631B25A0,
	0xE70, 0x631B25A0,
	0xE74, 0x081B25A0,
	0xE78, 0x081B25A0,
	0xE7C, 0x081B25A0,
	0xE80, 0x081B25A0,
	0xE84, 0x631B25A0,
	0xE88, 0x081B25A0,
	0xE8C, 0x631B25A0,
	0xED0, 0x631B25A0,
	0xED4, 0x631B25A0,
	0xED8, 0x631B25A0,
	0xEDC, 0x001B25A0,
	0xEE0, 0x001B25A0,
	0xEEC, 0x6B1B25A0,
	0xF14, 0x00000003,
	0xF4C, 0x00000000,
	0xF00, 0x00000300,
};

void ODM_ReadAndConfig_PHY_REG_1T_8723A(struct dm_odm_t *pDM_Odm)
{
	u32 hex = 0;
	u32 i = 0;
	u8  platform = 0x04;
	u8  board = pDM_Odm->BoardType;
	u32 ArrayLen = ARRAY_SIZE(Array_PHY_REG_1T_8723A);
	u32 *Array = Array_PHY_REG_1T_8723A;

	hex += board;
	hex += ODM_ITRF_USB << 8;
	hex += platform << 16;
	hex += 0xFF000000;
	for (i = 0; i < ArrayLen; i += 2) {
		u32 v1 = Array[i];
		u32 v2 = Array[i+1];

		/*  This (offset, data) pair meets the condition. */
		if (v1 < 0xCDCDCDCD) {
			odm_ConfigBB_PHY_8723A(pDM_Odm, v1, v2);
			continue;
		} else {
			if (!CheckCondition(Array[i], hex)) {
				/* Discard the following (offset, data) pairs */
				READ_NEXT_PAIR(v1, v2, i);
				while (v2 != 0xDEAD &&
				       v2 != 0xCDEF &&
				       v2 != 0xCDCD && i < ArrayLen - 2)
					READ_NEXT_PAIR(v1, v2, i);
				i -= 2; /*  prevent from for-loop += 2 */
			} else {
				/*  Configure matched pairs and skip to
				    end of if-else. */
				READ_NEXT_PAIR(v1, v2, i);
				while (v2 != 0xDEAD &&
				       v2 != 0xCDEF &&
				       v2 != 0xCDCD && i < ArrayLen - 2) {
					odm_ConfigBB_PHY_8723A(pDM_Odm, v1, v2);
					READ_NEXT_PAIR(v1, v2, i);
				}
				while (v2 != 0xDEAD && i < ArrayLen - 2)
					READ_NEXT_PAIR(v1, v2, i);
			}
		}
	}
}

/******************************************************************************
*                           PHY_REG_MP.TXT
******************************************************************************/

static u32 Array_PHY_REG_MP_8723A[] = {
	0xC30, 0x69E9AC4A,
	0xC3C, 0x0A979718,
};

void ODM_ReadAndConfig_PHY_REG_MP_8723A(struct dm_odm_t *pDM_Odm)
{
	u32 hex = 0;
	u32 i;
	u8 platform = 0x04;
	u8 board = pDM_Odm->BoardType;
	u32 ArrayLen = ARRAY_SIZE(Array_PHY_REG_MP_8723A);
	u32 *Array = Array_PHY_REG_MP_8723A;

	hex += board;
	hex += ODM_ITRF_USB << 8;
	hex += platform << 16;
	hex += 0xFF000000;
	for (i = 0; i < ArrayLen; i += 2) {
		u32 v1 = Array[i];
		u32 v2 = Array[i+1];

		/*  This (offset, data) pair meets the condition. */
		if (v1 < 0xCDCDCDCD) {
			odm_ConfigBB_PHY_8723A(pDM_Odm, v1, v2);
			continue;
		} else {
			if (!CheckCondition(Array[i], hex)) {
				/* Discard the following (offset, data) pairs */
				READ_NEXT_PAIR(v1, v2, i);
				while (v2 != 0xDEAD &&
				       v2 != 0xCDEF &&
				       v2 != 0xCDCD && i < ArrayLen - 2)
					READ_NEXT_PAIR(v1, v2, i);
				i -= 2; /*  prevent from for-loop += 2 */
			} else {
				/* Configure matched pairs and skip to
				   end of if-else. */
				READ_NEXT_PAIR(v1, v2, i);
				while (v2 != 0xDEAD &&
				       v2 != 0xCDEF &&
				       v2 != 0xCDCD && i < ArrayLen - 2) {
					odm_ConfigBB_PHY_8723A(pDM_Odm, v1, v2);
					READ_NEXT_PAIR(v1, v2, i);
				}
				while (v2 != 0xDEAD && i < ArrayLen - 2)
					READ_NEXT_PAIR(v1, v2, i);
			}
		}
	}
}
