staging: rtl8192e: Remove bb tx gains from r8192_priv
authorMateusz Kulikowski <mateusz.kulikowski@gmail.com>
Mon, 13 Apr 2015 21:47:28 +0000 (23:47 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 8 May 2015 07:24:06 +0000 (09:24 +0200)
r8192_priv structure had 2 big arrays with tx gain register values:
- cck_txbbgain_table
- cck_txbbgain_ch14_table
- txbbgain_table

This arrays were read-only - filled in driver init code and look
like firmware/chip-specific.

This patch removes them from r8192_priv and puts them in (global) variables.

tx_bb_gain is also flattened - register values are stored in array;
Amplification value can be calculated using dm_tx_bb_gain_idx_to_amplify().

Signed-off-by: Mateusz Kulikowski <mateusz.kulikowski@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c
drivers/staging/rtl8192e/rtl8192e/rtl_core.h
drivers/staging/rtl8192e/rtl8192e/rtl_dm.c
drivers/staging/rtl8192e/rtl8192e/rtl_dm.h

index 2869602..aad5cc9 100644 (file)
@@ -918,8 +918,7 @@ start:
                        tmpRegC = rtl8192_QueryBBReg(dev,
                                  rOFDM0_XCTxIQImbalance, bMaskDWord);
                        for (i = 0; i < TxBBGainTableLength; i++) {
-                               if (tmpRegA ==
-                                   priv->txbbgain_table[i].txbbgain_value) {
+                               if (tmpRegA == dm_tx_bb_gain[i]) {
                                        priv->rfa_txpowertrackingindex = (u8)i;
                                        priv->rfa_txpowertrackingindex_real =
                                                 (u8)i;
@@ -933,7 +932,7 @@ start:
                                  rCCK0_TxFilter1, bMaskByte2);
 
                        for (i = 0; i < CCKTxBBGainTableLength; i++) {
-                               if (TempCCk == priv->cck_txbbgain_table[i].ccktxbb_valuearray[0]) {
+                               if (TempCCk == dm_cck_tx_bb_gain[i][0]) {
                                        priv->CCKPresentAttentuation_20Mdefault = (u8)i;
                                        break;
                                }
index a6279e7..0640e76 100644 (file)
@@ -451,15 +451,6 @@ enum two_port_status {
        TWO_PORT_STATUS__WITHOUT_ANY_ASSOCIATE
 };
 
-struct txbbgain_struct {
-       long    txbb_iq_amplifygain;
-       u32     txbbgain_value;
-};
-
-struct ccktxbbgain {
-       u8      ccktxbb_valuearray[8];
-};
-
 struct init_gain {
        u8      xaagccore1;
        u8      xbagccore1;
@@ -567,11 +558,6 @@ struct r8192_priv {
        struct bb_reg_definition PHYRegDef[4];
        struct rate_adaptive rate_adaptive;
 
-       struct ccktxbbgain cck_txbbgain_table[CCKTxBBGainTableLength];
-       struct ccktxbbgain cck_txbbgain_ch14_table[CCKTxBBGainTableLength];
-
-       struct txbbgain_struct txbbgain_table[TxBBGainTableLength];
-
        enum acm_method AcmMethod;
 
        struct rt_firmware                      *pFirmware;
index df4bbcf..c99d584 100644 (file)
@@ -60,6 +60,99 @@ static u32 edca_setting_UL[HT_IOT_PEER_MAX] = {
 
 #define RTK_UL_EDCA 0xa44f
 #define RTK_DL_EDCA 0x5e4322
+
+const u32 dm_tx_bb_gain[TxBBGainTableLength] = {
+       0x7f8001fe, /* 12 dB */
+       0x788001e2, /* 11 dB */
+       0x71c001c7,
+       0x6b8001ae,
+       0x65400195,
+       0x5fc0017f,
+       0x5a400169,
+       0x55400155,
+       0x50800142,
+       0x4c000130,
+       0x47c0011f,
+       0x43c0010f,
+       0x40000100,
+       0x3c8000f2,
+       0x390000e4,
+       0x35c000d7,
+       0x32c000cb,
+       0x300000c0,
+       0x2d4000b5,
+       0x2ac000ab,
+       0x288000a2,
+       0x26000098,
+       0x24000090,
+       0x22000088,
+       0x20000080,
+       0x1a00006c,
+       0x1c800072,
+       0x18000060,
+       0x19800066,
+       0x15800056,
+       0x26c0005b,
+       0x14400051,
+       0x24400051,
+       0x1300004c,
+       0x12000048,
+       0x11000044,
+       0x10000040, /* -24 dB */
+};
+
+const u8 dm_cck_tx_bb_gain[CCKTxBBGainTableLength][8] = {
+       {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04},
+       {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04},
+       {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03},
+       {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03},
+       {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03},
+       {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03},
+       {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03},
+       {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03},
+       {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02},
+       {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02},
+       {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02},
+       {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02},
+       {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02},
+       {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02},
+       {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02},
+       {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02},
+       {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01},
+       {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02},
+       {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01},
+       {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},
+       {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},
+       {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01},
+       {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}
+};
+
+const u8 dm_cck_tx_bb_gain_ch14[CCKTxBBGainTableLength][8] = {
+       {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00},
+       {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00},
+       {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00},
+       {0x2d, 0x2d, 0x27, 0x17, 0x00, 0x00, 0x00, 0x00},
+       {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00},
+       {0x28, 0x28, 0x22, 0x14, 0x00, 0x00, 0x00, 0x00},
+       {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00},
+       {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00},
+       {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00},
+       {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00},
+       {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00},
+       {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},
+       {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00},
+       {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00},
+       {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00},
+       {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00},
+       {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00},
+       {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00},
+       {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00},
+       {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},
+       {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},
+       {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00},
+       {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}
+};
+
 /*---------------------------Define Local Constant---------------------------*/
 
 
@@ -590,7 +683,7 @@ static void dm_TXPowerTrackingCallback_TSSI(struct net_device *dev)
                                                        rtl8192_setBBreg(dev,
                                                                 rOFDM0_XATxIQImbalance,
                                                                 bMaskDWord,
-                                                                priv->txbbgain_table[priv->rfa_txpowertrackingindex_real].txbbgain_value);
+                                                                dm_tx_bb_gain[priv->rfa_txpowertrackingindex_real]);
                                                }
 
                                                priv->rfc_txpowertrackingindex--;
@@ -599,15 +692,16 @@ static void dm_TXPowerTrackingCallback_TSSI(struct net_device *dev)
                                                        rtl8192_setBBreg(dev,
                                                                 rOFDM0_XCTxIQImbalance,
                                                                 bMaskDWord,
-                                                                priv->txbbgain_table[priv->rfc_txpowertrackingindex_real].txbbgain_value);
+                                                                dm_tx_bb_gain[priv->rfc_txpowertrackingindex_real]);
                                                }
                                        } else {
-                                               rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance,
+                                               rtl8192_setBBreg(dev,
+                                                                rOFDM0_XATxIQImbalance,
                                                                 bMaskDWord,
-                                                                priv->txbbgain_table[4].txbbgain_value);
+                                                                dm_tx_bb_gain[4]);
                                                rtl8192_setBBreg(dev,
                                                                 rOFDM0_XCTxIQImbalance,
-                                                                bMaskDWord, priv->txbbgain_table[4].txbbgain_value);
+                                                                bMaskDWord, dm_tx_bb_gain[4]);
                                        }
                                } else {
                                        if (priv->rfa_txpowertrackingindex > 0) {
@@ -617,11 +711,11 @@ static void dm_TXPowerTrackingCallback_TSSI(struct net_device *dev)
                                                        rtl8192_setBBreg(dev,
                                                                         rOFDM0_XATxIQImbalance,
                                                                         bMaskDWord,
-                                                                        priv->txbbgain_table[priv->rfa_txpowertrackingindex_real].txbbgain_value);
+                                                                        dm_tx_bb_gain[priv->rfa_txpowertrackingindex_real]);
                                                }
                                        } else
                                                rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance,
