rf.c 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107
  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. * IFRFbWriteEmbedded - Embedded write RF register via MAC
  30. *
  31. * Revision History:
  32. *
  33. */
  34. #include "mac.h"
  35. #include "srom.h"
  36. #include "rf.h"
  37. #include "baseband.h"
  38. /*--------------------- Static Definitions -------------------------*/
  39. #define BY_AL2230_REG_LEN 23 //24bit
  40. #define CB_AL2230_INIT_SEQ 15
  41. #define SWITCH_CHANNEL_DELAY_AL2230 200 //us
  42. #define AL2230_PWR_IDX_LEN 64
  43. #define BY_AL7230_REG_LEN 23 //24bit
  44. #define CB_AL7230_INIT_SEQ 16
  45. #define SWITCH_CHANNEL_DELAY_AL7230 200 //us
  46. #define AL7230_PWR_IDX_LEN 64
  47. /*--------------------- Static Classes ----------------------------*/
  48. /*--------------------- Static Variables --------------------------*/
  49. static const unsigned long dwAL2230InitTable[CB_AL2230_INIT_SEQ] = {
  50. 0x03F79000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
  51. 0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
  52. 0x01A00200+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
  53. 0x00FFF300+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
  54. 0x0005A400+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
  55. 0x0F4DC500+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
  56. 0x0805B600+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
  57. 0x0146C700+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
  58. 0x00068800+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
  59. 0x0403B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
  60. 0x00DBBA00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
  61. 0x00099B00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
  62. 0x0BDFFC00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  63. 0x00000D00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  64. 0x00580F00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW
  65. };
  66. static const unsigned long dwAL2230ChannelTable0[CB_MAX_CHANNEL] = {
  67. 0x03F79000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 1, Tf = 2412MHz
  68. 0x03F79000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 2, Tf = 2417MHz
  69. 0x03E79000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 3, Tf = 2422MHz
  70. 0x03E79000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 4, Tf = 2427MHz
  71. 0x03F7A000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 5, Tf = 2432MHz
  72. 0x03F7A000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 6, Tf = 2437MHz
  73. 0x03E7A000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 7, Tf = 2442MHz
  74. 0x03E7A000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 8, Tf = 2447MHz
  75. 0x03F7B000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 9, Tf = 2452MHz
  76. 0x03F7B000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 10, Tf = 2457MHz
  77. 0x03E7B000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 11, Tf = 2462MHz
  78. 0x03E7B000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 12, Tf = 2467MHz
  79. 0x03F7C000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 13, Tf = 2472MHz
  80. 0x03E7C000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW // channel = 14, Tf = 2412M
  81. };
  82. static const unsigned long dwAL2230ChannelTable1[CB_MAX_CHANNEL] = {
  83. 0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 1, Tf = 2412MHz
  84. 0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 2, Tf = 2417MHz
  85. 0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 3, Tf = 2422MHz
  86. 0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 4, Tf = 2427MHz
  87. 0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 5, Tf = 2432MHz
  88. 0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 6, Tf = 2437MHz
  89. 0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 7, Tf = 2442MHz
  90. 0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 8, Tf = 2447MHz
  91. 0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 9, Tf = 2452MHz
  92. 0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 10, Tf = 2457MHz
  93. 0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 11, Tf = 2462MHz
  94. 0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 12, Tf = 2467MHz
  95. 0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 13, Tf = 2472MHz
  96. 0x06666100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW // channel = 14, Tf = 2412M
  97. };
  98. static unsigned long dwAL2230PowerTable[AL2230_PWR_IDX_LEN] = {
  99. 0x04040900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  100. 0x04041900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  101. 0x04042900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  102. 0x04043900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  103. 0x04044900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  104. 0x04045900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  105. 0x04046900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  106. 0x04047900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  107. 0x04048900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  108. 0x04049900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  109. 0x0404A900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  110. 0x0404B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  111. 0x0404C900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  112. 0x0404D900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  113. 0x0404E900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  114. 0x0404F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  115. 0x04050900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  116. 0x04051900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  117. 0x04052900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  118. 0x04053900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  119. 0x04054900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  120. 0x04055900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  121. 0x04056900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  122. 0x04057900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  123. 0x04058900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  124. 0x04059900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  125. 0x0405A900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  126. 0x0405B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  127. 0x0405C900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  128. 0x0405D900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  129. 0x0405E900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  130. 0x0405F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  131. 0x04060900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  132. 0x04061900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  133. 0x04062900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  134. 0x04063900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  135. 0x04064900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  136. 0x04065900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  137. 0x04066900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  138. 0x04067900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  139. 0x04068900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  140. 0x04069900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  141. 0x0406A900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  142. 0x0406B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  143. 0x0406C900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  144. 0x0406D900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  145. 0x0406E900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  146. 0x0406F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  147. 0x04070900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  148. 0x04071900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  149. 0x04072900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  150. 0x04073900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  151. 0x04074900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  152. 0x04075900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  153. 0x04076900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  154. 0x04077900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  155. 0x04078900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  156. 0x04079900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  157. 0x0407A900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  158. 0x0407B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  159. 0x0407C900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  160. 0x0407D900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  161. 0x0407E900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
  162. 0x0407F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW
  163. };
  164. //{{ RobertYu:20050104
  165. // 40MHz reference frequency
  166. // Need to Pull PLLON(PE3) low when writing channel registers through 3-wire.
  167. static const unsigned long dwAL7230InitTable[CB_AL7230_INIT_SEQ] = {
  168. 0x00379000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Channel1 // Need modify for 11a
  169. 0x13333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Channel1 // Need modify for 11a
  170. 0x841FF200+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11a: 451FE2
  171. 0x3FDFA300+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11a: 5FDFA3
  172. 0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // 11b/g // Need modify for 11a
  173. // RoberYu:20050113, Rev0.47 Regsiter Setting Guide
  174. 0x802B5500+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11a: 8D1B55
  175. 0x56AF3600+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
  176. 0xCE020700+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11a: 860207
  177. 0x6EBC0800+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
  178. 0x221BB900+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
  179. 0xE0000A00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11a: E0600A
  180. 0x08031B00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // init 0x080B1B00 => 0x080F1B00 for 3 wire control TxGain(D10)
  181. // RoberYu:20050113, Rev0.47 Regsiter Setting Guide
  182. 0x000A3C00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11a: 00143C
  183. 0xFFFFFD00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
  184. 0x00000E00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
  185. 0x1ABA8F00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW // Need modify for 11a: 12BACF
  186. };
  187. static const unsigned long dwAL7230InitTableAMode[CB_AL7230_INIT_SEQ] = {
  188. 0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Channel184 // Need modify for 11b/g
  189. 0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Channel184 // Need modify for 11b/g
  190. 0x451FE200+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11b/g
  191. 0x5FDFA300+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11b/g
  192. 0x67F78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // 11a // Need modify for 11b/g
  193. 0x853F5500+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11b/g, RoberYu:20050113
  194. 0x56AF3600+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
  195. 0xCE020700+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11b/g
  196. 0x6EBC0800+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
  197. 0x221BB900+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
  198. 0xE0600A00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11b/g
  199. 0x08031B00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // init 0x080B1B00 => 0x080F1B00 for 3 wire control TxGain(D10)
  200. 0x00147C00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11b/g
  201. 0xFFFFFD00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
  202. 0x00000E00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
  203. 0x12BACF00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW // Need modify for 11b/g
  204. };
  205. static const unsigned long dwAL7230ChannelTable0[CB_MAX_CHANNEL] = {
  206. 0x00379000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 1, Tf = 2412MHz
  207. 0x00379000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 2, Tf = 2417MHz
  208. 0x00379000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 3, Tf = 2422MHz
  209. 0x00379000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 4, Tf = 2427MHz
  210. 0x0037A000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 5, Tf = 2432MHz
  211. 0x0037A000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 6, Tf = 2437MHz
  212. 0x0037A000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 7, Tf = 2442MHz
  213. 0x0037A000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 8, Tf = 2447MHz //RobertYu: 20050218, update for APNode 0.49
  214. 0x0037B000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 9, Tf = 2452MHz //RobertYu: 20050218, update for APNode 0.49
  215. 0x0037B000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 10, Tf = 2457MHz //RobertYu: 20050218, update for APNode 0.49
  216. 0x0037B000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 11, Tf = 2462MHz //RobertYu: 20050218, update for APNode 0.49
  217. 0x0037B000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 12, Tf = 2467MHz //RobertYu: 20050218, update for APNode 0.49
  218. 0x0037C000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 13, Tf = 2472MHz //RobertYu: 20050218, update for APNode 0.49
  219. 0x0037C000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 14, Tf = 2484MHz
  220. // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22)
  221. 0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 183, Tf = 4915MHz (15)
  222. 0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 184, Tf = 4920MHz (16)
  223. 0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 185, Tf = 4925MHz (17)
  224. 0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 187, Tf = 4935MHz (18)
  225. 0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 188, Tf = 4940MHz (19)
  226. 0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 189, Tf = 4945MHz (20)
  227. 0x0FF53000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 192, Tf = 4960MHz (21)
  228. 0x0FF53000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 196, Tf = 4980MHz (22)
  229. // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64,
  230. // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56)
  231. 0x0FF54000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 7, Tf = 5035MHz (23)
  232. 0x0FF54000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 8, Tf = 5040MHz (24)
  233. 0x0FF54000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 9, Tf = 5045MHz (25)
  234. 0x0FF54000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 11, Tf = 5055MHz (26)
  235. 0x0FF54000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 12, Tf = 5060MHz (27)
  236. 0x0FF55000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 16, Tf = 5080MHz (28)
  237. 0x0FF56000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 34, Tf = 5170MHz (29)
  238. 0x0FF56000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 36, Tf = 5180MHz (30)
  239. 0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 38, Tf = 5190MHz (31) //RobertYu: 20050218, update for APNode 0.49
  240. 0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 40, Tf = 5200MHz (32)
  241. 0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 42, Tf = 5210MHz (33)
  242. 0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 44, Tf = 5220MHz (34)
  243. 0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 46, Tf = 5230MHz (35)
  244. 0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 48, Tf = 5240MHz (36)
  245. 0x0FF58000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 52, Tf = 5260MHz (37)
  246. 0x0FF58000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 56, Tf = 5280MHz (38)
  247. 0x0FF58000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 60, Tf = 5300MHz (39)
  248. 0x0FF59000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 64, Tf = 5320MHz (40)
  249. 0x0FF5C000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 100, Tf = 5500MHz (41)
  250. 0x0FF5C000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 104, Tf = 5520MHz (42)
  251. 0x0FF5C000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 108, Tf = 5540MHz (43)
  252. 0x0FF5D000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 112, Tf = 5560MHz (44)
  253. 0x0FF5D000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 116, Tf = 5580MHz (45)
  254. 0x0FF5D000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 120, Tf = 5600MHz (46)
  255. 0x0FF5E000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 124, Tf = 5620MHz (47)
  256. 0x0FF5E000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 128, Tf = 5640MHz (48)
  257. 0x0FF5E000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 132, Tf = 5660MHz (49)
  258. 0x0FF5F000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 136, Tf = 5680MHz (50)
  259. 0x0FF5F000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 140, Tf = 5700MHz (51)
  260. 0x0FF60000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 149, Tf = 5745MHz (52)
  261. 0x0FF60000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 153, Tf = 5765MHz (53)
  262. 0x0FF60000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 157, Tf = 5785MHz (54)
  263. 0x0FF61000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 161, Tf = 5805MHz (55)
  264. 0x0FF61000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW // channel = 165, Tf = 5825MHz (56)
  265. };
  266. static const unsigned long dwAL7230ChannelTable1[CB_MAX_CHANNEL] = {
  267. 0x13333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 1, Tf = 2412MHz
  268. 0x1B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 2, Tf = 2417MHz
  269. 0x03333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 3, Tf = 2422MHz
  270. 0x0B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 4, Tf = 2427MHz
  271. 0x13333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 5, Tf = 2432MHz
  272. 0x1B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 6, Tf = 2437MHz
  273. 0x03333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 7, Tf = 2442MHz
  274. 0x0B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 8, Tf = 2447MHz
  275. 0x13333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 9, Tf = 2452MHz
  276. 0x1B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 10, Tf = 2457MHz
  277. 0x03333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 11, Tf = 2462MHz
  278. 0x0B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 12, Tf = 2467MHz
  279. 0x13333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 13, Tf = 2472MHz
  280. 0x06666100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 14, Tf = 2484MHz
  281. // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22)
  282. 0x1D555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 183, Tf = 4915MHz (15)
  283. 0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 184, Tf = 4920MHz (16)
  284. 0x02AAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 185, Tf = 4925MHz (17)
  285. 0x08000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 187, Tf = 4935MHz (18)
  286. 0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 188, Tf = 4940MHz (19)
  287. 0x0D555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 189, Tf = 4945MHz (20)
  288. 0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 192, Tf = 4960MHz (21)
  289. 0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 196, Tf = 4980MHz (22)
  290. // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64,
  291. // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56)
  292. 0x1D555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 7, Tf = 5035MHz (23)
  293. 0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 8, Tf = 5040MHz (24)
  294. 0x02AAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 9, Tf = 5045MHz (25)
  295. 0x08000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 11, Tf = 5055MHz (26)
  296. 0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 12, Tf = 5060MHz (27)
  297. 0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 16, Tf = 5080MHz (28)
  298. 0x05555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 34, Tf = 5170MHz (29)
  299. 0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 36, Tf = 5180MHz (30)
  300. 0x10000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 38, Tf = 5190MHz (31)
  301. 0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 40, Tf = 5200MHz (32)
  302. 0x1AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 42, Tf = 5210MHz (33)
  303. 0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 44, Tf = 5220MHz (34)
  304. 0x05555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 46, Tf = 5230MHz (35)
  305. 0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 48, Tf = 5240MHz (36)
  306. 0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 52, Tf = 5260MHz (37)
  307. 0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 56, Tf = 5280MHz (38)
  308. 0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 60, Tf = 5300MHz (39)
  309. 0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 64, Tf = 5320MHz (40)
  310. 0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 100, Tf = 5500MHz (41)
  311. 0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 104, Tf = 5520MHz (42)
  312. 0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 108, Tf = 5540MHz (43)
  313. 0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 112, Tf = 5560MHz (44)
  314. 0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 116, Tf = 5580MHz (45)
  315. 0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 120, Tf = 5600MHz (46)
  316. 0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 124, Tf = 5620MHz (47)
  317. 0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 128, Tf = 5640MHz (48)
  318. 0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 132, Tf = 5660MHz (49)
  319. 0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 136, Tf = 5680MHz (50)
  320. 0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 140, Tf = 5700MHz (51)
  321. 0x18000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 149, Tf = 5745MHz (52)
  322. 0x02AAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 153, Tf = 5765MHz (53)
  323. 0x0D555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 157, Tf = 5785MHz (54)
  324. 0x18000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 161, Tf = 5805MHz (55)
  325. 0x02AAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW // channel = 165, Tf = 5825MHz (56)
  326. };
  327. static const unsigned long dwAL7230ChannelTable2[CB_MAX_CHANNEL] = {
  328. 0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 1, Tf = 2412MHz
  329. 0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 2, Tf = 2417MHz
  330. 0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 3, Tf = 2422MHz
  331. 0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 4, Tf = 2427MHz
  332. 0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 5, Tf = 2432MHz
  333. 0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 6, Tf = 2437MHz
  334. 0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 7, Tf = 2442MHz
  335. 0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 8, Tf = 2447MHz
  336. 0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 9, Tf = 2452MHz
  337. 0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 10, Tf = 2457MHz
  338. 0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 11, Tf = 2462MHz
  339. 0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 12, Tf = 2467MHz
  340. 0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 13, Tf = 2472MHz
  341. 0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 14, Tf = 2484MHz
  342. // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22)
  343. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 183, Tf = 4915MHz (15)
  344. 0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 184, Tf = 4920MHz (16)
  345. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 185, Tf = 4925MHz (17)
  346. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 187, Tf = 4935MHz (18)
  347. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 188, Tf = 4940MHz (19)
  348. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 189, Tf = 4945MHz (20)
  349. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 192, Tf = 4960MHz (21)
  350. 0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 196, Tf = 4980MHz (22)
  351. // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64,
  352. // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56)
  353. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 7, Tf = 5035MHz (23)
  354. 0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 8, Tf = 5040MHz (24)
  355. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 9, Tf = 5045MHz (25)
  356. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 11, Tf = 5055MHz (26)
  357. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 12, Tf = 5060MHz (27)
  358. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 16, Tf = 5080MHz (28)
  359. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 34, Tf = 5170MHz (29)
  360. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 36, Tf = 5180MHz (30)
  361. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 38, Tf = 5190MHz (31)
  362. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 40, Tf = 5200MHz (32)
  363. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 42, Tf = 5210MHz (33)
  364. 0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 44, Tf = 5220MHz (34)
  365. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 46, Tf = 5230MHz (35)
  366. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 48, Tf = 5240MHz (36)
  367. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 52, Tf = 5260MHz (37)
  368. 0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 56, Tf = 5280MHz (38)
  369. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 60, Tf = 5300MHz (39)
  370. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 64, Tf = 5320MHz (40)
  371. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 100, Tf = 5500MHz (41)
  372. 0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 104, Tf = 5520MHz (42)
  373. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 108, Tf = 5540MHz (43)
  374. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 112, Tf = 5560MHz (44)
  375. 0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 116, Tf = 5580MHz (45)
  376. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 120, Tf = 5600MHz (46)
  377. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 124, Tf = 5620MHz (47)
  378. 0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 128, Tf = 5640MHz (48)
  379. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 132, Tf = 5660MHz (49)
  380. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 136, Tf = 5680MHz (50)
  381. 0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 140, Tf = 5700MHz (51)
  382. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 149, Tf = 5745MHz (52)
  383. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 153, Tf = 5765MHz (53)
  384. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 157, Tf = 5785MHz (54)
  385. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 161, Tf = 5805MHz (55)
  386. 0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW // channel = 165, Tf = 5825MHz (56)
  387. };
  388. //}} RobertYu
  389. /*--------------------- Static Functions --------------------------*/
  390. /*
  391. * Description: AIROHA IFRF chip init function
  392. *
  393. * Parameters:
  394. * In:
  395. * dwIoBase - I/O base address
  396. * Out:
  397. * none
  398. *
  399. * Return Value: true if succeeded; false if failed.
  400. *
  401. */
  402. static bool s_bAL7230Init(void __iomem *dwIoBase)
  403. {
  404. int ii;
  405. bool bResult;
  406. bResult = true;
  407. //3-wire control for normal mode
  408. VNSvOutPortB(dwIoBase + MAC_REG_SOFTPWRCTL, 0);
  409. MACvWordRegBitsOn(dwIoBase, MAC_REG_SOFTPWRCTL, (SOFTPWRCTL_SWPECTI |
  410. SOFTPWRCTL_TXPEINV));
  411. BBvPowerSaveModeOFF(dwIoBase); //RobertYu:20050106, have DC value for Calibration
  412. for (ii = 0; ii < CB_AL7230_INIT_SEQ; ii++)
  413. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230InitTable[ii]);
  414. // PLL On
  415. MACvWordRegBitsOn(dwIoBase, MAC_REG_SOFTPWRCTL, SOFTPWRCTL_SWPE3);
  416. //Calibration
  417. MACvTimer0MicroSDelay(dwIoBase, 150);//150us
  418. bResult &= IFRFbWriteEmbedded(dwIoBase, (0x9ABA8F00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW)); //TXDCOC:active, RCK:disable
  419. MACvTimer0MicroSDelay(dwIoBase, 30);//30us
  420. bResult &= IFRFbWriteEmbedded(dwIoBase, (0x3ABA8F00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW)); //TXDCOC:disable, RCK:active
  421. MACvTimer0MicroSDelay(dwIoBase, 30);//30us
  422. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230InitTable[CB_AL7230_INIT_SEQ-1]); //TXDCOC:disable, RCK:disable
  423. MACvWordRegBitsOn(dwIoBase, MAC_REG_SOFTPWRCTL, (SOFTPWRCTL_SWPE3 |
  424. SOFTPWRCTL_SWPE2 |
  425. SOFTPWRCTL_SWPECTI |
  426. SOFTPWRCTL_TXPEINV));
  427. BBvPowerSaveModeON(dwIoBase); // RobertYu:20050106
  428. // PE1: TX_ON, PE2: RX_ON, PE3: PLLON
  429. //3-wire control for power saving mode
  430. VNSvOutPortB(dwIoBase + MAC_REG_PSPWRSIG, (PSSIG_WPE3 | PSSIG_WPE2)); //1100 0000
  431. return bResult;
  432. }
  433. // Need to Pull PLLON low when writing channel registers through 3-wire interface
  434. static bool s_bAL7230SelectChannel(void __iomem *dwIoBase, unsigned char byChannel)
  435. {
  436. bool bResult;
  437. bResult = true;
  438. // PLLON Off
  439. MACvWordRegBitsOff(dwIoBase, MAC_REG_SOFTPWRCTL, SOFTPWRCTL_SWPE3);
  440. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230ChannelTable0[byChannel - 1]); //Reg0
  441. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230ChannelTable1[byChannel - 1]); //Reg1
  442. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230ChannelTable2[byChannel - 1]); //Reg4
  443. // PLLOn On
  444. MACvWordRegBitsOn(dwIoBase, MAC_REG_SOFTPWRCTL, SOFTPWRCTL_SWPE3);
  445. // Set Channel[7] = 0 to tell H/W channel is changing now.
  446. VNSvOutPortB(dwIoBase + MAC_REG_CHANNEL, (byChannel & 0x7F));
  447. MACvTimer0MicroSDelay(dwIoBase, SWITCH_CHANNEL_DELAY_AL7230);
  448. // Set Channel[7] = 1 to tell H/W channel change is done.
  449. VNSvOutPortB(dwIoBase + MAC_REG_CHANNEL, (byChannel | 0x80));
  450. return bResult;
  451. }
  452. /*
  453. * Description: Select channel with UW2452 chip
  454. *
  455. * Parameters:
  456. * In:
  457. * dwIoBase - I/O base address
  458. * uChannel - Channel number
  459. * Out:
  460. * none
  461. *
  462. * Return Value: true if succeeded; false if failed.
  463. *
  464. */
  465. //{{ RobertYu: 20041210
  466. /*
  467. * Description: UW2452 IFRF chip init function
  468. *
  469. * Parameters:
  470. * In:
  471. * dwIoBase - I/O base address
  472. * Out:
  473. * none
  474. *
  475. * Return Value: true if succeeded; false if failed.
  476. *
  477. */
  478. //}} RobertYu
  479. ////////////////////////////////////////////////////////////////////////////////
  480. /*
  481. * Description: VT3226 IFRF chip init function
  482. *
  483. * Parameters:
  484. * In:
  485. * dwIoBase - I/O base address
  486. * Out:
  487. * none
  488. *
  489. * Return Value: true if succeeded; false if failed.
  490. *
  491. */
  492. /*
  493. * Description: Select channel with VT3226 chip
  494. *
  495. * Parameters:
  496. * In:
  497. * dwIoBase - I/O base address
  498. * uChannel - Channel number
  499. * Out:
  500. * none
  501. *
  502. * Return Value: true if succeeded; false if failed.
  503. *
  504. */
  505. /*--------------------- Export Variables --------------------------*/
  506. /*--------------------- Export Functions --------------------------*/
  507. /*
  508. * Description: Write to IF/RF, by embedded programming
  509. *
  510. * Parameters:
  511. * In:
  512. * dwIoBase - I/O base address
  513. * dwData - data to write
  514. * Out:
  515. * none
  516. *
  517. * Return Value: true if succeeded; false if failed.
  518. *
  519. */
  520. bool IFRFbWriteEmbedded(void __iomem *dwIoBase, unsigned long dwData)
  521. {
  522. unsigned short ww;
  523. unsigned long dwValue;
  524. VNSvOutPortD(dwIoBase + MAC_REG_IFREGCTL, dwData);
  525. // W_MAX_TIMEOUT is the timeout period
  526. for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
  527. VNSvInPortD(dwIoBase + MAC_REG_IFREGCTL, &dwValue);
  528. if (dwValue & IFREGCTL_DONE)
  529. break;
  530. }
  531. if (ww == W_MAX_TIMEOUT)
  532. return false;
  533. return true;
  534. }
  535. /*
  536. * Description: RFMD RF2959 IFRF chip init function
  537. *
  538. * Parameters:
  539. * In:
  540. * dwIoBase - I/O base address
  541. * Out:
  542. * none
  543. *
  544. * Return Value: true if succeeded; false if failed.
  545. *
  546. */
  547. /*
  548. * Description: Select channel with RFMD 2959 chip
  549. *
  550. * Parameters:
  551. * In:
  552. * dwIoBase - I/O base address
  553. * uChannel - Channel number
  554. * Out:
  555. * none
  556. *
  557. * Return Value: true if succeeded; false if failed.
  558. *
  559. */
  560. /*
  561. * Description: AIROHA IFRF chip init function
  562. *
  563. * Parameters:
  564. * In:
  565. * dwIoBase - I/O base address
  566. * Out:
  567. * none
  568. *
  569. * Return Value: true if succeeded; false if failed.
  570. *
  571. */
  572. static bool RFbAL2230Init(void __iomem *dwIoBase)
  573. {
  574. int ii;
  575. bool bResult;
  576. bResult = true;
  577. //3-wire control for normal mode
  578. VNSvOutPortB(dwIoBase + MAC_REG_SOFTPWRCTL, 0);
  579. MACvWordRegBitsOn(dwIoBase, MAC_REG_SOFTPWRCTL, (SOFTPWRCTL_SWPECTI |
  580. SOFTPWRCTL_TXPEINV));
  581. //2008-8-21 chester <add>
  582. // PLL Off
  583. MACvWordRegBitsOff(dwIoBase, MAC_REG_SOFTPWRCTL, SOFTPWRCTL_SWPE3);
  584. //patch abnormal AL2230 frequency output
  585. //2008-8-21 chester <add>
  586. IFRFbWriteEmbedded(dwIoBase, (0x07168700+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW));
  587. for (ii = 0; ii < CB_AL2230_INIT_SEQ; ii++)
  588. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL2230InitTable[ii]);
  589. //2008-8-21 chester <add>
  590. MACvTimer0MicroSDelay(dwIoBase, 30); //delay 30 us
  591. // PLL On
  592. MACvWordRegBitsOn(dwIoBase, MAC_REG_SOFTPWRCTL, SOFTPWRCTL_SWPE3);
  593. MACvTimer0MicroSDelay(dwIoBase, 150);//150us
  594. bResult &= IFRFbWriteEmbedded(dwIoBase, (0x00d80f00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW));
  595. MACvTimer0MicroSDelay(dwIoBase, 30);//30us
  596. bResult &= IFRFbWriteEmbedded(dwIoBase, (0x00780f00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW));
  597. MACvTimer0MicroSDelay(dwIoBase, 30);//30us
  598. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL2230InitTable[CB_AL2230_INIT_SEQ-1]);
  599. MACvWordRegBitsOn(dwIoBase, MAC_REG_SOFTPWRCTL, (SOFTPWRCTL_SWPE3 |
  600. SOFTPWRCTL_SWPE2 |
  601. SOFTPWRCTL_SWPECTI |
  602. SOFTPWRCTL_TXPEINV));
  603. //3-wire control for power saving mode
  604. VNSvOutPortB(dwIoBase + MAC_REG_PSPWRSIG, (PSSIG_WPE3 | PSSIG_WPE2)); //1100 0000
  605. return bResult;
  606. }
  607. static bool RFbAL2230SelectChannel(void __iomem *dwIoBase, unsigned char byChannel)
  608. {
  609. bool bResult;
  610. bResult = true;
  611. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL2230ChannelTable0[byChannel - 1]);
  612. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL2230ChannelTable1[byChannel - 1]);
  613. // Set Channel[7] = 0 to tell H/W channel is changing now.
  614. VNSvOutPortB(dwIoBase + MAC_REG_CHANNEL, (byChannel & 0x7F));
  615. MACvTimer0MicroSDelay(dwIoBase, SWITCH_CHANNEL_DELAY_AL2230);
  616. // Set Channel[7] = 1 to tell H/W channel change is done.
  617. VNSvOutPortB(dwIoBase + MAC_REG_CHANNEL, (byChannel | 0x80));
  618. return bResult;
  619. }
  620. /*
  621. * Description: UW2451 IFRF chip init function
  622. *
  623. * Parameters:
  624. * In:
  625. * dwIoBase - I/O base address
  626. * Out:
  627. * none
  628. *
  629. * Return Value: true if succeeded; false if failed.
  630. *
  631. */
  632. /*
  633. * Description: Select channel with UW2451 chip
  634. *
  635. * Parameters:
  636. * In:
  637. * dwIoBase - I/O base address
  638. * uChannel - Channel number
  639. * Out:
  640. * none
  641. *
  642. * Return Value: true if succeeded; false if failed.
  643. *
  644. */
  645. /*
  646. * Description: Set sleep mode to UW2451 chip
  647. *
  648. * Parameters:
  649. * In:
  650. * dwIoBase - I/O base address
  651. * uChannel - Channel number
  652. * Out:
  653. * none
  654. *
  655. * Return Value: true if succeeded; false if failed.
  656. *
  657. */
  658. /*
  659. * Description: RF init function
  660. *
  661. * Parameters:
  662. * In:
  663. * byBBType
  664. * byRFType
  665. * Out:
  666. * none
  667. *
  668. * Return Value: true if succeeded; false if failed.
  669. *
  670. */
  671. bool RFbInit(
  672. struct vnt_private *pDevice
  673. )
  674. {
  675. bool bResult = true;
  676. switch (pDevice->byRFType) {
  677. case RF_AIROHA:
  678. case RF_AL2230S:
  679. pDevice->byMaxPwrLevel = AL2230_PWR_IDX_LEN;
  680. bResult = RFbAL2230Init(pDevice->PortOffset);
  681. break;
  682. case RF_AIROHA7230:
  683. pDevice->byMaxPwrLevel = AL7230_PWR_IDX_LEN;
  684. bResult = s_bAL7230Init(pDevice->PortOffset);
  685. break;
  686. case RF_NOTHING:
  687. bResult = true;
  688. break;
  689. default:
  690. bResult = false;
  691. break;
  692. }
  693. return bResult;
  694. }
  695. /*
  696. * Description: Select channel
  697. *
  698. * Parameters:
  699. * In:
  700. * byRFType
  701. * byChannel - Channel number
  702. * Out:
  703. * none
  704. *
  705. * Return Value: true if succeeded; false if failed.
  706. *
  707. */
  708. bool RFbSelectChannel(void __iomem *dwIoBase, unsigned char byRFType, unsigned char byChannel)
  709. {
  710. bool bResult = true;
  711. switch (byRFType) {
  712. case RF_AIROHA:
  713. case RF_AL2230S:
  714. bResult = RFbAL2230SelectChannel(dwIoBase, byChannel);
  715. break;
  716. //{{ RobertYu: 20050104
  717. case RF_AIROHA7230:
  718. bResult = s_bAL7230SelectChannel(dwIoBase, byChannel);
  719. break;
  720. //}} RobertYu
  721. case RF_NOTHING:
  722. bResult = true;
  723. break;
  724. default:
  725. bResult = false;
  726. break;
  727. }
  728. return bResult;
  729. }
  730. /*
  731. * Description: Write WakeProgSyn
  732. *
  733. * Parameters:
  734. * In:
  735. * dwIoBase - I/O base address
  736. * uChannel - channel number
  737. * bySleepCnt - SleepProgSyn count
  738. *
  739. * Return Value: None.
  740. *
  741. */
  742. bool RFvWriteWakeProgSyn(void __iomem *dwIoBase, unsigned char byRFType, unsigned int uChannel)
  743. {
  744. int ii;
  745. unsigned char byInitCount = 0;
  746. unsigned char bySleepCount = 0;
  747. VNSvOutPortW(dwIoBase + MAC_REG_MISCFFNDEX, 0);
  748. switch (byRFType) {
  749. case RF_AIROHA:
  750. case RF_AL2230S:
  751. if (uChannel > CB_MAX_CHANNEL_24G)
  752. return false;
  753. byInitCount = CB_AL2230_INIT_SEQ + 2; // Init Reg + Channel Reg (2)
  754. bySleepCount = 0;
  755. if (byInitCount > (MISCFIFO_SYNDATASIZE - bySleepCount))
  756. return false;
  757. for (ii = 0; ii < CB_AL2230_INIT_SEQ; ii++)
  758. MACvSetMISCFifo(dwIoBase, (unsigned short)(MISCFIFO_SYNDATA_IDX + ii), dwAL2230InitTable[ii]);
  759. MACvSetMISCFifo(dwIoBase, (unsigned short)(MISCFIFO_SYNDATA_IDX + ii), dwAL2230ChannelTable0[uChannel-1]);
  760. ii++;
  761. MACvSetMISCFifo(dwIoBase, (unsigned short)(MISCFIFO_SYNDATA_IDX + ii), dwAL2230ChannelTable1[uChannel-1]);
  762. break;
  763. //{{ RobertYu: 20050104
  764. // Need to check, PLLON need to be low for channel setting
  765. case RF_AIROHA7230:
  766. byInitCount = CB_AL7230_INIT_SEQ + 3; // Init Reg + Channel Reg (3)
  767. bySleepCount = 0;
  768. if (byInitCount > (MISCFIFO_SYNDATASIZE - bySleepCount))
  769. return false;
  770. if (uChannel <= CB_MAX_CHANNEL_24G) {
  771. for (ii = 0; ii < CB_AL7230_INIT_SEQ; ii++)
  772. MACvSetMISCFifo(dwIoBase, (unsigned short)(MISCFIFO_SYNDATA_IDX + ii), dwAL7230InitTable[ii]);
  773. } else {
  774. for (ii = 0; ii < CB_AL7230_INIT_SEQ; ii++)
  775. MACvSetMISCFifo(dwIoBase, (unsigned short)(MISCFIFO_SYNDATA_IDX + ii), dwAL7230InitTableAMode[ii]);
  776. }
  777. MACvSetMISCFifo(dwIoBase, (unsigned short)(MISCFIFO_SYNDATA_IDX + ii), dwAL7230ChannelTable0[uChannel-1]);
  778. ii++;
  779. MACvSetMISCFifo(dwIoBase, (unsigned short)(MISCFIFO_SYNDATA_IDX + ii), dwAL7230ChannelTable1[uChannel-1]);
  780. ii++;
  781. MACvSetMISCFifo(dwIoBase, (unsigned short)(MISCFIFO_SYNDATA_IDX + ii), dwAL7230ChannelTable2[uChannel-1]);
  782. break;
  783. //}} RobertYu
  784. case RF_NOTHING:
  785. return true;
  786. default:
  787. return false;
  788. }
  789. MACvSetMISCFifo(dwIoBase, MISCFIFO_SYNINFO_IDX, (unsigned long)MAKEWORD(bySleepCount, byInitCount));
  790. return true;
  791. }
  792. /*
  793. * Description: Set Tx power
  794. *
  795. * Parameters:
  796. * In:
  797. * dwIoBase - I/O base address
  798. * dwRFPowerTable - RF Tx Power Setting
  799. * Out:
  800. * none
  801. *
  802. * Return Value: true if succeeded; false if failed.
  803. *
  804. */
  805. bool RFbSetPower(
  806. struct vnt_private *pDevice,
  807. unsigned int uRATE,
  808. unsigned int uCH
  809. )
  810. {
  811. bool bResult = true;
  812. unsigned char byPwr = 0;
  813. unsigned char byDec = 0;
  814. unsigned char byPwrdBm = 0;
  815. if (pDevice->dwDiagRefCount != 0)
  816. return true;
  817. if ((uCH < 1) || (uCH > CB_MAX_CHANNEL))
  818. return false;
  819. switch (uRATE) {
  820. case RATE_1M:
  821. case RATE_2M:
  822. case RATE_5M:
  823. case RATE_11M:
  824. byPwr = pDevice->abyCCKPwrTbl[uCH];
  825. byPwrdBm = pDevice->abyCCKDefaultPwr[uCH];
  826. break;
  827. case RATE_6M:
  828. case RATE_9M:
  829. case RATE_12M:
  830. case RATE_18M:
  831. byPwr = pDevice->abyOFDMPwrTbl[uCH];
  832. if (pDevice->byRFType == RF_UW2452)
  833. byDec = byPwr + 14;
  834. else
  835. byDec = byPwr + 10;
  836. if (byDec >= pDevice->byMaxPwrLevel)
  837. byDec = pDevice->byMaxPwrLevel-1;
  838. if (pDevice->byRFType == RF_UW2452) {
  839. byPwrdBm = byDec - byPwr;
  840. byPwrdBm /= 3;
  841. } else {
  842. byPwrdBm = byDec - byPwr;
  843. byPwrdBm >>= 1;
  844. }
  845. byPwrdBm += pDevice->abyOFDMDefaultPwr[uCH];
  846. byPwr = byDec;
  847. break;
  848. case RATE_24M:
  849. case RATE_36M:
  850. case RATE_48M:
  851. case RATE_54M:
  852. byPwr = pDevice->abyOFDMPwrTbl[uCH];
  853. byPwrdBm = pDevice->abyOFDMDefaultPwr[uCH];
  854. break;
  855. }
  856. if (pDevice->byCurPwr == byPwr)
  857. return true;
  858. bResult = RFbRawSetPower(pDevice, byPwr, uRATE);
  859. if (bResult)
  860. pDevice->byCurPwr = byPwr;
  861. return bResult;
  862. }
  863. /*
  864. * Description: Set Tx power
  865. *
  866. * Parameters:
  867. * In:
  868. * dwIoBase - I/O base address
  869. * dwRFPowerTable - RF Tx Power Setting
  870. * Out:
  871. * none
  872. *
  873. * Return Value: true if succeeded; false if failed.
  874. *
  875. */
  876. bool RFbRawSetPower(
  877. struct vnt_private *pDevice,
  878. unsigned char byPwr,
  879. unsigned int uRATE
  880. )
  881. {
  882. bool bResult = true;
  883. unsigned long dwMax7230Pwr = 0;
  884. if (byPwr >= pDevice->byMaxPwrLevel)
  885. return false;
  886. switch (pDevice->byRFType) {
  887. case RF_AIROHA:
  888. bResult &= IFRFbWriteEmbedded(pDevice->PortOffset, dwAL2230PowerTable[byPwr]);
  889. if (uRATE <= RATE_11M)
  890. bResult &= IFRFbWriteEmbedded(pDevice->PortOffset, 0x0001B400+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
  891. else
  892. bResult &= IFRFbWriteEmbedded(pDevice->PortOffset, 0x0005A400+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
  893. break;
  894. case RF_AL2230S:
  895. bResult &= IFRFbWriteEmbedded(pDevice->PortOffset, dwAL2230PowerTable[byPwr]);
  896. if (uRATE <= RATE_11M) {
  897. bResult &= IFRFbWriteEmbedded(pDevice->PortOffset, 0x040C1400+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
  898. bResult &= IFRFbWriteEmbedded(pDevice->PortOffset, 0x00299B00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
  899. } else {
  900. bResult &= IFRFbWriteEmbedded(pDevice->PortOffset, 0x0005A400+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
  901. bResult &= IFRFbWriteEmbedded(pDevice->PortOffset, 0x00099B00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
  902. }
  903. break;
  904. case RF_AIROHA7230:
  905. // 0x080F1B00 for 3 wire control TxGain(D10) and 0x31 as TX Gain value
  906. dwMax7230Pwr = 0x080C0B00 | ((byPwr) << 12) |
  907. (BY_AL7230_REG_LEN << 3) | IFREGCTL_REGW;
  908. bResult &= IFRFbWriteEmbedded(pDevice->PortOffset, dwMax7230Pwr);
  909. break;
  910. default:
  911. break;
  912. }
  913. return bResult;
  914. }
  915. /*+
  916. *
  917. * Routine Description:
  918. * Translate RSSI to dBm
  919. *
  920. * Parameters:
  921. * In:
  922. * pDevice - The adapter to be translated
  923. * byCurrRSSI - RSSI to be translated
  924. * Out:
  925. * pdwdbm - Translated dbm number
  926. *
  927. * Return Value: none
  928. *
  929. -*/
  930. void
  931. RFvRSSITodBm(
  932. struct vnt_private *pDevice,
  933. unsigned char byCurrRSSI,
  934. long *pldBm
  935. )
  936. {
  937. unsigned char byIdx = (((byCurrRSSI & 0xC0) >> 6) & 0x03);
  938. long b = (byCurrRSSI & 0x3F);
  939. long a = 0;
  940. unsigned char abyAIROHARF[4] = {0, 18, 0, 40};
  941. switch (pDevice->byRFType) {
  942. case RF_AIROHA:
  943. case RF_AL2230S:
  944. case RF_AIROHA7230: //RobertYu: 20040104
  945. a = abyAIROHARF[byIdx];
  946. break;
  947. default:
  948. break;
  949. }
  950. *pldBm = -1 * (a + b * 2);
  951. }
  952. ////////////////////////////////////////////////////////////////////////////////
  953. //{{ RobertYu: 20050104
  954. // Post processing for the 11b/g and 11a.
  955. // for save time on changing Reg2,3,5,7,10,12,15
  956. bool RFbAL7230SelectChannelPostProcess(void __iomem *dwIoBase, unsigned char byOldChannel, unsigned char byNewChannel)
  957. {
  958. bool bResult;
  959. bResult = true;
  960. // if change between 11 b/g and 11a need to update the following register
  961. // Channel Index 1~14
  962. if ((byOldChannel <= CB_MAX_CHANNEL_24G) && (byNewChannel > CB_MAX_CHANNEL_24G)) {
  963. // Change from 2.4G to 5G
  964. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230InitTableAMode[2]); //Reg2
  965. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230InitTableAMode[3]); //Reg3
  966. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230InitTableAMode[5]); //Reg5
  967. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230InitTableAMode[7]); //Reg7
  968. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230InitTableAMode[10]);//Reg10
  969. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230InitTableAMode[12]);//Reg12
  970. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230InitTableAMode[15]);//Reg15
  971. } else if ((byOldChannel > CB_MAX_CHANNEL_24G) && (byNewChannel <= CB_MAX_CHANNEL_24G)) {
  972. // change from 5G to 2.4G
  973. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230InitTable[2]); //Reg2
  974. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230InitTable[3]); //Reg3
  975. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230InitTable[5]); //Reg5
  976. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230InitTable[7]); //Reg7
  977. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230InitTable[10]);//Reg10
  978. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230InitTable[12]);//Reg12
  979. bResult &= IFRFbWriteEmbedded(dwIoBase, dwAL7230InitTable[15]);//Reg15
  980. }
  981. return bResult;
  982. }
  983. //}} RobertYu
  984. ////////////////////////////////////////////////////////////////////////////////