phydm_powertracking_ap.c 54 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
  4. *
  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.
  8. *
  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
  12. * more details.
  13. *
  14. * You should have received a copy of the GNU General Public License along with
  15. * this program; if not, write to the Free Software Foundation, Inc.,
  16. * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
  17. *
  18. *
  19. ******************************************************************************/
  20. /* ************************************************************
  21. * include files
  22. * ************************************************************ */
  23. #include "mp_precomp.h"
  24. #include "phydm_precomp.h"
  25. #if !defined(_OUTSRC_COEXIST)
  26. /* ************************************************************
  27. * Global var
  28. * ************************************************************ */
  29. u32 ofdm_swing_table_new[OFDM_TABLE_SIZE_92D] = {
  30. 0x0b40002d, /* 0, -15.0dB */
  31. 0x0c000030, /* 1, -14.5dB */
  32. 0x0cc00033, /* 2, -14.0dB */
  33. 0x0d800036, /* 3, -13.5dB */
  34. 0x0e400039, /* 4, -13.0dB */
  35. 0x0f00003c, /* 5, -12.5dB */
  36. 0x10000040, /* 6, -12.0dB */
  37. 0x11000044, /* 7, -11.5dB */
  38. 0x12000048, /* 8, -11.0dB */
  39. 0x1300004c, /* 9, -10.5dB */
  40. 0x14400051, /* 10, -10.0dB */
  41. 0x15800056, /* 11, -9.5dB */
  42. 0x16c0005b, /* 12, -9.0dB */
  43. 0x18000060, /* 13, -8.5dB */
  44. 0x19800066, /* 14, -8.0dB */
  45. 0x1b00006c, /* 15, -7.5dB */
  46. 0x1c800072, /* 16, -7.0dB */
  47. 0x1e400079, /* 17, -6.5dB */
  48. 0x20000080, /* 18, -6.0dB */
  49. 0x22000088, /* 19, -5.5dB */
  50. 0x24000090, /* 20, -5.0dB */
  51. 0x26000098, /* 21, -4.5dB */
  52. 0x288000a2, /* 22, -4.0dB */
  53. 0x2ac000ab, /* 23, -3.5dB */
  54. 0x2d4000b5, /* 24, -3.0dB */
  55. 0x300000c0, /* 25, -2.5dB */
  56. 0x32c000cb, /* 26, -2.0dB */
  57. 0x35c000d7, /* 27, -1.5dB */
  58. 0x390000e4, /* 28, -1.0dB */
  59. 0x3c8000f2, /* 29, -0.5dB */
  60. 0x40000100, /* 30, +0dB */
  61. 0x43c0010f, /* 31, +0.5dB */
  62. 0x47c0011f, /* 32, +1.0dB */
  63. 0x4c000130, /* 33, +1.5dB */
  64. 0x50800142, /* 34, +2.0dB */
  65. 0x55400155, /* 35, +2.5dB */
  66. 0x5a400169, /* 36, +3.0dB */
  67. 0x5fc0017f, /* 37, +3.5dB */
  68. 0x65400195, /* 38, +4.0dB */
  69. 0x6b8001ae, /* 39, +4.5dB */
  70. 0x71c001c7, /* 40, +5.0dB */
  71. 0x788001e2, /* 41, +5.5dB */
  72. 0x7f8001fe /* 42, +6.0dB */
  73. };
  74. u8 cck_swing_table_ch1_ch13_new[CCK_TABLE_SIZE][8] = {
  75. {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}, /* 0, -16.0dB */
  76. {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, /* 1, -15.5dB */
  77. {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 2, -15.0dB */
  78. {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 3, -14.5dB */
  79. {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 4, -14.0dB */
  80. {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 5, -13.5dB */
  81. {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, /* 6, -13.0dB */
  82. {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, /* 7, -12.5dB */
  83. {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, /* 8, -12.0dB */
  84. {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, /* 9, -11.5dB */
  85. {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 10, -11.0dB */
  86. {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 11, -10.5dB */
  87. {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 12, -10.0dB */
  88. {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 13, -9.5dB */
  89. {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, /* 14, -9.0dB */
  90. {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, /* 15, -8.5dB */
  91. {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, /* 16, -8.0dB */
  92. {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, /* 17, -7.5dB */
  93. {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, /* 18, -7.0dB */
  94. {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, /* 19, -6.5dB */
  95. {0x1c, 0x1a, 0x18, 0x12, 0x0e, 0x08, 0x04, 0x02}, /* 20, -6.0dB */
  96. {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, /* 21, -5.5dB */
  97. {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, /* 22, -5.0dB */
  98. {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, /* 23, -4.5dB */
  99. {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, /* 24, -4.0dB */
  100. {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, /* 25, -3.5dB */
  101. {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, /* 26, -3.0dB */
  102. {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, /* 27, -2.5dB */
  103. {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, /* 28, -2.0dB */
  104. {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, /* 29, -1.5dB */
  105. {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, /* 30, -1.0dB */
  106. {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, /* 31, -0.5dB */
  107. {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04} /* 32, +0dB */
  108. };
  109. u8 cck_swing_table_ch14_new[CCK_TABLE_SIZE][8] = {
  110. {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00}, /* 0, -16.0dB */
  111. {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 1, -15.5dB */
  112. {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 2, -15.0dB */
  113. {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 3, -14.5dB */
  114. {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 4, -14.0dB */
  115. {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 5, -13.5dB */
  116. {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 6, -13.0dB */
  117. {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 7, -12.5dB */
  118. {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 8, -12.0dB */
  119. {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 9, -11.5dB */
  120. {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 10, -11.0dB */
  121. {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 11, -10.5dB */
  122. {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 12, -10.0dB */
  123. {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 13, -9.5dB */
  124. {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 14, -9.0dB */
  125. {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 15, -8.5dB */
  126. {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 16, -8.0dB */
  127. {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 17, -7.5dB */
  128. {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, /* 18, -7.0dB */
  129. {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, /* 19, -6.5dB */
  130. {0x1c, 0x1a, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 20, -6.0dB */
  131. {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 21, -5.5dB */
  132. {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, /* 22, -5.0dB */
  133. {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, /* 23, -4.5dB */
  134. {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, /* 24, -4.0dB */
  135. {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, /* 25, -3.5dB */
  136. {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, /* 26, -3.0dB */
  137. {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, /* 27, -2.5dB */
  138. {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, /* 28, -2.0dB */
  139. {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, /* 29, -1.5dB */
  140. {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, /* 30, -1.0dB */
  141. {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, /* 31, -0.5dB */
  142. {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00} /* 32, +0dB */
  143. };
  144. u32 ofdm_swing_table[OFDM_TABLE_SIZE_92D] = {
  145. 0x0b40002d, /* 0, -15.0dB */
  146. 0x0c000030, /* 1, -14.5dB */
  147. 0x0cc00033, /* 2, -14.0dB */
  148. 0x0d800036, /* 3, -13.5dB */
  149. 0x0e400039, /* 4, -13.0dB */
  150. 0x0f00003c, /* 5, -12.5dB */
  151. 0x10000040, /* 6, -12.0dB */
  152. 0x11000044, /* 7, -11.5dB */
  153. 0x12000048, /* 8, -11.0dB */
  154. 0x1300004c, /* 9, -10.5dB */
  155. 0x14400051, /* 10, -10.0dB */
  156. 0x15800056, /* 11, -9.5dB */
  157. 0x16c0005b, /* 12, -9.0dB */
  158. 0x18000060, /* 13, -8.5dB */
  159. 0x19800066, /* 14, -8.0dB */
  160. 0x1b00006c, /* 15, -7.5dB */
  161. 0x1c800072, /* 16, -7.0dB */
  162. 0x1e400079, /* 17, -6.5dB */
  163. 0x20000080, /* 18, -6.0dB */
  164. 0x22000088, /* 19, -5.5dB */
  165. 0x24000090, /* 20, -5.0dB */
  166. 0x26000098, /* 21, -4.5dB */
  167. 0x288000a2, /* 22, -4.0dB */
  168. 0x2ac000ab, /* 23, -3.5dB */
  169. 0x2d4000b5, /* 24, -3.0dB */
  170. 0x300000c0, /* 25, -2.5dB */
  171. 0x32c000cb, /* 26, -2.0dB */
  172. 0x35c000d7, /* 27, -1.5dB */
  173. 0x390000e4, /* 28, -1.0dB */
  174. 0x3c8000f2, /* 29, -0.5dB */
  175. 0x40000100, /* 30, +0dB */
  176. 0x43c0010f, /* 31, +0.5dB */
  177. 0x47c0011f, /* 32, +1.0dB */
  178. 0x4c000130, /* 33, +1.5dB */
  179. 0x50800142, /* 34, +2.0dB */
  180. 0x55400155, /* 35, +2.5dB */
  181. 0x5a400169, /* 36, +3.0dB */
  182. 0x5fc0017f, /* 37, +3.5dB */
  183. 0x65400195, /* 38, +4.0dB */
  184. 0x6b8001ae, /* 39, +4.5dB */
  185. 0x71c001c7, /* 40, +5.0dB */
  186. 0x788001e2, /* 41, +5.5dB */
  187. 0x7f8001fe /* 42, +6.0dB */
  188. };
  189. u8 cck_swing_table_ch1_ch13[CCK_TABLE_SIZE][8] = {
  190. {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}, /* 0, -16.0dB */
  191. {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, /* 1, -15.5dB */
  192. {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 2, -15.0dB */
  193. {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 3, -14.5dB */
  194. {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 4, -14.0dB */
  195. {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 5, -13.5dB */
  196. {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, /* 6, -13.0dB */
  197. {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, /* 7, -12.5dB */
  198. {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, /* 8, -12.0dB */
  199. {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, /* 9, -11.5dB */
  200. {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 10, -11.0dB */
  201. {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 11, -10.5dB */
  202. {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 12, -10.0dB */
  203. {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 13, -9.5dB */
  204. {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, /* 14, -9.0dB */
  205. {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, /* 15, -8.5dB */
  206. {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, /* 16, -8.0dB */
  207. {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, /* 17, -7.5dB */
  208. {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, /* 18, -7.0dB */
  209. {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, /* 19, -6.5dB */
  210. {0x1c, 0x1a, 0x18, 0x12, 0x0e, 0x08, 0x04, 0x02}, /* 20, -6.0dB */
  211. {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, /* 21, -5.5dB */
  212. {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, /* 22, -5.0dB */
  213. {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, /* 23, -4.5dB */
  214. {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, /* 24, -4.0dB */
  215. {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, /* 25, -3.5dB */
  216. {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, /* 26, -3.0dB */
  217. {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, /* 27, -2.5dB */
  218. {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, /* 28, -2.0dB */
  219. {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, /* 29, -1.5dB */
  220. {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, /* 30, -1.0dB */
  221. {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, /* 31, -0.5dB */
  222. {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04} /* 32, +0dB */
  223. };
  224. u8 cck_swing_table_ch14[CCK_TABLE_SIZE][8] = {
  225. {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00}, /* 0, -16.0dB */
  226. {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 1, -15.5dB */
  227. {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 2, -15.0dB */
  228. {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 3, -14.5dB */
  229. {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 4, -14.0dB */
  230. {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 5, -13.5dB */
  231. {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 6, -13.0dB */
  232. {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 7, -12.5dB */
  233. {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 8, -12.0dB */
  234. {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 9, -11.5dB */
  235. {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 10, -11.0dB */
  236. {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 11, -10.5dB */
  237. {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 12, -10.0dB */
  238. {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 13, -9.5dB */
  239. {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 14, -9.0dB */
  240. {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 15, -8.5dB */
  241. {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 16, -8.0dB */
  242. {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 17, -7.5dB */
  243. {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, /* 18, -7.0dB */
  244. {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, /* 19, -6.5dB */
  245. {0x1c, 0x1a, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 20, -6.0dB */
  246. {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 21, -5.5dB */
  247. {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, /* 22, -5.0dB */
  248. {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, /* 23, -4.5dB */
  249. {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, /* 24, -4.0dB */
  250. {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, /* 25, -3.5dB */
  251. {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, /* 26, -3.0dB */
  252. {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, /* 27, -2.5dB */
  253. {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, /* 28, -2.0dB */
  254. {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, /* 29, -1.5dB */
  255. {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, /* 30, -1.0dB */
  256. {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, /* 31, -0.5dB */
  257. {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00} /* 32, +0dB */
  258. };
  259. u8 cck_swing_table_ch1_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
  260. {0x16, 0x15, 0x13, 0x10, 0xD, 0x9, 0x6, 0x3, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 0 -16dB */
  261. {0x18, 0x17, 0x15, 0x12, 0xE, 0xA, 0x7, 0x4, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 1 -15.5dB */
  262. {0x1B, 0x1A, 0x18, 0x14, 0x10, 0xB, 0x7, 0x4, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 2 -15dB */
  263. {0x1F, 0x1E, 0x1B, 0x17, 0x12, 0xD, 0x8, 0x5, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 3 -14.5dB */
  264. {0x22, 0x21, 0x1E, 0x19, 0x14, 0xE, 0x9, 0x5, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 4 -14dB */
  265. {0x26, 0x25, 0x22, 0x1C, 0x16, 0x10, 0xA, 0x6, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 5 -13.5dB */
  266. {0x2B, 0x2A, 0x26, 0x20, 0x19, 0x12, 0xC, 0x7, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 6 -13dB */
  267. {0x30, 0x2F, 0x2A, 0x24, 0x1C, 0x14, 0xD, 0x8, 0x4, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 7 -12.5dB */
  268. {0x36, 0x34, 0x2F, 0x28, 0x1F, 0x17, 0xF, 0x9, 0x4, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 8 -12dB */
  269. {0x3D, 0x3B, 0x35, 0x2D, 0x23, 0x19, 0x11, 0xA, 0x5, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 9 -11.5dB */
  270. {0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0xB, 0x5, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 10 -11dB */
  271. {0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0xC, 0x6, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 11 -10.5dB */
  272. {0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0xE, 0x6, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 12 -10dB */
  273. {0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0xF, 0x7, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 13 -9.5dB */
  274. {0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x8, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 14 -9dB */
  275. {0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x9, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 15 -8.5dB */
  276. {0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0xA, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 16 -8dB */
  277. {0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0xB, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 17 -7.5dB */
  278. {0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0xD, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 18 -7dB */
  279. {0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0xE, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 19 -6.5dB */
  280. {0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0} /* 20 -6dB */
  281. };
  282. u8 cck_swing_table_ch1_ch13_88f[CCK_TABLE_SIZE_88F][16] = {
  283. {0x16, 0x15, 0x13, 0x10, 0xD, 0x9, 0x6, 0x3, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 0 -16dB */
  284. {0x18, 0x17, 0x15, 0x12, 0xE, 0xA, 0x7, 0x4, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 1 -15.5dB */
  285. {0x1B, 0x1A, 0x18, 0x14, 0x10, 0xB, 0x7, 0x4, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 2 -15dB */
  286. {0x1F, 0x1E, 0x1B, 0x17, 0x12, 0xD, 0x8, 0x5, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 3 -14.5dB */
  287. {0x22, 0x21, 0x1E, 0x19, 0x14, 0xE, 0x9, 0x5, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 4 -14dB */
  288. {0x26, 0x25, 0x22, 0x1C, 0x16, 0x10, 0xA, 0x6, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 5 -13.5dB */
  289. {0x2B, 0x2A, 0x26, 0x20, 0x19, 0x12, 0xC, 0x7, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 6 -13dB */
  290. {0x30, 0x2F, 0x2A, 0x24, 0x1C, 0x14, 0xD, 0x8, 0x4, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 7 -12.5dB */
  291. {0x36, 0x34, 0x2F, 0x28, 0x1F, 0x17, 0xF, 0x9, 0x4, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 8 -12dB */
  292. {0x3D, 0x3B, 0x35, 0x2D, 0x23, 0x19, 0x11, 0xA, 0x5, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 9 -11.5dB */
  293. {0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0xB, 0x5, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 10 -11dB */
  294. {0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0xC, 0x6, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 11 -10.5dB */
  295. {0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0xE, 0x6, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 12 -10dB */
  296. {0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0xF, 0x7, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 13 -9.5dB */
  297. {0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x8, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 14 -9dB */
  298. {0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x9, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 15 -8.5dB */
  299. {0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0xA, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 16 -8dB */
  300. {0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0xB, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 17 -7.5dB */
  301. {0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0xD, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 18 -7dB */
  302. {0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0xE, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* 19 -6.5dB */
  303. {0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0} /* 20 -6dB */
  304. };
  305. u8 cck_swing_table_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
  306. {0x44, 0x42, 0x3C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-16dB*/
  307. {0x48, 0x46, 0x3F, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15.5dB*/
  308. {0x4D, 0x4A, 0x43, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15dB*/
  309. {0x51, 0x4F, 0x47, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14.5dB*/
  310. {0x56, 0x53, 0x4B, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14dB*/
  311. {0x5B, 0x58, 0x50, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13.5dB*/
  312. {0x60, 0x5D, 0x54, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13dB*/
  313. {0x66, 0x63, 0x59, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12.5dB*/
  314. {0x6C, 0x69, 0x5F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12dB*/
  315. {0x73, 0x6F, 0x64, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11.5dB*/
  316. {0x79, 0x76, 0x6A, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11dB*/
  317. {0x81, 0x7C, 0x71, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10.5dB*/
  318. {0x88, 0x84, 0x77, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10dB*/
  319. {0x90, 0x8C, 0x7E, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9.5dB*/
  320. {0x99, 0x94, 0x86, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9dB*/
  321. {0xA2, 0x9D, 0x8E, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8.5dB*/
  322. {0xAC, 0xA6, 0x96, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8dB*/
  323. {0xB6, 0xB0, 0x9F, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7.5dB*/
  324. {0xC1, 0xBA, 0xA8, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7dB*/
  325. {0xCC, 0xC5, 0xB2, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-6.5dB*/
  326. {0xD8, 0xD1, 0xBD, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} /*-6dB*/
  327. };
  328. #if 0
  329. u32 ofdm_swing_table_92e[OFDM_TABLE_SIZE_92E] = {
  330. /* Index0 6 dB */ 0x7fc001ff,
  331. /* Index1 5.7dB */ 0x7b4001ed,
  332. /* Index2 5.4dB */ 0x774001dd,
  333. /* Index3 5.1dB */ 0x734001cd,
  334. /* Index4 4.8dB */ 0x6f4001bd,
  335. /* Index5 4.5dB */ 0x6b8001ae,
  336. /* Index6 4.2dB */ 0x67c0019f,
  337. /* Index7 3.9dB */ 0x64400191,
  338. /* Index8 3.6dB */ 0x60c00183,
  339. /* Index9 3.3dB */ 0x5d800176,
  340. /* Index10 3 dB */ 0x5a80016a,
  341. /* Index11 2.7dB */ 0x5740015d,
  342. /* Index12 2.4dB */ 0x54400151,
  343. /* Index13 2.1dB */ 0x51800146,
  344. /* Index14 1.8dB */ 0x4ec0013b,
  345. /* Index15 1.5dB */ 0x4c000130,
  346. /* Index16 1.2dB */ 0x49800126,
  347. /* Index17 0.9dB */ 0x4700011c,
  348. /* Index18 0.6dB */ 0x44800112,
  349. /* Index19 0.3dB */ 0x42000108,
  350. /* Index20 0 dB */ 0x40000100, /* 20 This is OFDM base index */
  351. /* Index21 -0.3dB */ 0x3dc000f7,
  352. /* Index22 -0.6dB */ 0x3bc000ef,
  353. /* Index23 -0.9dB */ 0x39c000e7,
  354. /* Index24 -1.2dB */ 0x37c000df,
  355. /* Index25 -1.5dB */ 0x35c000d7,
  356. /* Index26 -1.8dB */ 0x340000d0,
  357. /* Index27 -2.1dB */ 0x324000c9,
  358. /* Index28 -2.4dB */ 0x308000c2,
  359. /* Index29 -2.7dB */ 0x2f0000bc,
  360. /* Index30 -3 dB */ 0x2d4000b5,
  361. /* Index31 -3.3dB */ 0x2bc000af,
  362. /* Index32 -3.6dB */ 0x2a4000a9,
  363. /* Index33 -3.9dB */ 0x28c000a3,
  364. /* Index34 -4.2dB */ 0x2780009e,
  365. /* Index35 -4.5dB */ 0x26000098,
  366. /* Index36 -4.8dB */ 0x24c00093,
  367. /* Index37 -5.1dB */ 0x2380008e,
  368. /* Index38 -5.4dB */ 0x22400089,
  369. /* Index39 -5.7dB */ 0x21400085,
  370. /* Index40 -6 dB */ 0x20000080,
  371. /* Index41 -6.3dB */ 0x1f00007c,
  372. /* Index42 -6.6dB */ 0x1e000078,
  373. /* Index43 -6.9dB */ 0x1d000074,
  374. /* Index44 -7.2dB */ 0x1c000070,
  375. /* Index45 -7.5dB */ 0x1b00006c,
  376. /* Index46 -7.8dB */ 0x1a000068,
  377. /* Index47 -8.1dB */ 0x19400065,
  378. /* Index48 -8.4dB */ 0x18400061,
  379. /* Index49 -8.7dB */ 0x1780005e,
  380. /* Index50 -9 dB */ 0x16c0005b,
  381. /* Index51 -9.3dB */ 0x16000058,
  382. /* Index52 -9.6dB */ 0x15400055,
  383. /* Index53 -9.9dB */ 0x14800052
  384. };
  385. u8 cck_swing_table_ch1_ch13_92e[CCK_TABLE_SIZE_92E][8] = {
  386. /* Index0 0 dB */ {0x36, 0x34, 0x2E, 0x26, 0x1C, 0x12, 0x08, 0x04},
  387. /* Index1 -0.3dB */ {0x34, 0x32, 0x2C, 0x25, 0x1B, 0x11, 0x08, 0x04},
  388. /* Index2 -0.6dB */ {0x32, 0x30, 0x2B, 0x23, 0x1A, 0x11, 0x07, 0x04},
  389. /* Index3 -0.9dB */ {0x31, 0x2F, 0x29, 0x22, 0x19, 0x10, 0x07, 0x04},
  390. /* Index4 -1.2dB */ {0x2F, 0x2D, 0x28, 0x21, 0x18, 0x10, 0x07, 0x03},
  391. /* Index5 -1.5dB */ {0x2D, 0x2C, 0x27, 0x20, 0x18, 0x0F, 0x07, 0x03},
  392. /* Index6 -1.8dB */ {0x2C, 0x2A, 0x25, 0x1F, 0x17, 0x0F, 0x06, 0x03},
  393. /* Index7 -2.1dB */ {0x2A, 0x29, 0x24, 0x1E, 0x16, 0x0E, 0x06, 0x03},
  394. /* Index8 -2.4dB */ {0x29, 0x27, 0x23, 0x1D, 0x15, 0x0E, 0x06, 0x03},
  395. /* Index9 -2.7dB */ {0x27, 0x26, 0x22, 0x1C, 0x14, 0x0D, 0x06, 0x03},
  396. /* Index10 -3 dB */ {0x26, 0x25, 0x20, 0x1B, 0x14, 0x0D, 0x06, 0x03},
  397. /* Index11 -3.3dB */ {0x25, 0x23, 0x1F, 0x1A, 0x13, 0x0C, 0x05, 0x03},
  398. /* Index12 -3.6dB */ {0x24, 0x22, 0x1E, 0x19, 0x12, 0x0C, 0x05, 0x03},
  399. /* Index13 -3.9dB */ {0x22, 0x21, 0x1D, 0x18, 0x12, 0x0B, 0x05, 0x03},
  400. /* Index14 -4.2dB */ {0x21, 0x20, 0x1C, 0x17, 0x11, 0x0B, 0x05, 0x02},
  401. /* Index15 -4.5dB */ {0x20, 0x1F, 0x1B, 0x17, 0x11, 0x0B, 0x05, 0x02},
  402. /* Index16 -4.8dB */ {0x1F, 0x1E, 0x1A, 0x16, 0x10, 0x0A, 0x05, 0x02},
  403. /* Index17 -5.1dB */ {0x1E, 0x1D, 0x1A, 0x15, 0x10, 0x0A, 0x04, 0x02},
  404. /* Index18 -5.4dB */ {0x1D, 0x1C, 0x19, 0x14, 0x0F, 0x0A, 0x04, 0x02},
  405. /* Index19 -5.7dB */ {0x1C, 0x1B, 0x18, 0x14, 0x0E, 0x09, 0x04, 0x02},
  406. /* Index20 -6.0dB */ {0x1B, 0x1A, 0x17, 0x13, 0x0E, 0x09, 0x04, 0x02}, /* 20 This is CCK base index */
  407. /* Index21 -6.3dB */ {0x1A, 0x19, 0x16, 0x12, 0x0E, 0x09, 0x04, 0x02},
  408. /* Index22 -6.6dB */ {0x19, 0x18, 0x15, 0x12, 0x0D, 0x08, 0x04, 0x02},
  409. /* Index23 -6.9dB */ {0x18, 0x17, 0x15, 0x11, 0x0D, 0x08, 0x04, 0x02},
  410. /* Index24 -7.2dB */ {0x18, 0x17, 0x14, 0x11, 0x0C, 0x08, 0x03, 0x02},
  411. /* Index25 -7.5dB */ {0x17, 0x16, 0x13, 0x10, 0x0C, 0x08, 0x03, 0x02},
  412. /* Index26 -7.8dB */ {0x16, 0x15, 0x13, 0x0F, 0x0B, 0x07, 0x03, 0x02},
  413. /* Index27 -8.1dB */ {0x15, 0x14, 0x12, 0x0F, 0x0B, 0x07, 0x03, 0x02},
  414. /* Index28 -8.4dB */ {0x14, 0x14, 0x11, 0x0E, 0x0B, 0x07, 0x03, 0x02},
  415. /* Index29 -8.7dB */ {0x14, 0x13, 0x11, 0x0E, 0x0A, 0x07, 0x03, 0x01},
  416. /* Index30 -9.0dB */ {0x13, 0x12, 0x10, 0x0D, 0x0A, 0x06, 0x03, 0x01}, /* 30 This is hp CCK base index */
  417. /* Index31 -9.3dB */ {0x12, 0x12, 0x0F, 0x0D, 0x0A, 0x06, 0x03, 0x01},
  418. /* Index32 -9.6dB */ {0x12, 0x11, 0x0F, 0x0D, 0x09, 0x06, 0x03, 0x01},
  419. /* Index33 -9.9dB */ {0x11, 0x11, 0x0F, 0x0C, 0x09, 0x06, 0x03, 0x01},
  420. /* Index34 -10.2dB */ {0x11, 0x11, 0x0E, 0x0C, 0x09, 0x06, 0x02, 0x01},
  421. /* Index35 -10.5dB */ {0x10, 0x0F, 0x0E, 0x0B, 0x08, 0x05, 0x02, 0x01},
  422. /* Index36 -10.8dB */ {0x10, 0x0F, 0x0D, 0x0B, 0x08, 0x05, 0x02, 0x01},
  423. /* Index37 -11.1dB */ {0x0F, 0x0E, 0x0D, 0x0A, 0x08, 0x05, 0x02, 0x01},
  424. /* Index38 -11.4dB */ {0x0E, 0x0E, 0x0C, 0x0A, 0x07, 0x05, 0x02, 0x01},
  425. /* Index39 -11.7dB */ {0x0E, 0x0D, 0x0C, 0x0A, 0x07, 0x05, 0x02, 0x01},
  426. /* Index40 -12 dB */ {0x0E, 0x0D, 0x0C, 0x0A, 0x07, 0x05, 0x02, 0x01},
  427. /* Index41 -12.3dB */ {0x0D, 0x0D, 0x0B, 0x09, 0x07, 0x04, 0x02, 0x01},
  428. /* Index42 -12.6dB */ {0x0D, 0x0C, 0x0B, 0x09, 0x07, 0x04, 0x02, 0x01},
  429. /* Index43 -12.9dB */ {0x0C, 0x0C, 0x0A, 0x09, 0x06, 0x04, 0x02, 0x01},
  430. /* Index44 -13.2dB */ {0x0C, 0x0B, 0x0A, 0x08, 0x06, 0x04, 0x02, 0x01},
  431. /* Index45 -13.5dB */ {0x0B, 0x0B, 0x0A, 0x08, 0x06, 0x04, 0x02, 0x01},
  432. /* Index46 -13.8dB */ {0x0B, 0x0B, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},
  433. /* Index47 -14.1dB */ {0x0B, 0x0A, 0x09, 0x07, 0x06, 0x04, 0x02, 0x01},
  434. /* Index48 -14.4dB */ {0x0A, 0x0A, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},
  435. /* Index49 -14.7dB */ {0x0A, 0x0A, 0x08, 0x07, 0x05, 0x03, 0x01, 0x01},
  436. /* Index50 -15 dB */ {0x0A, 0x09, 0x08, 0x07, 0x05, 0x03, 0x01, 0x01},
  437. /* Index51 -15.3dB */ {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},
  438. /* Index52 -15.6dB */ {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},
  439. /* Index53 -15.9dB */ {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}
  440. };
  441. u8 cck_swing_table_ch14_92e[CCK_TABLE_SIZE_92E][8] = {
  442. /* Index0 0 dB */ {0x36, 0x34, 0x2E, 0x26, 0x00, 0x00, 0x00, 0x00},
  443. /* Index1 -0.3dB */ {0x34, 0x32, 0x2C, 0x25, 0x00, 0x00, 0x00, 0x00},
  444. /* Index2 -0.6dB */ {0x32, 0x30, 0x2B, 0x23, 0x00, 0x00, 0x00, 0x00},
  445. /* Index3 -0.9dB */ {0x31, 0x2F, 0x29, 0x22, 0x00, 0x00, 0x00, 0x00},
  446. /* Index4 -1.2dB */ {0x2F, 0x2D, 0x28, 0x21, 0x00, 0x00, 0x00, 0x00},
  447. /* Index5 -1.5dB */ {0x2D, 0x2C, 0x27, 0x20, 0x00, 0x00, 0x00, 0x00},
  448. /* Index6 -1.8dB */ {0x2C, 0x2A, 0x25, 0x1F, 0x00, 0x00, 0x00, 0x00},
  449. /* Index7 -2.1dB */ {0x2A, 0x29, 0x24, 0x1E, 0x00, 0x00, 0x00, 0x00},
  450. /* Index8 -2.4dB */ {0x29, 0x27, 0x23, 0x1D, 0x00, 0x00, 0x00, 0x00},
  451. /* Index9 -2.7dB */ {0x27, 0x26, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00},
  452. /* Index10 -3 dB */ {0x26, 0x25, 0x20, 0x1B, 0x00, 0x00, 0x00, 0x00},
  453. /* Index11 -3.3dB */ {0x25, 0x23, 0x1F, 0x1A, 0x00, 0x00, 0x00, 0x00},
  454. /* Index12 -3.6dB */ {0x24, 0x22, 0x1E, 0x19, 0x00, 0x00, 0x00, 0x00},
  455. /* Index13 -3.9dB */ {0x22, 0x21, 0x1D, 0x18, 0x00, 0x00, 0x00, 0x00},
  456. /* Index14 -4.2dB */ {0x21, 0x20, 0x1C, 0x17, 0x00, 0x00, 0x00, 0x00},
  457. /* Index15 -4.5dB */ {0x20, 0x1F, 0x1B, 0x17, 0x00, 0x00, 0x00, 0x00},
  458. /* Index16 -4.8dB */ {0x1F, 0x1E, 0x1A, 0x16, 0x00, 0x00, 0x00, 0x00},
  459. /* Index17 -5.1dB */ {0x1E, 0x1D, 0x1A, 0x15, 0x00, 0x00, 0x00, 0x00},
  460. /* Index18 -5.4dB */ {0x1D, 0x1C, 0x19, 0x14, 0x00, 0x00, 0x00, 0x00},
  461. /* Index19 -5.7dB */ {0x1C, 0x1B, 0x18, 0x14, 0x00, 0x00, 0x00, 0x00},
  462. /* Index20 -6 dB */ {0x1B, 0x1A, 0x17, 0x13, 0x00, 0x00, 0x00, 0x00},
  463. /* Index21 -6.3dB */ {0x1A, 0x19, 0x16, 0x12, 0x00, 0x00, 0x00, 0x00},
  464. /* Index22 -6.6dB */ {0x19, 0x18, 0x15, 0x12, 0x00, 0x00, 0x00, 0x00},
  465. /* Index23 -6.9dB */ {0x18, 0x17, 0x15, 0x11, 0x00, 0x00, 0x00, 0x00},
  466. /* Index24 -7.2dB */ {0x18, 0x17, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00},
  467. /* Index25 -7.5dB */ {0x17, 0x16, 0x13, 0x10, 0x00, 0x00, 0x00, 0x00},
  468. /* Index26 -7.8dB */ {0x16, 0x15, 0x13, 0x0F, 0x00, 0x00, 0x00, 0x00},
  469. /* Index27 -8.1dB */ {0x15, 0x14, 0x12, 0x0F, 0x00, 0x00, 0x00, 0x00},
  470. /* Index28 -8.4dB */ {0x14, 0x14, 0x11, 0x0E, 0x00, 0x00, 0x00, 0x00},
  471. /* Index29 -8.7dB */ {0x14, 0x13, 0x11, 0x0E, 0x00, 0x00, 0x00, 0x00},
  472. /* Index30 -9 dB */ {0x13, 0x12, 0x10, 0x0D, 0x00, 0x00, 0x00, 0x00},
  473. /* Index31 -9.3dB */ {0x12, 0x12, 0x0F, 0x0D, 0x00, 0x00, 0x00, 0x00},
  474. /* Index32 -9.6dB */ {0x12, 0x11, 0x0F, 0x0D, 0x00, 0x00, 0x00, 0x00},
  475. /* Index33 -9.9dB */ {0x11, 0x11, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x00},
  476. /* Index34 -10.2dB */ {0x11, 0x11, 0x0E, 0x0C, 0x00, 0x00, 0x00, 0x00},
  477. /* Index35 -10.5dB */ {0x10, 0x0F, 0x0E, 0x0B, 0x00, 0x00, 0x00, 0x00},
  478. /* Index36 -10.8dB */ {0x10, 0x0F, 0x0D, 0x0B, 0x00, 0x00, 0x00, 0x00},
  479. /* Index37 -11.1dB */ {0x0F, 0x0E, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x00},
  480. /* Index38 -11.4dB */ {0x0E, 0x0E, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00},
  481. /* Index39 -11.7dB */ {0x0E, 0x0D, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00},
  482. /* Index40 -12 dB */ {0x0E, 0x0D, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00},
  483. /* Index41 -12.3dB */ {0x0D, 0x0D, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00},
  484. /* Index42 -12.6dB */ {0x0D, 0x0C, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00},
  485. /* Index43 -12.9dB */ {0x0C, 0x0C, 0x0A, 0x09, 0x00, 0x00, 0x00, 0x00},
  486. /* Index44 -13.2dB */ {0x0C, 0x0B, 0x0A, 0x08, 0x00, 0x00, 0x00, 0x00},
  487. /* Index45 -13.5dB */ {0x0B, 0x0B, 0x0A, 0x08, 0x00, 0x00, 0x00, 0x00},
  488. /* Index46 -13.8dB */ {0x0B, 0x0B, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00},
  489. /* Index47 -14.1dB */ {0x0B, 0x0A, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00},
  490. /* Index48 -14.4dB */ {0x0A, 0x0A, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00},
  491. /* Index49 -14.7dB */ {0x0A, 0x0A, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00},
  492. /* Index50 -15 dB */ {0x0A, 0x09, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00},
  493. /* Index51 -15.3dB */ {0x09, 0x09, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00},
  494. /* Index52 -15.6dB */ {0x09, 0x09, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00},
  495. /* Index53 -15.9dB */ {0x09, 0x08, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00}
  496. };
  497. #endif
  498. #ifdef AP_BUILD_WORKAROUND
  499. unsigned int tx_pwr_trk_ofdm_swing_tbl[tx_pwr_trk_ofdm_swing_tbl_len] = {
  500. /* +6.0dB */ 0x7f8001fe,
  501. /* +5.5dB */ 0x788001e2,
  502. /* +5.0dB */ 0x71c001c7,
  503. /* +4.5dB */ 0x6b8001ae,
  504. /* +4.0dB */ 0x65400195,
  505. /* +3.5dB */ 0x5fc0017f,
  506. /* +3.0dB */ 0x5a400169,
  507. /* +2.5dB */ 0x55400155,
  508. /* +2.0dB */ 0x50800142,
  509. /* +1.5dB */ 0x4c000130,
  510. /* +1.0dB */ 0x47c0011f,
  511. /* +0.5dB */ 0x43c0010f,
  512. /* 0.0dB */ 0x40000100,
  513. /* -0.5dB */ 0x3c8000f2,
  514. /* -1.0dB */ 0x390000e4,
  515. /* -1.5dB */ 0x35c000d7,
  516. /* -2.0dB */ 0x32c000cb,
  517. /* -2.5dB */ 0x300000c0,
  518. /* -3.0dB */ 0x2d4000b5,
  519. /* -3.5dB */ 0x2ac000ab,
  520. /* -4.0dB */ 0x288000a2,
  521. /* -4.5dB */ 0x26000098,
  522. /* -5.0dB */ 0x24000090,
  523. /* -5.5dB */ 0x22000088,
  524. /* -6.0dB */ 0x20000080,
  525. /* -6.5dB */ 0x1a00006c,
  526. /* -7.0dB */ 0x1c800072,
  527. /* -7.5dB */ 0x18000060,
  528. /* -8.0dB */ 0x19800066,
  529. /* -8.5dB */ 0x15800056,
  530. /* -9.0dB */ 0x26c0005b,
  531. /* -9.5dB */ 0x14400051,
  532. /* -10.0dB */ 0x24400051,
  533. /* -10.5dB */ 0x1300004c,
  534. /* -11.0dB */ 0x12000048,
  535. /* -11.5dB */ 0x11000044,
  536. /* -12.0dB */ 0x10000040
  537. };
  538. #endif
  539. #endif
  540. u8 delta_swing_table_idx_2ga_p_default[DELTA_SWINGIDX_SIZE] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3
  541. , 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9
  542. };
  543. u8 delta_swing_table_idx_2ga_n_default[DELTA_SWINGIDX_SIZE] = {0, 0, 0, 2, 2, 3, 3, 4, 4, 4
  544. , 4, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11
  545. };
  546. #ifdef CONFIG_WLAN_HAL_8192EE
  547. u32 ofdm_swing_table_92e[OFDM_TABLE_SIZE_92E] = {
  548. /* Index0 6 dB */ 0x7fc001ff,
  549. /* Index1 5.7dB */ 0x7b4001ed,
  550. /* Index2 5.4dB */ 0x774001dd,
  551. /* Index3 5.1dB */ 0x734001cd,
  552. /* Index4 4.8dB */ 0x6f4001bd,
  553. /* Index5 4.5dB */ 0x6b8001ae,
  554. /* Index6 4.2dB */ 0x67c0019f,
  555. /* Index7 3.9dB */ 0x64400191,
  556. /* Index8 3.6dB */ 0x60c00183,
  557. /* Index9 3.3dB */ 0x5d800176,
  558. /* Index10 3 dB */ 0x5a80016a,
  559. /* Index11 2.7dB */ 0x5740015d,
  560. /* Index12 2.4dB */ 0x54400151,
  561. /* Index13 2.1dB */ 0x51800146,
  562. /* Index14 1.8dB */ 0x4ec0013b,
  563. /* Index15 1.5dB */ 0x4c000130,
  564. /* Index16 1.2dB */ 0x49800126,
  565. /* Index17 0.9dB */ 0x4700011c,
  566. /* Index18 0.6dB */ 0x44800112,
  567. /* Index19 0.3dB */ 0x42000108,
  568. /* Index20 0 dB */ 0x40000100, /* 20 This is OFDM base index */
  569. /* Index21 -0.3dB */ 0x3dc000f7,
  570. /* Index22 -0.6dB */ 0x3bc000ef,
  571. /* Index23 -0.9dB */ 0x39c000e7,
  572. /* Index24 -1.2dB */ 0x37c000df,
  573. /* Index25 -1.5dB */ 0x35c000d7,
  574. /* Index26 -1.8dB */ 0x340000d0,
  575. /* Index27 -2.1dB */ 0x324000c9,
  576. /* Index28 -2.4dB */ 0x308000c2,
  577. /* Index29 -2.7dB */ 0x2f0000bc,
  578. /* Index30 -3 dB */ 0x2d4000b5,
  579. /* Index31 -3.3dB */ 0x2bc000af,
  580. /* Index32 -3.6dB */ 0x2a4000a9,
  581. /* Index33 -3.9dB */ 0x28c000a3,
  582. /* Index34 -4.2dB */ 0x2780009e,
  583. /* Index35 -4.5dB */ 0x26000098,
  584. /* Index36 -4.8dB */ 0x24c00093,
  585. /* Index37 -5.1dB */ 0x2380008e,
  586. /* Index38 -5.4dB */ 0x22400089,
  587. /* Index39 -5.7dB */ 0x21400085,
  588. /* Index40 -6 dB */ 0x20000080,
  589. /* Index41 -6.3dB */ 0x1f00007c,
  590. /* Index42 -6.6dB */ 0x1e000078,
  591. /* Index43 -6.9dB */ 0x1d000074,
  592. /* Index44 -7.2dB */ 0x1c000070,
  593. /* Index45 -7.5dB */ 0x1b00006c,
  594. /* Index46 -7.8dB */ 0x1a000068,
  595. /* Index47 -8.1dB */ 0x19400065,
  596. /* Index48 -8.4dB */ 0x18400061,
  597. /* Index49 -8.7dB */ 0x1780005e,
  598. /* Index50 -9 dB */ 0x16c0005b,
  599. /* Index51 -9.3dB */ 0x16000058,
  600. /* Index52 -9.6dB */ 0x15400055,
  601. /* Index53 -9.9dB */ 0x14800052
  602. };
  603. u8 cck_swing_table_ch1_ch13_92e[CCK_TABLE_SIZE_92E][8] = {
  604. /* Index0 0 dB */ {0x36, 0x34, 0x2E, 0x26, 0x1C, 0x12, 0x08, 0x04},
  605. /* Index1 -0.3dB */ {0x34, 0x32, 0x2C, 0x25, 0x1B, 0x11, 0x08, 0x04},
  606. /* Index2 -0.6dB */ {0x32, 0x30, 0x2B, 0x23, 0x1A, 0x11, 0x07, 0x04},
  607. /* Index3 -0.9dB */ {0x31, 0x2F, 0x29, 0x22, 0x19, 0x10, 0x07, 0x04},
  608. /* Index4 -1.2dB */ {0x2F, 0x2D, 0x28, 0x21, 0x18, 0x10, 0x07, 0x03},
  609. /* Index5 -1.5dB */ {0x2D, 0x2C, 0x27, 0x20, 0x18, 0x0F, 0x07, 0x03},
  610. /* Index6 -1.8dB */ {0x2C, 0x2A, 0x25, 0x1F, 0x17, 0x0F, 0x06, 0x03},
  611. /* Index7 -2.1dB */ {0x2A, 0x29, 0x24, 0x1E, 0x16, 0x0E, 0x06, 0x03},
  612. /* Index8 -2.4dB */ {0x29, 0x27, 0x23, 0x1D, 0x15, 0x0E, 0x06, 0x03},
  613. /* Index9 -2.7dB */ {0x27, 0x26, 0x22, 0x1C, 0x14, 0x0D, 0x06, 0x03},
  614. /* Index10 -3 dB */ {0x26, 0x25, 0x20, 0x1B, 0x14, 0x0D, 0x06, 0x03},
  615. /* Index11 -3.3dB */ {0x25, 0x23, 0x1F, 0x1A, 0x13, 0x0C, 0x05, 0x03},
  616. /* Index12 -3.6dB */ {0x24, 0x22, 0x1E, 0x19, 0x12, 0x0C, 0x05, 0x03},
  617. /* Index13 -3.9dB */ {0x22, 0x21, 0x1D, 0x18, 0x12, 0x0B, 0x05, 0x03},
  618. /* Index14 -4.2dB */ {0x21, 0x20, 0x1C, 0x17, 0x11, 0x0B, 0x05, 0x02},
  619. /* Index15 -4.5dB */ {0x20, 0x1F, 0x1B, 0x17, 0x11, 0x0B, 0x05, 0x02},
  620. /* Index16 -4.8dB */ {0x1F, 0x1E, 0x1A, 0x16, 0x10, 0x0A, 0x05, 0x02},
  621. /* Index17 -5.1dB */ {0x1E, 0x1D, 0x1A, 0x15, 0x10, 0x0A, 0x04, 0x02},
  622. /* Index18 -5.4dB */ {0x1D, 0x1C, 0x19, 0x14, 0x0F, 0x0A, 0x04, 0x02},
  623. /* Index19 -5.7dB */ {0x1C, 0x1B, 0x18, 0x14, 0x0E, 0x09, 0x04, 0x02},
  624. /* Index20 -6.0dB */ {0x1B, 0x1A, 0x17, 0x13, 0x0E, 0x09, 0x04, 0x02}, /* 20 This is CCK base index */
  625. /* Index21 -6.3dB */ {0x1A, 0x19, 0x16, 0x12, 0x0E, 0x09, 0x04, 0x02},
  626. /* Index22 -6.6dB */ {0x19, 0x18, 0x15, 0x12, 0x0D, 0x08, 0x04, 0x02},
  627. /* Index23 -6.9dB */ {0x18, 0x17, 0x15, 0x11, 0x0D, 0x08, 0x04, 0x02},
  628. /* Index24 -7.2dB */ {0x18, 0x17, 0x14, 0x11, 0x0C, 0x08, 0x03, 0x02},
  629. /* Index25 -7.5dB */ {0x17, 0x16, 0x13, 0x10, 0x0C, 0x08, 0x03, 0x02},
  630. /* Index26 -7.8dB */ {0x16, 0x15, 0x13, 0x0F, 0x0B, 0x07, 0x03, 0x02},
  631. /* Index27 -8.1dB */ {0x15, 0x14, 0x12, 0x0F, 0x0B, 0x07, 0x03, 0x02},
  632. /* Index28 -8.4dB */ {0x14, 0x14, 0x11, 0x0E, 0x0B, 0x07, 0x03, 0x02},
  633. /* Index29 -8.7dB */ {0x14, 0x13, 0x11, 0x0E, 0x0A, 0x07, 0x03, 0x01},
  634. /* Index30 -9.0dB */ {0x13, 0x12, 0x10, 0x0D, 0x0A, 0x06, 0x03, 0x01}, /* 30 This is hp CCK base index */
  635. /* Index31 -9.3dB */ {0x12, 0x12, 0x0F, 0x0D, 0x0A, 0x06, 0x03, 0x01},
  636. /* Index32 -9.6dB */ {0x12, 0x11, 0x0F, 0x0D, 0x09, 0x06, 0x03, 0x01},
  637. /* Index33 -9.9dB */ {0x11, 0x11, 0x0F, 0x0C, 0x09, 0x06, 0x03, 0x01},
  638. /* Index34 -10.2dB */ {0x11, 0x11, 0x0E, 0x0C, 0x09, 0x06, 0x02, 0x01},
  639. /* Index35 -10.5dB */ {0x10, 0x0F, 0x0E, 0x0B, 0x08, 0x05, 0x02, 0x01},
  640. /* Index36 -10.8dB */ {0x10, 0x0F, 0x0D, 0x0B, 0x08, 0x05, 0x02, 0x01},
  641. /* Index37 -11.1dB */ {0x0F, 0x0E, 0x0D, 0x0A, 0x08, 0x05, 0x02, 0x01},
  642. /* Index38 -11.4dB */ {0x0E, 0x0E, 0x0C, 0x0A, 0x07, 0x05, 0x02, 0x01},
  643. /* Index39 -11.7dB */ {0x0E, 0x0D, 0x0C, 0x0A, 0x07, 0x05, 0x02, 0x01},
  644. /* Index40 -12 dB */ {0x0E, 0x0D, 0x0C, 0x0A, 0x07, 0x05, 0x02, 0x01},
  645. /* Index41 -12.3dB */ {0x0D, 0x0D, 0x0B, 0x09, 0x07, 0x04, 0x02, 0x01},
  646. /* Index42 -12.6dB */ {0x0D, 0x0C, 0x0B, 0x09, 0x07, 0x04, 0x02, 0x01},
  647. /* Index43 -12.9dB */ {0x0C, 0x0C, 0x0A, 0x09, 0x06, 0x04, 0x02, 0x01},
  648. /* Index44 -13.2dB */ {0x0C, 0x0B, 0x0A, 0x08, 0x06, 0x04, 0x02, 0x01},
  649. /* Index45 -13.5dB */ {0x0B, 0x0B, 0x0A, 0x08, 0x06, 0x04, 0x02, 0x01},
  650. /* Index46 -13.8dB */ {0x0B, 0x0B, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},
  651. /* Index47 -14.1dB */ {0x0B, 0x0A, 0x09, 0x07, 0x06, 0x04, 0x02, 0x01},
  652. /* Index48 -14.4dB */ {0x0A, 0x0A, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},
  653. /* Index49 -14.7dB */ {0x0A, 0x0A, 0x08, 0x07, 0x05, 0x03, 0x01, 0x01},
  654. /* Index50 -15 dB */ {0x0A, 0x09, 0x08, 0x07, 0x05, 0x03, 0x01, 0x01},
  655. /* Index51 -15.3dB */ {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},
  656. /* Index52 -15.6dB */ {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},
  657. /* Index53 -15.9dB */ {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}
  658. };
  659. u8 cck_swing_table_ch14_92e[CCK_TABLE_SIZE_92E][8] = {
  660. /* Index0 0 dB */ {0x36, 0x34, 0x2E, 0x26, 0x00, 0x00, 0x00, 0x00},
  661. /* Index1 -0.3dB */ {0x34, 0x32, 0x2C, 0x25, 0x00, 0x00, 0x00, 0x00},
  662. /* Index2 -0.6dB */ {0x32, 0x30, 0x2B, 0x23, 0x00, 0x00, 0x00, 0x00},
  663. /* Index3 -0.9dB */ {0x31, 0x2F, 0x29, 0x22, 0x00, 0x00, 0x00, 0x00},
  664. /* Index4 -1.2dB */ {0x2F, 0x2D, 0x28, 0x21, 0x00, 0x00, 0x00, 0x00},
  665. /* Index5 -1.5dB */ {0x2D, 0x2C, 0x27, 0x20, 0x00, 0x00, 0x00, 0x00},
  666. /* Index6 -1.8dB */ {0x2C, 0x2A, 0x25, 0x1F, 0x00, 0x00, 0x00, 0x00},
  667. /* Index7 -2.1dB */ {0x2A, 0x29, 0x24, 0x1E, 0x00, 0x00, 0x00, 0x00},
  668. /* Index8 -2.4dB */ {0x29, 0x27, 0x23, 0x1D, 0x00, 0x00, 0x00, 0x00},
  669. /* Index9 -2.7dB */ {0x27, 0x26, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00},
  670. /* Index10 -3 dB */ {0x26, 0x25, 0x20, 0x1B, 0x00, 0x00, 0x00, 0x00},
  671. /* Index11 -3.3dB */ {0x25, 0x23, 0x1F, 0x1A, 0x00, 0x00, 0x00, 0x00},
  672. /* Index12 -3.6dB */ {0x24, 0x22, 0x1E, 0x19, 0x00, 0x00, 0x00, 0x00},
  673. /* Index13 -3.9dB */ {0x22, 0x21, 0x1D, 0x18, 0x00, 0x00, 0x00, 0x00},
  674. /* Index14 -4.2dB */ {0x21, 0x20, 0x1C, 0x17, 0x00, 0x00, 0x00, 0x00},
  675. /* Index15 -4.5dB */ {0x20, 0x1F, 0x1B, 0x17, 0x00, 0x00, 0x00, 0x00},
  676. /* Index16 -4.8dB */ {0x1F, 0x1E, 0x1A, 0x16, 0x00, 0x00, 0x00, 0x00},
  677. /* Index17 -5.1dB */ {0x1E, 0x1D, 0x1A, 0x15, 0x00, 0x00, 0x00, 0x00},
  678. /* Index18 -5.4dB */ {0x1D, 0x1C, 0x19, 0x14, 0x00, 0x00, 0x00, 0x00},
  679. /* Index19 -5.7dB */ {0x1C, 0x1B, 0x18, 0x14, 0x00, 0x00, 0x00, 0x00},
  680. /* Index20 -6 dB */ {0x1B, 0x1A, 0x17, 0x13, 0x00, 0x00, 0x00, 0x00},
  681. /* Index21 -6.3dB */ {0x1A, 0x19, 0x16, 0x12, 0x00, 0x00, 0x00, 0x00},
  682. /* Index22 -6.6dB */ {0x19, 0x18, 0x15, 0x12, 0x00, 0x00, 0x00, 0x00},
  683. /* Index23 -6.9dB */ {0x18, 0x17, 0x15, 0x11, 0x00, 0x00, 0x00, 0x00},
  684. /* Index24 -7.2dB */ {0x18, 0x17, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00},
  685. /* Index25 -7.5dB */ {0x17, 0x16, 0x13, 0x10, 0x00, 0x00, 0x00, 0x00},
  686. /* Index26 -7.8dB */ {0x16, 0x15, 0x13, 0x0F, 0x00, 0x00, 0x00, 0x00},
  687. /* Index27 -8.1dB */ {0x15, 0x14, 0x12, 0x0F, 0x00, 0x00, 0x00, 0x00},
  688. /* Index28 -8.4dB */ {0x14, 0x14, 0x11, 0x0E, 0x00, 0x00, 0x00, 0x00},
  689. /* Index29 -8.7dB */ {0x14, 0x13, 0x11, 0x0E, 0x00, 0x00, 0x00, 0x00},
  690. /* Index30 -9 dB */ {0x13, 0x12, 0x10, 0x0D, 0x00, 0x00, 0x00, 0x00},
  691. /* Index31 -9.3dB */ {0x12, 0x12, 0x0F, 0x0D, 0x00, 0x00, 0x00, 0x00},
  692. /* Index32 -9.6dB */ {0x12, 0x11, 0x0F, 0x0D, 0x00, 0x00, 0x00, 0x00},
  693. /* Index33 -9.9dB */ {0x11, 0x11, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x00},
  694. /* Index34 -10.2dB */ {0x11, 0x11, 0x0E, 0x0C, 0x00, 0x00, 0x00, 0x00},
  695. /* Index35 -10.5dB */ {0x10, 0x0F, 0x0E, 0x0B, 0x00, 0x00, 0x00, 0x00},
  696. /* Index36 -10.8dB */ {0x10, 0x0F, 0x0D, 0x0B, 0x00, 0x00, 0x00, 0x00},
  697. /* Index37 -11.1dB */ {0x0F, 0x0E, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x00},
  698. /* Index38 -11.4dB */ {0x0E, 0x0E, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00},
  699. /* Index39 -11.7dB */ {0x0E, 0x0D, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00},
  700. /* Index40 -12 dB */ {0x0E, 0x0D, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00},
  701. /* Index41 -12.3dB */ {0x0D, 0x0D, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00},
  702. /* Index42 -12.6dB */ {0x0D, 0x0C, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00},
  703. /* Index43 -12.9dB */ {0x0C, 0x0C, 0x0A, 0x09, 0x00, 0x00, 0x00, 0x00},
  704. /* Index44 -13.2dB */ {0x0C, 0x0B, 0x0A, 0x08, 0x00, 0x00, 0x00, 0x00},
  705. /* Index45 -13.5dB */ {0x0B, 0x0B, 0x0A, 0x08, 0x00, 0x00, 0x00, 0x00},
  706. /* Index46 -13.8dB */ {0x0B, 0x0B, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00},
  707. /* Index47 -14.1dB */ {0x0B, 0x0A, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00},
  708. /* Index48 -14.4dB */ {0x0A, 0x0A, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00},
  709. /* Index49 -14.7dB */ {0x0A, 0x0A, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00},
  710. /* Index50 -15 dB */ {0x0A, 0x09, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00},
  711. /* Index51 -15.3dB */ {0x09, 0x09, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00},
  712. /* Index52 -15.6dB */ {0x09, 0x09, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00},
  713. /* Index53 -15.9dB */ {0x09, 0x08, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00}
  714. };
  715. #endif
  716. #if (RTL8814A_SUPPORT == 1 || RTL8822B_SUPPORT == 1)
  717. u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE] = {
  718. 0x081, /* 0, -12.0dB */
  719. 0x088, /* 1, -11.5dB */
  720. 0x090, /* 2, -11.0dB */
  721. 0x099, /* 3, -10.5dB */
  722. 0x0A2, /* 4, -10.0dB */
  723. 0x0AC, /* 5, -9.5dB */
  724. 0x0B6, /* 6, -9.0dB */
  725. 0x0C0, /* 7, -8.5dB */
  726. 0x0CC, /* 8, -8.0dB */
  727. 0x0D8, /* 9, -7.5dB */
  728. 0x0E5, /* 10, -7.0dB */
  729. 0x0F2, /* 11, -6.5dB */
  730. 0x101, /* 12, -6.0dB */
  731. 0x110, /* 13, -5.5dB */
  732. 0x120, /* 14, -5.0dB */
  733. 0x131, /* 15, -4.5dB */
  734. 0x143, /* 16, -4.0dB */
  735. 0x156, /* 17, -3.5dB */
  736. 0x16A, /* 18, -3.0dB */
  737. 0x180, /* 19, -2.5dB */
  738. 0x197, /* 20, -2.0dB */
  739. 0x1AF, /* 21, -1.5dB */
  740. 0x1C8, /* 22, -1.0dB */
  741. 0x1E3, /* 23, -0.5dB */
  742. 0x200, /* 24, +0 dB */
  743. 0x21E, /* 25, +0.5dB */
  744. 0x23E, /* 26, +1.0dB */
  745. 0x261, /* 27, +1.5dB */
  746. 0x285, /* 28, +2.0dB */
  747. 0x2AB, /* 29, +2.5dB */
  748. 0x2D3, /* 30, +3.0dB */
  749. 0x2FE, /* 31, +3.5dB */
  750. 0x32B, /* 32, +4.0dB */
  751. 0x35C, /* 33, +4.5dB */
  752. 0x38E, /* 34, +5.0dB */
  753. 0x3C4, /* 35, +5.5dB */
  754. 0x3FE /* 36, +6.0dB */
  755. };
  756. #elif(ODM_IC_11AC_SERIES_SUPPORT)
  757. u32 ofdm_swing_table_8812[OFDM_TABLE_SIZE_8812] = {
  758. 0x3FE, /* 0, (6dB) */
  759. 0x3C4, /* 1, (5.5dB) */
  760. 0x38E, /* 2, (5dB) */
  761. 0x35C, /* 3, (4.5dB) */
  762. 0x32B, /* 4, (4dB) */
  763. 0x2FE, /* 5, (3.5dB) */
  764. 0x2D3, /* 6, (3dB) */
  765. 0x2AB, /* 7, (2.5dB) */
  766. 0x285, /* 8, (2dB) */
  767. 0x261, /* 9, (1.5dB */
  768. 0x23E, /* 10, (1dB) */
  769. 0x21E, /* 11, (0.5dB) */
  770. 0x200, /* 12, (0dB) 8814 int PA 2G default */
  771. 0x1E3, /* 13, (-0.5dB) */
  772. 0x1C8, /* 14, (-1dB) */
  773. 0x1AF, /* 15, (-1.5dB) */
  774. 0x197, /* 16, (-2dB) */
  775. 0x180, /* 17, (-2.5dB) */
  776. 0x16A, /* 18, (-3dB) 8812 / 8814 int PA 5G / 8814 ext PA 2G5G default */
  777. 0x156, /* 19, (-3.5dB) */
  778. 0x143, /* 20, (-4dB) 8812 HP default */
  779. 0x131, /* 21, (-4.5dB) */
  780. 0x120, /* 22, (-5dB) */
  781. 0x110, /* 23, (-5.5dB) */
  782. 0x101, /* 24, (-6dB) */
  783. 0x0F2, /* 25, (-6.5dB) */
  784. 0x0E5, /* 26, (-7dB) */
  785. 0x0D8, /* 27, (-7.5dB) */
  786. 0x0CC, /* 28, (-8dB) */
  787. 0x0C0, /* 29, (-8.5dB) */
  788. 0x0B6, /* 30, (-9dB) */
  789. 0x0AC, /* 31, (-9.5dB) */
  790. 0x0A2, /* 32, (-10dB) */
  791. 0x099, /* 33, (-10.5dB) */
  792. 0x090, /* 34, (-11dB) */
  793. 0x088, /* 35, (-11.5dB) */
  794. 0x081, /* 36, (-12dB) */
  795. 0x079, /* 37, (-12.5dB) */
  796. 0x072, /* 38, (-13dB) */
  797. 0x06c, /* 39, (-13.5dB) */
  798. 0x066, /* 40, (-14dB) */
  799. 0x060, /* 41, (-14.5dB) */
  800. 0x05B /* 42, (-15dB) */
  801. };
  802. #endif
  803. u32 cck_swing_table_ch1_ch14_8723d[CCK_TABLE_SIZE_8723D] = {
  804. 0x0CD,
  805. 0x0D9,
  806. 0x0E6,
  807. 0x0F3,
  808. 0x102,
  809. 0x111,
  810. 0x121,
  811. 0x132,
  812. 0x144,
  813. 0x158,
  814. 0x16C,
  815. 0x182,
  816. 0x198,
  817. 0x1B1,
  818. 0x1CA,
  819. 0x1E5,
  820. 0x202,
  821. 0x221,
  822. 0x241,
  823. 0x263,
  824. 0x287,
  825. 0x2AE,
  826. 0x2D6,
  827. 0x301,
  828. 0x32F,
  829. 0x35F,
  830. 0x392,
  831. 0x3C9,
  832. 0x402,
  833. 0x43F,
  834. 0x47F,
  835. 0x4C3,
  836. 0x50C,
  837. 0x558,
  838. 0x5A9,
  839. 0x5FF,
  840. 0x65A,
  841. 0x6BA,
  842. 0x720,
  843. 0x78C,
  844. 0x7FF,
  845. };
  846. /* JJ ADD 20161014 */
  847. u32 cck_swing_table_ch1_ch14_8710b[CCK_TABLE_SIZE_8710B] = {
  848. 0x0CD,
  849. 0x0D9,
  850. 0x0E6,
  851. 0x0F3,
  852. 0x102,
  853. 0x111,
  854. 0x121,
  855. 0x132,
  856. 0x144,
  857. 0x158,
  858. 0x16C,
  859. 0x182,
  860. 0x198,
  861. 0x1B1,
  862. 0x1CA,
  863. 0x1E5,
  864. 0x202,
  865. 0x221,
  866. 0x241,
  867. 0x263,
  868. 0x287,
  869. 0x2AE,
  870. 0x2D6,
  871. 0x301,
  872. 0x32F,
  873. 0x35F,
  874. 0x392,
  875. 0x3C9,
  876. 0x402,
  877. 0x43F,
  878. 0x47F,
  879. 0x4C3,
  880. 0x50C,
  881. 0x558,
  882. 0x5A9,
  883. 0x5FF,
  884. 0x65A,
  885. 0x6BA,
  886. 0x720,
  887. 0x78C,
  888. 0x7FF,
  889. };
  890. /* #endif */
  891. /* 3============================================================
  892. * 3 Tx Power Tracking
  893. * 3============================================================ */
  894. void
  895. odm_txpowertracking_init(
  896. void *p_dm_void
  897. )
  898. {
  899. struct PHY_DM_STRUCT *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
  900. #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
  901. if (!(p_dm_odm->support_ic_type & (ODM_RTL8814A | ODM_RTL8822B | ODM_IC_11N_SERIES)))
  902. return;
  903. #endif
  904. odm_txpowertracking_thermal_meter_init(p_dm_odm);
  905. }
  906. u8
  907. get_swing_index(
  908. void *p_dm_void
  909. )
  910. {
  911. struct PHY_DM_STRUCT *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
  912. u8 i = 0, bb_swing_mask = 0;
  913. u32 bb_swing = 0;
  914. u32 swing_table_size = 0;
  915. u32 *p_swing_table = 0;
  916. struct rtl8192cd_priv *priv = p_dm_odm->priv;
  917. #if (RTL8197F_SUPPORT == 1)
  918. if (GET_CHIP_VER(priv) == VERSION_8197F) {
  919. bb_swing = phy_query_bb_reg(priv, REG_OFDM_0_XA_TX_IQ_IMBALANCE, MASKOFDM_D);
  920. p_swing_table = ofdm_swing_table_new;
  921. swing_table_size = OFDM_TABLE_SIZE_92D;
  922. bb_swing_mask = 22;
  923. }
  924. #endif
  925. #if (RTL8822B_SUPPORT == 1)
  926. if (GET_CHIP_VER(priv) == VERSION_8822B) {
  927. bb_swing = phy_query_bb_reg(priv, REG_A_TX_SCALE_JAGUAR, 0xFFE00000);
  928. p_swing_table = tx_scaling_table_jaguar;
  929. swing_table_size = TXSCALE_TABLE_SIZE;
  930. bb_swing_mask = 0;
  931. }
  932. #endif
  933. for (i = 0; i < swing_table_size - 1; i++) {
  934. u32 table_value = p_swing_table[i] >> bb_swing_mask;
  935. if (bb_swing == table_value)
  936. break;
  937. }
  938. ODM_RT_TRACE(p_dm_odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("bb_swing=0x%x bbswing_index=%d\n", bb_swing, i));
  939. return i;
  940. }
  941. void
  942. odm_txpowertracking_thermal_meter_init(
  943. void *p_dm_void
  944. )
  945. {
  946. struct PHY_DM_STRUCT *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
  947. struct odm_rf_calibration_structure *p_rf_calibrate_info = &(p_dm_odm->rf_calibrate_info);
  948. struct rtl8192cd_priv *priv = p_dm_odm->priv;
  949. u8 p;
  950. u8 default_swing_index;
  951. #if (RTL8197F_SUPPORT == 1 || RTL8822B_SUPPORT == 1)
  952. if ((GET_CHIP_VER(priv) == VERSION_8197F) || (GET_CHIP_VER(priv) == VERSION_8822B))
  953. default_swing_index = get_swing_index(p_dm_odm);
  954. #endif
  955. #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
  956. struct _ADAPTER *adapter = p_dm_odm->adapter;
  957. PMGNT_INFO p_mgnt_info = &adapter->MgntInfo;
  958. HAL_DATA_TYPE *p_hal_data = GET_HAL_DATA(adapter);
  959. p_mgnt_info->is_txpowertracking = true;
  960. p_hal_data->tx_powercount = 0;
  961. p_hal_data->is_txpowertracking_init = false;
  962. if (p_dm_odm->mp_mode == false)
  963. p_hal_data->txpowertrack_control = true;
  964. ODM_RT_TRACE(p_dm_odm, COMP_POWER_TRACKING, DBG_LOUD, ("p_mgnt_info->is_txpowertracking = %d\n", p_mgnt_info->is_txpowertracking));
  965. #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
  966. #ifdef CONFIG_RTL8188E
  967. {
  968. p_dm_odm->rf_calibrate_info.is_txpowertracking = _TRUE;
  969. p_dm_odm->rf_calibrate_info.tx_powercount = 0;
  970. p_dm_odm->rf_calibrate_info.is_txpowertracking_init = _FALSE;
  971. if (p_dm_odm->mp_mode == false)
  972. p_dm_odm->rf_calibrate_info.txpowertrack_control = _TRUE;
  973. MSG_8192C("p_dm_odm txpowertrack_control = %d\n", p_dm_odm->rf_calibrate_info.txpowertrack_control);
  974. }
  975. #else
  976. {
  977. struct _ADAPTER *adapter = p_dm_odm->adapter;
  978. HAL_DATA_TYPE *p_hal_data = GET_HAL_DATA(adapter);
  979. struct dm_priv *pdmpriv = &p_hal_data->dmpriv;
  980. /* if(IS_HARDWARE_TYPE_8192C(p_hal_data)) */
  981. {
  982. pdmpriv->is_txpowertracking = _TRUE;
  983. pdmpriv->tx_powercount = 0;
  984. pdmpriv->is_txpowertracking_init = _FALSE;
  985. if (p_dm_odm->mp_mode == false) /* for mp driver, turn off txpwrtracking as default */
  986. pdmpriv->txpowertrack_control = _TRUE;
  987. }
  988. MSG_8192C("pdmpriv->txpowertrack_control = %d\n", pdmpriv->txpowertrack_control);
  989. }
  990. #endif/* endif (CONFIG_RTL8188E==1) */
  991. #elif (DM_ODM_SUPPORT_TYPE & (ODM_AP))
  992. #ifdef RTL8188E_SUPPORT
  993. {
  994. p_dm_odm->rf_calibrate_info.is_txpowertracking = _TRUE;
  995. p_dm_odm->rf_calibrate_info.tx_powercount = 0;
  996. p_dm_odm->rf_calibrate_info.is_txpowertracking_init = _FALSE;
  997. p_dm_odm->rf_calibrate_info.txpowertrack_control = _TRUE;
  998. p_dm_odm->rf_calibrate_info.tm_trigger = 0;
  999. }
  1000. #endif
  1001. #endif
  1002. p_dm_odm->rf_calibrate_info.txpowertrack_control = true;
  1003. p_dm_odm->rf_calibrate_info.delta_power_index = 0;
  1004. p_dm_odm->rf_calibrate_info.delta_power_index_last = 0;
  1005. p_dm_odm->rf_calibrate_info.power_index_offset = 0;
  1006. p_dm_odm->rf_calibrate_info.thermal_value = 0;
  1007. p_rf_calibrate_info->default_ofdm_index = 28;
  1008. #if (RTL8197F_SUPPORT == 1)
  1009. if (GET_CHIP_VER(priv) == VERSION_8197F) {
  1010. p_rf_calibrate_info->default_ofdm_index = (default_swing_index >= (OFDM_TABLE_SIZE_92D - 1)) ? 30 : default_swing_index;
  1011. p_rf_calibrate_info->default_cck_index = 28;
  1012. }
  1013. #endif
  1014. #if (RTL8822B_SUPPORT == 1)
  1015. if (GET_CHIP_VER(priv) == VERSION_8822B) {
  1016. p_rf_calibrate_info->default_ofdm_index = (default_swing_index >= (TXSCALE_TABLE_SIZE - 1)) ? 24 : default_swing_index;
  1017. p_rf_calibrate_info->default_cck_index = 20;
  1018. }
  1019. #endif
  1020. #if RTL8188E_SUPPORT
  1021. p_rf_calibrate_info->default_cck_index = 20; /* -6 dB */
  1022. #elif RTL8192E_SUPPORT
  1023. p_rf_calibrate_info->default_cck_index = 8; /* -12 dB */
  1024. #endif
  1025. p_rf_calibrate_info->bb_swing_idx_ofdm_base = p_rf_calibrate_info->default_ofdm_index;
  1026. p_rf_calibrate_info->bb_swing_idx_cck_base = p_rf_calibrate_info->default_cck_index;
  1027. p_dm_odm->rf_calibrate_info.CCK_index = p_rf_calibrate_info->default_cck_index;
  1028. for (p = 0; p < MAX_RF_PATH; p++) {
  1029. p_dm_odm->rf_calibrate_info.OFDM_index[p] = p_rf_calibrate_info->default_ofdm_index;
  1030. p_rf_calibrate_info->bb_swing_idx_ofdm[p] = p_rf_calibrate_info->default_ofdm_index;
  1031. p_rf_calibrate_info->kfree_offset[p] = 0; /* for 8814 kfree*/
  1032. }
  1033. p_rf_calibrate_info->bb_swing_idx_cck = p_rf_calibrate_info->default_cck_index;
  1034. ODM_RT_TRACE(p_dm_odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("p_rf_calibrate_info->default_ofdm_index=%d p_rf_calibrate_info->default_cck_index=%d\n", p_rf_calibrate_info->default_ofdm_index, p_rf_calibrate_info->default_cck_index));
  1035. }
  1036. void
  1037. odm_txpowertracking_check(
  1038. void *p_dm_void
  1039. )
  1040. {
  1041. /* */
  1042. /* For AP/ADSL use struct rtl8192cd_priv* */
  1043. /* For CE/NIC use struct _ADAPTER* */
  1044. /* */
  1045. struct PHY_DM_STRUCT *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
  1046. if (!(p_dm_odm->support_ability & ODM_RF_TX_PWR_TRACK))
  1047. return;
  1048. /* */
  1049. /* 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate */
  1050. /* at the same time. In the stage2/3, we need to prive universal interface and merge all */
  1051. /* HW dynamic mechanism. */
  1052. /* */
  1053. switch (p_dm_odm->support_platform) {
  1054. case ODM_WIN:
  1055. odm_txpowertracking_check_mp(p_dm_odm);
  1056. break;
  1057. case ODM_CE:
  1058. odm_txpowertracking_check_ce(p_dm_odm);
  1059. break;
  1060. case ODM_AP:
  1061. odm_txpowertracking_check_ap(p_dm_odm);
  1062. break;
  1063. case ODM_ADSL:
  1064. /*odm_DIGAP(p_dm_odm);*/
  1065. break;
  1066. }
  1067. }
  1068. void
  1069. odm_txpowertracking_check_ce(
  1070. void *p_dm_void
  1071. )
  1072. {
  1073. #if (DM_ODM_SUPPORT_TYPE == ODM_CE)
  1074. struct PHY_DM_STRUCT *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
  1075. struct _ADAPTER *adapter = p_dm_odm->adapter;
  1076. #if (RTL8188E_SUPPORT == 1)
  1077. /* if(!p_mgnt_info->is_txpowertracking || (!pdmpriv->txpowertrack_control && pdmpriv->is_ap_kdone)) */
  1078. if (!(p_dm_odm->support_ability & ODM_RF_TX_PWR_TRACK))
  1079. return;
  1080. if (!p_dm_odm->rf_calibrate_info.tm_trigger) { /* at least delay 1 sec */
  1081. /* p_hal_data->TxPowerCheckCnt++; */ /* cosa add for debug */
  1082. odm_set_rf_reg(p_dm_odm, RF_PATH_A, RF_T_METER, RFREGOFFSETMASK, 0x60);
  1083. /* DBG_8192C("Trigger 92C Thermal Meter!!\n"); */
  1084. p_dm_odm->rf_calibrate_info.tm_trigger = 1;
  1085. return;
  1086. } else {
  1087. /* DBG_8192C("Schedule TxPowerTracking direct call!!\n"); */
  1088. odm_txpowertracking_callback_thermal_meter_8188e(adapter);
  1089. p_dm_odm->rf_calibrate_info.tm_trigger = 0;
  1090. }
  1091. #endif
  1092. #endif
  1093. }
  1094. void
  1095. odm_txpowertracking_check_mp(
  1096. void *p_dm_void
  1097. )
  1098. {
  1099. #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
  1100. struct PHY_DM_STRUCT *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
  1101. struct _ADAPTER *adapter = p_dm_odm->adapter;
  1102. if (odm_check_power_status(adapter) == false)
  1103. return;
  1104. if (!adapter->is_slave_of_dmsp || adapter->dual_mac_smart_concurrent == false)
  1105. odm_txpowertracking_thermal_meter_check(adapter);
  1106. #endif
  1107. }
  1108. void
  1109. odm_txpowertracking_check_ap(
  1110. void *p_dm_void
  1111. )
  1112. {
  1113. struct PHY_DM_STRUCT *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
  1114. #if (DM_ODM_SUPPORT_TYPE == ODM_AP)
  1115. struct rtl8192cd_priv *priv = p_dm_odm->priv;
  1116. #if ((RTL8188E_SUPPORT == 1) || (RTL8192E_SUPPORT == 1) || (RTL8812A_SUPPORT == 1) || (RTL8881A_SUPPORT == 1) || (RTL8814A_SUPPORT == 1) || (RTL8197F_SUPPORT == 1))
  1117. if (p_dm_odm->support_ic_type & (ODM_RTL8188E | ODM_RTL8192E | ODM_RTL8812 | ODM_RTL8881A | ODM_RTL8814A | ODM_RTL8197F | ODM_RTL8822B))
  1118. odm_txpowertracking_callback_thermal_meter(p_dm_odm);
  1119. else
  1120. #endif
  1121. {
  1122. }
  1123. #endif
  1124. }
  1125. #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
  1126. void
  1127. odm_txpowertracking_thermal_meter_check(
  1128. struct _ADAPTER *adapter
  1129. )
  1130. {
  1131. #ifndef AP_BUILD_WORKAROUND
  1132. #if (HAL_CODE_BASE == RTL8192_C)
  1133. PMGNT_INFO p_mgnt_info = &adapter->MgntInfo;
  1134. /* HAL_DATA_TYPE *p_hal_data = GET_HAL_DATA(adapter); */
  1135. static u8 tm_trigger = 0;
  1136. /* u8 TxPowerCheckCnt = 5; */ /* 10 sec */
  1137. if (!p_mgnt_info->is_txpowertracking /*|| (!p_hal_data->txpowertrack_control && p_hal_data->is_ap_kdone)*/)
  1138. return;
  1139. if (!tm_trigger) { /* at least delay 1 sec */
  1140. if (IS_HARDWARE_TYPE_8188E(adapter) || IS_HARDWARE_TYPE_8812(adapter))
  1141. phy_set_rf_reg(adapter, RF_PATH_A, RF_T_METER_88E, BIT(17) | BIT(16), 0x03);
  1142. else
  1143. phy_set_rf_reg(adapter, RF_PATH_A, RF_T_METER, RFREGOFFSETMASK, 0x60);
  1144. RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("Trigger 92C Thermal Meter!!\n"));
  1145. tm_trigger = 1;
  1146. return;
  1147. } else {
  1148. RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("Schedule TxPowerTracking direct call!!\n"));
  1149. odm_txpowertracking_direct_call(adapter); /* Using direct call is instead, added by Roger, 2009.06.18. */
  1150. tm_trigger = 0;
  1151. }
  1152. #endif
  1153. #endif
  1154. }
  1155. #endif