-                                                                bMaskDWord, priv->txbbgain_table[4].txbbgain_value);
+                                                                bMaskDWord, dm_tx_bb_gain[4]);
 
                                }
                        } else {
@@ -635,22 +729,21 @@ static void dm_TXPowerTrackingCallback_TSSI(struct net_device *dev)
                                                rtl8192_setBBreg(dev,
                                                         rOFDM0_XATxIQImbalance,
                                                         bMaskDWord,
-                                                        priv->txbbgain_table
-                                                        [priv->rfa_txpowertrackingindex_real].txbbgain_value);
+                                                        dm_tx_bb_gain[priv->rfa_txpowertrackingindex_real]);
                                                priv->rfc_txpowertrackingindex++;
                                                priv->rfc_txpowertrackingindex_real++;
                                                rtl8192_setBBreg(dev,
                                                         rOFDM0_XCTxIQImbalance,
                                                         bMaskDWord,
-                                                        priv->txbbgain_table[priv->rfc_txpowertrackingindex_real].txbbgain_value);
+                                                        dm_tx_bb_gain[priv->rfc_txpowertrackingindex_real]);
                                        } else {
                                                rtl8192_setBBreg(dev,
                                                         rOFDM0_XATxIQImbalance,
                                                         bMaskDWord,
-                                                        priv->txbbgain_table[TxBBGainTableLength - 1].txbbgain_value);
+                                                        dm_tx_bb_gain[TxBBGainTableLength - 1]);
                                                rtl8192_setBBreg(dev,
                                                         rOFDM0_XCTxIQImbalance,
-                                                        bMaskDWord, priv->txbbgain_table[TxBBGainTableLength - 1].txbbgain_value);
+                                                        bMaskDWord, dm_tx_bb_gain[TxBBGainTableLength - 1]);
                                        }
                                } else {
                                        if (priv->rfa_txpowertrackingindex < (TxBBGainTableLength - 1)) {
@@ -658,11 +751,11 @@ static void dm_TXPowerTrackingCallback_TSSI(struct net_device *dev)
                                                priv->rfa_txpowertrackingindex_real++;
                                                rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance,
                                                                 bMaskDWord,
-                                                                priv->txbbgain_table[priv->rfa_txpowertrackingindex_real].txbbgain_value);
+                                                                dm_tx_bb_gain[priv->rfa_txpowertrackingindex_real]);
                                        } else
                                                rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance,
                                                                 bMaskDWord,
