rf.c 49 KB

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