baseband.c 57 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869
  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: baseband.c
  21. *
  22. * Purpose: Implement functions to access baseband
  23. *
  24. * Author: Kyle Hsu
  25. *
  26. * Date: Aug.22, 2002
  27. *
  28. * Functions:
  29. * BBuGetFrameTime - Calculate data frame transmitting time
  30. * BBvCaculateParameter - Caculate PhyLength, PhyService and Phy Signal parameter for baseband Tx
  31. * BBbReadEmbedded - Embedded read baseband register via MAC
  32. * BBbWriteEmbedded - Embedded write baseband register via MAC
  33. * BBbIsRegBitsOn - Test if baseband register bits on
  34. * BBbIsRegBitsOff - Test if baseband register bits off
  35. * BBbVT3253Init - VIA VT3253 baseband chip init code
  36. * BBvReadAllRegs - Read All Baseband Registers
  37. * BBvLoopbackOn - Turn on BaseBand Loopback mode
  38. * BBvLoopbackOff - Turn off BaseBand Loopback mode
  39. *
  40. * Revision History:
  41. * 06-10-2003 Bryan YC Fan: Re-write codes to support VT3253 spec.
  42. * 08-07-2003 Bryan YC Fan: Add MAXIM2827/2825 and RFMD2959 support.
  43. * 08-26-2003 Kyle Hsu : Modify BBuGetFrameTime() and BBvCalculateParameter().
  44. * cancel the setting of MAC_REG_SOFTPWRCTL on BBbVT3253Init().
  45. * Add the comments.
  46. * 09-01-2003 Bryan YC Fan: RF & BB tables updated.
  47. * Modified BBvLoopbackOn & BBvLoopbackOff().
  48. *
  49. *
  50. */
  51. #include "tmacro.h"
  52. #include "tether.h"
  53. #include "mac.h"
  54. #include "baseband.h"
  55. #include "srom.h"
  56. #include "rf.h"
  57. /*--------------------- Static Classes ----------------------------*/
  58. /*--------------------- Static Variables --------------------------*/
  59. /*--------------------- Static Functions --------------------------*/
  60. /*--------------------- Export Variables --------------------------*/
  61. /*--------------------- Static Definitions -------------------------*/
  62. /*--------------------- Static Classes ----------------------------*/
  63. /*--------------------- Static Variables --------------------------*/
  64. #define CB_VT3253_INIT_FOR_RFMD 446
  65. static unsigned char byVT3253InitTab_RFMD[CB_VT3253_INIT_FOR_RFMD][2] = {
  66. {0x00, 0x30},
  67. {0x01, 0x00},
  68. {0x02, 0x00},
  69. {0x03, 0x00},
  70. {0x04, 0x00},
  71. {0x05, 0x00},
  72. {0x06, 0x00},
  73. {0x07, 0x00},
  74. {0x08, 0x70},
  75. {0x09, 0x45},
  76. {0x0a, 0x2a},
  77. {0x0b, 0x76},
  78. {0x0c, 0x00},
  79. {0x0d, 0x01},
  80. {0x0e, 0x80},
  81. {0x0f, 0x00},
  82. {0x10, 0x00},
  83. {0x11, 0x00},
  84. {0x12, 0x00},
  85. {0x13, 0x00},
  86. {0x14, 0x00},
  87. {0x15, 0x00},
  88. {0x16, 0x00},
  89. {0x17, 0x00},
  90. {0x18, 0x00},
  91. {0x19, 0x00},
  92. {0x1a, 0x00},
  93. {0x1b, 0x9d},
  94. {0x1c, 0x05},
  95. {0x1d, 0x00},
  96. {0x1e, 0x00},
  97. {0x1f, 0x00},
  98. {0x20, 0x00},
  99. {0x21, 0x00},
  100. {0x22, 0x00},
  101. {0x23, 0x00},
  102. {0x24, 0x00},
  103. {0x25, 0x4a},
  104. {0x26, 0x00},
  105. {0x27, 0x00},
  106. {0x28, 0x00},
  107. {0x29, 0x00},
  108. {0x2a, 0x00},
  109. {0x2b, 0x00},
  110. {0x2c, 0x00},
  111. {0x2d, 0xa8},
  112. {0x2e, 0x1a},
  113. {0x2f, 0x0c},
  114. {0x30, 0x26},
  115. {0x31, 0x5b},
  116. {0x32, 0x00},
  117. {0x33, 0x00},
  118. {0x34, 0x00},
  119. {0x35, 0x00},
  120. {0x36, 0xaa},
  121. {0x37, 0xaa},
  122. {0x38, 0xff},
  123. {0x39, 0xff},
  124. {0x3a, 0x00},
  125. {0x3b, 0x00},
  126. {0x3c, 0x00},
  127. {0x3d, 0x0d},
  128. {0x3e, 0x51},
  129. {0x3f, 0x04},
  130. {0x40, 0x00},
  131. {0x41, 0x08},
  132. {0x42, 0x00},
  133. {0x43, 0x08},
  134. {0x44, 0x06},
  135. {0x45, 0x14},
  136. {0x46, 0x05},
  137. {0x47, 0x08},
  138. {0x48, 0x00},
  139. {0x49, 0x00},
  140. {0x4a, 0x00},
  141. {0x4b, 0x00},
  142. {0x4c, 0x09},
  143. {0x4d, 0x80},
  144. {0x4e, 0x00},
  145. {0x4f, 0xc5},
  146. {0x50, 0x14},
  147. {0x51, 0x19},
  148. {0x52, 0x00},
  149. {0x53, 0x00},
  150. {0x54, 0x00},
  151. {0x55, 0x00},
  152. {0x56, 0x00},
  153. {0x57, 0x00},
  154. {0x58, 0x00},
  155. {0x59, 0xb0},
  156. {0x5a, 0x00},
  157. {0x5b, 0x00},
  158. {0x5c, 0x00},
  159. {0x5d, 0x00},
  160. {0x5e, 0x00},
  161. {0x5f, 0x00},
  162. {0x60, 0x44},
  163. {0x61, 0x04},
  164. {0x62, 0x00},
  165. {0x63, 0x00},
  166. {0x64, 0x00},
  167. {0x65, 0x00},
  168. {0x66, 0x04},
  169. {0x67, 0xb7},
  170. {0x68, 0x00},
  171. {0x69, 0x00},
  172. {0x6a, 0x00},
  173. {0x6b, 0x00},
  174. {0x6c, 0x00},
  175. {0x6d, 0x03},
  176. {0x6e, 0x01},
  177. {0x6f, 0x00},
  178. {0x70, 0x00},
  179. {0x71, 0x00},
  180. {0x72, 0x00},
  181. {0x73, 0x00},
  182. {0x74, 0x00},
  183. {0x75, 0x00},
  184. {0x76, 0x00},
  185. {0x77, 0x00},
  186. {0x78, 0x00},
  187. {0x79, 0x00},
  188. {0x7a, 0x00},
  189. {0x7b, 0x00},
  190. {0x7c, 0x00},
  191. {0x7d, 0x00},
  192. {0x7e, 0x00},
  193. {0x7f, 0x00},
  194. {0x80, 0x0b},
  195. {0x81, 0x00},
  196. {0x82, 0x3c},
  197. {0x83, 0x00},
  198. {0x84, 0x00},
  199. {0x85, 0x00},
  200. {0x86, 0x00},
  201. {0x87, 0x00},
  202. {0x88, 0x08},
  203. {0x89, 0x00},
  204. {0x8a, 0x08},
  205. {0x8b, 0xa6},
  206. {0x8c, 0x84},
  207. {0x8d, 0x47},
  208. {0x8e, 0xbb},
  209. {0x8f, 0x02},
  210. {0x90, 0x21},
  211. {0x91, 0x0c},
  212. {0x92, 0x04},
  213. {0x93, 0x22},
  214. {0x94, 0x00},
  215. {0x95, 0x00},
  216. {0x96, 0x00},
  217. {0x97, 0xeb},
  218. {0x98, 0x00},
  219. {0x99, 0x00},
  220. {0x9a, 0x00},
  221. {0x9b, 0x00},
  222. {0x9c, 0x00},
  223. {0x9d, 0x00},
  224. {0x9e, 0x00},
  225. {0x9f, 0x00},
  226. {0xa0, 0x00},
  227. {0xa1, 0x00},
  228. {0xa2, 0x00},
  229. {0xa3, 0x00},
  230. {0xa4, 0x00},
  231. {0xa5, 0x00},
  232. {0xa6, 0x10},
  233. {0xa7, 0x04},
  234. {0xa8, 0x10},
  235. {0xa9, 0x00},
  236. {0xaa, 0x8f},
  237. {0xab, 0x00},
  238. {0xac, 0x00},
  239. {0xad, 0x00},
  240. {0xae, 0x00},
  241. {0xaf, 0x80},
  242. {0xb0, 0x38},
  243. {0xb1, 0x00},
  244. {0xb2, 0x00},
  245. {0xb3, 0x00},
  246. {0xb4, 0xee},
  247. {0xb5, 0xff},
  248. {0xb6, 0x10},
  249. {0xb7, 0x00},
  250. {0xb8, 0x00},
  251. {0xb9, 0x00},
  252. {0xba, 0x00},
  253. {0xbb, 0x03},
  254. {0xbc, 0x00},
  255. {0xbd, 0x00},
  256. {0xbe, 0x00},
  257. {0xbf, 0x00},
  258. {0xc0, 0x10},
  259. {0xc1, 0x10},
  260. {0xc2, 0x18},
  261. {0xc3, 0x20},
  262. {0xc4, 0x10},
  263. {0xc5, 0x00},
  264. {0xc6, 0x22},
  265. {0xc7, 0x14},
  266. {0xc8, 0x0f},
  267. {0xc9, 0x08},
  268. {0xca, 0xa4},
  269. {0xcb, 0xa7},
  270. {0xcc, 0x3c},
  271. {0xcd, 0x10},
  272. {0xce, 0x20},
  273. {0xcf, 0x00},
  274. {0xd0, 0x00},
  275. {0xd1, 0x10},
  276. {0xd2, 0x00},
  277. {0xd3, 0x00},
  278. {0xd4, 0x10},
  279. {0xd5, 0x33},
  280. {0xd6, 0x70},
  281. {0xd7, 0x01},
  282. {0xd8, 0x00},
  283. {0xd9, 0x00},
  284. {0xda, 0x00},
  285. {0xdb, 0x00},
  286. {0xdc, 0x00},
  287. {0xdd, 0x00},
  288. {0xde, 0x00},
  289. {0xdf, 0x00},
  290. {0xe0, 0x00},
  291. {0xe1, 0x00},
  292. {0xe2, 0xcc},
  293. {0xe3, 0x04},
  294. {0xe4, 0x08},
  295. {0xe5, 0x10},
  296. {0xe6, 0x00},
  297. {0xe7, 0x0e},
  298. {0xe8, 0x88},
  299. {0xe9, 0xd4},
  300. {0xea, 0x05},
  301. {0xeb, 0xf0},
  302. {0xec, 0x79},
  303. {0xed, 0x0f},
  304. {0xee, 0x04},
  305. {0xef, 0x04},
  306. {0xf0, 0x00},
  307. {0xf1, 0x00},
  308. {0xf2, 0x00},
  309. {0xf3, 0x00},
  310. {0xf4, 0x00},
  311. {0xf5, 0x00},
  312. {0xf6, 0x00},
  313. {0xf7, 0x00},
  314. {0xf8, 0x00},
  315. {0xf9, 0x00},
  316. {0xF0, 0x00},
  317. {0xF1, 0xF8},
  318. {0xF0, 0x80},
  319. {0xF0, 0x00},
  320. {0xF1, 0xF4},
  321. {0xF0, 0x81},
  322. {0xF0, 0x01},
  323. {0xF1, 0xF0},
  324. {0xF0, 0x82},
  325. {0xF0, 0x02},
  326. {0xF1, 0xEC},
  327. {0xF0, 0x83},
  328. {0xF0, 0x03},
  329. {0xF1, 0xE8},
  330. {0xF0, 0x84},
  331. {0xF0, 0x04},
  332. {0xF1, 0xE4},
  333. {0xF0, 0x85},
  334. {0xF0, 0x05},
  335. {0xF1, 0xE0},
  336. {0xF0, 0x86},
  337. {0xF0, 0x06},
  338. {0xF1, 0xDC},
  339. {0xF0, 0x87},
  340. {0xF0, 0x07},
  341. {0xF1, 0xD8},
  342. {0xF0, 0x88},
  343. {0xF0, 0x08},
  344. {0xF1, 0xD4},
  345. {0xF0, 0x89},
  346. {0xF0, 0x09},
  347. {0xF1, 0xD0},
  348. {0xF0, 0x8A},
  349. {0xF0, 0x0A},
  350. {0xF1, 0xCC},
  351. {0xF0, 0x8B},
  352. {0xF0, 0x0B},
  353. {0xF1, 0xC8},
  354. {0xF0, 0x8C},
  355. {0xF0, 0x0C},
  356. {0xF1, 0xC4},
  357. {0xF0, 0x8D},
  358. {0xF0, 0x0D},
  359. {0xF1, 0xC0},
  360. {0xF0, 0x8E},
  361. {0xF0, 0x0E},
  362. {0xF1, 0xBC},
  363. {0xF0, 0x8F},
  364. {0xF0, 0x0F},
  365. {0xF1, 0xB8},
  366. {0xF0, 0x90},
  367. {0xF0, 0x10},
  368. {0xF1, 0xB4},
  369. {0xF0, 0x91},
  370. {0xF0, 0x11},
  371. {0xF1, 0xB0},
  372. {0xF0, 0x92},
  373. {0xF0, 0x12},
  374. {0xF1, 0xAC},
  375. {0xF0, 0x93},
  376. {0xF0, 0x13},
  377. {0xF1, 0xA8},
  378. {0xF0, 0x94},
  379. {0xF0, 0x14},
  380. {0xF1, 0xA4},
  381. {0xF0, 0x95},
  382. {0xF0, 0x15},
  383. {0xF1, 0xA0},
  384. {0xF0, 0x96},
  385. {0xF0, 0x16},
  386. {0xF1, 0x9C},
  387. {0xF0, 0x97},
  388. {0xF0, 0x17},
  389. {0xF1, 0x98},
  390. {0xF0, 0x98},
  391. {0xF0, 0x18},
  392. {0xF1, 0x94},
  393. {0xF0, 0x99},
  394. {0xF0, 0x19},
  395. {0xF1, 0x90},
  396. {0xF0, 0x9A},
  397. {0xF0, 0x1A},
  398. {0xF1, 0x8C},
  399. {0xF0, 0x9B},
  400. {0xF0, 0x1B},
  401. {0xF1, 0x88},
  402. {0xF0, 0x9C},
  403. {0xF0, 0x1C},
  404. {0xF1, 0x84},
  405. {0xF0, 0x9D},
  406. {0xF0, 0x1D},
  407. {0xF1, 0x80},
  408. {0xF0, 0x9E},
  409. {0xF0, 0x1E},
  410. {0xF1, 0x7C},
  411. {0xF0, 0x9F},
  412. {0xF0, 0x1F},
  413. {0xF1, 0x78},
  414. {0xF0, 0xA0},
  415. {0xF0, 0x20},
  416. {0xF1, 0x74},
  417. {0xF0, 0xA1},
  418. {0xF0, 0x21},
  419. {0xF1, 0x70},
  420. {0xF0, 0xA2},
  421. {0xF0, 0x22},
  422. {0xF1, 0x6C},
  423. {0xF0, 0xA3},
  424. {0xF0, 0x23},
  425. {0xF1, 0x68},
  426. {0xF0, 0xA4},
  427. {0xF0, 0x24},
  428. {0xF1, 0x64},
  429. {0xF0, 0xA5},
  430. {0xF0, 0x25},
  431. {0xF1, 0x60},
  432. {0xF0, 0xA6},
  433. {0xF0, 0x26},
  434. {0xF1, 0x5C},
  435. {0xF0, 0xA7},
  436. {0xF0, 0x27},
  437. {0xF1, 0x58},
  438. {0xF0, 0xA8},
  439. {0xF0, 0x28},
  440. {0xF1, 0x54},
  441. {0xF0, 0xA9},
  442. {0xF0, 0x29},
  443. {0xF1, 0x50},
  444. {0xF0, 0xAA},
  445. {0xF0, 0x2A},
  446. {0xF1, 0x4C},
  447. {0xF0, 0xAB},
  448. {0xF0, 0x2B},
  449. {0xF1, 0x48},
  450. {0xF0, 0xAC},
  451. {0xF0, 0x2C},
  452. {0xF1, 0x44},
  453. {0xF0, 0xAD},
  454. {0xF0, 0x2D},
  455. {0xF1, 0x40},
  456. {0xF0, 0xAE},
  457. {0xF0, 0x2E},
  458. {0xF1, 0x3C},
  459. {0xF0, 0xAF},
  460. {0xF0, 0x2F},
  461. {0xF1, 0x38},
  462. {0xF0, 0xB0},
  463. {0xF0, 0x30},
  464. {0xF1, 0x34},
  465. {0xF0, 0xB1},
  466. {0xF0, 0x31},
  467. {0xF1, 0x30},
  468. {0xF0, 0xB2},
  469. {0xF0, 0x32},
  470. {0xF1, 0x2C},
  471. {0xF0, 0xB3},
  472. {0xF0, 0x33},
  473. {0xF1, 0x28},
  474. {0xF0, 0xB4},
  475. {0xF0, 0x34},
  476. {0xF1, 0x24},
  477. {0xF0, 0xB5},
  478. {0xF0, 0x35},
  479. {0xF1, 0x20},
  480. {0xF0, 0xB6},
  481. {0xF0, 0x36},
  482. {0xF1, 0x1C},
  483. {0xF0, 0xB7},
  484. {0xF0, 0x37},
  485. {0xF1, 0x18},
  486. {0xF0, 0xB8},
  487. {0xF0, 0x38},
  488. {0xF1, 0x14},
  489. {0xF0, 0xB9},
  490. {0xF0, 0x39},
  491. {0xF1, 0x10},
  492. {0xF0, 0xBA},
  493. {0xF0, 0x3A},
  494. {0xF1, 0x0C},
  495. {0xF0, 0xBB},
  496. {0xF0, 0x3B},
  497. {0xF1, 0x08},
  498. {0xF0, 0x00},
  499. {0xF0, 0x3C},
  500. {0xF1, 0x04},
  501. {0xF0, 0xBD},
  502. {0xF0, 0x3D},
  503. {0xF1, 0x00},
  504. {0xF0, 0xBE},
  505. {0xF0, 0x3E},
  506. {0xF1, 0x00},
  507. {0xF0, 0xBF},
  508. {0xF0, 0x3F},
  509. {0xF1, 0x00},
  510. {0xF0, 0xC0},
  511. {0xF0, 0x00},
  512. };
  513. #define CB_VT3253B0_INIT_FOR_RFMD 256
  514. static unsigned char byVT3253B0_RFMD[CB_VT3253B0_INIT_FOR_RFMD][2] = {
  515. {0x00, 0x31},
  516. {0x01, 0x00},
  517. {0x02, 0x00},
  518. {0x03, 0x00},
  519. {0x04, 0x00},
  520. {0x05, 0x81},
  521. {0x06, 0x00},
  522. {0x07, 0x00},
  523. {0x08, 0x38},
  524. {0x09, 0x45},
  525. {0x0a, 0x2a},
  526. {0x0b, 0x76},
  527. {0x0c, 0x00},
  528. {0x0d, 0x00},
  529. {0x0e, 0x80},
  530. {0x0f, 0x00},
  531. {0x10, 0x00},
  532. {0x11, 0x00},
  533. {0x12, 0x00},
  534. {0x13, 0x00},
  535. {0x14, 0x00},
  536. {0x15, 0x00},
  537. {0x16, 0x00},
  538. {0x17, 0x00},
  539. {0x18, 0x00},
  540. {0x19, 0x00},
  541. {0x1a, 0x00},
  542. {0x1b, 0x8e},
  543. {0x1c, 0x06},
  544. {0x1d, 0x00},
  545. {0x1e, 0x00},
  546. {0x1f, 0x00},
  547. {0x20, 0x00},
  548. {0x21, 0x00},
  549. {0x22, 0x00},
  550. {0x23, 0x00},
  551. {0x24, 0x00},
  552. {0x25, 0x4a},
  553. {0x26, 0x00},
  554. {0x27, 0x00},
  555. {0x28, 0x00},
  556. {0x29, 0x00},
  557. {0x2a, 0x00},
  558. {0x2b, 0x00},
  559. {0x2c, 0x00},
  560. {0x2d, 0x34},
  561. {0x2e, 0x18},
  562. {0x2f, 0x0c},
  563. {0x30, 0x26},
  564. {0x31, 0x5b},
  565. {0x32, 0x00},
  566. {0x33, 0x00},
  567. {0x34, 0x00},
  568. {0x35, 0x00},
  569. {0x36, 0xaa},
  570. {0x37, 0xaa},
  571. {0x38, 0xff},
  572. {0x39, 0xff},
  573. {0x3a, 0xf8},
  574. {0x3b, 0x00},
  575. {0x3c, 0x00},
  576. {0x3d, 0x09},
  577. {0x3e, 0x0d},
  578. {0x3f, 0x04},
  579. {0x40, 0x00},
  580. {0x41, 0x08},
  581. {0x42, 0x00},
  582. {0x43, 0x08},
  583. {0x44, 0x08},
  584. {0x45, 0x14},
  585. {0x46, 0x05},
  586. {0x47, 0x08},
  587. {0x48, 0x00},
  588. {0x49, 0x00},
  589. {0x4a, 0x00},
  590. {0x4b, 0x00},
  591. {0x4c, 0x09},
  592. {0x4d, 0x80},
  593. {0x4e, 0x00},
  594. {0x4f, 0xc5},
  595. {0x50, 0x14},
  596. {0x51, 0x19},
  597. {0x52, 0x00},
  598. {0x53, 0x00},
  599. {0x54, 0x00},
  600. {0x55, 0x00},
  601. {0x56, 0x00},
  602. {0x57, 0x00},
  603. {0x58, 0x00},
  604. {0x59, 0xb0},
  605. {0x5a, 0x00},
  606. {0x5b, 0x00},
  607. {0x5c, 0x00},
  608. {0x5d, 0x00},
  609. {0x5e, 0x00},
  610. {0x5f, 0x00},
  611. {0x60, 0x39},
  612. {0x61, 0x83},
  613. {0x62, 0x00},
  614. {0x63, 0x00},
  615. {0x64, 0x00},
  616. {0x65, 0x00},
  617. {0x66, 0xc0},
  618. {0x67, 0x49},
  619. {0x68, 0x00},
  620. {0x69, 0x00},
  621. {0x6a, 0x00},
  622. {0x6b, 0x00},
  623. {0x6c, 0x00},
  624. {0x6d, 0x03},
  625. {0x6e, 0x01},
  626. {0x6f, 0x00},
  627. {0x70, 0x00},
  628. {0x71, 0x00},
  629. {0x72, 0x00},
  630. {0x73, 0x00},
  631. {0x74, 0x00},
  632. {0x75, 0x00},
  633. {0x76, 0x00},
  634. {0x77, 0x00},
  635. {0x78, 0x00},
  636. {0x79, 0x00},
  637. {0x7a, 0x00},
  638. {0x7b, 0x00},
  639. {0x7c, 0x00},
  640. {0x7d, 0x00},
  641. {0x7e, 0x00},
  642. {0x7f, 0x00},
  643. {0x80, 0x89},
  644. {0x81, 0x00},
  645. {0x82, 0x0e},
  646. {0x83, 0x00},
  647. {0x84, 0x00},
  648. {0x85, 0x00},
  649. {0x86, 0x00},
  650. {0x87, 0x00},
  651. {0x88, 0x08},
  652. {0x89, 0x00},
  653. {0x8a, 0x0e},
  654. {0x8b, 0xa7},
  655. {0x8c, 0x88},
  656. {0x8d, 0x47},
  657. {0x8e, 0xaa},
  658. {0x8f, 0x02},
  659. {0x90, 0x23},
  660. {0x91, 0x0c},
  661. {0x92, 0x06},
  662. {0x93, 0x08},
  663. {0x94, 0x00},
  664. {0x95, 0x00},
  665. {0x96, 0x00},
  666. {0x97, 0xeb},
  667. {0x98, 0x00},
  668. {0x99, 0x00},
  669. {0x9a, 0x00},
  670. {0x9b, 0x00},
  671. {0x9c, 0x00},
  672. {0x9d, 0x00},
  673. {0x9e, 0x00},
  674. {0x9f, 0x00},
  675. {0xa0, 0x00},
  676. {0xa1, 0x00},
  677. {0xa2, 0x00},
  678. {0xa3, 0xcd},
  679. {0xa4, 0x07},
  680. {0xa5, 0x33},
  681. {0xa6, 0x18},
  682. {0xa7, 0x00},
  683. {0xa8, 0x18},
  684. {0xa9, 0x00},
  685. {0xaa, 0x28},
  686. {0xab, 0x00},
  687. {0xac, 0x00},
  688. {0xad, 0x00},
  689. {0xae, 0x00},
  690. {0xaf, 0x18},
  691. {0xb0, 0x38},
  692. {0xb1, 0x30},
  693. {0xb2, 0x00},
  694. {0xb3, 0x00},
  695. {0xb4, 0x00},
  696. {0xb5, 0x00},
  697. {0xb6, 0x84},
  698. {0xb7, 0xfd},
  699. {0xb8, 0x00},
  700. {0xb9, 0x00},
  701. {0xba, 0x00},
  702. {0xbb, 0x03},
  703. {0xbc, 0x00},
  704. {0xbd, 0x00},
  705. {0xbe, 0x00},
  706. {0xbf, 0x00},
  707. {0xc0, 0x10},
  708. {0xc1, 0x20},
  709. {0xc2, 0x18},
  710. {0xc3, 0x20},
  711. {0xc4, 0x10},
  712. {0xc5, 0x2c},
  713. {0xc6, 0x1e},
  714. {0xc7, 0x10},
  715. {0xc8, 0x12},
  716. {0xc9, 0x01},
  717. {0xca, 0x6f},
  718. {0xcb, 0xa7},
  719. {0xcc, 0x3c},
  720. {0xcd, 0x10},
  721. {0xce, 0x00},
  722. {0xcf, 0x22},
  723. {0xd0, 0x00},
  724. {0xd1, 0x10},
  725. {0xd2, 0x00},
  726. {0xd3, 0x00},
  727. {0xd4, 0x10},
  728. {0xd5, 0x33},
  729. {0xd6, 0x80},
  730. {0xd7, 0x21},
  731. {0xd8, 0x00},
  732. {0xd9, 0x00},
  733. {0xda, 0x00},
  734. {0xdb, 0x00},
  735. {0xdc, 0x00},
  736. {0xdd, 0x00},
  737. {0xde, 0x00},
  738. {0xdf, 0x00},
  739. {0xe0, 0x00},
  740. {0xe1, 0xB3},
  741. {0xe2, 0x00},
  742. {0xe3, 0x00},
  743. {0xe4, 0x00},
  744. {0xe5, 0x10},
  745. {0xe6, 0x00},
  746. {0xe7, 0x18},
  747. {0xe8, 0x08},
  748. {0xe9, 0xd4},
  749. {0xea, 0x00},
  750. {0xeb, 0xff},
  751. {0xec, 0x79},
  752. {0xed, 0x10},
  753. {0xee, 0x30},
  754. {0xef, 0x02},
  755. {0xf0, 0x00},
  756. {0xf1, 0x09},
  757. {0xf2, 0x00},
  758. {0xf3, 0x00},
  759. {0xf4, 0x00},
  760. {0xf5, 0x00},
  761. {0xf6, 0x00},
  762. {0xf7, 0x00},
  763. {0xf8, 0x00},
  764. {0xf9, 0x00},
  765. {0xfa, 0x00},
  766. {0xfb, 0x00},
  767. {0xfc, 0x00},
  768. {0xfd, 0x00},
  769. {0xfe, 0x00},
  770. {0xff, 0x00},
  771. };
  772. #define CB_VT3253B0_AGC_FOR_RFMD2959 195
  773. /* For RFMD2959 */
  774. static unsigned char byVT3253B0_AGC4_RFMD2959[CB_VT3253B0_AGC_FOR_RFMD2959][2] = {
  775. {0xF0, 0x00},
  776. {0xF1, 0x3E},
  777. {0xF0, 0x80},
  778. {0xF0, 0x00},
  779. {0xF1, 0x3E},
  780. {0xF0, 0x81},
  781. {0xF0, 0x01},
  782. {0xF1, 0x3E},
  783. {0xF0, 0x82},
  784. {0xF0, 0x02},
  785. {0xF1, 0x3E},
  786. {0xF0, 0x83},
  787. {0xF0, 0x03},
  788. {0xF1, 0x3B},
  789. {0xF0, 0x84},
  790. {0xF0, 0x04},
  791. {0xF1, 0x39},
  792. {0xF0, 0x85},
  793. {0xF0, 0x05},
  794. {0xF1, 0x38},
  795. {0xF0, 0x86},
  796. {0xF0, 0x06},
  797. {0xF1, 0x37},
  798. {0xF0, 0x87},
  799. {0xF0, 0x07},
  800. {0xF1, 0x36},
  801. {0xF0, 0x88},
  802. {0xF0, 0x08},
  803. {0xF1, 0x35},
  804. {0xF0, 0x89},
  805. {0xF0, 0x09},
  806. {0xF1, 0x35},
  807. {0xF0, 0x8A},
  808. {0xF0, 0x0A},
  809. {0xF1, 0x34},
  810. {0xF0, 0x8B},
  811. {0xF0, 0x0B},
  812. {0xF1, 0x34},
  813. {0xF0, 0x8C},
  814. {0xF0, 0x0C},
  815. {0xF1, 0x33},
  816. {0xF0, 0x8D},
  817. {0xF0, 0x0D},
  818. {0xF1, 0x32},
  819. {0xF0, 0x8E},
  820. {0xF0, 0x0E},
  821. {0xF1, 0x31},
  822. {0xF0, 0x8F},
  823. {0xF0, 0x0F},
  824. {0xF1, 0x30},
  825. {0xF0, 0x90},
  826. {0xF0, 0x10},
  827. {0xF1, 0x2F},
  828. {0xF0, 0x91},
  829. {0xF0, 0x11},
  830. {0xF1, 0x2F},
  831. {0xF0, 0x92},
  832. {0xF0, 0x12},
  833. {0xF1, 0x2E},
  834. {0xF0, 0x93},
  835. {0xF0, 0x13},
  836. {0xF1, 0x2D},
  837. {0xF0, 0x94},
  838. {0xF0, 0x14},
  839. {0xF1, 0x2C},
  840. {0xF0, 0x95},
  841. {0xF0, 0x15},
  842. {0xF1, 0x2B},
  843. {0xF0, 0x96},
  844. {0xF0, 0x16},
  845. {0xF1, 0x2B},
  846. {0xF0, 0x97},
  847. {0xF0, 0x17},
  848. {0xF1, 0x2A},
  849. {0xF0, 0x98},
  850. {0xF0, 0x18},
  851. {0xF1, 0x29},
  852. {0xF0, 0x99},
  853. {0xF0, 0x19},
  854. {0xF1, 0x28},
  855. {0xF0, 0x9A},
  856. {0xF0, 0x1A},
  857. {0xF1, 0x27},
  858. {0xF0, 0x9B},
  859. {0xF0, 0x1B},
  860. {0xF1, 0x26},
  861. {0xF0, 0x9C},
  862. {0xF0, 0x1C},
  863. {0xF1, 0x25},
  864. {0xF0, 0x9D},
  865. {0xF0, 0x1D},
  866. {0xF1, 0x24},
  867. {0xF0, 0x9E},
  868. {0xF0, 0x1E},
  869. {0xF1, 0x24},
  870. {0xF0, 0x9F},
  871. {0xF0, 0x1F},
  872. {0xF1, 0x23},
  873. {0xF0, 0xA0},
  874. {0xF0, 0x20},
  875. {0xF1, 0x22},
  876. {0xF0, 0xA1},
  877. {0xF0, 0x21},
  878. {0xF1, 0x21},
  879. {0xF0, 0xA2},
  880. {0xF0, 0x22},
  881. {0xF1, 0x20},
  882. {0xF0, 0xA3},
  883. {0xF0, 0x23},
  884. {0xF1, 0x20},
  885. {0xF0, 0xA4},
  886. {0xF0, 0x24},
  887. {0xF1, 0x1F},
  888. {0xF0, 0xA5},
  889. {0xF0, 0x25},
  890. {0xF1, 0x1E},
  891. {0xF0, 0xA6},
  892. {0xF0, 0x26},
  893. {0xF1, 0x1D},
  894. {0xF0, 0xA7},
  895. {0xF0, 0x27},
  896. {0xF1, 0x1C},
  897. {0xF0, 0xA8},
  898. {0xF0, 0x28},
  899. {0xF1, 0x1B},
  900. {0xF0, 0xA9},
  901. {0xF0, 0x29},
  902. {0xF1, 0x1B},
  903. {0xF0, 0xAA},
  904. {0xF0, 0x2A},
  905. {0xF1, 0x1A},
  906. {0xF0, 0xAB},
  907. {0xF0, 0x2B},
  908. {0xF1, 0x1A},
  909. {0xF0, 0xAC},
  910. {0xF0, 0x2C},
  911. {0xF1, 0x19},
  912. {0xF0, 0xAD},
  913. {0xF0, 0x2D},
  914. {0xF1, 0x18},
  915. {0xF0, 0xAE},
  916. {0xF0, 0x2E},
  917. {0xF1, 0x17},
  918. {0xF0, 0xAF},
  919. {0xF0, 0x2F},
  920. {0xF1, 0x16},
  921. {0xF0, 0xB0},
  922. {0xF0, 0x30},
  923. {0xF1, 0x15},
  924. {0xF0, 0xB1},
  925. {0xF0, 0x31},
  926. {0xF1, 0x15},
  927. {0xF0, 0xB2},
  928. {0xF0, 0x32},
  929. {0xF1, 0x15},
  930. {0xF0, 0xB3},
  931. {0xF0, 0x33},
  932. {0xF1, 0x14},
  933. {0xF0, 0xB4},
  934. {0xF0, 0x34},
  935. {0xF1, 0x13},
  936. {0xF0, 0xB5},
  937. {0xF0, 0x35},
  938. {0xF1, 0x12},
  939. {0xF0, 0xB6},
  940. {0xF0, 0x36},
  941. {0xF1, 0x11},
  942. {0xF0, 0xB7},
  943. {0xF0, 0x37},
  944. {0xF1, 0x10},
  945. {0xF0, 0xB8},
  946. {0xF0, 0x38},
  947. {0xF1, 0x0F},
  948. {0xF0, 0xB9},
  949. {0xF0, 0x39},
  950. {0xF1, 0x0E},
  951. {0xF0, 0xBA},
  952. {0xF0, 0x3A},
  953. {0xF1, 0x0D},
  954. {0xF0, 0xBB},
  955. {0xF0, 0x3B},
  956. {0xF1, 0x0C},
  957. {0xF0, 0xBC},
  958. {0xF0, 0x3C},
  959. {0xF1, 0x0B},
  960. {0xF0, 0xBD},
  961. {0xF0, 0x3D},
  962. {0xF1, 0x0B},
  963. {0xF0, 0xBE},
  964. {0xF0, 0x3E},
  965. {0xF1, 0x0A},
  966. {0xF0, 0xBF},
  967. {0xF0, 0x3F},
  968. {0xF1, 0x09},
  969. {0xF0, 0x00},
  970. };
  971. #define CB_VT3253B0_INIT_FOR_AIROHA2230 256
  972. /* For AIROHA */
  973. static unsigned char byVT3253B0_AIROHA2230[CB_VT3253B0_INIT_FOR_AIROHA2230][2] = {
  974. {0x00, 0x31},
  975. {0x01, 0x00},
  976. {0x02, 0x00},
  977. {0x03, 0x00},
  978. {0x04, 0x00},
  979. {0x05, 0x80},
  980. {0x06, 0x00},
  981. {0x07, 0x00},
  982. {0x08, 0x70},
  983. {0x09, 0x41},
  984. {0x0a, 0x2A},
  985. {0x0b, 0x76},
  986. {0x0c, 0x00},
  987. {0x0d, 0x00},
  988. {0x0e, 0x80},
  989. {0x0f, 0x00},
  990. {0x10, 0x00},
  991. {0x11, 0x00},
  992. {0x12, 0x00},
  993. {0x13, 0x00},
  994. {0x14, 0x00},
  995. {0x15, 0x00},
  996. {0x16, 0x00},
  997. {0x17, 0x00},
  998. {0x18, 0x00},
  999. {0x19, 0x00},
  1000. {0x1a, 0x00},
  1001. {0x1b, 0x8f},
  1002. {0x1c, 0x09},
  1003. {0x1d, 0x00},
  1004. {0x1e, 0x00},
  1005. {0x1f, 0x00},
  1006. {0x20, 0x00},
  1007. {0x21, 0x00},
  1008. {0x22, 0x00},
  1009. {0x23, 0x00},
  1010. {0x24, 0x00},
  1011. {0x25, 0x4a},
  1012. {0x26, 0x00},
  1013. {0x27, 0x00},
  1014. {0x28, 0x00},
  1015. {0x29, 0x00},
  1016. {0x2a, 0x00},
  1017. {0x2b, 0x00},
  1018. {0x2c, 0x00},
  1019. {0x2d, 0x4a},
  1020. {0x2e, 0x00},
  1021. {0x2f, 0x0a},
  1022. {0x30, 0x26},
  1023. {0x31, 0x5b},
  1024. {0x32, 0x00},
  1025. {0x33, 0x00},
  1026. {0x34, 0x00},
  1027. {0x35, 0x00},
  1028. {0x36, 0xaa},
  1029. {0x37, 0xaa},
  1030. {0x38, 0xff},
  1031. {0x39, 0xff},
  1032. {0x3a, 0x79},
  1033. {0x3b, 0x00},
  1034. {0x3c, 0x00},
  1035. {0x3d, 0x0b},
  1036. {0x3e, 0x48},
  1037. {0x3f, 0x04},
  1038. {0x40, 0x00},
  1039. {0x41, 0x08},
  1040. {0x42, 0x00},
  1041. {0x43, 0x08},
  1042. {0x44, 0x08},
  1043. {0x45, 0x14},
  1044. {0x46, 0x05},
  1045. {0x47, 0x09},
  1046. {0x48, 0x00},
  1047. {0x49, 0x00},
  1048. {0x4a, 0x00},
  1049. {0x4b, 0x00},
  1050. {0x4c, 0x09},
  1051. {0x4d, 0x73},
  1052. {0x4e, 0x00},
  1053. {0x4f, 0xc5},
  1054. {0x50, 0x15},
  1055. {0x51, 0x19},
  1056. {0x52, 0x00},
  1057. {0x53, 0x00},
  1058. {0x54, 0x00},
  1059. {0x55, 0x00},
  1060. {0x56, 0x00},
  1061. {0x57, 0x00},
  1062. {0x58, 0x00},
  1063. {0x59, 0xb0},
  1064. {0x5a, 0x00},
  1065. {0x5b, 0x00},
  1066. {0x5c, 0x00},
  1067. {0x5d, 0x00},
  1068. {0x5e, 0x00},
  1069. {0x5f, 0x00},
  1070. {0x60, 0xe4},
  1071. {0x61, 0x80},
  1072. {0x62, 0x00},
  1073. {0x63, 0x00},
  1074. {0x64, 0x00},
  1075. {0x65, 0x00},
  1076. {0x66, 0x98},
  1077. {0x67, 0x0a},
  1078. {0x68, 0x00},
  1079. {0x69, 0x00},
  1080. {0x6a, 0x00},
  1081. {0x6b, 0x00},
  1082. {0x6c, 0x00}, /* RobertYu:20050125, request by JJSue */
  1083. {0x6d, 0x03},
  1084. {0x6e, 0x01},
  1085. {0x6f, 0x00},
  1086. {0x70, 0x00},
  1087. {0x71, 0x00},
  1088. {0x72, 0x00},
  1089. {0x73, 0x00},
  1090. {0x74, 0x00},
  1091. {0x75, 0x00},
  1092. {0x76, 0x00},
  1093. {0x77, 0x00},
  1094. {0x78, 0x00},
  1095. {0x79, 0x00},
  1096. {0x7a, 0x00},
  1097. {0x7b, 0x00},
  1098. {0x7c, 0x00},
  1099. {0x7d, 0x00},
  1100. {0x7e, 0x00},
  1101. {0x7f, 0x00},
  1102. {0x80, 0x8c},
  1103. {0x81, 0x01},
  1104. {0x82, 0x09},
  1105. {0x83, 0x00},
  1106. {0x84, 0x00},
  1107. {0x85, 0x00},
  1108. {0x86, 0x00},
  1109. {0x87, 0x00},
  1110. {0x88, 0x08},
  1111. {0x89, 0x00},
  1112. {0x8a, 0x0f},
  1113. {0x8b, 0xb7},
  1114. {0x8c, 0x88},
  1115. {0x8d, 0x47},
  1116. {0x8e, 0xaa},
  1117. {0x8f, 0x02},
  1118. {0x90, 0x22},
  1119. {0x91, 0x00},
  1120. {0x92, 0x00},
  1121. {0x93, 0x00},
  1122. {0x94, 0x00},
  1123. {0x95, 0x00},
  1124. {0x96, 0x00},
  1125. {0x97, 0xeb},
  1126. {0x98, 0x00},
  1127. {0x99, 0x00},
  1128. {0x9a, 0x00},
  1129. {0x9b, 0x00},
  1130. {0x9c, 0x00},
  1131. {0x9d, 0x00},
  1132. {0x9e, 0x00},
  1133. {0x9f, 0x01},
  1134. {0xa0, 0x00},
  1135. {0xa1, 0x00},
  1136. {0xa2, 0x00},
  1137. {0xa3, 0x00},
  1138. {0xa4, 0x00},
  1139. {0xa5, 0x00},
  1140. {0xa6, 0x10},
  1141. {0xa7, 0x00},
  1142. {0xa8, 0x18},
  1143. {0xa9, 0x00},
  1144. {0xaa, 0x00},
  1145. {0xab, 0x00},
  1146. {0xac, 0x00},
  1147. {0xad, 0x00},
  1148. {0xae, 0x00},
  1149. {0xaf, 0x18},
  1150. {0xb0, 0x38},
  1151. {0xb1, 0x30},
  1152. {0xb2, 0x00},
  1153. {0xb3, 0x00},
  1154. {0xb4, 0xff},
  1155. {0xb5, 0x0f},
  1156. {0xb6, 0xe4},
  1157. {0xb7, 0xe2},
  1158. {0xb8, 0x00},
  1159. {0xb9, 0x00},
  1160. {0xba, 0x00},
  1161. {0xbb, 0x03},
  1162. {0xbc, 0x01},
  1163. {0xbd, 0x00},
  1164. {0xbe, 0x00},
  1165. {0xbf, 0x00},
  1166. {0xc0, 0x18},
  1167. {0xc1, 0x20},
  1168. {0xc2, 0x07},
  1169. {0xc3, 0x18},
  1170. {0xc4, 0xff},
  1171. {0xc5, 0x2c},
  1172. {0xc6, 0x0c},
  1173. {0xc7, 0x0a},
  1174. {0xc8, 0x0e},
  1175. {0xc9, 0x01},
  1176. {0xca, 0x68},
  1177. {0xcb, 0xa7},
  1178. {0xcc, 0x3c},
  1179. {0xcd, 0x10},
  1180. {0xce, 0x00},
  1181. {0xcf, 0x25},
  1182. {0xd0, 0x40},
  1183. {0xd1, 0x12},
  1184. {0xd2, 0x00},
  1185. {0xd3, 0x00},
  1186. {0xd4, 0x10},
  1187. {0xd5, 0x28},
  1188. {0xd6, 0x80},
  1189. {0xd7, 0x2A},
  1190. {0xd8, 0x00},
  1191. {0xd9, 0x00},
  1192. {0xda, 0x00},
  1193. {0xdb, 0x00},
  1194. {0xdc, 0x00},
  1195. {0xdd, 0x00},
  1196. {0xde, 0x00},
  1197. {0xdf, 0x00},
  1198. {0xe0, 0x00},
  1199. {0xe1, 0xB3},
  1200. {0xe2, 0x00},
  1201. {0xe3, 0x00},
  1202. {0xe4, 0x00},
  1203. {0xe5, 0x10},
  1204. {0xe6, 0x00},
  1205. {0xe7, 0x1C},
  1206. {0xe8, 0x00},
  1207. {0xe9, 0xf4},
  1208. {0xea, 0x00},
  1209. {0xeb, 0xff},
  1210. {0xec, 0x79},
  1211. {0xed, 0x20},
  1212. {0xee, 0x30},
  1213. {0xef, 0x01},
  1214. {0xf0, 0x00},
  1215. {0xf1, 0x3e},
  1216. {0xf2, 0x00},
  1217. {0xf3, 0x00},
  1218. {0xf4, 0x00},
  1219. {0xf5, 0x00},
  1220. {0xf6, 0x00},
  1221. {0xf7, 0x00},
  1222. {0xf8, 0x00},
  1223. {0xf9, 0x00},
  1224. {0xfa, 0x00},
  1225. {0xfb, 0x00},
  1226. {0xfc, 0x00},
  1227. {0xfd, 0x00},
  1228. {0xfe, 0x00},
  1229. {0xff, 0x00},
  1230. };
  1231. #define CB_VT3253B0_INIT_FOR_UW2451 256
  1232. /* For UW2451 */
  1233. static unsigned char byVT3253B0_UW2451[CB_VT3253B0_INIT_FOR_UW2451][2] = {
  1234. {0x00, 0x31},
  1235. {0x01, 0x00},
  1236. {0x02, 0x00},
  1237. {0x03, 0x00},
  1238. {0x04, 0x00},
  1239. {0x05, 0x81},
  1240. {0x06, 0x00},
  1241. {0x07, 0x00},
  1242. {0x08, 0x38},
  1243. {0x09, 0x45},
  1244. {0x0a, 0x28},
  1245. {0x0b, 0x76},
  1246. {0x0c, 0x00},
  1247. {0x0d, 0x00},
  1248. {0x0e, 0x80},
  1249. {0x0f, 0x00},
  1250. {0x10, 0x00},
  1251. {0x11, 0x00},
  1252. {0x12, 0x00},
  1253. {0x13, 0x00},
  1254. {0x14, 0x00},
  1255. {0x15, 0x00},
  1256. {0x16, 0x00},
  1257. {0x17, 0x00},
  1258. {0x18, 0x00},
  1259. {0x19, 0x00},
  1260. {0x1a, 0x00},
  1261. {0x1b, 0x8f},
  1262. {0x1c, 0x0f},
  1263. {0x1d, 0x00},
  1264. {0x1e, 0x00},
  1265. {0x1f, 0x00},
  1266. {0x20, 0x00},
  1267. {0x21, 0x00},
  1268. {0x22, 0x00},
  1269. {0x23, 0x00},
  1270. {0x24, 0x00},
  1271. {0x25, 0x4a},
  1272. {0x26, 0x00},
  1273. {0x27, 0x00},
  1274. {0x28, 0x00},
  1275. {0x29, 0x00},
  1276. {0x2a, 0x00},
  1277. {0x2b, 0x00},
  1278. {0x2c, 0x00},
  1279. {0x2d, 0x18},
  1280. {0x2e, 0x00},
  1281. {0x2f, 0x0a},
  1282. {0x30, 0x26},
  1283. {0x31, 0x5b},
  1284. {0x32, 0x00},
  1285. {0x33, 0x00},
  1286. {0x34, 0x00},
  1287. {0x35, 0x00},
  1288. {0x36, 0xaa},
  1289. {0x37, 0xaa},
  1290. {0x38, 0xff},
  1291. {0x39, 0xff},
  1292. {0x3a, 0x00},
  1293. {0x3b, 0x00},
  1294. {0x3c, 0x00},
  1295. {0x3d, 0x03},
  1296. {0x3e, 0x1d},
  1297. {0x3f, 0x04},
  1298. {0x40, 0x00},
  1299. {0x41, 0x08},
  1300. {0x42, 0x00},
  1301. {0x43, 0x08},
  1302. {0x44, 0x08},
  1303. {0x45, 0x14},
  1304. {0x46, 0x05},
  1305. {0x47, 0x09},
  1306. {0x48, 0x00},
  1307. {0x49, 0x00},
  1308. {0x4a, 0x00},
  1309. {0x4b, 0x00},
  1310. {0x4c, 0x09},
  1311. {0x4d, 0x90},
  1312. {0x4e, 0x00},
  1313. {0x4f, 0xc5},
  1314. {0x50, 0x15},
  1315. {0x51, 0x19},
  1316. {0x52, 0x00},
  1317. {0x53, 0x00},
  1318. {0x54, 0x00},
  1319. {0x55, 0x00},
  1320. {0x56, 0x00},
  1321. {0x57, 0x00},
  1322. {0x58, 0x00},
  1323. {0x59, 0xb0},
  1324. {0x5a, 0x00},
  1325. {0x5b, 0x00},
  1326. {0x5c, 0x00},
  1327. {0x5d, 0x00},
  1328. {0x5e, 0x00},
  1329. {0x5f, 0x00},
  1330. {0x60, 0xb3},
  1331. {0x61, 0x81},
  1332. {0x62, 0x00},
  1333. {0x63, 0x00},
  1334. {0x64, 0x00},
  1335. {0x65, 0x00},
  1336. {0x66, 0x57},
  1337. {0x67, 0x6c},
  1338. {0x68, 0x00},
  1339. {0x69, 0x00},
  1340. {0x6a, 0x00},
  1341. {0x6b, 0x00},
  1342. {0x6c, 0x00}, /* RobertYu:20050125, request by JJSue */
  1343. {0x6d, 0x03},
  1344. {0x6e, 0x01},
  1345. {0x6f, 0x00},
  1346. {0x70, 0x00},
  1347. {0x71, 0x00},
  1348. {0x72, 0x00},
  1349. {0x73, 0x00},
  1350. {0x74, 0x00},
  1351. {0x75, 0x00},
  1352. {0x76, 0x00},
  1353. {0x77, 0x00},
  1354. {0x78, 0x00},
  1355. {0x79, 0x00},
  1356. {0x7a, 0x00},
  1357. {0x7b, 0x00},
  1358. {0x7c, 0x00},
  1359. {0x7d, 0x00},
  1360. {0x7e, 0x00},
  1361. {0x7f, 0x00},
  1362. {0x80, 0x8c},
  1363. {0x81, 0x00},
  1364. {0x82, 0x0e},
  1365. {0x83, 0x00},
  1366. {0x84, 0x00},
  1367. {0x85, 0x00},
  1368. {0x86, 0x00},
  1369. {0x87, 0x00},
  1370. {0x88, 0x08},
  1371. {0x89, 0x00},
  1372. {0x8a, 0x0e},
  1373. {0x8b, 0xa7},
  1374. {0x8c, 0x88},
  1375. {0x8d, 0x47},
  1376. {0x8e, 0xaa},
  1377. {0x8f, 0x02},
  1378. {0x90, 0x00},
  1379. {0x91, 0x00},
  1380. {0x92, 0x00},
  1381. {0x93, 0x00},
  1382. {0x94, 0x00},
  1383. {0x95, 0x00},
  1384. {0x96, 0x00},
  1385. {0x97, 0xe3},
  1386. {0x98, 0x00},
  1387. {0x99, 0x00},
  1388. {0x9a, 0x00},
  1389. {0x9b, 0x00},
  1390. {0x9c, 0x00},
  1391. {0x9d, 0x00},
  1392. {0x9e, 0x00},
  1393. {0x9f, 0x00},
  1394. {0xa0, 0x00},
  1395. {0xa1, 0x00},
  1396. {0xa2, 0x00},
  1397. {0xa3, 0x00},
  1398. {0xa4, 0x00},
  1399. {0xa5, 0x00},
  1400. {0xa6, 0x10},
  1401. {0xa7, 0x00},
  1402. {0xa8, 0x18},
  1403. {0xa9, 0x00},
  1404. {0xaa, 0x00},
  1405. {0xab, 0x00},
  1406. {0xac, 0x00},
  1407. {0xad, 0x00},
  1408. {0xae, 0x00},
  1409. {0xaf, 0x18},
  1410. {0xb0, 0x18},
  1411. {0xb1, 0x30},
  1412. {0xb2, 0x00},
  1413. {0xb3, 0x00},
  1414. {0xb4, 0x00},
  1415. {0xb5, 0x00},
  1416. {0xb6, 0x00},
  1417. {0xb7, 0x00},
  1418. {0xb8, 0x00},
  1419. {0xb9, 0x00},
  1420. {0xba, 0x00},
  1421. {0xbb, 0x03},
  1422. {0xbc, 0x01},
  1423. {0xbd, 0x00},
  1424. {0xbe, 0x00},
  1425. {0xbf, 0x00},
  1426. {0xc0, 0x10},
  1427. {0xc1, 0x20},
  1428. {0xc2, 0x00},
  1429. {0xc3, 0x20},
  1430. {0xc4, 0x00},
  1431. {0xc5, 0x2c},
  1432. {0xc6, 0x1c},
  1433. {0xc7, 0x10},
  1434. {0xc8, 0x10},
  1435. {0xc9, 0x01},
  1436. {0xca, 0x68},
  1437. {0xcb, 0xa7},
  1438. {0xcc, 0x3c},
  1439. {0xcd, 0x09},
  1440. {0xce, 0x00},
  1441. {0xcf, 0x20},
  1442. {0xd0, 0x40},
  1443. {0xd1, 0x10},
  1444. {0xd2, 0x00},
  1445. {0xd3, 0x00},
  1446. {0xd4, 0x20},
  1447. {0xd5, 0x28},
  1448. {0xd6, 0xa0},
  1449. {0xd7, 0x2a},
  1450. {0xd8, 0x00},
  1451. {0xd9, 0x00},
  1452. {0xda, 0x00},
  1453. {0xdb, 0x00},
  1454. {0xdc, 0x00},
  1455. {0xdd, 0x00},
  1456. {0xde, 0x00},
  1457. {0xdf, 0x00},
  1458. {0xe0, 0x00},
  1459. {0xe1, 0xd3},
  1460. {0xe2, 0xc0},
  1461. {0xe3, 0x00},
  1462. {0xe4, 0x00},
  1463. {0xe5, 0x10},
  1464. {0xe6, 0x00},
  1465. {0xe7, 0x12},
  1466. {0xe8, 0x12},
  1467. {0xe9, 0x34},
  1468. {0xea, 0x00},
  1469. {0xeb, 0xff},
  1470. {0xec, 0x79},
  1471. {0xed, 0x20},
  1472. {0xee, 0x30},
  1473. {0xef, 0x01},
  1474. {0xf0, 0x00},
  1475. {0xf1, 0x3e},
  1476. {0xf2, 0x00},
  1477. {0xf3, 0x00},
  1478. {0xf4, 0x00},
  1479. {0xf5, 0x00},
  1480. {0xf6, 0x00},
  1481. {0xf7, 0x00},
  1482. {0xf8, 0x00},
  1483. {0xf9, 0x00},
  1484. {0xfa, 0x00},
  1485. {0xfb, 0x00},
  1486. {0xfc, 0x00},
  1487. {0xfd, 0x00},
  1488. {0xfe, 0x00},
  1489. {0xff, 0x00},
  1490. };
  1491. #define CB_VT3253B0_AGC 193
  1492. /* For AIROHA */
  1493. static unsigned char byVT3253B0_AGC[CB_VT3253B0_AGC][2] = {
  1494. {0xF0, 0x00},
  1495. {0xF1, 0x00},
  1496. {0xF0, 0x80},
  1497. {0xF0, 0x01},
  1498. {0xF1, 0x00},
  1499. {0xF0, 0x81},
  1500. {0xF0, 0x02},
  1501. {0xF1, 0x02},
  1502. {0xF0, 0x82},
  1503. {0xF0, 0x03},
  1504. {0xF1, 0x04},
  1505. {0xF0, 0x83},
  1506. {0xF0, 0x03},
  1507. {0xF1, 0x04},
  1508. {0xF0, 0x84},
  1509. {0xF0, 0x04},
  1510. {0xF1, 0x06},
  1511. {0xF0, 0x85},
  1512. {0xF0, 0x05},
  1513. {0xF1, 0x06},
  1514. {0xF0, 0x86},
  1515. {0xF0, 0x06},
  1516. {0xF1, 0x06},
  1517. {0xF0, 0x87},
  1518. {0xF0, 0x07},
  1519. {0xF1, 0x08},
  1520. {0xF0, 0x88},
  1521. {0xF0, 0x08},
  1522. {0xF1, 0x08},
  1523. {0xF0, 0x89},
  1524. {0xF0, 0x09},
  1525. {0xF1, 0x0A},
  1526. {0xF0, 0x8A},
  1527. {0xF0, 0x0A},
  1528. {0xF1, 0x0A},
  1529. {0xF0, 0x8B},
  1530. {0xF0, 0x0B},
  1531. {0xF1, 0x0C},
  1532. {0xF0, 0x8C},
  1533. {0xF0, 0x0C},
  1534. {0xF1, 0x0C},
  1535. {0xF0, 0x8D},
  1536. {0xF0, 0x0D},
  1537. {0xF1, 0x0E},
  1538. {0xF0, 0x8E},
  1539. {0xF0, 0x0E},
  1540. {0xF1, 0x0E},
  1541. {0xF0, 0x8F},
  1542. {0xF0, 0x0F},
  1543. {0xF1, 0x10},
  1544. {0xF0, 0x90},
  1545. {0xF0, 0x10},
  1546. {0xF1, 0x10},
  1547. {0xF0, 0x91},
  1548. {0xF0, 0x11},
  1549. {0xF1, 0x12},
  1550. {0xF0, 0x92},
  1551. {0xF0, 0x12},
  1552. {0xF1, 0x12},
  1553. {0xF0, 0x93},
  1554. {0xF0, 0x13},
  1555. {0xF1, 0x14},
  1556. {0xF0, 0x94},
  1557. {0xF0, 0x14},
  1558. {0xF1, 0x14},
  1559. {0xF0, 0x95},
  1560. {0xF0, 0x15},
  1561. {0xF1, 0x16},
  1562. {0xF0, 0x96},
  1563. {0xF0, 0x16},
  1564. {0xF1, 0x16},
  1565. {0xF0, 0x97},
  1566. {0xF0, 0x17},
  1567. {0xF1, 0x18},
  1568. {0xF0, 0x98},
  1569. {0xF0, 0x18},
  1570. {0xF1, 0x18},
  1571. {0xF0, 0x99},
  1572. {0xF0, 0x19},
  1573. {0xF1, 0x1A},
  1574. {0xF0, 0x9A},
  1575. {0xF0, 0x1A},
  1576. {0xF1, 0x1A},
  1577. {0xF0, 0x9B},
  1578. {0xF0, 0x1B},
  1579. {0xF1, 0x1C},
  1580. {0xF0, 0x9C},
  1581. {0xF0, 0x1C},
  1582. {0xF1, 0x1C},
  1583. {0xF0, 0x9D},
  1584. {0xF0, 0x1D},
  1585. {0xF1, 0x1E},
  1586. {0xF0, 0x9E},
  1587. {0xF0, 0x1E},
  1588. {0xF1, 0x1E},
  1589. {0xF0, 0x9F},
  1590. {0xF0, 0x1F},
  1591. {0xF1, 0x20},
  1592. {0xF0, 0xA0},
  1593. {0xF0, 0x20},
  1594. {0xF1, 0x20},
  1595. {0xF0, 0xA1},
  1596. {0xF0, 0x21},
  1597. {0xF1, 0x22},
  1598. {0xF0, 0xA2},
  1599. {0xF0, 0x22},
  1600. {0xF1, 0x22},
  1601. {0xF0, 0xA3},
  1602. {0xF0, 0x23},
  1603. {0xF1, 0x24},
  1604. {0xF0, 0xA4},
  1605. {0xF0, 0x24},
  1606. {0xF1, 0x24},
  1607. {0xF0, 0xA5},
  1608. {0xF0, 0x25},
  1609. {0xF1, 0x26},
  1610. {0xF0, 0xA6},
  1611. {0xF0, 0x26},
  1612. {0xF1, 0x26},
  1613. {0xF0, 0xA7},
  1614. {0xF0, 0x27},
  1615. {0xF1, 0x28},
  1616. {0xF0, 0xA8},
  1617. {0xF0, 0x28},
  1618. {0xF1, 0x28},
  1619. {0xF0, 0xA9},
  1620. {0xF0, 0x29},
  1621. {0xF1, 0x2A},
  1622. {0xF0, 0xAA},
  1623. {0xF0, 0x2A},
  1624. {0xF1, 0x2A},
  1625. {0xF0, 0xAB},
  1626. {0xF0, 0x2B},
  1627. {0xF1, 0x2C},
  1628. {0xF0, 0xAC},
  1629. {0xF0, 0x2C},
  1630. {0xF1, 0x2C},
  1631. {0xF0, 0xAD},
  1632. {0xF0, 0x2D},
  1633. {0xF1, 0x2E},
  1634. {0xF0, 0xAE},
  1635. {0xF0, 0x2E},
  1636. {0xF1, 0x2E},
  1637. {0xF0, 0xAF},
  1638. {0xF0, 0x2F},
  1639. {0xF1, 0x30},
  1640. {0xF0, 0xB0},
  1641. {0xF0, 0x30},
  1642. {0xF1, 0x30},
  1643. {0xF0, 0xB1},
  1644. {0xF0, 0x31},
  1645. {0xF1, 0x32},
  1646. {0xF0, 0xB2},
  1647. {0xF0, 0x32},
  1648. {0xF1, 0x32},
  1649. {0xF0, 0xB3},
  1650. {0xF0, 0x33},
  1651. {0xF1, 0x34},
  1652. {0xF0, 0xB4},
  1653. {0xF0, 0x34},
  1654. {0xF1, 0x34},
  1655. {0xF0, 0xB5},
  1656. {0xF0, 0x35},
  1657. {0xF1, 0x36},
  1658. {0xF0, 0xB6},
  1659. {0xF0, 0x36},
  1660. {0xF1, 0x36},
  1661. {0xF0, 0xB7},
  1662. {0xF0, 0x37},
  1663. {0xF1, 0x38},
  1664. {0xF0, 0xB8},
  1665. {0xF0, 0x38},
  1666. {0xF1, 0x38},
  1667. {0xF0, 0xB9},
  1668. {0xF0, 0x39},
  1669. {0xF1, 0x3A},
  1670. {0xF0, 0xBA},
  1671. {0xF0, 0x3A},
  1672. {0xF1, 0x3A},
  1673. {0xF0, 0xBB},
  1674. {0xF0, 0x3B},
  1675. {0xF1, 0x3C},
  1676. {0xF0, 0xBC},
  1677. {0xF0, 0x3C},
  1678. {0xF1, 0x3C},
  1679. {0xF0, 0xBD},
  1680. {0xF0, 0x3D},
  1681. {0xF1, 0x3E},
  1682. {0xF0, 0xBE},
  1683. {0xF0, 0x3E},
  1684. {0xF1, 0x3E},
  1685. {0xF0, 0xBF},
  1686. {0xF0, 0x00},
  1687. };
  1688. static const unsigned short awcFrameTime[MAX_RATE] = {
  1689. 10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216
  1690. };
  1691. /*--------------------- Static Functions --------------------------*/
  1692. static
  1693. unsigned long
  1694. s_ulGetRatio(struct vnt_private *pDevice);
  1695. static
  1696. void
  1697. s_vChangeAntenna(
  1698. struct vnt_private *pDevice
  1699. );
  1700. static
  1701. void
  1702. s_vChangeAntenna(
  1703. struct vnt_private *pDevice
  1704. )
  1705. {
  1706. if (pDevice->dwRxAntennaSel == 0) {
  1707. pDevice->dwRxAntennaSel = 1;
  1708. if (pDevice->bTxRxAntInv == true)
  1709. BBvSetRxAntennaMode(pDevice->PortOffset, ANT_A);
  1710. else
  1711. BBvSetRxAntennaMode(pDevice->PortOffset, ANT_B);
  1712. } else {
  1713. pDevice->dwRxAntennaSel = 0;
  1714. if (pDevice->bTxRxAntInv == true)
  1715. BBvSetRxAntennaMode(pDevice->PortOffset, ANT_B);
  1716. else
  1717. BBvSetRxAntennaMode(pDevice->PortOffset, ANT_A);
  1718. }
  1719. if (pDevice->dwTxAntennaSel == 0) {
  1720. pDevice->dwTxAntennaSel = 1;
  1721. BBvSetTxAntennaMode(pDevice->PortOffset, ANT_B);
  1722. } else {
  1723. pDevice->dwTxAntennaSel = 0;
  1724. BBvSetTxAntennaMode(pDevice->PortOffset, ANT_A);
  1725. }
  1726. }
  1727. /*--------------------- Export Variables --------------------------*/
  1728. /*
  1729. * Description: Calculate data frame transmitting time
  1730. *
  1731. * Parameters:
  1732. * In:
  1733. * byPreambleType - Preamble Type
  1734. * byPktType - PK_TYPE_11A, PK_TYPE_11B, PK_TYPE_11GB, PK_TYPE_11GA
  1735. * cbFrameLength - Baseband Type
  1736. * wRate - Tx Rate
  1737. * Out:
  1738. *
  1739. * Return Value: FrameTime
  1740. *
  1741. */
  1742. unsigned int
  1743. BBuGetFrameTime(
  1744. unsigned char byPreambleType,
  1745. unsigned char byPktType,
  1746. unsigned int cbFrameLength,
  1747. unsigned short wRate
  1748. )
  1749. {
  1750. unsigned int uFrameTime;
  1751. unsigned int uPreamble;
  1752. unsigned int uTmp;
  1753. unsigned int uRateIdx = (unsigned int) wRate;
  1754. unsigned int uRate = 0;
  1755. if (uRateIdx > RATE_54M) {
  1756. ASSERT(0);
  1757. return 0;
  1758. }
  1759. uRate = (unsigned int)awcFrameTime[uRateIdx];
  1760. if (uRateIdx <= 3) { /* CCK mode */
  1761. if (byPreambleType == 1) /* Short */
  1762. uPreamble = 96;
  1763. else
  1764. uPreamble = 192;
  1765. uFrameTime = (cbFrameLength * 80) / uRate; /* ????? */
  1766. uTmp = (uFrameTime * uRate) / 80;
  1767. if (cbFrameLength != uTmp)
  1768. uFrameTime++;
  1769. return uPreamble + uFrameTime;
  1770. } else {
  1771. uFrameTime = (cbFrameLength * 8 + 22) / uRate; /* ???????? */
  1772. uTmp = ((uFrameTime * uRate) - 22) / 8;
  1773. if (cbFrameLength != uTmp)
  1774. uFrameTime++;
  1775. uFrameTime = uFrameTime * 4; /* ??????? */
  1776. if (byPktType != PK_TYPE_11A)
  1777. uFrameTime += 6; /* ?????? */
  1778. return 20 + uFrameTime; /* ?????? */
  1779. }
  1780. }
  1781. /*
  1782. * Description: Calculate Length, Service, and Signal fields of Phy for Tx
  1783. *
  1784. * Parameters:
  1785. * In:
  1786. * priv - Device Structure
  1787. * frame_length - Tx Frame Length
  1788. * tx_rate - Tx Rate
  1789. * Out:
  1790. * struct vnt_phy_field *phy
  1791. * - pointer to Phy Length field
  1792. * - pointer to Phy Service field
  1793. * - pointer to Phy Signal field
  1794. *
  1795. * Return Value: none
  1796. *
  1797. */
  1798. void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length,
  1799. u16 tx_rate, u8 pkt_type, struct vnt_phy_field *phy)
  1800. {
  1801. u32 bit_count;
  1802. u32 count = 0;
  1803. u32 tmp;
  1804. int ext_bit;
  1805. u8 preamble_type = priv->byPreambleType;
  1806. bit_count = frame_length * 8;
  1807. ext_bit = false;
  1808. switch (tx_rate) {
  1809. case RATE_1M:
  1810. count = bit_count;
  1811. phy->signal = 0x00;
  1812. break;
  1813. case RATE_2M:
  1814. count = bit_count / 2;
  1815. if (preamble_type == 1)
  1816. phy->signal = 0x09;
  1817. else
  1818. phy->signal = 0x01;
  1819. break;
  1820. case RATE_5M:
  1821. count = (bit_count * 10) / 55;
  1822. tmp = (count * 55) / 10;
  1823. if (tmp != bit_count)
  1824. count++;
  1825. if (preamble_type == 1)
  1826. phy->signal = 0x0a;
  1827. else
  1828. phy->signal = 0x02;
  1829. break;
  1830. case RATE_11M:
  1831. count = bit_count / 11;
  1832. tmp = count * 11;
  1833. if (tmp != bit_count) {
  1834. count++;
  1835. if ((bit_count - tmp) <= 3)
  1836. ext_bit = true;
  1837. }
  1838. if (preamble_type == 1)
  1839. phy->signal = 0x0b;
  1840. else
  1841. phy->signal = 0x03;
  1842. break;
  1843. case RATE_6M:
  1844. if (pkt_type == PK_TYPE_11A)
  1845. phy->signal = 0x9b;
  1846. else
  1847. phy->signal = 0x8b;
  1848. break;
  1849. case RATE_9M:
  1850. if (pkt_type == PK_TYPE_11A)
  1851. phy->signal = 0x9f;
  1852. else
  1853. phy->signal = 0x8f;
  1854. break;
  1855. case RATE_12M:
  1856. if (pkt_type == PK_TYPE_11A)
  1857. phy->signal = 0x9a;
  1858. else
  1859. phy->signal = 0x8a;
  1860. break;
  1861. case RATE_18M:
  1862. if (pkt_type == PK_TYPE_11A)
  1863. phy->signal = 0x9e;
  1864. else
  1865. phy->signal = 0x8e;
  1866. break;
  1867. case RATE_24M:
  1868. if (pkt_type == PK_TYPE_11A)
  1869. phy->signal = 0x99;
  1870. else
  1871. phy->signal = 0x89;
  1872. break;
  1873. case RATE_36M:
  1874. if (pkt_type == PK_TYPE_11A)
  1875. phy->signal = 0x9d;
  1876. else
  1877. phy->signal = 0x8d;
  1878. break;
  1879. case RATE_48M:
  1880. if (pkt_type == PK_TYPE_11A)
  1881. phy->signal = 0x98;
  1882. else
  1883. phy->signal = 0x88;
  1884. break;
  1885. case RATE_54M:
  1886. if (pkt_type == PK_TYPE_11A)
  1887. phy->signal = 0x9c;
  1888. else
  1889. phy->signal = 0x8c;
  1890. break;
  1891. default:
  1892. if (pkt_type == PK_TYPE_11A)
  1893. phy->signal = 0x9c;
  1894. else
  1895. phy->signal = 0x8c;
  1896. break;
  1897. }
  1898. if (pkt_type == PK_TYPE_11B) {
  1899. phy->service = 0x00;
  1900. if (ext_bit)
  1901. phy->service |= 0x80;
  1902. phy->len = cpu_to_le16((u16)count);
  1903. } else {
  1904. phy->service = 0x00;
  1905. phy->len = cpu_to_le16((u16)frame_length);
  1906. }
  1907. }
  1908. /*
  1909. * Description: Read a byte from BASEBAND, by embedded programming
  1910. *
  1911. * Parameters:
  1912. * In:
  1913. * dwIoBase - I/O base address
  1914. * byBBAddr - address of register in Baseband
  1915. * Out:
  1916. * pbyData - data read
  1917. *
  1918. * Return Value: true if succeeded; false if failed.
  1919. *
  1920. */
  1921. bool BBbReadEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char *pbyData)
  1922. {
  1923. unsigned short ww;
  1924. unsigned char byValue;
  1925. /* BB reg offset */
  1926. VNSvOutPortB(dwIoBase + MAC_REG_BBREGADR, byBBAddr);
  1927. /* turn on REGR */
  1928. MACvRegBitsOn(dwIoBase, MAC_REG_BBREGCTL, BBREGCTL_REGR);
  1929. /* W_MAX_TIMEOUT is the timeout period */
  1930. for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
  1931. VNSvInPortB(dwIoBase + MAC_REG_BBREGCTL, &byValue);
  1932. if (byValue & BBREGCTL_DONE)
  1933. break;
  1934. }
  1935. /* get BB data */
  1936. VNSvInPortB(dwIoBase + MAC_REG_BBREGDATA, pbyData);
  1937. if (ww == W_MAX_TIMEOUT) {
  1938. DBG_PORT80(0x30);
  1939. pr_debug(" DBG_PORT80(0x30)\n");
  1940. return false;
  1941. }
  1942. return true;
  1943. }
  1944. /*
  1945. * Description: Write a Byte to BASEBAND, by embedded programming
  1946. *
  1947. * Parameters:
  1948. * In:
  1949. * dwIoBase - I/O base address
  1950. * byBBAddr - address of register in Baseband
  1951. * byData - data to write
  1952. * Out:
  1953. * none
  1954. *
  1955. * Return Value: true if succeeded; false if failed.
  1956. *
  1957. */
  1958. bool BBbWriteEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byData)
  1959. {
  1960. unsigned short ww;
  1961. unsigned char byValue;
  1962. /* BB reg offset */
  1963. VNSvOutPortB(dwIoBase + MAC_REG_BBREGADR, byBBAddr);
  1964. /* set BB data */
  1965. VNSvOutPortB(dwIoBase + MAC_REG_BBREGDATA, byData);
  1966. /* turn on BBREGCTL_REGW */
  1967. MACvRegBitsOn(dwIoBase, MAC_REG_BBREGCTL, BBREGCTL_REGW);
  1968. /* W_MAX_TIMEOUT is the timeout period */
  1969. for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
  1970. VNSvInPortB(dwIoBase + MAC_REG_BBREGCTL, &byValue);
  1971. if (byValue & BBREGCTL_DONE)
  1972. break;
  1973. }
  1974. if (ww == W_MAX_TIMEOUT) {
  1975. DBG_PORT80(0x31);
  1976. pr_debug(" DBG_PORT80(0x31)\n");
  1977. return false;
  1978. }
  1979. return true;
  1980. }
  1981. /*
  1982. * Description: Test if all bits are set for the Baseband register
  1983. *
  1984. * Parameters:
  1985. * In:
  1986. * dwIoBase - I/O base address
  1987. * byBBAddr - address of register in Baseband
  1988. * byTestBits - TestBits
  1989. * Out:
  1990. * none
  1991. *
  1992. * Return Value: true if all TestBits are set; false otherwise.
  1993. *
  1994. */
  1995. bool BBbIsRegBitsOn(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byTestBits)
  1996. {
  1997. unsigned char byOrgData;
  1998. BBbReadEmbedded(dwIoBase, byBBAddr, &byOrgData);
  1999. return (byOrgData & byTestBits) == byTestBits;
  2000. }
  2001. /*
  2002. * Description: Test if all bits are clear for the Baseband register
  2003. *
  2004. * Parameters:
  2005. * In:
  2006. * dwIoBase - I/O base address
  2007. * byBBAddr - address of register in Baseband
  2008. * byTestBits - TestBits
  2009. * Out:
  2010. * none
  2011. *
  2012. * Return Value: true if all TestBits are clear; false otherwise.
  2013. *
  2014. */
  2015. bool BBbIsRegBitsOff(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byTestBits)
  2016. {
  2017. unsigned char byOrgData;
  2018. BBbReadEmbedded(dwIoBase, byBBAddr, &byOrgData);
  2019. return (byOrgData & byTestBits) == 0;
  2020. }
  2021. /*
  2022. * Description: VIA VT3253 Baseband chip init function
  2023. *
  2024. * Parameters:
  2025. * In:
  2026. * dwIoBase - I/O base address
  2027. * byRevId - Revision ID
  2028. * byRFType - RF type
  2029. * Out:
  2030. * none
  2031. *
  2032. * Return Value: true if succeeded; false if failed.
  2033. *
  2034. */
  2035. bool BBbVT3253Init(struct vnt_private *pDevice)
  2036. {
  2037. bool bResult = true;
  2038. int ii;
  2039. void __iomem *dwIoBase = pDevice->PortOffset;
  2040. unsigned char byRFType = pDevice->byRFType;
  2041. unsigned char byLocalID = pDevice->byLocalID;
  2042. if (byRFType == RF_RFMD2959) {
  2043. if (byLocalID <= REV_ID_VT3253_A1) {
  2044. for (ii = 0; ii < CB_VT3253_INIT_FOR_RFMD; ii++)
  2045. bResult &= BBbWriteEmbedded(dwIoBase, byVT3253InitTab_RFMD[ii][0], byVT3253InitTab_RFMD[ii][1]);
  2046. } else {
  2047. for (ii = 0; ii < CB_VT3253B0_INIT_FOR_RFMD; ii++)
  2048. bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_RFMD[ii][0], byVT3253B0_RFMD[ii][1]);
  2049. for (ii = 0; ii < CB_VT3253B0_AGC_FOR_RFMD2959; ii++)
  2050. bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC4_RFMD2959[ii][0], byVT3253B0_AGC4_RFMD2959[ii][1]);
  2051. VNSvOutPortD(dwIoBase + MAC_REG_ITRTMSET, 0x23);
  2052. MACvRegBitsOn(dwIoBase, MAC_REG_PAPEDELAY, BIT0);
  2053. }
  2054. pDevice->abyBBVGA[0] = 0x18;
  2055. pDevice->abyBBVGA[1] = 0x0A;
  2056. pDevice->abyBBVGA[2] = 0x0;
  2057. pDevice->abyBBVGA[3] = 0x0;
  2058. pDevice->ldBmThreshold[0] = -70;
  2059. pDevice->ldBmThreshold[1] = -50;
  2060. pDevice->ldBmThreshold[2] = 0;
  2061. pDevice->ldBmThreshold[3] = 0;
  2062. } else if ((byRFType == RF_AIROHA) || (byRFType == RF_AL2230S)) {
  2063. for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++)
  2064. bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]);
  2065. for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
  2066. bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
  2067. pDevice->abyBBVGA[0] = 0x1C;
  2068. pDevice->abyBBVGA[1] = 0x10;
  2069. pDevice->abyBBVGA[2] = 0x0;
  2070. pDevice->abyBBVGA[3] = 0x0;
  2071. pDevice->ldBmThreshold[0] = -70;
  2072. pDevice->ldBmThreshold[1] = -48;
  2073. pDevice->ldBmThreshold[2] = 0;
  2074. pDevice->ldBmThreshold[3] = 0;
  2075. } else if (byRFType == RF_UW2451) {
  2076. for (ii = 0; ii < CB_VT3253B0_INIT_FOR_UW2451; ii++)
  2077. bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_UW2451[ii][0], byVT3253B0_UW2451[ii][1]);
  2078. for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
  2079. bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
  2080. VNSvOutPortB(dwIoBase + MAC_REG_ITRTMSET, 0x23);
  2081. MACvRegBitsOn(dwIoBase, MAC_REG_PAPEDELAY, BIT0);
  2082. pDevice->abyBBVGA[0] = 0x14;
  2083. pDevice->abyBBVGA[1] = 0x0A;
  2084. pDevice->abyBBVGA[2] = 0x0;
  2085. pDevice->abyBBVGA[3] = 0x0;
  2086. pDevice->ldBmThreshold[0] = -60;
  2087. pDevice->ldBmThreshold[1] = -50;
  2088. pDevice->ldBmThreshold[2] = 0;
  2089. pDevice->ldBmThreshold[3] = 0;
  2090. } else if (byRFType == RF_UW2452) {
  2091. for (ii = 0; ii < CB_VT3253B0_INIT_FOR_UW2451; ii++)
  2092. bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_UW2451[ii][0], byVT3253B0_UW2451[ii][1]);
  2093. /* Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted) */
  2094. /*bResult &= BBbWriteEmbedded(dwIoBase,0x09,0x41);*/
  2095. /* Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted) */
  2096. /*bResult &= BBbWriteEmbedded(dwIoBase,0x0a,0x28);*/
  2097. /* Select VC1/VC2, CR215 = 0x02->0x06 */
  2098. bResult &= BBbWriteEmbedded(dwIoBase, 0xd7, 0x06);
  2099. /* {{RobertYu:20050125, request by Jack */
  2100. bResult &= BBbWriteEmbedded(dwIoBase, 0x90, 0x20);
  2101. bResult &= BBbWriteEmbedded(dwIoBase, 0x97, 0xeb);
  2102. /* }} */
  2103. /* {{RobertYu:20050221, request by Jack */
  2104. bResult &= BBbWriteEmbedded(dwIoBase, 0xa6, 0x00);
  2105. bResult &= BBbWriteEmbedded(dwIoBase, 0xa8, 0x30);
  2106. /* }} */
  2107. bResult &= BBbWriteEmbedded(dwIoBase, 0xb0, 0x58);
  2108. for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
  2109. bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
  2110. pDevice->abyBBVGA[0] = 0x14;
  2111. pDevice->abyBBVGA[1] = 0x0A;
  2112. pDevice->abyBBVGA[2] = 0x0;
  2113. pDevice->abyBBVGA[3] = 0x0;
  2114. pDevice->ldBmThreshold[0] = -60;
  2115. pDevice->ldBmThreshold[1] = -50;
  2116. pDevice->ldBmThreshold[2] = 0;
  2117. pDevice->ldBmThreshold[3] = 0;
  2118. /* }} RobertYu */
  2119. } else if (byRFType == RF_VT3226) {
  2120. for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++)
  2121. bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]);
  2122. for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
  2123. bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
  2124. pDevice->abyBBVGA[0] = 0x1C;
  2125. pDevice->abyBBVGA[1] = 0x10;
  2126. pDevice->abyBBVGA[2] = 0x0;
  2127. pDevice->abyBBVGA[3] = 0x0;
  2128. pDevice->ldBmThreshold[0] = -70;
  2129. pDevice->ldBmThreshold[1] = -48;
  2130. pDevice->ldBmThreshold[2] = 0;
  2131. pDevice->ldBmThreshold[3] = 0;
  2132. /* Fix VT3226 DFC system timing issue */
  2133. MACvSetRFLE_LatchBase(dwIoBase);
  2134. /* {{ RobertYu: 20050104 */
  2135. } else if (byRFType == RF_AIROHA7230) {
  2136. for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++)
  2137. bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]);
  2138. /* {{ RobertYu:20050223, request by JerryChung */
  2139. /* Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted) */
  2140. /*bResult &= BBbWriteEmbedded(dwIoBase,0x09,0x41);*/
  2141. /* Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted) */
  2142. /*bResult &= BBbWriteEmbedded(dwIoBase,0x0a,0x28);*/
  2143. /* Select VC1/VC2, CR215 = 0x02->0x06 */
  2144. bResult &= BBbWriteEmbedded(dwIoBase, 0xd7, 0x06);
  2145. /* }} */
  2146. for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
  2147. bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
  2148. pDevice->abyBBVGA[0] = 0x1C;
  2149. pDevice->abyBBVGA[1] = 0x10;
  2150. pDevice->abyBBVGA[2] = 0x0;
  2151. pDevice->abyBBVGA[3] = 0x0;
  2152. pDevice->ldBmThreshold[0] = -70;
  2153. pDevice->ldBmThreshold[1] = -48;
  2154. pDevice->ldBmThreshold[2] = 0;
  2155. pDevice->ldBmThreshold[3] = 0;
  2156. /* }} RobertYu */
  2157. } else {
  2158. /* No VGA Table now */
  2159. pDevice->bUpdateBBVGA = false;
  2160. pDevice->abyBBVGA[0] = 0x1C;
  2161. }
  2162. if (byLocalID > REV_ID_VT3253_A1) {
  2163. BBbWriteEmbedded(dwIoBase, 0x04, 0x7F);
  2164. BBbWriteEmbedded(dwIoBase, 0x0D, 0x01);
  2165. }
  2166. return bResult;
  2167. }
  2168. /*
  2169. * Description: Read All Baseband Registers
  2170. *
  2171. * Parameters:
  2172. * In:
  2173. * dwIoBase - I/O base address
  2174. * pbyBBRegs - Point to struct that stores Baseband Registers
  2175. * Out:
  2176. * none
  2177. *
  2178. * Return Value: none
  2179. *
  2180. */
  2181. void BBvReadAllRegs(void __iomem *dwIoBase, unsigned char *pbyBBRegs)
  2182. {
  2183. int ii;
  2184. unsigned char byBase = 1;
  2185. for (ii = 0; ii < BB_MAX_CONTEXT_SIZE; ii++) {
  2186. BBbReadEmbedded(dwIoBase, (unsigned char)(ii*byBase), pbyBBRegs);
  2187. pbyBBRegs += byBase;
  2188. }
  2189. }
  2190. /*
  2191. * Description: Turn on BaseBand Loopback mode
  2192. *
  2193. * Parameters:
  2194. * In:
  2195. * dwIoBase - I/O base address
  2196. * bCCK - If CCK is set
  2197. * Out:
  2198. * none
  2199. *
  2200. * Return Value: none
  2201. *
  2202. */
  2203. void BBvLoopbackOn(struct vnt_private *pDevice)
  2204. {
  2205. unsigned char byData;
  2206. void __iomem *dwIoBase = pDevice->PortOffset;
  2207. /* CR C9 = 0x00 */
  2208. BBbReadEmbedded(dwIoBase, 0xC9, &pDevice->byBBCRc9); /* CR201 */
  2209. BBbWriteEmbedded(dwIoBase, 0xC9, 0);
  2210. BBbReadEmbedded(dwIoBase, 0x4D, &pDevice->byBBCR4d); /* CR77 */
  2211. BBbWriteEmbedded(dwIoBase, 0x4D, 0x90);
  2212. /* CR 88 = 0x02(CCK), 0x03(OFDM) */
  2213. BBbReadEmbedded(dwIoBase, 0x88, &pDevice->byBBCR88); /* CR136 */
  2214. if (pDevice->uConnectionRate <= RATE_11M) { /* CCK */
  2215. /* Enable internal digital loopback: CR33 |= 0000 0001 */
  2216. BBbReadEmbedded(dwIoBase, 0x21, &byData); /* CR33 */
  2217. BBbWriteEmbedded(dwIoBase, 0x21, (unsigned char)(byData | 0x01)); /* CR33 */
  2218. /* CR154 = 0x00 */
  2219. BBbWriteEmbedded(dwIoBase, 0x9A, 0); /* CR154 */
  2220. BBbWriteEmbedded(dwIoBase, 0x88, 0x02); /* CR239 */
  2221. } else { /* OFDM */
  2222. /* Enable internal digital loopback:CR154 |= 0000 0001 */
  2223. BBbReadEmbedded(dwIoBase, 0x9A, &byData); /* CR154 */
  2224. BBbWriteEmbedded(dwIoBase, 0x9A, (unsigned char)(byData | 0x01)); /* CR154 */
  2225. /* CR33 = 0x00 */
  2226. BBbWriteEmbedded(dwIoBase, 0x21, 0); /* CR33 */
  2227. BBbWriteEmbedded(dwIoBase, 0x88, 0x03); /* CR239 */
  2228. }
  2229. /* CR14 = 0x00 */
  2230. BBbWriteEmbedded(dwIoBase, 0x0E, 0); /* CR14 */
  2231. /* Disable TX_IQUN */
  2232. BBbReadEmbedded(pDevice->PortOffset, 0x09, &pDevice->byBBCR09);
  2233. BBbWriteEmbedded(pDevice->PortOffset, 0x09, (unsigned char)(pDevice->byBBCR09 & 0xDE));
  2234. }
  2235. /*
  2236. * Description: Turn off BaseBand Loopback mode
  2237. *
  2238. * Parameters:
  2239. * In:
  2240. * pDevice - Device Structure
  2241. *
  2242. * Out:
  2243. * none
  2244. *
  2245. * Return Value: none
  2246. *
  2247. */
  2248. void BBvLoopbackOff(struct vnt_private *pDevice)
  2249. {
  2250. unsigned char byData;
  2251. void __iomem *dwIoBase = pDevice->PortOffset;
  2252. BBbWriteEmbedded(dwIoBase, 0xC9, pDevice->byBBCRc9); /* CR201 */
  2253. BBbWriteEmbedded(dwIoBase, 0x88, pDevice->byBBCR88); /* CR136 */
  2254. BBbWriteEmbedded(dwIoBase, 0x09, pDevice->byBBCR09); /* CR136 */
  2255. BBbWriteEmbedded(dwIoBase, 0x4D, pDevice->byBBCR4d); /* CR77 */
  2256. if (pDevice->uConnectionRate <= RATE_11M) { /* CCK */
  2257. /* Set the CR33 Bit2 to disable internal Loopback. */
  2258. BBbReadEmbedded(dwIoBase, 0x21, &byData);/* CR33 */
  2259. BBbWriteEmbedded(dwIoBase, 0x21, (unsigned char)(byData & 0xFE)); /* CR33 */
  2260. } else { /* OFDM */
  2261. BBbReadEmbedded(dwIoBase, 0x9A, &byData); /* CR154 */
  2262. BBbWriteEmbedded(dwIoBase, 0x9A, (unsigned char)(byData & 0xFE)); /* CR154 */
  2263. }
  2264. BBbReadEmbedded(dwIoBase, 0x0E, &byData); /* CR14 */
  2265. BBbWriteEmbedded(dwIoBase, 0x0E, (unsigned char)(byData | 0x80)); /* CR14 */
  2266. }
  2267. /*
  2268. * Description: Set ShortSlotTime mode
  2269. *
  2270. * Parameters:
  2271. * In:
  2272. * pDevice - Device Structure
  2273. * Out:
  2274. * none
  2275. *
  2276. * Return Value: none
  2277. *
  2278. */
  2279. void
  2280. BBvSetShortSlotTime(struct vnt_private *pDevice)
  2281. {
  2282. unsigned char byBBRxConf = 0;
  2283. unsigned char byBBVGA = 0;
  2284. BBbReadEmbedded(pDevice->PortOffset, 0x0A, &byBBRxConf); /* CR10 */
  2285. if (pDevice->bShortSlotTime)
  2286. byBBRxConf &= 0xDF; /* 1101 1111 */
  2287. else
  2288. byBBRxConf |= 0x20; /* 0010 0000 */
  2289. /* patch for 3253B0 Baseband with Cardbus module */
  2290. BBbReadEmbedded(pDevice->PortOffset, 0xE7, &byBBVGA);
  2291. if (byBBVGA == pDevice->abyBBVGA[0])
  2292. byBBRxConf |= 0x20; /* 0010 0000 */
  2293. BBbWriteEmbedded(pDevice->PortOffset, 0x0A, byBBRxConf); /* CR10 */
  2294. }
  2295. void BBvSetVGAGainOffset(struct vnt_private *pDevice, unsigned char byData)
  2296. {
  2297. unsigned char byBBRxConf = 0;
  2298. BBbWriteEmbedded(pDevice->PortOffset, 0xE7, byData);
  2299. BBbReadEmbedded(pDevice->PortOffset, 0x0A, &byBBRxConf); /* CR10 */
  2300. /* patch for 3253B0 Baseband with Cardbus module */
  2301. if (byData == pDevice->abyBBVGA[0])
  2302. byBBRxConf |= 0x20; /* 0010 0000 */
  2303. else if (pDevice->bShortSlotTime)
  2304. byBBRxConf &= 0xDF; /* 1101 1111 */
  2305. else
  2306. byBBRxConf |= 0x20; /* 0010 0000 */
  2307. pDevice->byBBVGACurrent = byData;
  2308. BBbWriteEmbedded(pDevice->PortOffset, 0x0A, byBBRxConf); /* CR10 */
  2309. }
  2310. /*
  2311. * Description: Baseband SoftwareReset
  2312. *
  2313. * Parameters:
  2314. * In:
  2315. * dwIoBase - I/O base address
  2316. * Out:
  2317. * none
  2318. *
  2319. * Return Value: none
  2320. *
  2321. */
  2322. void
  2323. BBvSoftwareReset(void __iomem *dwIoBase)
  2324. {
  2325. BBbWriteEmbedded(dwIoBase, 0x50, 0x40);
  2326. BBbWriteEmbedded(dwIoBase, 0x50, 0);
  2327. BBbWriteEmbedded(dwIoBase, 0x9C, 0x01);
  2328. BBbWriteEmbedded(dwIoBase, 0x9C, 0);
  2329. }
  2330. /*
  2331. * Description: Baseband Power Save Mode ON
  2332. *
  2333. * Parameters:
  2334. * In:
  2335. * dwIoBase - I/O base address
  2336. * Out:
  2337. * none
  2338. *
  2339. * Return Value: none
  2340. *
  2341. */
  2342. void
  2343. BBvPowerSaveModeON(void __iomem *dwIoBase)
  2344. {
  2345. unsigned char byOrgData;
  2346. BBbReadEmbedded(dwIoBase, 0x0D, &byOrgData);
  2347. byOrgData |= BIT0;
  2348. BBbWriteEmbedded(dwIoBase, 0x0D, byOrgData);
  2349. }
  2350. /*
  2351. * Description: Baseband Power Save Mode OFF
  2352. *
  2353. * Parameters:
  2354. * In:
  2355. * dwIoBase - I/O base address
  2356. * Out:
  2357. * none
  2358. *
  2359. * Return Value: none
  2360. *
  2361. */
  2362. void
  2363. BBvPowerSaveModeOFF(void __iomem *dwIoBase)
  2364. {
  2365. unsigned char byOrgData;
  2366. BBbReadEmbedded(dwIoBase, 0x0D, &byOrgData);
  2367. byOrgData &= ~(BIT0);
  2368. BBbWriteEmbedded(dwIoBase, 0x0D, byOrgData);
  2369. }
  2370. /*
  2371. * Description: Set Tx Antenna mode
  2372. *
  2373. * Parameters:
  2374. * In:
  2375. * pDevice - Device Structure
  2376. * byAntennaMode - Antenna Mode
  2377. * Out:
  2378. * none
  2379. *
  2380. * Return Value: none
  2381. *
  2382. */
  2383. void
  2384. BBvSetTxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode)
  2385. {
  2386. unsigned char byBBTxConf;
  2387. BBbReadEmbedded(dwIoBase, 0x09, &byBBTxConf); /* CR09 */
  2388. if (byAntennaMode == ANT_DIVERSITY) {
  2389. /* bit 1 is diversity */
  2390. byBBTxConf |= 0x02;
  2391. } else if (byAntennaMode == ANT_A) {
  2392. /* bit 2 is ANTSEL */
  2393. byBBTxConf &= 0xF9; /* 1111 1001 */
  2394. } else if (byAntennaMode == ANT_B) {
  2395. byBBTxConf &= 0xFD; /* 1111 1101 */
  2396. byBBTxConf |= 0x04;
  2397. }
  2398. BBbWriteEmbedded(dwIoBase, 0x09, byBBTxConf); /* CR09 */
  2399. }
  2400. /*
  2401. * Description: Set Rx Antenna mode
  2402. *
  2403. * Parameters:
  2404. * In:
  2405. * pDevice - Device Structure
  2406. * byAntennaMode - Antenna Mode
  2407. * Out:
  2408. * none
  2409. *
  2410. * Return Value: none
  2411. *
  2412. */
  2413. void
  2414. BBvSetRxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode)
  2415. {
  2416. unsigned char byBBRxConf;
  2417. BBbReadEmbedded(dwIoBase, 0x0A, &byBBRxConf); /* CR10 */
  2418. if (byAntennaMode == ANT_DIVERSITY) {
  2419. byBBRxConf |= 0x01;
  2420. } else if (byAntennaMode == ANT_A) {
  2421. byBBRxConf &= 0xFC; /* 1111 1100 */
  2422. } else if (byAntennaMode == ANT_B) {
  2423. byBBRxConf &= 0xFE; /* 1111 1110 */
  2424. byBBRxConf |= 0x02;
  2425. }
  2426. BBbWriteEmbedded(dwIoBase, 0x0A, byBBRxConf); /* CR10 */
  2427. }
  2428. /*
  2429. * Description: BBvSetDeepSleep
  2430. *
  2431. * Parameters:
  2432. * In:
  2433. * pDevice - Device Structure
  2434. * Out:
  2435. * none
  2436. *
  2437. * Return Value: none
  2438. *
  2439. */
  2440. void
  2441. BBvSetDeepSleep(void __iomem *dwIoBase, unsigned char byLocalID)
  2442. {
  2443. BBbWriteEmbedded(dwIoBase, 0x0C, 0x17); /* CR12 */
  2444. BBbWriteEmbedded(dwIoBase, 0x0D, 0xB9); /* CR13 */
  2445. }
  2446. void
  2447. BBvExitDeepSleep(void __iomem *dwIoBase, unsigned char byLocalID)
  2448. {
  2449. BBbWriteEmbedded(dwIoBase, 0x0C, 0x00); /* CR12 */
  2450. BBbWriteEmbedded(dwIoBase, 0x0D, 0x01); /* CR13 */
  2451. }
  2452. static
  2453. unsigned long
  2454. s_ulGetRatio(struct vnt_private *pDevice)
  2455. {
  2456. unsigned long ulRatio = 0;
  2457. unsigned long ulMaxPacket;
  2458. unsigned long ulPacketNum;
  2459. /* This is a thousand-ratio */
  2460. ulMaxPacket = pDevice->uNumSQ3[RATE_54M];
  2461. if (pDevice->uNumSQ3[RATE_54M] != 0) {
  2462. ulPacketNum = pDevice->uNumSQ3[RATE_54M];
  2463. ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
  2464. ulRatio += TOP_RATE_54M;
  2465. }
  2466. if (pDevice->uNumSQ3[RATE_48M] > ulMaxPacket) {
  2467. ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M];
  2468. ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
  2469. ulRatio += TOP_RATE_48M;
  2470. ulMaxPacket = pDevice->uNumSQ3[RATE_48M];
  2471. }
  2472. if (pDevice->uNumSQ3[RATE_36M] > ulMaxPacket) {
  2473. ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M] +
  2474. pDevice->uNumSQ3[RATE_36M];
  2475. ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
  2476. ulRatio += TOP_RATE_36M;
  2477. ulMaxPacket = pDevice->uNumSQ3[RATE_36M];
  2478. }
  2479. if (pDevice->uNumSQ3[RATE_24M] > ulMaxPacket) {
  2480. ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M] +
  2481. pDevice->uNumSQ3[RATE_36M] + pDevice->uNumSQ3[RATE_24M];
  2482. ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
  2483. ulRatio += TOP_RATE_24M;
  2484. ulMaxPacket = pDevice->uNumSQ3[RATE_24M];
  2485. }
  2486. if (pDevice->uNumSQ3[RATE_18M] > ulMaxPacket) {
  2487. ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M] +
  2488. pDevice->uNumSQ3[RATE_36M] + pDevice->uNumSQ3[RATE_24M] +
  2489. pDevice->uNumSQ3[RATE_18M];
  2490. ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
  2491. ulRatio += TOP_RATE_18M;
  2492. ulMaxPacket = pDevice->uNumSQ3[RATE_18M];
  2493. }
  2494. if (pDevice->uNumSQ3[RATE_12M] > ulMaxPacket) {
  2495. ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M] +
  2496. pDevice->uNumSQ3[RATE_36M] + pDevice->uNumSQ3[RATE_24M] +
  2497. pDevice->uNumSQ3[RATE_18M] + pDevice->uNumSQ3[RATE_12M];
  2498. ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
  2499. ulRatio += TOP_RATE_12M;
  2500. ulMaxPacket = pDevice->uNumSQ3[RATE_12M];
  2501. }
  2502. if (pDevice->uNumSQ3[RATE_11M] > ulMaxPacket) {
  2503. ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M] -
  2504. pDevice->uNumSQ3[RATE_2M] - pDevice->uNumSQ3[RATE_5M] -
  2505. pDevice->uNumSQ3[RATE_6M] - pDevice->uNumSQ3[RATE_9M];
  2506. ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
  2507. ulRatio += TOP_RATE_11M;
  2508. ulMaxPacket = pDevice->uNumSQ3[RATE_11M];
  2509. }
  2510. if (pDevice->uNumSQ3[RATE_9M] > ulMaxPacket) {
  2511. ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M] -
  2512. pDevice->uNumSQ3[RATE_2M] - pDevice->uNumSQ3[RATE_5M] -
  2513. pDevice->uNumSQ3[RATE_6M];
  2514. ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
  2515. ulRatio += TOP_RATE_9M;
  2516. ulMaxPacket = pDevice->uNumSQ3[RATE_9M];
  2517. }
  2518. if (pDevice->uNumSQ3[RATE_6M] > ulMaxPacket) {
  2519. ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M] -
  2520. pDevice->uNumSQ3[RATE_2M] - pDevice->uNumSQ3[RATE_5M];
  2521. ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
  2522. ulRatio += TOP_RATE_6M;
  2523. ulMaxPacket = pDevice->uNumSQ3[RATE_6M];
  2524. }
  2525. if (pDevice->uNumSQ3[RATE_5M] > ulMaxPacket) {
  2526. ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M] -
  2527. pDevice->uNumSQ3[RATE_2M];
  2528. ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
  2529. ulRatio += TOP_RATE_55M;
  2530. ulMaxPacket = pDevice->uNumSQ3[RATE_5M];
  2531. }
  2532. if (pDevice->uNumSQ3[RATE_2M] > ulMaxPacket) {
  2533. ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M];
  2534. ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
  2535. ulRatio += TOP_RATE_2M;
  2536. ulMaxPacket = pDevice->uNumSQ3[RATE_2M];
  2537. }
  2538. if (pDevice->uNumSQ3[RATE_1M] > ulMaxPacket) {
  2539. ulPacketNum = pDevice->uDiversityCnt;
  2540. ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
  2541. ulRatio += TOP_RATE_1M;
  2542. }
  2543. return ulRatio;
  2544. }
  2545. void
  2546. BBvClearAntDivSQ3Value(struct vnt_private *pDevice)
  2547. {
  2548. unsigned int ii;
  2549. pDevice->uDiversityCnt = 0;
  2550. for (ii = 0; ii < MAX_RATE; ii++)
  2551. pDevice->uNumSQ3[ii] = 0;
  2552. }
  2553. /*
  2554. * Description: Antenna Diversity
  2555. *
  2556. * Parameters:
  2557. * In:
  2558. * pDevice - Device Structure
  2559. * byRSR - RSR from received packet
  2560. * bySQ3 - SQ3 value from received packet
  2561. * Out:
  2562. * none
  2563. *
  2564. * Return Value: none
  2565. *
  2566. */
  2567. void BBvAntennaDiversity(struct vnt_private *pDevice,
  2568. unsigned char byRxRate, unsigned char bySQ3)
  2569. {
  2570. if ((byRxRate >= MAX_RATE) || (pDevice->wAntDiversityMaxRate >= MAX_RATE))
  2571. return;
  2572. pDevice->uDiversityCnt++;
  2573. pDevice->uNumSQ3[byRxRate]++;
  2574. if (pDevice->byAntennaState == 0) {
  2575. if (pDevice->uDiversityCnt > pDevice->ulDiversityNValue) {
  2576. pr_debug("ulDiversityNValue=[%d],54M-[%d]\n",
  2577. (int)pDevice->ulDiversityNValue,
  2578. (int)pDevice->uNumSQ3[(int)pDevice->wAntDiversityMaxRate]);
  2579. if (pDevice->uNumSQ3[pDevice->wAntDiversityMaxRate] < pDevice->uDiversityCnt/2) {
  2580. pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
  2581. pr_debug("SQ3_State0, rate = [%08x]\n",
  2582. (int)pDevice->ulRatio_State0);
  2583. if (pDevice->byTMax == 0)
  2584. return;
  2585. pr_debug("1.[%08x], uNumSQ3[%d]=%d, %d\n",
  2586. (int)pDevice->ulRatio_State0,
  2587. (int)pDevice->wAntDiversityMaxRate,
  2588. (int)pDevice->uNumSQ3[(int)pDevice->wAntDiversityMaxRate],
  2589. (int)pDevice->uDiversityCnt);
  2590. s_vChangeAntenna(pDevice);
  2591. pDevice->byAntennaState = 1;
  2592. del_timer(&pDevice->TimerSQ3Tmax3);
  2593. del_timer(&pDevice->TimerSQ3Tmax2);
  2594. pDevice->TimerSQ3Tmax1.expires = RUN_AT(pDevice->byTMax * HZ);
  2595. add_timer(&pDevice->TimerSQ3Tmax1);
  2596. } else {
  2597. pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
  2598. add_timer(&pDevice->TimerSQ3Tmax3);
  2599. }
  2600. BBvClearAntDivSQ3Value(pDevice);
  2601. }
  2602. } else { /* byAntennaState == 1 */
  2603. if (pDevice->uDiversityCnt > pDevice->ulDiversityMValue) {
  2604. del_timer(&pDevice->TimerSQ3Tmax1);
  2605. pDevice->ulRatio_State1 = s_ulGetRatio(pDevice);
  2606. pr_debug("RX:SQ3_State1, rate0 = %08x,rate1 = %08x\n",
  2607. (int)pDevice->ulRatio_State0,
  2608. (int)pDevice->ulRatio_State1);
  2609. if (pDevice->ulRatio_State1 < pDevice->ulRatio_State0) {
  2610. pr_debug("2.[%08x][%08x], uNumSQ3[%d]=%d, %d\n",
  2611. (int)pDevice->ulRatio_State0,
  2612. (int)pDevice->ulRatio_State1,
  2613. (int)pDevice->wAntDiversityMaxRate,
  2614. (int)pDevice->uNumSQ3[(int)pDevice->wAntDiversityMaxRate],
  2615. (int)pDevice->uDiversityCnt);
  2616. s_vChangeAntenna(pDevice);
  2617. pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
  2618. pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ);
  2619. add_timer(&pDevice->TimerSQ3Tmax3);
  2620. add_timer(&pDevice->TimerSQ3Tmax2);
  2621. }
  2622. pDevice->byAntennaState = 0;
  2623. BBvClearAntDivSQ3Value(pDevice);
  2624. }
  2625. } /* byAntennaState */
  2626. }
  2627. /*+
  2628. *
  2629. * Description:
  2630. * Timer for SQ3 antenna diversity
  2631. *
  2632. * Parameters:
  2633. * In:
  2634. * Out:
  2635. * none
  2636. *
  2637. * Return Value: none
  2638. *
  2639. -*/
  2640. void
  2641. TimerSQ3CallBack(
  2642. void *hDeviceContext
  2643. )
  2644. {
  2645. struct vnt_private *pDevice = hDeviceContext;
  2646. pr_debug("TimerSQ3CallBack...\n");
  2647. spin_lock_irq(&pDevice->lock);
  2648. pr_debug("3.[%08x][%08x], %d\n",
  2649. (int)pDevice->ulRatio_State0, (int)pDevice->ulRatio_State1,
  2650. (int)pDevice->uDiversityCnt);
  2651. s_vChangeAntenna(pDevice);
  2652. pDevice->byAntennaState = 0;
  2653. BBvClearAntDivSQ3Value(pDevice);
  2654. pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
  2655. pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ);
  2656. add_timer(&pDevice->TimerSQ3Tmax3);
  2657. add_timer(&pDevice->TimerSQ3Tmax2);
  2658. spin_unlock_irq(&pDevice->lock);
  2659. }
  2660. /*+
  2661. *
  2662. * Description:
  2663. * Timer for SQ3 antenna diversity
  2664. *
  2665. * Parameters:
  2666. * In:
  2667. * pvSysSpec1
  2668. * hDeviceContext - Pointer to the adapter
  2669. * pvSysSpec2
  2670. * pvSysSpec3
  2671. * Out:
  2672. * none
  2673. *
  2674. * Return Value: none
  2675. *
  2676. -*/
  2677. void
  2678. TimerState1CallBack(
  2679. void *hDeviceContext
  2680. )
  2681. {
  2682. struct vnt_private *pDevice = hDeviceContext;
  2683. pr_debug("TimerState1CallBack...\n");
  2684. spin_lock_irq(&pDevice->lock);
  2685. if (pDevice->uDiversityCnt < pDevice->ulDiversityMValue/100) {
  2686. s_vChangeAntenna(pDevice);
  2687. pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
  2688. pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ);
  2689. add_timer(&pDevice->TimerSQ3Tmax3);
  2690. add_timer(&pDevice->TimerSQ3Tmax2);
  2691. } else {
  2692. pDevice->ulRatio_State1 = s_ulGetRatio(pDevice);
  2693. pr_debug("SQ3_State1, rate0 = %08x,rate1 = %08x\n",
  2694. (int)pDevice->ulRatio_State0,
  2695. (int)pDevice->ulRatio_State1);
  2696. if (pDevice->ulRatio_State1 < pDevice->ulRatio_State0) {
  2697. pr_debug("2.[%08x][%08x], uNumSQ3[%d]=%d, %d\n",
  2698. (int)pDevice->ulRatio_State0,
  2699. (int)pDevice->ulRatio_State1,
  2700. (int)pDevice->wAntDiversityMaxRate,
  2701. (int)pDevice->uNumSQ3[(int)pDevice->wAntDiversityMaxRate],
  2702. (int)pDevice->uDiversityCnt);
  2703. s_vChangeAntenna(pDevice);
  2704. pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
  2705. pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ);
  2706. add_timer(&pDevice->TimerSQ3Tmax3);
  2707. add_timer(&pDevice->TimerSQ3Tmax2);
  2708. }
  2709. }
  2710. pDevice->byAntennaState = 0;
  2711. BBvClearAntDivSQ3Value(pDevice);
  2712. spin_unlock_irq(&pDevice->lock);
  2713. }