-                                                                priv->txbbgain_table[TxBBGainTableLength - 1].txbbgain_value);
+                                                                dm_tx_bb_gain[TxBBGainTableLength - 1]);
                                }
                        }
                        if (RF_Type == RF_2T4R) {
@@ -848,496 +941,6 @@ static void dm_InitializeTXPowerTracking_TSSI(struct net_device *dev)
 {
 
        struct r8192_priv *priv = rtllib_priv(dev);
-
-       priv->txbbgain_table[0].txbb_iq_amplifygain = 12;
-       priv->txbbgain_table[0].txbbgain_value = 0x7f8001fe;
-       priv->txbbgain_table[1].txbb_iq_amplifygain = 11;
-       priv->txbbgain_table[1].txbbgain_value = 0x788001e2;
-       priv->txbbgain_table[2].txbb_iq_amplifygain = 10;
-       priv->txbbgain_table[2].txbbgain_value = 0x71c001c7;
-       priv->txbbgain_table[3].txbb_iq_amplifygain = 9;
-       priv->txbbgain_table[3].txbbgain_value = 0x6b8001ae;
-       priv->txbbgain_table[4].txbb_iq_amplifygain = 8;
-       priv->txbbgain_table[4].txbbgain_value = 0x65400195;
-       priv->txbbgain_table[5].txbb_iq_amplifygain = 7;
-       priv->txbbgain_table[5].txbbgain_value = 0x5fc0017f;
-       priv->txbbgain_table[6].txbb_iq_amplifygain = 6;
-       priv->txbbgain_table[6].txbbgain_value = 0x5a400169;
-       priv->txbbgain_table[7].txbb_iq_amplifygain = 5;
-       priv->txbbgain_table[7].txbbgain_value = 0x55400155;
-       priv->txbbgain_table[8].txbb_iq_amplifygain = 4;
-       priv->txbbgain_table[8].txbbgain_value = 0x50800142;
-       priv->txbbgain_table[9].txbb_iq_amplifygain = 3;
-       priv->txbbgain_table[9].txbbgain_value = 0x4c000130;
-       priv->txbbgain_table[10].txbb_iq_amplifygain = 2;
-       priv->txbbgain_table[10].txbbgain_value = 0x47c0011f;
-       priv->txbbgain_table[11].txbb_iq_amplifygain = 1;
-       priv->txbbgain_table[11].txbbgain_value = 0x43c0010f;
-       priv->txbbgain_table[12].txbb_iq_amplifygain = 0;
-       priv->txbbgain_table[12].txbbgain_value = 0x40000100;
-       priv->txbbgain_table[13].txbb_iq_amplifygain = -1;
-       priv->txbbgain_table[13].txbbgain_value = 0x3c8000f2;
-       priv->txbbgain_table[14].txbb_iq_amplifygain = -2;
-       priv->txbbgain_table[14].txbbgain_value = 0x390000e4;
-       priv->txbbgain_table[15].txbb_iq_amplifygain = -3;
-       priv->txbbgain_table[15].txbbgain_value = 0x35c000d7;
-       priv->txbbgain_table[16].txbb_iq_amplifygain = -4;
-       priv->txbbgain_table[16].txbbgain_value = 0x32c000cb;
-       priv->txbbgain_table[17].txbb_iq_amplifygain = -5;
-       priv->txbbgain_table[17].txbbgain_value = 0x300000c0;
-       priv->txbbgain_table[18].txbb_iq_amplifygain = -6;
-       priv->txbbgain_table[18].txbbgain_value = 0x2d4000b5;
-       priv->txbbgain_table[19].txbb_iq_amplifygain = -7;
-       priv->txbbgain_table[19].txbbgain_value = 0x2ac000ab;
-       priv->txbbgain_table[20].txbb_iq_amplifygain = -8;
-       priv->txbbgain_table[20].txbbgain_value = 0x288000a2;
-       priv->txbbgain_table[21].txbb_iq_amplifygain = -9;
-       priv->txbbgain_table[21].txbbgain_value = 0x26000098;
-       priv->txbbgain_table[22].txbb_iq_amplifygain = -10;
-       priv->txbbgain_table[22].txbbgain_value = 0x24000090;
-       priv->txbbgain_table[23].txbb_iq_amplifygain = -11;
-       priv->txbbgain_table[23].txbbgain_value = 0x22000088;
-       priv->txbbgain_table[24].txbb_iq_amplifygain = -12;
-       priv->txbbgain_table[24].txbbgain_value = 0x20000080;
-       priv->txbbgain_table[25].txbb_iq_amplifygain = -13;
-       priv->txbbgain_table[25].txbbgain_value = 0x1a00006c;
-       priv->txbbgain_table[26].txbb_iq_amplifygain = -14;
-       priv->txbbgain_table[26].txbbgain_value = 0x1c800072;
-       priv->txbbgain_table[27].txbb_iq_amplifygain = -15;
-       priv->txbbgain_table[27].txbbgain_value = 0x18000060;
-       priv->txbbgain_table[28].txbb_iq_amplifygain = -16;
-       priv->txbbgain_table[28].txbbgain_value = 0x19800066;
-       priv->txbbgain_table[29].txbb_iq_amplifygain = -17;
-       priv->txbbgain_table[29].txbbgain_value = 0x15800056;
-       priv->txbbgain_table[30].txbb_iq_amplifygain = -18;
-       priv->txbbgain_table[30].txbbgain_value = 0x26c0005b;
-       priv->txbbgain_table[31].txbb_iq_amplifygain = -19;
-       priv->txbbgain_table[31].txbbgain_value = 0x14400051;
-       priv->txbbgain_table[32].txbb_iq_amplifygain = -20;
-       priv->txbbgain_table[32].txbbgain_value = 0x24400051;
-       priv->txbbgain_table[33].txbb_iq_amplifygain = -21;
-       priv->txbbgain_table[33].txbbgain_value = 0x1300004c;
-       priv->txbbgain_table[34].txbb_iq_amplifygain = -22;
-       priv->txbbgain_table[34].txbbgain_value = 0x12000048;
-       priv->txbbgain_table[35].txbb_iq_amplifygain = -23;
-       priv->txbbgain_table[35].txbbgain_value = 0x11000044;
-       priv->txbbgain_table[36].txbb_iq_amplifygain = -24;
-       priv->txbbgain_table[36].txbbgain_value = 0x10000040;
-
-       priv->cck_txbbgain_table[0].ccktxbb_valuearray[0] = 0x36;
-       priv->cck_txbbgain_table[0].ccktxbb_valuearray[1] = 0x35;
-       priv->cck_txbbgain_table[0].ccktxbb_valuearray[2] = 0x2e;
-       priv->cck_txbbgain_table[0].ccktxbb_valuearray[3] = 0x25;
-       priv->cck_txbbgain_table[0].ccktxbb_valuearray[4] = 0x1c;
-       priv->cck_txbbgain_table[0].ccktxbb_valuearray[5] = 0x12;
-       priv->cck_txbbgain_table[0].ccktxbb_valuearray[6] = 0x09;
-       priv->cck_txbbgain_table[0].ccktxbb_valuearray[7] = 0x04;
-
-       priv->cck_txbbgain_table[1].ccktxbb_valuearray[0] = 0x33;
-       priv->cck_txbbgain_table[1].ccktxbb_valuearray[1] = 0x32;
-       priv->cck_txbbgain_table[1].ccktxbb_valuearray[2] = 0x2b;
-       priv->cck_txbbgain_table[1].ccktxbb_valuearray[3] = 0x23;
-       priv->cck_txbbgain_table[1].ccktxbb_valuearray[4] = 0x1a;
-       priv->cck_txbbgain_table[1].ccktxbb_valuearray[5] = 0x11;
-       priv->cck_txbbgain_table[1].ccktxbb_valuearray[6] = 0x08;
-       priv->cck_txbbgain_table[1].ccktxbb_valuearray[7] = 0x04;
-
-       priv->cck_txbbgain_table[2].ccktxbb_valuearray[0] = 0x30;
-       priv->cck_txbbgain_table[2].ccktxbb_valuearray[1] = 0x2f;
-       priv->cck_txbbgain_table[2].ccktxbb_valuearray[2] = 0x29;
-       priv->cck_txbbgain_table[2].ccktxbb_valuearray[3] = 0x21;
-       priv->cck_txbbgain_table[2].ccktxbb_valuearray[4] = 0x19;
-       priv->cck_txbbgain_table[2].ccktxbb_valuearray[5] = 0x10;
-       priv->cck_txbbgain_table[2].ccktxbb_valuearray[6] = 0x08;
-       priv->cck_txbbgain_table[2].ccktxbb_valuearray[7] = 0x03;
-
-       priv->cck_txbbgain_table[3].ccktxbb_valuearray[0] = 0x2d;
-       priv->cck_txbbgain_table[3].ccktxbb_valuearray[1] = 0x2d;
-       priv->cck_txbbgain_table[3].ccktxbb_valuearray[2] = 0x27;
-       priv->cck_txbbgain_table[3].ccktxbb_valuearray[3] = 0x1f;
-       priv->cck_txbbgain_table[3].ccktxbb_valuearray[4] = 0x18;
-       priv->cck_txbbgain_table[3].ccktxbb_valuearray[5] = 0x0f;
-       priv->cck_txbbgain_table[3].ccktxbb_valuearray[6] = 0x08;
-       priv->cck_txbbgain_table[3].ccktxbb_valuearray[7] = 0x03;
-
-       priv->cck_txbbgain_table[4].ccktxbb_valuearray[0] = 0x2b;
-       priv->cck_txbbgain_table[4].ccktxbb_valuearray[1] = 0x2a;
-       priv->cck_txbbgain_table[4].ccktxbb_valuearray[2] = 0x25;
-       priv->cck_txbbgain_table[4].ccktxbb_valuearray[3] = 0x1e;
-       priv->cck_txbbgain_table[4].ccktxbb_valuearray[4] = 0x16;
-       priv->cck_txbbgain_table[4].ccktxbb_valuearray[5] = 0x0e;
-       priv->cck_txbbgain_table[4].ccktxbb_valuearray[6] = 0x07;
-       priv->cck_txbbgain_table[4].ccktxbb_valuearray[7] = 0x03;
-
-       priv->cck_txbbgain_table[5].ccktxbb_valuearray[0] = 0x28;
-       priv->cck_txbbgain_table[5].ccktxbb_valuearray[1] = 0x28;
-       priv->cck_txbbgain_table[5].ccktxbb_valuearray[2] = 0x22;
-       priv->cck_txbbgain_table[5].ccktxbb_valuearray[3] = 0x1c;
-       priv->cck_txbbgain_table[5].ccktxbb_valuearray[4] = 0x15;
-       priv->cck_txbbgain_table[5].ccktxbb_valuearray[5] = 0x0d;
-       priv->cck_txbbgain_table[5].ccktxbb_valuearray[6] = 0x07;
-       priv->cck_txbbgain_table[5].ccktxbb_valuearray[7] = 0x03;
-
-       priv->cck_txbbgain_table[6].ccktxbb_valuearray[0] = 0x26;
-       priv->cck_txbbgain_table[6].ccktxbb_valuearray[1] = 0x25;
-       priv->cck_txbbgain_table[6].ccktxbb_valuearray[2] = 0x21;
-       priv->cck_txbbgain_table[6].ccktxbb_valuearray[3] = 0x1b;
-       priv->cck_txbbgain_table[6].ccktxbb_valuearray[4] = 0x14;
-       priv->cck_txbbgain_table[6].ccktxbb_valuearray[5] = 0x0d;
-       priv->cck_txbbgain_table[6].ccktxbb_valuearray[6] = 0x06;
-       priv->cck_txbbgain_table[6].ccktxbb_valuearray[7] = 0x03;
-
-       priv->cck_txbbgain_table[7].ccktxbb_valuearray[0] = 0x24;
-       priv->cck_txbbgain_table[7].ccktxbb_valuearray[1] = 0x23;
-       priv->cck_txbbgain_table[7].ccktxbb_valuearray[2] = 0x1f;
-       priv->cck_txbbgain_table[7].ccktxbb_valuearray[3] = 0x19;
-       priv->cck_txbbgain_table[7].ccktxbb_valuearray[4] = 0x13;
-       priv->cck_txbbgain_table[7].ccktxbb_valuearray[5] = 0x0c;
-       priv->cck_txbbgain_table[7].ccktxbb_valuearray[6] = 0x06;
-       priv->cck_txbbgain_table[7].ccktxbb_valuearray[7] = 0x03;
-
-       priv->cck_txbbgain_table[8].ccktxbb_valuearray[0] = 0x22;
-       priv->cck_txbbgain_table[8].ccktxbb_valuearray[1] = 0x21;
-       priv->cck_txbbgain_table[8].ccktxbb_valuearray[2] = 0x1d;
-       priv->cck_txbbgain_table[8].ccktxbb_valuearray[3] = 0x18;
-       priv->cck_txbbgain_table[8].ccktxbb_valuearray[4] = 0x11;
-       priv->cck_txbbgain_table[8].ccktxbb_valuearray[5] = 0x0b;
-       priv->cck_txbbgain_table[8].ccktxbb_valuearray[6] = 0x06;
-       priv->cck_txbbgain_table[8].ccktxbb_valuearray[7] = 0x02;
-
-       priv->cck_txbbgain_table[9].ccktxbb_valuearray[0] = 0x20;
-       priv->cck_txbbgain_table[9].ccktxbb_valuearray[1] = 0x20;
-       priv->cck_txbbgain_table[9].ccktxbb_valuearray[2] = 0x1b;
-       priv->cck_txbbgain_table[9].ccktxbb_valuearray[3] = 0x16;
-       priv->cck_txbbgain_table[9].ccktxbb_valuearray[4] = 0x11;
-       priv->cck_txbbgain_table[9].ccktxbb_valuearray[5] = 0x08;
-       priv->cck_txbbgain_table[9].ccktxbb_valuearray[6] = 0x05;
-       priv->cck_txbbgain_table[9].ccktxbb_valuearray[7] = 0x02;
-
-       priv->cck_txbbgain_table[10].ccktxbb_valuearray[0] = 0x1f;
-       priv->cck_txbbgain_table[10].ccktxbb_valuearray[1] = 0x1e;
-       priv->cck_txbbgain_table[10].ccktxbb_valuearray[2] = 0x1a;
-       priv->cck_txbbgain_table[10].ccktxbb_valuearray[3] = 0x15;
-       priv->cck_txbbgain_table[10].ccktxbb_valuearray[4] = 0x10;
-       priv->cck_txbbgain_table[10].ccktxbb_valuearray[5] = 0x0a;
-       priv->cck_txbbgain_table[10].ccktxbb_valuearray[6] = 0x05;
-       priv->cck_txbbgain_table[10].ccktxbb_valuearray[7] = 0x02;
-
-       priv->cck_txbbgain_table[11].ccktxbb_valuearray[0] = 0x1d;
-       priv->cck_txbbgain_table[11].ccktxbb_valuearray[1] = 0x1c;
-       priv->cck_txbbgain_table[11].ccktxbb_valuearray[2] = 0x18;
-       priv->cck_txbbgain_table[11].ccktxbb_valuearray[3] = 0x14;
-       priv->cck_txbbgain_table[11].ccktxbb_valuearray[4] = 0x0f;
-       priv->cck_txbbgain_table[11].ccktxbb_valuearray[5] = 0x0a;
-       priv->cck_txbbgain_table[11].ccktxbb_valuearray[6] = 0x05;
-       priv->cck_txbbgain_table[11].ccktxbb_valuearray[7] = 0x02;
-
-       priv->cck_txbbgain_table[12].ccktxbb_valuearray[0] = 0x1b;
-       priv->cck_txbbgain_table[12].ccktxbb_valuearray[1] = 0x1a;
-       priv->cck_txbbgain_table[12].ccktxbb_valuearray[2] = 0x17;
-       priv->cck_txbbgain_table[12].ccktxbb_valuearray[3] = 0x13;
-       priv->cck_txbbgain_table[12].ccktxbb_valuearray[4] = 0x0e;
-       priv->cck_txbbgain_table[12].ccktxbb_valuearray[5] = 0x09;
-       priv->cck_txbbgain_table[12].ccktxbb_valuearray[6] = 0x04;
-       priv->cck_txbbgain_table[12].ccktxbb_valuearray[7] = 0x02;
-
-       priv->cck_txbbgain_table[13].ccktxbb_valuearray[0] = 0x1a;
-       priv->cck_txbbgain_table[13].ccktxbb_valuearray[1] = 0x19;
-       priv->cck_txbbgain_table[13].ccktxbb_valuearray[2] = 0x16;
-       priv->cck_txbbgain_table[13].ccktxbb_valuearray[3] = 0x12;
-       priv->cck_txbbgain_table[13].ccktxbb_valuearray[4] = 0x0d;
-       priv->cck_txbbgain_table[13].ccktxbb_valuearray[5] = 0x09;
-       priv->cck_txbbgain_table[13].ccktxbb_valuearray[6] = 0x04;
-       priv->cck_txbbgain_table[13].ccktxbb_valuearray[7] = 0x02;
-
-       priv->cck_txbbgain_table[14].ccktxbb_valuearray[0] = 0x18;
-       priv->cck_txbbgain_table[14].ccktxbb_valuearray[1] = 0x17;
-       priv->cck_txbbgain_table[14].ccktxbb_valuearray[2] = 0x15;
-       priv->cck_txbbgain_table[14].ccktxbb_valuearray[3] = 0x11;
-       priv->cck_txbbgain_table[14].ccktxbb_valuearray[4] = 0x0c;
-       priv->cck_txbbgain_table[14].ccktxbb_valuearray[5] = 0x08;
-       priv->cck_txbbgain_table[14].ccktxbb_valuearray[6] = 0x04;
-       priv->cck_txbbgain_table[14].ccktxbb_valuearray[7] = 0x02;
-
-       priv->cck_txbbgain_table[15].ccktxbb_valuearray[0] = 0x17;
-       priv->cck_txbbgain_table[15].ccktxbb_valuearray[1] = 0x16;
-       priv->cck_txbbgain_table[15].ccktxbb_valuearray[2] = 0x13;
-       priv->cck_txbbgain_table[15].ccktxbb_valuearray[3] = 0x10;
-       priv->cck_txbbgain_table[15].ccktxbb_valuearray[4] = 0x0c;
-       priv->cck_txbbgain_table[15].ccktxbb_valuearray[5] = 0x08;
-       priv->cck_txbbgain_table[15].ccktxbb_valuearray[6] = 0x04;
-       priv->cck_txbbgain_table[15].ccktxbb_valuearray[7] = 0x02;
-
-       priv->cck_txbbgain_table[16].ccktxbb_valuearray[0] = 0x16;
-       priv->cck_txbbgain_table[16].ccktxbb_valuearray[1] = 0x15;
-       priv->cck_txbbgain_table[16].ccktxbb_valuearray[2] = 0x12;
-       priv->cck_txbbgain_table[16].ccktxbb_valuearray[3] = 0x0f;
-       priv->cck_txbbgain_table[16].ccktxbb_valuearray[4] = 0x0b;
-       priv->cck_txbbgain_table[16].ccktxbb_valuearray[5] = 0x07;
-       priv->cck_txbbgain_table[16].ccktxbb_valuearray[6] = 0x04;
-       priv->cck_txbbgain_table[16].ccktxbb_valuearray[7] = 0x01;
-
-       priv->cck_txbbgain_table[17].ccktxbb_valuearray[0] = 0x14;
-       priv->cck_txbbgain_table[17].ccktxbb_valuearray[1] = 0x14;
-       priv->cck_txbbgain_table[17].ccktxbb_valuearray[2] = 0x11;
-       priv->cck_txbbgain_table[17].ccktxbb_valuearray[3] = 0x0e;
-       priv->cck_txbbgain_table[17].ccktxbb_valuearray[4] = 0x0b;
-       priv->cck_txbbgain_table[17].ccktxbb_valuearray[5] = 0x07;
-       priv->cck_txbbgain_table[17].ccktxbb_valuearray[6] = 0x03;
-       priv->cck_txbbgain_table[17].ccktxbb_valuearray[7] = 0x02;
-
-       priv->cck_txbbgain_table[18].ccktxbb_valuearray[0] = 0x13;
-       priv->cck_txbbgain_table[18].ccktxbb_valuearray[1] = 0x13;
-       priv->cck_txbbgain_table[18].ccktxbb_valuearray[2] = 0x10;
-       priv->cck_txbbgain_table[18].ccktxbb_valuearray[3] = 0x0d;
-       priv->cck_txbbgain_table[18].ccktxbb_valuearray[4] = 0x0a;
-       priv->cck_txbbgain_table[18].ccktxbb_valuearray[5] = 0x06;
-       priv->cck_txbbgain_table[18].ccktxbb_valuearray[6] = 0x03;
-       priv->cck_txbbgain_table[18].ccktxbb_valuearray[7] = 0x01;
-
-       priv->cck_txbbgain_table[19].ccktxbb_valuearray[0] = 0x12;
-       priv->cck_txbbgain_table[19].ccktxbb_valuearray[1] = 0x12;
-       priv->cck_txbbgain_table[19].ccktxbb_valuearray[2] = 0x0f;
-       priv->cck_txbbgain_table[19].ccktxbb_valuearray[3] = 0x0c;
-       priv->cck_txbbgain_table[19].ccktxbb_valuearray[4] = 0x09;
-       priv->cck_txbbgain_table[19].ccktxbb_valuearray[5] = 0x06;
-       priv->cck_txbbgain_table[19].ccktxbb_valuearray[6] = 0x03;
-       priv->cck_txbbgain_table[19].ccktxbb_valuearray[7] = 0x01;
-
-       priv->cck_txbbgain_table[20].ccktxbb_valuearray[0] = 0x11;
-       priv->cck_txbbgain_table[20].ccktxbb_valuearray[1] = 0x11;
-       priv->cck_txbbgain_table[20].ccktxbb_valuearray[2] = 0x0f;
-       priv->cck_txbbgain_table[20].ccktxbb_valuearray[3] = 0x0c;
-       priv->cck_txbbgain_table[20].ccktxbb_valuearray[4] = 0x09;
-       priv->cck_txbbgain_table[20].ccktxbb_valuearray[5] = 0x06;
-       priv->cck_txbbgain_table[20].ccktxbb_valuearray[6] = 0x03;
-       priv->cck_txbbgain_table[20].ccktxbb_valuearray[7] = 0x01;
-
-       priv->cck_txbbgain_table[21].ccktxbb_valuearray[0] = 0x10;
-       priv->cck_txbbgain_table[21].ccktxbb_valuearray[1] = 0x10;
-       priv->cck_txbbgain_table[21].ccktxbb_valuearray[2] = 0x0e;
-       priv->cck_txbbgain_table[21].ccktxbb_valuearray[3] = 0x0b;
-       priv->cck_txbbgain_table[21].ccktxbb_valuearray[4] = 0x08;
-       priv->cck_txbbgain_table[21].ccktxbb_valuearray[5] = 0x05;
-       priv->cck_txbbgain_table[21].ccktxbb_valuearray[6] = 0x03;
-       priv->cck_txbbgain_table[21].ccktxbb_valuearray[7] = 0x01;
-
-       priv->cck_txbbgain_table[22].ccktxbb_valuearray[0] = 0x0f;
-       priv->cck_txbbgain_table[22].ccktxbb_valuearray[1] = 0x0f;
-       priv->cck_txbbgain_table[22].ccktxbb_valuearray[2] = 0x0d;
-       priv->cck_txbbgain_table[22].ccktxbb_valuearray[3] = 0x0b;
-       priv->cck_txbbgain_table[22].ccktxbb_valuearray[4] = 0x08;
-       priv->cck_txbbgain_table[22].ccktxbb_valuearray[5] = 0x05;
-       priv->cck_txbbgain_table[22].ccktxbb_valuearray[6] = 0x03;
-       priv->cck_txbbgain_table[22].ccktxbb_valuearray[7] = 0x01;
-
-       priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[0] = 0x36;
-       priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[1] = 0x35;
-       priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[2] = 0x2e;
-       priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[3] = 0x1b;
-       priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[0] = 0x33;
-       priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[1] = 0x32;
-       priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[2] = 0x2b;
-       priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[3] = 0x19;
-       priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[0] = 0x30;
-       priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[1] = 0x2f;
-       priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[2] = 0x29;
-       priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[3] = 0x18;
-       priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[0] = 0x2d;
-       priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[1] = 0x2d;
-       priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[2] = 0x27;
-       priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[3] = 0x17;
-       priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[0] = 0x2b;
-       priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[1] = 0x2a;
-       priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[2] = 0x25;
-       priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[3] = 0x15;
-       priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[0] = 0x28;
-       priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[1] = 0x28;
-       priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[2] = 0x22;
-       priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[3] = 0x14;
-       priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[0] = 0x26;
-       priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[1] = 0x25;
-       priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[2] = 0x21;
-       priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[3] = 0x13;
-       priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[0] = 0x24;
-       priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[1] = 0x23;
-       priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[2] = 0x1f;
-       priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[3] = 0x12;
-       priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[0] = 0x22;
-       priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[1] = 0x21;
-       priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[2] = 0x1d;
-       priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[3] = 0x11;
-       priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[0] = 0x20;
-       priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[1] = 0x20;
-       priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[2] = 0x1b;
-       priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[3] = 0x10;
-       priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[0] = 0x1f;
-       priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[1] = 0x1e;
-       priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[2] = 0x1a;
-       priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[3] = 0x0f;
-       priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[0] = 0x1d;
-       priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[1] = 0x1c;
-       priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[2] = 0x18;
-       priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[3] = 0x0e;
-       priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[0] = 0x1b;
-       priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[1] = 0x1a;
-       priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[2] = 0x17;
-       priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[3] = 0x0e;
-       priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[0] = 0x1a;
-       priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[1] = 0x19;
-       priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[2] = 0x16;
-       priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[3] = 0x0d;
-       priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[0] = 0x18;
-       priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[1] = 0x17;
-       priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[2] = 0x15;
-       priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[3] = 0x0c;
-       priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[0] = 0x17;
-       priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[1] = 0x16;
-       priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[2] = 0x13;
-       priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[3] = 0x0b;
-       priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[0] = 0x16;
-       priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[1] = 0x15;
-       priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[2] = 0x12;
-       priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[3] = 0x0b;
-       priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[0] = 0x14;
-       priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[1] = 0x14;
-       priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[2] = 0x11;
-       priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[3] = 0x0a;
-       priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[0] = 0x13;
-       priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[1] = 0x13;
-       priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[2] = 0x10;
-       priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[3] = 0x0a;
-       priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[0] = 0x12;
-       priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[1] = 0x12;
-       priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[2] = 0x0f;
-       priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[3] = 0x09;
-       priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[0] = 0x11;
-       priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[1] = 0x11;
-       priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[2] = 0x0f;
-       priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[3] = 0x09;
-       priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[0] = 0x10;
-       priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[1] = 0x10;
-       priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[2] = 0x0e;
-       priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[3] = 0x08;
-       priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[7] = 0x00;
-
-       priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[0] = 0x0f;
-       priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[1] = 0x0f;
-       priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[2] = 0x0d;
-       priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[3] = 0x08;
-       priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[4] = 0x00;
-       priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[5] = 0x00;
-       priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[6] = 0x00;
-       priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[7] = 0x00;
-
        priv->btxpower_tracking = true;
        priv->txpower_count       = 0;
        priv->btxpower_trackingInit = false;
@@ -1436,39 +1039,38 @@ static void dm_CCKTxPowerAdjust_TSSI(struct net_device *dev, bool  bInCH14)
 {
        u32 TempVal;
        struct r8192_priv *priv = rtllib_priv(dev);
+       u8 attenuation = (u8)priv->CCKPresentAttentuation;
 
        TempVal = 0;
        if (!bInCH14) {
-               TempVal = (u32)(priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[0] +
-                         (priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[1]<<8));
+               TempVal = (u32)(dm_cck_tx_bb_gain[attenuation][0] +
+                         (dm_cck_tx_bb_gain[attenuation][1] << 8));
 
                rtl8192_setBBreg(dev, rCCK0_TxFilter1, bMaskHWord, TempVal);
-               TempVal = (u32)(priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[2] +
-                         (priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[3]<<8) +
-                         (priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[4]<<16)+
-                         (priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[5]<<24));
+               TempVal = (u32)((dm_cck_tx_bb_gain[attenuation][2]) +
+                         (dm_cck_tx_bb_gain[attenuation][3] << 8) +
+                         (dm_cck_tx_bb_gain[attenuation][4] << 16)+
+                         (dm_cck_tx_bb_gain[attenuation][5] << 24));
                rtl8192_setBBreg(dev, rCCK0_TxFilter2, bMaskDWord, TempVal);
-               TempVal = (u32)(priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[6] +
-                         (priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[7]<<8));
+               TempVal = (u32)(dm_cck_tx_bb_gain[attenuation][6] +
+                         (dm_cck_tx_bb_gain[attenuation][7] << 8));
 
                rtl8192_setBBreg(dev, rCCK0_DebugPort, bMaskLWord, TempVal);
        } else {
-               TempVal = (u32)(priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[0] +
-                         (priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[1]<<8));
+               TempVal = (u32)((dm_cck_tx_bb_gain_ch14[attenuation][0]) +
+                         (dm_cck_tx_bb_gain_ch14[attenuation][1] << 8));
 
                rtl8192_setBBreg(dev, rCCK0_TxFilter1, bMaskHWord, TempVal);
-               TempVal = (u32)(priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[2] +
-                         (priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[3]<<8) +
-                         (priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[4]<<16)+
-                         (priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[5]<<24));
+               TempVal = (u32)((dm_cck_tx_bb_gain_ch14[attenuation][2]) +
+                         (dm_cck_tx_bb_gain_ch14[attenuation][3] << 8) +
+                         (dm_cck_tx_bb_gain_ch14[attenuation][4] << 16)+
+                         (dm_cck_tx_bb_gain_ch14[attenuation][5] << 24));
                rtl8192_setBBreg(dev, rCCK0_TxFilter2, bMaskDWord, TempVal);
-               TempVal = (u32)(priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[6] +
-                         (priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[7]<<8));
+               TempVal = (u32)((dm_cck_tx_bb_gain_ch14[attenuation][6]) +
+                         (dm_cck_tx_bb_gain_ch14[attenuation][7] << 8));
 
                rtl8192_setBBreg(dev, rCCK0_DebugPort, bMaskLWord, TempVal);
        }
-
-
 }
 
 static void dm_CCKTxPowerAdjust_ThermalMeter(struct net_device *dev,   bool  bInCH14)
@@ -1535,26 +1137,30 @@ static void dm_txpower_reset_recovery(struct net_device *dev)
 
        RT_TRACE(COMP_POWER_TRACKING, "Start Reset Recovery ==>\n");
        rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord,
-                        priv->txbbgain_table[priv->rfa_txpowertrackingindex].txbbgain_value);
+                        dm_tx_bb_gain[priv->rfa_txpowertrackingindex]);
        RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: Fill in 0xc80 is %08x\n",
