/drivers/staging/vt6656/rf.c

https://bitbucket.org/cyanogenmod/android_kernel_asus_tf300t · C · 1151 lines · 890 code · 112 blank · 149 comment · 37 complexity · 0192106507b8597ed62d63090e4cca81 MD5 · raw file

  1. /*
  2. * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
  3. * All rights reserved.
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License along
  16. * with this program; if not, write to the Free Software Foundation, Inc.,
  17. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  18. *
  19. *
  20. * File: rf.c
  21. *
  22. * Purpose: rf function code
  23. *
  24. * Author: Jerry Chen
  25. *
  26. * Date: Feb. 19, 2004
  27. *
  28. * Functions:
  29. * IFRFbWriteEmbeded - Embeded write RF register via MAC
  30. *
  31. * Revision History:
  32. *
  33. */
  34. #include "mac.h"
  35. #include "rf.h"
  36. #include "baseband.h"
  37. #include "control.h"
  38. #include "rndis.h"
  39. #include "datarate.h"
  40. static int msglevel =MSG_LEVEL_INFO;
  41. //static int msglevel =MSG_LEVEL_DEBUG;
  42. /*--------------------- Static Definitions -------------------------*/
  43. #define BY_AL2230_REG_LEN 23 //24bit
  44. #define CB_AL2230_INIT_SEQ 15
  45. #define AL2230_PWR_IDX_LEN 64
  46. #define BY_AL7230_REG_LEN 23 //24bit
  47. #define CB_AL7230_INIT_SEQ 16
  48. #define AL7230_PWR_IDX_LEN 64
  49. //{{RobertYu:20051111
  50. #define BY_VT3226_REG_LEN 23
  51. #define CB_VT3226_INIT_SEQ 11
  52. #define VT3226_PWR_IDX_LEN 64
  53. //}}
  54. //{{RobertYu:20060609
  55. #define BY_VT3342_REG_LEN 23
  56. #define CB_VT3342_INIT_SEQ 13
  57. #define VT3342_PWR_IDX_LEN 64
  58. //}}
  59. /*--------------------- Static Classes ----------------------------*/
  60. /*--------------------- Static Variables --------------------------*/
  61. BYTE abyAL2230InitTable[CB_AL2230_INIT_SEQ][3] = {
  62. {0x03, 0xF7, 0x90},
  63. {0x03, 0x33, 0x31},
  64. {0x01, 0xB8, 0x02},
  65. {0x00, 0xFF, 0xF3},
  66. {0x00, 0x05, 0xA4},
  67. {0x0F, 0x4D, 0xC5}, //RobertYu:20060814
  68. {0x08, 0x05, 0xB6},
  69. {0x01, 0x47, 0xC7},
  70. {0x00, 0x06, 0x88},
  71. {0x04, 0x03, 0xB9},
  72. {0x00, 0xDB, 0xBA},
  73. {0x00, 0x09, 0x9B},
  74. {0x0B, 0xDF, 0xFC},
  75. {0x00, 0x00, 0x0D},
  76. {0x00, 0x58, 0x0F}
  77. };
  78. BYTE abyAL2230ChannelTable0[CB_MAX_CHANNEL_24G][3] = {
  79. {0x03, 0xF7, 0x90}, // channel = 1, Tf = 2412MHz
  80. {0x03, 0xF7, 0x90}, // channel = 2, Tf = 2417MHz
  81. {0x03, 0xE7, 0x90}, // channel = 3, Tf = 2422MHz
  82. {0x03, 0xE7, 0x90}, // channel = 4, Tf = 2427MHz
  83. {0x03, 0xF7, 0xA0}, // channel = 5, Tf = 2432MHz
  84. {0x03, 0xF7, 0xA0}, // channel = 6, Tf = 2437MHz
  85. {0x03, 0xE7, 0xA0}, // channel = 7, Tf = 2442MHz
  86. {0x03, 0xE7, 0xA0}, // channel = 8, Tf = 2447MHz
  87. {0x03, 0xF7, 0xB0}, // channel = 9, Tf = 2452MHz
  88. {0x03, 0xF7, 0xB0}, // channel = 10, Tf = 2457MHz
  89. {0x03, 0xE7, 0xB0}, // channel = 11, Tf = 2462MHz
  90. {0x03, 0xE7, 0xB0}, // channel = 12, Tf = 2467MHz
  91. {0x03, 0xF7, 0xC0}, // channel = 13, Tf = 2472MHz
  92. {0x03, 0xE7, 0xC0} // channel = 14, Tf = 2412M
  93. };
  94. BYTE abyAL2230ChannelTable1[CB_MAX_CHANNEL_24G][3] = {
  95. {0x03, 0x33, 0x31}, // channel = 1, Tf = 2412MHz
  96. {0x0B, 0x33, 0x31}, // channel = 2, Tf = 2417MHz
  97. {0x03, 0x33, 0x31}, // channel = 3, Tf = 2422MHz
  98. {0x0B, 0x33, 0x31}, // channel = 4, Tf = 2427MHz
  99. {0x03, 0x33, 0x31}, // channel = 5, Tf = 2432MHz
  100. {0x0B, 0x33, 0x31}, // channel = 6, Tf = 2437MHz
  101. {0x03, 0x33, 0x31}, // channel = 7, Tf = 2442MHz
  102. {0x0B, 0x33, 0x31}, // channel = 8, Tf = 2447MHz
  103. {0x03, 0x33, 0x31}, // channel = 9, Tf = 2452MHz
  104. {0x0B, 0x33, 0x31}, // channel = 10, Tf = 2457MHz
  105. {0x03, 0x33, 0x31}, // channel = 11, Tf = 2462MHz
  106. {0x0B, 0x33, 0x31}, // channel = 12, Tf = 2467MHz
  107. {0x03, 0x33, 0x31}, // channel = 13, Tf = 2472MHz
  108. {0x06, 0x66, 0x61} // channel = 14, Tf = 2412M
  109. };
  110. // 40MHz reference frequency
  111. // Need to Pull PLLON(PE3) low when writing channel registers through 3-wire.
  112. BYTE abyAL7230InitTable[CB_AL7230_INIT_SEQ][3] = {
  113. {0x20, 0x37, 0x90}, // Channel1 // Need modify for 11a
  114. {0x13, 0x33, 0x31}, // Channel1 // Need modify for 11a
  115. {0x84, 0x1F, 0xF2}, // Need modify for 11a: 451FE2
  116. {0x3F, 0xDF, 0xA3}, // Need modify for 11a: 5FDFA3
  117. {0x7F, 0xD7, 0x84}, // 11b/g // Need modify for 11a
  118. //0x802B4500+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11a: 8D1B45
  119. // RoberYu:20050113, Rev0.47 Regsiter Setting Guide
  120. {0x80, 0x2B, 0x55}, // Need modify for 11a: 8D1B55
  121. {0x56, 0xAF, 0x36},
  122. {0xCE, 0x02, 0x07}, // Need modify for 11a: 860207
  123. {0x6E, 0xBC, 0x98},
  124. {0x22, 0x1B, 0xB9},
  125. {0xE0, 0x00, 0x0A}, // Need modify for 11a: E0600A
  126. {0x08, 0x03, 0x1B}, // init 0x080B1B00 => 0x080F1B00 for 3 wire control TxGain(D10)
  127. //0x00093C00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11a: 00143C
  128. // RoberYu:20050113, Rev0.47 Regsiter Setting Guide
  129. {0x00, 0x0A, 0x3C}, // Need modify for 11a: 00143C
  130. {0xFF, 0xFF, 0xFD},
  131. {0x00, 0x00, 0x0E},
  132. {0x1A, 0xBA, 0x8F} // Need modify for 11a: 12BACF
  133. };
  134. BYTE abyAL7230InitTableAMode[CB_AL7230_INIT_SEQ][3] = {
  135. {0x2F, 0xF5, 0x20}, // Channel184 // Need modify for 11b/g
  136. {0x00, 0x00, 0x01}, // Channel184 // Need modify for 11b/g
  137. {0x45, 0x1F, 0xE2}, // Need modify for 11b/g
  138. {0x5F, 0xDF, 0xA3}, // Need modify for 11b/g
  139. {0x6F, 0xD7, 0x84}, // 11a // Need modify for 11b/g
  140. {0x85, 0x3F, 0x55}, // Need modify for 11b/g, RoberYu:20050113
  141. {0x56, 0xAF, 0x36},
  142. {0xCE, 0x02, 0x07}, // Need modify for 11b/g
  143. {0x6E, 0xBC, 0x98},
  144. {0x22, 0x1B, 0xB9},
  145. {0xE0, 0x60, 0x0A}, // Need modify for 11b/g
  146. {0x08, 0x03, 0x1B}, // init 0x080B1B00 => 0x080F1B00 for 3 wire control TxGain(D10)
  147. {0x00, 0x14, 0x7C}, // Need modify for 11b/g
  148. {0xFF, 0xFF, 0xFD},
  149. {0x00, 0x00, 0x0E},
  150. {0x12, 0xBA, 0xCF} // Need modify for 11b/g
  151. };
  152. BYTE abyAL7230ChannelTable0[CB_MAX_CHANNEL][3] = {
  153. {0x20, 0x37, 0x90}, // channel = 1, Tf = 2412MHz
  154. {0x20, 0x37, 0x90}, // channel = 2, Tf = 2417MHz
  155. {0x20, 0x37, 0x90}, // channel = 3, Tf = 2422MHz
  156. {0x20, 0x37, 0x90}, // channel = 4, Tf = 2427MHz
  157. {0x20, 0x37, 0xA0}, // channel = 5, Tf = 2432MHz
  158. {0x20, 0x37, 0xA0}, // channel = 6, Tf = 2437MHz
  159. {0x20, 0x37, 0xA0}, // channel = 7, Tf = 2442MHz
  160. {0x20, 0x37, 0xA0}, // channel = 8, Tf = 2447MHz //RobertYu: 20050218, update for APNode 0.49
  161. {0x20, 0x37, 0xB0}, // channel = 9, Tf = 2452MHz //RobertYu: 20050218, update for APNode 0.49
  162. {0x20, 0x37, 0xB0}, // channel = 10, Tf = 2457MHz //RobertYu: 20050218, update for APNode 0.49
  163. {0x20, 0x37, 0xB0}, // channel = 11, Tf = 2462MHz //RobertYu: 20050218, update for APNode 0.49
  164. {0x20, 0x37, 0xB0}, // channel = 12, Tf = 2467MHz //RobertYu: 20050218, update for APNode 0.49
  165. {0x20, 0x37, 0xC0}, // channel = 13, Tf = 2472MHz //RobertYu: 20050218, update for APNode 0.49
  166. {0x20, 0x37, 0xC0}, // channel = 14, Tf = 2484MHz
  167. // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22)
  168. {0x0F, 0xF5, 0x20}, // channel = 183, Tf = 4915MHz (15)
  169. {0x2F, 0xF5, 0x20}, // channel = 184, Tf = 4920MHz (16)
  170. {0x0F, 0xF5, 0x20}, // channel = 185, Tf = 4925MHz (17)
  171. {0x0F, 0xF5, 0x20}, // channel = 187, Tf = 4935MHz (18)
  172. {0x2F, 0xF5, 0x20}, // channel = 188, Tf = 4940MHz (19)
  173. {0x0F, 0xF5, 0x20}, // channel = 189, Tf = 4945MHz (20)
  174. {0x2F, 0xF5, 0x30}, // channel = 192, Tf = 4960MHz (21)
  175. {0x2F, 0xF5, 0x30}, // channel = 196, Tf = 4980MHz (22)
  176. // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64,
  177. // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56)
  178. {0x0F, 0xF5, 0x40}, // channel = 7, Tf = 5035MHz (23)
  179. {0x2F, 0xF5, 0x40}, // channel = 8, Tf = 5040MHz (24)
  180. {0x0F, 0xF5, 0x40}, // channel = 9, Tf = 5045MHz (25)
  181. {0x0F, 0xF5, 0x40}, // channel = 11, Tf = 5055MHz (26)
  182. {0x2F, 0xF5, 0x40}, // channel = 12, Tf = 5060MHz (27)
  183. {0x2F, 0xF5, 0x50}, // channel = 16, Tf = 5080MHz (28)
  184. {0x2F, 0xF5, 0x60}, // channel = 34, Tf = 5170MHz (29)
  185. {0x2F, 0xF5, 0x60}, // channel = 36, Tf = 5180MHz (30)
  186. {0x2F, 0xF5, 0x70}, // channel = 38, Tf = 5190MHz (31) //RobertYu: 20050218, update for APNode 0.49
  187. {0x2F, 0xF5, 0x70}, // channel = 40, Tf = 5200MHz (32)
  188. {0x2F, 0xF5, 0x70}, // channel = 42, Tf = 5210MHz (33)
  189. {0x2F, 0xF5, 0x70}, // channel = 44, Tf = 5220MHz (34)
  190. {0x2F, 0xF5, 0x70}, // channel = 46, Tf = 5230MHz (35)
  191. {0x2F, 0xF5, 0x70}, // channel = 48, Tf = 5240MHz (36)
  192. {0x2F, 0xF5, 0x80}, // channel = 52, Tf = 5260MHz (37)
  193. {0x2F, 0xF5, 0x80}, // channel = 56, Tf = 5280MHz (38)
  194. {0x2F, 0xF5, 0x80}, // channel = 60, Tf = 5300MHz (39)
  195. {0x2F, 0xF5, 0x90}, // channel = 64, Tf = 5320MHz (40)
  196. {0x2F, 0xF5, 0xC0}, // channel = 100, Tf = 5500MHz (41)
  197. {0x2F, 0xF5, 0xC0}, // channel = 104, Tf = 5520MHz (42)
  198. {0x2F, 0xF5, 0xC0}, // channel = 108, Tf = 5540MHz (43)
  199. {0x2F, 0xF5, 0xD0}, // channel = 112, Tf = 5560MHz (44)
  200. {0x2F, 0xF5, 0xD0}, // channel = 116, Tf = 5580MHz (45)
  201. {0x2F, 0xF5, 0xD0}, // channel = 120, Tf = 5600MHz (46)
  202. {0x2F, 0xF5, 0xE0}, // channel = 124, Tf = 5620MHz (47)
  203. {0x2F, 0xF5, 0xE0}, // channel = 128, Tf = 5640MHz (48)
  204. {0x2F, 0xF5, 0xE0}, // channel = 132, Tf = 5660MHz (49)
  205. {0x2F, 0xF5, 0xF0}, // channel = 136, Tf = 5680MHz (50)
  206. {0x2F, 0xF5, 0xF0}, // channel = 140, Tf = 5700MHz (51)
  207. {0x2F, 0xF6, 0x00}, // channel = 149, Tf = 5745MHz (52)
  208. {0x2F, 0xF6, 0x00}, // channel = 153, Tf = 5765MHz (53)
  209. {0x2F, 0xF6, 0x00}, // channel = 157, Tf = 5785MHz (54)
  210. {0x2F, 0xF6, 0x10}, // channel = 161, Tf = 5805MHz (55)
  211. {0x2F, 0xF6, 0x10} // channel = 165, Tf = 5825MHz (56)
  212. };
  213. BYTE abyAL7230ChannelTable1[CB_MAX_CHANNEL][3] = {
  214. {0x13, 0x33, 0x31}, // channel = 1, Tf = 2412MHz
  215. {0x1B, 0x33, 0x31}, // channel = 2, Tf = 2417MHz
  216. {0x03, 0x33, 0x31}, // channel = 3, Tf = 2422MHz
  217. {0x0B, 0x33, 0x31}, // channel = 4, Tf = 2427MHz
  218. {0x13, 0x33, 0x31}, // channel = 5, Tf = 2432MHz
  219. {0x1B, 0x33, 0x31}, // channel = 6, Tf = 2437MHz
  220. {0x03, 0x33, 0x31}, // channel = 7, Tf = 2442MHz
  221. {0x0B, 0x33, 0x31}, // channel = 8, Tf = 2447MHz
  222. {0x13, 0x33, 0x31}, // channel = 9, Tf = 2452MHz
  223. {0x1B, 0x33, 0x31}, // channel = 10, Tf = 2457MHz
  224. {0x03, 0x33, 0x31}, // channel = 11, Tf = 2462MHz
  225. {0x0B, 0x33, 0x31}, // channel = 12, Tf = 2467MHz
  226. {0x13, 0x33, 0x31}, // channel = 13, Tf = 2472MHz
  227. {0x06, 0x66, 0x61}, // channel = 14, Tf = 2484MHz
  228. // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22)
  229. {0x1D, 0x55, 0x51}, // channel = 183, Tf = 4915MHz (15)
  230. {0x00, 0x00, 0x01}, // channel = 184, Tf = 4920MHz (16)
  231. {0x02, 0xAA, 0xA1}, // channel = 185, Tf = 4925MHz (17)
  232. {0x08, 0x00, 0x01}, // channel = 187, Tf = 4935MHz (18)
  233. {0x0A, 0xAA, 0xA1}, // channel = 188, Tf = 4940MHz (19)
  234. {0x0D, 0x55, 0x51}, // channel = 189, Tf = 4945MHz (20)
  235. {0x15, 0x55, 0x51}, // channel = 192, Tf = 4960MHz (21)
  236. {0x00, 0x00, 0x01}, // channel = 196, Tf = 4980MHz (22)
  237. // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64,
  238. // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56)
  239. {0x1D, 0x55, 0x51}, // channel = 7, Tf = 5035MHz (23)
  240. {0x00, 0x00, 0x01}, // channel = 8, Tf = 5040MHz (24)
  241. {0x02, 0xAA, 0xA1}, // channel = 9, Tf = 5045MHz (25)
  242. {0x08, 0x00, 0x01}, // channel = 11, Tf = 5055MHz (26)
  243. {0x0A, 0xAA, 0xA1}, // channel = 12, Tf = 5060MHz (27)
  244. {0x15, 0x55, 0x51}, // channel = 16, Tf = 5080MHz (28)
  245. {0x05, 0x55, 0x51}, // channel = 34, Tf = 5170MHz (29)
  246. {0x0A, 0xAA, 0xA1}, // channel = 36, Tf = 5180MHz (30)
  247. {0x10, 0x00, 0x01}, // channel = 38, Tf = 5190MHz (31)
  248. {0x15, 0x55, 0x51}, // channel = 40, Tf = 5200MHz (32)
  249. {0x1A, 0xAA, 0xA1}, // channel = 42, Tf = 5210MHz (33)
  250. {0x00, 0x00, 0x01}, // channel = 44, Tf = 5220MHz (34)
  251. {0x05, 0x55, 0x51}, // channel = 46, Tf = 5230MHz (35)
  252. {0x0A, 0xAA, 0xA1}, // channel = 48, Tf = 5240MHz (36)
  253. {0x15, 0x55, 0x51}, // channel = 52, Tf = 5260MHz (37)
  254. {0x00, 0x00, 0x01}, // channel = 56, Tf = 5280MHz (38)
  255. {0x0A, 0xAA, 0xA1}, // channel = 60, Tf = 5300MHz (39)
  256. {0x15, 0x55, 0x51}, // channel = 64, Tf = 5320MHz (40)
  257. {0x15, 0x55, 0x51}, // channel = 100, Tf = 5500MHz (41)
  258. {0x00, 0x00, 0x01}, // channel = 104, Tf = 5520MHz (42)
  259. {0x0A, 0xAA, 0xA1}, // channel = 108, Tf = 5540MHz (43)
  260. {0x15, 0x55, 0x51}, // channel = 112, Tf = 5560MHz (44)
  261. {0x00, 0x00, 0x01}, // channel = 116, Tf = 5580MHz (45)
  262. {0x0A, 0xAA, 0xA1}, // channel = 120, Tf = 5600MHz (46)
  263. {0x15, 0x55, 0x51}, // channel = 124, Tf = 5620MHz (47)
  264. {0x00, 0x00, 0x01}, // channel = 128, Tf = 5640MHz (48)
  265. {0x0A, 0xAA, 0xA1}, // channel = 132, Tf = 5660MHz (49)
  266. {0x15, 0x55, 0x51}, // channel = 136, Tf = 5680MHz (50)
  267. {0x00, 0x00, 0x01}, // channel = 140, Tf = 5700MHz (51)
  268. {0x18, 0x00, 0x01}, // channel = 149, Tf = 5745MHz (52)
  269. {0x02, 0xAA, 0xA1}, // channel = 153, Tf = 5765MHz (53)
  270. {0x0D, 0x55, 0x51}, // channel = 157, Tf = 5785MHz (54)
  271. {0x18, 0x00, 0x01}, // channel = 161, Tf = 5805MHz (55)
  272. {0x02, 0xAA, 0xB1} // channel = 165, Tf = 5825MHz (56)
  273. };
  274. BYTE abyAL7230ChannelTable2[CB_MAX_CHANNEL][3] = {
  275. {0x7F, 0xD7, 0x84}, // channel = 1, Tf = 2412MHz
  276. {0x7F, 0xD7, 0x84}, // channel = 2, Tf = 2417MHz
  277. {0x7F, 0xD7, 0x84}, // channel = 3, Tf = 2422MHz
  278. {0x7F, 0xD7, 0x84}, // channel = 4, Tf = 2427MHz
  279. {0x7F, 0xD7, 0x84}, // channel = 5, Tf = 2432MHz
  280. {0x7F, 0xD7, 0x84}, // channel = 6, Tf = 2437MHz
  281. {0x7F, 0xD7, 0x84}, // channel = 7, Tf = 2442MHz
  282. {0x7F, 0xD7, 0x84}, // channel = 8, Tf = 2447MHz
  283. {0x7F, 0xD7, 0x84}, // channel = 9, Tf = 2452MHz
  284. {0x7F, 0xD7, 0x84}, // channel = 10, Tf = 2457MHz
  285. {0x7F, 0xD7, 0x84}, // channel = 11, Tf = 2462MHz
  286. {0x7F, 0xD7, 0x84}, // channel = 12, Tf = 2467MHz
  287. {0x7F, 0xD7, 0x84}, // channel = 13, Tf = 2472MHz
  288. {0x7F, 0xD7, 0x84}, // channel = 14, Tf = 2484MHz
  289. // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22)
  290. {0x7F, 0xD7, 0x84}, // channel = 183, Tf = 4915MHz (15)
  291. {0x6F, 0xD7, 0x84}, // channel = 184, Tf = 4920MHz (16)
  292. {0x7F, 0xD7, 0x84}, // channel = 185, Tf = 4925MHz (17)
  293. {0x7F, 0xD7, 0x84}, // channel = 187, Tf = 4935MHz (18)
  294. {0x7F, 0xD7, 0x84}, // channel = 188, Tf = 4940MHz (19)
  295. {0x7F, 0xD7, 0x84}, // channel = 189, Tf = 4945MHz (20)
  296. {0x7F, 0xD7, 0x84}, // channel = 192, Tf = 4960MHz (21)
  297. {0x6F, 0xD7, 0x84}, // channel = 196, Tf = 4980MHz (22)
  298. // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64,
  299. // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56)
  300. {0x7F, 0xD7, 0x84}, // channel = 7, Tf = 5035MHz (23)
  301. {0x6F, 0xD7, 0x84}, // channel = 8, Tf = 5040MHz (24)
  302. {0x7F, 0xD7, 0x84}, // channel = 9, Tf = 5045MHz (25)
  303. {0x7F, 0xD7, 0x84}, // channel = 11, Tf = 5055MHz (26)
  304. {0x7F, 0xD7, 0x84}, // channel = 12, Tf = 5060MHz (27)
  305. {0x7F, 0xD7, 0x84}, // channel = 16, Tf = 5080MHz (28)
  306. {0x7F, 0xD7, 0x84}, // channel = 34, Tf = 5170MHz (29)
  307. {0x7F, 0xD7, 0x84}, // channel = 36, Tf = 5180MHz (30)
  308. {0x7F, 0xD7, 0x84}, // channel = 38, Tf = 5190MHz (31)
  309. {0x7F, 0xD7, 0x84}, // channel = 40, Tf = 5200MHz (32)
  310. {0x7F, 0xD7, 0x84}, // channel = 42, Tf = 5210MHz (33)
  311. {0x6F, 0xD7, 0x84}, // channel = 44, Tf = 5220MHz (34)
  312. {0x7F, 0xD7, 0x84}, // channel = 46, Tf = 5230MHz (35)
  313. {0x7F, 0xD7, 0x84}, // channel = 48, Tf = 5240MHz (36)
  314. {0x7F, 0xD7, 0x84}, // channel = 52, Tf = 5260MHz (37)
  315. {0x6F, 0xD7, 0x84}, // channel = 56, Tf = 5280MHz (38)
  316. {0x7F, 0xD7, 0x84}, // channel = 60, Tf = 5300MHz (39)
  317. {0x7F, 0xD7, 0x84}, // channel = 64, Tf = 5320MHz (40)
  318. {0x7F, 0xD7, 0x84}, // channel = 100, Tf = 5500MHz (41)
  319. {0x6F, 0xD7, 0x84}, // channel = 104, Tf = 5520MHz (42)
  320. {0x7F, 0xD7, 0x84}, // channel = 108, Tf = 5540MHz (43)
  321. {0x7F, 0xD7, 0x84}, // channel = 112, Tf = 5560MHz (44)
  322. {0x6F, 0xD7, 0x84}, // channel = 116, Tf = 5580MHz (45)
  323. {0x7F, 0xD7, 0x84}, // channel = 120, Tf = 5600MHz (46)
  324. {0x7F, 0xD7, 0x84}, // channel = 124, Tf = 5620MHz (47)
  325. {0x6F, 0xD7, 0x84}, // channel = 128, Tf = 5640MHz (48)
  326. {0x7F, 0xD7, 0x84}, // channel = 132, Tf = 5660MHz (49)
  327. {0x7F, 0xD7, 0x84}, // channel = 136, Tf = 5680MHz (50)
  328. {0x6F, 0xD7, 0x84}, // channel = 140, Tf = 5700MHz (51)
  329. {0x7F, 0xD7, 0x84}, // channel = 149, Tf = 5745MHz (52)
  330. {0x7F, 0xD7, 0x84}, // channel = 153, Tf = 5765MHz (53)
  331. {0x7F, 0xD7, 0x84}, // channel = 157, Tf = 5785MHz (54)
  332. {0x7F, 0xD7, 0x84}, // channel = 161, Tf = 5805MHz (55)
  333. {0x7F, 0xD7, 0x84} // channel = 165, Tf = 5825MHz (56)
  334. };
  335. ///{{RobertYu:20051111
  336. BYTE abyVT3226_InitTable[CB_VT3226_INIT_SEQ][3] = {
  337. {0x03, 0xFF, 0x80},
  338. {0x02, 0x82, 0xA1},
  339. {0x03, 0xC6, 0xA2},
  340. {0x01, 0x97, 0x93},
  341. {0x03, 0x66, 0x64},
  342. {0x00, 0x61, 0xA5},
  343. {0x01, 0x7B, 0xD6},
  344. {0x00, 0x80, 0x17},
  345. {0x03, 0xF8, 0x08},
  346. {0x00, 0x02, 0x39}, //RobertYu:20051116
  347. {0x02, 0x00, 0x2A}
  348. };
  349. BYTE abyVT3226D0_InitTable[CB_VT3226_INIT_SEQ][3] = {
  350. {0x03, 0xFF, 0x80},
  351. {0x03, 0x02, 0x21}, //RobertYu:20060327
  352. {0x03, 0xC6, 0xA2},
  353. {0x01, 0x97, 0x93},
  354. {0x03, 0x66, 0x64},
  355. {0x00, 0x71, 0xA5}, //RobertYu:20060103
  356. {0x01, 0x15, 0xC6}, //RobertYu:20060420
  357. {0x01, 0x2E, 0x07}, //RobertYu:20060420
  358. {0x00, 0x58, 0x08}, //RobertYu:20060111
  359. {0x00, 0x02, 0x79}, //RobertYu:20060420
  360. {0x02, 0x01, 0xAA} //RobertYu:20060523
  361. };
  362. BYTE abyVT3226_ChannelTable0[CB_MAX_CHANNEL_24G][3] = {
  363. {0x01, 0x97, 0x83}, // channel = 1, Tf = 2412MHz
  364. {0x01, 0x97, 0x83}, // channel = 2, Tf = 2417MHz
  365. {0x01, 0x97, 0x93}, // channel = 3, Tf = 2422MHz
  366. {0x01, 0x97, 0x93}, // channel = 4, Tf = 2427MHz
  367. {0x01, 0x97, 0x93}, // channel = 5, Tf = 2432MHz
  368. {0x01, 0x97, 0x93}, // channel = 6, Tf = 2437MHz
  369. {0x01, 0x97, 0xA3}, // channel = 7, Tf = 2442MHz
  370. {0x01, 0x97, 0xA3}, // channel = 8, Tf = 2447MHz
  371. {0x01, 0x97, 0xA3}, // channel = 9, Tf = 2452MHz
  372. {0x01, 0x97, 0xA3}, // channel = 10, Tf = 2457MHz
  373. {0x01, 0x97, 0xB3}, // channel = 11, Tf = 2462MHz
  374. {0x01, 0x97, 0xB3}, // channel = 12, Tf = 2467MHz
  375. {0x01, 0x97, 0xB3}, // channel = 13, Tf = 2472MHz
  376. {0x03, 0x37, 0xC3} // channel = 14, Tf = 2484MHz
  377. };
  378. BYTE abyVT3226_ChannelTable1[CB_MAX_CHANNEL_24G][3] = {
  379. {0x02, 0x66, 0x64}, // channel = 1, Tf = 2412MHz
  380. {0x03, 0x66, 0x64}, // channel = 2, Tf = 2417MHz
  381. {0x00, 0x66, 0x64}, // channel = 3, Tf = 2422MHz
  382. {0x01, 0x66, 0x64}, // channel = 4, Tf = 2427MHz
  383. {0x02, 0x66, 0x64}, // channel = 5, Tf = 2432MHz
  384. {0x03, 0x66, 0x64}, // channel = 6, Tf = 2437MHz
  385. {0x00, 0x66, 0x64}, // channel = 7, Tf = 2442MHz
  386. {0x01, 0x66, 0x64}, // channel = 8, Tf = 2447MHz
  387. {0x02, 0x66, 0x64}, // channel = 9, Tf = 2452MHz
  388. {0x03, 0x66, 0x64}, // channel = 10, Tf = 2457MHz
  389. {0x00, 0x66, 0x64}, // channel = 11, Tf = 2462MHz
  390. {0x01, 0x66, 0x64}, // channel = 12, Tf = 2467MHz
  391. {0x02, 0x66, 0x64}, // channel = 13, Tf = 2472MHz
  392. {0x00, 0xCC, 0xC4} // channel = 14, Tf = 2484MHz
  393. };
  394. ///}}RobertYu
  395. //{{RobertYu:20060502, TWIF 1.14, LO Current for 11b mode
  396. DWORD dwVT3226D0LoCurrentTable[CB_MAX_CHANNEL_24G] = {
  397. 0x0135C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 1, Tf = 2412MHz
  398. 0x0135C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 2, Tf = 2417MHz
  399. 0x0235C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 3, Tf = 2422MHz
  400. 0x0235C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 4, Tf = 2427MHz
  401. 0x0235C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 5, Tf = 2432MHz
  402. 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 6, Tf = 2437MHz
  403. 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 7, Tf = 2442MHz
  404. 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 8, Tf = 2447MHz
  405. 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 9, Tf = 2452MHz
  406. 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 10, Tf = 2457MHz
  407. 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 11, Tf = 2462MHz
  408. 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 12, Tf = 2467MHz
  409. 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 13, Tf = 2472MHz
  410. 0x0135C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW // channel = 14, Tf = 2484MHz
  411. };
  412. //}}
  413. //{{RobertYu:20060609
  414. BYTE abyVT3342A0_InitTable[CB_VT3342_INIT_SEQ][3] = { // 11b/g mode
  415. {0x03, 0xFF, 0x80}, //update for mode//
  416. {0x02, 0x08, 0x81},
  417. {0x00, 0xC6, 0x02},
  418. {0x03, 0xC5, 0x13}, // channel6
  419. {0x00, 0xEE, 0xE4}, // channel6
  420. {0x00, 0x71, 0xA5},
  421. {0x01, 0x75, 0x46},
  422. {0x01, 0x40, 0x27},
  423. {0x01, 0x54, 0x08},
  424. {0x00, 0x01, 0x69},
  425. {0x02, 0x00, 0xAA},
  426. {0x00, 0x08, 0xCB},
  427. {0x01, 0x70, 0x0C}
  428. };
  429. //11b/g mode: 0x03, 0xFF, 0x80,
  430. //11a mode: 0x03, 0xFF, 0xC0,
  431. // channel44, 5220MHz 0x00C402
  432. // channel56, 5280MHz 0x00C402 for disable Frac
  433. // other channels 0x00C602
  434. BYTE abyVT3342_ChannelTable0[CB_MAX_CHANNEL][3] = {
  435. {0x02, 0x05, 0x03}, // channel = 1, Tf = 2412MHz
  436. {0x01, 0x15, 0x03}, // channel = 2, Tf = 2417MHz
  437. {0x03, 0xC5, 0x03}, // channel = 3, Tf = 2422MHz
  438. {0x02, 0x65, 0x03}, // channel = 4, Tf = 2427MHz
  439. {0x01, 0x15, 0x13}, // channel = 5, Tf = 2432MHz
  440. {0x03, 0xC5, 0x13}, // channel = 6, Tf = 2437MHz
  441. {0x02, 0x05, 0x13}, // channel = 7, Tf = 2442MHz
  442. {0x01, 0x15, 0x13}, // channel = 8, Tf = 2447MHz
  443. {0x03, 0xC5, 0x13}, // channel = 9, Tf = 2452MHz
  444. {0x02, 0x65, 0x13}, // channel = 10, Tf = 2457MHz
  445. {0x01, 0x15, 0x23}, // channel = 11, Tf = 2462MHz
  446. {0x03, 0xC5, 0x23}, // channel = 12, Tf = 2467MHz
  447. {0x02, 0x05, 0x23}, // channel = 13, Tf = 2472MHz
  448. {0x00, 0xD5, 0x23}, // channel = 14, Tf = 2484MHz
  449. // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22)
  450. {0x01, 0x15, 0x13}, // channel = 183, Tf = 4915MHz (15), TBD
  451. {0x01, 0x15, 0x13}, // channel = 184, Tf = 4920MHz (16), TBD
  452. {0x01, 0x15, 0x13}, // channel = 185, Tf = 4925MHz (17), TBD
  453. {0x01, 0x15, 0x13}, // channel = 187, Tf = 4935MHz (18), TBD
  454. {0x01, 0x15, 0x13}, // channel = 188, Tf = 4940MHz (19), TBD
  455. {0x01, 0x15, 0x13}, // channel = 189, Tf = 4945MHz (20), TBD
  456. {0x01, 0x15, 0x13}, // channel = 192, Tf = 4960MHz (21), TBD
  457. {0x01, 0x15, 0x13}, // channel = 196, Tf = 4980MHz (22), TBD
  458. // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64,
  459. // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56)
  460. {0x01, 0x15, 0x13}, // channel = 7, Tf = 5035MHz (23), TBD
  461. {0x01, 0x15, 0x13}, // channel = 8, Tf = 5040MHz (24), TBD
  462. {0x01, 0x15, 0x13}, // channel = 9, Tf = 5045MHz (25), TBD
  463. {0x01, 0x15, 0x13}, // channel = 11, Tf = 5055MHz (26), TBD
  464. {0x01, 0x15, 0x13}, // channel = 12, Tf = 5060MHz (27), TBD
  465. {0x01, 0x15, 0x13}, // channel = 16, Tf = 5080MHz (28), TBD
  466. {0x01, 0x15, 0x13}, // channel = 34, Tf = 5170MHz (29), TBD
  467. {0x01, 0x55, 0x63}, // channel = 36, Tf = 5180MHz (30)
  468. {0x01, 0x55, 0x63}, // channel = 38, Tf = 5190MHz (31), TBD
  469. {0x02, 0xA5, 0x63}, // channel = 40, Tf = 5200MHz (32)
  470. {0x02, 0xA5, 0x63}, // channel = 42, Tf = 5210MHz (33), TBD
  471. {0x00, 0x05, 0x73}, // channel = 44, Tf = 5220MHz (34)
  472. {0x00, 0x05, 0x73}, // channel = 46, Tf = 5230MHz (35), TBD
  473. {0x01, 0x55, 0x73}, // channel = 48, Tf = 5240MHz (36)
  474. {0x02, 0xA5, 0x73}, // channel = 52, Tf = 5260MHz (37)
  475. {0x00, 0x05, 0x83}, // channel = 56, Tf = 5280MHz (38)
  476. {0x01, 0x55, 0x83}, // channel = 60, Tf = 5300MHz (39)
  477. {0x02, 0xA5, 0x83}, // channel = 64, Tf = 5320MHz (40)
  478. {0x02, 0xA5, 0x83}, // channel = 100, Tf = 5500MHz (41), TBD
  479. {0x02, 0xA5, 0x83}, // channel = 104, Tf = 5520MHz (42), TBD
  480. {0x02, 0xA5, 0x83}, // channel = 108, Tf = 5540MHz (43), TBD
  481. {0x02, 0xA5, 0x83}, // channel = 112, Tf = 5560MHz (44), TBD
  482. {0x02, 0xA5, 0x83}, // channel = 116, Tf = 5580MHz (45), TBD
  483. {0x02, 0xA5, 0x83}, // channel = 120, Tf = 5600MHz (46), TBD
  484. {0x02, 0xA5, 0x83}, // channel = 124, Tf = 5620MHz (47), TBD
  485. {0x02, 0xA5, 0x83}, // channel = 128, Tf = 5640MHz (48), TBD
  486. {0x02, 0xA5, 0x83}, // channel = 132, Tf = 5660MHz (49), TBD
  487. {0x02, 0xA5, 0x83}, // channel = 136, Tf = 5680MHz (50), TBD
  488. {0x02, 0xA5, 0x83}, // channel = 140, Tf = 5700MHz (51), TBD
  489. {0x00, 0x05, 0xF3}, // channel = 149, Tf = 5745MHz (52)
  490. {0x01, 0x56, 0x03}, // channel = 153, Tf = 5765MHz (53)
  491. {0x02, 0xA6, 0x03}, // channel = 157, Tf = 5785MHz (54)
  492. {0x00, 0x06, 0x03}, // channel = 161, Tf = 5805MHz (55)
  493. {0x00, 0x06, 0x03} // channel = 165, Tf = 5825MHz (56), TBD
  494. };
  495. BYTE abyVT3342_ChannelTable1[CB_MAX_CHANNEL][3] = {
  496. {0x01, 0x99, 0x94}, // channel = 1, Tf = 2412MHz
  497. {0x02, 0x44, 0x44}, // channel = 2, Tf = 2417MHz
  498. {0x02, 0xEE, 0xE4}, // channel = 3, Tf = 2422MHz
  499. {0x03, 0x99, 0x94}, // channel = 4, Tf = 2427MHz
  500. {0x00, 0x44, 0x44}, // channel = 5, Tf = 2432MHz
  501. {0x00, 0xEE, 0xE4}, // channel = 6, Tf = 2437MHz
  502. {0x01, 0x99, 0x94}, // channel = 7, Tf = 2442MHz
  503. {0x02, 0x44, 0x44}, // channel = 8, Tf = 2447MHz
  504. {0x02, 0xEE, 0xE4}, // channel = 9, Tf = 2452MHz
  505. {0x03, 0x99, 0x94}, // channel = 10, Tf = 2457MHz
  506. {0x00, 0x44, 0x44}, // channel = 11, Tf = 2462MHz
  507. {0x00, 0xEE, 0xE4}, // channel = 12, Tf = 2467MHz
  508. {0x01, 0x99, 0x94}, // channel = 13, Tf = 2472MHz
  509. {0x03, 0x33, 0x34}, // channel = 14, Tf = 2484MHz
  510. // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22)
  511. {0x00, 0x44, 0x44}, // channel = 183, Tf = 4915MHz (15), TBD
  512. {0x00, 0x44, 0x44}, // channel = 184, Tf = 4920MHz (16), TBD
  513. {0x00, 0x44, 0x44}, // channel = 185, Tf = 4925MHz (17), TBD
  514. {0x00, 0x44, 0x44}, // channel = 187, Tf = 4935MHz (18), TBD
  515. {0x00, 0x44, 0x44}, // channel = 188, Tf = 4940MHz (19), TBD
  516. {0x00, 0x44, 0x44}, // channel = 189, Tf = 4945MHz (20), TBD
  517. {0x00, 0x44, 0x44}, // channel = 192, Tf = 4960MHz (21), TBD
  518. {0x00, 0x44, 0x44}, // channel = 196, Tf = 4980MHz (22), TBD
  519. // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64,
  520. // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56)
  521. {0x00, 0x44, 0x44}, // channel = 7, Tf = 5035MHz (23), TBD
  522. {0x00, 0x44, 0x44}, // channel = 8, Tf = 5040MHz (24), TBD
  523. {0x00, 0x44, 0x44}, // channel = 9, Tf = 5045MHz (25), TBD
  524. {0x00, 0x44, 0x44}, // channel = 11, Tf = 5055MHz (26), TBD
  525. {0x00, 0x44, 0x44}, // channel = 12, Tf = 5060MHz (27), TBD
  526. {0x00, 0x44, 0x44}, // channel = 16, Tf = 5080MHz (28), TBD
  527. {0x00, 0x44, 0x44}, // channel = 34, Tf = 5170MHz (29), TBD
  528. {0x01, 0x55, 0x54}, // channel = 36, Tf = 5180MHz (30)
  529. {0x01, 0x55, 0x54}, // channel = 38, Tf = 5190MHz (31), TBD
  530. {0x02, 0xAA, 0xA4}, // channel = 40, Tf = 5200MHz (32)
  531. {0x02, 0xAA, 0xA4}, // channel = 42, Tf = 5210MHz (33), TBD
  532. {0x00, 0x00, 0x04}, // channel = 44, Tf = 5220MHz (34)
  533. {0x00, 0x00, 0x04}, // channel = 46, Tf = 5230MHz (35), TBD
  534. {0x01, 0x55, 0x54}, // channel = 48, Tf = 5240MHz (36)
  535. {0x02, 0xAA, 0xA4}, // channel = 52, Tf = 5260MHz (37)
  536. {0x00, 0x00, 0x04}, // channel = 56, Tf = 5280MHz (38)
  537. {0x01, 0x55, 0x54}, // channel = 60, Tf = 5300MHz (39)
  538. {0x02, 0xAA, 0xA4}, // channel = 64, Tf = 5320MHz (40)
  539. {0x02, 0xAA, 0xA4}, // channel = 100, Tf = 5500MHz (41), TBD
  540. {0x02, 0xAA, 0xA4}, // channel = 104, Tf = 5520MHz (42), TBD
  541. {0x02, 0xAA, 0xA4}, // channel = 108, Tf = 5540MHz (43), TBD
  542. {0x02, 0xAA, 0xA4}, // channel = 112, Tf = 5560MHz (44), TBD
  543. {0x02, 0xAA, 0xA4}, // channel = 116, Tf = 5580MHz (45), TBD
  544. {0x02, 0xAA, 0xA4}, // channel = 120, Tf = 5600MHz (46), TBD
  545. {0x02, 0xAA, 0xA4}, // channel = 124, Tf = 5620MHz (47), TBD
  546. {0x02, 0xAA, 0xA4}, // channel = 128, Tf = 5640MHz (48), TBD
  547. {0x02, 0xAA, 0xA4}, // channel = 132, Tf = 5660MHz (49), TBD
  548. {0x02, 0xAA, 0xA4}, // channel = 136, Tf = 5680MHz (50), TBD
  549. {0x02, 0xAA, 0xA4}, // channel = 140, Tf = 5700MHz (51), TBD
  550. {0x03, 0x00, 0x04}, // channel = 149, Tf = 5745MHz (52)
  551. {0x00, 0x55, 0x54}, // channel = 153, Tf = 5765MHz (53)
  552. {0x01, 0xAA, 0xA4}, // channel = 157, Tf = 5785MHz (54)
  553. {0x03, 0x00, 0x04}, // channel = 161, Tf = 5805MHz (55)
  554. {0x03, 0x00, 0x04} // channel = 165, Tf = 5825MHz (56), TBD
  555. };
  556. /*+
  557. *
  558. * Power Table
  559. *
  560. -*/
  561. const DWORD dwAL2230PowerTable[AL2230_PWR_IDX_LEN] = {
  562. 0x04040900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  563. 0x04041900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  564. 0x04042900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  565. 0x04043900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  566. 0x04044900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  567. 0x04045900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  568. 0x04046900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  569. 0x04047900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  570. 0x04048900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  571. 0x04049900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  572. 0x0404A900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  573. 0x0404B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  574. 0x0404C900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  575. 0x0404D900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  576. 0x0404E900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  577. 0x0404F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  578. 0x04050900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  579. 0x04051900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  580. 0x04052900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  581. 0x04053900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  582. 0x04054900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  583. 0x04055900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  584. 0x04056900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  585. 0x04057900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  586. 0x04058900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  587. 0x04059900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  588. 0x0405A900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  589. 0x0405B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  590. 0x0405C900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  591. 0x0405D900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  592. 0x0405E900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  593. 0x0405F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  594. 0x04060900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  595. 0x04061900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  596. 0x04062900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  597. 0x04063900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  598. 0x04064900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  599. 0x04065900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  600. 0x04066900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  601. 0x04067900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  602. 0x04068900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  603. 0x04069900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  604. 0x0406A900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  605. 0x0406B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  606. 0x0406C900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  607. 0x0406D900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  608. 0x0406E900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  609. 0x0406F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  610. 0x04070900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  611. 0x04071900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  612. 0x04072900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  613. 0x04073900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  614. 0x04074900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  615. 0x04075900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  616. 0x04076900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  617. 0x04077900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  618. 0x04078900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  619. 0x04079900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  620. 0x0407A900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  621. 0x0407B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  622. 0x0407C900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  623. 0x0407D900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  624. 0x0407E900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  625. 0x0407F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW
  626. };
  627. /*--------------------- Static Functions --------------------------*/
  628. /*--------------------- Export Variables --------------------------*/
  629. //{{ RobertYu:20050103, Channel 11a Number To Index
  630. // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22)
  631. // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64,
  632. // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56)
  633. const BYTE RFaby11aChannelIndex[200] = {
  634. // 1 2 3 4 5 6 7 8 9 10
  635. 00, 00, 00, 00, 00, 00, 23, 24, 25, 00, // 10
  636. 26, 27, 00, 00, 00, 28, 00, 00, 00, 00, // 20
  637. 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, // 30
  638. 00, 00, 00, 29, 00, 30, 00, 31, 00, 32, // 40
  639. 00, 33, 00, 34, 00, 35, 00, 36, 00, 00, // 50
  640. 00, 37, 00, 00, 00, 38, 00, 00, 00, 39, // 60
  641. 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, // 70
  642. 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, // 80
  643. 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, // 90
  644. 00, 00, 00, 00, 00, 00, 00, 00, 00, 41, //100
  645. 00, 00, 00, 42, 00, 00, 00, 43, 00, 00, //110
  646. 00, 44, 00, 00, 00, 45, 00, 00, 00, 46, //120
  647. 00, 00, 00, 47, 00, 00, 00, 48, 00, 00, //130
  648. 00, 49, 00, 00, 00, 50, 00, 00, 00, 51, //140
  649. 00, 00, 00, 00, 00, 00, 00, 00, 52, 00, //150
  650. 00, 00, 53, 00, 00, 00, 54, 00, 00, 00, //160
  651. 55, 00, 00, 00, 56, 00, 00, 00, 00, 00, //170
  652. 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, //180
  653. 00, 00, 15, 16, 17, 00, 18, 19, 20, 00, //190
  654. 00, 21, 00, 00, 00, 22, 00, 00, 00, 00 //200
  655. };
  656. //}} RobertYu
  657. /*--------------------- Export Functions --------------------------*/
  658. /*
  659. * Description: Write to IF/RF, by embeded programming
  660. *
  661. * Parameters:
  662. * In:
  663. * dwData - data to write
  664. * Out:
  665. * none
  666. *
  667. * Return Value: TRUE if succeeded; FALSE if failed.
  668. *
  669. */
  670. BOOL IFRFbWriteEmbeded (PSDevice pDevice, DWORD dwData)
  671. {
  672. BYTE pbyData[4];
  673. pbyData[0] = (BYTE)dwData;
  674. pbyData[1] = (BYTE)(dwData>>8);
  675. pbyData[2] = (BYTE)(dwData>>16);
  676. pbyData[3] = (BYTE)(dwData>>24);
  677. CONTROLnsRequestOut(pDevice,
  678. MESSAGE_TYPE_WRITE_IFRF,
  679. 0,
  680. 0,
  681. 4,
  682. pbyData
  683. );
  684. return TRUE;
  685. }
  686. /*
  687. * Description: Set Tx power
  688. *
  689. * Parameters:
  690. * In:
  691. * dwIoBase - I/O base address
  692. * dwRFPowerTable - RF Tx Power Setting
  693. * Out:
  694. * none
  695. *
  696. * Return Value: TRUE if succeeded; FALSE if failed.
  697. *
  698. */
  699. BOOL RFbSetPower (
  700. PSDevice pDevice,
  701. unsigned int uRATE,
  702. unsigned int uCH
  703. )
  704. {
  705. BOOL bResult = TRUE;
  706. BYTE byPwr = pDevice->byCCKPwr;
  707. if (pDevice->dwDiagRefCount != 0) {
  708. return TRUE;
  709. }
  710. switch (uRATE) {
  711. case RATE_1M:
  712. case RATE_2M:
  713. case RATE_5M:
  714. case RATE_11M:
  715. byPwr = pDevice->abyCCKPwrTbl[uCH-1];
  716. break;
  717. case RATE_6M:
  718. case RATE_9M:
  719. case RATE_18M:
  720. case RATE_24M:
  721. case RATE_36M:
  722. case RATE_48M:
  723. case RATE_54M:
  724. if (uCH > CB_MAX_CHANNEL_24G) {
  725. byPwr = pDevice->abyOFDMAPwrTbl[uCH-15];
  726. } else {
  727. byPwr = pDevice->abyOFDMPwrTbl[uCH-1];
  728. }
  729. break;
  730. }
  731. bResult = RFbRawSetPower(pDevice, byPwr, uRATE);
  732. return bResult;
  733. }
  734. /*
  735. * Description: Set Tx power
  736. *
  737. * Parameters:
  738. * In:
  739. * dwIoBase - I/O base address
  740. * dwRFPowerTable - RF Tx Power Setting
  741. * Out:
  742. * none
  743. *
  744. * Return Value: TRUE if succeeded; FALSE if failed.
  745. *
  746. */
  747. BOOL RFbRawSetPower (
  748. PSDevice pDevice,
  749. BYTE byPwr,
  750. unsigned int uRATE
  751. )
  752. {
  753. BOOL bResult = TRUE;
  754. if (pDevice->byCurPwr == byPwr)
  755. return TRUE;
  756. pDevice->byCurPwr = byPwr;
  757. switch (pDevice->byRFType) {
  758. case RF_AL2230 :
  759. if (pDevice->byCurPwr >= AL2230_PWR_IDX_LEN)
  760. return FALSE;
  761. bResult &= IFRFbWriteEmbeded(pDevice, dwAL2230PowerTable[pDevice->byCurPwr]);
  762. if (uRATE <= RATE_11M)
  763. bResult &= IFRFbWriteEmbeded(pDevice, 0x0001B400+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
  764. else
  765. bResult &= IFRFbWriteEmbeded(pDevice, 0x0005A400+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
  766. break;
  767. case RF_AL2230S :
  768. if (pDevice->byCurPwr >= AL2230_PWR_IDX_LEN)
  769. return FALSE;
  770. bResult &= IFRFbWriteEmbeded(pDevice, dwAL2230PowerTable[pDevice->byCurPwr]);
  771. if (uRATE <= RATE_11M) {
  772. bResult &= IFRFbWriteEmbeded(pDevice, 0x040C1400+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
  773. bResult &= IFRFbWriteEmbeded(pDevice, 0x00299B00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
  774. }else {
  775. bResult &= IFRFbWriteEmbeded(pDevice, 0x0005A400+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
  776. bResult &= IFRFbWriteEmbeded(pDevice, 0x00099B00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
  777. }
  778. break;
  779. case RF_AIROHA7230:
  780. {
  781. DWORD dwMax7230Pwr;
  782. if (uRATE <= RATE_11M) { //RobertYu:20060426, for better 11b mask
  783. bResult &= IFRFbWriteEmbeded(pDevice, 0x111BB900+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW);
  784. }
  785. else {
  786. bResult &= IFRFbWriteEmbeded(pDevice, 0x221BB900+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW);
  787. }
  788. if (pDevice->byCurPwr > AL7230_PWR_IDX_LEN) return FALSE;
  789. // 0x080F1B00 for 3 wire control TxGain(D10) and 0x31 as TX Gain value
  790. dwMax7230Pwr = 0x080C0B00 | ( (pDevice->byCurPwr) << 12 ) |
  791. (BY_AL7230_REG_LEN << 3 ) | IFREGCTL_REGW;
  792. bResult &= IFRFbWriteEmbeded(pDevice, dwMax7230Pwr);
  793. break;
  794. }
  795. break;
  796. case RF_VT3226: //RobertYu:20051111, VT3226C0 and before
  797. {
  798. DWORD dwVT3226Pwr;
  799. if (pDevice->byCurPwr >= VT3226_PWR_IDX_LEN)
  800. return FALSE;
  801. dwVT3226Pwr = ((0x3F-pDevice->byCurPwr) << 20 ) | ( 0x17 << 8 ) /* Reg7 */ |
  802. (BY_VT3226_REG_LEN << 3 ) | IFREGCTL_REGW;
  803. bResult &= IFRFbWriteEmbeded(pDevice, dwVT3226Pwr);
  804. break;
  805. }
  806. case RF_VT3226D0: //RobertYu:20051228
  807. {
  808. DWORD dwVT3226Pwr;
  809. if (pDevice->byCurPwr >= VT3226_PWR_IDX_LEN)
  810. return FALSE;
  811. if (uRATE <= RATE_11M) {
  812. dwVT3226Pwr = ((0x3F-pDevice->byCurPwr) << 20 ) | ( 0xE07 << 8 ) /* Reg7 */ | //RobertYu:20060420, TWIF 1.10
  813. (BY_VT3226_REG_LEN << 3 ) | IFREGCTL_REGW;
  814. bResult &= IFRFbWriteEmbeded(pDevice, dwVT3226Pwr);
  815. bResult &= IFRFbWriteEmbeded(pDevice, 0x03C6A200+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW);
  816. if (pDevice->sMgmtObj.eScanState != WMAC_NO_SCANNING) {
  817. // scanning, the channel number is pDevice->uScanChannel
  818. DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"@@@@ RFbRawSetPower> 11B mode uCurrChannel[%d]\n", pDevice->sMgmtObj.uScanChannel);
  819. bResult &= IFRFbWriteEmbeded(pDevice, dwVT3226D0LoCurrentTable[pDevice->sMgmtObj.uScanChannel-1]); //RobertYu:20060420, sometimes didn't change channel just set power with different rate
  820. } else {
  821. DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"@@@@ RFbRawSetPower> 11B mode uCurrChannel[%d]\n", pDevice->sMgmtObj.uCurrChannel);
  822. bResult &= IFRFbWriteEmbeded(pDevice, dwVT3226D0LoCurrentTable[pDevice->sMgmtObj.uCurrChannel-1]); //RobertYu:20060420, sometimes didn't change channel just set power with different rate
  823. }
  824. bResult &= IFRFbWriteEmbeded(pDevice, 0x015C0800+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW); //RobertYu:20060420, ok now, new switching power (mini-pci can have bigger power consumption)
  825. } else {
  826. DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"@@@@ RFbRawSetPower> 11G mode\n");
  827. dwVT3226Pwr = ((0x3F-pDevice->byCurPwr) << 20 ) | ( 0x7 << 8 ) /* Reg7 */ | //RobertYu:20060420, TWIF 1.10
  828. (BY_VT3226_REG_LEN << 3 ) | IFREGCTL_REGW;
  829. bResult &= IFRFbWriteEmbeded(pDevice, dwVT3226Pwr);
  830. bResult &= IFRFbWriteEmbeded(pDevice, 0x00C6A200+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW); //RobertYu:20060327
  831. bResult &= IFRFbWriteEmbeded(pDevice, 0x016BC600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW); //RobertYu:20060111
  832. bResult &= IFRFbWriteEmbeded(pDevice, 0x00900800+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW); //RobertYu:20060111
  833. }
  834. break;
  835. }
  836. //{{RobertYu:20060609
  837. case RF_VT3342A0:
  838. {
  839. DWORD dwVT3342Pwr;
  840. if (pDevice->byCurPwr >= VT3342_PWR_IDX_LEN)
  841. return FALSE;
  842. dwVT3342Pwr = ((0x3F-pDevice->byCurPwr) << 20 ) | ( 0x27 << 8 ) /* Reg7 */ |
  843. (BY_VT3342_REG_LEN << 3 ) | IFREGCTL_REGW;
  844. bResult &= IFRFbWriteEmbeded(pDevice, dwVT3342Pwr);
  845. break;
  846. }
  847. default :
  848. break;
  849. }
  850. return bResult;
  851. }
  852. /*+
  853. *
  854. * Routine Description:
  855. * Translate RSSI to dBm
  856. *
  857. * Parameters:
  858. * In:
  859. * pDevice - The adapter to be translated
  860. * byCurrRSSI - RSSI to be translated
  861. * Out:
  862. * pdwdbm - Translated dbm number
  863. *
  864. * Return Value: none
  865. *
  866. -*/
  867. void
  868. RFvRSSITodBm (
  869. PSDevice pDevice,
  870. BYTE byCurrRSSI,
  871. long * pldBm
  872. )
  873. {
  874. BYTE byIdx = (((byCurrRSSI & 0xC0) >> 6) & 0x03);
  875. signed long b = (byCurrRSSI & 0x3F);
  876. signed long a = 0;
  877. BYTE abyAIROHARF[4] = {0, 18, 0, 40};
  878. switch (pDevice->byRFType) {
  879. case RF_AL2230:
  880. case RF_AL2230S:
  881. case RF_AIROHA7230:
  882. case RF_VT3226: //RobertYu:20051111
  883. case RF_VT3226D0:
  884. case RF_VT3342A0: //RobertYu:20060609
  885. a = abyAIROHARF[byIdx];
  886. break;
  887. default:
  888. break;
  889. }
  890. *pldBm = -1 * (a + b * 2);
  891. }
  892. void
  893. RFbRFTableDownload (
  894. PSDevice pDevice
  895. )
  896. {
  897. WORD wLength1 = 0,wLength2 = 0 ,wLength3 = 0;
  898. PBYTE pbyAddr1 = NULL,pbyAddr2 = NULL,pbyAddr3 = NULL;
  899. WORD wLength,wValue;
  900. BYTE abyArray[256];
  901. switch ( pDevice->byRFType ) {
  902. case RF_AL2230:
  903. case RF_AL2230S:
  904. wLength1 = CB_AL2230_INIT_SEQ * 3;
  905. wLength2 = CB_MAX_CHANNEL_24G * 3;
  906. wLength3 = CB_MAX_CHANNEL_24G * 3;
  907. pbyAddr1 = &(abyAL2230InitTable[0][0]);
  908. pbyAddr2 = &(abyAL2230ChannelTable0[0][0]);
  909. pbyAddr3 = &(abyAL2230ChannelTable1[0][0]);
  910. break;
  911. case RF_AIROHA7230:
  912. wLength1 = CB_AL7230_INIT_SEQ * 3;
  913. wLength2 = CB_MAX_CHANNEL * 3;
  914. wLength3 = CB_MAX_CHANNEL * 3;
  915. pbyAddr1 = &(abyAL7230InitTable[0][0]);
  916. pbyAddr2 = &(abyAL7230ChannelTable0[0][0]);
  917. pbyAddr3 = &(abyAL7230ChannelTable1[0][0]);
  918. break;
  919. case RF_VT3226: //RobertYu:20051111
  920. wLength1 = CB_VT3226_INIT_SEQ * 3;
  921. wLength2 = CB_MAX_CHANNEL_24G * 3;
  922. wLength3 = CB_MAX_CHANNEL_24G * 3;
  923. pbyAddr1 = &(abyVT3226_InitTable[0][0]);
  924. pbyAddr2 = &(abyVT3226_ChannelTable0[0][0]);
  925. pbyAddr3 = &(abyVT3226_ChannelTable1[0][0]);
  926. break;
  927. case RF_VT3226D0: //RobertYu:20051114
  928. wLength1 = CB_VT3226_INIT_SEQ * 3;
  929. wLength2 = CB_MAX_CHANNEL_24G * 3;
  930. wLength3 = CB_MAX_CHANNEL_24G * 3;
  931. pbyAddr1 = &(abyVT3226D0_InitTable[0][0]);
  932. pbyAddr2 = &(abyVT3226_ChannelTable0[0][0]);
  933. pbyAddr3 = &(abyVT3226_ChannelTable1[0][0]);
  934. break;
  935. case RF_VT3342A0: //RobertYu:20060609
  936. wLength1 = CB_VT3342_INIT_SEQ * 3;
  937. wLength2 = CB_MAX_CHANNEL * 3;
  938. wLength3 = CB_MAX_CHANNEL * 3;
  939. pbyAddr1 = &(abyVT3342A0_InitTable[0][0]);
  940. pbyAddr2 = &(abyVT3342_ChannelTable0[0][0]);
  941. pbyAddr3 = &(abyVT3342_ChannelTable1[0][0]);
  942. break;
  943. }
  944. //Init Table
  945. memcpy(abyArray, pbyAddr1, wLength1);
  946. CONTROLnsRequestOut(pDevice,
  947. MESSAGE_TYPE_WRITE,
  948. 0,
  949. MESSAGE_REQUEST_RF_INIT,
  950. wLength1,
  951. abyArray
  952. );
  953. //Channle Table 0
  954. wValue = 0;
  955. while ( wLength2 > 0 ) {
  956. if ( wLength2 >= 64 ) {
  957. wLength = 64;
  958. } else {
  959. wLength = wLength2;
  960. }
  961. memcpy(abyArray, pbyAddr2, wLength);
  962. CONTROLnsRequestOut(pDevice,
  963. MESSAGE_TYPE_WRITE,
  964. wValue,
  965. MESSAGE_REQUEST_RF_CH0,
  966. wLength,
  967. abyArray);
  968. wLength2 -= wLength;
  969. wValue += wLength;
  970. pbyAddr2 += wLength;
  971. }
  972. //Channel table 1
  973. wValue = 0;
  974. while ( wLength3 > 0 ) {
  975. if ( wLength3 >= 64 ) {
  976. wLength = 64;
  977. } else {
  978. wLength = wLength3;
  979. }
  980. memcpy(abyArray, pbyAddr3, wLength);
  981. CONTROLnsRequestOut(pDevice,
  982. MESSAGE_TYPE_WRITE,
  983. wValue,
  984. MESSAGE_REQUEST_RF_CH1,
  985. wLength,
  986. abyArray);
  987. wLength3 -= wLength;
  988. wValue += wLength;
  989. pbyAddr3 += wLength;
  990. }
  991. //7230 needs 2 InitTable and 3 Channel Table
  992. if ( pDevice->byRFType == RF_AIROHA7230 ) {
  993. wLength1 = CB_AL7230_INIT_SEQ * 3;
  994. wLength2 = CB_MAX_CHANNEL * 3;
  995. pbyAddr1 = &(abyAL7230InitTableAMode[0][0]);
  996. pbyAddr2 = &(abyAL7230ChannelTable2[0][0]);
  997. memcpy(abyArray, pbyAddr1, wLength1);
  998. //Init Table 2
  999. CONTROLnsRequestOut(pDevice,
  1000. MESSAGE_TYPE_WRITE,
  1001. 0,
  1002. MESSAGE_REQUEST_RF_INIT2,
  1003. wLength1,
  1004. abyArray);
  1005. //Channle Table 0
  1006. wValue = 0;
  1007. while ( wLength2 > 0 ) {
  1008. if ( wLength2 >= 64 ) {
  1009. wLength = 64;
  1010. } else {
  1011. wLength = wLength2;
  1012. }
  1013. memcpy(abyArray, pbyAddr2, wLength);
  1014. CONTROLnsRequestOut(pDevice,
  1015. MESSAGE_TYPE_WRITE,
  1016. wValue,
  1017. MESSAGE_REQUEST_RF_CH2,
  1018. wLength,
  1019. abyArray);
  1020. wLength2 -= wLength;
  1021. wValue += wLength;
  1022. pbyAddr2 += wLength;
  1023. }
  1024. }
  1025. }
  1026. // RobertYu:20060412, TWIF1.11 adjust LO Current for 11b mode
  1027. BOOL s_bVT3226D0_11bLoCurrentAdjust(
  1028. PSDevice pDevice,
  1029. BYTE byChannel,
  1030. BOOL b11bMode)
  1031. {
  1032. BOOL bResult;
  1033. bResult = TRUE;
  1034. if( b11bMode )
  1035. bResult &= IFRFbWriteEmbeded(pDevice, dwVT3226D0LoCurrentTable[byChannel-1]);
  1036. else
  1037. bResult &= IFRFbWriteEmbeded(pDevice, 0x016BC600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW); //RobertYu:20060412
  1038. return bResult;
  1039. }