-                priv->txbbgain_table[priv->rfa_txpowertrackingindex].txbbgain_value);
-       RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: Fill in RFA_txPowerTrackingIndex is %x\n",
+                dm_tx_bb_gain[priv->rfa_txpowertrackingindex]);
+       RT_TRACE(COMP_POWER_TRACKING,
+                "Reset Recovery: Fill in RFA_txPowerTrackingIndex is %x\n",
                 priv->rfa_txpowertrackingindex);
-       RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery : RF A I/Q Amplify Gain is %ld\n",
-                priv->txbbgain_table[priv->rfa_txpowertrackingindex].txbb_iq_amplifygain);
-       RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: CCK Attenuation is %d dB\n",
+       RT_TRACE(COMP_POWER_TRACKING,
+                "Reset Recovery : RF A I/Q Amplify Gain is %d\n",
+                dm_tx_bb_gain_idx_to_amplify(priv->rfa_txpowertrackingindex));
+       RT_TRACE(COMP_POWER_TRACKING,
+                "Reset Recovery: CCK Attenuation is %d dB\n",
                 priv->CCKPresentAttentuation);
        dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
 
        rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord,
-                        priv->txbbgain_table[priv->rfc_txpowertrackingindex].txbbgain_value);
+                        dm_tx_bb_gain[priv->rfc_txpowertrackingindex]);
        RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: Fill in 0xc90 is %08x\n",
-                priv->txbbgain_table[priv->rfc_txpowertrackingindex].txbbgain_value);
-       RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: Fill in RFC_txPowerTrackingIndex is %x\n",
+                dm_tx_bb_gain[priv->rfc_txpowertrackingindex]);
+       RT_TRACE(COMP_POWER_TRACKING,
+                "Reset Recovery: Fill in RFC_txPowerTrackingIndex is %x\n",
                 priv->rfc_txpowertrackingindex);
-       RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery : RF C I/Q Amplify Gain is %ld\n",
-                priv->txbbgain_table[priv->rfc_txpowertrackingindex].txbb_iq_amplifygain);
-
+       RT_TRACE(COMP_POWER_TRACKING,
+                "Reset Recovery : RF C I/Q Amplify Gain is %d\n",
+                dm_tx_bb_gain_idx_to_amplify(priv->rfc_txpowertrackingindex));
 }
 
 void dm_restore_dynamic_mechanism_state(struct net_device *dev)
index 3f02e11..6be8e8b 100644 (file)
@@ -252,11 +252,20 @@ extern    u8              dm_shadow[16][256];
 extern struct drx_path_sel DM_RxPathSelTable;
 
 extern u8                      test_flag;
+
+/* Pre-calculated gain tables */
+extern const u32 dm_tx_bb_gain[TxBBGainTableLength];
+extern const u8 dm_cck_tx_bb_gain[CCKTxBBGainTableLength][8];
+extern const u8 dm_cck_tx_bb_gain_ch14[CCKTxBBGainTableLength][8];
+/* Maps table index to iq amplify gain (dB, 12 to -24dB) */
+#define dm_tx_bb_gain_idx_to_amplify(idx) (-idx + 12)
+
 /*------------------------Export global variable----------------------------*/
 
 
 /*--------------------------Exported Function prototype---------------------*/
 /*--------------------------Exported Function prototype---------------------*/
+
 extern  void    init_hal_dm(struct net_device *dev);
 extern  void deinit_hal_dm(struct net_device *dev);