12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064180651806618067180681806918070180711807218073180741807518076180771807818079180801808118082180831808418085180861808718088180891809018091180921809318094180951809618097180981809918100181011810218103181041810518106181071810818109181101811118112181131811418115181161811718118181191812018121181221812318124181251812618127181281812918130181311813218133181341813518136181371813818139181401814118142181431814418145181461814718148181491815018151181521815318154181551815618157181581815918160181611816218163181641816518166181671816818169181701817118172181731817418175181761817718178181791818018181181821818318184181851818618187181881818918190181911819218193181941819518196181971819818199182001820118202182031820418205182061820718208182091821018211182121821318214182151821618217182181821918220182211822218223182241822518226182271822818229182301823118232182331823418235182361823718238182391824018241182421824318244182451824618247182481824918250182511825218253182541825518256182571825818259182601826118262182631826418265182661826718268182691827018271182721827318274182751827618277182781827918280182811828218283182841828518286182871828818289182901829118292182931829418295182961829718298182991830018301183021830318304183051830618307183081830918310183111831218313183141831518316183171831818319183201832118322183231832418325183261832718328183291833018331183321833318334183351833618337183381833918340183411834218343183441834518346183471834818349183501835118352183531835418355183561835718358183591836018361183621836318364183651836618367183681836918370183711837218373183741837518376183771837818379183801838118382183831838418385183861838718388183891839018391183921839318394183951839618397183981839918400184011840218403184041840518406184071840818409184101841118412184131841418415184161841718418184191842018421184221842318424184251842618427184281842918430184311843218433184341843518436184371843818439184401844118442184431844418445184461844718448184491845018451184521845318454184551845618457184581845918460184611846218463184641846518466184671846818469184701847118472184731847418475184761847718478184791848018481184821848318484184851848618487184881848918490184911849218493184941849518496184971849818499185001850118502185031850418505185061850718508185091851018511185121851318514185151851618517185181851918520185211852218523185241852518526185271852818529185301853118532185331853418535185361853718538185391854018541185421854318544185451854618547185481854918550185511855218553185541855518556185571855818559185601856118562185631856418565185661856718568185691857018571185721857318574185751857618577185781857918580185811858218583185841858518586185871858818589185901859118592185931859418595185961859718598185991860018601186021860318604186051860618607186081860918610186111861218613186141861518616186171861818619186201862118622186231862418625186261862718628186291863018631186321863318634186351863618637186381863918640186411864218643186441864518646186471864818649186501865118652186531865418655186561865718658186591866018661186621866318664186651866618667186681866918670186711867218673186741867518676186771867818679186801868118682186831868418685186861868718688186891869018691186921869318694186951869618697186981869918700187011870218703187041870518706187071870818709187101871118712187131871418715187161871718718187191872018721187221872318724187251872618727187281872918730187311873218733187341873518736187371873818739187401874118742187431874418745187461874718748187491875018751187521875318754187551875618757187581875918760187611876218763187641876518766187671876818769187701877118772187731877418775187761877718778187791878018781187821878318784187851878618787187881878918790187911879218793187941879518796187971879818799188001880118802188031880418805188061880718808188091881018811188121881318814188151881618817188181881918820188211882218823188241882518826188271882818829188301883118832188331883418835188361883718838188391884018841188421884318844188451884618847188481884918850188511885218853188541885518856188571885818859188601886118862188631886418865188661886718868188691887018871188721887318874188751887618877188781887918880188811888218883188841888518886188871888818889188901889118892188931889418895188961889718898188991890018901189021890318904189051890618907189081890918910189111891218913189141891518916189171891818919189201892118922189231892418925189261892718928189291893018931189321893318934189351893618937189381893918940189411894218943189441894518946189471894818949189501895118952189531895418955189561895718958189591896018961189621896318964189651896618967189681896918970189711897218973189741897518976189771897818979189801898118982189831898418985189861898718988189891899018991189921899318994189951899618997189981899919000190011900219003190041900519006190071900819009190101901119012190131901419015190161901719018190191902019021190221902319024190251902619027190281902919030190311903219033190341903519036190371903819039190401904119042190431904419045190461904719048190491905019051190521905319054190551905619057190581905919060190611906219063190641906519066190671906819069190701907119072190731907419075190761907719078190791908019081190821908319084190851908619087190881908919090190911909219093190941909519096190971909819099191001910119102191031910419105191061910719108191091911019111191121911319114191151911619117191181911919120191211912219123191241912519126191271912819129191301913119132191331913419135191361913719138191391914019141191421914319144191451914619147191481914919150191511915219153191541915519156191571915819159191601916119162191631916419165191661916719168191691917019171191721917319174191751917619177191781917919180191811918219183191841918519186191871918819189191901919119192191931919419195191961919719198191991920019201192021920319204192051920619207192081920919210192111921219213192141921519216192171921819219192201922119222192231922419225192261922719228192291923019231192321923319234192351923619237192381923919240192411924219243192441924519246192471924819249192501925119252192531925419255192561925719258192591926019261192621926319264192651926619267192681926919270192711927219273192741927519276192771927819279192801928119282192831928419285192861928719288192891929019291192921929319294192951929619297192981929919300193011930219303193041930519306193071930819309193101931119312193131931419315193161931719318193191932019321193221932319324193251932619327193281932919330193311933219333193341933519336193371933819339193401934119342193431934419345193461934719348193491935019351193521935319354193551935619357193581935919360193611936219363193641936519366193671936819369193701937119372193731937419375193761937719378193791938019381193821938319384193851938619387193881938919390193911939219393193941939519396193971939819399194001940119402194031940419405194061940719408194091941019411194121941319414194151941619417194181941919420194211942219423194241942519426194271942819429194301943119432194331943419435194361943719438194391944019441194421944319444194451944619447194481944919450194511945219453194541945519456194571945819459194601946119462194631946419465194661946719468194691947019471194721947319474194751947619477194781947919480194811948219483194841948519486194871948819489194901949119492194931949419495194961949719498194991950019501195021950319504195051950619507195081950919510195111951219513195141951519516195171951819519195201952119522195231952419525195261952719528195291953019531195321953319534195351953619537195381953919540195411954219543195441954519546195471954819549195501955119552195531955419555195561955719558195591956019561195621956319564195651956619567195681956919570195711957219573195741957519576195771957819579195801958119582195831958419585195861958719588195891959019591195921959319594195951959619597195981959919600196011960219603196041960519606196071960819609196101961119612196131961419615196161961719618196191962019621196221962319624196251962619627196281962919630196311963219633196341963519636196371963819639196401964119642196431964419645196461964719648196491965019651196521965319654196551965619657196581965919660196611966219663196641966519666196671966819669196701967119672196731967419675196761967719678196791968019681196821968319684196851968619687196881968919690196911969219693196941969519696196971969819699197001970119702197031970419705197061970719708197091971019711197121971319714197151971619717197181971919720197211972219723197241972519726197271972819729197301973119732197331973419735197361973719738197391974019741197421974319744197451974619747197481974919750197511975219753197541975519756197571975819759197601976119762197631976419765197661976719768197691977019771197721977319774197751977619777197781977919780197811978219783197841978519786197871978819789197901979119792197931979419795197961979719798197991980019801198021980319804198051980619807198081980919810198111981219813198141981519816198171981819819198201982119822198231982419825198261982719828198291983019831198321983319834198351983619837198381983919840198411984219843198441984519846198471984819849198501985119852198531985419855198561985719858198591986019861198621986319864198651986619867198681986919870198711987219873198741987519876198771987819879198801988119882198831988419885198861988719888198891989019891198921989319894198951989619897198981989919900199011990219903199041990519906199071990819909199101991119912199131991419915199161991719918199191992019921199221992319924199251992619927199281992919930199311993219933199341993519936199371993819939199401994119942199431994419945199461994719948199491995019951199521995319954199551995619957199581995919960199611996219963199641996519966199671996819969199701997119972199731997419975199761997719978199791998019981199821998319984199851998619987199881998919990199911999219993199941999519996199971999819999200002000120002200032000420005200062000720008200092001020011200122001320014200152001620017200182001920020200212002220023200242002520026200272002820029200302003120032200332003420035200362003720038200392004020041200422004320044200452004620047200482004920050200512005220053200542005520056200572005820059200602006120062200632006420065200662006720068200692007020071200722007320074200752007620077200782007920080200812008220083200842008520086200872008820089200902009120092200932009420095200962009720098200992010020101201022010320104201052010620107201082010920110201112011220113201142011520116201172011820119201202012120122201232012420125201262012720128201292013020131201322013320134201352013620137201382013920140201412014220143201442014520146201472014820149201502015120152201532015420155201562015720158201592016020161201622016320164201652016620167201682016920170201712017220173201742017520176201772017820179201802018120182201832018420185201862018720188201892019020191201922019320194201952019620197201982019920200202012020220203202042020520206202072020820209202102021120212202132021420215202162021720218202192022020221202222022320224202252022620227202282022920230202312023220233202342023520236202372023820239202402024120242202432024420245202462024720248202492025020251202522025320254202552025620257202582025920260202612026220263202642026520266202672026820269202702027120272202732027420275202762027720278202792028020281202822028320284202852028620287202882028920290202912029220293202942029520296202972029820299203002030120302203032030420305203062030720308203092031020311203122031320314203152031620317203182031920320203212032220323203242032520326203272032820329203302033120332203332033420335203362033720338203392034020341203422034320344203452034620347203482034920350203512035220353203542035520356203572035820359203602036120362203632036420365203662036720368203692037020371203722037320374203752037620377203782037920380203812038220383203842038520386203872038820389203902039120392203932039420395203962039720398203992040020401204022040320404204052040620407204082040920410204112041220413204142041520416204172041820419204202042120422204232042420425204262042720428204292043020431204322043320434204352043620437204382043920440204412044220443204442044520446204472044820449204502045120452204532045420455204562045720458204592046020461204622046320464204652046620467204682046920470204712047220473204742047520476204772047820479204802048120482204832048420485204862048720488204892049020491204922049320494204952049620497204982049920500205012050220503205042050520506205072050820509205102051120512205132051420515205162051720518205192052020521205222052320524205252052620527205282052920530205312053220533205342053520536205372053820539205402054120542205432054420545205462054720548205492055020551205522055320554205552055620557205582055920560205612056220563205642056520566205672056820569205702057120572205732057420575205762057720578205792058020581205822058320584205852058620587205882058920590205912059220593205942059520596205972059820599206002060120602206032060420605206062060720608206092061020611206122061320614206152061620617206182061920620206212062220623206242062520626206272062820629206302063120632206332063420635206362063720638206392064020641206422064320644206452064620647206482064920650206512065220653206542065520656206572065820659206602066120662206632066420665206662066720668206692067020671206722067320674206752067620677206782067920680206812068220683206842068520686206872068820689206902069120692206932069420695206962069720698206992070020701207022070320704207052070620707207082070920710207112071220713207142071520716207172071820719207202072120722207232072420725207262072720728207292073020731207322073320734207352073620737207382073920740207412074220743207442074520746207472074820749207502075120752207532075420755207562075720758207592076020761207622076320764207652076620767207682076920770207712077220773207742077520776207772077820779207802078120782207832078420785207862078720788207892079020791207922079320794207952079620797207982079920800208012080220803208042080520806208072080820809208102081120812208132081420815208162081720818208192082020821208222082320824208252082620827208282082920830208312083220833208342083520836208372083820839208402084120842208432084420845208462084720848208492085020851208522085320854208552085620857208582085920860208612086220863208642086520866208672086820869208702087120872208732087420875208762087720878208792088020881208822088320884208852088620887208882088920890208912089220893208942089520896208972089820899209002090120902209032090420905209062090720908209092091020911209122091320914209152091620917209182091920920209212092220923209242092520926209272092820929209302093120932209332093420935209362093720938209392094020941209422094320944209452094620947209482094920950209512095220953209542095520956209572095820959209602096120962209632096420965209662096720968209692097020971209722097320974209752097620977209782097920980209812098220983209842098520986209872098820989209902099120992209932099420995209962099720998209992100021001210022100321004210052100621007210082100921010210112101221013210142101521016210172101821019210202102121022210232102421025210262102721028210292103021031210322103321034210352103621037210382103921040210412104221043210442104521046210472104821049210502105121052210532105421055210562105721058210592106021061210622106321064210652106621067210682106921070210712107221073210742107521076210772107821079210802108121082210832108421085210862108721088210892109021091210922109321094210952109621097210982109921100211012110221103211042110521106211072110821109211102111121112211132111421115211162111721118211192112021121211222112321124211252112621127211282112921130211312113221133211342113521136211372113821139211402114121142211432114421145211462114721148211492115021151211522115321154211552115621157211582115921160211612116221163211642116521166211672116821169211702117121172211732117421175211762117721178211792118021181211822118321184211852118621187211882118921190211912119221193211942119521196211972119821199212002120121202212032120421205212062120721208212092121021211212122121321214212152121621217212182121921220212212122221223212242122521226212272122821229212302123121232212332123421235212362123721238212392124021241212422124321244212452124621247212482124921250212512125221253212542125521256212572125821259212602126121262212632126421265212662126721268212692127021271212722127321274212752127621277212782127921280212812128221283212842128521286212872128821289212902129121292212932129421295212962129721298212992130021301213022130321304213052130621307213082130921310213112131221313213142131521316213172131821319213202132121322213232132421325213262132721328213292133021331213322133321334213352133621337213382133921340213412134221343213442134521346213472134821349213502135121352213532135421355213562135721358213592136021361213622136321364213652136621367213682136921370213712137221373213742137521376213772137821379213802138121382213832138421385213862138721388213892139021391213922139321394213952139621397213982139921400214012140221403214042140521406214072140821409214102141121412214132141421415214162141721418214192142021421214222142321424214252142621427214282142921430214312143221433214342143521436214372143821439214402144121442214432144421445214462144721448214492145021451214522145321454214552145621457214582145921460214612146221463214642146521466214672146821469214702147121472214732147421475214762147721478214792148021481214822148321484214852148621487214882148921490214912149221493214942149521496214972149821499215002150121502215032150421505215062150721508215092151021511215122151321514215152151621517215182151921520215212152221523215242152521526215272152821529215302153121532215332153421535215362153721538215392154021541215422154321544215452154621547215482154921550215512155221553215542155521556215572155821559215602156121562215632156421565215662156721568215692157021571215722157321574215752157621577215782157921580215812158221583215842158521586215872158821589215902159121592215932159421595215962159721598215992160021601216022160321604216052160621607216082160921610216112161221613216142161521616216172161821619216202162121622216232162421625216262162721628216292163021631216322163321634216352163621637216382163921640216412164221643216442164521646216472164821649216502165121652216532165421655216562165721658216592166021661216622166321664216652166621667216682166921670216712167221673216742167521676216772167821679216802168121682216832168421685216862168721688216892169021691216922169321694216952169621697216982169921700217012170221703217042170521706217072170821709217102171121712217132171421715217162171721718217192172021721217222172321724217252172621727217282172921730217312173221733217342173521736217372173821739217402174121742217432174421745217462174721748217492175021751217522175321754217552175621757217582175921760217612176221763217642176521766217672176821769217702177121772217732177421775217762177721778217792178021781217822178321784217852178621787217882178921790217912179221793217942179521796217972179821799218002180121802218032180421805218062180721808218092181021811218122181321814218152181621817218182181921820218212182221823218242182521826218272182821829218302183121832218332183421835218362183721838218392184021841218422184321844218452184621847218482184921850218512185221853218542185521856218572185821859218602186121862218632186421865218662186721868218692187021871218722187321874218752187621877218782187921880218812188221883218842188521886218872188821889218902189121892218932189421895218962189721898218992190021901219022190321904219052190621907219082190921910219112191221913219142191521916219172191821919219202192121922219232192421925219262192721928219292193021931219322193321934219352193621937219382193921940219412194221943219442194521946219472194821949219502195121952219532195421955219562195721958219592196021961219622196321964219652196621967219682196921970219712197221973219742197521976219772197821979219802198121982219832198421985219862198721988219892199021991219922199321994219952199621997219982199922000220012200222003220042200522006220072200822009220102201122012220132201422015220162201722018220192202022021220222202322024220252202622027220282202922030220312203222033220342203522036220372203822039220402204122042220432204422045220462204722048220492205022051220522205322054220552205622057220582205922060220612206222063220642206522066220672206822069220702207122072220732207422075220762207722078220792208022081220822208322084220852208622087220882208922090220912209222093220942209522096220972209822099221002210122102221032210422105221062210722108221092211022111221122211322114221152211622117221182211922120221212212222123221242212522126221272212822129221302213122132221332213422135221362213722138221392214022141221422214322144221452214622147221482214922150221512215222153221542215522156221572215822159221602216122162221632216422165221662216722168221692217022171221722217322174221752217622177221782217922180221812218222183221842218522186221872218822189221902219122192221932219422195221962219722198221992220022201222022220322204222052220622207222082220922210222112221222213222142221522216222172221822219222202222122222222232222422225222262222722228222292223022231222322223322234222352223622237222382223922240222412224222243222442224522246222472224822249222502225122252222532225422255222562225722258222592226022261222622226322264222652226622267222682226922270222712227222273222742227522276222772227822279222802228122282222832228422285222862228722288222892229022291222922229322294222952229622297222982229922300223012230222303223042230522306223072230822309223102231122312223132231422315223162231722318223192232022321223222232322324223252232622327223282232922330223312233222333223342233522336223372233822339223402234122342223432234422345223462234722348223492235022351223522235322354223552235622357223582235922360223612236222363223642236522366223672236822369223702237122372223732237422375223762237722378223792238022381223822238322384223852238622387223882238922390223912239222393223942239522396223972239822399224002240122402224032240422405224062240722408224092241022411224122241322414224152241622417224182241922420224212242222423224242242522426224272242822429224302243122432224332243422435224362243722438224392244022441224422244322444224452244622447224482244922450224512245222453224542245522456224572245822459224602246122462224632246422465224662246722468224692247022471224722247322474224752247622477224782247922480224812248222483224842248522486224872248822489224902249122492224932249422495224962249722498224992250022501225022250322504225052250622507225082250922510225112251222513225142251522516225172251822519225202252122522225232252422525225262252722528225292253022531225322253322534225352253622537225382253922540225412254222543225442254522546225472254822549225502255122552225532255422555225562255722558225592256022561225622256322564225652256622567225682256922570225712257222573225742257522576225772257822579225802258122582225832258422585225862258722588225892259022591225922259322594225952259622597225982259922600226012260222603226042260522606226072260822609226102261122612226132261422615226162261722618226192262022621226222262322624226252262622627226282262922630226312263222633226342263522636226372263822639226402264122642226432264422645226462264722648226492265022651226522265322654226552265622657226582265922660226612266222663226642266522666226672266822669226702267122672226732267422675226762267722678226792268022681226822268322684226852268622687226882268922690226912269222693226942269522696226972269822699227002270122702227032270422705227062270722708227092271022711227122271322714227152271622717227182271922720227212272222723227242272522726227272272822729227302273122732227332273422735227362273722738227392274022741227422274322744227452274622747227482274922750227512275222753227542275522756227572275822759227602276122762227632276422765227662276722768227692277022771227722277322774227752277622777227782277922780227812278222783227842278522786227872278822789227902279122792227932279422795227962279722798227992280022801228022280322804228052280622807228082280922810228112281222813228142281522816228172281822819228202282122822228232282422825228262282722828228292283022831228322283322834228352283622837228382283922840228412284222843228442284522846228472284822849228502285122852228532285422855228562285722858228592286022861228622286322864228652286622867228682286922870228712287222873228742287522876228772287822879228802288122882228832288422885228862288722888228892289022891228922289322894228952289622897228982289922900229012290222903229042290522906229072290822909229102291122912229132291422915229162291722918229192292022921229222292322924229252292622927229282292922930229312293222933229342293522936229372293822939229402294122942229432294422945229462294722948229492295022951229522295322954229552295622957229582295922960229612296222963229642296522966229672296822969229702297122972229732297422975229762297722978229792298022981229822298322984229852298622987229882298922990229912299222993229942299522996229972299822999230002300123002230032300423005230062300723008230092301023011230122301323014230152301623017230182301923020230212302223023230242302523026230272302823029230302303123032230332303423035230362303723038230392304023041230422304323044230452304623047230482304923050230512305223053230542305523056230572305823059230602306123062230632306423065230662306723068230692307023071230722307323074230752307623077230782307923080230812308223083230842308523086230872308823089230902309123092230932309423095230962309723098230992310023101231022310323104231052310623107231082310923110231112311223113231142311523116231172311823119231202312123122231232312423125231262312723128231292313023131231322313323134231352313623137231382313923140231412314223143231442314523146231472314823149231502315123152231532315423155231562315723158231592316023161231622316323164231652316623167231682316923170231712317223173231742317523176231772317823179231802318123182231832318423185231862318723188231892319023191231922319323194231952319623197231982319923200232012320223203232042320523206232072320823209232102321123212232132321423215232162321723218232192322023221232222322323224232252322623227232282322923230232312323223233232342323523236232372323823239232402324123242232432324423245232462324723248232492325023251232522325323254232552325623257232582325923260232612326223263232642326523266232672326823269232702327123272232732327423275232762327723278232792328023281232822328323284232852328623287232882328923290232912329223293232942329523296232972329823299233002330123302233032330423305233062330723308233092331023311233122331323314233152331623317233182331923320233212332223323233242332523326233272332823329233302333123332233332333423335233362333723338233392334023341233422334323344233452334623347233482334923350233512335223353233542335523356233572335823359233602336123362233632336423365233662336723368233692337023371233722337323374233752337623377233782337923380233812338223383233842338523386233872338823389233902339123392233932339423395233962339723398233992340023401234022340323404234052340623407234082340923410234112341223413234142341523416234172341823419234202342123422234232342423425234262342723428234292343023431234322343323434234352343623437234382343923440234412344223443234442344523446234472344823449234502345123452234532345423455234562345723458234592346023461234622346323464234652346623467234682346923470234712347223473234742347523476234772347823479234802348123482234832348423485234862348723488234892349023491234922349323494234952349623497234982349923500235012350223503235042350523506235072350823509235102351123512235132351423515235162351723518235192352023521235222352323524235252352623527235282352923530235312353223533235342353523536235372353823539235402354123542235432354423545235462354723548235492355023551235522355323554235552355623557235582355923560235612356223563235642356523566235672356823569235702357123572235732357423575235762357723578235792358023581235822358323584235852358623587235882358923590235912359223593235942359523596235972359823599236002360123602236032360423605236062360723608236092361023611236122361323614236152361623617236182361923620236212362223623236242362523626236272362823629236302363123632236332363423635236362363723638236392364023641236422364323644236452364623647236482364923650236512365223653236542365523656236572365823659236602366123662236632366423665236662366723668236692367023671236722367323674236752367623677236782367923680236812368223683236842368523686236872368823689236902369123692236932369423695236962369723698236992370023701237022370323704237052370623707237082370923710237112371223713237142371523716237172371823719237202372123722237232372423725237262372723728237292373023731237322373323734237352373623737237382373923740237412374223743237442374523746237472374823749237502375123752237532375423755237562375723758237592376023761237622376323764237652376623767237682376923770237712377223773237742377523776237772377823779237802378123782237832378423785237862378723788237892379023791237922379323794237952379623797237982379923800238012380223803238042380523806238072380823809238102381123812238132381423815238162381723818238192382023821238222382323824238252382623827238282382923830238312383223833238342383523836238372383823839238402384123842238432384423845238462384723848238492385023851238522385323854238552385623857238582385923860238612386223863238642386523866238672386823869238702387123872238732387423875238762387723878238792388023881238822388323884238852388623887238882388923890238912389223893238942389523896238972389823899239002390123902239032390423905239062390723908239092391023911239122391323914239152391623917239182391923920239212392223923239242392523926239272392823929239302393123932239332393423935239362393723938239392394023941239422394323944239452394623947239482394923950239512395223953239542395523956239572395823959239602396123962239632396423965239662396723968239692397023971239722397323974239752397623977239782397923980239812398223983239842398523986239872398823989239902399123992239932399423995239962399723998239992400024001240022400324004240052400624007240082400924010240112401224013240142401524016240172401824019240202402124022240232402424025240262402724028240292403024031240322403324034240352403624037240382403924040240412404224043240442404524046240472404824049240502405124052240532405424055240562405724058240592406024061240622406324064240652406624067240682406924070240712407224073240742407524076240772407824079240802408124082240832408424085240862408724088240892409024091240922409324094240952409624097240982409924100241012410224103241042410524106241072410824109241102411124112241132411424115241162411724118241192412024121241222412324124241252412624127241282412924130241312413224133241342413524136241372413824139241402414124142241432414424145241462414724148241492415024151241522415324154241552415624157241582415924160241612416224163241642416524166241672416824169241702417124172241732417424175241762417724178241792418024181241822418324184241852418624187241882418924190241912419224193241942419524196241972419824199242002420124202242032420424205242062420724208242092421024211242122421324214242152421624217242182421924220242212422224223242242422524226242272422824229242302423124232242332423424235242362423724238242392424024241242422424324244242452424624247242482424924250242512425224253242542425524256242572425824259242602426124262242632426424265242662426724268242692427024271242722427324274242752427624277242782427924280242812428224283242842428524286242872428824289242902429124292242932429424295242962429724298242992430024301243022430324304243052430624307243082430924310243112431224313243142431524316243172431824319243202432124322243232432424325243262432724328243292433024331243322433324334243352433624337243382433924340243412434224343243442434524346243472434824349243502435124352243532435424355243562435724358243592436024361243622436324364243652436624367243682436924370243712437224373243742437524376243772437824379243802438124382243832438424385243862438724388243892439024391243922439324394243952439624397243982439924400244012440224403244042440524406244072440824409244102441124412244132441424415244162441724418244192442024421244222442324424244252442624427244282442924430244312443224433244342443524436244372443824439244402444124442244432444424445244462444724448244492445024451244522445324454244552445624457244582445924460244612446224463244642446524466244672446824469244702447124472244732447424475244762447724478244792448024481244822448324484244852448624487244882448924490244912449224493244942449524496244972449824499245002450124502245032450424505245062450724508245092451024511245122451324514245152451624517245182451924520245212452224523245242452524526245272452824529245302453124532245332453424535245362453724538245392454024541245422454324544245452454624547245482454924550245512455224553245542455524556245572455824559245602456124562245632456424565245662456724568245692457024571245722457324574245752457624577245782457924580245812458224583245842458524586245872458824589245902459124592245932459424595245962459724598245992460024601246022460324604246052460624607246082460924610246112461224613246142461524616246172461824619246202462124622246232462424625246262462724628246292463024631246322463324634246352463624637246382463924640246412464224643246442464524646246472464824649246502465124652246532465424655246562465724658246592466024661246622466324664246652466624667246682466924670246712467224673246742467524676246772467824679246802468124682246832468424685246862468724688246892469024691246922469324694246952469624697246982469924700247012470224703247042470524706247072470824709247102471124712247132471424715247162471724718247192472024721247222472324724247252472624727247282472924730247312473224733247342473524736247372473824739247402474124742247432474424745247462474724748247492475024751247522475324754247552475624757247582475924760247612476224763247642476524766247672476824769247702477124772247732477424775247762477724778247792478024781247822478324784247852478624787247882478924790247912479224793247942479524796247972479824799248002480124802248032480424805248062480724808248092481024811248122481324814248152481624817248182481924820248212482224823248242482524826248272482824829248302483124832248332483424835248362483724838248392484024841248422484324844248452484624847248482484924850248512485224853248542485524856248572485824859248602486124862248632486424865248662486724868248692487024871248722487324874248752487624877248782487924880248812488224883248842488524886248872488824889248902489124892248932489424895248962489724898248992490024901249022490324904249052490624907249082490924910249112491224913249142491524916249172491824919249202492124922249232492424925249262492724928249292493024931249322493324934249352493624937249382493924940249412494224943249442494524946249472494824949249502495124952249532495424955249562495724958249592496024961249622496324964249652496624967249682496924970249712497224973249742497524976249772497824979249802498124982249832498424985249862498724988249892499024991249922499324994249952499624997249982499925000250012500225003250042500525006250072500825009250102501125012250132501425015250162501725018250192502025021250222502325024250252502625027250282502925030250312503225033250342503525036250372503825039250402504125042250432504425045250462504725048250492505025051250522505325054250552505625057250582505925060250612506225063250642506525066250672506825069250702507125072250732507425075250762507725078250792508025081250822508325084250852508625087250882508925090250912509225093250942509525096250972509825099251002510125102251032510425105251062510725108251092511025111251122511325114251152511625117251182511925120251212512225123251242512525126251272512825129251302513125132251332513425135251362513725138251392514025141251422514325144251452514625147251482514925150251512515225153251542515525156251572515825159251602516125162251632516425165251662516725168251692517025171251722517325174251752517625177251782517925180251812518225183251842518525186251872518825189251902519125192251932519425195251962519725198251992520025201252022520325204252052520625207252082520925210252112521225213252142521525216252172521825219252202522125222252232522425225252262522725228252292523025231252322523325234252352523625237252382523925240252412524225243252442524525246252472524825249252502525125252252532525425255252562525725258252592526025261252622526325264252652526625267252682526925270252712527225273252742527525276252772527825279252802528125282252832528425285252862528725288252892529025291252922529325294252952529625297252982529925300253012530225303253042530525306253072530825309253102531125312253132531425315253162531725318253192532025321253222532325324253252532625327253282532925330253312533225333253342533525336253372533825339253402534125342253432534425345253462534725348253492535025351253522535325354253552535625357253582535925360253612536225363253642536525366253672536825369253702537125372253732537425375253762537725378253792538025381253822538325384253852538625387253882538925390253912539225393253942539525396253972539825399254002540125402254032540425405254062540725408254092541025411254122541325414254152541625417254182541925420254212542225423254242542525426254272542825429254302543125432254332543425435254362543725438254392544025441254422544325444254452544625447254482544925450254512545225453254542545525456254572545825459254602546125462254632546425465254662546725468254692547025471254722547325474254752547625477254782547925480254812548225483254842548525486254872548825489254902549125492254932549425495254962549725498254992550025501255022550325504255052550625507255082550925510255112551225513255142551525516255172551825519255202552125522255232552425525255262552725528255292553025531255322553325534255352553625537255382553925540255412554225543255442554525546255472554825549255502555125552255532555425555255562555725558255592556025561255622556325564255652556625567255682556925570255712557225573255742557525576255772557825579255802558125582255832558425585255862558725588255892559025591255922559325594255952559625597255982559925600256012560225603256042560525606256072560825609256102561125612256132561425615256162561725618256192562025621256222562325624256252562625627256282562925630256312563225633256342563525636256372563825639256402564125642256432564425645256462564725648256492565025651256522565325654256552565625657256582565925660256612566225663256642566525666256672566825669256702567125672256732567425675256762567725678256792568025681256822568325684256852568625687256882568925690256912569225693256942569525696256972569825699257002570125702257032570425705257062570725708257092571025711257122571325714257152571625717257182571925720257212572225723257242572525726257272572825729257302573125732257332573425735257362573725738257392574025741257422574325744257452574625747257482574925750257512575225753257542575525756257572575825759257602576125762257632576425765257662576725768257692577025771257722577325774257752577625777257782577925780257812578225783257842578525786257872578825789257902579125792257932579425795257962579725798257992580025801258022580325804258052580625807258082580925810258112581225813258142581525816258172581825819258202582125822258232582425825258262582725828258292583025831258322583325834258352583625837258382583925840258412584225843258442584525846258472584825849258502585125852258532585425855258562585725858258592586025861258622586325864258652586625867258682586925870258712587225873258742587525876258772587825879258802588125882258832588425885258862588725888258892589025891258922589325894258952589625897258982589925900259012590225903259042590525906259072590825909259102591125912259132591425915259162591725918259192592025921259222592325924259252592625927259282592925930259312593225933259342593525936259372593825939259402594125942259432594425945259462594725948259492595025951259522595325954259552595625957259582595925960259612596225963259642596525966259672596825969259702597125972259732597425975259762597725978259792598025981259822598325984259852598625987259882598925990259912599225993259942599525996259972599825999260002600126002260032600426005260062600726008260092601026011260122601326014260152601626017260182601926020260212602226023260242602526026260272602826029260302603126032260332603426035260362603726038260392604026041260422604326044260452604626047260482604926050260512605226053260542605526056260572605826059260602606126062260632606426065260662606726068260692607026071260722607326074260752607626077260782607926080260812608226083260842608526086260872608826089260902609126092260932609426095260962609726098260992610026101261022610326104261052610626107261082610926110261112611226113261142611526116261172611826119261202612126122261232612426125261262612726128261292613026131261322613326134261352613626137261382613926140261412614226143261442614526146261472614826149261502615126152261532615426155261562615726158261592616026161261622616326164261652616626167261682616926170261712617226173261742617526176261772617826179261802618126182261832618426185261862618726188261892619026191261922619326194261952619626197261982619926200262012620226203262042620526206262072620826209262102621126212262132621426215262162621726218262192622026221262222622326224262252622626227262282622926230262312623226233262342623526236262372623826239262402624126242262432624426245262462624726248262492625026251262522625326254262552625626257262582625926260262612626226263262642626526266262672626826269262702627126272262732627426275262762627726278262792628026281262822628326284262852628626287262882628926290262912629226293262942629526296262972629826299263002630126302263032630426305263062630726308263092631026311263122631326314263152631626317263182631926320263212632226323263242632526326263272632826329263302633126332263332633426335263362633726338263392634026341263422634326344263452634626347263482634926350263512635226353263542635526356263572635826359263602636126362263632636426365263662636726368263692637026371263722637326374263752637626377263782637926380263812638226383263842638526386263872638826389263902639126392263932639426395263962639726398263992640026401264022640326404264052640626407264082640926410264112641226413264142641526416264172641826419264202642126422264232642426425264262642726428264292643026431264322643326434264352643626437264382643926440264412644226443264442644526446264472644826449264502645126452264532645426455264562645726458264592646026461264622646326464264652646626467264682646926470264712647226473264742647526476264772647826479264802648126482264832648426485264862648726488264892649026491264922649326494264952649626497264982649926500265012650226503265042650526506265072650826509265102651126512265132651426515265162651726518265192652026521265222652326524265252652626527265282652926530265312653226533265342653526536265372653826539265402654126542265432654426545265462654726548265492655026551265522655326554265552655626557265582655926560265612656226563265642656526566265672656826569265702657126572265732657426575265762657726578265792658026581265822658326584265852658626587265882658926590265912659226593265942659526596265972659826599266002660126602266032660426605266062660726608266092661026611266122661326614266152661626617266182661926620266212662226623266242662526626266272662826629266302663126632266332663426635266362663726638266392664026641266422664326644266452664626647266482664926650266512665226653266542665526656266572665826659266602666126662266632666426665266662666726668266692667026671266722667326674266752667626677266782667926680266812668226683266842668526686266872668826689266902669126692266932669426695266962669726698266992670026701267022670326704267052670626707267082670926710267112671226713267142671526716267172671826719267202672126722267232672426725267262672726728267292673026731267322673326734267352673626737267382673926740267412674226743267442674526746267472674826749267502675126752267532675426755267562675726758267592676026761267622676326764267652676626767267682676926770267712677226773267742677526776267772677826779267802678126782267832678426785267862678726788267892679026791267922679326794267952679626797267982679926800268012680226803268042680526806268072680826809268102681126812268132681426815268162681726818268192682026821268222682326824268252682626827268282682926830268312683226833268342683526836268372683826839268402684126842268432684426845268462684726848268492685026851268522685326854268552685626857268582685926860268612686226863268642686526866268672686826869268702687126872268732687426875268762687726878268792688026881268822688326884268852688626887268882688926890268912689226893268942689526896268972689826899269002690126902269032690426905269062690726908269092691026911269122691326914269152691626917269182691926920269212692226923269242692526926269272692826929269302693126932269332693426935269362693726938269392694026941269422694326944269452694626947269482694926950269512695226953269542695526956269572695826959269602696126962269632696426965269662696726968269692697026971269722697326974269752697626977269782697926980269812698226983269842698526986269872698826989269902699126992269932699426995269962699726998269992700027001270022700327004270052700627007270082700927010270112701227013270142701527016270172701827019270202702127022270232702427025270262702727028270292703027031270322703327034270352703627037270382703927040270412704227043270442704527046270472704827049270502705127052270532705427055270562705727058270592706027061270622706327064270652706627067270682706927070270712707227073270742707527076270772707827079270802708127082270832708427085270862708727088270892709027091270922709327094270952709627097270982709927100271012710227103271042710527106271072710827109271102711127112271132711427115271162711727118271192712027121271222712327124271252712627127271282712927130271312713227133271342713527136271372713827139271402714127142271432714427145271462714727148271492715027151271522715327154271552715627157271582715927160271612716227163271642716527166271672716827169271702717127172271732717427175271762717727178271792718027181271822718327184271852718627187271882718927190271912719227193271942719527196271972719827199272002720127202272032720427205272062720727208272092721027211272122721327214272152721627217272182721927220272212722227223272242722527226272272722827229272302723127232272332723427235272362723727238272392724027241272422724327244272452724627247272482724927250272512725227253272542725527256272572725827259272602726127262272632726427265272662726727268272692727027271272722727327274272752727627277272782727927280272812728227283272842728527286272872728827289272902729127292272932729427295272962729727298272992730027301273022730327304273052730627307273082730927310273112731227313273142731527316273172731827319273202732127322273232732427325273262732727328273292733027331273322733327334273352733627337273382733927340273412734227343273442734527346273472734827349273502735127352273532735427355273562735727358273592736027361273622736327364273652736627367273682736927370273712737227373273742737527376273772737827379273802738127382273832738427385273862738727388273892739027391273922739327394273952739627397273982739927400274012740227403274042740527406274072740827409274102741127412274132741427415274162741727418274192742027421274222742327424274252742627427274282742927430274312743227433274342743527436274372743827439274402744127442274432744427445274462744727448274492745027451274522745327454274552745627457274582745927460274612746227463274642746527466274672746827469274702747127472274732747427475274762747727478274792748027481274822748327484274852748627487274882748927490274912749227493274942749527496274972749827499275002750127502275032750427505275062750727508275092751027511275122751327514275152751627517275182751927520275212752227523275242752527526275272752827529275302753127532275332753427535275362753727538275392754027541275422754327544275452754627547275482754927550275512755227553275542755527556275572755827559275602756127562275632756427565275662756727568275692757027571275722757327574275752757627577275782757927580275812758227583275842758527586275872758827589275902759127592275932759427595275962759727598275992760027601276022760327604276052760627607276082760927610276112761227613276142761527616276172761827619276202762127622276232762427625276262762727628276292763027631276322763327634276352763627637276382763927640276412764227643276442764527646276472764827649276502765127652276532765427655276562765727658276592766027661276622766327664276652766627667276682766927670276712767227673276742767527676276772767827679276802768127682276832768427685276862768727688276892769027691276922769327694276952769627697276982769927700277012770227703277042770527706277072770827709277102771127712277132771427715277162771727718277192772027721277222772327724277252772627727277282772927730277312773227733277342773527736277372773827739277402774127742277432774427745277462774727748277492775027751277522775327754277552775627757277582775927760277612776227763277642776527766277672776827769277702777127772277732777427775277762777727778277792778027781277822778327784277852778627787277882778927790277912779227793277942779527796277972779827799278002780127802278032780427805278062780727808278092781027811278122781327814278152781627817278182781927820278212782227823278242782527826278272782827829278302783127832278332783427835278362783727838278392784027841278422784327844278452784627847278482784927850278512785227853278542785527856278572785827859278602786127862278632786427865278662786727868278692787027871278722787327874278752787627877278782787927880278812788227883278842788527886278872788827889278902789127892278932789427895278962789727898278992790027901279022790327904279052790627907279082790927910279112791227913279142791527916279172791827919279202792127922279232792427925279262792727928279292793027931279322793327934279352793627937279382793927940279412794227943279442794527946279472794827949279502795127952279532795427955279562795727958279592796027961279622796327964279652796627967279682796927970279712797227973279742797527976279772797827979279802798127982279832798427985279862798727988279892799027991279922799327994279952799627997279982799928000280012800228003280042800528006280072800828009280102801128012280132801428015280162801728018280192802028021280222802328024280252802628027280282802928030280312803228033280342803528036280372803828039280402804128042280432804428045280462804728048280492805028051280522805328054280552805628057280582805928060280612806228063280642806528066280672806828069280702807128072280732807428075280762807728078280792808028081280822808328084280852808628087280882808928090280912809228093280942809528096280972809828099281002810128102281032810428105281062810728108281092811028111281122811328114281152811628117281182811928120281212812228123281242812528126281272812828129281302813128132281332813428135281362813728138281392814028141281422814328144281452814628147281482814928150281512815228153281542815528156281572815828159281602816128162281632816428165281662816728168281692817028171281722817328174281752817628177281782817928180281812818228183281842818528186281872818828189281902819128192281932819428195281962819728198281992820028201282022820328204282052820628207282082820928210282112821228213282142821528216282172821828219282202822128222282232822428225282262822728228282292823028231282322823328234282352823628237282382823928240282412824228243282442824528246282472824828249282502825128252282532825428255282562825728258282592826028261282622826328264282652826628267282682826928270282712827228273282742827528276282772827828279282802828128282282832828428285282862828728288282892829028291282922829328294282952829628297282982829928300283012830228303283042830528306283072830828309283102831128312283132831428315283162831728318283192832028321283222832328324283252832628327283282832928330283312833228333283342833528336283372833828339283402834128342283432834428345283462834728348283492835028351283522835328354283552835628357283582835928360283612836228363283642836528366283672836828369283702837128372283732837428375283762837728378283792838028381283822838328384283852838628387283882838928390283912839228393283942839528396283972839828399284002840128402284032840428405284062840728408284092841028411284122841328414284152841628417284182841928420284212842228423284242842528426284272842828429284302843128432284332843428435284362843728438284392844028441284422844328444284452844628447284482844928450284512845228453284542845528456284572845828459284602846128462284632846428465284662846728468284692847028471284722847328474284752847628477284782847928480284812848228483284842848528486284872848828489284902849128492284932849428495284962849728498284992850028501285022850328504285052850628507285082850928510285112851228513285142851528516285172851828519285202852128522285232852428525285262852728528285292853028531285322853328534285352853628537285382853928540285412854228543285442854528546285472854828549285502855128552285532855428555285562855728558285592856028561285622856328564285652856628567285682856928570285712857228573285742857528576285772857828579285802858128582285832858428585285862858728588285892859028591285922859328594285952859628597285982859928600286012860228603286042860528606286072860828609286102861128612286132861428615286162861728618286192862028621286222862328624286252862628627286282862928630286312863228633286342863528636286372863828639286402864128642286432864428645286462864728648286492865028651286522865328654286552865628657286582865928660286612866228663286642866528666286672866828669286702867128672286732867428675286762867728678286792868028681286822868328684286852868628687286882868928690286912869228693286942869528696286972869828699287002870128702287032870428705287062870728708287092871028711287122871328714287152871628717287182871928720287212872228723287242872528726287272872828729287302873128732287332873428735287362873728738287392874028741287422874328744287452874628747287482874928750287512875228753287542875528756287572875828759287602876128762287632876428765287662876728768287692877028771287722877328774287752877628777287782877928780287812878228783287842878528786287872878828789287902879128792287932879428795287962879728798287992880028801288022880328804288052880628807288082880928810288112881228813288142881528816288172881828819288202882128822288232882428825288262882728828288292883028831288322883328834288352883628837288382883928840288412884228843288442884528846288472884828849288502885128852288532885428855288562885728858288592886028861288622886328864288652886628867288682886928870288712887228873288742887528876288772887828879288802888128882288832888428885288862888728888288892889028891288922889328894288952889628897288982889928900289012890228903289042890528906289072890828909289102891128912289132891428915289162891728918289192892028921289222892328924289252892628927289282892928930289312893228933289342893528936289372893828939289402894128942289432894428945289462894728948289492895028951289522895328954289552895628957289582895928960289612896228963289642896528966289672896828969289702897128972289732897428975289762897728978289792898028981289822898328984289852898628987289882898928990289912899228993289942899528996289972899828999290002900129002290032900429005290062900729008290092901029011290122901329014290152901629017290182901929020290212902229023290242902529026290272902829029290302903129032290332903429035290362903729038290392904029041290422904329044290452904629047290482904929050290512905229053290542905529056290572905829059290602906129062290632906429065290662906729068290692907029071290722907329074290752907629077290782907929080290812908229083290842908529086290872908829089290902909129092290932909429095290962909729098290992910029101291022910329104291052910629107291082910929110291112911229113291142911529116291172911829119291202912129122291232912429125291262912729128291292913029131291322913329134291352913629137291382913929140291412914229143291442914529146291472914829149291502915129152291532915429155291562915729158291592916029161291622916329164291652916629167291682916929170291712917229173291742917529176291772917829179291802918129182291832918429185291862918729188291892919029191291922919329194291952919629197291982919929200292012920229203292042920529206292072920829209292102921129212292132921429215292162921729218292192922029221292222922329224292252922629227292282922929230292312923229233292342923529236292372923829239292402924129242292432924429245292462924729248292492925029251292522925329254292552925629257292582925929260292612926229263292642926529266292672926829269292702927129272292732927429275292762927729278292792928029281292822928329284292852928629287292882928929290292912929229293292942929529296292972929829299293002930129302293032930429305293062930729308293092931029311293122931329314293152931629317293182931929320293212932229323293242932529326293272932829329293302933129332293332933429335293362933729338293392934029341293422934329344293452934629347293482934929350293512935229353293542935529356293572935829359293602936129362293632936429365293662936729368293692937029371293722937329374293752937629377293782937929380293812938229383293842938529386293872938829389293902939129392293932939429395293962939729398293992940029401294022940329404294052940629407294082940929410294112941229413294142941529416294172941829419294202942129422294232942429425294262942729428294292943029431294322943329434294352943629437294382943929440294412944229443294442944529446294472944829449294502945129452294532945429455294562945729458294592946029461294622946329464294652946629467294682946929470294712947229473294742947529476294772947829479294802948129482294832948429485294862948729488294892949029491294922949329494294952949629497294982949929500295012950229503295042950529506295072950829509295102951129512295132951429515295162951729518295192952029521295222952329524295252952629527295282952929530295312953229533295342953529536295372953829539295402954129542295432954429545295462954729548295492955029551295522955329554295552955629557295582955929560295612956229563295642956529566295672956829569295702957129572295732957429575295762957729578295792958029581295822958329584295852958629587295882958929590295912959229593295942959529596295972959829599296002960129602296032960429605296062960729608296092961029611296122961329614296152961629617296182961929620296212962229623296242962529626296272962829629296302963129632296332963429635296362963729638296392964029641296422964329644296452964629647296482964929650296512965229653296542965529656296572965829659296602966129662296632966429665296662966729668296692967029671296722967329674296752967629677296782967929680296812968229683296842968529686296872968829689296902969129692296932969429695296962969729698296992970029701297022970329704297052970629707297082970929710297112971229713297142971529716297172971829719297202972129722297232972429725297262972729728297292973029731297322973329734297352973629737297382973929740297412974229743297442974529746297472974829749297502975129752297532975429755297562975729758297592976029761297622976329764297652976629767297682976929770297712977229773297742977529776297772977829779297802978129782297832978429785297862978729788297892979029791297922979329794297952979629797297982979929800298012980229803298042980529806298072980829809298102981129812298132981429815298162981729818298192982029821298222982329824298252982629827298282982929830298312983229833298342983529836298372983829839298402984129842298432984429845298462984729848298492985029851298522985329854298552985629857298582985929860298612986229863298642986529866298672986829869298702987129872298732987429875298762987729878298792988029881298822988329884298852988629887298882988929890298912989229893298942989529896298972989829899299002990129902299032990429905299062990729908299092991029911299122991329914299152991629917299182991929920299212992229923299242992529926299272992829929299302993129932299332993429935299362993729938299392994029941299422994329944299452994629947299482994929950299512995229953299542995529956299572995829959299602996129962299632996429965299662996729968299692997029971299722997329974299752997629977299782997929980299812998229983299842998529986299872998829989299902999129992299932999429995299962999729998299993000030001300023000330004300053000630007300083000930010300113001230013300143001530016300173001830019300203002130022300233002430025300263002730028300293003030031300323003330034300353003630037300383003930040300413004230043300443004530046300473004830049300503005130052300533005430055300563005730058300593006030061300623006330064300653006630067300683006930070300713007230073300743007530076300773007830079300803008130082300833008430085300863008730088300893009030091300923009330094300953009630097300983009930100301013010230103301043010530106301073010830109301103011130112301133011430115301163011730118301193012030121301223012330124301253012630127301283012930130301313013230133301343013530136301373013830139301403014130142301433014430145301463014730148301493015030151301523015330154301553015630157301583015930160301613016230163301643016530166301673016830169301703017130172301733017430175301763017730178301793018030181301823018330184301853018630187301883018930190301913019230193301943019530196301973019830199302003020130202302033020430205302063020730208302093021030211302123021330214302153021630217302183021930220302213022230223302243022530226302273022830229302303023130232302333023430235302363023730238302393024030241302423024330244302453024630247302483024930250302513025230253302543025530256302573025830259302603026130262302633026430265302663026730268302693027030271302723027330274302753027630277302783027930280302813028230283302843028530286302873028830289302903029130292302933029430295302963029730298302993030030301303023030330304303053030630307303083030930310303113031230313303143031530316303173031830319303203032130322303233032430325303263032730328303293033030331303323033330334303353033630337303383033930340303413034230343303443034530346303473034830349303503035130352303533035430355303563035730358303593036030361303623036330364303653036630367303683036930370303713037230373303743037530376303773037830379303803038130382303833038430385303863038730388303893039030391303923039330394303953039630397303983039930400304013040230403304043040530406304073040830409304103041130412304133041430415304163041730418304193042030421304223042330424304253042630427304283042930430304313043230433304343043530436304373043830439304403044130442304433044430445304463044730448304493045030451304523045330454304553045630457304583045930460304613046230463304643046530466304673046830469304703047130472304733047430475304763047730478304793048030481304823048330484304853048630487304883048930490304913049230493304943049530496304973049830499305003050130502305033050430505305063050730508305093051030511305123051330514305153051630517305183051930520305213052230523305243052530526305273052830529305303053130532305333053430535305363053730538305393054030541305423054330544305453054630547305483054930550305513055230553305543055530556305573055830559305603056130562305633056430565305663056730568305693057030571305723057330574305753057630577305783057930580305813058230583305843058530586305873058830589305903059130592305933059430595305963059730598305993060030601306023060330604306053060630607306083060930610306113061230613306143061530616306173061830619306203062130622306233062430625306263062730628306293063030631306323063330634306353063630637306383063930640306413064230643306443064530646306473064830649306503065130652306533065430655306563065730658306593066030661306623066330664306653066630667306683066930670306713067230673306743067530676306773067830679306803068130682306833068430685306863068730688306893069030691306923069330694306953069630697306983069930700307013070230703307043070530706307073070830709307103071130712307133071430715307163071730718307193072030721307223072330724307253072630727307283072930730307313073230733307343073530736307373073830739307403074130742307433074430745307463074730748307493075030751307523075330754307553075630757307583075930760307613076230763307643076530766307673076830769307703077130772307733077430775307763077730778307793078030781307823078330784307853078630787307883078930790307913079230793307943079530796307973079830799308003080130802308033080430805308063080730808308093081030811308123081330814308153081630817308183081930820308213082230823308243082530826308273082830829308303083130832308333083430835308363083730838308393084030841308423084330844308453084630847308483084930850308513085230853308543085530856308573085830859308603086130862308633086430865308663086730868308693087030871308723087330874308753087630877308783087930880308813088230883308843088530886308873088830889308903089130892308933089430895308963089730898308993090030901309023090330904309053090630907309083090930910309113091230913309143091530916309173091830919309203092130922309233092430925309263092730928309293093030931309323093330934309353093630937309383093930940309413094230943309443094530946309473094830949309503095130952309533095430955309563095730958309593096030961309623096330964309653096630967309683096930970309713097230973309743097530976309773097830979309803098130982309833098430985309863098730988309893099030991309923099330994309953099630997309983099931000310013100231003310043100531006310073100831009310103101131012310133101431015310163101731018310193102031021310223102331024310253102631027310283102931030310313103231033310343103531036310373103831039310403104131042310433104431045310463104731048310493105031051310523105331054310553105631057310583105931060310613106231063310643106531066310673106831069310703107131072310733107431075310763107731078310793108031081310823108331084310853108631087310883108931090310913109231093310943109531096310973109831099311003110131102311033110431105311063110731108311093111031111311123111331114311153111631117311183111931120311213112231123311243112531126311273112831129311303113131132311333113431135311363113731138311393114031141311423114331144311453114631147311483114931150311513115231153311543115531156311573115831159311603116131162311633116431165311663116731168311693117031171311723117331174311753117631177311783117931180311813118231183311843118531186311873118831189311903119131192311933119431195311963119731198311993120031201312023120331204312053120631207312083120931210312113121231213312143121531216312173121831219312203122131222312233122431225312263122731228312293123031231312323123331234312353123631237312383123931240312413124231243312443124531246312473124831249312503125131252312533125431255312563125731258312593126031261312623126331264312653126631267312683126931270312713127231273312743127531276312773127831279312803128131282312833128431285312863128731288312893129031291312923129331294312953129631297312983129931300313013130231303313043130531306313073130831309313103131131312313133131431315313163131731318313193132031321313223132331324313253132631327313283132931330313313133231333313343133531336313373133831339313403134131342313433134431345313463134731348313493135031351313523135331354313553135631357313583135931360313613136231363313643136531366313673136831369313703137131372313733137431375313763137731378313793138031381313823138331384313853138631387313883138931390313913139231393313943139531396313973139831399314003140131402314033140431405314063140731408314093141031411314123141331414314153141631417314183141931420314213142231423314243142531426314273142831429314303143131432314333143431435314363143731438314393144031441314423144331444314453144631447314483144931450314513145231453314543145531456314573145831459314603146131462314633146431465314663146731468314693147031471314723147331474314753147631477314783147931480314813148231483314843148531486314873148831489314903149131492314933149431495314963149731498314993150031501315023150331504315053150631507315083150931510315113151231513315143151531516315173151831519315203152131522315233152431525315263152731528315293153031531315323153331534315353153631537315383153931540315413154231543315443154531546315473154831549315503155131552315533155431555315563155731558315593156031561315623156331564315653156631567315683156931570315713157231573315743157531576315773157831579315803158131582315833158431585315863158731588315893159031591315923159331594315953159631597315983159931600316013160231603316043160531606316073160831609316103161131612316133161431615316163161731618316193162031621316223162331624316253162631627316283162931630316313163231633316343163531636316373163831639316403164131642316433164431645316463164731648316493165031651316523165331654316553165631657316583165931660316613166231663316643166531666316673166831669316703167131672316733167431675316763167731678316793168031681316823168331684316853168631687316883168931690316913169231693316943169531696316973169831699317003170131702317033170431705317063170731708317093171031711317123171331714317153171631717317183171931720317213172231723317243172531726317273172831729317303173131732317333173431735317363173731738317393174031741317423174331744317453174631747317483174931750317513175231753317543175531756317573175831759317603176131762317633176431765317663176731768317693177031771317723177331774317753177631777317783177931780317813178231783317843178531786317873178831789317903179131792317933179431795317963179731798317993180031801318023180331804318053180631807318083180931810318113181231813318143181531816318173181831819318203182131822318233182431825318263182731828318293183031831318323183331834318353183631837318383183931840318413184231843318443184531846318473184831849318503185131852318533185431855318563185731858318593186031861318623186331864318653186631867318683186931870318713187231873318743187531876318773187831879318803188131882318833188431885318863188731888318893189031891318923189331894318953189631897318983189931900319013190231903319043190531906319073190831909319103191131912319133191431915319163191731918319193192031921319223192331924319253192631927319283192931930319313193231933319343193531936319373193831939319403194131942319433194431945319463194731948319493195031951319523195331954319553195631957319583195931960319613196231963319643196531966319673196831969319703197131972319733197431975319763197731978319793198031981319823198331984319853198631987319883198931990319913199231993319943199531996319973199831999320003200132002320033200432005320063200732008320093201032011320123201332014320153201632017320183201932020320213202232023320243202532026320273202832029320303203132032320333203432035320363203732038320393204032041320423204332044320453204632047320483204932050320513205232053320543205532056320573205832059320603206132062320633206432065320663206732068320693207032071320723207332074320753207632077320783207932080320813208232083320843208532086320873208832089320903209132092320933209432095320963209732098320993210032101321023210332104321053210632107321083210932110321113211232113321143211532116321173211832119321203212132122321233212432125321263212732128321293213032131321323213332134321353213632137321383213932140321413214232143321443214532146321473214832149321503215132152321533215432155321563215732158321593216032161321623216332164321653216632167321683216932170321713217232173321743217532176321773217832179321803218132182321833218432185321863218732188321893219032191321923219332194321953219632197321983219932200322013220232203322043220532206322073220832209322103221132212322133221432215322163221732218322193222032221322223222332224322253222632227322283222932230322313223232233322343223532236322373223832239322403224132242322433224432245322463224732248322493225032251322523225332254322553225632257322583225932260322613226232263322643226532266322673226832269322703227132272322733227432275322763227732278322793228032281322823228332284322853228632287322883228932290322913229232293322943229532296322973229832299323003230132302323033230432305323063230732308323093231032311323123231332314323153231632317323183231932320323213232232323323243232532326323273232832329323303233132332323333233432335323363233732338323393234032341323423234332344323453234632347323483234932350323513235232353323543235532356323573235832359323603236132362323633236432365323663236732368323693237032371323723237332374323753237632377323783237932380323813238232383323843238532386323873238832389323903239132392323933239432395323963239732398323993240032401324023240332404324053240632407324083240932410324113241232413324143241532416324173241832419324203242132422324233242432425324263242732428324293243032431324323243332434324353243632437324383243932440324413244232443324443244532446324473244832449324503245132452324533245432455324563245732458324593246032461324623246332464324653246632467324683246932470324713247232473324743247532476324773247832479324803248132482324833248432485324863248732488324893249032491324923249332494324953249632497324983249932500325013250232503325043250532506325073250832509325103251132512325133251432515325163251732518325193252032521325223252332524325253252632527325283252932530325313253232533325343253532536325373253832539325403254132542325433254432545325463254732548325493255032551325523255332554325553255632557325583255932560325613256232563325643256532566325673256832569325703257132572325733257432575325763257732578325793258032581325823258332584325853258632587325883258932590325913259232593325943259532596325973259832599326003260132602326033260432605326063260732608326093261032611326123261332614326153261632617326183261932620326213262232623326243262532626326273262832629326303263132632326333263432635326363263732638326393264032641326423264332644326453264632647326483264932650326513265232653326543265532656326573265832659326603266132662326633266432665326663266732668326693267032671326723267332674326753267632677326783267932680326813268232683326843268532686326873268832689326903269132692326933269432695326963269732698326993270032701327023270332704327053270632707327083270932710327113271232713327143271532716327173271832719327203272132722327233272432725327263272732728327293273032731327323273332734327353273632737327383273932740327413274232743327443274532746327473274832749327503275132752327533275432755327563275732758327593276032761327623276332764327653276632767327683276932770327713277232773327743277532776327773277832779327803278132782327833278432785327863278732788327893279032791327923279332794327953279632797327983279932800328013280232803328043280532806328073280832809328103281132812328133281432815328163281732818328193282032821328223282332824328253282632827328283282932830328313283232833328343283532836328373283832839328403284132842328433284432845328463284732848328493285032851328523285332854328553285632857328583285932860328613286232863328643286532866328673286832869328703287132872328733287432875328763287732878328793288032881328823288332884328853288632887328883288932890328913289232893328943289532896328973289832899329003290132902329033290432905329063290732908329093291032911329123291332914329153291632917329183291932920329213292232923329243292532926329273292832929329303293132932329333293432935329363293732938329393294032941329423294332944329453294632947329483294932950329513295232953329543295532956329573295832959329603296132962329633296432965329663296732968329693297032971329723297332974329753297632977329783297932980329813298232983329843298532986329873298832989329903299132992329933299432995329963299732998329993300033001330023300333004330053300633007330083300933010330113301233013330143301533016330173301833019330203302133022330233302433025330263302733028330293303033031330323303333034330353303633037330383303933040330413304233043330443304533046330473304833049330503305133052330533305433055330563305733058330593306033061330623306333064330653306633067330683306933070330713307233073330743307533076330773307833079330803308133082330833308433085330863308733088330893309033091330923309333094330953309633097330983309933100331013310233103331043310533106331073310833109331103311133112331133311433115331163311733118331193312033121331223312333124331253312633127331283312933130331313313233133331343313533136331373313833139331403314133142331433314433145331463314733148331493315033151331523315333154331553315633157331583315933160331613316233163331643316533166331673316833169331703317133172331733317433175331763317733178331793318033181331823318333184331853318633187331883318933190331913319233193331943319533196331973319833199332003320133202332033320433205332063320733208332093321033211332123321333214332153321633217332183321933220332213322233223332243322533226332273322833229332303323133232332333323433235332363323733238332393324033241332423324333244332453324633247332483324933250332513325233253332543325533256332573325833259332603326133262332633326433265332663326733268332693327033271332723327333274332753327633277332783327933280332813328233283332843328533286332873328833289332903329133292332933329433295332963329733298332993330033301333023330333304333053330633307333083330933310333113331233313333143331533316333173331833319333203332133322333233332433325333263332733328333293333033331333323333333334333353333633337333383333933340333413334233343333443334533346333473334833349333503335133352333533335433355333563335733358333593336033361333623336333364333653336633367333683336933370333713337233373333743337533376333773337833379333803338133382333833338433385333863338733388333893339033391333923339333394333953339633397333983339933400334013340233403334043340533406334073340833409334103341133412334133341433415334163341733418334193342033421334223342333424334253342633427334283342933430334313343233433334343343533436334373343833439334403344133442334433344433445334463344733448334493345033451334523345333454334553345633457334583345933460334613346233463334643346533466334673346833469334703347133472334733347433475334763347733478334793348033481334823348333484334853348633487334883348933490334913349233493334943349533496334973349833499335003350133502335033350433505335063350733508335093351033511335123351333514335153351633517335183351933520335213352233523335243352533526335273352833529335303353133532335333353433535335363353733538335393354033541335423354333544335453354633547335483354933550335513355233553335543355533556335573355833559335603356133562335633356433565335663356733568335693357033571335723357333574335753357633577335783357933580335813358233583335843358533586335873358833589335903359133592335933359433595335963359733598335993360033601336023360333604336053360633607336083360933610336113361233613336143361533616336173361833619336203362133622336233362433625336263362733628336293363033631336323363333634336353363633637336383363933640336413364233643336443364533646336473364833649336503365133652336533365433655336563365733658336593366033661336623366333664336653366633667336683366933670336713367233673336743367533676336773367833679336803368133682336833368433685336863368733688336893369033691336923369333694336953369633697336983369933700337013370233703337043370533706337073370833709337103371133712337133371433715337163371733718337193372033721337223372333724337253372633727337283372933730337313373233733337343373533736337373373833739337403374133742337433374433745337463374733748337493375033751337523375333754337553375633757337583375933760337613376233763337643376533766337673376833769337703377133772337733377433775337763377733778337793378033781337823378333784337853378633787337883378933790337913379233793337943379533796337973379833799338003380133802338033380433805338063380733808338093381033811338123381333814338153381633817338183381933820338213382233823338243382533826338273382833829338303383133832338333383433835338363383733838338393384033841338423384333844338453384633847338483384933850338513385233853338543385533856338573385833859338603386133862338633386433865338663386733868338693387033871338723387333874338753387633877338783387933880338813388233883338843388533886338873388833889338903389133892338933389433895338963389733898338993390033901339023390333904339053390633907339083390933910339113391233913339143391533916339173391833919339203392133922339233392433925339263392733928339293393033931339323393333934339353393633937339383393933940339413394233943339443394533946339473394833949339503395133952339533395433955339563395733958339593396033961339623396333964339653396633967339683396933970339713397233973339743397533976339773397833979339803398133982339833398433985339863398733988339893399033991339923399333994339953399633997339983399934000340013400234003340043400534006340073400834009340103401134012340133401434015340163401734018340193402034021340223402334024340253402634027340283402934030340313403234033340343403534036340373403834039340403404134042340433404434045340463404734048340493405034051340523405334054340553405634057340583405934060340613406234063340643406534066340673406834069340703407134072340733407434075340763407734078340793408034081340823408334084340853408634087340883408934090340913409234093340943409534096340973409834099341003410134102341033410434105341063410734108341093411034111341123411334114341153411634117341183411934120341213412234123341243412534126341273412834129341303413134132341333413434135341363413734138341393414034141341423414334144341453414634147341483414934150341513415234153341543415534156341573415834159341603416134162341633416434165341663416734168341693417034171341723417334174341753417634177341783417934180341813418234183341843418534186341873418834189341903419134192341933419434195341963419734198341993420034201342023420334204342053420634207342083420934210342113421234213342143421534216342173421834219342203422134222342233422434225342263422734228342293423034231342323423334234342353423634237342383423934240342413424234243342443424534246342473424834249342503425134252342533425434255342563425734258342593426034261342623426334264342653426634267342683426934270342713427234273342743427534276342773427834279342803428134282342833428434285342863428734288342893429034291342923429334294342953429634297342983429934300343013430234303343043430534306343073430834309343103431134312343133431434315343163431734318343193432034321343223432334324343253432634327343283432934330343313433234333343343433534336343373433834339343403434134342343433434434345343463434734348343493435034351343523435334354343553435634357343583435934360343613436234363343643436534366343673436834369343703437134372343733437434375343763437734378343793438034381343823438334384343853438634387343883438934390343913439234393343943439534396343973439834399344003440134402344033440434405344063440734408344093441034411344123441334414344153441634417344183441934420344213442234423344243442534426344273442834429344303443134432344333443434435344363443734438344393444034441344423444334444344453444634447344483444934450344513445234453344543445534456344573445834459344603446134462344633446434465344663446734468344693447034471344723447334474344753447634477344783447934480344813448234483344843448534486344873448834489344903449134492344933449434495344963449734498344993450034501345023450334504345053450634507345083450934510345113451234513345143451534516345173451834519345203452134522345233452434525345263452734528345293453034531345323453334534345353453634537345383453934540345413454234543345443454534546345473454834549345503455134552345533455434555345563455734558345593456034561345623456334564345653456634567345683456934570345713457234573345743457534576345773457834579345803458134582345833458434585345863458734588345893459034591345923459334594345953459634597345983459934600346013460234603346043460534606346073460834609346103461134612346133461434615346163461734618346193462034621346223462334624346253462634627346283462934630346313463234633346343463534636346373463834639346403464134642346433464434645346463464734648346493465034651346523465334654346553465634657346583465934660346613466234663346643466534666346673466834669346703467134672346733467434675346763467734678346793468034681346823468334684346853468634687346883468934690346913469234693346943469534696346973469834699347003470134702347033470434705347063470734708347093471034711347123471334714347153471634717347183471934720347213472234723347243472534726347273472834729347303473134732347333473434735347363473734738347393474034741347423474334744347453474634747347483474934750347513475234753347543475534756347573475834759347603476134762347633476434765347663476734768347693477034771347723477334774347753477634777347783477934780347813478234783347843478534786347873478834789347903479134792347933479434795347963479734798347993480034801348023480334804348053480634807348083480934810348113481234813348143481534816348173481834819348203482134822348233482434825348263482734828348293483034831348323483334834348353483634837348383483934840348413484234843348443484534846348473484834849348503485134852348533485434855348563485734858348593486034861348623486334864348653486634867348683486934870348713487234873348743487534876348773487834879348803488134882348833488434885348863488734888348893489034891348923489334894348953489634897348983489934900349013490234903349043490534906349073490834909349103491134912349133491434915349163491734918349193492034921349223492334924349253492634927349283492934930349313493234933349343493534936349373493834939349403494134942349433494434945349463494734948349493495034951349523495334954349553495634957349583495934960349613496234963349643496534966349673496834969349703497134972349733497434975349763497734978349793498034981349823498334984349853498634987349883498934990349913499234993349943499534996349973499834999350003500135002350033500435005350063500735008350093501035011350123501335014350153501635017350183501935020350213502235023350243502535026350273502835029350303503135032350333503435035350363503735038350393504035041350423504335044350453504635047350483504935050350513505235053350543505535056350573505835059350603506135062350633506435065350663506735068350693507035071350723507335074350753507635077350783507935080350813508235083350843508535086350873508835089350903509135092350933509435095350963509735098350993510035101351023510335104351053510635107351083510935110351113511235113351143511535116351173511835119351203512135122351233512435125351263512735128351293513035131351323513335134351353513635137351383513935140351413514235143351443514535146351473514835149351503515135152351533515435155351563515735158351593516035161351623516335164351653516635167351683516935170351713517235173351743517535176351773517835179351803518135182351833518435185351863518735188351893519035191351923519335194351953519635197351983519935200352013520235203352043520535206352073520835209352103521135212352133521435215352163521735218352193522035221352223522335224352253522635227352283522935230352313523235233352343523535236352373523835239352403524135242352433524435245352463524735248352493525035251352523525335254352553525635257352583525935260352613526235263352643526535266352673526835269352703527135272352733527435275352763527735278352793528035281352823528335284352853528635287352883528935290352913529235293352943529535296352973529835299353003530135302 |
- --- a/drivers/net/wireless/ath/ath9k/Makefile
- +++ b/drivers/net/wireless/ath/ath9k/Makefile
- @@ -13,16 +13,26 @@ ath9k-$(CONFIG_ATH9K_DEBUGFS) += debug.o
-
- obj-$(CONFIG_ATH9K) += ath9k.o
-
- -ath9k_hw-y:= hw.o \
- +ath9k_hw-y:= \
- + ar9002_hw.o \
- + ar9003_hw.o \
- + hw.o \
- + ar9003_phy.o \
- + ar9002_phy.o \
- + ar5008_phy.o \
- + ar9002_calib.o \
- + ar9003_calib.o \
- + calib.o \
- eeprom.o \
- eeprom_def.o \
- eeprom_4k.o \
- eeprom_9287.o \
- - calib.o \
- ani.o \
- - phy.o \
- btcoex.o \
- mac.o \
- + ar9002_mac.o \
- + ar9003_mac.o \
- + ar9003_eeprom.o
-
- obj-$(CONFIG_ATH9K_HW) += ath9k_hw.o
-
- --- a/drivers/net/wireless/ath/ath9k/ani.c
- +++ b/drivers/net/wireless/ath/ath9k/ani.c
- @@ -15,6 +15,7 @@
- */
-
- #include "hw.h"
- +#include "hw-ops.h"
-
- static int ath9k_hw_get_ani_channel_idx(struct ath_hw *ah,
- struct ath9k_channel *chan)
- @@ -37,190 +38,6 @@ static int ath9k_hw_get_ani_channel_idx(
- return 0;
- }
-
- -static bool ath9k_hw_ani_control(struct ath_hw *ah,
- - enum ath9k_ani_cmd cmd, int param)
- -{
- - struct ar5416AniState *aniState = ah->curani;
- - struct ath_common *common = ath9k_hw_common(ah);
- -
- - switch (cmd & ah->ani_function) {
- - case ATH9K_ANI_NOISE_IMMUNITY_LEVEL:{
- - u32 level = param;
- -
- - if (level >= ARRAY_SIZE(ah->totalSizeDesired)) {
- - ath_print(common, ATH_DBG_ANI,
- - "level out of range (%u > %u)\n",
- - level,
- - (unsigned)ARRAY_SIZE(ah->totalSizeDesired));
- - return false;
- - }
- -
- - REG_RMW_FIELD(ah, AR_PHY_DESIRED_SZ,
- - AR_PHY_DESIRED_SZ_TOT_DES,
- - ah->totalSizeDesired[level]);
- - REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1,
- - AR_PHY_AGC_CTL1_COARSE_LOW,
- - ah->coarse_low[level]);
- - REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1,
- - AR_PHY_AGC_CTL1_COARSE_HIGH,
- - ah->coarse_high[level]);
- - REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
- - AR_PHY_FIND_SIG_FIRPWR,
- - ah->firpwr[level]);
- -
- - if (level > aniState->noiseImmunityLevel)
- - ah->stats.ast_ani_niup++;
- - else if (level < aniState->noiseImmunityLevel)
- - ah->stats.ast_ani_nidown++;
- - aniState->noiseImmunityLevel = level;
- - break;
- - }
- - case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{
- - const int m1ThreshLow[] = { 127, 50 };
- - const int m2ThreshLow[] = { 127, 40 };
- - const int m1Thresh[] = { 127, 0x4d };
- - const int m2Thresh[] = { 127, 0x40 };
- - const int m2CountThr[] = { 31, 16 };
- - const int m2CountThrLow[] = { 63, 48 };
- - u32 on = param ? 1 : 0;
- -
- - REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
- - AR_PHY_SFCORR_LOW_M1_THRESH_LOW,
- - m1ThreshLow[on]);
- - REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
- - AR_PHY_SFCORR_LOW_M2_THRESH_LOW,
- - m2ThreshLow[on]);
- - REG_RMW_FIELD(ah, AR_PHY_SFCORR,
- - AR_PHY_SFCORR_M1_THRESH,
- - m1Thresh[on]);
- - REG_RMW_FIELD(ah, AR_PHY_SFCORR,
- - AR_PHY_SFCORR_M2_THRESH,
- - m2Thresh[on]);
- - REG_RMW_FIELD(ah, AR_PHY_SFCORR,
- - AR_PHY_SFCORR_M2COUNT_THR,
- - m2CountThr[on]);
- - REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
- - AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW,
- - m2CountThrLow[on]);
- -
- - REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
- - AR_PHY_SFCORR_EXT_M1_THRESH_LOW,
- - m1ThreshLow[on]);
- - REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
- - AR_PHY_SFCORR_EXT_M2_THRESH_LOW,
- - m2ThreshLow[on]);
- - REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
- - AR_PHY_SFCORR_EXT_M1_THRESH,
- - m1Thresh[on]);
- - REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
- - AR_PHY_SFCORR_EXT_M2_THRESH,
- - m2Thresh[on]);
- -
- - if (on)
- - REG_SET_BIT(ah, AR_PHY_SFCORR_LOW,
- - AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
- - else
- - REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
- - AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
- -
- - if (!on != aniState->ofdmWeakSigDetectOff) {
- - if (on)
- - ah->stats.ast_ani_ofdmon++;
- - else
- - ah->stats.ast_ani_ofdmoff++;
- - aniState->ofdmWeakSigDetectOff = !on;
- - }
- - break;
- - }
- - case ATH9K_ANI_CCK_WEAK_SIGNAL_THR:{
- - const int weakSigThrCck[] = { 8, 6 };
- - u32 high = param ? 1 : 0;
- -
- - REG_RMW_FIELD(ah, AR_PHY_CCK_DETECT,
- - AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK,
- - weakSigThrCck[high]);
- - if (high != aniState->cckWeakSigThreshold) {
- - if (high)
- - ah->stats.ast_ani_cckhigh++;
- - else
- - ah->stats.ast_ani_ccklow++;
- - aniState->cckWeakSigThreshold = high;
- - }
- - break;
- - }
- - case ATH9K_ANI_FIRSTEP_LEVEL:{
- - const int firstep[] = { 0, 4, 8 };
- - u32 level = param;
- -
- - if (level >= ARRAY_SIZE(firstep)) {
- - ath_print(common, ATH_DBG_ANI,
- - "level out of range (%u > %u)\n",
- - level,
- - (unsigned) ARRAY_SIZE(firstep));
- - return false;
- - }
- - REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
- - AR_PHY_FIND_SIG_FIRSTEP,
- - firstep[level]);
- - if (level > aniState->firstepLevel)
- - ah->stats.ast_ani_stepup++;
- - else if (level < aniState->firstepLevel)
- - ah->stats.ast_ani_stepdown++;
- - aniState->firstepLevel = level;
- - break;
- - }
- - case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{
- - const int cycpwrThr1[] =
- - { 2, 4, 6, 8, 10, 12, 14, 16 };
- - u32 level = param;
- -
- - if (level >= ARRAY_SIZE(cycpwrThr1)) {
- - ath_print(common, ATH_DBG_ANI,
- - "level out of range (%u > %u)\n",
- - level,
- - (unsigned) ARRAY_SIZE(cycpwrThr1));
- - return false;
- - }
- - REG_RMW_FIELD(ah, AR_PHY_TIMING5,
- - AR_PHY_TIMING5_CYCPWR_THR1,
- - cycpwrThr1[level]);
- - if (level > aniState->spurImmunityLevel)
- - ah->stats.ast_ani_spurup++;
- - else if (level < aniState->spurImmunityLevel)
- - ah->stats.ast_ani_spurdown++;
- - aniState->spurImmunityLevel = level;
- - break;
- - }
- - case ATH9K_ANI_PRESENT:
- - break;
- - default:
- - ath_print(common, ATH_DBG_ANI,
- - "invalid cmd %u\n", cmd);
- - return false;
- - }
- -
- - ath_print(common, ATH_DBG_ANI, "ANI parameters:\n");
- - ath_print(common, ATH_DBG_ANI,
- - "noiseImmunityLevel=%d, spurImmunityLevel=%d, "
- - "ofdmWeakSigDetectOff=%d\n",
- - aniState->noiseImmunityLevel,
- - aniState->spurImmunityLevel,
- - !aniState->ofdmWeakSigDetectOff);
- - ath_print(common, ATH_DBG_ANI,
- - "cckWeakSigThreshold=%d, "
- - "firstepLevel=%d, listenTime=%d\n",
- - aniState->cckWeakSigThreshold,
- - aniState->firstepLevel,
- - aniState->listenTime);
- - ath_print(common, ATH_DBG_ANI,
- - "cycleCount=%d, ofdmPhyErrCount=%d, cckPhyErrCount=%d\n\n",
- - aniState->cycleCount,
- - aniState->ofdmPhyErrCount,
- - aniState->cckPhyErrCount);
- -
- - return true;
- -}
- -
- static void ath9k_hw_update_mibstats(struct ath_hw *ah,
- struct ath9k_mib_stats *stats)
- {
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar5008_initvals.h
- @@ -0,0 +1,742 @@
- +/*
- + * Copyright (c) 2008-2009 Atheros Communications Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +
- +#ifndef INITVALS_AR5008_H
- +#define INITVALS_AR5008_H
- +
- +static const u32 ar5416Modes[][6] = {
- + { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
- + { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
- + { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
- + { 0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000, 0x00014008 },
- + { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
- + { 0x0000801c, 0x128d93a7, 0x128d93cf, 0x12e013d7, 0x12e013ab, 0x098813cf },
- + { 0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810 },
- + { 0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a, 0x0000320a },
- + { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
- + { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
- + { 0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- + { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
- + { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- + { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
- + { 0x00009844, 0x1372161e, 0x1372161e, 0x137216a0, 0x137216a0, 0x137216a0 },
- + { 0x00009848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- + { 0x0000a848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- + { 0x0000b848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- + { 0x00009850, 0x6c48b4e0, 0x6d48b4e0, 0x6d48b0de, 0x6c48b0de, 0x6c48b0de },
- + { 0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e },
- + { 0x0000985c, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e, 0x31395d5e },
- + { 0x00009860, 0x00049d18, 0x00049d18, 0x00049d18, 0x00049d18, 0x00049d18 },
- + { 0x00009864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- + { 0x00009868, 0x409a4190, 0x409a4190, 0x409a4190, 0x409a4190, 0x409a4190 },
- + { 0x0000986c, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081 },
- + { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
- + { 0x00009918, 0x000001b8, 0x00000370, 0x00000268, 0x00000134, 0x00000134 },
- + { 0x00009924, 0xd0058a0b, 0xd0058a0b, 0xd0058a0b, 0xd0058a0b, 0xd0058a0b },
- + { 0x00009944, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020 },
- + { 0x00009960, 0x00000900, 0x00000900, 0x00012d80, 0x00012d80, 0x00012d80 },
- + { 0x0000a960, 0x00000900, 0x00000900, 0x00012d80, 0x00012d80, 0x00012d80 },
- + { 0x0000b960, 0x00000900, 0x00000900, 0x00012d80, 0x00012d80, 0x00012d80 },
- + { 0x00009964, 0x00000000, 0x00000000, 0x00001120, 0x00001120, 0x00001120 },
- + { 0x000099bc, 0x001a0a00, 0x001a0a00, 0x001a0a00, 0x001a0a00, 0x001a0a00 },
- + { 0x000099c0, 0x038919be, 0x038919be, 0x038919be, 0x038919be, 0x038919be },
- + { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
- + { 0x000099c8, 0x6af6532c, 0x6af6532c, 0x6af6532c, 0x6af6532c, 0x6af6532c },
- + { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
- + { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
- + { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a204, 0x00000880, 0x00000880, 0x00000880, 0x00000880, 0x00000880 },
- + { 0x0000a208, 0xd6be4788, 0xd6be4788, 0xd03e4788, 0xd03e4788, 0xd03e4788 },
- + { 0x0000a20c, 0x002ec1e0, 0x002ec1e0, 0x002ac120, 0x002ac120, 0x002ac120 },
- + { 0x0000b20c, 0x002ec1e0, 0x002ec1e0, 0x002ac120, 0x002ac120, 0x002ac120 },
- + { 0x0000c20c, 0x002ec1e0, 0x002ec1e0, 0x002ac120, 0x002ac120, 0x002ac120 },
- + { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
- + { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- + { 0x0000a274, 0x0a1a9caa, 0x0a1a9caa, 0x0a1a7caa, 0x0a1a7caa, 0x0a1a7caa },
- + { 0x0000a300, 0x18010000, 0x18010000, 0x18010000, 0x18010000, 0x18010000 },
- + { 0x0000a304, 0x30032602, 0x30032602, 0x2e032402, 0x2e032402, 0x2e032402 },
- + { 0x0000a308, 0x48073e06, 0x48073e06, 0x4a0a3c06, 0x4a0a3c06, 0x4a0a3c06 },
- + { 0x0000a30c, 0x560b4c0a, 0x560b4c0a, 0x621a540b, 0x621a540b, 0x621a540b },
- + { 0x0000a310, 0x641a600f, 0x641a600f, 0x764f6c1b, 0x764f6c1b, 0x764f6c1b },
- + { 0x0000a314, 0x7a4f6e1b, 0x7a4f6e1b, 0x845b7a5a, 0x845b7a5a, 0x845b7a5a },
- + { 0x0000a318, 0x8c5b7e5a, 0x8c5b7e5a, 0x950f8ccf, 0x950f8ccf, 0x950f8ccf },
- + { 0x0000a31c, 0x9d0f96cf, 0x9d0f96cf, 0xa5cf9b4f, 0xa5cf9b4f, 0xa5cf9b4f },
- + { 0x0000a320, 0xb51fa69f, 0xb51fa69f, 0xbddfaf1f, 0xbddfaf1f, 0xbddfaf1f },
- + { 0x0000a324, 0xcb3fbd07, 0xcb3fbcbf, 0xd1ffc93f, 0xd1ffc93f, 0xd1ffc93f },
- + { 0x0000a328, 0x0000d7bf, 0x0000d7bf, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a32c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a330, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- +};
- +
- +static const u32 ar5416Common[][2] = {
- + { 0x0000000c, 0x00000000 },
- + { 0x00000030, 0x00020015 },
- + { 0x00000034, 0x00000005 },
- + { 0x00000040, 0x00000000 },
- + { 0x00000044, 0x00000008 },
- + { 0x00000048, 0x00000008 },
- + { 0x0000004c, 0x00000010 },
- + { 0x00000050, 0x00000000 },
- + { 0x00000054, 0x0000001f },
- + { 0x00000800, 0x00000000 },
- + { 0x00000804, 0x00000000 },
- + { 0x00000808, 0x00000000 },
- + { 0x0000080c, 0x00000000 },
- + { 0x00000810, 0x00000000 },
- + { 0x00000814, 0x00000000 },
- + { 0x00000818, 0x00000000 },
- + { 0x0000081c, 0x00000000 },
- + { 0x00000820, 0x00000000 },
- + { 0x00000824, 0x00000000 },
- + { 0x00001040, 0x002ffc0f },
- + { 0x00001044, 0x002ffc0f },
- + { 0x00001048, 0x002ffc0f },
- + { 0x0000104c, 0x002ffc0f },
- + { 0x00001050, 0x002ffc0f },
- + { 0x00001054, 0x002ffc0f },
- + { 0x00001058, 0x002ffc0f },
- + { 0x0000105c, 0x002ffc0f },
- + { 0x00001060, 0x002ffc0f },
- + { 0x00001064, 0x002ffc0f },
- + { 0x00001230, 0x00000000 },
- + { 0x00001270, 0x00000000 },
- + { 0x00001038, 0x00000000 },
- + { 0x00001078, 0x00000000 },
- + { 0x000010b8, 0x00000000 },
- + { 0x000010f8, 0x00000000 },
- + { 0x00001138, 0x00000000 },
- + { 0x00001178, 0x00000000 },
- + { 0x000011b8, 0x00000000 },
- + { 0x000011f8, 0x00000000 },
- + { 0x00001238, 0x00000000 },
- + { 0x00001278, 0x00000000 },
- + { 0x000012b8, 0x00000000 },
- + { 0x000012f8, 0x00000000 },
- + { 0x00001338, 0x00000000 },
- + { 0x00001378, 0x00000000 },
- + { 0x000013b8, 0x00000000 },
- + { 0x000013f8, 0x00000000 },
- + { 0x00001438, 0x00000000 },
- + { 0x00001478, 0x00000000 },
- + { 0x000014b8, 0x00000000 },
- + { 0x000014f8, 0x00000000 },
- + { 0x00001538, 0x00000000 },
- + { 0x00001578, 0x00000000 },
- + { 0x000015b8, 0x00000000 },
- + { 0x000015f8, 0x00000000 },
- + { 0x00001638, 0x00000000 },
- + { 0x00001678, 0x00000000 },
- + { 0x000016b8, 0x00000000 },
- + { 0x000016f8, 0x00000000 },
- + { 0x00001738, 0x00000000 },
- + { 0x00001778, 0x00000000 },
- + { 0x000017b8, 0x00000000 },
- + { 0x000017f8, 0x00000000 },
- + { 0x0000103c, 0x00000000 },
- + { 0x0000107c, 0x00000000 },
- + { 0x000010bc, 0x00000000 },
- + { 0x000010fc, 0x00000000 },
- + { 0x0000113c, 0x00000000 },
- + { 0x0000117c, 0x00000000 },
- + { 0x000011bc, 0x00000000 },
- + { 0x000011fc, 0x00000000 },
- + { 0x0000123c, 0x00000000 },
- + { 0x0000127c, 0x00000000 },
- + { 0x000012bc, 0x00000000 },
- + { 0x000012fc, 0x00000000 },
- + { 0x0000133c, 0x00000000 },
- + { 0x0000137c, 0x00000000 },
- + { 0x000013bc, 0x00000000 },
- + { 0x000013fc, 0x00000000 },
- + { 0x0000143c, 0x00000000 },
- + { 0x0000147c, 0x00000000 },
- + { 0x00004030, 0x00000002 },
- + { 0x0000403c, 0x00000002 },
- + { 0x00007010, 0x00000000 },
- + { 0x00007038, 0x000004c2 },
- + { 0x00008004, 0x00000000 },
- + { 0x00008008, 0x00000000 },
- + { 0x0000800c, 0x00000000 },
- + { 0x00008018, 0x00000700 },
- + { 0x00008020, 0x00000000 },
- + { 0x00008038, 0x00000000 },
- + { 0x0000803c, 0x00000000 },
- + { 0x00008048, 0x40000000 },
- + { 0x00008054, 0x00000000 },
- + { 0x00008058, 0x00000000 },
- + { 0x0000805c, 0x000fc78f },
- + { 0x00008060, 0x0000000f },
- + { 0x00008064, 0x00000000 },
- + { 0x000080c0, 0x2a82301a },
- + { 0x000080c4, 0x05dc01e0 },
- + { 0x000080c8, 0x1f402710 },
- + { 0x000080cc, 0x01f40000 },
- + { 0x000080d0, 0x00001e00 },
- + { 0x000080d4, 0x00000000 },
- + { 0x000080d8, 0x00400000 },
- + { 0x000080e0, 0xffffffff },
- + { 0x000080e4, 0x0000ffff },
- + { 0x000080e8, 0x003f3f3f },
- + { 0x000080ec, 0x00000000 },
- + { 0x000080f0, 0x00000000 },
- + { 0x000080f4, 0x00000000 },
- + { 0x000080f8, 0x00000000 },
- + { 0x000080fc, 0x00020000 },
- + { 0x00008100, 0x00020000 },
- + { 0x00008104, 0x00000001 },
- + { 0x00008108, 0x00000052 },
- + { 0x0000810c, 0x00000000 },
- + { 0x00008110, 0x00000168 },
- + { 0x00008118, 0x000100aa },
- + { 0x0000811c, 0x00003210 },
- + { 0x00008124, 0x00000000 },
- + { 0x00008128, 0x00000000 },
- + { 0x0000812c, 0x00000000 },
- + { 0x00008130, 0x00000000 },
- + { 0x00008134, 0x00000000 },
- + { 0x00008138, 0x00000000 },
- + { 0x0000813c, 0x00000000 },
- + { 0x00008144, 0xffffffff },
- + { 0x00008168, 0x00000000 },
- + { 0x0000816c, 0x00000000 },
- + { 0x00008170, 0x32143320 },
- + { 0x00008174, 0xfaa4fa50 },
- + { 0x00008178, 0x00000100 },
- + { 0x0000817c, 0x00000000 },
- + { 0x000081c4, 0x00000000 },
- + { 0x000081ec, 0x00000000 },
- + { 0x000081f0, 0x00000000 },
- + { 0x000081f4, 0x00000000 },
- + { 0x000081f8, 0x00000000 },
- + { 0x000081fc, 0x00000000 },
- + { 0x00008200, 0x00000000 },
- + { 0x00008204, 0x00000000 },
- + { 0x00008208, 0x00000000 },
- + { 0x0000820c, 0x00000000 },
- + { 0x00008210, 0x00000000 },
- + { 0x00008214, 0x00000000 },
- + { 0x00008218, 0x00000000 },
- + { 0x0000821c, 0x00000000 },
- + { 0x00008220, 0x00000000 },
- + { 0x00008224, 0x00000000 },
- + { 0x00008228, 0x00000000 },
- + { 0x0000822c, 0x00000000 },
- + { 0x00008230, 0x00000000 },
- + { 0x00008234, 0x00000000 },
- + { 0x00008238, 0x00000000 },
- + { 0x0000823c, 0x00000000 },
- + { 0x00008240, 0x00100000 },
- + { 0x00008244, 0x0010f400 },
- + { 0x00008248, 0x00000100 },
- + { 0x0000824c, 0x0001e800 },
- + { 0x00008250, 0x00000000 },
- + { 0x00008254, 0x00000000 },
- + { 0x00008258, 0x00000000 },
- + { 0x0000825c, 0x400000ff },
- + { 0x00008260, 0x00080922 },
- + { 0x00008264, 0xa8000010 },
- + { 0x00008270, 0x00000000 },
- + { 0x00008274, 0x40000000 },
- + { 0x00008278, 0x003e4180 },
- + { 0x0000827c, 0x00000000 },
- + { 0x00008284, 0x0000002c },
- + { 0x00008288, 0x0000002c },
- + { 0x0000828c, 0x00000000 },
- + { 0x00008294, 0x00000000 },
- + { 0x00008298, 0x00000000 },
- + { 0x00008300, 0x00000000 },
- + { 0x00008304, 0x00000000 },
- + { 0x00008308, 0x00000000 },
- + { 0x0000830c, 0x00000000 },
- + { 0x00008310, 0x00000000 },
- + { 0x00008314, 0x00000000 },
- + { 0x00008318, 0x00000000 },
- + { 0x00008328, 0x00000000 },
- + { 0x0000832c, 0x00000007 },
- + { 0x00008330, 0x00000302 },
- + { 0x00008334, 0x00000e00 },
- + { 0x00008338, 0x00070000 },
- + { 0x0000833c, 0x00000000 },
- + { 0x00008340, 0x000107ff },
- + { 0x00009808, 0x00000000 },
- + { 0x0000980c, 0xad848e19 },
- + { 0x00009810, 0x7d14e000 },
- + { 0x00009814, 0x9c0a9f6b },
- + { 0x0000981c, 0x00000000 },
- + { 0x0000982c, 0x0000a000 },
- + { 0x00009830, 0x00000000 },
- + { 0x0000983c, 0x00200400 },
- + { 0x00009840, 0x206a002e },
- + { 0x0000984c, 0x1284233c },
- + { 0x00009854, 0x00000859 },
- + { 0x00009900, 0x00000000 },
- + { 0x00009904, 0x00000000 },
- + { 0x00009908, 0x00000000 },
- + { 0x0000990c, 0x00000000 },
- + { 0x0000991c, 0x10000fff },
- + { 0x00009920, 0x05100000 },
- + { 0x0000a920, 0x05100000 },
- + { 0x0000b920, 0x05100000 },
- + { 0x00009928, 0x00000001 },
- + { 0x0000992c, 0x00000004 },
- + { 0x00009934, 0x1e1f2022 },
- + { 0x00009938, 0x0a0b0c0d },
- + { 0x0000993c, 0x00000000 },
- + { 0x00009948, 0x9280b212 },
- + { 0x0000994c, 0x00020028 },
- + { 0x00009954, 0x5d50e188 },
- + { 0x00009958, 0x00081fff },
- + { 0x0000c95c, 0x004b6a8e },
- + { 0x0000c968, 0x000003ce },
- + { 0x00009970, 0x190fb515 },
- + { 0x00009974, 0x00000000 },
- + { 0x00009978, 0x00000001 },
- + { 0x0000997c, 0x00000000 },
- + { 0x00009980, 0x00000000 },
- + { 0x00009984, 0x00000000 },
- + { 0x00009988, 0x00000000 },
- + { 0x0000998c, 0x00000000 },
- + { 0x00009990, 0x00000000 },
- + { 0x00009994, 0x00000000 },
- + { 0x00009998, 0x00000000 },
- + { 0x0000999c, 0x00000000 },
- + { 0x000099a0, 0x00000000 },
- + { 0x000099a4, 0x00000001 },
- + { 0x000099a8, 0x001fff00 },
- + { 0x000099ac, 0x00000000 },
- + { 0x000099b0, 0x03051000 },
- + { 0x000099dc, 0x00000000 },
- + { 0x000099e0, 0x00000200 },
- + { 0x000099e4, 0xaaaaaaaa },
- + { 0x000099e8, 0x3c466478 },
- + { 0x000099ec, 0x000000aa },
- + { 0x000099fc, 0x00001042 },
- + { 0x00009b00, 0x00000000 },
- + { 0x00009b04, 0x00000001 },
- + { 0x00009b08, 0x00000002 },
- + { 0x00009b0c, 0x00000003 },
- + { 0x00009b10, 0x00000004 },
- + { 0x00009b14, 0x00000005 },
- + { 0x00009b18, 0x00000008 },
- + { 0x00009b1c, 0x00000009 },
- + { 0x00009b20, 0x0000000a },
- + { 0x00009b24, 0x0000000b },
- + { 0x00009b28, 0x0000000c },
- + { 0x00009b2c, 0x0000000d },
- + { 0x00009b30, 0x00000010 },
- + { 0x00009b34, 0x00000011 },
- + { 0x00009b38, 0x00000012 },
- + { 0x00009b3c, 0x00000013 },
- + { 0x00009b40, 0x00000014 },
- + { 0x00009b44, 0x00000015 },
- + { 0x00009b48, 0x00000018 },
- + { 0x00009b4c, 0x00000019 },
- + { 0x00009b50, 0x0000001a },
- + { 0x00009b54, 0x0000001b },
- + { 0x00009b58, 0x0000001c },
- + { 0x00009b5c, 0x0000001d },
- + { 0x00009b60, 0x00000020 },
- + { 0x00009b64, 0x00000021 },
- + { 0x00009b68, 0x00000022 },
- + { 0x00009b6c, 0x00000023 },
- + { 0x00009b70, 0x00000024 },
- + { 0x00009b74, 0x00000025 },
- + { 0x00009b78, 0x00000028 },
- + { 0x00009b7c, 0x00000029 },
- + { 0x00009b80, 0x0000002a },
- + { 0x00009b84, 0x0000002b },
- + { 0x00009b88, 0x0000002c },
- + { 0x00009b8c, 0x0000002d },
- + { 0x00009b90, 0x00000030 },
- + { 0x00009b94, 0x00000031 },
- + { 0x00009b98, 0x00000032 },
- + { 0x00009b9c, 0x00000033 },
- + { 0x00009ba0, 0x00000034 },
- + { 0x00009ba4, 0x00000035 },
- + { 0x00009ba8, 0x00000035 },
- + { 0x00009bac, 0x00000035 },
- + { 0x00009bb0, 0x00000035 },
- + { 0x00009bb4, 0x00000035 },
- + { 0x00009bb8, 0x00000035 },
- + { 0x00009bbc, 0x00000035 },
- + { 0x00009bc0, 0x00000035 },
- + { 0x00009bc4, 0x00000035 },
- + { 0x00009bc8, 0x00000035 },
- + { 0x00009bcc, 0x00000035 },
- + { 0x00009bd0, 0x00000035 },
- + { 0x00009bd4, 0x00000035 },
- + { 0x00009bd8, 0x00000035 },
- + { 0x00009bdc, 0x00000035 },
- + { 0x00009be0, 0x00000035 },
- + { 0x00009be4, 0x00000035 },
- + { 0x00009be8, 0x00000035 },
- + { 0x00009bec, 0x00000035 },
- + { 0x00009bf0, 0x00000035 },
- + { 0x00009bf4, 0x00000035 },
- + { 0x00009bf8, 0x00000010 },
- + { 0x00009bfc, 0x0000001a },
- + { 0x0000a210, 0x40806333 },
- + { 0x0000a214, 0x00106c10 },
- + { 0x0000a218, 0x009c4060 },
- + { 0x0000a220, 0x018830c6 },
- + { 0x0000a224, 0x00000400 },
- + { 0x0000a228, 0x00000bb5 },
- + { 0x0000a22c, 0x00000011 },
- + { 0x0000a234, 0x20202020 },
- + { 0x0000a238, 0x20202020 },
- + { 0x0000a23c, 0x13c889af },
- + { 0x0000a240, 0x38490a20 },
- + { 0x0000a244, 0x00007bb6 },
- + { 0x0000a248, 0x0fff3ffc },
- + { 0x0000a24c, 0x00000001 },
- + { 0x0000a250, 0x0000a000 },
- + { 0x0000a254, 0x00000000 },
- + { 0x0000a258, 0x0cc75380 },
- + { 0x0000a25c, 0x0f0f0f01 },
- + { 0x0000a260, 0xdfa91f01 },
- + { 0x0000a268, 0x00000000 },
- + { 0x0000a26c, 0x0e79e5c6 },
- + { 0x0000b26c, 0x0e79e5c6 },
- + { 0x0000c26c, 0x0e79e5c6 },
- + { 0x0000d270, 0x00820820 },
- + { 0x0000a278, 0x1ce739ce },
- + { 0x0000a27c, 0x051701ce },
- + { 0x0000a338, 0x00000000 },
- + { 0x0000a33c, 0x00000000 },
- + { 0x0000a340, 0x00000000 },
- + { 0x0000a344, 0x00000000 },
- + { 0x0000a348, 0x3fffffff },
- + { 0x0000a34c, 0x3fffffff },
- + { 0x0000a350, 0x3fffffff },
- + { 0x0000a354, 0x0003ffff },
- + { 0x0000a358, 0x79a8aa1f },
- + { 0x0000d35c, 0x07ffffef },
- + { 0x0000d360, 0x0fffffe7 },
- + { 0x0000d364, 0x17ffffe5 },
- + { 0x0000d368, 0x1fffffe4 },
- + { 0x0000d36c, 0x37ffffe3 },
- + { 0x0000d370, 0x3fffffe3 },
- + { 0x0000d374, 0x57ffffe3 },
- + { 0x0000d378, 0x5fffffe2 },
- + { 0x0000d37c, 0x7fffffe2 },
- + { 0x0000d380, 0x7f3c7bba },
- + { 0x0000d384, 0xf3307ff0 },
- + { 0x0000a388, 0x08000000 },
- + { 0x0000a38c, 0x20202020 },
- + { 0x0000a390, 0x20202020 },
- + { 0x0000a394, 0x1ce739ce },
- + { 0x0000a398, 0x000001ce },
- + { 0x0000a39c, 0x00000001 },
- + { 0x0000a3a0, 0x00000000 },
- + { 0x0000a3a4, 0x00000000 },
- + { 0x0000a3a8, 0x00000000 },
- + { 0x0000a3ac, 0x00000000 },
- + { 0x0000a3b0, 0x00000000 },
- + { 0x0000a3b4, 0x00000000 },
- + { 0x0000a3b8, 0x00000000 },
- + { 0x0000a3bc, 0x00000000 },
- + { 0x0000a3c0, 0x00000000 },
- + { 0x0000a3c4, 0x00000000 },
- + { 0x0000a3c8, 0x00000246 },
- + { 0x0000a3cc, 0x20202020 },
- + { 0x0000a3d0, 0x20202020 },
- + { 0x0000a3d4, 0x20202020 },
- + { 0x0000a3dc, 0x1ce739ce },
- + { 0x0000a3e0, 0x000001ce },
- +};
- +
- +static const u32 ar5416Bank0[][2] = {
- + { 0x000098b0, 0x1e5795e5 },
- + { 0x000098e0, 0x02008020 },
- +};
- +
- +static const u32 ar5416BB_RfGain[][3] = {
- + { 0x00009a00, 0x00000000, 0x00000000 },
- + { 0x00009a04, 0x00000040, 0x00000040 },
- + { 0x00009a08, 0x00000080, 0x00000080 },
- + { 0x00009a0c, 0x000001a1, 0x00000141 },
- + { 0x00009a10, 0x000001e1, 0x00000181 },
- + { 0x00009a14, 0x00000021, 0x000001c1 },
- + { 0x00009a18, 0x00000061, 0x00000001 },
- + { 0x00009a1c, 0x00000168, 0x00000041 },
- + { 0x00009a20, 0x000001a8, 0x000001a8 },
- + { 0x00009a24, 0x000001e8, 0x000001e8 },
- + { 0x00009a28, 0x00000028, 0x00000028 },
- + { 0x00009a2c, 0x00000068, 0x00000068 },
- + { 0x00009a30, 0x00000189, 0x000000a8 },
- + { 0x00009a34, 0x000001c9, 0x00000169 },
- + { 0x00009a38, 0x00000009, 0x000001a9 },
- + { 0x00009a3c, 0x00000049, 0x000001e9 },
- + { 0x00009a40, 0x00000089, 0x00000029 },
- + { 0x00009a44, 0x00000170, 0x00000069 },
- + { 0x00009a48, 0x000001b0, 0x00000190 },
- + { 0x00009a4c, 0x000001f0, 0x000001d0 },
- + { 0x00009a50, 0x00000030, 0x00000010 },
- + { 0x00009a54, 0x00000070, 0x00000050 },
- + { 0x00009a58, 0x00000191, 0x00000090 },
- + { 0x00009a5c, 0x000001d1, 0x00000151 },
- + { 0x00009a60, 0x00000011, 0x00000191 },
- + { 0x00009a64, 0x00000051, 0x000001d1 },
- + { 0x00009a68, 0x00000091, 0x00000011 },
- + { 0x00009a6c, 0x000001b8, 0x00000051 },
- + { 0x00009a70, 0x000001f8, 0x00000198 },
- + { 0x00009a74, 0x00000038, 0x000001d8 },
- + { 0x00009a78, 0x00000078, 0x00000018 },
- + { 0x00009a7c, 0x00000199, 0x00000058 },
- + { 0x00009a80, 0x000001d9, 0x00000098 },
- + { 0x00009a84, 0x00000019, 0x00000159 },
- + { 0x00009a88, 0x00000059, 0x00000199 },
- + { 0x00009a8c, 0x00000099, 0x000001d9 },
- + { 0x00009a90, 0x000000d9, 0x00000019 },
- + { 0x00009a94, 0x000000f9, 0x00000059 },
- + { 0x00009a98, 0x000000f9, 0x00000099 },
- + { 0x00009a9c, 0x000000f9, 0x000000d9 },
- + { 0x00009aa0, 0x000000f9, 0x000000f9 },
- + { 0x00009aa4, 0x000000f9, 0x000000f9 },
- + { 0x00009aa8, 0x000000f9, 0x000000f9 },
- + { 0x00009aac, 0x000000f9, 0x000000f9 },
- + { 0x00009ab0, 0x000000f9, 0x000000f9 },
- + { 0x00009ab4, 0x000000f9, 0x000000f9 },
- + { 0x00009ab8, 0x000000f9, 0x000000f9 },
- + { 0x00009abc, 0x000000f9, 0x000000f9 },
- + { 0x00009ac0, 0x000000f9, 0x000000f9 },
- + { 0x00009ac4, 0x000000f9, 0x000000f9 },
- + { 0x00009ac8, 0x000000f9, 0x000000f9 },
- + { 0x00009acc, 0x000000f9, 0x000000f9 },
- + { 0x00009ad0, 0x000000f9, 0x000000f9 },
- + { 0x00009ad4, 0x000000f9, 0x000000f9 },
- + { 0x00009ad8, 0x000000f9, 0x000000f9 },
- + { 0x00009adc, 0x000000f9, 0x000000f9 },
- + { 0x00009ae0, 0x000000f9, 0x000000f9 },
- + { 0x00009ae4, 0x000000f9, 0x000000f9 },
- + { 0x00009ae8, 0x000000f9, 0x000000f9 },
- + { 0x00009aec, 0x000000f9, 0x000000f9 },
- + { 0x00009af0, 0x000000f9, 0x000000f9 },
- + { 0x00009af4, 0x000000f9, 0x000000f9 },
- + { 0x00009af8, 0x000000f9, 0x000000f9 },
- + { 0x00009afc, 0x000000f9, 0x000000f9 },
- +};
- +
- +static const u32 ar5416Bank1[][2] = {
- + { 0x000098b0, 0x02108421 },
- + { 0x000098ec, 0x00000008 },
- +};
- +
- +static const u32 ar5416Bank2[][2] = {
- + { 0x000098b0, 0x0e73ff17 },
- + { 0x000098e0, 0x00000420 },
- +};
- +
- +static const u32 ar5416Bank3[][3] = {
- + { 0x000098f0, 0x01400018, 0x01c00018 },
- +};
- +
- +static const u32 ar5416Bank6[][3] = {
- +
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00e00000, 0x00e00000 },
- + { 0x0000989c, 0x005e0000, 0x005e0000 },
- + { 0x0000989c, 0x00120000, 0x00120000 },
- + { 0x0000989c, 0x00620000, 0x00620000 },
- + { 0x0000989c, 0x00020000, 0x00020000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x40ff0000, 0x40ff0000 },
- + { 0x0000989c, 0x005f0000, 0x005f0000 },
- + { 0x0000989c, 0x00870000, 0x00870000 },
- + { 0x0000989c, 0x00f90000, 0x00f90000 },
- + { 0x0000989c, 0x007b0000, 0x007b0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00f50000, 0x00f50000 },
- + { 0x0000989c, 0x00dc0000, 0x00dc0000 },
- + { 0x0000989c, 0x00110000, 0x00110000 },
- + { 0x0000989c, 0x006100a8, 0x006100a8 },
- + { 0x0000989c, 0x004210a2, 0x004210a2 },
- + { 0x0000989c, 0x0014008f, 0x0014008f },
- + { 0x0000989c, 0x00c40003, 0x00c40003 },
- + { 0x0000989c, 0x003000f2, 0x003000f2 },
- + { 0x0000989c, 0x00440016, 0x00440016 },
- + { 0x0000989c, 0x00410040, 0x00410040 },
- + { 0x0000989c, 0x0001805e, 0x0001805e },
- + { 0x0000989c, 0x0000c0ab, 0x0000c0ab },
- + { 0x0000989c, 0x000000f1, 0x000000f1 },
- + { 0x0000989c, 0x00002081, 0x00002081 },
- + { 0x0000989c, 0x000000d4, 0x000000d4 },
- + { 0x000098d0, 0x0000000f, 0x0010000f },
- +};
- +
- +static const u32 ar5416Bank6TPC[][3] = {
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00e00000, 0x00e00000 },
- + { 0x0000989c, 0x005e0000, 0x005e0000 },
- + { 0x0000989c, 0x00120000, 0x00120000 },
- + { 0x0000989c, 0x00620000, 0x00620000 },
- + { 0x0000989c, 0x00020000, 0x00020000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x40ff0000, 0x40ff0000 },
- + { 0x0000989c, 0x005f0000, 0x005f0000 },
- + { 0x0000989c, 0x00870000, 0x00870000 },
- + { 0x0000989c, 0x00f90000, 0x00f90000 },
- + { 0x0000989c, 0x007b0000, 0x007b0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00f50000, 0x00f50000 },
- + { 0x0000989c, 0x00dc0000, 0x00dc0000 },
- + { 0x0000989c, 0x00110000, 0x00110000 },
- + { 0x0000989c, 0x006100a8, 0x006100a8 },
- + { 0x0000989c, 0x00423022, 0x00423022 },
- + { 0x0000989c, 0x201400df, 0x201400df },
- + { 0x0000989c, 0x00c40002, 0x00c40002 },
- + { 0x0000989c, 0x003000f2, 0x003000f2 },
- + { 0x0000989c, 0x00440016, 0x00440016 },
- + { 0x0000989c, 0x00410040, 0x00410040 },
- + { 0x0000989c, 0x0001805e, 0x0001805e },
- + { 0x0000989c, 0x0000c0ab, 0x0000c0ab },
- + { 0x0000989c, 0x000000e1, 0x000000e1 },
- + { 0x0000989c, 0x00007081, 0x00007081 },
- + { 0x0000989c, 0x000000d4, 0x000000d4 },
- + { 0x000098d0, 0x0000000f, 0x0010000f },
- +};
- +
- +static const u32 ar5416Bank7[][2] = {
- + { 0x0000989c, 0x00000500 },
- + { 0x0000989c, 0x00000800 },
- + { 0x000098cc, 0x0000000e },
- +};
- +
- +static const u32 ar5416Addac[][2] = {
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000003 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x0000000c },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000030 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000060 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000058 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x000098cc, 0x00000000 },
- +};
- +
- +static const u32 ar5416Modes_9100[][6] = {
- + { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
- + { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
- + { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
- + { 0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000, 0x00014008 },
- + { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
- + { 0x0000801c, 0x128d93a7, 0x128d93cf, 0x12e013d7, 0x12e013ab, 0x098813cf },
- + { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
- + { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
- + { 0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- + { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
- + { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- + { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
- + { 0x00009844, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0, 0x037216a0 },
- + { 0x00009848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- + { 0x0000a848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- + { 0x0000b848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- + { 0x00009850, 0x6d48b4e2, 0x6d48b4e2, 0x6d48b0e2, 0x6d48b0e2, 0x6d48b0e2 },
- + { 0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec86d2e, 0x7ec84d2e, 0x7ec82d2e },
- + { 0x0000985c, 0x3139605e, 0x3139605e, 0x3139605e, 0x3139605e, 0x3139605e },
- + { 0x00009860, 0x00048d18, 0x00048d18, 0x00048d20, 0x00048d20, 0x00048d18 },
- + { 0x0000c864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- + { 0x00009868, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0 },
- + { 0x0000986c, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081 },
- + { 0x00009914, 0x000007d0, 0x000007d0, 0x00000898, 0x00000898, 0x000007d0 },
- + { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
- + { 0x00009924, 0xd00a8a07, 0xd00a8a07, 0xd00a8a11, 0xd00a8a0d, 0xd00a8a0d },
- + { 0x00009940, 0x00754604, 0x00754604, 0xfff81204, 0xfff81204, 0xfff81204 },
- + { 0x00009944, 0xdfb81020, 0xdfb81020, 0xdfb81020, 0xdfb81020, 0xdfb81020 },
- + { 0x00009954, 0x5f3ca3de, 0x5f3ca3de, 0xe250a51e, 0xe250a51e, 0xe250a51e },
- + { 0x00009958, 0x2108ecff, 0x2108ecff, 0x3388ffff, 0x3388ffff, 0x3388ffff },
- +#ifdef TB243
- + { 0x00009960, 0x00000900, 0x00000900, 0x00009b40, 0x00009b40, 0x00012d80 },
- + { 0x0000a960, 0x00000900, 0x00000900, 0x00009b40, 0x00009b40, 0x00012d80 },
- + { 0x0000b960, 0x00000900, 0x00000900, 0x00009b40, 0x00009b40, 0x00012d80 },
- + { 0x00009964, 0x00000000, 0x00000000, 0x00002210, 0x00002210, 0x00001120 },
- +#else
- + { 0x00009960, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0 },
- + { 0x0000a960, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0 },
- + { 0x0000b960, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0 },
- + { 0x00009964, 0x00001120, 0x00001120, 0x00001120, 0x00001120, 0x00001120 },
- +#endif
- + { 0x0000c9bc, 0x001a0600, 0x001a0600, 0x001a1000, 0x001a0c00, 0x001a0c00 },
- + { 0x000099c0, 0x038919be, 0x038919be, 0x038919be, 0x038919be, 0x038919be },
- + { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
- + { 0x000099c8, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329 },
- + { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
- + { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
- + { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a204, 0x00000880, 0x00000880, 0x00000880, 0x00000880, 0x00000880 },
- + { 0x0000a208, 0xd6be4788, 0xd6be4788, 0xd03e4788, 0xd03e4788, 0xd03e4788 },
- + { 0x0000a20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
- + { 0x0000b20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
- + { 0x0000c20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
- + { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
- + { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- + { 0x0000a274, 0x0a1a9caa, 0x0a1a9caa, 0x0a1a7caa, 0x0a1a7caa, 0x0a1a7caa },
- + { 0x0000a300, 0x18010000, 0x18010000, 0x18010000, 0x18010000, 0x18010000 },
- + { 0x0000a304, 0x30032602, 0x30032602, 0x2e032402, 0x2e032402, 0x2e032402 },
- + { 0x0000a308, 0x48073e06, 0x48073e06, 0x4a0a3c06, 0x4a0a3c06, 0x4a0a3c06 },
- + { 0x0000a30c, 0x560b4c0a, 0x560b4c0a, 0x621a540b, 0x621a540b, 0x621a540b },
- + { 0x0000a310, 0x641a600f, 0x641a600f, 0x764f6c1b, 0x764f6c1b, 0x764f6c1b },
- + { 0x0000a314, 0x7a4f6e1b, 0x7a4f6e1b, 0x845b7a5a, 0x845b7a5a, 0x845b7a5a },
- + { 0x0000a318, 0x8c5b7e5a, 0x8c5b7e5a, 0x950f8ccf, 0x950f8ccf, 0x950f8ccf },
- + { 0x0000a31c, 0x9d0f96cf, 0x9d0f96cf, 0xa5cf9b4f, 0xa5cf9b4f, 0xa5cf9b4f },
- + { 0x0000a320, 0xb51fa69f, 0xb51fa69f, 0xbddfaf1f, 0xbddfaf1f, 0xbddfaf1f },
- + { 0x0000a324, 0xcb3fbd07, 0xcb3fbcbf, 0xd1ffc93f, 0xd1ffc93f, 0xd1ffc93f },
- + { 0x0000a328, 0x0000d7bf, 0x0000d7bf, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a32c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a330, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- +};
- +
- +#endif /* INITVALS_AR5008_H */
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
- @@ -0,0 +1,1345 @@
- +/*
- + * Copyright (c) 2008-2010 Atheros Communications Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +
- +#include "hw.h"
- +#include "hw-ops.h"
- +#include "../regd.h"
- +#include "ar9002_phy.h"
- +
- +/* All code below is for non single-chip solutions */
- +
- +/**
- + * ar5008_hw_phy_modify_rx_buffer() - perform analog swizzling of parameters
- + * @rfbuf:
- + * @reg32:
- + * @numBits:
- + * @firstBit:
- + * @column:
- + *
- + * Performs analog "swizzling" of parameters into their location.
- + * Used on external AR2133/AR5133 radios.
- + */
- +static void ar5008_hw_phy_modify_rx_buffer(u32 *rfBuf, u32 reg32,
- + u32 numBits, u32 firstBit,
- + u32 column)
- +{
- + u32 tmp32, mask, arrayEntry, lastBit;
- + int32_t bitPosition, bitsLeft;
- +
- + tmp32 = ath9k_hw_reverse_bits(reg32, numBits);
- + arrayEntry = (firstBit - 1) / 8;
- + bitPosition = (firstBit - 1) % 8;
- + bitsLeft = numBits;
- + while (bitsLeft > 0) {
- + lastBit = (bitPosition + bitsLeft > 8) ?
- + 8 : bitPosition + bitsLeft;
- + mask = (((1 << lastBit) - 1) ^ ((1 << bitPosition) - 1)) <<
- + (column * 8);
- + rfBuf[arrayEntry] &= ~mask;
- + rfBuf[arrayEntry] |= ((tmp32 << bitPosition) <<
- + (column * 8)) & mask;
- + bitsLeft -= 8 - bitPosition;
- + tmp32 = tmp32 >> (8 - bitPosition);
- + bitPosition = 0;
- + arrayEntry++;
- + }
- +}
- +
- +/*
- + * Fix on 2.4 GHz band for orientation sensitivity issue by increasing
- + * rf_pwd_icsyndiv.
- + *
- + * Theoretical Rules:
- + * if 2 GHz band
- + * if forceBiasAuto
- + * if synth_freq < 2412
- + * bias = 0
- + * else if 2412 <= synth_freq <= 2422
- + * bias = 1
- + * else // synth_freq > 2422
- + * bias = 2
- + * else if forceBias > 0
- + * bias = forceBias & 7
- + * else
- + * no change, use value from ini file
- + * else
- + * no change, invalid band
- + *
- + * 1st Mod:
- + * 2422 also uses value of 2
- + * <approved>
- + *
- + * 2nd Mod:
- + * Less than 2412 uses value of 0, 2412 and above uses value of 2
- + */
- +static void ar5008_hw_force_bias(struct ath_hw *ah, u16 synth_freq)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- + u32 tmp_reg;
- + int reg_writes = 0;
- + u32 new_bias = 0;
- +
- + if (!AR_SREV_5416(ah) || synth_freq >= 3000) {
- + return;
- + }
- +
- + BUG_ON(AR_SREV_9280_10_OR_LATER(ah));
- +
- + if (synth_freq < 2412)
- + new_bias = 0;
- + else if (synth_freq < 2422)
- + new_bias = 1;
- + else
- + new_bias = 2;
- +
- + /* pre-reverse this field */
- + tmp_reg = ath9k_hw_reverse_bits(new_bias, 3);
- +
- + ath_print(common, ATH_DBG_CONFIG,
- + "Force rf_pwd_icsyndiv to %1d on %4d\n",
- + new_bias, synth_freq);
- +
- + /* swizzle rf_pwd_icsyndiv */
- + ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data, tmp_reg, 3, 181, 3);
- +
- + /* write Bank 6 with new params */
- + REG_WRITE_RF_ARRAY(&ah->iniBank6, ah->analogBank6Data, reg_writes);
- +}
- +
- +/**
- + * ar5008_hw_set_channel - tune to a channel on the external AR2133/AR5133 radios
- + * @ah: atheros hardware stucture
- + * @chan:
- + *
- + * For the external AR2133/AR5133 radios, takes the MHz channel value and set
- + * the channel value. Assumes writes enabled to analog bus and bank6 register
- + * cache in ah->analogBank6Data.
- + */
- +static int ar5008_hw_set_channel(struct ath_hw *ah, struct ath9k_channel *chan)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- + u32 channelSel = 0;
- + u32 bModeSynth = 0;
- + u32 aModeRefSel = 0;
- + u32 reg32 = 0;
- + u16 freq;
- + struct chan_centers centers;
- +
- + ath9k_hw_get_channel_centers(ah, chan, ¢ers);
- + freq = centers.synth_center;
- +
- + if (freq < 4800) {
- + u32 txctl;
- +
- + if (((freq - 2192) % 5) == 0) {
- + channelSel = ((freq - 672) * 2 - 3040) / 10;
- + bModeSynth = 0;
- + } else if (((freq - 2224) % 5) == 0) {
- + channelSel = ((freq - 704) * 2 - 3040) / 10;
- + bModeSynth = 1;
- + } else {
- + ath_print(common, ATH_DBG_FATAL,
- + "Invalid channel %u MHz\n", freq);
- + return -EINVAL;
- + }
- +
- + channelSel = (channelSel << 2) & 0xff;
- + channelSel = ath9k_hw_reverse_bits(channelSel, 8);
- +
- + txctl = REG_READ(ah, AR_PHY_CCK_TX_CTRL);
- + if (freq == 2484) {
- +
- + REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
- + txctl | AR_PHY_CCK_TX_CTRL_JAPAN);
- + } else {
- + REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
- + txctl & ~AR_PHY_CCK_TX_CTRL_JAPAN);
- + }
- +
- + } else if ((freq % 20) == 0 && freq >= 5120) {
- + channelSel =
- + ath9k_hw_reverse_bits(((freq - 4800) / 20 << 2), 8);
- + aModeRefSel = ath9k_hw_reverse_bits(1, 2);
- + } else if ((freq % 10) == 0) {
- + channelSel =
- + ath9k_hw_reverse_bits(((freq - 4800) / 10 << 1), 8);
- + if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah))
- + aModeRefSel = ath9k_hw_reverse_bits(2, 2);
- + else
- + aModeRefSel = ath9k_hw_reverse_bits(1, 2);
- + } else if ((freq % 5) == 0) {
- + channelSel = ath9k_hw_reverse_bits((freq - 4800) / 5, 8);
- + aModeRefSel = ath9k_hw_reverse_bits(1, 2);
- + } else {
- + ath_print(common, ATH_DBG_FATAL,
- + "Invalid channel %u MHz\n", freq);
- + return -EINVAL;
- + }
- +
- + ar5008_hw_force_bias(ah, freq);
- +
- + reg32 =
- + (channelSel << 8) | (aModeRefSel << 2) | (bModeSynth << 1) |
- + (1 << 5) | 0x1;
- +
- + REG_WRITE(ah, AR_PHY(0x37), reg32);
- +
- + ah->curchan = chan;
- + ah->curchan_rad_index = -1;
- +
- + return 0;
- +}
- +
- +/**
- + * ar5008_hw_spur_mitigate - convert baseband spur frequency for external radios
- + * @ah: atheros hardware structure
- + * @chan:
- + *
- + * For non single-chip solutions. Converts to baseband spur frequency given the
- + * input channel frequency and compute register settings below.
- + */
- +static void ar5008_hw_spur_mitigate(struct ath_hw *ah, struct ath9k_channel *chan)
- +{
- + int bb_spur = AR_NO_SPUR;
- + int bin, cur_bin;
- + int spur_freq_sd;
- + int spur_delta_phase;
- + int denominator;
- + int upper, lower, cur_vit_mask;
- + int tmp, new;
- + int i;
- + int pilot_mask_reg[4] = { AR_PHY_TIMING7, AR_PHY_TIMING8,
- + AR_PHY_PILOT_MASK_01_30, AR_PHY_PILOT_MASK_31_60
- + };
- + int chan_mask_reg[4] = { AR_PHY_TIMING9, AR_PHY_TIMING10,
- + AR_PHY_CHANNEL_MASK_01_30, AR_PHY_CHANNEL_MASK_31_60
- + };
- + int inc[4] = { 0, 100, 0, 0 };
- +
- + int8_t mask_m[123];
- + int8_t mask_p[123];
- + int8_t mask_amt;
- + int tmp_mask;
- + int cur_bb_spur;
- + bool is2GHz = IS_CHAN_2GHZ(chan);
- +
- + memset(&mask_m, 0, sizeof(int8_t) * 123);
- + memset(&mask_p, 0, sizeof(int8_t) * 123);
- +
- + for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
- + cur_bb_spur = ah->eep_ops->get_spur_channel(ah, i, is2GHz);
- + if (AR_NO_SPUR == cur_bb_spur)
- + break;
- + cur_bb_spur = cur_bb_spur - (chan->channel * 10);
- + if ((cur_bb_spur > -95) && (cur_bb_spur < 95)) {
- + bb_spur = cur_bb_spur;
- + break;
- + }
- + }
- +
- + if (AR_NO_SPUR == bb_spur)
- + return;
- +
- + bin = bb_spur * 32;
- +
- + tmp = REG_READ(ah, AR_PHY_TIMING_CTRL4(0));
- + new = tmp | (AR_PHY_TIMING_CTRL4_ENABLE_SPUR_RSSI |
- + AR_PHY_TIMING_CTRL4_ENABLE_SPUR_FILTER |
- + AR_PHY_TIMING_CTRL4_ENABLE_CHAN_MASK |
- + AR_PHY_TIMING_CTRL4_ENABLE_PILOT_MASK);
- +
- + REG_WRITE(ah, AR_PHY_TIMING_CTRL4(0), new);
- +
- + new = (AR_PHY_SPUR_REG_MASK_RATE_CNTL |
- + AR_PHY_SPUR_REG_ENABLE_MASK_PPM |
- + AR_PHY_SPUR_REG_MASK_RATE_SELECT |
- + AR_PHY_SPUR_REG_ENABLE_VIT_SPUR_RSSI |
- + SM(SPUR_RSSI_THRESH, AR_PHY_SPUR_REG_SPUR_RSSI_THRESH));
- + REG_WRITE(ah, AR_PHY_SPUR_REG, new);
- +
- + spur_delta_phase = ((bb_spur * 524288) / 100) &
- + AR_PHY_TIMING11_SPUR_DELTA_PHASE;
- +
- + denominator = IS_CHAN_2GHZ(chan) ? 440 : 400;
- + spur_freq_sd = ((bb_spur * 2048) / denominator) & 0x3ff;
- +
- + new = (AR_PHY_TIMING11_USE_SPUR_IN_AGC |
- + SM(spur_freq_sd, AR_PHY_TIMING11_SPUR_FREQ_SD) |
- + SM(spur_delta_phase, AR_PHY_TIMING11_SPUR_DELTA_PHASE));
- + REG_WRITE(ah, AR_PHY_TIMING11, new);
- +
- + cur_bin = -6000;
- + upper = bin + 100;
- + lower = bin - 100;
- +
- + for (i = 0; i < 4; i++) {
- + int pilot_mask = 0;
- + int chan_mask = 0;
- + int bp = 0;
- + for (bp = 0; bp < 30; bp++) {
- + if ((cur_bin > lower) && (cur_bin < upper)) {
- + pilot_mask = pilot_mask | 0x1 << bp;
- + chan_mask = chan_mask | 0x1 << bp;
- + }
- + cur_bin += 100;
- + }
- + cur_bin += inc[i];
- + REG_WRITE(ah, pilot_mask_reg[i], pilot_mask);
- + REG_WRITE(ah, chan_mask_reg[i], chan_mask);
- + }
- +
- + cur_vit_mask = 6100;
- + upper = bin + 120;
- + lower = bin - 120;
- +
- + for (i = 0; i < 123; i++) {
- + if ((cur_vit_mask > lower) && (cur_vit_mask < upper)) {
- +
- + /* workaround for gcc bug #37014 */
- + volatile int tmp_v = abs(cur_vit_mask - bin);
- +
- + if (tmp_v < 75)
- + mask_amt = 1;
- + else
- + mask_amt = 0;
- + if (cur_vit_mask < 0)
- + mask_m[abs(cur_vit_mask / 100)] = mask_amt;
- + else
- + mask_p[cur_vit_mask / 100] = mask_amt;
- + }
- + cur_vit_mask -= 100;
- + }
- +
- + tmp_mask = (mask_m[46] << 30) | (mask_m[47] << 28)
- + | (mask_m[48] << 26) | (mask_m[49] << 24)
- + | (mask_m[50] << 22) | (mask_m[51] << 20)
- + | (mask_m[52] << 18) | (mask_m[53] << 16)
- + | (mask_m[54] << 14) | (mask_m[55] << 12)
- + | (mask_m[56] << 10) | (mask_m[57] << 8)
- + | (mask_m[58] << 6) | (mask_m[59] << 4)
- + | (mask_m[60] << 2) | (mask_m[61] << 0);
- + REG_WRITE(ah, AR_PHY_BIN_MASK_1, tmp_mask);
- + REG_WRITE(ah, AR_PHY_VIT_MASK2_M_46_61, tmp_mask);
- +
- + tmp_mask = (mask_m[31] << 28)
- + | (mask_m[32] << 26) | (mask_m[33] << 24)
- + | (mask_m[34] << 22) | (mask_m[35] << 20)
- + | (mask_m[36] << 18) | (mask_m[37] << 16)
- + | (mask_m[48] << 14) | (mask_m[39] << 12)
- + | (mask_m[40] << 10) | (mask_m[41] << 8)
- + | (mask_m[42] << 6) | (mask_m[43] << 4)
- + | (mask_m[44] << 2) | (mask_m[45] << 0);
- + REG_WRITE(ah, AR_PHY_BIN_MASK_2, tmp_mask);
- + REG_WRITE(ah, AR_PHY_MASK2_M_31_45, tmp_mask);
- +
- + tmp_mask = (mask_m[16] << 30) | (mask_m[16] << 28)
- + | (mask_m[18] << 26) | (mask_m[18] << 24)
- + | (mask_m[20] << 22) | (mask_m[20] << 20)
- + | (mask_m[22] << 18) | (mask_m[22] << 16)
- + | (mask_m[24] << 14) | (mask_m[24] << 12)
- + | (mask_m[25] << 10) | (mask_m[26] << 8)
- + | (mask_m[27] << 6) | (mask_m[28] << 4)
- + | (mask_m[29] << 2) | (mask_m[30] << 0);
- + REG_WRITE(ah, AR_PHY_BIN_MASK_3, tmp_mask);
- + REG_WRITE(ah, AR_PHY_MASK2_M_16_30, tmp_mask);
- +
- + tmp_mask = (mask_m[0] << 30) | (mask_m[1] << 28)
- + | (mask_m[2] << 26) | (mask_m[3] << 24)
- + | (mask_m[4] << 22) | (mask_m[5] << 20)
- + | (mask_m[6] << 18) | (mask_m[7] << 16)
- + | (mask_m[8] << 14) | (mask_m[9] << 12)
- + | (mask_m[10] << 10) | (mask_m[11] << 8)
- + | (mask_m[12] << 6) | (mask_m[13] << 4)
- + | (mask_m[14] << 2) | (mask_m[15] << 0);
- + REG_WRITE(ah, AR_PHY_MASK_CTL, tmp_mask);
- + REG_WRITE(ah, AR_PHY_MASK2_M_00_15, tmp_mask);
- +
- + tmp_mask = (mask_p[15] << 28)
- + | (mask_p[14] << 26) | (mask_p[13] << 24)
- + | (mask_p[12] << 22) | (mask_p[11] << 20)
- + | (mask_p[10] << 18) | (mask_p[9] << 16)
- + | (mask_p[8] << 14) | (mask_p[7] << 12)
- + | (mask_p[6] << 10) | (mask_p[5] << 8)
- + | (mask_p[4] << 6) | (mask_p[3] << 4)
- + | (mask_p[2] << 2) | (mask_p[1] << 0);
- + REG_WRITE(ah, AR_PHY_BIN_MASK2_1, tmp_mask);
- + REG_WRITE(ah, AR_PHY_MASK2_P_15_01, tmp_mask);
- +
- + tmp_mask = (mask_p[30] << 28)
- + | (mask_p[29] << 26) | (mask_p[28] << 24)
- + | (mask_p[27] << 22) | (mask_p[26] << 20)
- + | (mask_p[25] << 18) | (mask_p[24] << 16)
- + | (mask_p[23] << 14) | (mask_p[22] << 12)
- + | (mask_p[21] << 10) | (mask_p[20] << 8)
- + | (mask_p[19] << 6) | (mask_p[18] << 4)
- + | (mask_p[17] << 2) | (mask_p[16] << 0);
- + REG_WRITE(ah, AR_PHY_BIN_MASK2_2, tmp_mask);
- + REG_WRITE(ah, AR_PHY_MASK2_P_30_16, tmp_mask);
- +
- + tmp_mask = (mask_p[45] << 28)
- + | (mask_p[44] << 26) | (mask_p[43] << 24)
- + | (mask_p[42] << 22) | (mask_p[41] << 20)
- + | (mask_p[40] << 18) | (mask_p[39] << 16)
- + | (mask_p[38] << 14) | (mask_p[37] << 12)
- + | (mask_p[36] << 10) | (mask_p[35] << 8)
- + | (mask_p[34] << 6) | (mask_p[33] << 4)
- + | (mask_p[32] << 2) | (mask_p[31] << 0);
- + REG_WRITE(ah, AR_PHY_BIN_MASK2_3, tmp_mask);
- + REG_WRITE(ah, AR_PHY_MASK2_P_45_31, tmp_mask);
- +
- + tmp_mask = (mask_p[61] << 30) | (mask_p[60] << 28)
- + | (mask_p[59] << 26) | (mask_p[58] << 24)
- + | (mask_p[57] << 22) | (mask_p[56] << 20)
- + | (mask_p[55] << 18) | (mask_p[54] << 16)
- + | (mask_p[53] << 14) | (mask_p[52] << 12)
- + | (mask_p[51] << 10) | (mask_p[50] << 8)
- + | (mask_p[49] << 6) | (mask_p[48] << 4)
- + | (mask_p[47] << 2) | (mask_p[46] << 0);
- + REG_WRITE(ah, AR_PHY_BIN_MASK2_4, tmp_mask);
- + REG_WRITE(ah, AR_PHY_MASK2_P_61_45, tmp_mask);
- +}
- +
- +/**
- + * ar5008_hw_rf_alloc_ext_banks - allocates banks for external radio programming
- + * @ah: atheros hardware structure
- + *
- + * Only required for older devices with external AR2133/AR5133 radios.
- + */
- +static int ar5008_hw_rf_alloc_ext_banks(struct ath_hw *ah)
- +{
- +#define ATH_ALLOC_BANK(bank, size) do { \
- + bank = kzalloc((sizeof(u32) * size), GFP_KERNEL); \
- + if (!bank) { \
- + ath_print(common, ATH_DBG_FATAL, \
- + "Cannot allocate RF banks\n"); \
- + return -ENOMEM; \
- + } \
- + } while (0);
- +
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + BUG_ON(AR_SREV_9280_10_OR_LATER(ah));
- +
- + ATH_ALLOC_BANK(ah->analogBank0Data, ah->iniBank0.ia_rows);
- + ATH_ALLOC_BANK(ah->analogBank1Data, ah->iniBank1.ia_rows);
- + ATH_ALLOC_BANK(ah->analogBank2Data, ah->iniBank2.ia_rows);
- + ATH_ALLOC_BANK(ah->analogBank3Data, ah->iniBank3.ia_rows);
- + ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows);
- + ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows);
- + ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows);
- + ATH_ALLOC_BANK(ah->addac5416_21,
- + ah->iniAddac.ia_rows * ah->iniAddac.ia_columns);
- + ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows);
- +
- + return 0;
- +#undef ATH_ALLOC_BANK
- +}
- +
- +
- +/**
- + * ar5008_hw_rf_free_ext_banks - Free memory for analog bank scratch buffers
- + * @ah: atheros hardware struture
- + * For the external AR2133/AR5133 radios banks.
- + */
- +static void ar5008_hw_rf_free_ext_banks(struct ath_hw *ah)
- +{
- +#define ATH_FREE_BANK(bank) do { \
- + kfree(bank); \
- + bank = NULL; \
- + } while (0);
- +
- + BUG_ON(AR_SREV_9280_10_OR_LATER(ah));
- +
- + ATH_FREE_BANK(ah->analogBank0Data);
- + ATH_FREE_BANK(ah->analogBank1Data);
- + ATH_FREE_BANK(ah->analogBank2Data);
- + ATH_FREE_BANK(ah->analogBank3Data);
- + ATH_FREE_BANK(ah->analogBank6Data);
- + ATH_FREE_BANK(ah->analogBank6TPCData);
- + ATH_FREE_BANK(ah->analogBank7Data);
- + ATH_FREE_BANK(ah->addac5416_21);
- + ATH_FREE_BANK(ah->bank6Temp);
- +
- +#undef ATH_FREE_BANK
- +}
- +
- +/* *
- + * ar5008_hw_set_rf_regs - programs rf registers based on EEPROM
- + * @ah: atheros hardware structure
- + * @chan:
- + * @modesIndex:
- + *
- + * Used for the external AR2133/AR5133 radios.
- + *
- + * Reads the EEPROM header info from the device structure and programs
- + * all rf registers. This routine requires access to the analog
- + * rf device. This is not required for single-chip devices.
- + */
- +static bool ar5008_hw_set_rf_regs(struct ath_hw *ah,
- + struct ath9k_channel *chan,
- + u16 modesIndex)
- +{
- + u32 eepMinorRev;
- + u32 ob5GHz = 0, db5GHz = 0;
- + u32 ob2GHz = 0, db2GHz = 0;
- + int regWrites = 0;
- +
- + /*
- + * Software does not need to program bank data
- + * for single chip devices, that is AR9280 or anything
- + * after that.
- + */
- + if (AR_SREV_9280_10_OR_LATER(ah))
- + return true;
- +
- + /* Setup rf parameters */
- + eepMinorRev = ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV);
- +
- + /* Setup Bank 0 Write */
- + RF_BANK_SETUP(ah->analogBank0Data, &ah->iniBank0, 1);
- +
- + /* Setup Bank 1 Write */
- + RF_BANK_SETUP(ah->analogBank1Data, &ah->iniBank1, 1);
- +
- + /* Setup Bank 2 Write */
- + RF_BANK_SETUP(ah->analogBank2Data, &ah->iniBank2, 1);
- +
- + /* Setup Bank 6 Write */
- + RF_BANK_SETUP(ah->analogBank3Data, &ah->iniBank3,
- + modesIndex);
- + {
- + int i;
- + for (i = 0; i < ah->iniBank6TPC.ia_rows; i++) {
- + ah->analogBank6Data[i] =
- + INI_RA(&ah->iniBank6TPC, i, modesIndex);
- + }
- + }
- +
- + /* Only the 5 or 2 GHz OB/DB need to be set for a mode */
- + if (eepMinorRev >= 2) {
- + if (IS_CHAN_2GHZ(chan)) {
- + ob2GHz = ah->eep_ops->get_eeprom(ah, EEP_OB_2);
- + db2GHz = ah->eep_ops->get_eeprom(ah, EEP_DB_2);
- + ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data,
- + ob2GHz, 3, 197, 0);
- + ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data,
- + db2GHz, 3, 194, 0);
- + } else {
- + ob5GHz = ah->eep_ops->get_eeprom(ah, EEP_OB_5);
- + db5GHz = ah->eep_ops->get_eeprom(ah, EEP_DB_5);
- + ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data,
- + ob5GHz, 3, 203, 0);
- + ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data,
- + db5GHz, 3, 200, 0);
- + }
- + }
- +
- + /* Setup Bank 7 Setup */
- + RF_BANK_SETUP(ah->analogBank7Data, &ah->iniBank7, 1);
- +
- + /* Write Analog registers */
- + REG_WRITE_RF_ARRAY(&ah->iniBank0, ah->analogBank0Data,
- + regWrites);
- + REG_WRITE_RF_ARRAY(&ah->iniBank1, ah->analogBank1Data,
- + regWrites);
- + REG_WRITE_RF_ARRAY(&ah->iniBank2, ah->analogBank2Data,
- + regWrites);
- + REG_WRITE_RF_ARRAY(&ah->iniBank3, ah->analogBank3Data,
- + regWrites);
- + REG_WRITE_RF_ARRAY(&ah->iniBank6TPC, ah->analogBank6Data,
- + regWrites);
- + REG_WRITE_RF_ARRAY(&ah->iniBank7, ah->analogBank7Data,
- + regWrites);
- +
- + return true;
- +}
- +
- +static void ar5008_hw_init_bb(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + u32 synthDelay;
- +
- + synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY;
- + if (IS_CHAN_B(chan))
- + synthDelay = (4 * synthDelay) / 22;
- + else
- + synthDelay /= 10;
- +
- + REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN);
- +
- + udelay(synthDelay + BASE_ACTIVATE_DELAY);
- +}
- +
- +static void ar5008_hw_init_chain_masks(struct ath_hw *ah)
- +{
- + int rx_chainmask, tx_chainmask;
- +
- + rx_chainmask = ah->rxchainmask;
- + tx_chainmask = ah->txchainmask;
- +
- + switch (rx_chainmask) {
- + case 0x5:
- + REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
- + AR_PHY_SWAP_ALT_CHAIN);
- + case 0x3:
- + if (ah->hw_version.macVersion == AR_SREV_REVISION_5416_10) {
- + REG_WRITE(ah, AR_PHY_RX_CHAINMASK, 0x7);
- + REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, 0x7);
- + break;
- + }
- + case 0x1:
- + case 0x2:
- + case 0x7:
- + REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx_chainmask);
- + REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx_chainmask);
- + break;
- + default:
- + break;
- + }
- +
- + REG_WRITE(ah, AR_SELFGEN_MASK, tx_chainmask);
- + if (tx_chainmask == 0x5) {
- + REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
- + AR_PHY_SWAP_ALT_CHAIN);
- + }
- + if (AR_SREV_9100(ah))
- + REG_WRITE(ah, AR_PHY_ANALOG_SWAP,
- + REG_READ(ah, AR_PHY_ANALOG_SWAP) | 0x00000001);
- +}
- +
- +static void ar5008_hw_override_ini(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + u32 val;
- +
- + /*
- + * Set the RX_ABORT and RX_DIS and clear if off only after
- + * RXE is set for MAC. This prevents frames with corrupted
- + * descriptor status.
- + */
- + REG_SET_BIT(ah, AR_DIAG_SW, (AR_DIAG_RX_DIS | AR_DIAG_RX_ABORT));
- +
- + if (AR_SREV_9280_10_OR_LATER(ah)) {
- + val = REG_READ(ah, AR_PCU_MISC_MODE2);
- +
- + if (!AR_SREV_9271(ah))
- + val &= ~AR_PCU_MISC_MODE2_HWWAR1;
- +
- + if (AR_SREV_9287_10_OR_LATER(ah))
- + val = val & (~AR_PCU_MISC_MODE2_HWWAR2);
- +
- + REG_WRITE(ah, AR_PCU_MISC_MODE2, val);
- + }
- +
- + if (!AR_SREV_5416_20_OR_LATER(ah) ||
- + AR_SREV_9280_10_OR_LATER(ah))
- + return;
- + /*
- + * Disable BB clock gating
- + * Necessary to avoid issues on AR5416 2.0
- + */
- + REG_WRITE(ah, 0x9800 + (651 << 2), 0x11);
- +
- + /*
- + * Disable RIFS search on some chips to avoid baseband
- + * hang issues.
- + */
- + if (AR_SREV_9100(ah) || AR_SREV_9160(ah)) {
- + val = REG_READ(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS);
- + val &= ~AR_PHY_RIFS_INIT_DELAY;
- + REG_WRITE(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS, val);
- + }
- +}
- +
- +static void ar5008_hw_set_channel_regs(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + u32 phymode;
- + u32 enableDacFifo = 0;
- +
- + if (AR_SREV_9285_10_OR_LATER(ah))
- + enableDacFifo = (REG_READ(ah, AR_PHY_TURBO) &
- + AR_PHY_FC_ENABLE_DAC_FIFO);
- +
- + phymode = AR_PHY_FC_HT_EN | AR_PHY_FC_SHORT_GI_40
- + | AR_PHY_FC_SINGLE_HT_LTF1 | AR_PHY_FC_WALSH | enableDacFifo;
- +
- + if (IS_CHAN_HT40(chan)) {
- + phymode |= AR_PHY_FC_DYN2040_EN;
- +
- + if ((chan->chanmode == CHANNEL_A_HT40PLUS) ||
- + (chan->chanmode == CHANNEL_G_HT40PLUS))
- + phymode |= AR_PHY_FC_DYN2040_PRI_CH;
- +
- + }
- + REG_WRITE(ah, AR_PHY_TURBO, phymode);
- +
- + ath9k_hw_set11nmac2040(ah);
- +
- + REG_WRITE(ah, AR_GTXTO, 25 << AR_GTXTO_TIMEOUT_LIMIT_S);
- + REG_WRITE(ah, AR_CST, 0xF << AR_CST_TIMEOUT_LIMIT_S);
- +}
- +
- +
- +static int ar5008_hw_process_ini(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
- + int i, regWrites = 0;
- + struct ieee80211_channel *channel = chan->chan;
- + u32 modesIndex, freqIndex;
- +
- + switch (chan->chanmode) {
- + case CHANNEL_A:
- + case CHANNEL_A_HT20:
- + modesIndex = 1;
- + freqIndex = 1;
- + break;
- + case CHANNEL_A_HT40PLUS:
- + case CHANNEL_A_HT40MINUS:
- + modesIndex = 2;
- + freqIndex = 1;
- + break;
- + case CHANNEL_G:
- + case CHANNEL_G_HT20:
- + case CHANNEL_B:
- + modesIndex = 4;
- + freqIndex = 2;
- + break;
- + case CHANNEL_G_HT40PLUS:
- + case CHANNEL_G_HT40MINUS:
- + modesIndex = 3;
- + freqIndex = 2;
- + break;
- +
- + default:
- + return -EINVAL;
- + }
- +
- + if (AR_SREV_9287_12_OR_LATER(ah)) {
- + /* Enable ASYNC FIFO */
- + REG_SET_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
- + AR_MAC_PCU_ASYNC_FIFO_REG3_DATAPATH_SEL);
- + REG_SET_BIT(ah, AR_PHY_MODE, AR_PHY_MODE_ASYNCFIFO);
- + REG_CLR_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
- + AR_MAC_PCU_ASYNC_FIFO_REG3_SOFT_RESET);
- + REG_SET_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
- + AR_MAC_PCU_ASYNC_FIFO_REG3_SOFT_RESET);
- + }
- +
- + /* Set correct baseband to analog shift setting to access analog chips */
- + REG_WRITE(ah, AR_PHY(0), 0x00000007);
- +
- + /* Write ADDAC shifts */
- + REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_EXTERNAL_RADIO);
- + ah->eep_ops->set_addac(ah, chan);
- +
- + if (AR_SREV_5416_22_OR_LATER(ah)) {
- + REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites);
- + } else {
- + struct ar5416IniArray temp;
- + u32 addacSize =
- + sizeof(u32) * ah->iniAddac.ia_rows *
- + ah->iniAddac.ia_columns;
- +
- + /* For AR5416 2.0/2.1 */
- + memcpy(ah->addac5416_21,
- + ah->iniAddac.ia_array, addacSize);
- +
- + /* override CLKDRV value at [row, column] = [31, 1] */
- + (ah->addac5416_21)[31 * ah->iniAddac.ia_columns + 1] = 0;
- +
- + temp.ia_array = ah->addac5416_21;
- + temp.ia_columns = ah->iniAddac.ia_columns;
- + temp.ia_rows = ah->iniAddac.ia_rows;
- + REG_WRITE_ARRAY(&temp, 1, regWrites);
- + }
- +
- + REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC);
- +
- + for (i = 0; i < ah->iniModes.ia_rows; i++) {
- + u32 reg = INI_RA(&ah->iniModes, i, 0);
- + u32 val = INI_RA(&ah->iniModes, i, modesIndex);
- +
- + if (reg == AR_AN_TOP2 && ah->need_an_top2_fixup)
- + val &= ~AR_AN_TOP2_PWDCLKIND;
- +
- + REG_WRITE(ah, reg, val);
- +
- + if (reg >= 0x7800 && reg < 0x78a0
- + && ah->config.analog_shiftreg) {
- + udelay(100);
- + }
- +
- + DO_DELAY(regWrites);
- + }
- +
- + if (AR_SREV_9280(ah) || AR_SREV_9287_10_OR_LATER(ah))
- + REG_WRITE_ARRAY(&ah->iniModesRxGain, modesIndex, regWrites);
- +
- + if (AR_SREV_9280(ah) || AR_SREV_9285_12_OR_LATER(ah) ||
- + AR_SREV_9287_10_OR_LATER(ah))
- + REG_WRITE_ARRAY(&ah->iniModesTxGain, modesIndex, regWrites);
- +
- + if (AR_SREV_9271_10(ah))
- + REG_WRITE_ARRAY(&ah->iniModes_9271_1_0_only,
- + modesIndex, regWrites);
- +
- + /* Write common array parameters */
- + for (i = 0; i < ah->iniCommon.ia_rows; i++) {
- + u32 reg = INI_RA(&ah->iniCommon, i, 0);
- + u32 val = INI_RA(&ah->iniCommon, i, 1);
- +
- + REG_WRITE(ah, reg, val);
- +
- + if (reg >= 0x7800 && reg < 0x78a0
- + && ah->config.analog_shiftreg) {
- + udelay(100);
- + }
- +
- + DO_DELAY(regWrites);
- + }
- +
- + if (AR_SREV_9271(ah)) {
- + if (ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE) == 1)
- + REG_WRITE_ARRAY(&ah->iniModes_high_power_tx_gain_9271,
- + modesIndex, regWrites);
- + else
- + REG_WRITE_ARRAY(&ah->iniModes_normal_power_tx_gain_9271,
- + modesIndex, regWrites);
- + }
- +
- + REG_WRITE_ARRAY(&ah->iniBB_RfGain, freqIndex, regWrites);
- +
- + if (AR_SREV_9280_20(ah) && IS_CHAN_A_5MHZ_SPACED(chan)) {
- + REG_WRITE_ARRAY(&ah->iniModesAdditional, modesIndex,
- + regWrites);
- + }
- +
- + ar5008_hw_override_ini(ah, chan);
- + ar5008_hw_set_channel_regs(ah, chan);
- + ar5008_hw_init_chain_masks(ah);
- + ath9k_olc_init(ah);
- +
- + /* Set TX power */
- + ah->eep_ops->set_txpower(ah, chan,
- + ath9k_regd_get_ctl(regulatory, chan),
- + channel->max_antenna_gain * 2,
- + channel->max_power * 2,
- + min((u32) MAX_RATE_POWER,
- + (u32) regulatory->power_limit));
- +
- + /* Write analog registers */
- + if (!ath9k_hw_set_rf_regs(ah, chan, freqIndex)) {
- + ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
- + "ar5416SetRfRegs failed\n");
- + return -EIO;
- + }
- +
- + return 0;
- +}
- +
- +static void ar5008_hw_set_rfmode(struct ath_hw *ah, struct ath9k_channel *chan)
- +{
- + u32 rfMode = 0;
- +
- + if (chan == NULL)
- + return;
- +
- + rfMode |= (IS_CHAN_B(chan) || IS_CHAN_G(chan))
- + ? AR_PHY_MODE_DYNAMIC : AR_PHY_MODE_OFDM;
- +
- + if (!AR_SREV_9280_10_OR_LATER(ah))
- + rfMode |= (IS_CHAN_5GHZ(chan)) ?
- + AR_PHY_MODE_RF5GHZ : AR_PHY_MODE_RF2GHZ;
- +
- + if ((AR_SREV_9280_20(ah) || AR_SREV_9300_20_OR_LATER(ah))
- + && IS_CHAN_A_5MHZ_SPACED(chan))
- + rfMode |= (AR_PHY_MODE_DYNAMIC | AR_PHY_MODE_DYN_CCK_DISABLE);
- +
- + REG_WRITE(ah, AR_PHY_MODE, rfMode);
- +}
- +
- +static void ar5008_hw_mark_phy_inactive(struct ath_hw *ah)
- +{
- + REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_DIS);
- +}
- +
- +static void ar5008_hw_set_delta_slope(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + u32 coef_scaled, ds_coef_exp, ds_coef_man;
- + u32 clockMhzScaled = 0x64000000;
- + struct chan_centers centers;
- +
- + if (IS_CHAN_HALF_RATE(chan))
- + clockMhzScaled = clockMhzScaled >> 1;
- + else if (IS_CHAN_QUARTER_RATE(chan))
- + clockMhzScaled = clockMhzScaled >> 2;
- +
- + ath9k_hw_get_channel_centers(ah, chan, ¢ers);
- + coef_scaled = clockMhzScaled / centers.synth_center;
- +
- + ath9k_hw_get_delta_slope_vals(ah, coef_scaled, &ds_coef_man,
- + &ds_coef_exp);
- +
- + REG_RMW_FIELD(ah, AR_PHY_TIMING3,
- + AR_PHY_TIMING3_DSC_MAN, ds_coef_man);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING3,
- + AR_PHY_TIMING3_DSC_EXP, ds_coef_exp);
- +
- + coef_scaled = (9 * coef_scaled) / 10;
- +
- + ath9k_hw_get_delta_slope_vals(ah, coef_scaled, &ds_coef_man,
- + &ds_coef_exp);
- +
- + REG_RMW_FIELD(ah, AR_PHY_HALFGI,
- + AR_PHY_HALFGI_DSC_MAN, ds_coef_man);
- + REG_RMW_FIELD(ah, AR_PHY_HALFGI,
- + AR_PHY_HALFGI_DSC_EXP, ds_coef_exp);
- +}
- +
- +static bool ar5008_hw_rfbus_req(struct ath_hw *ah)
- +{
- + REG_WRITE(ah, AR_PHY_RFBUS_REQ, AR_PHY_RFBUS_REQ_EN);
- + return ath9k_hw_wait(ah, AR_PHY_RFBUS_GRANT, AR_PHY_RFBUS_GRANT_EN,
- + AR_PHY_RFBUS_GRANT_EN, AH_WAIT_TIMEOUT);
- +}
- +
- +static void ar5008_hw_rfbus_done(struct ath_hw *ah)
- +{
- + u32 synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY;
- + if (IS_CHAN_B(ah->curchan))
- + synthDelay = (4 * synthDelay) / 22;
- + else
- + synthDelay /= 10;
- +
- + udelay(synthDelay + BASE_ACTIVATE_DELAY);
- +
- + REG_WRITE(ah, AR_PHY_RFBUS_REQ, 0);
- +}
- +
- +static void ar5008_hw_enable_rfkill(struct ath_hw *ah)
- +{
- + REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL,
- + AR_GPIO_INPUT_EN_VAL_RFSILENT_BB);
- +
- + REG_CLR_BIT(ah, AR_GPIO_INPUT_MUX2,
- + AR_GPIO_INPUT_MUX2_RFSILENT);
- +
- + ath9k_hw_cfg_gpio_input(ah, ah->rfkill_gpio);
- + REG_SET_BIT(ah, AR_PHY_TEST, RFSILENT_BB);
- +}
- +
- +static void ar5008_restore_chainmask(struct ath_hw *ah)
- +{
- + int rx_chainmask = ah->rxchainmask;
- +
- + if ((rx_chainmask == 0x5) || (rx_chainmask == 0x3)) {
- + REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx_chainmask);
- + REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx_chainmask);
- + }
- +}
- +
- +static void ar5008_set_diversity(struct ath_hw *ah, bool value)
- +{
- + u32 v = REG_READ(ah, AR_PHY_CCK_DETECT);
- + if (value)
- + v |= AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV;
- + else
- + v &= ~AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV;
- + REG_WRITE(ah, AR_PHY_CCK_DETECT, v);
- +}
- +
- +static u32 ar9100_hw_compute_pll_control(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + if (chan && IS_CHAN_5GHZ(chan))
- + return 0x1450;
- + return 0x1458;
- +}
- +
- +static u32 ar9160_hw_compute_pll_control(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + u32 pll;
- +
- + pll = SM(0x5, AR_RTC_9160_PLL_REFDIV);
- +
- + if (chan && IS_CHAN_HALF_RATE(chan))
- + pll |= SM(0x1, AR_RTC_9160_PLL_CLKSEL);
- + else if (chan && IS_CHAN_QUARTER_RATE(chan))
- + pll |= SM(0x2, AR_RTC_9160_PLL_CLKSEL);
- +
- + if (chan && IS_CHAN_5GHZ(chan))
- + pll |= SM(0x50, AR_RTC_9160_PLL_DIV);
- + else
- + pll |= SM(0x58, AR_RTC_9160_PLL_DIV);
- +
- + return pll;
- +}
- +
- +static u32 ar5008_hw_compute_pll_control(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + u32 pll;
- +
- + pll = AR_RTC_PLL_REFDIV_5 | AR_RTC_PLL_DIV2;
- +
- + if (chan && IS_CHAN_HALF_RATE(chan))
- + pll |= SM(0x1, AR_RTC_PLL_CLKSEL);
- + else if (chan && IS_CHAN_QUARTER_RATE(chan))
- + pll |= SM(0x2, AR_RTC_PLL_CLKSEL);
- +
- + if (chan && IS_CHAN_5GHZ(chan))
- + pll |= SM(0xa, AR_RTC_PLL_DIV);
- + else
- + pll |= SM(0xb, AR_RTC_PLL_DIV);
- +
- + return pll;
- +}
- +
- +static bool ar5008_hw_ani_control(struct ath_hw *ah,
- + enum ath9k_ani_cmd cmd, int param)
- +{
- + struct ar5416AniState *aniState = ah->curani;
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + switch (cmd & ah->ani_function) {
- + case ATH9K_ANI_NOISE_IMMUNITY_LEVEL:{
- + u32 level = param;
- +
- + if (level >= ARRAY_SIZE(ah->totalSizeDesired)) {
- + ath_print(common, ATH_DBG_ANI,
- + "level out of range (%u > %u)\n",
- + level,
- + (unsigned)ARRAY_SIZE(ah->totalSizeDesired));
- + return false;
- + }
- +
- + REG_RMW_FIELD(ah, AR_PHY_DESIRED_SZ,
- + AR_PHY_DESIRED_SZ_TOT_DES,
- + ah->totalSizeDesired[level]);
- + REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1,
- + AR_PHY_AGC_CTL1_COARSE_LOW,
- + ah->coarse_low[level]);
- + REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1,
- + AR_PHY_AGC_CTL1_COARSE_HIGH,
- + ah->coarse_high[level]);
- + REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
- + AR_PHY_FIND_SIG_FIRPWR,
- + ah->firpwr[level]);
- +
- + if (level > aniState->noiseImmunityLevel)
- + ah->stats.ast_ani_niup++;
- + else if (level < aniState->noiseImmunityLevel)
- + ah->stats.ast_ani_nidown++;
- + aniState->noiseImmunityLevel = level;
- + break;
- + }
- + case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{
- + const int m1ThreshLow[] = { 127, 50 };
- + const int m2ThreshLow[] = { 127, 40 };
- + const int m1Thresh[] = { 127, 0x4d };
- + const int m2Thresh[] = { 127, 0x40 };
- + const int m2CountThr[] = { 31, 16 };
- + const int m2CountThrLow[] = { 63, 48 };
- + u32 on = param ? 1 : 0;
- +
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
- + AR_PHY_SFCORR_LOW_M1_THRESH_LOW,
- + m1ThreshLow[on]);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
- + AR_PHY_SFCORR_LOW_M2_THRESH_LOW,
- + m2ThreshLow[on]);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR,
- + AR_PHY_SFCORR_M1_THRESH,
- + m1Thresh[on]);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR,
- + AR_PHY_SFCORR_M2_THRESH,
- + m2Thresh[on]);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR,
- + AR_PHY_SFCORR_M2COUNT_THR,
- + m2CountThr[on]);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
- + AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW,
- + m2CountThrLow[on]);
- +
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
- + AR_PHY_SFCORR_EXT_M1_THRESH_LOW,
- + m1ThreshLow[on]);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
- + AR_PHY_SFCORR_EXT_M2_THRESH_LOW,
- + m2ThreshLow[on]);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
- + AR_PHY_SFCORR_EXT_M1_THRESH,
- + m1Thresh[on]);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
- + AR_PHY_SFCORR_EXT_M2_THRESH,
- + m2Thresh[on]);
- +
- + if (on)
- + REG_SET_BIT(ah, AR_PHY_SFCORR_LOW,
- + AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
- + else
- + REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
- + AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
- +
- + if (!on != aniState->ofdmWeakSigDetectOff) {
- + if (on)
- + ah->stats.ast_ani_ofdmon++;
- + else
- + ah->stats.ast_ani_ofdmoff++;
- + aniState->ofdmWeakSigDetectOff = !on;
- + }
- + break;
- + }
- + case ATH9K_ANI_CCK_WEAK_SIGNAL_THR:{
- + const int weakSigThrCck[] = { 8, 6 };
- + u32 high = param ? 1 : 0;
- +
- + REG_RMW_FIELD(ah, AR_PHY_CCK_DETECT,
- + AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK,
- + weakSigThrCck[high]);
- + if (high != aniState->cckWeakSigThreshold) {
- + if (high)
- + ah->stats.ast_ani_cckhigh++;
- + else
- + ah->stats.ast_ani_ccklow++;
- + aniState->cckWeakSigThreshold = high;
- + }
- + break;
- + }
- + case ATH9K_ANI_FIRSTEP_LEVEL:{
- + const int firstep[] = { 0, 4, 8 };
- + u32 level = param;
- +
- + if (level >= ARRAY_SIZE(firstep)) {
- + ath_print(common, ATH_DBG_ANI,
- + "level out of range (%u > %u)\n",
- + level,
- + (unsigned) ARRAY_SIZE(firstep));
- + return false;
- + }
- + REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
- + AR_PHY_FIND_SIG_FIRSTEP,
- + firstep[level]);
- + if (level > aniState->firstepLevel)
- + ah->stats.ast_ani_stepup++;
- + else if (level < aniState->firstepLevel)
- + ah->stats.ast_ani_stepdown++;
- + aniState->firstepLevel = level;
- + break;
- + }
- + case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{
- + const int cycpwrThr1[] =
- + { 2, 4, 6, 8, 10, 12, 14, 16 };
- + u32 level = param;
- +
- + if (level >= ARRAY_SIZE(cycpwrThr1)) {
- + ath_print(common, ATH_DBG_ANI,
- + "level out of range (%u > %u)\n",
- + level,
- + (unsigned) ARRAY_SIZE(cycpwrThr1));
- + return false;
- + }
- + REG_RMW_FIELD(ah, AR_PHY_TIMING5,
- + AR_PHY_TIMING5_CYCPWR_THR1,
- + cycpwrThr1[level]);
- + if (level > aniState->spurImmunityLevel)
- + ah->stats.ast_ani_spurup++;
- + else if (level < aniState->spurImmunityLevel)
- + ah->stats.ast_ani_spurdown++;
- + aniState->spurImmunityLevel = level;
- + break;
- + }
- + case ATH9K_ANI_PRESENT:
- + break;
- + default:
- + ath_print(common, ATH_DBG_ANI,
- + "invalid cmd %u\n", cmd);
- + return false;
- + }
- +
- + ath_print(common, ATH_DBG_ANI, "ANI parameters:\n");
- + ath_print(common, ATH_DBG_ANI,
- + "noiseImmunityLevel=%d, spurImmunityLevel=%d, "
- + "ofdmWeakSigDetectOff=%d\n",
- + aniState->noiseImmunityLevel,
- + aniState->spurImmunityLevel,
- + !aniState->ofdmWeakSigDetectOff);
- + ath_print(common, ATH_DBG_ANI,
- + "cckWeakSigThreshold=%d, "
- + "firstepLevel=%d, listenTime=%d\n",
- + aniState->cckWeakSigThreshold,
- + aniState->firstepLevel,
- + aniState->listenTime);
- + ath_print(common, ATH_DBG_ANI,
- + "cycleCount=%d, ofdmPhyErrCount=%d, cckPhyErrCount=%d\n\n",
- + aniState->cycleCount,
- + aniState->ofdmPhyErrCount,
- + aniState->cckPhyErrCount);
- +
- + return true;
- +}
- +
- +static void ar5008_hw_do_getnf(struct ath_hw *ah,
- + int16_t nfarray[NUM_NF_READINGS])
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- + int16_t nf;
- +
- + nf = MS(REG_READ(ah, AR_PHY_CCA), AR_PHY_MINCCA_PWR);
- + if (nf & 0x100)
- + nf = 0 - ((nf ^ 0x1ff) + 1);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "NF calibrated [ctl] [chain 0] is %d\n", nf);
- + nfarray[0] = nf;
- +
- + nf = MS(REG_READ(ah, AR_PHY_CH1_CCA), AR_PHY_CH1_MINCCA_PWR);
- + if (nf & 0x100)
- + nf = 0 - ((nf ^ 0x1ff) + 1);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "NF calibrated [ctl] [chain 1] is %d\n", nf);
- + nfarray[1] = nf;
- +
- + nf = MS(REG_READ(ah, AR_PHY_CH2_CCA), AR_PHY_CH2_MINCCA_PWR);
- + if (nf & 0x100)
- + nf = 0 - ((nf ^ 0x1ff) + 1);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "NF calibrated [ctl] [chain 2] is %d\n", nf);
- + nfarray[2] = nf;
- +
- + nf = MS(REG_READ(ah, AR_PHY_EXT_CCA), AR_PHY_EXT_MINCCA_PWR);
- + if (nf & 0x100)
- + nf = 0 - ((nf ^ 0x1ff) + 1);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "NF calibrated [ext] [chain 0] is %d\n", nf);
- + nfarray[3] = nf;
- +
- + nf = MS(REG_READ(ah, AR_PHY_CH1_EXT_CCA), AR_PHY_CH1_EXT_MINCCA_PWR);
- + if (nf & 0x100)
- + nf = 0 - ((nf ^ 0x1ff) + 1);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "NF calibrated [ext] [chain 1] is %d\n", nf);
- + nfarray[4] = nf;
- +
- + nf = MS(REG_READ(ah, AR_PHY_CH2_EXT_CCA), AR_PHY_CH2_EXT_MINCCA_PWR);
- + if (nf & 0x100)
- + nf = 0 - ((nf ^ 0x1ff) + 1);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "NF calibrated [ext] [chain 2] is %d\n", nf);
- + nfarray[5] = nf;
- +}
- +
- +static void ar5008_hw_loadnf(struct ath_hw *ah, struct ath9k_channel *chan)
- +{
- + struct ath9k_nfcal_hist *h;
- + int i, j;
- + int32_t val;
- + const u32 ar5416_cca_regs[6] = {
- + AR_PHY_CCA,
- + AR_PHY_CH1_CCA,
- + AR_PHY_CH2_CCA,
- + AR_PHY_EXT_CCA,
- + AR_PHY_CH1_EXT_CCA,
- + AR_PHY_CH2_EXT_CCA
- + };
- + u8 chainmask, rx_chain_status;
- +
- + rx_chain_status = REG_READ(ah, AR_PHY_RX_CHAINMASK);
- + if (AR_SREV_9285(ah) || AR_SREV_9271(ah))
- + chainmask = 0x9;
- + else if (AR_SREV_9280(ah) || AR_SREV_9287(ah)) {
- + if ((rx_chain_status & 0x2) || (rx_chain_status & 0x4))
- + chainmask = 0x1B;
- + else
- + chainmask = 0x09;
- + } else {
- + if (rx_chain_status & 0x4)
- + chainmask = 0x3F;
- + else if (rx_chain_status & 0x2)
- + chainmask = 0x1B;
- + else
- + chainmask = 0x09;
- + }
- +
- + h = ah->nfCalHist;
- +
- + for (i = 0; i < NUM_NF_READINGS; i++) {
- + if (chainmask & (1 << i)) {
- + val = REG_READ(ah, ar5416_cca_regs[i]);
- + val &= 0xFFFFFE00;
- + val |= (((u32) (h[i].privNF) << 1) & 0x1ff);
- + REG_WRITE(ah, ar5416_cca_regs[i], val);
- + }
- + }
- +
- + REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
- + AR_PHY_AGC_CONTROL_ENABLE_NF);
- + REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
- + AR_PHY_AGC_CONTROL_NO_UPDATE_NF);
- + REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_NF);
- +
- + for (j = 0; j < 5; j++) {
- + if ((REG_READ(ah, AR_PHY_AGC_CONTROL) &
- + AR_PHY_AGC_CONTROL_NF) == 0)
- + break;
- + udelay(50);
- + }
- +
- + for (i = 0; i < NUM_NF_READINGS; i++) {
- + if (chainmask & (1 << i)) {
- + val = REG_READ(ah, ar5416_cca_regs[i]);
- + val &= 0xFFFFFE00;
- + val |= (((u32) (-50) << 1) & 0x1ff);
- + REG_WRITE(ah, ar5416_cca_regs[i], val);
- + }
- + }
- +}
- +
- +void ar5008_hw_attach_phy_ops(struct ath_hw *ah)
- +{
- + struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
- +
- + priv_ops->rf_set_freq = ar5008_hw_set_channel;
- + priv_ops->spur_mitigate_freq = ar5008_hw_spur_mitigate;
- +
- + priv_ops->rf_alloc_ext_banks = ar5008_hw_rf_alloc_ext_banks;
- + priv_ops->rf_free_ext_banks = ar5008_hw_rf_free_ext_banks;
- + priv_ops->set_rf_regs = ar5008_hw_set_rf_regs;
- + priv_ops->set_channel_regs = ar5008_hw_set_channel_regs;
- + priv_ops->init_bb = ar5008_hw_init_bb;
- + priv_ops->process_ini = ar5008_hw_process_ini;
- + priv_ops->set_rfmode = ar5008_hw_set_rfmode;
- + priv_ops->mark_phy_inactive = ar5008_hw_mark_phy_inactive;
- + priv_ops->set_delta_slope = ar5008_hw_set_delta_slope;
- + priv_ops->rfbus_req = ar5008_hw_rfbus_req;
- + priv_ops->rfbus_done = ar5008_hw_rfbus_done;
- + priv_ops->enable_rfkill = ar5008_hw_enable_rfkill;
- + priv_ops->restore_chainmask = ar5008_restore_chainmask;
- + priv_ops->set_diversity = ar5008_set_diversity;
- + priv_ops->ani_control = ar5008_hw_ani_control;
- + priv_ops->do_getnf = ar5008_hw_do_getnf;
- + priv_ops->loadnf = ar5008_hw_loadnf;
- +
- + if (AR_SREV_9100(ah))
- + priv_ops->compute_pll_control = ar9100_hw_compute_pll_control;
- + else if (AR_SREV_9160_10_OR_LATER(ah))
- + priv_ops->compute_pll_control = ar9160_hw_compute_pll_control;
- + else
- + priv_ops->compute_pll_control = ar5008_hw_compute_pll_control;
- +}
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar9001_initvals.h
- @@ -0,0 +1,1254 @@
- +
- +static const u32 ar5416Common_9100[][2] = {
- + { 0x0000000c, 0x00000000 },
- + { 0x00000030, 0x00020015 },
- + { 0x00000034, 0x00000005 },
- + { 0x00000040, 0x00000000 },
- + { 0x00000044, 0x00000008 },
- + { 0x00000048, 0x00000008 },
- + { 0x0000004c, 0x00000010 },
- + { 0x00000050, 0x00000000 },
- + { 0x00000054, 0x0000001f },
- + { 0x00000800, 0x00000000 },
- + { 0x00000804, 0x00000000 },
- + { 0x00000808, 0x00000000 },
- + { 0x0000080c, 0x00000000 },
- + { 0x00000810, 0x00000000 },
- + { 0x00000814, 0x00000000 },
- + { 0x00000818, 0x00000000 },
- + { 0x0000081c, 0x00000000 },
- + { 0x00000820, 0x00000000 },
- + { 0x00000824, 0x00000000 },
- + { 0x00001040, 0x002ffc0f },
- + { 0x00001044, 0x002ffc0f },
- + { 0x00001048, 0x002ffc0f },
- + { 0x0000104c, 0x002ffc0f },
- + { 0x00001050, 0x002ffc0f },
- + { 0x00001054, 0x002ffc0f },
- + { 0x00001058, 0x002ffc0f },
- + { 0x0000105c, 0x002ffc0f },
- + { 0x00001060, 0x002ffc0f },
- + { 0x00001064, 0x002ffc0f },
- + { 0x00001230, 0x00000000 },
- + { 0x00001270, 0x00000000 },
- + { 0x00001038, 0x00000000 },
- + { 0x00001078, 0x00000000 },
- + { 0x000010b8, 0x00000000 },
- + { 0x000010f8, 0x00000000 },
- + { 0x00001138, 0x00000000 },
- + { 0x00001178, 0x00000000 },
- + { 0x000011b8, 0x00000000 },
- + { 0x000011f8, 0x00000000 },
- + { 0x00001238, 0x00000000 },
- + { 0x00001278, 0x00000000 },
- + { 0x000012b8, 0x00000000 },
- + { 0x000012f8, 0x00000000 },
- + { 0x00001338, 0x00000000 },
- + { 0x00001378, 0x00000000 },
- + { 0x000013b8, 0x00000000 },
- + { 0x000013f8, 0x00000000 },
- + { 0x00001438, 0x00000000 },
- + { 0x00001478, 0x00000000 },
- + { 0x000014b8, 0x00000000 },
- + { 0x000014f8, 0x00000000 },
- + { 0x00001538, 0x00000000 },
- + { 0x00001578, 0x00000000 },
- + { 0x000015b8, 0x00000000 },
- + { 0x000015f8, 0x00000000 },
- + { 0x00001638, 0x00000000 },
- + { 0x00001678, 0x00000000 },
- + { 0x000016b8, 0x00000000 },
- + { 0x000016f8, 0x00000000 },
- + { 0x00001738, 0x00000000 },
- + { 0x00001778, 0x00000000 },
- + { 0x000017b8, 0x00000000 },
- + { 0x000017f8, 0x00000000 },
- + { 0x0000103c, 0x00000000 },
- + { 0x0000107c, 0x00000000 },
- + { 0x000010bc, 0x00000000 },
- + { 0x000010fc, 0x00000000 },
- + { 0x0000113c, 0x00000000 },
- + { 0x0000117c, 0x00000000 },
- + { 0x000011bc, 0x00000000 },
- + { 0x000011fc, 0x00000000 },
- + { 0x0000123c, 0x00000000 },
- + { 0x0000127c, 0x00000000 },
- + { 0x000012bc, 0x00000000 },
- + { 0x000012fc, 0x00000000 },
- + { 0x0000133c, 0x00000000 },
- + { 0x0000137c, 0x00000000 },
- + { 0x000013bc, 0x00000000 },
- + { 0x000013fc, 0x00000000 },
- + { 0x0000143c, 0x00000000 },
- + { 0x0000147c, 0x00000000 },
- + { 0x00020010, 0x00000003 },
- + { 0x00020038, 0x000004c2 },
- + { 0x00008004, 0x00000000 },
- + { 0x00008008, 0x00000000 },
- + { 0x0000800c, 0x00000000 },
- + { 0x00008018, 0x00000700 },
- + { 0x00008020, 0x00000000 },
- + { 0x00008038, 0x00000000 },
- + { 0x0000803c, 0x00000000 },
- + { 0x00008048, 0x40000000 },
- + { 0x00008054, 0x00004000 },
- + { 0x00008058, 0x00000000 },
- + { 0x0000805c, 0x000fc78f },
- + { 0x00008060, 0x0000000f },
- + { 0x00008064, 0x00000000 },
- + { 0x000080c0, 0x2a82301a },
- + { 0x000080c4, 0x05dc01e0 },
- + { 0x000080c8, 0x1f402710 },
- + { 0x000080cc, 0x01f40000 },
- + { 0x000080d0, 0x00001e00 },
- + { 0x000080d4, 0x00000000 },
- + { 0x000080d8, 0x00400000 },
- + { 0x000080e0, 0xffffffff },
- + { 0x000080e4, 0x0000ffff },
- + { 0x000080e8, 0x003f3f3f },
- + { 0x000080ec, 0x00000000 },
- + { 0x000080f0, 0x00000000 },
- + { 0x000080f4, 0x00000000 },
- + { 0x000080f8, 0x00000000 },
- + { 0x000080fc, 0x00020000 },
- + { 0x00008100, 0x00020000 },
- + { 0x00008104, 0x00000001 },
- + { 0x00008108, 0x00000052 },
- + { 0x0000810c, 0x00000000 },
- + { 0x00008110, 0x00000168 },
- + { 0x00008118, 0x000100aa },
- + { 0x0000811c, 0x00003210 },
- + { 0x00008120, 0x08f04800 },
- + { 0x00008124, 0x00000000 },
- + { 0x00008128, 0x00000000 },
- + { 0x0000812c, 0x00000000 },
- + { 0x00008130, 0x00000000 },
- + { 0x00008134, 0x00000000 },
- + { 0x00008138, 0x00000000 },
- + { 0x0000813c, 0x00000000 },
- + { 0x00008144, 0x00000000 },
- + { 0x00008168, 0x00000000 },
- + { 0x0000816c, 0x00000000 },
- + { 0x00008170, 0x32143320 },
- + { 0x00008174, 0xfaa4fa50 },
- + { 0x00008178, 0x00000100 },
- + { 0x0000817c, 0x00000000 },
- + { 0x000081c4, 0x00000000 },
- + { 0x000081d0, 0x00003210 },
- + { 0x000081ec, 0x00000000 },
- + { 0x000081f0, 0x00000000 },
- + { 0x000081f4, 0x00000000 },
- + { 0x000081f8, 0x00000000 },
- + { 0x000081fc, 0x00000000 },
- + { 0x00008200, 0x00000000 },
- + { 0x00008204, 0x00000000 },
- + { 0x00008208, 0x00000000 },
- + { 0x0000820c, 0x00000000 },
- + { 0x00008210, 0x00000000 },
- + { 0x00008214, 0x00000000 },
- + { 0x00008218, 0x00000000 },
- + { 0x0000821c, 0x00000000 },
- + { 0x00008220, 0x00000000 },
- + { 0x00008224, 0x00000000 },
- + { 0x00008228, 0x00000000 },
- + { 0x0000822c, 0x00000000 },
- + { 0x00008230, 0x00000000 },
- + { 0x00008234, 0x00000000 },
- + { 0x00008238, 0x00000000 },
- + { 0x0000823c, 0x00000000 },
- + { 0x00008240, 0x00100000 },
- + { 0x00008244, 0x0010f400 },
- + { 0x00008248, 0x00000100 },
- + { 0x0000824c, 0x0001e800 },
- + { 0x00008250, 0x00000000 },
- + { 0x00008254, 0x00000000 },
- + { 0x00008258, 0x00000000 },
- + { 0x0000825c, 0x400000ff },
- + { 0x00008260, 0x00080922 },
- + { 0x00008270, 0x00000000 },
- + { 0x00008274, 0x40000000 },
- + { 0x00008278, 0x003e4180 },
- + { 0x0000827c, 0x00000000 },
- + { 0x00008284, 0x0000002c },
- + { 0x00008288, 0x0000002c },
- + { 0x0000828c, 0x00000000 },
- + { 0x00008294, 0x00000000 },
- + { 0x00008298, 0x00000000 },
- + { 0x00008300, 0x00000000 },
- + { 0x00008304, 0x00000000 },
- + { 0x00008308, 0x00000000 },
- + { 0x0000830c, 0x00000000 },
- + { 0x00008310, 0x00000000 },
- + { 0x00008314, 0x00000000 },
- + { 0x00008318, 0x00000000 },
- + { 0x00008328, 0x00000000 },
- + { 0x0000832c, 0x00000007 },
- + { 0x00008330, 0x00000302 },
- + { 0x00008334, 0x00000e00 },
- + { 0x00008338, 0x00000000 },
- + { 0x0000833c, 0x00000000 },
- + { 0x00008340, 0x000107ff },
- + { 0x00009808, 0x00000000 },
- + { 0x0000980c, 0xad848e19 },
- + { 0x00009810, 0x7d14e000 },
- + { 0x00009814, 0x9c0a9f6b },
- + { 0x0000981c, 0x00000000 },
- + { 0x0000982c, 0x0000a000 },
- + { 0x00009830, 0x00000000 },
- + { 0x0000983c, 0x00200400 },
- + { 0x00009840, 0x206a01ae },
- + { 0x0000984c, 0x1284233c },
- + { 0x00009854, 0x00000859 },
- + { 0x00009900, 0x00000000 },
- + { 0x00009904, 0x00000000 },
- + { 0x00009908, 0x00000000 },
- + { 0x0000990c, 0x00000000 },
- + { 0x0000991c, 0x10000fff },
- + { 0x00009920, 0x05100000 },
- + { 0x0000a920, 0x05100000 },
- + { 0x0000b920, 0x05100000 },
- + { 0x00009928, 0x00000001 },
- + { 0x0000992c, 0x00000004 },
- + { 0x00009934, 0x1e1f2022 },
- + { 0x00009938, 0x0a0b0c0d },
- + { 0x0000993c, 0x00000000 },
- + { 0x00009948, 0x9280b212 },
- + { 0x0000994c, 0x00020028 },
- + { 0x0000c95c, 0x004b6a8e },
- + { 0x0000c968, 0x000003ce },
- + { 0x00009970, 0x190fb515 },
- + { 0x00009974, 0x00000000 },
- + { 0x00009978, 0x00000001 },
- + { 0x0000997c, 0x00000000 },
- + { 0x00009980, 0x00000000 },
- + { 0x00009984, 0x00000000 },
- + { 0x00009988, 0x00000000 },
- + { 0x0000998c, 0x00000000 },
- + { 0x00009990, 0x00000000 },
- + { 0x00009994, 0x00000000 },
- + { 0x00009998, 0x00000000 },
- + { 0x0000999c, 0x00000000 },
- + { 0x000099a0, 0x00000000 },
- + { 0x000099a4, 0x00000001 },
- + { 0x000099a8, 0x201fff00 },
- + { 0x000099ac, 0x006f0000 },
- + { 0x000099b0, 0x03051000 },
- + { 0x000099dc, 0x00000000 },
- + { 0x000099e0, 0x00000200 },
- + { 0x000099e4, 0xaaaaaaaa },
- + { 0x000099e8, 0x3c466478 },
- + { 0x000099ec, 0x0cc80caa },
- + { 0x000099fc, 0x00001042 },
- + { 0x00009b00, 0x00000000 },
- + { 0x00009b04, 0x00000001 },
- + { 0x00009b08, 0x00000002 },
- + { 0x00009b0c, 0x00000003 },
- + { 0x00009b10, 0x00000004 },
- + { 0x00009b14, 0x00000005 },
- + { 0x00009b18, 0x00000008 },
- + { 0x00009b1c, 0x00000009 },
- + { 0x00009b20, 0x0000000a },
- + { 0x00009b24, 0x0000000b },
- + { 0x00009b28, 0x0000000c },
- + { 0x00009b2c, 0x0000000d },
- + { 0x00009b30, 0x00000010 },
- + { 0x00009b34, 0x00000011 },
- + { 0x00009b38, 0x00000012 },
- + { 0x00009b3c, 0x00000013 },
- + { 0x00009b40, 0x00000014 },
- + { 0x00009b44, 0x00000015 },
- + { 0x00009b48, 0x00000018 },
- + { 0x00009b4c, 0x00000019 },
- + { 0x00009b50, 0x0000001a },
- + { 0x00009b54, 0x0000001b },
- + { 0x00009b58, 0x0000001c },
- + { 0x00009b5c, 0x0000001d },
- + { 0x00009b60, 0x00000020 },
- + { 0x00009b64, 0x00000021 },
- + { 0x00009b68, 0x00000022 },
- + { 0x00009b6c, 0x00000023 },
- + { 0x00009b70, 0x00000024 },
- + { 0x00009b74, 0x00000025 },
- + { 0x00009b78, 0x00000028 },
- + { 0x00009b7c, 0x00000029 },
- + { 0x00009b80, 0x0000002a },
- + { 0x00009b84, 0x0000002b },
- + { 0x00009b88, 0x0000002c },
- + { 0x00009b8c, 0x0000002d },
- + { 0x00009b90, 0x00000030 },
- + { 0x00009b94, 0x00000031 },
- + { 0x00009b98, 0x00000032 },
- + { 0x00009b9c, 0x00000033 },
- + { 0x00009ba0, 0x00000034 },
- + { 0x00009ba4, 0x00000035 },
- + { 0x00009ba8, 0x00000035 },
- + { 0x00009bac, 0x00000035 },
- + { 0x00009bb0, 0x00000035 },
- + { 0x00009bb4, 0x00000035 },
- + { 0x00009bb8, 0x00000035 },
- + { 0x00009bbc, 0x00000035 },
- + { 0x00009bc0, 0x00000035 },
- + { 0x00009bc4, 0x00000035 },
- + { 0x00009bc8, 0x00000035 },
- + { 0x00009bcc, 0x00000035 },
- + { 0x00009bd0, 0x00000035 },
- + { 0x00009bd4, 0x00000035 },
- + { 0x00009bd8, 0x00000035 },
- + { 0x00009bdc, 0x00000035 },
- + { 0x00009be0, 0x00000035 },
- + { 0x00009be4, 0x00000035 },
- + { 0x00009be8, 0x00000035 },
- + { 0x00009bec, 0x00000035 },
- + { 0x00009bf0, 0x00000035 },
- + { 0x00009bf4, 0x00000035 },
- + { 0x00009bf8, 0x00000010 },
- + { 0x00009bfc, 0x0000001a },
- + { 0x0000a210, 0x40806333 },
- + { 0x0000a214, 0x00106c10 },
- + { 0x0000a218, 0x009c4060 },
- + { 0x0000a220, 0x018830c6 },
- + { 0x0000a224, 0x00000400 },
- + { 0x0000a228, 0x001a0bb5 },
- + { 0x0000a22c, 0x00000000 },
- + { 0x0000a234, 0x20202020 },
- + { 0x0000a238, 0x20202020 },
- + { 0x0000a23c, 0x13c889ae },
- + { 0x0000a240, 0x38490a20 },
- + { 0x0000a244, 0x00007bb6 },
- + { 0x0000a248, 0x0fff3ffc },
- + { 0x0000a24c, 0x00000001 },
- + { 0x0000a250, 0x0000a000 },
- + { 0x0000a254, 0x00000000 },
- + { 0x0000a258, 0x0cc75380 },
- + { 0x0000a25c, 0x0f0f0f01 },
- + { 0x0000a260, 0xdfa91f01 },
- + { 0x0000a268, 0x00000001 },
- + { 0x0000a26c, 0x0ebae9c6 },
- + { 0x0000b26c, 0x0ebae9c6 },
- + { 0x0000c26c, 0x0ebae9c6 },
- + { 0x0000d270, 0x00820820 },
- + { 0x0000a278, 0x1ce739ce },
- + { 0x0000a27c, 0x050701ce },
- + { 0x0000a338, 0x00000000 },
- + { 0x0000a33c, 0x00000000 },
- + { 0x0000a340, 0x00000000 },
- + { 0x0000a344, 0x00000000 },
- + { 0x0000a348, 0x3fffffff },
- + { 0x0000a34c, 0x3fffffff },
- + { 0x0000a350, 0x3fffffff },
- + { 0x0000a354, 0x0003ffff },
- + { 0x0000a358, 0x79a8aa33 },
- + { 0x0000d35c, 0x07ffffef },
- + { 0x0000d360, 0x0fffffe7 },
- + { 0x0000d364, 0x17ffffe5 },
- + { 0x0000d368, 0x1fffffe4 },
- + { 0x0000d36c, 0x37ffffe3 },
- + { 0x0000d370, 0x3fffffe3 },
- + { 0x0000d374, 0x57ffffe3 },
- + { 0x0000d378, 0x5fffffe2 },
- + { 0x0000d37c, 0x7fffffe2 },
- + { 0x0000d380, 0x7f3c7bba },
- + { 0x0000d384, 0xf3307ff0 },
- + { 0x0000a388, 0x0c000000 },
- + { 0x0000a38c, 0x20202020 },
- + { 0x0000a390, 0x20202020 },
- + { 0x0000a394, 0x1ce739ce },
- + { 0x0000a398, 0x000001ce },
- + { 0x0000a39c, 0x00000001 },
- + { 0x0000a3a0, 0x00000000 },
- + { 0x0000a3a4, 0x00000000 },
- + { 0x0000a3a8, 0x00000000 },
- + { 0x0000a3ac, 0x00000000 },
- + { 0x0000a3b0, 0x00000000 },
- + { 0x0000a3b4, 0x00000000 },
- + { 0x0000a3b8, 0x00000000 },
- + { 0x0000a3bc, 0x00000000 },
- + { 0x0000a3c0, 0x00000000 },
- + { 0x0000a3c4, 0x00000000 },
- + { 0x0000a3c8, 0x00000246 },
- + { 0x0000a3cc, 0x20202020 },
- + { 0x0000a3d0, 0x20202020 },
- + { 0x0000a3d4, 0x20202020 },
- + { 0x0000a3dc, 0x1ce739ce },
- + { 0x0000a3e0, 0x000001ce },
- +};
- +
- +static const u32 ar5416Bank0_9100[][2] = {
- + { 0x000098b0, 0x1e5795e5 },
- + { 0x000098e0, 0x02008020 },
- +};
- +
- +static const u32 ar5416BB_RfGain_9100[][3] = {
- + { 0x00009a00, 0x00000000, 0x00000000 },
- + { 0x00009a04, 0x00000040, 0x00000040 },
- + { 0x00009a08, 0x00000080, 0x00000080 },
- + { 0x00009a0c, 0x000001a1, 0x00000141 },
- + { 0x00009a10, 0x000001e1, 0x00000181 },
- + { 0x00009a14, 0x00000021, 0x000001c1 },
- + { 0x00009a18, 0x00000061, 0x00000001 },
- + { 0x00009a1c, 0x00000168, 0x00000041 },
- + { 0x00009a20, 0x000001a8, 0x000001a8 },
- + { 0x00009a24, 0x000001e8, 0x000001e8 },
- + { 0x00009a28, 0x00000028, 0x00000028 },
- + { 0x00009a2c, 0x00000068, 0x00000068 },
- + { 0x00009a30, 0x00000189, 0x000000a8 },
- + { 0x00009a34, 0x000001c9, 0x00000169 },
- + { 0x00009a38, 0x00000009, 0x000001a9 },
- + { 0x00009a3c, 0x00000049, 0x000001e9 },
- + { 0x00009a40, 0x00000089, 0x00000029 },
- + { 0x00009a44, 0x00000170, 0x00000069 },
- + { 0x00009a48, 0x000001b0, 0x00000190 },
- + { 0x00009a4c, 0x000001f0, 0x000001d0 },
- + { 0x00009a50, 0x00000030, 0x00000010 },
- + { 0x00009a54, 0x00000070, 0x00000050 },
- + { 0x00009a58, 0x00000191, 0x00000090 },
- + { 0x00009a5c, 0x000001d1, 0x00000151 },
- + { 0x00009a60, 0x00000011, 0x00000191 },
- + { 0x00009a64, 0x00000051, 0x000001d1 },
- + { 0x00009a68, 0x00000091, 0x00000011 },
- + { 0x00009a6c, 0x000001b8, 0x00000051 },
- + { 0x00009a70, 0x000001f8, 0x00000198 },
- + { 0x00009a74, 0x00000038, 0x000001d8 },
- + { 0x00009a78, 0x00000078, 0x00000018 },
- + { 0x00009a7c, 0x00000199, 0x00000058 },
- + { 0x00009a80, 0x000001d9, 0x00000098 },
- + { 0x00009a84, 0x00000019, 0x00000159 },
- + { 0x00009a88, 0x00000059, 0x00000199 },
- + { 0x00009a8c, 0x00000099, 0x000001d9 },
- + { 0x00009a90, 0x000000d9, 0x00000019 },
- + { 0x00009a94, 0x000000f9, 0x00000059 },
- + { 0x00009a98, 0x000000f9, 0x00000099 },
- + { 0x00009a9c, 0x000000f9, 0x000000d9 },
- + { 0x00009aa0, 0x000000f9, 0x000000f9 },
- + { 0x00009aa4, 0x000000f9, 0x000000f9 },
- + { 0x00009aa8, 0x000000f9, 0x000000f9 },
- + { 0x00009aac, 0x000000f9, 0x000000f9 },
- + { 0x00009ab0, 0x000000f9, 0x000000f9 },
- + { 0x00009ab4, 0x000000f9, 0x000000f9 },
- + { 0x00009ab8, 0x000000f9, 0x000000f9 },
- + { 0x00009abc, 0x000000f9, 0x000000f9 },
- + { 0x00009ac0, 0x000000f9, 0x000000f9 },
- + { 0x00009ac4, 0x000000f9, 0x000000f9 },
- + { 0x00009ac8, 0x000000f9, 0x000000f9 },
- + { 0x00009acc, 0x000000f9, 0x000000f9 },
- + { 0x00009ad0, 0x000000f9, 0x000000f9 },
- + { 0x00009ad4, 0x000000f9, 0x000000f9 },
- + { 0x00009ad8, 0x000000f9, 0x000000f9 },
- + { 0x00009adc, 0x000000f9, 0x000000f9 },
- + { 0x00009ae0, 0x000000f9, 0x000000f9 },
- + { 0x00009ae4, 0x000000f9, 0x000000f9 },
- + { 0x00009ae8, 0x000000f9, 0x000000f9 },
- + { 0x00009aec, 0x000000f9, 0x000000f9 },
- + { 0x00009af0, 0x000000f9, 0x000000f9 },
- + { 0x00009af4, 0x000000f9, 0x000000f9 },
- + { 0x00009af8, 0x000000f9, 0x000000f9 },
- + { 0x00009afc, 0x000000f9, 0x000000f9 },
- +};
- +
- +static const u32 ar5416Bank1_9100[][2] = {
- + { 0x000098b0, 0x02108421},
- + { 0x000098ec, 0x00000008},
- +};
- +
- +static const u32 ar5416Bank2_9100[][2] = {
- + { 0x000098b0, 0x0e73ff17},
- + { 0x000098e0, 0x00000420},
- +};
- +
- +static const u32 ar5416Bank3_9100[][3] = {
- + { 0x000098f0, 0x01400018, 0x01c00018 },
- +};
- +
- +static const u32 ar5416Bank6_9100[][3] = {
- +
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00e00000, 0x00e00000 },
- + { 0x0000989c, 0x005e0000, 0x005e0000 },
- + { 0x0000989c, 0x00120000, 0x00120000 },
- + { 0x0000989c, 0x00620000, 0x00620000 },
- + { 0x0000989c, 0x00020000, 0x00020000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x005f0000, 0x005f0000 },
- + { 0x0000989c, 0x00870000, 0x00870000 },
- + { 0x0000989c, 0x00f90000, 0x00f90000 },
- + { 0x0000989c, 0x007b0000, 0x007b0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00f50000, 0x00f50000 },
- + { 0x0000989c, 0x00dc0000, 0x00dc0000 },
- + { 0x0000989c, 0x00110000, 0x00110000 },
- + { 0x0000989c, 0x006100a8, 0x006100a8 },
- + { 0x0000989c, 0x004210a2, 0x004210a2 },
- + { 0x0000989c, 0x0014000f, 0x0014000f },
- + { 0x0000989c, 0x00c40002, 0x00c40002 },
- + { 0x0000989c, 0x003000f2, 0x003000f2 },
- + { 0x0000989c, 0x00440016, 0x00440016 },
- + { 0x0000989c, 0x00410040, 0x00410040 },
- + { 0x0000989c, 0x000180d6, 0x000180d6 },
- + { 0x0000989c, 0x0000c0aa, 0x0000c0aa },
- + { 0x0000989c, 0x000000b1, 0x000000b1 },
- + { 0x0000989c, 0x00002000, 0x00002000 },
- + { 0x0000989c, 0x000000d4, 0x000000d4 },
- + { 0x000098d0, 0x0000000f, 0x0010000f },
- +};
- +
- +
- +static const u32 ar5416Bank6TPC_9100[][3] = {
- +
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00e00000, 0x00e00000 },
- + { 0x0000989c, 0x005e0000, 0x005e0000 },
- + { 0x0000989c, 0x00120000, 0x00120000 },
- + { 0x0000989c, 0x00620000, 0x00620000 },
- + { 0x0000989c, 0x00020000, 0x00020000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x40ff0000, 0x40ff0000 },
- + { 0x0000989c, 0x005f0000, 0x005f0000 },
- + { 0x0000989c, 0x00870000, 0x00870000 },
- + { 0x0000989c, 0x00f90000, 0x00f90000 },
- + { 0x0000989c, 0x007b0000, 0x007b0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00f50000, 0x00f50000 },
- + { 0x0000989c, 0x00dc0000, 0x00dc0000 },
- + { 0x0000989c, 0x00110000, 0x00110000 },
- + { 0x0000989c, 0x006100a8, 0x006100a8 },
- + { 0x0000989c, 0x00423022, 0x00423022 },
- + { 0x0000989c, 0x2014008f, 0x2014008f },
- + { 0x0000989c, 0x00c40002, 0x00c40002 },
- + { 0x0000989c, 0x003000f2, 0x003000f2 },
- + { 0x0000989c, 0x00440016, 0x00440016 },
- + { 0x0000989c, 0x00410040, 0x00410040 },
- + { 0x0000989c, 0x0001805e, 0x0001805e },
- + { 0x0000989c, 0x0000c0ab, 0x0000c0ab },
- + { 0x0000989c, 0x000000e1, 0x000000e1 },
- + { 0x0000989c, 0x00007080, 0x00007080 },
- + { 0x0000989c, 0x000000d4, 0x000000d4 },
- + { 0x000098d0, 0x0000000f, 0x0010000f },
- +};
- +
- +static const u32 ar5416Bank7_9100[][2] = {
- + { 0x0000989c, 0x00000500 },
- + { 0x0000989c, 0x00000800 },
- + { 0x000098cc, 0x0000000e },
- +};
- +
- +static const u32 ar5416Addac_9100[][2] = {
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000010 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x000000c0 },
- + {0x0000989c, 0x00000015 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x000098cc, 0x00000000 },
- +};
- +
- +static const u32 ar5416Modes_9160[][6] = {
- + { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
- + { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
- + { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
- + { 0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000, 0x00014008 },
- + { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
- + { 0x0000801c, 0x128d93a7, 0x128d93cf, 0x12e013d7, 0x12e013ab, 0x098813cf },
- + { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
- + { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
- + { 0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- + { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
- + { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- + { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
- + { 0x00009844, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0, 0x037216a0 },
- + { 0x00009848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- + { 0x0000a848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- + { 0x0000b848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- + { 0x00009850, 0x6c48b4e2, 0x6c48b4e2, 0x6c48b0e2, 0x6c48b0e2, 0x6c48b0e2 },
- + { 0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e },
- + { 0x0000985c, 0x31395d5e, 0x31395d5e, 0x31395d5e, 0x31395d5e, 0x31395d5e },
- + { 0x00009860, 0x00048d18, 0x00048d18, 0x00048d20, 0x00048d20, 0x00048d18 },
- + { 0x0000c864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- + { 0x00009868, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0 },
- + { 0x0000986c, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081 },
- + { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
- + { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
- + { 0x00009924, 0xd00a8a07, 0xd00a8a07, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d },
- + { 0x00009944, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020 },
- + { 0x00009960, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40 },
- + { 0x0000a960, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40 },
- + { 0x0000b960, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40 },
- + { 0x00009964, 0x00001120, 0x00001120, 0x00001120, 0x00001120, 0x00001120 },
- + { 0x0000c968, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce, 0x000003ce },
- + { 0x0000c9bc, 0x001a0600, 0x001a0600, 0x001a0c00, 0x001a0c00, 0x001a0c00 },
- + { 0x000099c0, 0x038919be, 0x038919be, 0x038919be, 0x038919be, 0x038919be },
- + { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
- + { 0x000099c8, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329 },
- + { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
- + { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
- + { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a204, 0x00000880, 0x00000880, 0x00000880, 0x00000880, 0x00000880 },
- + { 0x0000a208, 0xd6be4788, 0xd6be4788, 0xd03e4788, 0xd03e4788, 0xd03e4788 },
- + { 0x0000a20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
- + { 0x0000b20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
- + { 0x0000c20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
- + { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
- + { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- + { 0x0000a274, 0x0a1a9caa, 0x0a1a9caa, 0x0a1a7caa, 0x0a1a7caa, 0x0a1a7caa },
- + { 0x0000a300, 0x18010000, 0x18010000, 0x18010000, 0x18010000, 0x18010000 },
- + { 0x0000a304, 0x30032602, 0x30032602, 0x2e032402, 0x2e032402, 0x2e032402 },
- + { 0x0000a308, 0x48073e06, 0x48073e06, 0x4a0a3c06, 0x4a0a3c06, 0x4a0a3c06 },
- + { 0x0000a30c, 0x560b4c0a, 0x560b4c0a, 0x621a540b, 0x621a540b, 0x621a540b },
- + { 0x0000a310, 0x641a600f, 0x641a600f, 0x764f6c1b, 0x764f6c1b, 0x764f6c1b },
- + { 0x0000a314, 0x7a4f6e1b, 0x7a4f6e1b, 0x845b7a5a, 0x845b7a5a, 0x845b7a5a },
- + { 0x0000a318, 0x8c5b7e5a, 0x8c5b7e5a, 0x950f8ccf, 0x950f8ccf, 0x950f8ccf },
- + { 0x0000a31c, 0x9d0f96cf, 0x9d0f96cf, 0xa5cf9b4f, 0xa5cf9b4f, 0xa5cf9b4f },
- + { 0x0000a320, 0xb51fa69f, 0xb51fa69f, 0xbddfaf1f, 0xbddfaf1f, 0xbddfaf1f },
- + { 0x0000a324, 0xcb3fbd07, 0xcb3fbcbf, 0xd1ffc93f, 0xd1ffc93f, 0xd1ffc93f },
- + { 0x0000a328, 0x0000d7bf, 0x0000d7bf, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a32c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a330, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- +};
- +
- +static const u32 ar5416Common_9160[][2] = {
- + { 0x0000000c, 0x00000000 },
- + { 0x00000030, 0x00020015 },
- + { 0x00000034, 0x00000005 },
- + { 0x00000040, 0x00000000 },
- + { 0x00000044, 0x00000008 },
- + { 0x00000048, 0x00000008 },
- + { 0x0000004c, 0x00000010 },
- + { 0x00000050, 0x00000000 },
- + { 0x00000054, 0x0000001f },
- + { 0x00000800, 0x00000000 },
- + { 0x00000804, 0x00000000 },
- + { 0x00000808, 0x00000000 },
- + { 0x0000080c, 0x00000000 },
- + { 0x00000810, 0x00000000 },
- + { 0x00000814, 0x00000000 },
- + { 0x00000818, 0x00000000 },
- + { 0x0000081c, 0x00000000 },
- + { 0x00000820, 0x00000000 },
- + { 0x00000824, 0x00000000 },
- + { 0x00001040, 0x002ffc0f },
- + { 0x00001044, 0x002ffc0f },
- + { 0x00001048, 0x002ffc0f },
- + { 0x0000104c, 0x002ffc0f },
- + { 0x00001050, 0x002ffc0f },
- + { 0x00001054, 0x002ffc0f },
- + { 0x00001058, 0x002ffc0f },
- + { 0x0000105c, 0x002ffc0f },
- + { 0x00001060, 0x002ffc0f },
- + { 0x00001064, 0x002ffc0f },
- + { 0x00001230, 0x00000000 },
- + { 0x00001270, 0x00000000 },
- + { 0x00001038, 0x00000000 },
- + { 0x00001078, 0x00000000 },
- + { 0x000010b8, 0x00000000 },
- + { 0x000010f8, 0x00000000 },
- + { 0x00001138, 0x00000000 },
- + { 0x00001178, 0x00000000 },
- + { 0x000011b8, 0x00000000 },
- + { 0x000011f8, 0x00000000 },
- + { 0x00001238, 0x00000000 },
- + { 0x00001278, 0x00000000 },
- + { 0x000012b8, 0x00000000 },
- + { 0x000012f8, 0x00000000 },
- + { 0x00001338, 0x00000000 },
- + { 0x00001378, 0x00000000 },
- + { 0x000013b8, 0x00000000 },
- + { 0x000013f8, 0x00000000 },
- + { 0x00001438, 0x00000000 },
- + { 0x00001478, 0x00000000 },
- + { 0x000014b8, 0x00000000 },
- + { 0x000014f8, 0x00000000 },
- + { 0x00001538, 0x00000000 },
- + { 0x00001578, 0x00000000 },
- + { 0x000015b8, 0x00000000 },
- + { 0x000015f8, 0x00000000 },
- + { 0x00001638, 0x00000000 },
- + { 0x00001678, 0x00000000 },
- + { 0x000016b8, 0x00000000 },
- + { 0x000016f8, 0x00000000 },
- + { 0x00001738, 0x00000000 },
- + { 0x00001778, 0x00000000 },
- + { 0x000017b8, 0x00000000 },
- + { 0x000017f8, 0x00000000 },
- + { 0x0000103c, 0x00000000 },
- + { 0x0000107c, 0x00000000 },
- + { 0x000010bc, 0x00000000 },
- + { 0x000010fc, 0x00000000 },
- + { 0x0000113c, 0x00000000 },
- + { 0x0000117c, 0x00000000 },
- + { 0x000011bc, 0x00000000 },
- + { 0x000011fc, 0x00000000 },
- + { 0x0000123c, 0x00000000 },
- + { 0x0000127c, 0x00000000 },
- + { 0x000012bc, 0x00000000 },
- + { 0x000012fc, 0x00000000 },
- + { 0x0000133c, 0x00000000 },
- + { 0x0000137c, 0x00000000 },
- + { 0x000013bc, 0x00000000 },
- + { 0x000013fc, 0x00000000 },
- + { 0x0000143c, 0x00000000 },
- + { 0x0000147c, 0x00000000 },
- + { 0x00004030, 0x00000002 },
- + { 0x0000403c, 0x00000002 },
- + { 0x00007010, 0x00000020 },
- + { 0x00007038, 0x000004c2 },
- + { 0x00008004, 0x00000000 },
- + { 0x00008008, 0x00000000 },
- + { 0x0000800c, 0x00000000 },
- + { 0x00008018, 0x00000700 },
- + { 0x00008020, 0x00000000 },
- + { 0x00008038, 0x00000000 },
- + { 0x0000803c, 0x00000000 },
- + { 0x00008048, 0x40000000 },
- + { 0x00008054, 0x00000000 },
- + { 0x00008058, 0x00000000 },
- + { 0x0000805c, 0x000fc78f },
- + { 0x00008060, 0x0000000f },
- + { 0x00008064, 0x00000000 },
- + { 0x000080c0, 0x2a82301a },
- + { 0x000080c4, 0x05dc01e0 },
- + { 0x000080c8, 0x1f402710 },
- + { 0x000080cc, 0x01f40000 },
- + { 0x000080d0, 0x00001e00 },
- + { 0x000080d4, 0x00000000 },
- + { 0x000080d8, 0x00400000 },
- + { 0x000080e0, 0xffffffff },
- + { 0x000080e4, 0x0000ffff },
- + { 0x000080e8, 0x003f3f3f },
- + { 0x000080ec, 0x00000000 },
- + { 0x000080f0, 0x00000000 },
- + { 0x000080f4, 0x00000000 },
- + { 0x000080f8, 0x00000000 },
- + { 0x000080fc, 0x00020000 },
- + { 0x00008100, 0x00020000 },
- + { 0x00008104, 0x00000001 },
- + { 0x00008108, 0x00000052 },
- + { 0x0000810c, 0x00000000 },
- + { 0x00008110, 0x00000168 },
- + { 0x00008118, 0x000100aa },
- + { 0x0000811c, 0x00003210 },
- + { 0x00008120, 0x08f04800 },
- + { 0x00008124, 0x00000000 },
- + { 0x00008128, 0x00000000 },
- + { 0x0000812c, 0x00000000 },
- + { 0x00008130, 0x00000000 },
- + { 0x00008134, 0x00000000 },
- + { 0x00008138, 0x00000000 },
- + { 0x0000813c, 0x00000000 },
- + { 0x00008144, 0xffffffff },
- + { 0x00008168, 0x00000000 },
- + { 0x0000816c, 0x00000000 },
- + { 0x00008170, 0x32143320 },
- + { 0x00008174, 0xfaa4fa50 },
- + { 0x00008178, 0x00000100 },
- + { 0x0000817c, 0x00000000 },
- + { 0x000081c4, 0x00000000 },
- + { 0x000081d0, 0x00003210 },
- + { 0x000081ec, 0x00000000 },
- + { 0x000081f0, 0x00000000 },
- + { 0x000081f4, 0x00000000 },
- + { 0x000081f8, 0x00000000 },
- + { 0x000081fc, 0x00000000 },
- + { 0x00008200, 0x00000000 },
- + { 0x00008204, 0x00000000 },
- + { 0x00008208, 0x00000000 },
- + { 0x0000820c, 0x00000000 },
- + { 0x00008210, 0x00000000 },
- + { 0x00008214, 0x00000000 },
- + { 0x00008218, 0x00000000 },
- + { 0x0000821c, 0x00000000 },
- + { 0x00008220, 0x00000000 },
- + { 0x00008224, 0x00000000 },
- + { 0x00008228, 0x00000000 },
- + { 0x0000822c, 0x00000000 },
- + { 0x00008230, 0x00000000 },
- + { 0x00008234, 0x00000000 },
- + { 0x00008238, 0x00000000 },
- + { 0x0000823c, 0x00000000 },
- + { 0x00008240, 0x00100000 },
- + { 0x00008244, 0x0010f400 },
- + { 0x00008248, 0x00000100 },
- + { 0x0000824c, 0x0001e800 },
- + { 0x00008250, 0x00000000 },
- + { 0x00008254, 0x00000000 },
- + { 0x00008258, 0x00000000 },
- + { 0x0000825c, 0x400000ff },
- + { 0x00008260, 0x00080922 },
- + { 0x00008270, 0x00000000 },
- + { 0x00008274, 0x40000000 },
- + { 0x00008278, 0x003e4180 },
- + { 0x0000827c, 0x00000000 },
- + { 0x00008284, 0x0000002c },
- + { 0x00008288, 0x0000002c },
- + { 0x0000828c, 0x00000000 },
- + { 0x00008294, 0x00000000 },
- + { 0x00008298, 0x00000000 },
- + { 0x00008300, 0x00000000 },
- + { 0x00008304, 0x00000000 },
- + { 0x00008308, 0x00000000 },
- + { 0x0000830c, 0x00000000 },
- + { 0x00008310, 0x00000000 },
- + { 0x00008314, 0x00000000 },
- + { 0x00008318, 0x00000000 },
- + { 0x00008328, 0x00000000 },
- + { 0x0000832c, 0x00000007 },
- + { 0x00008330, 0x00000302 },
- + { 0x00008334, 0x00000e00 },
- + { 0x00008338, 0x00ff0000 },
- + { 0x0000833c, 0x00000000 },
- + { 0x00008340, 0x000107ff },
- + { 0x00009808, 0x00000000 },
- + { 0x0000980c, 0xad848e19 },
- + { 0x00009810, 0x7d14e000 },
- + { 0x00009814, 0x9c0a9f6b },
- + { 0x0000981c, 0x00000000 },
- + { 0x0000982c, 0x0000a000 },
- + { 0x00009830, 0x00000000 },
- + { 0x0000983c, 0x00200400 },
- + { 0x00009840, 0x206a01ae },
- + { 0x0000984c, 0x1284233c },
- + { 0x00009854, 0x00000859 },
- + { 0x00009900, 0x00000000 },
- + { 0x00009904, 0x00000000 },
- + { 0x00009908, 0x00000000 },
- + { 0x0000990c, 0x00000000 },
- + { 0x0000991c, 0x10000fff },
- + { 0x00009920, 0x05100000 },
- + { 0x0000a920, 0x05100000 },
- + { 0x0000b920, 0x05100000 },
- + { 0x00009928, 0x00000001 },
- + { 0x0000992c, 0x00000004 },
- + { 0x00009934, 0x1e1f2022 },
- + { 0x00009938, 0x0a0b0c0d },
- + { 0x0000993c, 0x00000000 },
- + { 0x00009948, 0x9280b212 },
- + { 0x0000994c, 0x00020028 },
- + { 0x00009954, 0x5f3ca3de },
- + { 0x00009958, 0x2108ecff },
- + { 0x00009940, 0x00750604 },
- + { 0x0000c95c, 0x004b6a8e },
- + { 0x00009970, 0x190fb515 },
- + { 0x00009974, 0x00000000 },
- + { 0x00009978, 0x00000001 },
- + { 0x0000997c, 0x00000000 },
- + { 0x00009980, 0x00000000 },
- + { 0x00009984, 0x00000000 },
- + { 0x00009988, 0x00000000 },
- + { 0x0000998c, 0x00000000 },
- + { 0x00009990, 0x00000000 },
- + { 0x00009994, 0x00000000 },
- + { 0x00009998, 0x00000000 },
- + { 0x0000999c, 0x00000000 },
- + { 0x000099a0, 0x00000000 },
- + { 0x000099a4, 0x00000001 },
- + { 0x000099a8, 0x201fff00 },
- + { 0x000099ac, 0x006f0000 },
- + { 0x000099b0, 0x03051000 },
- + { 0x000099dc, 0x00000000 },
- + { 0x000099e0, 0x00000200 },
- + { 0x000099e4, 0xaaaaaaaa },
- + { 0x000099e8, 0x3c466478 },
- + { 0x000099ec, 0x0cc80caa },
- + { 0x000099fc, 0x00001042 },
- + { 0x00009b00, 0x00000000 },
- + { 0x00009b04, 0x00000001 },
- + { 0x00009b08, 0x00000002 },
- + { 0x00009b0c, 0x00000003 },
- + { 0x00009b10, 0x00000004 },
- + { 0x00009b14, 0x00000005 },
- + { 0x00009b18, 0x00000008 },
- + { 0x00009b1c, 0x00000009 },
- + { 0x00009b20, 0x0000000a },
- + { 0x00009b24, 0x0000000b },
- + { 0x00009b28, 0x0000000c },
- + { 0x00009b2c, 0x0000000d },
- + { 0x00009b30, 0x00000010 },
- + { 0x00009b34, 0x00000011 },
- + { 0x00009b38, 0x00000012 },
- + { 0x00009b3c, 0x00000013 },
- + { 0x00009b40, 0x00000014 },
- + { 0x00009b44, 0x00000015 },
- + { 0x00009b48, 0x00000018 },
- + { 0x00009b4c, 0x00000019 },
- + { 0x00009b50, 0x0000001a },
- + { 0x00009b54, 0x0000001b },
- + { 0x00009b58, 0x0000001c },
- + { 0x00009b5c, 0x0000001d },
- + { 0x00009b60, 0x00000020 },
- + { 0x00009b64, 0x00000021 },
- + { 0x00009b68, 0x00000022 },
- + { 0x00009b6c, 0x00000023 },
- + { 0x00009b70, 0x00000024 },
- + { 0x00009b74, 0x00000025 },
- + { 0x00009b78, 0x00000028 },
- + { 0x00009b7c, 0x00000029 },
- + { 0x00009b80, 0x0000002a },
- + { 0x00009b84, 0x0000002b },
- + { 0x00009b88, 0x0000002c },
- + { 0x00009b8c, 0x0000002d },
- + { 0x00009b90, 0x00000030 },
- + { 0x00009b94, 0x00000031 },
- + { 0x00009b98, 0x00000032 },
- + { 0x00009b9c, 0x00000033 },
- + { 0x00009ba0, 0x00000034 },
- + { 0x00009ba4, 0x00000035 },
- + { 0x00009ba8, 0x00000035 },
- + { 0x00009bac, 0x00000035 },
- + { 0x00009bb0, 0x00000035 },
- + { 0x00009bb4, 0x00000035 },
- + { 0x00009bb8, 0x00000035 },
- + { 0x00009bbc, 0x00000035 },
- + { 0x00009bc0, 0x00000035 },
- + { 0x00009bc4, 0x00000035 },
- + { 0x00009bc8, 0x00000035 },
- + { 0x00009bcc, 0x00000035 },
- + { 0x00009bd0, 0x00000035 },
- + { 0x00009bd4, 0x00000035 },
- + { 0x00009bd8, 0x00000035 },
- + { 0x00009bdc, 0x00000035 },
- + { 0x00009be0, 0x00000035 },
- + { 0x00009be4, 0x00000035 },
- + { 0x00009be8, 0x00000035 },
- + { 0x00009bec, 0x00000035 },
- + { 0x00009bf0, 0x00000035 },
- + { 0x00009bf4, 0x00000035 },
- + { 0x00009bf8, 0x00000010 },
- + { 0x00009bfc, 0x0000001a },
- + { 0x0000a210, 0x40806333 },
- + { 0x0000a214, 0x00106c10 },
- + { 0x0000a218, 0x009c4060 },
- + { 0x0000a220, 0x018830c6 },
- + { 0x0000a224, 0x00000400 },
- + { 0x0000a228, 0x001a0bb5 },
- + { 0x0000a22c, 0x00000000 },
- + { 0x0000a234, 0x20202020 },
- + { 0x0000a238, 0x20202020 },
- + { 0x0000a23c, 0x13c889af },
- + { 0x0000a240, 0x38490a20 },
- + { 0x0000a244, 0x00007bb6 },
- + { 0x0000a248, 0x0fff3ffc },
- + { 0x0000a24c, 0x00000001 },
- + { 0x0000a250, 0x0000e000 },
- + { 0x0000a254, 0x00000000 },
- + { 0x0000a258, 0x0cc75380 },
- + { 0x0000a25c, 0x0f0f0f01 },
- + { 0x0000a260, 0xdfa91f01 },
- + { 0x0000a268, 0x00000001 },
- + { 0x0000a26c, 0x0ebae9c6 },
- + { 0x0000b26c, 0x0ebae9c6 },
- + { 0x0000c26c, 0x0ebae9c6 },
- + { 0x0000d270, 0x00820820 },
- + { 0x0000a278, 0x1ce739ce },
- + { 0x0000a27c, 0x050701ce },
- + { 0x0000a338, 0x00000000 },
- + { 0x0000a33c, 0x00000000 },
- + { 0x0000a340, 0x00000000 },
- + { 0x0000a344, 0x00000000 },
- + { 0x0000a348, 0x3fffffff },
- + { 0x0000a34c, 0x3fffffff },
- + { 0x0000a350, 0x3fffffff },
- + { 0x0000a354, 0x0003ffff },
- + { 0x0000a358, 0x79bfaa03 },
- + { 0x0000d35c, 0x07ffffef },
- + { 0x0000d360, 0x0fffffe7 },
- + { 0x0000d364, 0x17ffffe5 },
- + { 0x0000d368, 0x1fffffe4 },
- + { 0x0000d36c, 0x37ffffe3 },
- + { 0x0000d370, 0x3fffffe3 },
- + { 0x0000d374, 0x57ffffe3 },
- + { 0x0000d378, 0x5fffffe2 },
- + { 0x0000d37c, 0x7fffffe2 },
- + { 0x0000d380, 0x7f3c7bba },
- + { 0x0000d384, 0xf3307ff0 },
- + { 0x0000a388, 0x0c000000 },
- + { 0x0000a38c, 0x20202020 },
- + { 0x0000a390, 0x20202020 },
- + { 0x0000a394, 0x1ce739ce },
- + { 0x0000a398, 0x000001ce },
- + { 0x0000a39c, 0x00000001 },
- + { 0x0000a3a0, 0x00000000 },
- + { 0x0000a3a4, 0x00000000 },
- + { 0x0000a3a8, 0x00000000 },
- + { 0x0000a3ac, 0x00000000 },
- + { 0x0000a3b0, 0x00000000 },
- + { 0x0000a3b4, 0x00000000 },
- + { 0x0000a3b8, 0x00000000 },
- + { 0x0000a3bc, 0x00000000 },
- + { 0x0000a3c0, 0x00000000 },
- + { 0x0000a3c4, 0x00000000 },
- + { 0x0000a3c8, 0x00000246 },
- + { 0x0000a3cc, 0x20202020 },
- + { 0x0000a3d0, 0x20202020 },
- + { 0x0000a3d4, 0x20202020 },
- + { 0x0000a3dc, 0x1ce739ce },
- + { 0x0000a3e0, 0x000001ce },
- +};
- +
- +static const u32 ar5416Bank0_9160[][2] = {
- + { 0x000098b0, 0x1e5795e5 },
- + { 0x000098e0, 0x02008020 },
- +};
- +
- +static const u32 ar5416BB_RfGain_9160[][3] = {
- + { 0x00009a00, 0x00000000, 0x00000000 },
- + { 0x00009a04, 0x00000040, 0x00000040 },
- + { 0x00009a08, 0x00000080, 0x00000080 },
- + { 0x00009a0c, 0x000001a1, 0x00000141 },
- + { 0x00009a10, 0x000001e1, 0x00000181 },
- + { 0x00009a14, 0x00000021, 0x000001c1 },
- + { 0x00009a18, 0x00000061, 0x00000001 },
- + { 0x00009a1c, 0x00000168, 0x00000041 },
- + { 0x00009a20, 0x000001a8, 0x000001a8 },
- + { 0x00009a24, 0x000001e8, 0x000001e8 },
- + { 0x00009a28, 0x00000028, 0x00000028 },
- + { 0x00009a2c, 0x00000068, 0x00000068 },
- + { 0x00009a30, 0x00000189, 0x000000a8 },
- + { 0x00009a34, 0x000001c9, 0x00000169 },
- + { 0x00009a38, 0x00000009, 0x000001a9 },
- + { 0x00009a3c, 0x00000049, 0x000001e9 },
- + { 0x00009a40, 0x00000089, 0x00000029 },
- + { 0x00009a44, 0x00000170, 0x00000069 },
- + { 0x00009a48, 0x000001b0, 0x00000190 },
- + { 0x00009a4c, 0x000001f0, 0x000001d0 },
- + { 0x00009a50, 0x00000030, 0x00000010 },
- + { 0x00009a54, 0x00000070, 0x00000050 },
- + { 0x00009a58, 0x00000191, 0x00000090 },
- + { 0x00009a5c, 0x000001d1, 0x00000151 },
- + { 0x00009a60, 0x00000011, 0x00000191 },
- + { 0x00009a64, 0x00000051, 0x000001d1 },
- + { 0x00009a68, 0x00000091, 0x00000011 },
- + { 0x00009a6c, 0x000001b8, 0x00000051 },
- + { 0x00009a70, 0x000001f8, 0x00000198 },
- + { 0x00009a74, 0x00000038, 0x000001d8 },
- + { 0x00009a78, 0x00000078, 0x00000018 },
- + { 0x00009a7c, 0x00000199, 0x00000058 },
- + { 0x00009a80, 0x000001d9, 0x00000098 },
- + { 0x00009a84, 0x00000019, 0x00000159 },
- + { 0x00009a88, 0x00000059, 0x00000199 },
- + { 0x00009a8c, 0x00000099, 0x000001d9 },
- + { 0x00009a90, 0x000000d9, 0x00000019 },
- + { 0x00009a94, 0x000000f9, 0x00000059 },
- + { 0x00009a98, 0x000000f9, 0x00000099 },
- + { 0x00009a9c, 0x000000f9, 0x000000d9 },
- + { 0x00009aa0, 0x000000f9, 0x000000f9 },
- + { 0x00009aa4, 0x000000f9, 0x000000f9 },
- + { 0x00009aa8, 0x000000f9, 0x000000f9 },
- + { 0x00009aac, 0x000000f9, 0x000000f9 },
- + { 0x00009ab0, 0x000000f9, 0x000000f9 },
- + { 0x00009ab4, 0x000000f9, 0x000000f9 },
- + { 0x00009ab8, 0x000000f9, 0x000000f9 },
- + { 0x00009abc, 0x000000f9, 0x000000f9 },
- + { 0x00009ac0, 0x000000f9, 0x000000f9 },
- + { 0x00009ac4, 0x000000f9, 0x000000f9 },
- + { 0x00009ac8, 0x000000f9, 0x000000f9 },
- + { 0x00009acc, 0x000000f9, 0x000000f9 },
- + { 0x00009ad0, 0x000000f9, 0x000000f9 },
- + { 0x00009ad4, 0x000000f9, 0x000000f9 },
- + { 0x00009ad8, 0x000000f9, 0x000000f9 },
- + { 0x00009adc, 0x000000f9, 0x000000f9 },
- + { 0x00009ae0, 0x000000f9, 0x000000f9 },
- + { 0x00009ae4, 0x000000f9, 0x000000f9 },
- + { 0x00009ae8, 0x000000f9, 0x000000f9 },
- + { 0x00009aec, 0x000000f9, 0x000000f9 },
- + { 0x00009af0, 0x000000f9, 0x000000f9 },
- + { 0x00009af4, 0x000000f9, 0x000000f9 },
- + { 0x00009af8, 0x000000f9, 0x000000f9 },
- + { 0x00009afc, 0x000000f9, 0x000000f9 },
- +};
- +
- +static const u32 ar5416Bank1_9160[][2] = {
- + { 0x000098b0, 0x02108421 },
- + { 0x000098ec, 0x00000008 },
- +};
- +
- +static const u32 ar5416Bank2_9160[][2] = {
- + { 0x000098b0, 0x0e73ff17 },
- + { 0x000098e0, 0x00000420 },
- +};
- +
- +static const u32 ar5416Bank3_9160[][3] = {
- + { 0x000098f0, 0x01400018, 0x01c00018 },
- +};
- +
- +static const u32 ar5416Bank6_9160[][3] = {
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00e00000, 0x00e00000 },
- + { 0x0000989c, 0x005e0000, 0x005e0000 },
- + { 0x0000989c, 0x00120000, 0x00120000 },
- + { 0x0000989c, 0x00620000, 0x00620000 },
- + { 0x0000989c, 0x00020000, 0x00020000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x40ff0000, 0x40ff0000 },
- + { 0x0000989c, 0x005f0000, 0x005f0000 },
- + { 0x0000989c, 0x00870000, 0x00870000 },
- + { 0x0000989c, 0x00f90000, 0x00f90000 },
- + { 0x0000989c, 0x007b0000, 0x007b0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00f50000, 0x00f50000 },
- + { 0x0000989c, 0x00dc0000, 0x00dc0000 },
- + { 0x0000989c, 0x00110000, 0x00110000 },
- + { 0x0000989c, 0x006100a8, 0x006100a8 },
- + { 0x0000989c, 0x004210a2, 0x004210a2 },
- + { 0x0000989c, 0x0014008f, 0x0014008f },
- + { 0x0000989c, 0x00c40003, 0x00c40003 },
- + { 0x0000989c, 0x003000f2, 0x003000f2 },
- + { 0x0000989c, 0x00440016, 0x00440016 },
- + { 0x0000989c, 0x00410040, 0x00410040 },
- + { 0x0000989c, 0x0001805e, 0x0001805e },
- + { 0x0000989c, 0x0000c0ab, 0x0000c0ab },
- + { 0x0000989c, 0x000000f1, 0x000000f1 },
- + { 0x0000989c, 0x00002081, 0x00002081 },
- + { 0x0000989c, 0x000000d4, 0x000000d4 },
- + { 0x000098d0, 0x0000000f, 0x0010000f },
- +};
- +
- +static const u32 ar5416Bank6TPC_9160[][3] = {
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00000000, 0x00000000 },
- + { 0x0000989c, 0x00e00000, 0x00e00000 },
- + { 0x0000989c, 0x005e0000, 0x005e0000 },
- + { 0x0000989c, 0x00120000, 0x00120000 },
- + { 0x0000989c, 0x00620000, 0x00620000 },
- + { 0x0000989c, 0x00020000, 0x00020000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x40ff0000, 0x40ff0000 },
- + { 0x0000989c, 0x005f0000, 0x005f0000 },
- + { 0x0000989c, 0x00870000, 0x00870000 },
- + { 0x0000989c, 0x00f90000, 0x00f90000 },
- + { 0x0000989c, 0x007b0000, 0x007b0000 },
- + { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- + { 0x0000989c, 0x00f50000, 0x00f50000 },
- + { 0x0000989c, 0x00dc0000, 0x00dc0000 },
- + { 0x0000989c, 0x00110000, 0x00110000 },
- + { 0x0000989c, 0x006100a8, 0x006100a8 },
- + { 0x0000989c, 0x00423022, 0x00423022 },
- + { 0x0000989c, 0x2014008f, 0x2014008f },
- + { 0x0000989c, 0x00c40002, 0x00c40002 },
- + { 0x0000989c, 0x003000f2, 0x003000f2 },
- + { 0x0000989c, 0x00440016, 0x00440016 },
- + { 0x0000989c, 0x00410040, 0x00410040 },
- + { 0x0000989c, 0x0001805e, 0x0001805e },
- + { 0x0000989c, 0x0000c0ab, 0x0000c0ab },
- + { 0x0000989c, 0x000000e1, 0x000000e1 },
- + { 0x0000989c, 0x00007080, 0x00007080 },
- + { 0x0000989c, 0x000000d4, 0x000000d4 },
- + { 0x000098d0, 0x0000000f, 0x0010000f },
- +};
- +
- +static const u32 ar5416Bank7_9160[][2] = {
- + { 0x0000989c, 0x00000500 },
- + { 0x0000989c, 0x00000800 },
- + { 0x000098cc, 0x0000000e },
- +};
- +
- +static u32 ar5416Addac_9160[][2] = {
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x000000c0 },
- + {0x0000989c, 0x00000018 },
- + {0x0000989c, 0x00000004 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x000000c0 },
- + {0x0000989c, 0x00000019 },
- + {0x0000989c, 0x00000004 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000004 },
- + {0x0000989c, 0x00000003 },
- + {0x0000989c, 0x00000008 },
- + {0x0000989c, 0x00000000 },
- + {0x000098cc, 0x00000000 },
- +};
- +
- +static u32 ar5416Addac_91601_1[][2] = {
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x000000c0 },
- + {0x0000989c, 0x00000018 },
- + {0x0000989c, 0x00000004 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x000000c0 },
- + {0x0000989c, 0x00000019 },
- + {0x0000989c, 0x00000004 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x0000989c, 0x00000000 },
- + {0x000098cc, 0x00000000 },
- +};
- +
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar9002_calib.c
- @@ -0,0 +1,988 @@
- +/*
- + * Copyright (c) 2008-2010 Atheros Communications Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +
- +#include "hw.h"
- +#include "hw-ops.h"
- +#include "ar9002_phy.h"
- +
- +#define AR9285_CLCAL_REDO_THRESH 1
- +
- +static void ar9002_hw_setup_calibration(struct ath_hw *ah,
- + struct ath9k_cal_list *currCal)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + REG_RMW_FIELD(ah, AR_PHY_TIMING_CTRL4(0),
- + AR_PHY_TIMING_CTRL4_IQCAL_LOG_COUNT_MAX,
- + currCal->calData->calCountMax);
- +
- + switch (currCal->calData->calType) {
- + case IQ_MISMATCH_CAL:
- + REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_IQ);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "starting IQ Mismatch Calibration\n");
- + break;
- + case ADC_GAIN_CAL:
- + REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_ADC_GAIN);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "starting ADC Gain Calibration\n");
- + break;
- + case ADC_DC_CAL:
- + REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_ADC_DC_PER);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "starting ADC DC Calibration\n");
- + break;
- + case ADC_DC_INIT_CAL:
- + REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_ADC_DC_INIT);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "starting Init ADC DC Calibration\n");
- + break;
- + case TEMP_COMP_CAL:
- + break; /* Not supported */
- + }
- +
- + REG_SET_BIT(ah, AR_PHY_TIMING_CTRL4(0),
- + AR_PHY_TIMING_CTRL4_DO_CAL);
- +}
- +
- +static bool ar9002_hw_per_calibration(struct ath_hw *ah,
- + struct ath9k_channel *ichan,
- + u8 rxchainmask,
- + struct ath9k_cal_list *currCal)
- +{
- + bool iscaldone = false;
- +
- + if (currCal->calState == CAL_RUNNING) {
- + if (!(REG_READ(ah, AR_PHY_TIMING_CTRL4(0)) &
- + AR_PHY_TIMING_CTRL4_DO_CAL)) {
- +
- + currCal->calData->calCollect(ah);
- + ah->cal_samples++;
- +
- + if (ah->cal_samples >= currCal->calData->calNumSamples) {
- + int i, numChains = 0;
- + for (i = 0; i < AR5416_MAX_CHAINS; i++) {
- + if (rxchainmask & (1 << i))
- + numChains++;
- + }
- +
- + currCal->calData->calPostProc(ah, numChains);
- + ichan->CalValid |= currCal->calData->calType;
- + currCal->calState = CAL_DONE;
- + iscaldone = true;
- + } else {
- + ar9002_hw_setup_calibration(ah, currCal);
- + }
- + }
- + } else if (!(ichan->CalValid & currCal->calData->calType)) {
- + ath9k_hw_reset_calibration(ah, currCal);
- + }
- +
- + return iscaldone;
- +}
- +
- +/* Assumes you are talking about the currently configured channel */
- +static bool ar9002_hw_iscal_supported(struct ath_hw *ah,
- + enum ath9k_cal_types calType)
- +{
- + struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
- +
- + switch (calType & ah->supp_cals) {
- + case IQ_MISMATCH_CAL: /* Both 2 GHz and 5 GHz support OFDM */
- + return true;
- + case ADC_GAIN_CAL:
- + case ADC_DC_CAL:
- + if (!(conf->channel->band == IEEE80211_BAND_2GHZ &&
- + conf_is_ht20(conf)))
- + return true;
- + break;
- + }
- + return false;
- +}
- +
- +static void ar9002_hw_iqcal_collect(struct ath_hw *ah)
- +{
- + int i;
- +
- + for (i = 0; i < AR5416_MAX_CHAINS; i++) {
- + ah->totalPowerMeasI[i] +=
- + REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
- + ah->totalPowerMeasQ[i] +=
- + REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
- + ah->totalIqCorrMeas[i] +=
- + (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
- + ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
- + "%d: Chn %d pmi=0x%08x;pmq=0x%08x;iqcm=0x%08x;\n",
- + ah->cal_samples, i, ah->totalPowerMeasI[i],
- + ah->totalPowerMeasQ[i],
- + ah->totalIqCorrMeas[i]);
- + }
- +}
- +
- +static void ar9002_hw_adc_gaincal_collect(struct ath_hw *ah)
- +{
- + int i;
- +
- + for (i = 0; i < AR5416_MAX_CHAINS; i++) {
- + ah->totalAdcIOddPhase[i] +=
- + REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
- + ah->totalAdcIEvenPhase[i] +=
- + REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
- + ah->totalAdcQOddPhase[i] +=
- + REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
- + ah->totalAdcQEvenPhase[i] +=
- + REG_READ(ah, AR_PHY_CAL_MEAS_3(i));
- +
- + ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
- + "%d: Chn %d oddi=0x%08x; eveni=0x%08x; "
- + "oddq=0x%08x; evenq=0x%08x;\n",
- + ah->cal_samples, i,
- + ah->totalAdcIOddPhase[i],
- + ah->totalAdcIEvenPhase[i],
- + ah->totalAdcQOddPhase[i],
- + ah->totalAdcQEvenPhase[i]);
- + }
- +}
- +
- +static void ar9002_hw_adc_dccal_collect(struct ath_hw *ah)
- +{
- + int i;
- +
- + for (i = 0; i < AR5416_MAX_CHAINS; i++) {
- + ah->totalAdcDcOffsetIOddPhase[i] +=
- + (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
- + ah->totalAdcDcOffsetIEvenPhase[i] +=
- + (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
- + ah->totalAdcDcOffsetQOddPhase[i] +=
- + (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
- + ah->totalAdcDcOffsetQEvenPhase[i] +=
- + (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_3(i));
- +
- + ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
- + "%d: Chn %d oddi=0x%08x; eveni=0x%08x; "
- + "oddq=0x%08x; evenq=0x%08x;\n",
- + ah->cal_samples, i,
- + ah->totalAdcDcOffsetIOddPhase[i],
- + ah->totalAdcDcOffsetIEvenPhase[i],
- + ah->totalAdcDcOffsetQOddPhase[i],
- + ah->totalAdcDcOffsetQEvenPhase[i]);
- + }
- +}
- +
- +static void ar9002_hw_iqcalibrate(struct ath_hw *ah, u8 numChains)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- + u32 powerMeasQ, powerMeasI, iqCorrMeas;
- + u32 qCoffDenom, iCoffDenom;
- + int32_t qCoff, iCoff;
- + int iqCorrNeg, i;
- +
- + for (i = 0; i < numChains; i++) {
- + powerMeasI = ah->totalPowerMeasI[i];
- + powerMeasQ = ah->totalPowerMeasQ[i];
- + iqCorrMeas = ah->totalIqCorrMeas[i];
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Starting IQ Cal and Correction for Chain %d\n",
- + i);
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Orignal: Chn %diq_corr_meas = 0x%08x\n",
- + i, ah->totalIqCorrMeas[i]);
- +
- + iqCorrNeg = 0;
- +
- + if (iqCorrMeas > 0x80000000) {
- + iqCorrMeas = (0xffffffff - iqCorrMeas) + 1;
- + iqCorrNeg = 1;
- + }
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d pwr_meas_i = 0x%08x\n", i, powerMeasI);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d pwr_meas_q = 0x%08x\n", i, powerMeasQ);
- + ath_print(common, ATH_DBG_CALIBRATE, "iqCorrNeg is 0x%08x\n",
- + iqCorrNeg);
- +
- + iCoffDenom = (powerMeasI / 2 + powerMeasQ / 2) / 128;
- + qCoffDenom = powerMeasQ / 64;
- +
- + if ((powerMeasQ != 0) && (iCoffDenom != 0) &&
- + (qCoffDenom != 0)) {
- + iCoff = iqCorrMeas / iCoffDenom;
- + qCoff = powerMeasI / qCoffDenom - 64;
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d iCoff = 0x%08x\n", i, iCoff);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d qCoff = 0x%08x\n", i, qCoff);
- +
- + iCoff = iCoff & 0x3f;
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "New: Chn %d iCoff = 0x%08x\n", i, iCoff);
- + if (iqCorrNeg == 0x0)
- + iCoff = 0x40 - iCoff;
- +
- + if (qCoff > 15)
- + qCoff = 15;
- + else if (qCoff <= -16)
- + qCoff = 16;
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d : iCoff = 0x%x qCoff = 0x%x\n",
- + i, iCoff, qCoff);
- +
- + REG_RMW_FIELD(ah, AR_PHY_TIMING_CTRL4(i),
- + AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF,
- + iCoff);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING_CTRL4(i),
- + AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF,
- + qCoff);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "IQ Cal and Correction done for Chain %d\n",
- + i);
- + }
- + }
- +
- + REG_SET_BIT(ah, AR_PHY_TIMING_CTRL4(0),
- + AR_PHY_TIMING_CTRL4_IQCORR_ENABLE);
- +}
- +
- +static void ar9002_hw_adc_gaincal_calibrate(struct ath_hw *ah, u8 numChains)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- + u32 iOddMeasOffset, iEvenMeasOffset, qOddMeasOffset, qEvenMeasOffset;
- + u32 qGainMismatch, iGainMismatch, val, i;
- +
- + for (i = 0; i < numChains; i++) {
- + iOddMeasOffset = ah->totalAdcIOddPhase[i];
- + iEvenMeasOffset = ah->totalAdcIEvenPhase[i];
- + qOddMeasOffset = ah->totalAdcQOddPhase[i];
- + qEvenMeasOffset = ah->totalAdcQEvenPhase[i];
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Starting ADC Gain Cal for Chain %d\n", i);
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d pwr_meas_odd_i = 0x%08x\n", i,
- + iOddMeasOffset);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d pwr_meas_even_i = 0x%08x\n", i,
- + iEvenMeasOffset);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d pwr_meas_odd_q = 0x%08x\n", i,
- + qOddMeasOffset);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d pwr_meas_even_q = 0x%08x\n", i,
- + qEvenMeasOffset);
- +
- + if (iOddMeasOffset != 0 && qEvenMeasOffset != 0) {
- + iGainMismatch =
- + ((iEvenMeasOffset * 32) /
- + iOddMeasOffset) & 0x3f;
- + qGainMismatch =
- + ((qOddMeasOffset * 32) /
- + qEvenMeasOffset) & 0x3f;
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d gain_mismatch_i = 0x%08x\n", i,
- + iGainMismatch);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d gain_mismatch_q = 0x%08x\n", i,
- + qGainMismatch);
- +
- + val = REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i));
- + val &= 0xfffff000;
- + val |= (qGainMismatch) | (iGainMismatch << 6);
- + REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i), val);
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "ADC Gain Cal done for Chain %d\n", i);
- + }
- + }
- +
- + REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0),
- + REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0)) |
- + AR_PHY_NEW_ADC_GAIN_CORR_ENABLE);
- +}
- +
- +static void ar9002_hw_adc_dccal_calibrate(struct ath_hw *ah, u8 numChains)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- + u32 iOddMeasOffset, iEvenMeasOffset, val, i;
- + int32_t qOddMeasOffset, qEvenMeasOffset, qDcMismatch, iDcMismatch;
- + const struct ath9k_percal_data *calData =
- + ah->cal_list_curr->calData;
- + u32 numSamples =
- + (1 << (calData->calCountMax + 5)) * calData->calNumSamples;
- +
- + for (i = 0; i < numChains; i++) {
- + iOddMeasOffset = ah->totalAdcDcOffsetIOddPhase[i];
- + iEvenMeasOffset = ah->totalAdcDcOffsetIEvenPhase[i];
- + qOddMeasOffset = ah->totalAdcDcOffsetQOddPhase[i];
- + qEvenMeasOffset = ah->totalAdcDcOffsetQEvenPhase[i];
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Starting ADC DC Offset Cal for Chain %d\n", i);
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d pwr_meas_odd_i = %d\n", i,
- + iOddMeasOffset);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d pwr_meas_even_i = %d\n", i,
- + iEvenMeasOffset);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d pwr_meas_odd_q = %d\n", i,
- + qOddMeasOffset);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d pwr_meas_even_q = %d\n", i,
- + qEvenMeasOffset);
- +
- + iDcMismatch = (((iEvenMeasOffset - iOddMeasOffset) * 2) /
- + numSamples) & 0x1ff;
- + qDcMismatch = (((qOddMeasOffset - qEvenMeasOffset) * 2) /
- + numSamples) & 0x1ff;
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d dc_offset_mismatch_i = 0x%08x\n", i,
- + iDcMismatch);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d dc_offset_mismatch_q = 0x%08x\n", i,
- + qDcMismatch);
- +
- + val = REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i));
- + val &= 0xc0000fff;
- + val |= (qDcMismatch << 12) | (iDcMismatch << 21);
- + REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i), val);
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "ADC DC Offset Cal done for Chain %d\n", i);
- + }
- +
- + REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0),
- + REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0)) |
- + AR_PHY_NEW_ADC_DC_OFFSET_CORR_ENABLE);
- +}
- +
- +static void ar9287_hw_olc_temp_compensation(struct ath_hw *ah)
- +{
- + u32 rddata;
- + int32_t delta, currPDADC, slope;
- +
- + rddata = REG_READ(ah, AR_PHY_TX_PWRCTRL4);
- + currPDADC = MS(rddata, AR_PHY_TX_PWRCTRL_PD_AVG_OUT);
- +
- + if (ah->initPDADC == 0 || currPDADC == 0) {
- + /*
- + * Zero value indicates that no frames have been transmitted yet,
- + * can't do temperature compensation until frames are transmitted.
- + */
- + return;
- + } else {
- + slope = ah->eep_ops->get_eeprom(ah, EEP_TEMPSENSE_SLOPE);
- +
- + if (slope == 0) { /* to avoid divide by zero case */
- + delta = 0;
- + } else {
- + delta = ((currPDADC - ah->initPDADC)*4) / slope;
- + }
- + REG_RMW_FIELD(ah, AR_PHY_CH0_TX_PWRCTRL11,
- + AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP, delta);
- + REG_RMW_FIELD(ah, AR_PHY_CH1_TX_PWRCTRL11,
- + AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP, delta);
- + }
- +}
- +
- +static void ar9280_hw_olc_temp_compensation(struct ath_hw *ah)
- +{
- + u32 rddata, i;
- + int delta, currPDADC, regval;
- +
- + rddata = REG_READ(ah, AR_PHY_TX_PWRCTRL4);
- + currPDADC = MS(rddata, AR_PHY_TX_PWRCTRL_PD_AVG_OUT);
- +
- + if (ah->initPDADC == 0 || currPDADC == 0)
- + return;
- +
- + if (ah->eep_ops->get_eeprom(ah, EEP_DAC_HPWR_5G))
- + delta = (currPDADC - ah->initPDADC + 4) / 8;
- + else
- + delta = (currPDADC - ah->initPDADC + 5) / 10;
- +
- + if (delta != ah->PDADCdelta) {
- + ah->PDADCdelta = delta;
- + for (i = 1; i < AR9280_TX_GAIN_TABLE_SIZE; i++) {
- + regval = ah->originalGain[i] - delta;
- + if (regval < 0)
- + regval = 0;
- +
- + REG_RMW_FIELD(ah,
- + AR_PHY_TX_GAIN_TBL1 + i * 4,
- + AR_PHY_TX_GAIN, regval);
- + }
- + }
- +}
- +
- +static void ar9271_hw_pa_cal(struct ath_hw *ah, bool is_reset)
- +{
- + u32 regVal;
- + unsigned int i;
- + u32 regList [][2] = {
- + { 0x786c, 0 },
- + { 0x7854, 0 },
- + { 0x7820, 0 },
- + { 0x7824, 0 },
- + { 0x7868, 0 },
- + { 0x783c, 0 },
- + { 0x7838, 0 } ,
- + { 0x7828, 0 } ,
- + };
- +
- + for (i = 0; i < ARRAY_SIZE(regList); i++)
- + regList[i][1] = REG_READ(ah, regList[i][0]);
- +
- + regVal = REG_READ(ah, 0x7834);
- + regVal &= (~(0x1));
- + REG_WRITE(ah, 0x7834, regVal);
- + regVal = REG_READ(ah, 0x9808);
- + regVal |= (0x1 << 27);
- + REG_WRITE(ah, 0x9808, regVal);
- +
- + /* 786c,b23,1, pwddac=1 */
- + REG_RMW_FIELD(ah, AR9285_AN_TOP3, AR9285_AN_TOP3_PWDDAC, 1);
- + /* 7854, b5,1, pdrxtxbb=1 */
- + REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDRXTXBB1, 1);
- + /* 7854, b7,1, pdv2i=1 */
- + REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDV2I, 1);
- + /* 7854, b8,1, pddacinterface=1 */
- + REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDDACIF, 1);
- + /* 7824,b12,0, offcal=0 */
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G2, AR9285_AN_RF2G2_OFFCAL, 0);
- + /* 7838, b1,0, pwddb=0 */
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G7, AR9285_AN_RF2G7_PWDDB, 0);
- + /* 7820,b11,0, enpacal=0 */
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_ENPACAL, 0);
- + /* 7820,b25,1, pdpadrv1=0 */
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPADRV1, 0);
- + /* 7820,b24,0, pdpadrv2=0 */
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G1,AR9285_AN_RF2G1_PDPADRV2,0);
- + /* 7820,b23,0, pdpaout=0 */
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPAOUT, 0);
- + /* 783c,b14-16,7, padrvgn2tab_0=7 */
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G8,AR9285_AN_RF2G8_PADRVGN2TAB0, 7);
- + /*
- + * 7838,b29-31,0, padrvgn1tab_0=0
- + * does not matter since we turn it off
- + */
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G7,AR9285_AN_RF2G7_PADRVGN2TAB0, 0);
- +
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9271_AN_RF2G3_CCOMP, 0xfff);
- +
- + /* Set:
- + * localmode=1,bmode=1,bmoderxtx=1,synthon=1,
- + * txon=1,paon=1,oscon=1,synthon_force=1
- + */
- + REG_WRITE(ah, AR9285_AN_TOP2, 0xca0358a0);
- + udelay(30);
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9271_AN_RF2G6_OFFS, 0);
- +
- + /* find off_6_1; */
- + for (i = 6; i > 0; i--) {
- + regVal = REG_READ(ah, 0x7834);
- + regVal |= (1 << (20 + i));
- + REG_WRITE(ah, 0x7834, regVal);
- + udelay(1);
- + //regVal = REG_READ(ah, 0x7834);
- + regVal &= (~(0x1 << (20 + i)));
- + regVal |= (MS(REG_READ(ah, 0x7840), AR9285_AN_RXTXBB1_SPARE9)
- + << (20 + i));
- + REG_WRITE(ah, 0x7834, regVal);
- + }
- +
- + regVal = (regVal >>20) & 0x7f;
- +
- + /* Update PA cal info */
- + if ((!is_reset) && (ah->pacal_info.prev_offset == regVal)) {
- + if (ah->pacal_info.max_skipcount < MAX_PACAL_SKIPCOUNT)
- + ah->pacal_info.max_skipcount =
- + 2 * ah->pacal_info.max_skipcount;
- + ah->pacal_info.skipcount = ah->pacal_info.max_skipcount;
- + } else {
- + ah->pacal_info.max_skipcount = 1;
- + ah->pacal_info.skipcount = 0;
- + ah->pacal_info.prev_offset = regVal;
- + }
- +
- + regVal = REG_READ(ah, 0x7834);
- + regVal |= 0x1;
- + REG_WRITE(ah, 0x7834, regVal);
- + regVal = REG_READ(ah, 0x9808);
- + regVal &= (~(0x1 << 27));
- + REG_WRITE(ah, 0x9808, regVal);
- +
- + for (i = 0; i < ARRAY_SIZE(regList); i++)
- + REG_WRITE(ah, regList[i][0], regList[i][1]);
- +}
- +
- +static inline void ar9285_hw_pa_cal(struct ath_hw *ah, bool is_reset)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- + u32 regVal;
- + int i, offset, offs_6_1, offs_0;
- + u32 ccomp_org, reg_field;
- + u32 regList[][2] = {
- + { 0x786c, 0 },
- + { 0x7854, 0 },
- + { 0x7820, 0 },
- + { 0x7824, 0 },
- + { 0x7868, 0 },
- + { 0x783c, 0 },
- + { 0x7838, 0 },
- + };
- +
- + ath_print(common, ATH_DBG_CALIBRATE, "Running PA Calibration\n");
- +
- + /* PA CAL is not needed for high power solution */
- + if (ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE) ==
- + AR5416_EEP_TXGAIN_HIGH_POWER)
- + return;
- +
- + if (AR_SREV_9285_11(ah)) {
- + REG_WRITE(ah, AR9285_AN_TOP4, (AR9285_AN_TOP4_DEFAULT | 0x14));
- + udelay(10);
- + }
- +
- + for (i = 0; i < ARRAY_SIZE(regList); i++)
- + regList[i][1] = REG_READ(ah, regList[i][0]);
- +
- + regVal = REG_READ(ah, 0x7834);
- + regVal &= (~(0x1));
- + REG_WRITE(ah, 0x7834, regVal);
- + regVal = REG_READ(ah, 0x9808);
- + regVal |= (0x1 << 27);
- + REG_WRITE(ah, 0x9808, regVal);
- +
- + REG_RMW_FIELD(ah, AR9285_AN_TOP3, AR9285_AN_TOP3_PWDDAC, 1);
- + REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDRXTXBB1, 1);
- + REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDV2I, 1);
- + REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDDACIF, 1);
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G2, AR9285_AN_RF2G2_OFFCAL, 0);
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G7, AR9285_AN_RF2G7_PWDDB, 0);
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_ENPACAL, 0);
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPADRV1, 0);
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPADRV2, 0);
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPAOUT, 0);
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G8, AR9285_AN_RF2G8_PADRVGN2TAB0, 7);
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G7, AR9285_AN_RF2G7_PADRVGN2TAB0, 0);
- + ccomp_org = MS(REG_READ(ah, AR9285_AN_RF2G6), AR9285_AN_RF2G6_CCOMP);
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_CCOMP, 0xf);
- +
- + REG_WRITE(ah, AR9285_AN_TOP2, 0xca0358a0);
- + udelay(30);
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_OFFS, 0);
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, 0);
- +
- + for (i = 6; i > 0; i--) {
- + regVal = REG_READ(ah, 0x7834);
- + regVal |= (1 << (19 + i));
- + REG_WRITE(ah, 0x7834, regVal);
- + udelay(1);
- + regVal = REG_READ(ah, 0x7834);
- + regVal &= (~(0x1 << (19 + i)));
- + reg_field = MS(REG_READ(ah, 0x7840), AR9285_AN_RXTXBB1_SPARE9);
- + regVal |= (reg_field << (19 + i));
- + REG_WRITE(ah, 0x7834, regVal);
- + }
- +
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, 1);
- + udelay(1);
- + reg_field = MS(REG_READ(ah, AR9285_AN_RF2G9), AR9285_AN_RXTXBB1_SPARE9);
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, reg_field);
- + offs_6_1 = MS(REG_READ(ah, AR9285_AN_RF2G6), AR9285_AN_RF2G6_OFFS);
- + offs_0 = MS(REG_READ(ah, AR9285_AN_RF2G3), AR9285_AN_RF2G3_PDVCCOMP);
- +
- + offset = (offs_6_1<<1) | offs_0;
- + offset = offset - 0;
- + offs_6_1 = offset>>1;
- + offs_0 = offset & 1;
- +
- + if ((!is_reset) && (ah->pacal_info.prev_offset == offset)) {
- + if (ah->pacal_info.max_skipcount < MAX_PACAL_SKIPCOUNT)
- + ah->pacal_info.max_skipcount =
- + 2 * ah->pacal_info.max_skipcount;
- + ah->pacal_info.skipcount = ah->pacal_info.max_skipcount;
- + } else {
- + ah->pacal_info.max_skipcount = 1;
- + ah->pacal_info.skipcount = 0;
- + ah->pacal_info.prev_offset = offset;
- + }
- +
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_OFFS, offs_6_1);
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, offs_0);
- +
- + regVal = REG_READ(ah, 0x7834);
- + regVal |= 0x1;
- + REG_WRITE(ah, 0x7834, regVal);
- + regVal = REG_READ(ah, 0x9808);
- + regVal &= (~(0x1 << 27));
- + REG_WRITE(ah, 0x9808, regVal);
- +
- + for (i = 0; i < ARRAY_SIZE(regList); i++)
- + REG_WRITE(ah, regList[i][0], regList[i][1]);
- +
- + REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_CCOMP, ccomp_org);
- +
- + if (AR_SREV_9285_11(ah))
- + REG_WRITE(ah, AR9285_AN_TOP4, AR9285_AN_TOP4_DEFAULT);
- +
- +}
- +
- +static void ar9002_hw_pa_cal(struct ath_hw *ah, bool is_reset)
- +{
- + if (AR_SREV_9271(ah)) {
- + if (is_reset || !ah->pacal_info.skipcount)
- + ar9271_hw_pa_cal(ah, is_reset);
- + else
- + ah->pacal_info.skipcount--;
- + } else if (AR_SREV_9285_11_OR_LATER(ah)) {
- + if (is_reset || !ah->pacal_info.skipcount)
- + ar9285_hw_pa_cal(ah, is_reset);
- + else
- + ah->pacal_info.skipcount--;
- + }
- +}
- +
- +static void ar9002_hw_olc_temp_compensation(struct ath_hw *ah)
- +{
- + if (OLC_FOR_AR9287_10_LATER)
- + ar9287_hw_olc_temp_compensation(ah);
- + else if (OLC_FOR_AR9280_20_LATER)
- + ar9280_hw_olc_temp_compensation(ah);
- +}
- +
- +static bool ar9002_hw_calibrate(struct ath_hw *ah,
- + struct ath9k_channel *chan,
- + u8 rxchainmask,
- + bool longcal)
- +{
- + bool iscaldone = true;
- + struct ath9k_cal_list *currCal = ah->cal_list_curr;
- +
- + if (currCal &&
- + (currCal->calState == CAL_RUNNING ||
- + currCal->calState == CAL_WAITING)) {
- + iscaldone = ar9002_hw_per_calibration(ah, chan,
- + rxchainmask, currCal);
- + if (iscaldone) {
- + ah->cal_list_curr = currCal = currCal->calNext;
- +
- + if (currCal->calState == CAL_WAITING) {
- + iscaldone = false;
- + ath9k_hw_reset_calibration(ah, currCal);
- + }
- + }
- + }
- +
- + /* Do NF cal only at longer intervals */
- + if (longcal) {
- + /* Do periodic PAOffset Cal */
- + ar9002_hw_pa_cal(ah, false);
- + ar9002_hw_olc_temp_compensation(ah);
- +
- + /* Get the value from the previous NF cal and update history buffer */
- + ath9k_hw_getnf(ah, chan);
- +
- + /*
- + * Load the NF from history buffer of the current channel.
- + * NF is slow time-variant, so it is OK to use a historical value.
- + */
- + ath9k_hw_loadnf(ah, ah->curchan);
- +
- + ath9k_hw_start_nfcal(ah);
- + }
- +
- + return iscaldone;
- +}
- +
- +/* Carrier leakage Calibration fix */
- +static bool ar9285_hw_cl_cal(struct ath_hw *ah, struct ath9k_channel *chan)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + REG_SET_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE);
- + if (IS_CHAN_HT20(chan)) {
- + REG_SET_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_PARALLEL_CAL_ENABLE);
- + REG_SET_BIT(ah, AR_PHY_TURBO, AR_PHY_FC_DYN2040_EN);
- + REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
- + AR_PHY_AGC_CONTROL_FLTR_CAL);
- + REG_CLR_BIT(ah, AR_PHY_TPCRG1, AR_PHY_TPCRG1_PD_CAL_ENABLE);
- + REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL);
- + if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL,
- + AR_PHY_AGC_CONTROL_CAL, 0, AH_WAIT_TIMEOUT)) {
- + ath_print(common, ATH_DBG_CALIBRATE, "offset "
- + "calibration failed to complete in "
- + "1ms; noisy ??\n");
- + return false;
- + }
- + REG_CLR_BIT(ah, AR_PHY_TURBO, AR_PHY_FC_DYN2040_EN);
- + REG_CLR_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_PARALLEL_CAL_ENABLE);
- + REG_CLR_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE);
- + }
- + REG_CLR_BIT(ah, AR_PHY_ADC_CTL, AR_PHY_ADC_CTL_OFF_PWDADC);
- + REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_FLTR_CAL);
- + REG_SET_BIT(ah, AR_PHY_TPCRG1, AR_PHY_TPCRG1_PD_CAL_ENABLE);
- + REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL);
- + if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL,
- + 0, AH_WAIT_TIMEOUT)) {
- + ath_print(common, ATH_DBG_CALIBRATE, "offset calibration "
- + "failed to complete in 1ms; noisy ??\n");
- + return false;
- + }
- +
- + REG_SET_BIT(ah, AR_PHY_ADC_CTL, AR_PHY_ADC_CTL_OFF_PWDADC);
- + REG_CLR_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE);
- + REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_FLTR_CAL);
- +
- + return true;
- +}
- +
- +static bool ar9285_hw_clc(struct ath_hw *ah, struct ath9k_channel *chan)
- +{
- + int i;
- + u_int32_t txgain_max;
- + u_int32_t clc_gain, gain_mask = 0, clc_num = 0;
- + u_int32_t reg_clc_I0, reg_clc_Q0;
- + u_int32_t i0_num = 0;
- + u_int32_t q0_num = 0;
- + u_int32_t total_num = 0;
- + u_int32_t reg_rf2g5_org;
- + bool retv = true;
- +
- + if (!(ar9285_hw_cl_cal(ah, chan)))
- + return false;
- +
- + txgain_max = MS(REG_READ(ah, AR_PHY_TX_PWRCTRL7),
- + AR_PHY_TX_PWRCTRL_TX_GAIN_TAB_MAX);
- +
- + for (i = 0; i < (txgain_max+1); i++) {
- + clc_gain = (REG_READ(ah, (AR_PHY_TX_GAIN_TBL1+(i<<2))) &
- + AR_PHY_TX_GAIN_CLC) >> AR_PHY_TX_GAIN_CLC_S;
- + if (!(gain_mask & (1 << clc_gain))) {
- + gain_mask |= (1 << clc_gain);
- + clc_num++;
- + }
- + }
- +
- + for (i = 0; i < clc_num; i++) {
- + reg_clc_I0 = (REG_READ(ah, (AR_PHY_CLC_TBL1 + (i << 2)))
- + & AR_PHY_CLC_I0) >> AR_PHY_CLC_I0_S;
- + reg_clc_Q0 = (REG_READ(ah, (AR_PHY_CLC_TBL1 + (i << 2)))
- + & AR_PHY_CLC_Q0) >> AR_PHY_CLC_Q0_S;
- + if (reg_clc_I0 == 0)
- + i0_num++;
- +
- + if (reg_clc_Q0 == 0)
- + q0_num++;
- + }
- + total_num = i0_num + q0_num;
- + if (total_num > AR9285_CLCAL_REDO_THRESH) {
- + reg_rf2g5_org = REG_READ(ah, AR9285_RF2G5);
- + if (AR_SREV_9285E_20(ah)) {
- + REG_WRITE(ah, AR9285_RF2G5,
- + (reg_rf2g5_org & AR9285_RF2G5_IC50TX) |
- + AR9285_RF2G5_IC50TX_XE_SET);
- + } else {
- + REG_WRITE(ah, AR9285_RF2G5,
- + (reg_rf2g5_org & AR9285_RF2G5_IC50TX) |
- + AR9285_RF2G5_IC50TX_SET);
- + }
- + retv = ar9285_hw_cl_cal(ah, chan);
- + REG_WRITE(ah, AR9285_RF2G5, reg_rf2g5_org);
- + }
- + return retv;
- +}
- +
- +static bool ar9002_hw_init_cal(struct ath_hw *ah, struct ath9k_channel *chan)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + if (AR_SREV_9271(ah) || AR_SREV_9285_12_OR_LATER(ah)) {
- + if (!ar9285_hw_clc(ah, chan))
- + return false;
- + } else {
- + if (AR_SREV_9280_10_OR_LATER(ah)) {
- + if (!AR_SREV_9287_10_OR_LATER(ah))
- + REG_CLR_BIT(ah, AR_PHY_ADC_CTL,
- + AR_PHY_ADC_CTL_OFF_PWDADC);
- + REG_SET_BIT(ah, AR_PHY_AGC_CONTROL,
- + AR_PHY_AGC_CONTROL_FLTR_CAL);
- + }
- +
- + /* Calibrate the AGC */
- + REG_WRITE(ah, AR_PHY_AGC_CONTROL,
- + REG_READ(ah, AR_PHY_AGC_CONTROL) |
- + AR_PHY_AGC_CONTROL_CAL);
- +
- + /* Poll for offset calibration complete */
- + if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL,
- + 0, AH_WAIT_TIMEOUT)) {
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "offset calibration failed to "
- + "complete in 1ms; noisy environment?\n");
- + return false;
- + }
- +
- + if (AR_SREV_9280_10_OR_LATER(ah)) {
- + if (!AR_SREV_9287_10_OR_LATER(ah))
- + REG_SET_BIT(ah, AR_PHY_ADC_CTL,
- + AR_PHY_ADC_CTL_OFF_PWDADC);
- + REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
- + AR_PHY_AGC_CONTROL_FLTR_CAL);
- + }
- + }
- +
- + /* Do PA Calibration */
- + ar9002_hw_pa_cal(ah, true);
- +
- + /* Do NF Calibration after DC offset and other calibrations */
- + REG_WRITE(ah, AR_PHY_AGC_CONTROL,
- + REG_READ(ah, AR_PHY_AGC_CONTROL) | AR_PHY_AGC_CONTROL_NF);
- +
- + ah->cal_list = ah->cal_list_last = ah->cal_list_curr = NULL;
- +
- + /* Enable IQ, ADC Gain and ADC DC offset CALs */
- + if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah)) {
- + if (ar9002_hw_iscal_supported(ah, ADC_GAIN_CAL)) {
- + INIT_CAL(&ah->adcgain_caldata);
- + INSERT_CAL(ah, &ah->adcgain_caldata);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "enabling ADC Gain Calibration.\n");
- + }
- + if (ar9002_hw_iscal_supported(ah, ADC_DC_CAL)) {
- + INIT_CAL(&ah->adcdc_caldata);
- + INSERT_CAL(ah, &ah->adcdc_caldata);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "enabling ADC DC Calibration.\n");
- + }
- + if (ar9002_hw_iscal_supported(ah, IQ_MISMATCH_CAL)) {
- + INIT_CAL(&ah->iq_caldata);
- + INSERT_CAL(ah, &ah->iq_caldata);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "enabling IQ Calibration.\n");
- + }
- +
- + ah->cal_list_curr = ah->cal_list;
- +
- + if (ah->cal_list_curr)
- + ath9k_hw_reset_calibration(ah, ah->cal_list_curr);
- + }
- +
- + chan->CalValid = 0;
- +
- + return true;
- +}
- +
- +static const struct ath9k_percal_data iq_cal_multi_sample = {
- + IQ_MISMATCH_CAL,
- + MAX_CAL_SAMPLES,
- + PER_MIN_LOG_COUNT,
- + ar9002_hw_iqcal_collect,
- + ar9002_hw_iqcalibrate
- +};
- +static const struct ath9k_percal_data iq_cal_single_sample = {
- + IQ_MISMATCH_CAL,
- + MIN_CAL_SAMPLES,
- + PER_MAX_LOG_COUNT,
- + ar9002_hw_iqcal_collect,
- + ar9002_hw_iqcalibrate
- +};
- +static const struct ath9k_percal_data adc_gain_cal_multi_sample = {
- + ADC_GAIN_CAL,
- + MAX_CAL_SAMPLES,
- + PER_MIN_LOG_COUNT,
- + ar9002_hw_adc_gaincal_collect,
- + ar9002_hw_adc_gaincal_calibrate
- +};
- +static const struct ath9k_percal_data adc_gain_cal_single_sample = {
- + ADC_GAIN_CAL,
- + MIN_CAL_SAMPLES,
- + PER_MAX_LOG_COUNT,
- + ar9002_hw_adc_gaincal_collect,
- + ar9002_hw_adc_gaincal_calibrate
- +};
- +static const struct ath9k_percal_data adc_dc_cal_multi_sample = {
- + ADC_DC_CAL,
- + MAX_CAL_SAMPLES,
- + PER_MIN_LOG_COUNT,
- + ar9002_hw_adc_dccal_collect,
- + ar9002_hw_adc_dccal_calibrate
- +};
- +static const struct ath9k_percal_data adc_dc_cal_single_sample = {
- + ADC_DC_CAL,
- + MIN_CAL_SAMPLES,
- + PER_MAX_LOG_COUNT,
- + ar9002_hw_adc_dccal_collect,
- + ar9002_hw_adc_dccal_calibrate
- +};
- +static const struct ath9k_percal_data adc_init_dc_cal = {
- + ADC_DC_INIT_CAL,
- + MIN_CAL_SAMPLES,
- + INIT_LOG_COUNT,
- + ar9002_hw_adc_dccal_collect,
- + ar9002_hw_adc_dccal_calibrate
- +};
- +
- +static void ar9002_hw_init_cal_settings(struct ath_hw *ah)
- +{
- + if (AR_SREV_9100(ah)) {
- + ah->iq_caldata.calData = &iq_cal_multi_sample;
- + ah->supp_cals = IQ_MISMATCH_CAL;
- + return;
- + }
- +
- + if (AR_SREV_9160_10_OR_LATER(ah)) {
- + if (AR_SREV_9280_10_OR_LATER(ah)) {
- + ah->iq_caldata.calData = &iq_cal_single_sample;
- + ah->adcgain_caldata.calData =
- + &adc_gain_cal_single_sample;
- + ah->adcdc_caldata.calData =
- + &adc_dc_cal_single_sample;
- + ah->adcdc_calinitdata.calData =
- + &adc_init_dc_cal;
- + } else {
- + ah->iq_caldata.calData = &iq_cal_multi_sample;
- + ah->adcgain_caldata.calData =
- + &adc_gain_cal_multi_sample;
- + ah->adcdc_caldata.calData =
- + &adc_dc_cal_multi_sample;
- + ah->adcdc_calinitdata.calData =
- + &adc_init_dc_cal;
- + }
- + ah->supp_cals = ADC_GAIN_CAL | ADC_DC_CAL | IQ_MISMATCH_CAL;
- + }
- +}
- +
- +void ar9002_hw_attach_calib_ops(struct ath_hw *ah)
- +{
- + struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
- + struct ath_hw_ops *ops = ath9k_hw_ops(ah);
- +
- + priv_ops->init_cal_settings = ar9002_hw_init_cal_settings;
- + priv_ops->init_cal = ar9002_hw_init_cal;
- + priv_ops->setup_calibration = ar9002_hw_setup_calibration;
- + priv_ops->iscal_supported = ar9002_hw_iscal_supported;
- +
- + ops->calibrate = ar9002_hw_calibrate;
- +}
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
- @@ -0,0 +1,584 @@
- +/*
- + * Copyright (c) 2008-2010 Atheros Communications Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +
- +#include "hw.h"
- +#include "ar5008_initvals.h"
- +#include "ar9001_initvals.h"
- +#include "ar9002_initvals.h"
- +
- +/* General hardware code for the A5008/AR9001/AR9002 hadware families */
- +
- +static bool ar9002_hw_macversion_supported(u32 macversion)
- +{
- + switch (macversion) {
- + case AR_SREV_VERSION_5416_PCI:
- + case AR_SREV_VERSION_5416_PCIE:
- + case AR_SREV_VERSION_9160:
- + case AR_SREV_VERSION_9100:
- + case AR_SREV_VERSION_9280:
- + case AR_SREV_VERSION_9285:
- + case AR_SREV_VERSION_9287:
- + case AR_SREV_VERSION_9271:
- + return true;
- + default:
- + break;
- + }
- + return false;
- +}
- +
- +static void ar9002_hw_init_mode_regs(struct ath_hw *ah)
- +{
- + if (AR_SREV_9271(ah)) {
- + INIT_INI_ARRAY(&ah->iniModes, ar9271Modes_9271,
- + ARRAY_SIZE(ar9271Modes_9271), 6);
- + INIT_INI_ARRAY(&ah->iniCommon, ar9271Common_9271,
- + ARRAY_SIZE(ar9271Common_9271), 2);
- + INIT_INI_ARRAY(&ah->iniCommon_normal_cck_fir_coeff_9271,
- + ar9271Common_normal_cck_fir_coeff_9271,
- + ARRAY_SIZE(ar9271Common_normal_cck_fir_coeff_9271), 2);
- + INIT_INI_ARRAY(&ah->iniCommon_japan_2484_cck_fir_coeff_9271,
- + ar9271Common_japan_2484_cck_fir_coeff_9271,
- + ARRAY_SIZE(ar9271Common_japan_2484_cck_fir_coeff_9271), 2);
- + INIT_INI_ARRAY(&ah->iniModes_9271_1_0_only,
- + ar9271Modes_9271_1_0_only,
- + ARRAY_SIZE(ar9271Modes_9271_1_0_only), 6);
- + INIT_INI_ARRAY(&ah->iniModes_9271_ANI_reg, ar9271Modes_9271_ANI_reg,
- + ARRAY_SIZE(ar9271Modes_9271_ANI_reg), 6);
- + INIT_INI_ARRAY(&ah->iniModes_high_power_tx_gain_9271,
- + ar9271Modes_high_power_tx_gain_9271,
- + ARRAY_SIZE(ar9271Modes_high_power_tx_gain_9271), 6);
- + INIT_INI_ARRAY(&ah->iniModes_normal_power_tx_gain_9271,
- + ar9271Modes_normal_power_tx_gain_9271,
- + ARRAY_SIZE(ar9271Modes_normal_power_tx_gain_9271), 6);
- + return;
- + }
- +
- + if (AR_SREV_9287_11_OR_LATER(ah)) {
- + INIT_INI_ARRAY(&ah->iniModes, ar9287Modes_9287_1_1,
- + ARRAY_SIZE(ar9287Modes_9287_1_1), 6);
- + INIT_INI_ARRAY(&ah->iniCommon, ar9287Common_9287_1_1,
- + ARRAY_SIZE(ar9287Common_9287_1_1), 2);
- + if (ah->config.pcie_clock_req)
- + INIT_INI_ARRAY(&ah->iniPcieSerdes,
- + ar9287PciePhy_clkreq_off_L1_9287_1_1,
- + ARRAY_SIZE(ar9287PciePhy_clkreq_off_L1_9287_1_1), 2);
- + else
- + INIT_INI_ARRAY(&ah->iniPcieSerdes,
- + ar9287PciePhy_clkreq_always_on_L1_9287_1_1,
- + ARRAY_SIZE(ar9287PciePhy_clkreq_always_on_L1_9287_1_1),
- + 2);
- + } else if (AR_SREV_9287_10_OR_LATER(ah)) {
- + INIT_INI_ARRAY(&ah->iniModes, ar9287Modes_9287_1_0,
- + ARRAY_SIZE(ar9287Modes_9287_1_0), 6);
- + INIT_INI_ARRAY(&ah->iniCommon, ar9287Common_9287_1_0,
- + ARRAY_SIZE(ar9287Common_9287_1_0), 2);
- +
- + if (ah->config.pcie_clock_req)
- + INIT_INI_ARRAY(&ah->iniPcieSerdes,
- + ar9287PciePhy_clkreq_off_L1_9287_1_0,
- + ARRAY_SIZE(ar9287PciePhy_clkreq_off_L1_9287_1_0), 2);
- + else
- + INIT_INI_ARRAY(&ah->iniPcieSerdes,
- + ar9287PciePhy_clkreq_always_on_L1_9287_1_0,
- + ARRAY_SIZE(ar9287PciePhy_clkreq_always_on_L1_9287_1_0),
- + 2);
- + } else if (AR_SREV_9285_12_OR_LATER(ah)) {
- +
- +
- + INIT_INI_ARRAY(&ah->iniModes, ar9285Modes_9285_1_2,
- + ARRAY_SIZE(ar9285Modes_9285_1_2), 6);
- + INIT_INI_ARRAY(&ah->iniCommon, ar9285Common_9285_1_2,
- + ARRAY_SIZE(ar9285Common_9285_1_2), 2);
- +
- + if (ah->config.pcie_clock_req) {
- + INIT_INI_ARRAY(&ah->iniPcieSerdes,
- + ar9285PciePhy_clkreq_off_L1_9285_1_2,
- + ARRAY_SIZE(ar9285PciePhy_clkreq_off_L1_9285_1_2), 2);
- + } else {
- + INIT_INI_ARRAY(&ah->iniPcieSerdes,
- + ar9285PciePhy_clkreq_always_on_L1_9285_1_2,
- + ARRAY_SIZE(ar9285PciePhy_clkreq_always_on_L1_9285_1_2),
- + 2);
- + }
- + } else if (AR_SREV_9285_10_OR_LATER(ah)) {
- + INIT_INI_ARRAY(&ah->iniModes, ar9285Modes_9285,
- + ARRAY_SIZE(ar9285Modes_9285), 6);
- + INIT_INI_ARRAY(&ah->iniCommon, ar9285Common_9285,
- + ARRAY_SIZE(ar9285Common_9285), 2);
- +
- + if (ah->config.pcie_clock_req) {
- + INIT_INI_ARRAY(&ah->iniPcieSerdes,
- + ar9285PciePhy_clkreq_off_L1_9285,
- + ARRAY_SIZE(ar9285PciePhy_clkreq_off_L1_9285), 2);
- + } else {
- + INIT_INI_ARRAY(&ah->iniPcieSerdes,
- + ar9285PciePhy_clkreq_always_on_L1_9285,
- + ARRAY_SIZE(ar9285PciePhy_clkreq_always_on_L1_9285), 2);
- + }
- + } else if (AR_SREV_9280_20_OR_LATER(ah)) {
- + INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280_2,
- + ARRAY_SIZE(ar9280Modes_9280_2), 6);
- + INIT_INI_ARRAY(&ah->iniCommon, ar9280Common_9280_2,
- + ARRAY_SIZE(ar9280Common_9280_2), 2);
- +
- + if (ah->config.pcie_clock_req) {
- + INIT_INI_ARRAY(&ah->iniPcieSerdes,
- + ar9280PciePhy_clkreq_off_L1_9280,
- + ARRAY_SIZE(ar9280PciePhy_clkreq_off_L1_9280),2);
- + } else {
- + INIT_INI_ARRAY(&ah->iniPcieSerdes,
- + ar9280PciePhy_clkreq_always_on_L1_9280,
- + ARRAY_SIZE(ar9280PciePhy_clkreq_always_on_L1_9280), 2);
- + }
- + INIT_INI_ARRAY(&ah->iniModesAdditional,
- + ar9280Modes_fast_clock_9280_2,
- + ARRAY_SIZE(ar9280Modes_fast_clock_9280_2), 3);
- + } else if (AR_SREV_9280_10_OR_LATER(ah)) {
- + INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280,
- + ARRAY_SIZE(ar9280Modes_9280), 6);
- + INIT_INI_ARRAY(&ah->iniCommon, ar9280Common_9280,
- + ARRAY_SIZE(ar9280Common_9280), 2);
- + } else if (AR_SREV_9160_10_OR_LATER(ah)) {
- + INIT_INI_ARRAY(&ah->iniModes, ar5416Modes_9160,
- + ARRAY_SIZE(ar5416Modes_9160), 6);
- + INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9160,
- + ARRAY_SIZE(ar5416Common_9160), 2);
- + INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0_9160,
- + ARRAY_SIZE(ar5416Bank0_9160), 2);
- + INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain_9160,
- + ARRAY_SIZE(ar5416BB_RfGain_9160), 3);
- + INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1_9160,
- + ARRAY_SIZE(ar5416Bank1_9160), 2);
- + INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2_9160,
- + ARRAY_SIZE(ar5416Bank2_9160), 2);
- + INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3_9160,
- + ARRAY_SIZE(ar5416Bank3_9160), 3);
- + INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6_9160,
- + ARRAY_SIZE(ar5416Bank6_9160), 3);
- + INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9160,
- + ARRAY_SIZE(ar5416Bank6TPC_9160), 3);
- + INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7_9160,
- + ARRAY_SIZE(ar5416Bank7_9160), 2);
- + if (AR_SREV_9160_11(ah)) {
- + INIT_INI_ARRAY(&ah->iniAddac,
- + ar5416Addac_91601_1,
- + ARRAY_SIZE(ar5416Addac_91601_1), 2);
- + } else {
- + INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac_9160,
- + ARRAY_SIZE(ar5416Addac_9160), 2);
- + }
- + } else if (AR_SREV_9100_OR_LATER(ah)) {
- + INIT_INI_ARRAY(&ah->iniModes, ar5416Modes_9100,
- + ARRAY_SIZE(ar5416Modes_9100), 6);
- + INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9100,
- + ARRAY_SIZE(ar5416Common_9100), 2);
- + INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0_9100,
- + ARRAY_SIZE(ar5416Bank0_9100), 2);
- + INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain_9100,
- + ARRAY_SIZE(ar5416BB_RfGain_9100), 3);
- + INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1_9100,
- + ARRAY_SIZE(ar5416Bank1_9100), 2);
- + INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2_9100,
- + ARRAY_SIZE(ar5416Bank2_9100), 2);
- + INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3_9100,
- + ARRAY_SIZE(ar5416Bank3_9100), 3);
- + INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6_9100,
- + ARRAY_SIZE(ar5416Bank6_9100), 3);
- + INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9100,
- + ARRAY_SIZE(ar5416Bank6TPC_9100), 3);
- + INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7_9100,
- + ARRAY_SIZE(ar5416Bank7_9100), 2);
- + INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac_9100,
- + ARRAY_SIZE(ar5416Addac_9100), 2);
- + } else {
- + INIT_INI_ARRAY(&ah->iniModes, ar5416Modes,
- + ARRAY_SIZE(ar5416Modes), 6);
- + INIT_INI_ARRAY(&ah->iniCommon, ar5416Common,
- + ARRAY_SIZE(ar5416Common), 2);
- + INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0,
- + ARRAY_SIZE(ar5416Bank0), 2);
- + INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain,
- + ARRAY_SIZE(ar5416BB_RfGain), 3);
- + INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1,
- + ARRAY_SIZE(ar5416Bank1), 2);
- + INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2,
- + ARRAY_SIZE(ar5416Bank2), 2);
- + INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3,
- + ARRAY_SIZE(ar5416Bank3), 3);
- + INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6,
- + ARRAY_SIZE(ar5416Bank6), 3);
- + INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC,
- + ARRAY_SIZE(ar5416Bank6TPC), 3);
- + INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7,
- + ARRAY_SIZE(ar5416Bank7), 2);
- + INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac,
- + ARRAY_SIZE(ar5416Addac), 2);
- + }
- +}
- +
- +/* Support for Japan ch.14 (2484) spread */
- +void ar9002_hw_cck_chan14_spread(struct ath_hw *ah)
- +{
- + if (AR_SREV_9287_11_OR_LATER(ah)) {
- + INIT_INI_ARRAY(&ah->iniCckfirNormal,
- + ar9287Common_normal_cck_fir_coeff_92871_1,
- + ARRAY_SIZE(ar9287Common_normal_cck_fir_coeff_92871_1), 2);
- + INIT_INI_ARRAY(&ah->iniCckfirJapan2484,
- + ar9287Common_japan_2484_cck_fir_coeff_92871_1,
- + ARRAY_SIZE(ar9287Common_japan_2484_cck_fir_coeff_92871_1), 2);
- + }
- +}
- +
- +static void ar9280_20_hw_init_rxgain_ini(struct ath_hw *ah)
- +{
- + u32 rxgain_type;
- +
- + if (ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV) >= AR5416_EEP_MINOR_VER_17) {
- + rxgain_type = ah->eep_ops->get_eeprom(ah, EEP_RXGAIN_TYPE);
- +
- + if (rxgain_type == AR5416_EEP_RXGAIN_13DB_BACKOFF)
- + INIT_INI_ARRAY(&ah->iniModesRxGain,
- + ar9280Modes_backoff_13db_rxgain_9280_2,
- + ARRAY_SIZE(ar9280Modes_backoff_13db_rxgain_9280_2), 6);
- + else if (rxgain_type == AR5416_EEP_RXGAIN_23DB_BACKOFF)
- + INIT_INI_ARRAY(&ah->iniModesRxGain,
- + ar9280Modes_backoff_23db_rxgain_9280_2,
- + ARRAY_SIZE(ar9280Modes_backoff_23db_rxgain_9280_2), 6);
- + else
- + INIT_INI_ARRAY(&ah->iniModesRxGain,
- + ar9280Modes_original_rxgain_9280_2,
- + ARRAY_SIZE(ar9280Modes_original_rxgain_9280_2), 6);
- + } else {
- + INIT_INI_ARRAY(&ah->iniModesRxGain,
- + ar9280Modes_original_rxgain_9280_2,
- + ARRAY_SIZE(ar9280Modes_original_rxgain_9280_2), 6);
- + }
- +}
- +
- +static void ar9280_20_hw_init_txgain_ini(struct ath_hw *ah)
- +{
- + u32 txgain_type;
- +
- + if (ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV) >= AR5416_EEP_MINOR_VER_19) {
- + txgain_type = ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE);
- +
- + if (txgain_type == AR5416_EEP_TXGAIN_HIGH_POWER)
- + INIT_INI_ARRAY(&ah->iniModesTxGain,
- + ar9280Modes_high_power_tx_gain_9280_2,
- + ARRAY_SIZE(ar9280Modes_high_power_tx_gain_9280_2), 6);
- + else
- + INIT_INI_ARRAY(&ah->iniModesTxGain,
- + ar9280Modes_original_tx_gain_9280_2,
- + ARRAY_SIZE(ar9280Modes_original_tx_gain_9280_2), 6);
- + } else {
- + INIT_INI_ARRAY(&ah->iniModesTxGain,
- + ar9280Modes_original_tx_gain_9280_2,
- + ARRAY_SIZE(ar9280Modes_original_tx_gain_9280_2), 6);
- + }
- +}
- +
- +static void ar9002_hw_init_mode_gain_regs(struct ath_hw *ah)
- +{
- + if (AR_SREV_9287_11_OR_LATER(ah))
- + INIT_INI_ARRAY(&ah->iniModesRxGain,
- + ar9287Modes_rx_gain_9287_1_1,
- + ARRAY_SIZE(ar9287Modes_rx_gain_9287_1_1), 6);
- + else if (AR_SREV_9287_10(ah))
- + INIT_INI_ARRAY(&ah->iniModesRxGain,
- + ar9287Modes_rx_gain_9287_1_0,
- + ARRAY_SIZE(ar9287Modes_rx_gain_9287_1_0), 6);
- + else if (AR_SREV_9280_20(ah))
- + ar9280_20_hw_init_rxgain_ini(ah);
- +
- + if (AR_SREV_9287_11_OR_LATER(ah)) {
- + INIT_INI_ARRAY(&ah->iniModesTxGain,
- + ar9287Modes_tx_gain_9287_1_1,
- + ARRAY_SIZE(ar9287Modes_tx_gain_9287_1_1), 6);
- + } else if (AR_SREV_9287_10(ah)) {
- + INIT_INI_ARRAY(&ah->iniModesTxGain,
- + ar9287Modes_tx_gain_9287_1_0,
- + ARRAY_SIZE(ar9287Modes_tx_gain_9287_1_0), 6);
- + } else if (AR_SREV_9280_20(ah)) {
- + ar9280_20_hw_init_txgain_ini(ah);
- + } else if (AR_SREV_9285_12_OR_LATER(ah)) {
- + u32 txgain_type = ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE);
- +
- + /* txgain table */
- + if (txgain_type == AR5416_EEP_TXGAIN_HIGH_POWER) {
- + if (AR_SREV_9285E_20(ah)) {
- + INIT_INI_ARRAY(&ah->iniModesTxGain,
- + ar9285Modes_XE2_0_high_power,
- + ARRAY_SIZE(
- + ar9285Modes_XE2_0_high_power), 6);
- + } else {
- + INIT_INI_ARRAY(&ah->iniModesTxGain,
- + ar9285Modes_high_power_tx_gain_9285_1_2,
- + ARRAY_SIZE(
- + ar9285Modes_high_power_tx_gain_9285_1_2), 6);
- + }
- + } else {
- + if (AR_SREV_9285E_20(ah)) {
- + INIT_INI_ARRAY(&ah->iniModesTxGain,
- + ar9285Modes_XE2_0_normal_power,
- + ARRAY_SIZE(
- + ar9285Modes_XE2_0_normal_power), 6);
- + } else {
- + INIT_INI_ARRAY(&ah->iniModesTxGain,
- + ar9285Modes_original_tx_gain_9285_1_2,
- + ARRAY_SIZE(
- + ar9285Modes_original_tx_gain_9285_1_2), 6);
- + }
- + }
- + }
- +}
- +
- +/*
- + * Helper for ASPM support.
- + *
- + * Disable PLL when in L0s as well as receiver clock when in L1.
- + * This power saving option must be enabled through the SerDes.
- + *
- + * Programming the SerDes must go through the same 288 bit serial shift
- + * register as the other analog registers. Hence the 9 writes.
- + */
- +static void ar9002_hw_configpcipowersave(struct ath_hw *ah,
- + int restore,
- + int power_off)
- +{
- + u8 i;
- + u32 val;
- +
- + if (ah->is_pciexpress != true)
- + return;
- +
- + /* Do not touch SerDes registers */
- + if (ah->config.pcie_powersave_enable == 2)
- + return;
- +
- + /* Nothing to do on restore for 11N */
- + if (!restore) {
- + if (AR_SREV_9280_20_OR_LATER(ah)) {
- + /*
- + * AR9280 2.0 or later chips use SerDes values from the
- + * initvals.h initialized depending on chipset during
- + * __ath9k_hw_init()
- + */
- + for (i = 0; i < ah->iniPcieSerdes.ia_rows; i++) {
- + REG_WRITE(ah, INI_RA(&ah->iniPcieSerdes, i, 0),
- + INI_RA(&ah->iniPcieSerdes, i, 1));
- + }
- + } else if (AR_SREV_9280(ah) &&
- + (ah->hw_version.macRev == AR_SREV_REVISION_9280_10)) {
- + REG_WRITE(ah, AR_PCIE_SERDES, 0x9248fd00);
- + REG_WRITE(ah, AR_PCIE_SERDES, 0x24924924);
- +
- + /* RX shut off when elecidle is asserted */
- + REG_WRITE(ah, AR_PCIE_SERDES, 0xa8000019);
- + REG_WRITE(ah, AR_PCIE_SERDES, 0x13160820);
- + REG_WRITE(ah, AR_PCIE_SERDES, 0xe5980560);
- +
- + /* Shut off CLKREQ active in L1 */
- + if (ah->config.pcie_clock_req)
- + REG_WRITE(ah, AR_PCIE_SERDES, 0x401deffc);
- + else
- + REG_WRITE(ah, AR_PCIE_SERDES, 0x401deffd);
- +
- + REG_WRITE(ah, AR_PCIE_SERDES, 0x1aaabe40);
- + REG_WRITE(ah, AR_PCIE_SERDES, 0xbe105554);
- + REG_WRITE(ah, AR_PCIE_SERDES, 0x00043007);
- +
- + /* Load the new settings */
- + REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000);
- +
- + } else {
- + REG_WRITE(ah, AR_PCIE_SERDES, 0x9248fc00);
- + REG_WRITE(ah, AR_PCIE_SERDES, 0x24924924);
- +
- + /* RX shut off when elecidle is asserted */
- + REG_WRITE(ah, AR_PCIE_SERDES, 0x28000039);
- + REG_WRITE(ah, AR_PCIE_SERDES, 0x53160824);
- + REG_WRITE(ah, AR_PCIE_SERDES, 0xe5980579);
- +
- + /*
- + * Ignore ah->ah_config.pcie_clock_req setting for
- + * pre-AR9280 11n
- + */
- + REG_WRITE(ah, AR_PCIE_SERDES, 0x001defff);
- +
- + REG_WRITE(ah, AR_PCIE_SERDES, 0x1aaabe40);
- + REG_WRITE(ah, AR_PCIE_SERDES, 0xbe105554);
- + REG_WRITE(ah, AR_PCIE_SERDES, 0x000e3007);
- +
- + /* Load the new settings */
- + REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000);
- + }
- +
- + udelay(1000);
- +
- + /* set bit 19 to allow forcing of pcie core into L1 state */
- + REG_SET_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
- +
- + /* Several PCIe massages to ensure proper behaviour */
- + if (ah->config.pcie_waen) {
- + val = ah->config.pcie_waen;
- + if (!power_off)
- + val &= (~AR_WA_D3_L1_DISABLE);
- + } else {
- + if (AR_SREV_9285(ah) || AR_SREV_9271(ah) ||
- + AR_SREV_9287(ah)) {
- + val = AR9285_WA_DEFAULT;
- + if (!power_off)
- + val &= (~AR_WA_D3_L1_DISABLE);
- + } else if (AR_SREV_9280(ah)) {
- + /*
- + * On AR9280 chips bit 22 of 0x4004 needs to be
- + * set otherwise card may disappear.
- + */
- + val = AR9280_WA_DEFAULT;
- + if (!power_off)
- + val &= (~AR_WA_D3_L1_DISABLE);
- + } else
- + val = AR_WA_DEFAULT;
- + }
- +
- + REG_WRITE(ah, AR_WA, val);
- + }
- +
- + if (power_off) {
- + /*
- + * Set PCIe workaround bits
- + * bit 14 in WA register (disable L1) should only
- + * be set when device enters D3 and be cleared
- + * when device comes back to D0.
- + */
- + if (ah->config.pcie_waen) {
- + if (ah->config.pcie_waen & AR_WA_D3_L1_DISABLE)
- + REG_SET_BIT(ah, AR_WA, AR_WA_D3_L1_DISABLE);
- + } else {
- + if (((AR_SREV_9285(ah) || AR_SREV_9271(ah) ||
- + AR_SREV_9287(ah)) &&
- + (AR9285_WA_DEFAULT & AR_WA_D3_L1_DISABLE)) ||
- + (AR_SREV_9280(ah) &&
- + (AR9280_WA_DEFAULT & AR_WA_D3_L1_DISABLE))) {
- + REG_SET_BIT(ah, AR_WA, AR_WA_D3_L1_DISABLE);
- + }
- + }
- + }
- +}
- +
- +static int ar9002_hw_get_radiorev(struct ath_hw *ah)
- +{
- + u32 val;
- + int i;
- +
- + REG_WRITE(ah, AR_PHY(0x36), 0x00007058);
- +
- + for (i = 0; i < 8; i++)
- + REG_WRITE(ah, AR_PHY(0x20), 0x00010000);
- + val = (REG_READ(ah, AR_PHY(256)) >> 24) & 0xff;
- + val = ((val & 0xf0) >> 4) | ((val & 0x0f) << 4);
- +
- + return ath9k_hw_reverse_bits(val, 8);
- +}
- +
- +int ar9002_hw_rf_claim(struct ath_hw *ah)
- +{
- + u32 val;
- +
- + REG_WRITE(ah, AR_PHY(0), 0x00000007);
- +
- + val = ar9002_hw_get_radiorev(ah);
- + switch (val & AR_RADIO_SREV_MAJOR) {
- + case 0:
- + val = AR_RAD5133_SREV_MAJOR;
- + break;
- + case AR_RAD5133_SREV_MAJOR:
- + case AR_RAD5122_SREV_MAJOR:
- + case AR_RAD2133_SREV_MAJOR:
- + case AR_RAD2122_SREV_MAJOR:
- + break;
- + default:
- + ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
- + "Radio Chip Rev 0x%02X not supported\n",
- + val & AR_RADIO_SREV_MAJOR);
- + return -EOPNOTSUPP;
- + }
- +
- + ah->hw_version.analog5GhzRev = val;
- +
- + return 0;
- +}
- +
- +/*
- + * Enable ASYNC FIFO
- + *
- + * If Async FIFO is enabled, the following counters change as MAC now runs
- + * at 117 Mhz instead of 88/44MHz when async FIFO is disabled.
- + *
- + * The values below tested for ht40 2 chain.
- + * Overwrite the delay/timeouts initialized in process ini.
- + */
- +void ar9002_hw_enable_async_fifo(struct ath_hw *ah)
- +{
- + if (AR_SREV_9287_12_OR_LATER(ah)) {
- + REG_WRITE(ah, AR_D_GBL_IFS_SIFS,
- + AR_D_GBL_IFS_SIFS_ASYNC_FIFO_DUR);
- + REG_WRITE(ah, AR_D_GBL_IFS_SLOT,
- + AR_D_GBL_IFS_SLOT_ASYNC_FIFO_DUR);
- + REG_WRITE(ah, AR_D_GBL_IFS_EIFS,
- + AR_D_GBL_IFS_EIFS_ASYNC_FIFO_DUR);
- +
- + REG_WRITE(ah, AR_TIME_OUT, AR_TIME_OUT_ACK_CTS_ASYNC_FIFO_DUR);
- + REG_WRITE(ah, AR_USEC, AR_USEC_ASYNC_FIFO_DUR);
- +
- + REG_SET_BIT(ah, AR_MAC_PCU_LOGIC_ANALYZER,
- + AR_MAC_PCU_LOGIC_ANALYZER_DISBUG20768);
- + REG_RMW_FIELD(ah, AR_AHB_MODE, AR_AHB_CUSTOM_BURST_EN,
- + AR_AHB_CUSTOM_BURST_ASYNC_FIFO_VAL);
- + }
- +}
- +
- +/*
- + * We don't enable WEP aggregation on mac80211 but we keep this
- + * around for HAL unification purposes.
- + */
- +void ar9002_hw_enable_wep_aggregation(struct ath_hw *ah)
- +{
- + if (AR_SREV_9287_12_OR_LATER(ah)) {
- + REG_SET_BIT(ah, AR_PCU_MISC_MODE2,
- + AR_PCU_MISC_MODE2_ENABLE_AGGWEP);
- + }
- +}
- +
- +/* Sets up the AR5008/AR9001/AR9002 hardware familiy callbacks */
- +void ar9002_hw_attach_ops(struct ath_hw *ah)
- +{
- + struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
- + struct ath_hw_ops *ops = ath9k_hw_ops(ah);
- +
- + priv_ops->init_mode_regs = ar9002_hw_init_mode_regs;
- + priv_ops->init_mode_gain_regs = ar9002_hw_init_mode_gain_regs;
- + priv_ops->macversion_supported = ar9002_hw_macversion_supported;
- +
- + ops->config_pci_powersave = ar9002_hw_configpcipowersave;
- +
- + ar5008_hw_attach_phy_ops(ah);
- + if (AR_SREV_9280_10_OR_LATER(ah))
- + ar9002_hw_attach_phy_ops(ah);
- +
- + ar9002_hw_attach_calib_ops(ah);
- + ar9002_hw_attach_mac_ops(ah);
- +}
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar9002_initvals.h
- @@ -0,0 +1,5229 @@
- +/*
- + * Copyright (c) 2010 Atheros Communications Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +
- +#ifndef INITVALS_9002_10_H
- +#define INITVALS_9002_10_H
- +
- +static const u32 ar9280Modes_9280[][6] = {
- + { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
- + { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
- + { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
- + { 0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000, 0x00014008 },
- + { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801080, 0x08400840, 0x06e006e0 },
- + { 0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f },
- + { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
- + { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
- + { 0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- + { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
- + { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- + { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
- + { 0x00009844, 0x1372161e, 0x1372161e, 0x137216a0, 0x137216a0, 0x137216a0 },
- + { 0x00009848, 0x00028566, 0x00028566, 0x00028563, 0x00028563, 0x00028563 },
- + { 0x0000a848, 0x00028566, 0x00028566, 0x00028563, 0x00028563, 0x00028563 },
- + { 0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2 },
- + { 0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e },
- + { 0x0000985c, 0x3139605e, 0x3139605e, 0x3139605e, 0x3139605e, 0x3139605e },
- + { 0x00009860, 0x00049d18, 0x00049d18, 0x00049d20, 0x00049d20, 0x00049d18 },
- + { 0x0000c864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- + { 0x00009868, 0x5ac64190, 0x5ac64190, 0x5ac64190, 0x5ac64190, 0x5ac64190 },
- + { 0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881 },
- + { 0x00009914, 0x000007d0, 0x000007d0, 0x00000898, 0x00000898, 0x000007d0 },
- + { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
- + { 0x00009924, 0xd00a8a07, 0xd00a8a07, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d },
- + { 0x00009944, 0xdfbc1010, 0xdfbc1010, 0xdfbc1010, 0xdfbc1010, 0xdfbc1010 },
- + { 0x00009960, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010 },
- + { 0x0000a960, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010 },
- + { 0x00009964, 0x00000210, 0x00000210, 0x00000210, 0x00000210, 0x00000210 },
- + { 0x0000c9b8, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a },
- + { 0x0000c9bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00, 0x00000c00 },
- + { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
- + { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
- + { 0x000099c8, 0x60f6532c, 0x60f6532c, 0x60f6532c, 0x60f6532c, 0x60f6532c },
- + { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
- + { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
- + { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x00009a00, 0x00008184, 0x00008184, 0x00000214, 0x00000214, 0x00000214 },
- + { 0x00009a04, 0x00008188, 0x00008188, 0x00000218, 0x00000218, 0x00000218 },
- + { 0x00009a08, 0x0000818c, 0x0000818c, 0x00000224, 0x00000224, 0x00000224 },
- + { 0x00009a0c, 0x00008190, 0x00008190, 0x00000228, 0x00000228, 0x00000228 },
- + { 0x00009a10, 0x00008194, 0x00008194, 0x0000022c, 0x0000022c, 0x0000022c },
- + { 0x00009a14, 0x00008200, 0x00008200, 0x00000230, 0x00000230, 0x00000230 },
- + { 0x00009a18, 0x00008204, 0x00008204, 0x000002a4, 0x000002a4, 0x000002a4 },
- + { 0x00009a1c, 0x00008208, 0x00008208, 0x000002a8, 0x000002a8, 0x000002a8 },
- + { 0x00009a20, 0x0000820c, 0x0000820c, 0x000002ac, 0x000002ac, 0x000002ac },
- + { 0x00009a24, 0x00008210, 0x00008210, 0x000002b0, 0x000002b0, 0x000002b0 },
- + { 0x00009a28, 0x00008214, 0x00008214, 0x000002b4, 0x000002b4, 0x000002b4 },
- + { 0x00009a2c, 0x00008280, 0x00008280, 0x000002b8, 0x000002b8, 0x000002b8 },
- + { 0x00009a30, 0x00008284, 0x00008284, 0x00000390, 0x00000390, 0x00000390 },
- + { 0x00009a34, 0x00008288, 0x00008288, 0x00000394, 0x00000394, 0x00000394 },
- + { 0x00009a38, 0x0000828c, 0x0000828c, 0x00000398, 0x00000398, 0x00000398 },
- + { 0x00009a3c, 0x00008290, 0x00008290, 0x00000334, 0x00000334, 0x00000334 },
- + { 0x00009a40, 0x00008300, 0x00008300, 0x00000338, 0x00000338, 0x00000338 },
- + { 0x00009a44, 0x00008304, 0x00008304, 0x000003ac, 0x000003ac, 0x000003ac },
- + { 0x00009a48, 0x00008308, 0x00008308, 0x000003b0, 0x000003b0, 0x000003b0 },
- + { 0x00009a4c, 0x0000830c, 0x0000830c, 0x000003b4, 0x000003b4, 0x000003b4 },
- + { 0x00009a50, 0x00008310, 0x00008310, 0x000003b8, 0x000003b8, 0x000003b8 },
- + { 0x00009a54, 0x00008314, 0x00008314, 0x000003a5, 0x000003a5, 0x000003a5 },
- + { 0x00009a58, 0x00008380, 0x00008380, 0x000003a9, 0x000003a9, 0x000003a9 },
- + { 0x00009a5c, 0x00008384, 0x00008384, 0x000003ad, 0x000003ad, 0x000003ad },
- + { 0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194, 0x00008194 },
- + { 0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0, 0x000081a0 },
- + { 0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c, 0x0000820c },
- + { 0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8, 0x000081a8 },
- + { 0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284, 0x00008284 },
- + { 0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288, 0x00008288 },
- + { 0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224, 0x00008224 },
- + { 0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290, 0x00008290 },
- + { 0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300, 0x00008300 },
- + { 0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304, 0x00008304 },
- + { 0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308, 0x00008308 },
- + { 0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c, 0x0000830c },
- + { 0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380, 0x00008380 },
- + { 0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384, 0x00008384 },
- + { 0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700, 0x00008700 },
- + { 0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704, 0x00008704 },
- + { 0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708, 0x00008708 },
- + { 0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c, 0x0000870c },
- + { 0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780, 0x00008780 },
- + { 0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784, 0x00008784 },
- + { 0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00, 0x00008b00 },
- + { 0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04, 0x00008b04 },
- + { 0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08, 0x00008b08 },
- + { 0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c, 0x00008b0c },
- + { 0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b80, 0x00008b80, 0x00008b80 },
- + { 0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b84, 0x00008b84, 0x00008b84 },
- + { 0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b88, 0x00008b88, 0x00008b88 },
- + { 0x00009acc, 0x0000b380, 0x0000b380, 0x00008b8c, 0x00008b8c, 0x00008b8c },
- + { 0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b90, 0x00008b90, 0x00008b90 },
- + { 0x00009ad4, 0x0000b388, 0x0000b388, 0x00008f80, 0x00008f80, 0x00008f80 },
- + { 0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008f84, 0x00008f84, 0x00008f84 },
- + { 0x00009adc, 0x0000b390, 0x0000b390, 0x00008f88, 0x00008f88, 0x00008f88 },
- + { 0x00009ae0, 0x0000b394, 0x0000b394, 0x00008f8c, 0x00008f8c, 0x00008f8c },
- + { 0x00009ae4, 0x0000b398, 0x0000b398, 0x00008f90, 0x00008f90, 0x00008f90 },
- + { 0x00009ae8, 0x0000b780, 0x0000b780, 0x0000930c, 0x0000930c, 0x0000930c },
- + { 0x00009aec, 0x0000b784, 0x0000b784, 0x00009310, 0x00009310, 0x00009310 },
- + { 0x00009af0, 0x0000b788, 0x0000b788, 0x00009384, 0x00009384, 0x00009384 },
- + { 0x00009af4, 0x0000b78c, 0x0000b78c, 0x00009388, 0x00009388, 0x00009388 },
- + { 0x00009af8, 0x0000b790, 0x0000b790, 0x00009324, 0x00009324, 0x00009324 },
- + { 0x00009afc, 0x0000b794, 0x0000b794, 0x00009704, 0x00009704, 0x00009704 },
- + { 0x00009b00, 0x0000b798, 0x0000b798, 0x000096a4, 0x000096a4, 0x000096a4 },
- + { 0x00009b04, 0x0000d784, 0x0000d784, 0x000096a8, 0x000096a8, 0x000096a8 },
- + { 0x00009b08, 0x0000d788, 0x0000d788, 0x00009710, 0x00009710, 0x00009710 },
- + { 0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00009714, 0x00009714, 0x00009714 },
- + { 0x00009b10, 0x0000d790, 0x0000d790, 0x00009720, 0x00009720, 0x00009720 },
- + { 0x00009b14, 0x0000f780, 0x0000f780, 0x00009724, 0x00009724, 0x00009724 },
- + { 0x00009b18, 0x0000f784, 0x0000f784, 0x00009728, 0x00009728, 0x00009728 },
- + { 0x00009b1c, 0x0000f788, 0x0000f788, 0x0000972c, 0x0000972c, 0x0000972c },
- + { 0x00009b20, 0x0000f78c, 0x0000f78c, 0x000097a0, 0x000097a0, 0x000097a0 },
- + { 0x00009b24, 0x0000f790, 0x0000f790, 0x000097a4, 0x000097a4, 0x000097a4 },
- + { 0x00009b28, 0x0000f794, 0x0000f794, 0x000097a8, 0x000097a8, 0x000097a8 },
- + { 0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x000097b0, 0x000097b0, 0x000097b0 },
- + { 0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x000097b4, 0x000097b4, 0x000097b4 },
- + { 0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x000097b8, 0x000097b8, 0x000097b8 },
- + { 0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x000097a5, 0x000097a5, 0x000097a5 },
- + { 0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x000097a9, 0x000097a9, 0x000097a9 },
- + { 0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x000097ad, 0x000097ad, 0x000097ad },
- + { 0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x000097b1, 0x000097b1, 0x000097b1 },
- + { 0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x000097b5, 0x000097b5, 0x000097b5 },
- + { 0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x000097b9, 0x000097b9, 0x000097b9 },
- + { 0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x000097c5, 0x000097c5, 0x000097c5 },
- + { 0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x000097c9, 0x000097c9, 0x000097c9 },
- + { 0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x000097d1, 0x000097d1, 0x000097d1 },
- + { 0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x000097d5, 0x000097d5, 0x000097d5 },
- + { 0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x000097d9, 0x000097d9, 0x000097d9 },
- + { 0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x000097c6, 0x000097c6, 0x000097c6 },
- + { 0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x000097ca, 0x000097ca, 0x000097ca },
- + { 0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x000097ce, 0x000097ce, 0x000097ce },
- + { 0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x000097d2, 0x000097d2, 0x000097d2 },
- + { 0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x000097d6, 0x000097d6, 0x000097d6 },
- + { 0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x000097c3, 0x000097c3, 0x000097c3 },
- + { 0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x000097c7, 0x000097c7, 0x000097c7 },
- + { 0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x000097cb, 0x000097cb, 0x000097cb },
- + { 0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x000097cf, 0x000097cf, 0x000097cf },
- + { 0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x000097d7, 0x000097d7, 0x000097d7 },
- + { 0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009b98, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009b9c, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009ba0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009ba4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009ba8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bac, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bb0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bb4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bb8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bbc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bc0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bc4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bc8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bcc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bd0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bd4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bd8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bdc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009be0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009be4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009be8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bec, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bf0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bf4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bf8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bfc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x0000a204, 0x00000444, 0x00000444, 0x00000444, 0x00000444, 0x00000444 },
- + { 0x0000a208, 0x803e4788, 0x803e4788, 0x803e4788, 0x803e4788, 0x803e4788 },
- + { 0x0000a20c, 0x000c6019, 0x000c6019, 0x000c6019, 0x000c6019, 0x000c6019 },
- + { 0x0000b20c, 0x000c6019, 0x000c6019, 0x000c6019, 0x000c6019, 0x000c6019 },
- + { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
- + { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- + { 0x0000a274, 0x0a19c652, 0x0a19c652, 0x0a1aa652, 0x0a1aa652, 0x0a1aa652 },
- + { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a304, 0x00003002, 0x00003002, 0x00003002, 0x00003002, 0x00003002 },
- + { 0x0000a308, 0x00006004, 0x00006004, 0x00008009, 0x00008009, 0x00008009 },
- + { 0x0000a30c, 0x0000a006, 0x0000a006, 0x0000b00b, 0x0000b00b, 0x0000b00b },
- + { 0x0000a310, 0x0000e012, 0x0000e012, 0x0000e012, 0x0000e012, 0x0000e012 },
- + { 0x0000a314, 0x00011014, 0x00011014, 0x00012048, 0x00012048, 0x00012048 },
- + { 0x0000a318, 0x0001504a, 0x0001504a, 0x0001604a, 0x0001604a, 0x0001604a },
- + { 0x0000a31c, 0x0001904c, 0x0001904c, 0x0001a211, 0x0001a211, 0x0001a211 },
- + { 0x0000a320, 0x0001c04e, 0x0001c04e, 0x0001e213, 0x0001e213, 0x0001e213 },
- + { 0x0000a324, 0x00020092, 0x00020092, 0x0002121b, 0x0002121b, 0x0002121b },
- + { 0x0000a328, 0x0002410a, 0x0002410a, 0x00024412, 0x00024412, 0x00024412 },
- + { 0x0000a32c, 0x0002710c, 0x0002710c, 0x00028414, 0x00028414, 0x00028414 },
- + { 0x0000a330, 0x0002b18b, 0x0002b18b, 0x0002b44a, 0x0002b44a, 0x0002b44a },
- + { 0x0000a334, 0x0002e1cc, 0x0002e1cc, 0x00030649, 0x00030649, 0x00030649 },
- + { 0x0000a338, 0x000321ec, 0x000321ec, 0x0003364b, 0x0003364b, 0x0003364b },
- + { 0x0000a33c, 0x000321ec, 0x000321ec, 0x00038a49, 0x00038a49, 0x00038a49 },
- + { 0x0000a340, 0x000321ec, 0x000321ec, 0x0003be48, 0x0003be48, 0x0003be48 },
- + { 0x0000a344, 0x000321ec, 0x000321ec, 0x0003ee4a, 0x0003ee4a, 0x0003ee4a },
- + { 0x0000a348, 0x000321ec, 0x000321ec, 0x00042e88, 0x00042e88, 0x00042e88 },
- + { 0x0000a34c, 0x000321ec, 0x000321ec, 0x00046e8a, 0x00046e8a, 0x00046e8a },
- + { 0x0000a350, 0x000321ec, 0x000321ec, 0x00049ec9, 0x00049ec9, 0x00049ec9 },
- + { 0x0000a354, 0x000321ec, 0x000321ec, 0x0004bf42, 0x0004bf42, 0x0004bf42 },
- + { 0x0000784c, 0x0e4f048c, 0x0e4f048c, 0x0e4d048c, 0x0e4d048c, 0x0e4d048c },
- + { 0x00007854, 0x12031828, 0x12031828, 0x12035828, 0x12035828, 0x12035828 },
- + { 0x00007870, 0x807ec400, 0x807ec400, 0x807ec000, 0x807ec000, 0x807ec000 },
- + { 0x0000788c, 0x00010000, 0x00010000, 0x00110000, 0x00110000, 0x00110000 },
- +};
- +
- +static const u32 ar9280Common_9280[][2] = {
- + { 0x0000000c, 0x00000000 },
- + { 0x00000030, 0x00020015 },
- + { 0x00000034, 0x00000005 },
- + { 0x00000040, 0x00000000 },
- + { 0x00000044, 0x00000008 },
- + { 0x00000048, 0x00000008 },
- + { 0x0000004c, 0x00000010 },
- + { 0x00000050, 0x00000000 },
- + { 0x00000054, 0x0000001f },
- + { 0x00000800, 0x00000000 },
- + { 0x00000804, 0x00000000 },
- + { 0x00000808, 0x00000000 },
- + { 0x0000080c, 0x00000000 },
- + { 0x00000810, 0x00000000 },
- + { 0x00000814, 0x00000000 },
- + { 0x00000818, 0x00000000 },
- + { 0x0000081c, 0x00000000 },
- + { 0x00000820, 0x00000000 },
- + { 0x00000824, 0x00000000 },
- + { 0x00001040, 0x002ffc0f },
- + { 0x00001044, 0x002ffc0f },
- + { 0x00001048, 0x002ffc0f },
- + { 0x0000104c, 0x002ffc0f },
- + { 0x00001050, 0x002ffc0f },
- + { 0x00001054, 0x002ffc0f },
- + { 0x00001058, 0x002ffc0f },
- + { 0x0000105c, 0x002ffc0f },
- + { 0x00001060, 0x002ffc0f },
- + { 0x00001064, 0x002ffc0f },
- + { 0x00001230, 0x00000000 },
- + { 0x00001270, 0x00000000 },
- + { 0x00001038, 0x00000000 },
- + { 0x00001078, 0x00000000 },
- + { 0x000010b8, 0x00000000 },
- + { 0x000010f8, 0x00000000 },
- + { 0x00001138, 0x00000000 },
- + { 0x00001178, 0x00000000 },
- + { 0x000011b8, 0x00000000 },
- + { 0x000011f8, 0x00000000 },
- + { 0x00001238, 0x00000000 },
- + { 0x00001278, 0x00000000 },
- + { 0x000012b8, 0x00000000 },
- + { 0x000012f8, 0x00000000 },
- + { 0x00001338, 0x00000000 },
- + { 0x00001378, 0x00000000 },
- + { 0x000013b8, 0x00000000 },
- + { 0x000013f8, 0x00000000 },
- + { 0x00001438, 0x00000000 },
- + { 0x00001478, 0x00000000 },
- + { 0x000014b8, 0x00000000 },
- + { 0x000014f8, 0x00000000 },
- + { 0x00001538, 0x00000000 },
- + { 0x00001578, 0x00000000 },
- + { 0x000015b8, 0x00000000 },
- + { 0x000015f8, 0x00000000 },
- + { 0x00001638, 0x00000000 },
- + { 0x00001678, 0x00000000 },
- + { 0x000016b8, 0x00000000 },
- + { 0x000016f8, 0x00000000 },
- + { 0x00001738, 0x00000000 },
- + { 0x00001778, 0x00000000 },
- + { 0x000017b8, 0x00000000 },
- + { 0x000017f8, 0x00000000 },
- + { 0x0000103c, 0x00000000 },
- + { 0x0000107c, 0x00000000 },
- + { 0x000010bc, 0x00000000 },
- + { 0x000010fc, 0x00000000 },
- + { 0x0000113c, 0x00000000 },
- + { 0x0000117c, 0x00000000 },
- + { 0x000011bc, 0x00000000 },
- + { 0x000011fc, 0x00000000 },
- + { 0x0000123c, 0x00000000 },
- + { 0x0000127c, 0x00000000 },
- + { 0x000012bc, 0x00000000 },
- + { 0x000012fc, 0x00000000 },
- + { 0x0000133c, 0x00000000 },
- + { 0x0000137c, 0x00000000 },
- + { 0x000013bc, 0x00000000 },
- + { 0x000013fc, 0x00000000 },
- + { 0x0000143c, 0x00000000 },
- + { 0x0000147c, 0x00000000 },
- + { 0x00004030, 0x00000002 },
- + { 0x0000403c, 0x00000002 },
- + { 0x00004024, 0x0000001f },
- + { 0x00007010, 0x00000033 },
- + { 0x00007038, 0x000004c2 },
- + { 0x00008004, 0x00000000 },
- + { 0x00008008, 0x00000000 },
- + { 0x0000800c, 0x00000000 },
- + { 0x00008018, 0x00000700 },
- + { 0x00008020, 0x00000000 },
- + { 0x00008038, 0x00000000 },
- + { 0x0000803c, 0x00000000 },
- + { 0x00008048, 0x40000000 },
- + { 0x00008054, 0x00000000 },
- + { 0x00008058, 0x00000000 },
- + { 0x0000805c, 0x000fc78f },
- + { 0x00008060, 0x0000000f },
- + { 0x00008064, 0x00000000 },
- + { 0x00008070, 0x00000000 },
- + { 0x000080c0, 0x2a82301a },
- + { 0x000080c4, 0x05dc01e0 },
- + { 0x000080c8, 0x1f402710 },
- + { 0x000080cc, 0x01f40000 },
- + { 0x000080d0, 0x00001e00 },
- + { 0x000080d4, 0x00000000 },
- + { 0x000080d8, 0x00400000 },
- + { 0x000080e0, 0xffffffff },
- + { 0x000080e4, 0x0000ffff },
- + { 0x000080e8, 0x003f3f3f },
- + { 0x000080ec, 0x00000000 },
- + { 0x000080f0, 0x00000000 },
- + { 0x000080f4, 0x00000000 },
- + { 0x000080f8, 0x00000000 },
- + { 0x000080fc, 0x00020000 },
- + { 0x00008100, 0x00020000 },
- + { 0x00008104, 0x00000001 },
- + { 0x00008108, 0x00000052 },
- + { 0x0000810c, 0x00000000 },
- + { 0x00008110, 0x00000168 },
- + { 0x00008118, 0x000100aa },
- + { 0x0000811c, 0x00003210 },
- + { 0x00008120, 0x08f04800 },
- + { 0x00008124, 0x00000000 },
- + { 0x00008128, 0x00000000 },
- + { 0x0000812c, 0x00000000 },
- + { 0x00008130, 0x00000000 },
- + { 0x00008134, 0x00000000 },
- + { 0x00008138, 0x00000000 },
- + { 0x0000813c, 0x00000000 },
- + { 0x00008144, 0x00000000 },
- + { 0x00008168, 0x00000000 },
- + { 0x0000816c, 0x00000000 },
- + { 0x00008170, 0x32143320 },
- + { 0x00008174, 0xfaa4fa50 },
- + { 0x00008178, 0x00000100 },
- + { 0x0000817c, 0x00000000 },
- + { 0x000081c4, 0x00000000 },
- + { 0x000081d0, 0x00003210 },
- + { 0x000081ec, 0x00000000 },
- + { 0x000081f0, 0x00000000 },
- + { 0x000081f4, 0x00000000 },
- + { 0x000081f8, 0x00000000 },
- + { 0x000081fc, 0x00000000 },
- + { 0x00008200, 0x00000000 },
- + { 0x00008204, 0x00000000 },
- + { 0x00008208, 0x00000000 },
- + { 0x0000820c, 0x00000000 },
- + { 0x00008210, 0x00000000 },
- + { 0x00008214, 0x00000000 },
- + { 0x00008218, 0x00000000 },
- + { 0x0000821c, 0x00000000 },
- + { 0x00008220, 0x00000000 },
- + { 0x00008224, 0x00000000 },
- + { 0x00008228, 0x00000000 },
- + { 0x0000822c, 0x00000000 },
- + { 0x00008230, 0x00000000 },
- + { 0x00008234, 0x00000000 },
- + { 0x00008238, 0x00000000 },
- + { 0x0000823c, 0x00000000 },
- + { 0x00008240, 0x00100000 },
- + { 0x00008244, 0x0010f400 },
- + { 0x00008248, 0x00000100 },
- + { 0x0000824c, 0x0001e800 },
- + { 0x00008250, 0x00000000 },
- + { 0x00008254, 0x00000000 },
- + { 0x00008258, 0x00000000 },
- + { 0x0000825c, 0x400000ff },
- + { 0x00008260, 0x00080922 },
- + { 0x00008270, 0x00000000 },
- + { 0x00008274, 0x40000000 },
- + { 0x00008278, 0x003e4180 },
- + { 0x0000827c, 0x00000000 },
- + { 0x00008284, 0x0000002c },
- + { 0x00008288, 0x0000002c },
- + { 0x0000828c, 0x00000000 },
- + { 0x00008294, 0x00000000 },
- + { 0x00008298, 0x00000000 },
- + { 0x00008300, 0x00000000 },
- + { 0x00008304, 0x00000000 },
- + { 0x00008308, 0x00000000 },
- + { 0x0000830c, 0x00000000 },
- + { 0x00008310, 0x00000000 },
- + { 0x00008314, 0x00000000 },
- + { 0x00008318, 0x00000000 },
- + { 0x00008328, 0x00000000 },
- + { 0x0000832c, 0x00000007 },
- + { 0x00008330, 0x00000302 },
- + { 0x00008334, 0x00000e00 },
- + { 0x00008338, 0x00000000 },
- + { 0x0000833c, 0x00000000 },
- + { 0x00008340, 0x000107ff },
- + { 0x00008344, 0x00000000 },
- + { 0x00009808, 0x00000000 },
- + { 0x0000980c, 0xaf268e30 },
- + { 0x00009810, 0xfd14e000 },
- + { 0x00009814, 0x9c0a9f6b },
- + { 0x0000981c, 0x00000000 },
- + { 0x0000982c, 0x0000a000 },
- + { 0x00009830, 0x00000000 },
- + { 0x0000983c, 0x00200400 },
- + { 0x00009840, 0x206a01ae },
- + { 0x0000984c, 0x0040233c },
- + { 0x0000a84c, 0x0040233c },
- + { 0x00009854, 0x00000044 },
- + { 0x00009900, 0x00000000 },
- + { 0x00009904, 0x00000000 },
- + { 0x00009908, 0x00000000 },
- + { 0x0000990c, 0x00000000 },
- + { 0x0000991c, 0x10000fff },
- + { 0x00009920, 0x04900000 },
- + { 0x0000a920, 0x04900000 },
- + { 0x00009928, 0x00000001 },
- + { 0x0000992c, 0x00000004 },
- + { 0x00009934, 0x1e1f2022 },
- + { 0x00009938, 0x0a0b0c0d },
- + { 0x0000993c, 0x00000000 },
- + { 0x00009948, 0x9280c00a },
- + { 0x0000994c, 0x00020028 },
- + { 0x00009954, 0xe250a51e },
- + { 0x00009958, 0x3388ffff },
- + { 0x00009940, 0x00781204 },
- + { 0x0000c95c, 0x004b6a8e },
- + { 0x0000c968, 0x000003ce },
- + { 0x00009970, 0x190fb514 },
- + { 0x00009974, 0x00000000 },
- + { 0x00009978, 0x00000001 },
- + { 0x0000997c, 0x00000000 },
- + { 0x00009980, 0x00000000 },
- + { 0x00009984, 0x00000000 },
- + { 0x00009988, 0x00000000 },
- + { 0x0000998c, 0x00000000 },
- + { 0x00009990, 0x00000000 },
- + { 0x00009994, 0x00000000 },
- + { 0x00009998, 0x00000000 },
- + { 0x0000999c, 0x00000000 },
- + { 0x000099a0, 0x00000000 },
- + { 0x000099a4, 0x00000001 },
- + { 0x000099a8, 0x201fff00 },
- + { 0x000099ac, 0x006f00c4 },
- + { 0x000099b0, 0x03051000 },
- + { 0x000099b4, 0x00000820 },
- + { 0x000099dc, 0x00000000 },
- + { 0x000099e0, 0x00000000 },
- + { 0x000099e4, 0xaaaaaaaa },
- + { 0x000099e8, 0x3c466478 },
- + { 0x000099ec, 0x0cc80caa },
- + { 0x000099fc, 0x00001042 },
- + { 0x0000a210, 0x4080a333 },
- + { 0x0000a214, 0x40206c10 },
- + { 0x0000a218, 0x009c4060 },
- + { 0x0000a220, 0x01834061 },
- + { 0x0000a224, 0x00000400 },
- + { 0x0000a228, 0x000003b5 },
- + { 0x0000a22c, 0x23277200 },
- + { 0x0000a234, 0x20202020 },
- + { 0x0000a238, 0x20202020 },
- + { 0x0000a23c, 0x13c889af },
- + { 0x0000a240, 0x38490a20 },
- + { 0x0000a244, 0x00007bb6 },
- + { 0x0000a248, 0x0fff3ffc },
- + { 0x0000a24c, 0x00000001 },
- + { 0x0000a250, 0x001da000 },
- + { 0x0000a254, 0x00000000 },
- + { 0x0000a258, 0x0cdbd380 },
- + { 0x0000a25c, 0x0f0f0f01 },
- + { 0x0000a260, 0xdfa91f01 },
- + { 0x0000a268, 0x00000000 },
- + { 0x0000a26c, 0x0ebae9c6 },
- + { 0x0000b26c, 0x0ebae9c6 },
- + { 0x0000d270, 0x00820820 },
- + { 0x0000a278, 0x1ce739ce },
- + { 0x0000a27c, 0x050701ce },
- + { 0x0000a358, 0x7999aa0f },
- + { 0x0000d35c, 0x07ffffef },
- + { 0x0000d360, 0x0fffffe7 },
- + { 0x0000d364, 0x17ffffe5 },
- + { 0x0000d368, 0x1fffffe4 },
- + { 0x0000d36c, 0x37ffffe3 },
- + { 0x0000d370, 0x3fffffe3 },
- + { 0x0000d374, 0x57ffffe3 },
- + { 0x0000d378, 0x5fffffe2 },
- + { 0x0000d37c, 0x7fffffe2 },
- + { 0x0000d380, 0x7f3c7bba },
- + { 0x0000d384, 0xf3307ff0 },
- + { 0x0000a388, 0x0c000000 },
- + { 0x0000a38c, 0x20202020 },
- + { 0x0000a390, 0x20202020 },
- + { 0x0000a394, 0x1ce739ce },
- + { 0x0000a398, 0x000001ce },
- + { 0x0000a39c, 0x00000001 },
- + { 0x0000a3a0, 0x00000000 },
- + { 0x0000a3a4, 0x00000000 },
- + { 0x0000a3a8, 0x00000000 },
- + { 0x0000a3ac, 0x00000000 },
- + { 0x0000a3b0, 0x00000000 },
- + { 0x0000a3b4, 0x00000000 },
- + { 0x0000a3b8, 0x00000000 },
- + { 0x0000a3bc, 0x00000000 },
- + { 0x0000a3c0, 0x00000000 },
- + { 0x0000a3c4, 0x00000000 },
- + { 0x0000a3c8, 0x00000246 },
- + { 0x0000a3cc, 0x20202020 },
- + { 0x0000a3d0, 0x20202020 },
- + { 0x0000a3d4, 0x20202020 },
- + { 0x0000a3dc, 0x1ce739ce },
- + { 0x0000a3e0, 0x000001ce },
- + { 0x0000a3e4, 0x00000000 },
- + { 0x0000a3e8, 0x18c43433 },
- + { 0x0000a3ec, 0x00f38081 },
- + { 0x00007800, 0x00040000 },
- + { 0x00007804, 0xdb005012 },
- + { 0x00007808, 0x04924914 },
- + { 0x0000780c, 0x21084210 },
- + { 0x00007810, 0x6d801300 },
- + { 0x00007814, 0x0019beff },
- + { 0x00007818, 0x07e40000 },
- + { 0x0000781c, 0x00492000 },
- + { 0x00007820, 0x92492480 },
- + { 0x00007824, 0x00040000 },
- + { 0x00007828, 0xdb005012 },
- + { 0x0000782c, 0x04924914 },
- + { 0x00007830, 0x21084210 },
- + { 0x00007834, 0x6d801300 },
- + { 0x00007838, 0x0019beff },
- + { 0x0000783c, 0x07e40000 },
- + { 0x00007840, 0x00492000 },
- + { 0x00007844, 0x92492480 },
- + { 0x00007848, 0x00120000 },
- + { 0x00007850, 0x54214514 },
- + { 0x00007858, 0x92592692 },
- + { 0x00007860, 0x52802000 },
- + { 0x00007864, 0x0a8e370e },
- + { 0x00007868, 0xc0102850 },
- + { 0x0000786c, 0x812d4000 },
- + { 0x00007874, 0x001b6db0 },
- + { 0x00007878, 0x00376b63 },
- + { 0x0000787c, 0x06db6db6 },
- + { 0x00007880, 0x006d8000 },
- + { 0x00007884, 0xffeffffe },
- + { 0x00007888, 0xffeffffe },
- + { 0x00007890, 0x00060aeb },
- + { 0x00007894, 0x5a108000 },
- + { 0x00007898, 0x2a850160 },
- +};
- +
- +/* XXX 9280 2 */
- +static const u32 ar9280Modes_9280_2[][6] = {
- + { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
- + { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
- + { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
- + { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
- + { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
- + { 0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f },
- + { 0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810 },
- + { 0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a, 0x0000320a },
- + { 0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440, 0x00006880 },
- + { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
- + { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
- + { 0x00009824, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e },
- + { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
- + { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- + { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
- + { 0x00009840, 0x206a022e, 0x206a022e, 0x206a012e, 0x206a012e, 0x206a012e },
- + { 0x00009844, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0, 0x037216a0 },
- + { 0x00009850, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2, 0x6c4000e2 },
- + { 0x00009858, 0x7ec88d2e, 0x7ec88d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
- + { 0x0000985c, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e, 0x31395d5e },
- + { 0x00009860, 0x00048d18, 0x00048d18, 0x00048d20, 0x00048d20, 0x00048d18 },
- + { 0x00009864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- + { 0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
- + { 0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881 },
- + { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
- + { 0x00009918, 0x0000000a, 0x00000014, 0x00000268, 0x0000000b, 0x00000016 },
- + { 0x00009924, 0xd00a8a0b, 0xd00a8a0b, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d },
- + { 0x00009944, 0xffbc1010, 0xffbc1010, 0xffbc1010, 0xffbc1010, 0xffbc1010 },
- + { 0x00009960, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010 },
- + { 0x0000a960, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010 },
- + { 0x00009964, 0x00000210, 0x00000210, 0x00000210, 0x00000210, 0x00000210 },
- + { 0x0000c968, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce, 0x000003ce },
- + { 0x000099b8, 0x0000001c, 0x0000001c, 0x0000001c, 0x0000001c, 0x0000001c },
- + { 0x000099bc, 0x00000a00, 0x00000a00, 0x00000c00, 0x00000c00, 0x00000c00 },
- + { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
- + { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
- + { 0x000099c8, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329 },
- + { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
- + { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
- + { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a204, 0x00000444, 0x00000444, 0x00000444, 0x00000444, 0x00000444 },
- + { 0x0000a20c, 0x00000014, 0x00000014, 0x0001f019, 0x0001f019, 0x0001f019 },
- + { 0x0000b20c, 0x00000014, 0x00000014, 0x0001f019, 0x0001f019, 0x0001f019 },
- + { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
- + { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- + { 0x0000a23c, 0x13c88000, 0x13c88000, 0x13c88001, 0x13c88000, 0x13c88000 },
- + { 0x0000a250, 0x001ff000, 0x001ff000, 0x0004a000, 0x0004a000, 0x0004a000 },
- + { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
- + { 0x0000a388, 0x0c000000, 0x0c000000, 0x08000000, 0x0c000000, 0x0c000000 },
- + { 0x0000a3d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x00007894, 0x5a508000, 0x5a508000, 0x5a508000, 0x5a508000, 0x5a508000 },
- +};
- +
- +static const u32 ar9280Common_9280_2[][2] = {
- + { 0x0000000c, 0x00000000 },
- + { 0x00000030, 0x00020015 },
- + { 0x00000034, 0x00000005 },
- + { 0x00000040, 0x00000000 },
- + { 0x00000044, 0x00000008 },
- + { 0x00000048, 0x00000008 },
- + { 0x0000004c, 0x00000010 },
- + { 0x00000050, 0x00000000 },
- + { 0x00000054, 0x0000001f },
- + { 0x00000800, 0x00000000 },
- + { 0x00000804, 0x00000000 },
- + { 0x00000808, 0x00000000 },
- + { 0x0000080c, 0x00000000 },
- + { 0x00000810, 0x00000000 },
- + { 0x00000814, 0x00000000 },
- + { 0x00000818, 0x00000000 },
- + { 0x0000081c, 0x00000000 },
- + { 0x00000820, 0x00000000 },
- + { 0x00000824, 0x00000000 },
- + { 0x00001040, 0x002ffc0f },
- + { 0x00001044, 0x002ffc0f },
- + { 0x00001048, 0x002ffc0f },
- + { 0x0000104c, 0x002ffc0f },
- + { 0x00001050, 0x002ffc0f },
- + { 0x00001054, 0x002ffc0f },
- + { 0x00001058, 0x002ffc0f },
- + { 0x0000105c, 0x002ffc0f },
- + { 0x00001060, 0x002ffc0f },
- + { 0x00001064, 0x002ffc0f },
- + { 0x00001230, 0x00000000 },
- + { 0x00001270, 0x00000000 },
- + { 0x00001038, 0x00000000 },
- + { 0x00001078, 0x00000000 },
- + { 0x000010b8, 0x00000000 },
- + { 0x000010f8, 0x00000000 },
- + { 0x00001138, 0x00000000 },
- + { 0x00001178, 0x00000000 },
- + { 0x000011b8, 0x00000000 },
- + { 0x000011f8, 0x00000000 },
- + { 0x00001238, 0x00000000 },
- + { 0x00001278, 0x00000000 },
- + { 0x000012b8, 0x00000000 },
- + { 0x000012f8, 0x00000000 },
- + { 0x00001338, 0x00000000 },
- + { 0x00001378, 0x00000000 },
- + { 0x000013b8, 0x00000000 },
- + { 0x000013f8, 0x00000000 },
- + { 0x00001438, 0x00000000 },
- + { 0x00001478, 0x00000000 },
- + { 0x000014b8, 0x00000000 },
- + { 0x000014f8, 0x00000000 },
- + { 0x00001538, 0x00000000 },
- + { 0x00001578, 0x00000000 },
- + { 0x000015b8, 0x00000000 },
- + { 0x000015f8, 0x00000000 },
- + { 0x00001638, 0x00000000 },
- + { 0x00001678, 0x00000000 },
- + { 0x000016b8, 0x00000000 },
- + { 0x000016f8, 0x00000000 },
- + { 0x00001738, 0x00000000 },
- + { 0x00001778, 0x00000000 },
- + { 0x000017b8, 0x00000000 },
- + { 0x000017f8, 0x00000000 },
- + { 0x0000103c, 0x00000000 },
- + { 0x0000107c, 0x00000000 },
- + { 0x000010bc, 0x00000000 },
- + { 0x000010fc, 0x00000000 },
- + { 0x0000113c, 0x00000000 },
- + { 0x0000117c, 0x00000000 },
- + { 0x000011bc, 0x00000000 },
- + { 0x000011fc, 0x00000000 },
- + { 0x0000123c, 0x00000000 },
- + { 0x0000127c, 0x00000000 },
- + { 0x000012bc, 0x00000000 },
- + { 0x000012fc, 0x00000000 },
- + { 0x0000133c, 0x00000000 },
- + { 0x0000137c, 0x00000000 },
- + { 0x000013bc, 0x00000000 },
- + { 0x000013fc, 0x00000000 },
- + { 0x0000143c, 0x00000000 },
- + { 0x0000147c, 0x00000000 },
- + { 0x00004030, 0x00000002 },
- + { 0x0000403c, 0x00000002 },
- + { 0x00004024, 0x0000001f },
- + { 0x00004060, 0x00000000 },
- + { 0x00004064, 0x00000000 },
- + { 0x00007010, 0x00000033 },
- + { 0x00007034, 0x00000002 },
- + { 0x00007038, 0x000004c2 },
- + { 0x00008004, 0x00000000 },
- + { 0x00008008, 0x00000000 },
- + { 0x0000800c, 0x00000000 },
- + { 0x00008018, 0x00000700 },
- + { 0x00008020, 0x00000000 },
- + { 0x00008038, 0x00000000 },
- + { 0x0000803c, 0x00000000 },
- + { 0x00008048, 0x40000000 },
- + { 0x00008054, 0x00000000 },
- + { 0x00008058, 0x00000000 },
- + { 0x0000805c, 0x000fc78f },
- + { 0x00008060, 0x0000000f },
- + { 0x00008064, 0x00000000 },
- + { 0x00008070, 0x00000000 },
- + { 0x000080c0, 0x2a80001a },
- + { 0x000080c4, 0x05dc01e0 },
- + { 0x000080c8, 0x1f402710 },
- + { 0x000080cc, 0x01f40000 },
- + { 0x000080d0, 0x00001e00 },
- + { 0x000080d4, 0x00000000 },
- + { 0x000080d8, 0x00400000 },
- + { 0x000080e0, 0xffffffff },
- + { 0x000080e4, 0x0000ffff },
- + { 0x000080e8, 0x003f3f3f },
- + { 0x000080ec, 0x00000000 },
- + { 0x000080f0, 0x00000000 },
- + { 0x000080f4, 0x00000000 },
- + { 0x000080f8, 0x00000000 },
- + { 0x000080fc, 0x00020000 },
- + { 0x00008100, 0x00020000 },
- + { 0x00008104, 0x00000001 },
- + { 0x00008108, 0x00000052 },
- + { 0x0000810c, 0x00000000 },
- + { 0x00008110, 0x00000168 },
- + { 0x00008118, 0x000100aa },
- + { 0x0000811c, 0x00003210 },
- + { 0x00008124, 0x00000000 },
- + { 0x00008128, 0x00000000 },
- + { 0x0000812c, 0x00000000 },
- + { 0x00008130, 0x00000000 },
- + { 0x00008134, 0x00000000 },
- + { 0x00008138, 0x00000000 },
- + { 0x0000813c, 0x00000000 },
- + { 0x00008144, 0xffffffff },
- + { 0x00008168, 0x00000000 },
- + { 0x0000816c, 0x00000000 },
- + { 0x00008170, 0x32143320 },
- + { 0x00008174, 0xfaa4fa50 },
- + { 0x00008178, 0x00000100 },
- + { 0x0000817c, 0x00000000 },
- + { 0x000081c0, 0x00000000 },
- + { 0x000081ec, 0x00000000 },
- + { 0x000081f0, 0x00000000 },
- + { 0x000081f4, 0x00000000 },
- + { 0x000081f8, 0x00000000 },
- + { 0x000081fc, 0x00000000 },
- + { 0x00008200, 0x00000000 },
- + { 0x00008204, 0x00000000 },
- + { 0x00008208, 0x00000000 },
- + { 0x0000820c, 0x00000000 },
- + { 0x00008210, 0x00000000 },
- + { 0x00008214, 0x00000000 },
- + { 0x00008218, 0x00000000 },
- + { 0x0000821c, 0x00000000 },
- + { 0x00008220, 0x00000000 },
- + { 0x00008224, 0x00000000 },
- + { 0x00008228, 0x00000000 },
- + { 0x0000822c, 0x00000000 },
- + { 0x00008230, 0x00000000 },
- + { 0x00008234, 0x00000000 },
- + { 0x00008238, 0x00000000 },
- + { 0x0000823c, 0x00000000 },
- + { 0x00008240, 0x00100000 },
- + { 0x00008244, 0x0010f400 },
- + { 0x00008248, 0x00000100 },
- + { 0x0000824c, 0x0001e800 },
- + { 0x00008250, 0x00000000 },
- + { 0x00008254, 0x00000000 },
- + { 0x00008258, 0x00000000 },
- + { 0x0000825c, 0x400000ff },
- + { 0x00008260, 0x00080922 },
- + { 0x00008264, 0xa8a00010 },
- + { 0x00008270, 0x00000000 },
- + { 0x00008274, 0x40000000 },
- + { 0x00008278, 0x003e4180 },
- + { 0x0000827c, 0x00000000 },
- + { 0x00008284, 0x0000002c },
- + { 0x00008288, 0x0000002c },
- + { 0x0000828c, 0x00000000 },
- + { 0x00008294, 0x00000000 },
- + { 0x00008298, 0x00000000 },
- + { 0x0000829c, 0x00000000 },
- + { 0x00008300, 0x00000040 },
- + { 0x00008314, 0x00000000 },
- + { 0x00008328, 0x00000000 },
- + { 0x0000832c, 0x00000007 },
- + { 0x00008330, 0x00000302 },
- + { 0x00008334, 0x00000e00 },
- + { 0x00008338, 0x00ff0000 },
- + { 0x0000833c, 0x00000000 },
- + { 0x00008340, 0x000107ff },
- + { 0x00008344, 0x00481043 },
- + { 0x00009808, 0x00000000 },
- + { 0x0000980c, 0xafa68e30 },
- + { 0x00009810, 0xfd14e000 },
- + { 0x00009814, 0x9c0a9f6b },
- + { 0x0000981c, 0x00000000 },
- + { 0x0000982c, 0x0000a000 },
- + { 0x00009830, 0x00000000 },
- + { 0x0000983c, 0x00200400 },
- + { 0x0000984c, 0x0040233c },
- + { 0x0000a84c, 0x0040233c },
- + { 0x00009854, 0x00000044 },
- + { 0x00009900, 0x00000000 },
- + { 0x00009904, 0x00000000 },
- + { 0x00009908, 0x00000000 },
- + { 0x0000990c, 0x00000000 },
- + { 0x00009910, 0x01002310 },
- + { 0x0000991c, 0x10000fff },
- + { 0x00009920, 0x04900000 },
- + { 0x0000a920, 0x04900000 },
- + { 0x00009928, 0x00000001 },
- + { 0x0000992c, 0x00000004 },
- + { 0x00009934, 0x1e1f2022 },
- + { 0x00009938, 0x0a0b0c0d },
- + { 0x0000993c, 0x00000000 },
- + { 0x00009948, 0x9280c00a },
- + { 0x0000994c, 0x00020028 },
- + { 0x00009954, 0x5f3ca3de },
- + { 0x00009958, 0x2108ecff },
- + { 0x00009940, 0x14750604 },
- + { 0x0000c95c, 0x004b6a8e },
- + { 0x00009970, 0x190fb515 },
- + { 0x00009974, 0x00000000 },
- + { 0x00009978, 0x00000001 },
- + { 0x0000997c, 0x00000000 },
- + { 0x00009980, 0x00000000 },
- + { 0x00009984, 0x00000000 },
- + { 0x00009988, 0x00000000 },
- + { 0x0000998c, 0x00000000 },
- + { 0x00009990, 0x00000000 },
- + { 0x00009994, 0x00000000 },
- + { 0x00009998, 0x00000000 },
- + { 0x0000999c, 0x00000000 },
- + { 0x000099a0, 0x00000000 },
- + { 0x000099a4, 0x00000001 },
- + { 0x000099a8, 0x201fff00 },
- + { 0x000099ac, 0x006f0000 },
- + { 0x000099b0, 0x03051000 },
- + { 0x000099b4, 0x00000820 },
- + { 0x000099dc, 0x00000000 },
- + { 0x000099e0, 0x00000000 },
- + { 0x000099e4, 0xaaaaaaaa },
- + { 0x000099e8, 0x3c466478 },
- + { 0x000099ec, 0x0cc80caa },
- + { 0x000099f0, 0x00000000 },
- + { 0x000099fc, 0x00001042 },
- + { 0x0000a208, 0x803e4788 },
- + { 0x0000a210, 0x4080a333 },
- + { 0x0000a214, 0x40206c10 },
- + { 0x0000a218, 0x009c4060 },
- + { 0x0000a220, 0x01834061 },
- + { 0x0000a224, 0x00000400 },
- + { 0x0000a228, 0x000003b5 },
- + { 0x0000a22c, 0x233f7180 },
- + { 0x0000a234, 0x20202020 },
- + { 0x0000a238, 0x20202020 },
- + { 0x0000a240, 0x38490a20 },
- + { 0x0000a244, 0x00007bb6 },
- + { 0x0000a248, 0x0fff3ffc },
- + { 0x0000a24c, 0x00000000 },
- + { 0x0000a254, 0x00000000 },
- + { 0x0000a258, 0x0cdbd380 },
- + { 0x0000a25c, 0x0f0f0f01 },
- + { 0x0000a260, 0xdfa91f01 },
- + { 0x0000a268, 0x00000000 },
- + { 0x0000a26c, 0x0e79e5c6 },
- + { 0x0000b26c, 0x0e79e5c6 },
- + { 0x0000d270, 0x00820820 },
- + { 0x0000a278, 0x1ce739ce },
- + { 0x0000d35c, 0x07ffffef },
- + { 0x0000d360, 0x0fffffe7 },
- + { 0x0000d364, 0x17ffffe5 },
- + { 0x0000d368, 0x1fffffe4 },
- + { 0x0000d36c, 0x37ffffe3 },
- + { 0x0000d370, 0x3fffffe3 },
- + { 0x0000d374, 0x57ffffe3 },
- + { 0x0000d378, 0x5fffffe2 },
- + { 0x0000d37c, 0x7fffffe2 },
- + { 0x0000d380, 0x7f3c7bba },
- + { 0x0000d384, 0xf3307ff0 },
- + { 0x0000a38c, 0x20202020 },
- + { 0x0000a390, 0x20202020 },
- + { 0x0000a394, 0x1ce739ce },
- + { 0x0000a398, 0x000001ce },
- + { 0x0000a39c, 0x00000001 },
- + { 0x0000a3a0, 0x00000000 },
- + { 0x0000a3a4, 0x00000000 },
- + { 0x0000a3a8, 0x00000000 },
- + { 0x0000a3ac, 0x00000000 },
- + { 0x0000a3b0, 0x00000000 },
- + { 0x0000a3b4, 0x00000000 },
- + { 0x0000a3b8, 0x00000000 },
- + { 0x0000a3bc, 0x00000000 },
- + { 0x0000a3c0, 0x00000000 },
- + { 0x0000a3c4, 0x00000000 },
- + { 0x0000a3c8, 0x00000246 },
- + { 0x0000a3cc, 0x20202020 },
- + { 0x0000a3d0, 0x20202020 },
- + { 0x0000a3d4, 0x20202020 },
- + { 0x0000a3dc, 0x1ce739ce },
- + { 0x0000a3e0, 0x000001ce },
- + { 0x0000a3e4, 0x00000000 },
- + { 0x0000a3e8, 0x18c43433 },
- + { 0x0000a3ec, 0x00f70081 },
- + { 0x00007800, 0x00040000 },
- + { 0x00007804, 0xdb005012 },
- + { 0x00007808, 0x04924914 },
- + { 0x0000780c, 0x21084210 },
- + { 0x00007810, 0x6d801300 },
- + { 0x00007818, 0x07e41000 },
- + { 0x00007824, 0x00040000 },
- + { 0x00007828, 0xdb005012 },
- + { 0x0000782c, 0x04924914 },
- + { 0x00007830, 0x21084210 },
- + { 0x00007834, 0x6d801300 },
- + { 0x0000783c, 0x07e40000 },
- + { 0x00007848, 0x00100000 },
- + { 0x0000784c, 0x773f0567 },
- + { 0x00007850, 0x54214514 },
- + { 0x00007854, 0x12035828 },
- + { 0x00007858, 0x9259269a },
- + { 0x00007860, 0x52802000 },
- + { 0x00007864, 0x0a8e370e },
- + { 0x00007868, 0xc0102850 },
- + { 0x0000786c, 0x812d4000 },
- + { 0x00007870, 0x807ec400 },
- + { 0x00007874, 0x001b6db0 },
- + { 0x00007878, 0x00376b63 },
- + { 0x0000787c, 0x06db6db6 },
- + { 0x00007880, 0x006d8000 },
- + { 0x00007884, 0xffeffffe },
- + { 0x00007888, 0xffeffffe },
- + { 0x0000788c, 0x00010000 },
- + { 0x00007890, 0x02060aeb },
- + { 0x00007898, 0x2a850160 },
- +};
- +
- +static const u32 ar9280Modes_fast_clock_9280_2[][3] = {
- + { 0x00001030, 0x00000268, 0x000004d0 },
- + { 0x00001070, 0x0000018c, 0x00000318 },
- + { 0x000010b0, 0x00000fd0, 0x00001fa0 },
- + { 0x00008014, 0x044c044c, 0x08980898 },
- + { 0x0000801c, 0x148ec02b, 0x148ec057 },
- + { 0x00008318, 0x000044c0, 0x00008980 },
- + { 0x00009820, 0x02020200, 0x02020200 },
- + { 0x00009824, 0x01000f0f, 0x01000f0f },
- + { 0x00009828, 0x0b020001, 0x0b020001 },
- + { 0x00009834, 0x00000f0f, 0x00000f0f },
- + { 0x00009844, 0x03721821, 0x03721821 },
- + { 0x00009914, 0x00000898, 0x00001130 },
- + { 0x00009918, 0x0000000b, 0x00000016 },
- +};
- +
- +static const u32 ar9280Modes_backoff_23db_rxgain_9280_2[][6] = {
- + { 0x00009a00, 0x00008184, 0x00008184, 0x00000290, 0x00000290, 0x00000290 },
- + { 0x00009a04, 0x00008188, 0x00008188, 0x00000300, 0x00000300, 0x00000300 },
- + { 0x00009a08, 0x0000818c, 0x0000818c, 0x00000304, 0x00000304, 0x00000304 },
- + { 0x00009a0c, 0x00008190, 0x00008190, 0x00000308, 0x00000308, 0x00000308 },
- + { 0x00009a10, 0x00008194, 0x00008194, 0x0000030c, 0x0000030c, 0x0000030c },
- + { 0x00009a14, 0x00008200, 0x00008200, 0x00008000, 0x00008000, 0x00008000 },
- + { 0x00009a18, 0x00008204, 0x00008204, 0x00008004, 0x00008004, 0x00008004 },
- + { 0x00009a1c, 0x00008208, 0x00008208, 0x00008008, 0x00008008, 0x00008008 },
- + { 0x00009a20, 0x0000820c, 0x0000820c, 0x0000800c, 0x0000800c, 0x0000800c },
- + { 0x00009a24, 0x00008210, 0x00008210, 0x00008080, 0x00008080, 0x00008080 },
- + { 0x00009a28, 0x00008214, 0x00008214, 0x00008084, 0x00008084, 0x00008084 },
- + { 0x00009a2c, 0x00008280, 0x00008280, 0x00008088, 0x00008088, 0x00008088 },
- + { 0x00009a30, 0x00008284, 0x00008284, 0x0000808c, 0x0000808c, 0x0000808c },
- + { 0x00009a34, 0x00008288, 0x00008288, 0x00008100, 0x00008100, 0x00008100 },
- + { 0x00009a38, 0x0000828c, 0x0000828c, 0x00008104, 0x00008104, 0x00008104 },
- + { 0x00009a3c, 0x00008290, 0x00008290, 0x00008108, 0x00008108, 0x00008108 },
- + { 0x00009a40, 0x00008300, 0x00008300, 0x0000810c, 0x0000810c, 0x0000810c },
- + { 0x00009a44, 0x00008304, 0x00008304, 0x00008110, 0x00008110, 0x00008110 },
- + { 0x00009a48, 0x00008308, 0x00008308, 0x00008114, 0x00008114, 0x00008114 },
- + { 0x00009a4c, 0x0000830c, 0x0000830c, 0x00008180, 0x00008180, 0x00008180 },
- + { 0x00009a50, 0x00008310, 0x00008310, 0x00008184, 0x00008184, 0x00008184 },
- + { 0x00009a54, 0x00008314, 0x00008314, 0x00008188, 0x00008188, 0x00008188 },
- + { 0x00009a58, 0x00008380, 0x00008380, 0x0000818c, 0x0000818c, 0x0000818c },
- + { 0x00009a5c, 0x00008384, 0x00008384, 0x00008190, 0x00008190, 0x00008190 },
- + { 0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194, 0x00008194 },
- + { 0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0, 0x000081a0 },
- + { 0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c, 0x0000820c },
- + { 0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8, 0x000081a8 },
- + { 0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284, 0x00008284 },
- + { 0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288, 0x00008288 },
- + { 0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224, 0x00008224 },
- + { 0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290, 0x00008290 },
- + { 0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300, 0x00008300 },
- + { 0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304, 0x00008304 },
- + { 0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308, 0x00008308 },
- + { 0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c, 0x0000830c },
- + { 0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380, 0x00008380 },
- + { 0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384, 0x00008384 },
- + { 0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700, 0x00008700 },
- + { 0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704, 0x00008704 },
- + { 0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708, 0x00008708 },
- + { 0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c, 0x0000870c },
- + { 0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780, 0x00008780 },
- + { 0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784, 0x00008784 },
- + { 0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00, 0x00008b00 },
- + { 0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04, 0x00008b04 },
- + { 0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08, 0x00008b08 },
- + { 0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c, 0x00008b0c },
- + { 0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b10, 0x00008b10, 0x00008b10 },
- + { 0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b14, 0x00008b14, 0x00008b14 },
- + { 0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b01, 0x00008b01, 0x00008b01 },
- + { 0x00009acc, 0x0000b380, 0x0000b380, 0x00008b05, 0x00008b05, 0x00008b05 },
- + { 0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b09, 0x00008b09, 0x00008b09 },
- + { 0x00009ad4, 0x0000b388, 0x0000b388, 0x00008b0d, 0x00008b0d, 0x00008b0d },
- + { 0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008b11, 0x00008b11, 0x00008b11 },
- + { 0x00009adc, 0x0000b390, 0x0000b390, 0x00008b15, 0x00008b15, 0x00008b15 },
- + { 0x00009ae0, 0x0000b394, 0x0000b394, 0x00008b02, 0x00008b02, 0x00008b02 },
- + { 0x00009ae4, 0x0000b398, 0x0000b398, 0x00008b06, 0x00008b06, 0x00008b06 },
- + { 0x00009ae8, 0x0000b780, 0x0000b780, 0x00008b0a, 0x00008b0a, 0x00008b0a },
- + { 0x00009aec, 0x0000b784, 0x0000b784, 0x00008b0e, 0x00008b0e, 0x00008b0e },
- + { 0x00009af0, 0x0000b788, 0x0000b788, 0x00008b12, 0x00008b12, 0x00008b12 },
- + { 0x00009af4, 0x0000b78c, 0x0000b78c, 0x00008b16, 0x00008b16, 0x00008b16 },
- + { 0x00009af8, 0x0000b790, 0x0000b790, 0x00008b03, 0x00008b03, 0x00008b03 },
- + { 0x00009afc, 0x0000b794, 0x0000b794, 0x00008b07, 0x00008b07, 0x00008b07 },
- + { 0x00009b00, 0x0000b798, 0x0000b798, 0x00008b0b, 0x00008b0b, 0x00008b0b },
- + { 0x00009b04, 0x0000d784, 0x0000d784, 0x00008b0f, 0x00008b0f, 0x00008b0f },
- + { 0x00009b08, 0x0000d788, 0x0000d788, 0x00008b13, 0x00008b13, 0x00008b13 },
- + { 0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00008b17, 0x00008b17, 0x00008b17 },
- + { 0x00009b10, 0x0000d790, 0x0000d790, 0x00008b23, 0x00008b23, 0x00008b23 },
- + { 0x00009b14, 0x0000f780, 0x0000f780, 0x00008b27, 0x00008b27, 0x00008b27 },
- + { 0x00009b18, 0x0000f784, 0x0000f784, 0x00008b2b, 0x00008b2b, 0x00008b2b },
- + { 0x00009b1c, 0x0000f788, 0x0000f788, 0x00008b2f, 0x00008b2f, 0x00008b2f },
- + { 0x00009b20, 0x0000f78c, 0x0000f78c, 0x00008b33, 0x00008b33, 0x00008b33 },
- + { 0x00009b24, 0x0000f790, 0x0000f790, 0x00008b37, 0x00008b37, 0x00008b37 },
- + { 0x00009b28, 0x0000f794, 0x0000f794, 0x00008b43, 0x00008b43, 0x00008b43 },
- + { 0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x00008b47, 0x00008b47, 0x00008b47 },
- + { 0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x00008b4b, 0x00008b4b, 0x00008b4b },
- + { 0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x00008b4f, 0x00008b4f, 0x00008b4f },
- + { 0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x00008b53, 0x00008b53, 0x00008b53 },
- + { 0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x00008b57, 0x00008b57, 0x00008b57 },
- + { 0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b98, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009b9c, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009ba0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009ba4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009ba8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bac, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bb0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bb4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bb8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bbc, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bc0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bc4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bc8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bcc, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bd0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bd4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bd8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bdc, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009be0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009be4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009be8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bec, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bf0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bf4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bf8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009bfc, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- + { 0x00009848, 0x00001066, 0x00001066, 0x00001050, 0x00001050, 0x00001050 },
- + { 0x0000a848, 0x00001066, 0x00001066, 0x00001050, 0x00001050, 0x00001050 },
- +};
- +
- +static const u32 ar9280Modes_original_rxgain_9280_2[][6] = {
- + { 0x00009a00, 0x00008184, 0x00008184, 0x00000290, 0x00000290, 0x00000290 },
- + { 0x00009a04, 0x00008188, 0x00008188, 0x00000300, 0x00000300, 0x00000300 },
- + { 0x00009a08, 0x0000818c, 0x0000818c, 0x00000304, 0x00000304, 0x00000304 },
- + { 0x00009a0c, 0x00008190, 0x00008190, 0x00000308, 0x00000308, 0x00000308 },
- + { 0x00009a10, 0x00008194, 0x00008194, 0x0000030c, 0x0000030c, 0x0000030c },
- + { 0x00009a14, 0x00008200, 0x00008200, 0x00008000, 0x00008000, 0x00008000 },
- + { 0x00009a18, 0x00008204, 0x00008204, 0x00008004, 0x00008004, 0x00008004 },
- + { 0x00009a1c, 0x00008208, 0x00008208, 0x00008008, 0x00008008, 0x00008008 },
- + { 0x00009a20, 0x0000820c, 0x0000820c, 0x0000800c, 0x0000800c, 0x0000800c },
- + { 0x00009a24, 0x00008210, 0x00008210, 0x00008080, 0x00008080, 0x00008080 },
- + { 0x00009a28, 0x00008214, 0x00008214, 0x00008084, 0x00008084, 0x00008084 },
- + { 0x00009a2c, 0x00008280, 0x00008280, 0x00008088, 0x00008088, 0x00008088 },
- + { 0x00009a30, 0x00008284, 0x00008284, 0x0000808c, 0x0000808c, 0x0000808c },
- + { 0x00009a34, 0x00008288, 0x00008288, 0x00008100, 0x00008100, 0x00008100 },
- + { 0x00009a38, 0x0000828c, 0x0000828c, 0x00008104, 0x00008104, 0x00008104 },
- + { 0x00009a3c, 0x00008290, 0x00008290, 0x00008108, 0x00008108, 0x00008108 },
- + { 0x00009a40, 0x00008300, 0x00008300, 0x0000810c, 0x0000810c, 0x0000810c },
- + { 0x00009a44, 0x00008304, 0x00008304, 0x00008110, 0x00008110, 0x00008110 },
- + { 0x00009a48, 0x00008308, 0x00008308, 0x00008114, 0x00008114, 0x00008114 },
- + { 0x00009a4c, 0x0000830c, 0x0000830c, 0x00008180, 0x00008180, 0x00008180 },
- + { 0x00009a50, 0x00008310, 0x00008310, 0x00008184, 0x00008184, 0x00008184 },
- + { 0x00009a54, 0x00008314, 0x00008314, 0x00008188, 0x00008188, 0x00008188 },
- + { 0x00009a58, 0x00008380, 0x00008380, 0x0000818c, 0x0000818c, 0x0000818c },
- + { 0x00009a5c, 0x00008384, 0x00008384, 0x00008190, 0x00008190, 0x00008190 },
- + { 0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194, 0x00008194 },
- + { 0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0, 0x000081a0 },
- + { 0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c, 0x0000820c },
- + { 0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8, 0x000081a8 },
- + { 0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284, 0x00008284 },
- + { 0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288, 0x00008288 },
- + { 0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224, 0x00008224 },
- + { 0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290, 0x00008290 },
- + { 0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300, 0x00008300 },
- + { 0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304, 0x00008304 },
- + { 0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308, 0x00008308 },
- + { 0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c, 0x0000830c },
- + { 0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380, 0x00008380 },
- + { 0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384, 0x00008384 },
- + { 0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700, 0x00008700 },
- + { 0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704, 0x00008704 },
- + { 0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708, 0x00008708 },
- + { 0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c, 0x0000870c },
- + { 0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780, 0x00008780 },
- + { 0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784, 0x00008784 },
- + { 0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00, 0x00008b00 },
- + { 0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04, 0x00008b04 },
- + { 0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08, 0x00008b08 },
- + { 0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c, 0x00008b0c },
- + { 0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b80, 0x00008b80, 0x00008b80 },
- + { 0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b84, 0x00008b84, 0x00008b84 },
- + { 0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b88, 0x00008b88, 0x00008b88 },
- + { 0x00009acc, 0x0000b380, 0x0000b380, 0x00008b8c, 0x00008b8c, 0x00008b8c },
- + { 0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b90, 0x00008b90, 0x00008b90 },
- + { 0x00009ad4, 0x0000b388, 0x0000b388, 0x00008f80, 0x00008f80, 0x00008f80 },
- + { 0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008f84, 0x00008f84, 0x00008f84 },
- + { 0x00009adc, 0x0000b390, 0x0000b390, 0x00008f88, 0x00008f88, 0x00008f88 },
- + { 0x00009ae0, 0x0000b394, 0x0000b394, 0x00008f8c, 0x00008f8c, 0x00008f8c },
- + { 0x00009ae4, 0x0000b398, 0x0000b398, 0x00008f90, 0x00008f90, 0x00008f90 },
- + { 0x00009ae8, 0x0000b780, 0x0000b780, 0x0000930c, 0x0000930c, 0x0000930c },
- + { 0x00009aec, 0x0000b784, 0x0000b784, 0x00009310, 0x00009310, 0x00009310 },
- + { 0x00009af0, 0x0000b788, 0x0000b788, 0x00009384, 0x00009384, 0x00009384 },
- + { 0x00009af4, 0x0000b78c, 0x0000b78c, 0x00009388, 0x00009388, 0x00009388 },
- + { 0x00009af8, 0x0000b790, 0x0000b790, 0x00009324, 0x00009324, 0x00009324 },
- + { 0x00009afc, 0x0000b794, 0x0000b794, 0x00009704, 0x00009704, 0x00009704 },
- + { 0x00009b00, 0x0000b798, 0x0000b798, 0x000096a4, 0x000096a4, 0x000096a4 },
- + { 0x00009b04, 0x0000d784, 0x0000d784, 0x000096a8, 0x000096a8, 0x000096a8 },
- + { 0x00009b08, 0x0000d788, 0x0000d788, 0x00009710, 0x00009710, 0x00009710 },
- + { 0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00009714, 0x00009714, 0x00009714 },
- + { 0x00009b10, 0x0000d790, 0x0000d790, 0x00009720, 0x00009720, 0x00009720 },
- + { 0x00009b14, 0x0000f780, 0x0000f780, 0x00009724, 0x00009724, 0x00009724 },
- + { 0x00009b18, 0x0000f784, 0x0000f784, 0x00009728, 0x00009728, 0x00009728 },
- + { 0x00009b1c, 0x0000f788, 0x0000f788, 0x0000972c, 0x0000972c, 0x0000972c },
- + { 0x00009b20, 0x0000f78c, 0x0000f78c, 0x000097a0, 0x000097a0, 0x000097a0 },
- + { 0x00009b24, 0x0000f790, 0x0000f790, 0x000097a4, 0x000097a4, 0x000097a4 },
- + { 0x00009b28, 0x0000f794, 0x0000f794, 0x000097a8, 0x000097a8, 0x000097a8 },
- + { 0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x000097b0, 0x000097b0, 0x000097b0 },
- + { 0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x000097b4, 0x000097b4, 0x000097b4 },
- + { 0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x000097b8, 0x000097b8, 0x000097b8 },
- + { 0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x000097a5, 0x000097a5, 0x000097a5 },
- + { 0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x000097a9, 0x000097a9, 0x000097a9 },
- + { 0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x000097ad, 0x000097ad, 0x000097ad },
- + { 0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x000097b1, 0x000097b1, 0x000097b1 },
- + { 0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x000097b5, 0x000097b5, 0x000097b5 },
- + { 0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x000097b9, 0x000097b9, 0x000097b9 },
- + { 0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x000097c5, 0x000097c5, 0x000097c5 },
- + { 0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x000097c9, 0x000097c9, 0x000097c9 },
- + { 0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x000097d1, 0x000097d1, 0x000097d1 },
- + { 0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x000097d5, 0x000097d5, 0x000097d5 },
- + { 0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x000097d9, 0x000097d9, 0x000097d9 },
- + { 0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x000097c6, 0x000097c6, 0x000097c6 },
- + { 0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x000097ca, 0x000097ca, 0x000097ca },
- + { 0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x000097ce, 0x000097ce, 0x000097ce },
- + { 0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x000097d2, 0x000097d2, 0x000097d2 },
- + { 0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x000097d6, 0x000097d6, 0x000097d6 },
- + { 0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x000097c3, 0x000097c3, 0x000097c3 },
- + { 0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x000097c7, 0x000097c7, 0x000097c7 },
- + { 0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x000097cb, 0x000097cb, 0x000097cb },
- + { 0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x000097cf, 0x000097cf, 0x000097cf },
- + { 0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x000097d7, 0x000097d7, 0x000097d7 },
- + { 0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009b98, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009b9c, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009ba0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009ba4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009ba8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bac, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bb0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bb4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bb8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bbc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bc0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bc4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bc8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bcc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bd0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bd4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bd8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bdc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009be0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009be4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009be8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bec, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bf0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bf4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bf8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009bfc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- + { 0x00009848, 0x00001066, 0x00001066, 0x00001063, 0x00001063, 0x00001063 },
- + { 0x0000a848, 0x00001066, 0x00001066, 0x00001063, 0x00001063, 0x00001063 },
- +};
- +
- +static const u32 ar9280Modes_backoff_13db_rxgain_9280_2[][6] = {
- + { 0x00009a00, 0x00008184, 0x00008184, 0x00000290, 0x00000290, 0x00000290 },
- + { 0x00009a04, 0x00008188, 0x00008188, 0x00000300, 0x00000300, 0x00000300 },
- + { 0x00009a08, 0x0000818c, 0x0000818c, 0x00000304, 0x00000304, 0x00000304 },
- + { 0x00009a0c, 0x00008190, 0x00008190, 0x00000308, 0x00000308, 0x00000308 },
- + { 0x00009a10, 0x00008194, 0x00008194, 0x0000030c, 0x0000030c, 0x0000030c },
- + { 0x00009a14, 0x00008200, 0x00008200, 0x00008000, 0x00008000, 0x00008000 },
- + { 0x00009a18, 0x00008204, 0x00008204, 0x00008004, 0x00008004, 0x00008004 },
- + { 0x00009a1c, 0x00008208, 0x00008208, 0x00008008, 0x00008008, 0x00008008 },
- + { 0x00009a20, 0x0000820c, 0x0000820c, 0x0000800c, 0x0000800c, 0x0000800c },
- + { 0x00009a24, 0x00008210, 0x00008210, 0x00008080, 0x00008080, 0x00008080 },
- + { 0x00009a28, 0x00008214, 0x00008214, 0x00008084, 0x00008084, 0x00008084 },
- + { 0x00009a2c, 0x00008280, 0x00008280, 0x00008088, 0x00008088, 0x00008088 },
- + { 0x00009a30, 0x00008284, 0x00008284, 0x0000808c, 0x0000808c, 0x0000808c },
- + { 0x00009a34, 0x00008288, 0x00008288, 0x00008100, 0x00008100, 0x00008100 },
- + { 0x00009a38, 0x0000828c, 0x0000828c, 0x00008104, 0x00008104, 0x00008104 },
- + { 0x00009a3c, 0x00008290, 0x00008290, 0x00008108, 0x00008108, 0x00008108 },
- + { 0x00009a40, 0x00008300, 0x00008300, 0x0000810c, 0x0000810c, 0x0000810c },
- + { 0x00009a44, 0x00008304, 0x00008304, 0x00008110, 0x00008110, 0x00008110 },
- + { 0x00009a48, 0x00008308, 0x00008308, 0x00008114, 0x00008114, 0x00008114 },
- + { 0x00009a4c, 0x0000830c, 0x0000830c, 0x00008180, 0x00008180, 0x00008180 },
- + { 0x00009a50, 0x00008310, 0x00008310, 0x00008184, 0x00008184, 0x00008184 },
- + { 0x00009a54, 0x00008314, 0x00008314, 0x00008188, 0x00008188, 0x00008188 },
- + { 0x00009a58, 0x00008380, 0x00008380, 0x0000818c, 0x0000818c, 0x0000818c },
- + { 0x00009a5c, 0x00008384, 0x00008384, 0x00008190, 0x00008190, 0x00008190 },
- + { 0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194, 0x00008194 },
- + { 0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0, 0x000081a0 },
- + { 0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c, 0x0000820c },
- + { 0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8, 0x000081a8 },
- + { 0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284, 0x00008284 },
- + { 0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288, 0x00008288 },
- + { 0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224, 0x00008224 },
- + { 0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290, 0x00008290 },
- + { 0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300, 0x00008300 },
- + { 0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304, 0x00008304 },
- + { 0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308, 0x00008308 },
- + { 0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c, 0x0000830c },
- + { 0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380, 0x00008380 },
- + { 0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384, 0x00008384 },
- + { 0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700, 0x00008700 },
- + { 0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704, 0x00008704 },
- + { 0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708, 0x00008708 },
- + { 0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c, 0x0000870c },
- + { 0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780, 0x00008780 },
- + { 0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784, 0x00008784 },
- + { 0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00, 0x00008b00 },
- + { 0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04, 0x00008b04 },
- + { 0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08, 0x00008b08 },
- + { 0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c, 0x00008b0c },
- + { 0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b80, 0x00008b80, 0x00008b80 },
- + { 0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b84, 0x00008b84, 0x00008b84 },
- + { 0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b88, 0x00008b88, 0x00008b88 },
- + { 0x00009acc, 0x0000b380, 0x0000b380, 0x00008b8c, 0x00008b8c, 0x00008b8c },
- + { 0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b90, 0x00008b90, 0x00008b90 },
- + { 0x00009ad4, 0x0000b388, 0x0000b388, 0x00008f80, 0x00008f80, 0x00008f80 },
- + { 0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008f84, 0x00008f84, 0x00008f84 },
- + { 0x00009adc, 0x0000b390, 0x0000b390, 0x00008f88, 0x00008f88, 0x00008f88 },
- + { 0x00009ae0, 0x0000b394, 0x0000b394, 0x00008f8c, 0x00008f8c, 0x00008f8c },
- + { 0x00009ae4, 0x0000b398, 0x0000b398, 0x00008f90, 0x00008f90, 0x00008f90 },
- + { 0x00009ae8, 0x0000b780, 0x0000b780, 0x00009310, 0x00009310, 0x00009310 },
- + { 0x00009aec, 0x0000b784, 0x0000b784, 0x00009314, 0x00009314, 0x00009314 },
- + { 0x00009af0, 0x0000b788, 0x0000b788, 0x00009320, 0x00009320, 0x00009320 },
- + { 0x00009af4, 0x0000b78c, 0x0000b78c, 0x00009324, 0x00009324, 0x00009324 },
- + { 0x00009af8, 0x0000b790, 0x0000b790, 0x00009328, 0x00009328, 0x00009328 },
- + { 0x00009afc, 0x0000b794, 0x0000b794, 0x0000932c, 0x0000932c, 0x0000932c },
- + { 0x00009b00, 0x0000b798, 0x0000b798, 0x00009330, 0x00009330, 0x00009330 },
- + { 0x00009b04, 0x0000d784, 0x0000d784, 0x00009334, 0x00009334, 0x00009334 },
- + { 0x00009b08, 0x0000d788, 0x0000d788, 0x00009321, 0x00009321, 0x00009321 },
- + { 0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00009325, 0x00009325, 0x00009325 },
- + { 0x00009b10, 0x0000d790, 0x0000d790, 0x00009329, 0x00009329, 0x00009329 },
- + { 0x00009b14, 0x0000f780, 0x0000f780, 0x0000932d, 0x0000932d, 0x0000932d },
- + { 0x00009b18, 0x0000f784, 0x0000f784, 0x00009331, 0x00009331, 0x00009331 },
- + { 0x00009b1c, 0x0000f788, 0x0000f788, 0x00009335, 0x00009335, 0x00009335 },
- + { 0x00009b20, 0x0000f78c, 0x0000f78c, 0x00009322, 0x00009322, 0x00009322 },
- + { 0x00009b24, 0x0000f790, 0x0000f790, 0x00009326, 0x00009326, 0x00009326 },
- + { 0x00009b28, 0x0000f794, 0x0000f794, 0x0000932a, 0x0000932a, 0x0000932a },
- + { 0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x0000932e, 0x0000932e, 0x0000932e },
- + { 0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x00009332, 0x00009332, 0x00009332 },
- + { 0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x00009336, 0x00009336, 0x00009336 },
- + { 0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x00009323, 0x00009323, 0x00009323 },
- + { 0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x00009327, 0x00009327, 0x00009327 },
- + { 0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x0000932b, 0x0000932b, 0x0000932b },
- + { 0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x0000932f, 0x0000932f, 0x0000932f },
- + { 0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x00009333, 0x00009333, 0x00009333 },
- + { 0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x00009337, 0x00009337, 0x00009337 },
- + { 0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x00009343, 0x00009343, 0x00009343 },
- + { 0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x00009347, 0x00009347, 0x00009347 },
- + { 0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x0000934b, 0x0000934b, 0x0000934b },
- + { 0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x0000934f, 0x0000934f, 0x0000934f },
- + { 0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x00009353, 0x00009353, 0x00009353 },
- + { 0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x00009357, 0x00009357, 0x00009357 },
- + { 0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009b98, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009b9c, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009ba0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009ba4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009ba8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bac, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bb0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bb4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bb8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bbc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bc0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bc4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bc8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bcc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bd0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bd4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bd8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bdc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009be0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009be4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009be8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bec, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bf0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bf4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bf8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009bfc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- + { 0x00009848, 0x00001066, 0x00001066, 0x0000105a, 0x0000105a, 0x0000105a },
- + { 0x0000a848, 0x00001066, 0x00001066, 0x0000105a, 0x0000105a, 0x0000105a },
- +};
- +
- +static const u32 ar9280Modes_high_power_tx_gain_9280_2[][6] = {
- + { 0x0000a274, 0x0a19e652, 0x0a19e652, 0x0a1aa652, 0x0a1aa652, 0x0a1aa652 },
- + { 0x0000a27c, 0x050739ce, 0x050739ce, 0x050739ce, 0x050739ce, 0x050739ce },
- + { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a304, 0x00003002, 0x00003002, 0x00004002, 0x00004002, 0x00004002 },
- + { 0x0000a308, 0x00006004, 0x00006004, 0x00007008, 0x00007008, 0x00007008 },
- + { 0x0000a30c, 0x0000a006, 0x0000a006, 0x0000c010, 0x0000c010, 0x0000c010 },
- + { 0x0000a310, 0x0000e012, 0x0000e012, 0x00010012, 0x00010012, 0x00010012 },
- + { 0x0000a314, 0x00011014, 0x00011014, 0x00013014, 0x00013014, 0x00013014 },
- + { 0x0000a318, 0x0001504a, 0x0001504a, 0x0001820a, 0x0001820a, 0x0001820a },
- + { 0x0000a31c, 0x0001904c, 0x0001904c, 0x0001b211, 0x0001b211, 0x0001b211 },
- + { 0x0000a320, 0x0001c04e, 0x0001c04e, 0x0001e213, 0x0001e213, 0x0001e213 },
- + { 0x0000a324, 0x00021092, 0x00021092, 0x00022411, 0x00022411, 0x00022411 },
- + { 0x0000a328, 0x0002510a, 0x0002510a, 0x00025413, 0x00025413, 0x00025413 },
- + { 0x0000a32c, 0x0002910c, 0x0002910c, 0x00029811, 0x00029811, 0x00029811 },
- + { 0x0000a330, 0x0002c18b, 0x0002c18b, 0x0002c813, 0x0002c813, 0x0002c813 },
- + { 0x0000a334, 0x0002f1cc, 0x0002f1cc, 0x00030a14, 0x00030a14, 0x00030a14 },
- + { 0x0000a338, 0x000321eb, 0x000321eb, 0x00035a50, 0x00035a50, 0x00035a50 },
- + { 0x0000a33c, 0x000341ec, 0x000341ec, 0x00039c4c, 0x00039c4c, 0x00039c4c },
- + { 0x0000a340, 0x000341ec, 0x000341ec, 0x0003de8a, 0x0003de8a, 0x0003de8a },
- + { 0x0000a344, 0x000341ec, 0x000341ec, 0x00042e92, 0x00042e92, 0x00042e92 },
- + { 0x0000a348, 0x000341ec, 0x000341ec, 0x00046ed2, 0x00046ed2, 0x00046ed2 },
- + { 0x0000a34c, 0x000341ec, 0x000341ec, 0x0004bed5, 0x0004bed5, 0x0004bed5 },
- + { 0x0000a350, 0x000341ec, 0x000341ec, 0x0004ff54, 0x0004ff54, 0x0004ff54 },
- + { 0x0000a354, 0x000341ec, 0x000341ec, 0x00055fd5, 0x00055fd5, 0x00055fd5 },
- + { 0x00007814, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff },
- + { 0x00007838, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff },
- + { 0x0000781c, 0x00172000, 0x00172000, 0x00172000, 0x00172000, 0x00172000 },
- + { 0x00007840, 0x00172000, 0x00172000, 0x00172000, 0x00172000, 0x00172000 },
- + { 0x00007820, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480 },
- + { 0x00007844, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480 },
- +};
- +
- +static const u32 ar9280Modes_original_tx_gain_9280_2[][6] = {
- + { 0x0000a274, 0x0a19c652, 0x0a19c652, 0x0a1aa652, 0x0a1aa652, 0x0a1aa652 },
- + { 0x0000a27c, 0x050701ce, 0x050701ce, 0x050701ce, 0x050701ce, 0x050701ce },
- + { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a304, 0x00003002, 0x00003002, 0x00003002, 0x00003002, 0x00003002 },
- + { 0x0000a308, 0x00006004, 0x00006004, 0x00008009, 0x00008009, 0x00008009 },
- + { 0x0000a30c, 0x0000a006, 0x0000a006, 0x0000b00b, 0x0000b00b, 0x0000b00b },
- + { 0x0000a310, 0x0000e012, 0x0000e012, 0x0000e012, 0x0000e012, 0x0000e012 },
- + { 0x0000a314, 0x00011014, 0x00011014, 0x00012048, 0x00012048, 0x00012048 },
- + { 0x0000a318, 0x0001504a, 0x0001504a, 0x0001604a, 0x0001604a, 0x0001604a },
- + { 0x0000a31c, 0x0001904c, 0x0001904c, 0x0001a211, 0x0001a211, 0x0001a211 },
- + { 0x0000a320, 0x0001c04e, 0x0001c04e, 0x0001e213, 0x0001e213, 0x0001e213 },
- + { 0x0000a324, 0x00020092, 0x00020092, 0x0002121b, 0x0002121b, 0x0002121b },
- + { 0x0000a328, 0x0002410a, 0x0002410a, 0x00024412, 0x00024412, 0x00024412 },
- + { 0x0000a32c, 0x0002710c, 0x0002710c, 0x00028414, 0x00028414, 0x00028414 },
- + { 0x0000a330, 0x0002b18b, 0x0002b18b, 0x0002b44a, 0x0002b44a, 0x0002b44a },
- + { 0x0000a334, 0x0002e1cc, 0x0002e1cc, 0x00030649, 0x00030649, 0x00030649 },
- + { 0x0000a338, 0x000321ec, 0x000321ec, 0x0003364b, 0x0003364b, 0x0003364b },
- + { 0x0000a33c, 0x000321ec, 0x000321ec, 0x00038a49, 0x00038a49, 0x00038a49 },
- + { 0x0000a340, 0x000321ec, 0x000321ec, 0x0003be48, 0x0003be48, 0x0003be48 },
- + { 0x0000a344, 0x000321ec, 0x000321ec, 0x0003ee4a, 0x0003ee4a, 0x0003ee4a },
- + { 0x0000a348, 0x000321ec, 0x000321ec, 0x00042e88, 0x00042e88, 0x00042e88 },
- + { 0x0000a34c, 0x000321ec, 0x000321ec, 0x00046e8a, 0x00046e8a, 0x00046e8a },
- + { 0x0000a350, 0x000321ec, 0x000321ec, 0x00049ec9, 0x00049ec9, 0x00049ec9 },
- + { 0x0000a354, 0x000321ec, 0x000321ec, 0x0004bf42, 0x0004bf42, 0x0004bf42 },
- + { 0x00007814, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff },
- + { 0x00007838, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff },
- + { 0x0000781c, 0x00392000, 0x00392000, 0x00392000, 0x00392000, 0x00392000 },
- + { 0x00007840, 0x00392000, 0x00392000, 0x00392000, 0x00392000, 0x00392000 },
- + { 0x00007820, 0x92592480, 0x92592480, 0x92592480, 0x92592480, 0x92592480 },
- + { 0x00007844, 0x92592480, 0x92592480, 0x92592480, 0x92592480, 0x92592480 },
- +};
- +
- +static const u32 ar9280PciePhy_clkreq_off_L1_9280[][2] = {
- + {0x00004040, 0x9248fd00 },
- + {0x00004040, 0x24924924 },
- + {0x00004040, 0xa8000019 },
- + {0x00004040, 0x13160820 },
- + {0x00004040, 0xe5980560 },
- + {0x00004040, 0xc01dcffc },
- + {0x00004040, 0x1aaabe41 },
- + {0x00004040, 0xbe105554 },
- + {0x00004040, 0x00043007 },
- + {0x00004044, 0x00000000 },
- +};
- +
- +static const u32 ar9280PciePhy_clkreq_always_on_L1_9280[][2] = {
- + {0x00004040, 0x9248fd00 },
- + {0x00004040, 0x24924924 },
- + {0x00004040, 0xa8000019 },
- + {0x00004040, 0x13160820 },
- + {0x00004040, 0xe5980560 },
- + {0x00004040, 0xc01dcffd },
- + {0x00004040, 0x1aaabe41 },
- + {0x00004040, 0xbe105554 },
- + {0x00004040, 0x00043007 },
- + {0x00004044, 0x00000000 },
- +};
- +
- +/* AR9285 Revsion 10*/
- +static const u_int32_t ar9285Modes_9285[][6] = {
- + { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
- + { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
- + { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
- + { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
- + { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
- + { 0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f },
- + { 0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440, 0x00006880 },
- + { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
- + { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
- + { 0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- + { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
- + { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- + { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
- + { 0x00009840, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e },
- + { 0x00009844, 0x0372161e, 0x0372161e, 0x03720020, 0x03720020, 0x037216a0 },
- + { 0x00009848, 0x00001066, 0x00001066, 0x0000004e, 0x0000004e, 0x00001059 },
- + { 0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2 },
- + { 0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
- + { 0x0000985c, 0x3139605e, 0x3139605e, 0x3136605e, 0x3136605e, 0x3139605e },
- + { 0x00009860, 0x00058d18, 0x00058d18, 0x00058d20, 0x00058d20, 0x00058d18 },
- + { 0x00009864, 0x0000fe00, 0x0000fe00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- + { 0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
- + { 0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881 },
- + { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
- + { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
- + { 0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d, 0xd00a800d },
- + { 0x00009944, 0xdfbc1010, 0xdfbc1010, 0xdfbc1020, 0xdfbc1020, 0xdfbc1010 },
- + { 0x00009960, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x00009964, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x000099b8, 0x00cf4d1c, 0x00cf4d1c, 0x00cf4d1c, 0x00cf4d1c, 0x00cf4d1c },
- + { 0x000099bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00, 0x00000c00 },
- + { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
- + { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
- + { 0x000099c8, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329 },
- + { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
- + { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
- + { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x00009a00, 0x00000000, 0x00000000, 0x00068084, 0x00068084, 0x00000000 },
- + { 0x00009a04, 0x00000000, 0x00000000, 0x00068088, 0x00068088, 0x00000000 },
- + { 0x00009a08, 0x00000000, 0x00000000, 0x0006808c, 0x0006808c, 0x00000000 },
- + { 0x00009a0c, 0x00000000, 0x00000000, 0x00068100, 0x00068100, 0x00000000 },
- + { 0x00009a10, 0x00000000, 0x00000000, 0x00068104, 0x00068104, 0x00000000 },
- + { 0x00009a14, 0x00000000, 0x00000000, 0x00068108, 0x00068108, 0x00000000 },
- + { 0x00009a18, 0x00000000, 0x00000000, 0x0006810c, 0x0006810c, 0x00000000 },
- + { 0x00009a1c, 0x00000000, 0x00000000, 0x00068110, 0x00068110, 0x00000000 },
- + { 0x00009a20, 0x00000000, 0x00000000, 0x00068114, 0x00068114, 0x00000000 },
- + { 0x00009a24, 0x00000000, 0x00000000, 0x00068180, 0x00068180, 0x00000000 },
- + { 0x00009a28, 0x00000000, 0x00000000, 0x00068184, 0x00068184, 0x00000000 },
- + { 0x00009a2c, 0x00000000, 0x00000000, 0x00068188, 0x00068188, 0x00000000 },
- + { 0x00009a30, 0x00000000, 0x00000000, 0x0006818c, 0x0006818c, 0x00000000 },
- + { 0x00009a34, 0x00000000, 0x00000000, 0x00068190, 0x00068190, 0x00000000 },
- + { 0x00009a38, 0x00000000, 0x00000000, 0x00068194, 0x00068194, 0x00000000 },
- + { 0x00009a3c, 0x00000000, 0x00000000, 0x000681a0, 0x000681a0, 0x00000000 },
- + { 0x00009a40, 0x00000000, 0x00000000, 0x0006820c, 0x0006820c, 0x00000000 },
- + { 0x00009a44, 0x00000000, 0x00000000, 0x000681a8, 0x000681a8, 0x00000000 },
- + { 0x00009a48, 0x00000000, 0x00000000, 0x00068284, 0x00068284, 0x00000000 },
- + { 0x00009a4c, 0x00000000, 0x00000000, 0x00068288, 0x00068288, 0x00000000 },
- + { 0x00009a50, 0x00000000, 0x00000000, 0x00068220, 0x00068220, 0x00000000 },
- + { 0x00009a54, 0x00000000, 0x00000000, 0x00068290, 0x00068290, 0x00000000 },
- + { 0x00009a58, 0x00000000, 0x00000000, 0x00068300, 0x00068300, 0x00000000 },
- + { 0x00009a5c, 0x00000000, 0x00000000, 0x00068304, 0x00068304, 0x00000000 },
- + { 0x00009a60, 0x00000000, 0x00000000, 0x00068308, 0x00068308, 0x00000000 },
- + { 0x00009a64, 0x00000000, 0x00000000, 0x0006830c, 0x0006830c, 0x00000000 },
- + { 0x00009a68, 0x00000000, 0x00000000, 0x00068380, 0x00068380, 0x00000000 },
- + { 0x00009a6c, 0x00000000, 0x00000000, 0x00068384, 0x00068384, 0x00000000 },
- + { 0x00009a70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000 },
- + { 0x00009a74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000 },
- + { 0x00009a78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000 },
- + { 0x00009a7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000 },
- + { 0x00009a80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000 },
- + { 0x00009a84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000 },
- + { 0x00009a88, 0x00000000, 0x00000000, 0x00068b04, 0x00068b04, 0x00000000 },
- + { 0x00009a8c, 0x00000000, 0x00000000, 0x00068b08, 0x00068b08, 0x00000000 },
- + { 0x00009a90, 0x00000000, 0x00000000, 0x00068b08, 0x00068b08, 0x00000000 },
- + { 0x00009a94, 0x00000000, 0x00000000, 0x00068b0c, 0x00068b0c, 0x00000000 },
- + { 0x00009a98, 0x00000000, 0x00000000, 0x00068b80, 0x00068b80, 0x00000000 },
- + { 0x00009a9c, 0x00000000, 0x00000000, 0x00068b84, 0x00068b84, 0x00000000 },
- + { 0x00009aa0, 0x00000000, 0x00000000, 0x00068b88, 0x00068b88, 0x00000000 },
- + { 0x00009aa4, 0x00000000, 0x00000000, 0x00068b8c, 0x00068b8c, 0x00000000 },
- + { 0x00009aa8, 0x00000000, 0x00000000, 0x000b8b90, 0x000b8b90, 0x00000000 },
- + { 0x00009aac, 0x00000000, 0x00000000, 0x000b8f80, 0x000b8f80, 0x00000000 },
- + { 0x00009ab0, 0x00000000, 0x00000000, 0x000b8f84, 0x000b8f84, 0x00000000 },
- + { 0x00009ab4, 0x00000000, 0x00000000, 0x000b8f88, 0x000b8f88, 0x00000000 },
- + { 0x00009ab8, 0x00000000, 0x00000000, 0x000b8f8c, 0x000b8f8c, 0x00000000 },
- + { 0x00009abc, 0x00000000, 0x00000000, 0x000b8f90, 0x000b8f90, 0x00000000 },
- + { 0x00009ac0, 0x00000000, 0x00000000, 0x000bb30c, 0x000bb30c, 0x00000000 },
- + { 0x00009ac4, 0x00000000, 0x00000000, 0x000bb310, 0x000bb310, 0x00000000 },
- + { 0x00009ac8, 0x00000000, 0x00000000, 0x000bb384, 0x000bb384, 0x00000000 },
- + { 0x00009acc, 0x00000000, 0x00000000, 0x000bb388, 0x000bb388, 0x00000000 },
- + { 0x00009ad0, 0x00000000, 0x00000000, 0x000bb324, 0x000bb324, 0x00000000 },
- + { 0x00009ad4, 0x00000000, 0x00000000, 0x000bb704, 0x000bb704, 0x00000000 },
- + { 0x00009ad8, 0x00000000, 0x00000000, 0x000f96a4, 0x000f96a4, 0x00000000 },
- + { 0x00009adc, 0x00000000, 0x00000000, 0x000f96a8, 0x000f96a8, 0x00000000 },
- + { 0x00009ae0, 0x00000000, 0x00000000, 0x000f9710, 0x000f9710, 0x00000000 },
- + { 0x00009ae4, 0x00000000, 0x00000000, 0x000f9714, 0x000f9714, 0x00000000 },
- + { 0x00009ae8, 0x00000000, 0x00000000, 0x000f9720, 0x000f9720, 0x00000000 },
- + { 0x00009aec, 0x00000000, 0x00000000, 0x000f9724, 0x000f9724, 0x00000000 },
- + { 0x00009af0, 0x00000000, 0x00000000, 0x000f9728, 0x000f9728, 0x00000000 },
- + { 0x00009af4, 0x00000000, 0x00000000, 0x000f972c, 0x000f972c, 0x00000000 },
- + { 0x00009af8, 0x00000000, 0x00000000, 0x000f97a0, 0x000f97a0, 0x00000000 },
- + { 0x00009afc, 0x00000000, 0x00000000, 0x000f97a4, 0x000f97a4, 0x00000000 },
- + { 0x00009b00, 0x00000000, 0x00000000, 0x000fb7a8, 0x000fb7a8, 0x00000000 },
- + { 0x00009b04, 0x00000000, 0x00000000, 0x000fb7b0, 0x000fb7b0, 0x00000000 },
- + { 0x00009b08, 0x00000000, 0x00000000, 0x000fb7b4, 0x000fb7b4, 0x00000000 },
- + { 0x00009b0c, 0x00000000, 0x00000000, 0x000fb7b8, 0x000fb7b8, 0x00000000 },
- + { 0x00009b10, 0x00000000, 0x00000000, 0x000fb7a5, 0x000fb7a5, 0x00000000 },
- + { 0x00009b14, 0x00000000, 0x00000000, 0x000fb7a9, 0x000fb7a9, 0x00000000 },
- + { 0x00009b18, 0x00000000, 0x00000000, 0x000fb7ad, 0x000fb7ad, 0x00000000 },
- + { 0x00009b1c, 0x00000000, 0x00000000, 0x000fb7b1, 0x000fb7b1, 0x00000000 },
- + { 0x00009b20, 0x00000000, 0x00000000, 0x000fb7b5, 0x000fb7b5, 0x00000000 },
- + { 0x00009b24, 0x00000000, 0x00000000, 0x000fb7b9, 0x000fb7b9, 0x00000000 },
- + { 0x00009b28, 0x00000000, 0x00000000, 0x000fb7c5, 0x000fb7c5, 0x00000000 },
- + { 0x00009b2c, 0x00000000, 0x00000000, 0x000fb7c9, 0x000fb7c9, 0x00000000 },
- + { 0x00009b30, 0x00000000, 0x00000000, 0x000fb7d1, 0x000fb7d1, 0x00000000 },
- + { 0x00009b34, 0x00000000, 0x00000000, 0x000fb7d5, 0x000fb7d5, 0x00000000 },
- + { 0x00009b38, 0x00000000, 0x00000000, 0x000fb7d9, 0x000fb7d9, 0x00000000 },
- + { 0x00009b3c, 0x00000000, 0x00000000, 0x000fb7c6, 0x000fb7c6, 0x00000000 },
- + { 0x00009b40, 0x00000000, 0x00000000, 0x000fb7ca, 0x000fb7ca, 0x00000000 },
- + { 0x00009b44, 0x00000000, 0x00000000, 0x000fb7ce, 0x000fb7ce, 0x00000000 },
- + { 0x00009b48, 0x00000000, 0x00000000, 0x000fb7d2, 0x000fb7d2, 0x00000000 },
- + { 0x00009b4c, 0x00000000, 0x00000000, 0x000fb7d6, 0x000fb7d6, 0x00000000 },
- + { 0x00009b50, 0x00000000, 0x00000000, 0x000fb7c3, 0x000fb7c3, 0x00000000 },
- + { 0x00009b54, 0x00000000, 0x00000000, 0x000fb7c7, 0x000fb7c7, 0x00000000 },
- + { 0x00009b58, 0x00000000, 0x00000000, 0x000fb7cb, 0x000fb7cb, 0x00000000 },
- + { 0x00009b5c, 0x00000000, 0x00000000, 0x000fb7cf, 0x000fb7cf, 0x00000000 },
- + { 0x00009b60, 0x00000000, 0x00000000, 0x000fb7d7, 0x000fb7d7, 0x00000000 },
- + { 0x00009b64, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009b68, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009b6c, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009b70, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009b74, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009b78, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009b7c, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009b80, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009b84, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009b88, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009b8c, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009b90, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009b94, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009b98, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009b9c, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009ba0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009ba4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009ba8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bac, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bb0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bb4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bb8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bbc, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bc0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bc4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bc8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bcc, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bd0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bd4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bd8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bdc, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009be0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009be4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009be8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bec, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bf0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bf4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bf8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x00009bfc, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- + { 0x0000aa00, 0x00000000, 0x00000000, 0x0006801c, 0x0006801c, 0x00000000 },
- + { 0x0000aa04, 0x00000000, 0x00000000, 0x00068080, 0x00068080, 0x00000000 },
- + { 0x0000aa08, 0x00000000, 0x00000000, 0x00068084, 0x00068084, 0x00000000 },
- + { 0x0000aa0c, 0x00000000, 0x00000000, 0x00068088, 0x00068088, 0x00000000 },
- + { 0x0000aa10, 0x00000000, 0x00000000, 0x0006808c, 0x0006808c, 0x00000000 },
- + { 0x0000aa14, 0x00000000, 0x00000000, 0x00068100, 0x00068100, 0x00000000 },
- + { 0x0000aa18, 0x00000000, 0x00000000, 0x00068104, 0x00068104, 0x00000000 },
- + { 0x0000aa1c, 0x00000000, 0x00000000, 0x00068108, 0x00068108, 0x00000000 },
- + { 0x0000aa20, 0x00000000, 0x00000000, 0x0006810c, 0x0006810c, 0x00000000 },
- + { 0x0000aa24, 0x00000000, 0x00000000, 0x00068110, 0x00068110, 0x00000000 },
- + { 0x0000aa28, 0x00000000, 0x00000000, 0x00068110, 0x00068110, 0x00000000 },
- + { 0x0000aa2c, 0x00000000, 0x00000000, 0x00068180, 0x00068180, 0x00000000 },
- + { 0x0000aa30, 0x00000000, 0x00000000, 0x00068184, 0x00068184, 0x00000000 },
- + { 0x0000aa34, 0x00000000, 0x00000000, 0x00068188, 0x00068188, 0x00000000 },
- + { 0x0000aa38, 0x00000000, 0x00000000, 0x0006818c, 0x0006818c, 0x00000000 },
- + { 0x0000aa3c, 0x00000000, 0x00000000, 0x00068190, 0x00068190, 0x00000000 },
- + { 0x0000aa40, 0x00000000, 0x00000000, 0x00068194, 0x00068194, 0x00000000 },
- + { 0x0000aa44, 0x00000000, 0x00000000, 0x000681a0, 0x000681a0, 0x00000000 },
- + { 0x0000aa48, 0x00000000, 0x00000000, 0x0006820c, 0x0006820c, 0x00000000 },
- + { 0x0000aa4c, 0x00000000, 0x00000000, 0x000681a8, 0x000681a8, 0x00000000 },
- + { 0x0000aa50, 0x00000000, 0x00000000, 0x000681ac, 0x000681ac, 0x00000000 },
- + { 0x0000aa54, 0x00000000, 0x00000000, 0x0006821c, 0x0006821c, 0x00000000 },
- + { 0x0000aa58, 0x00000000, 0x00000000, 0x00068224, 0x00068224, 0x00000000 },
- + { 0x0000aa5c, 0x00000000, 0x00000000, 0x00068290, 0x00068290, 0x00000000 },
- + { 0x0000aa60, 0x00000000, 0x00000000, 0x00068300, 0x00068300, 0x00000000 },
- + { 0x0000aa64, 0x00000000, 0x00000000, 0x00068308, 0x00068308, 0x00000000 },
- + { 0x0000aa68, 0x00000000, 0x00000000, 0x0006830c, 0x0006830c, 0x00000000 },
- + { 0x0000aa6c, 0x00000000, 0x00000000, 0x00068310, 0x00068310, 0x00000000 },
- + { 0x0000aa70, 0x00000000, 0x00000000, 0x00068788, 0x00068788, 0x00000000 },
- + { 0x0000aa74, 0x00000000, 0x00000000, 0x0006878c, 0x0006878c, 0x00000000 },
- + { 0x0000aa78, 0x00000000, 0x00000000, 0x00068790, 0x00068790, 0x00000000 },
- + { 0x0000aa7c, 0x00000000, 0x00000000, 0x00068794, 0x00068794, 0x00000000 },
- + { 0x0000aa80, 0x00000000, 0x00000000, 0x00068798, 0x00068798, 0x00000000 },
- + { 0x0000aa84, 0x00000000, 0x00000000, 0x0006879c, 0x0006879c, 0x00000000 },
- + { 0x0000aa88, 0x00000000, 0x00000000, 0x00068b89, 0x00068b89, 0x00000000 },
- + { 0x0000aa8c, 0x00000000, 0x00000000, 0x00068b8d, 0x00068b8d, 0x00000000 },
- + { 0x0000aa90, 0x00000000, 0x00000000, 0x00068b91, 0x00068b91, 0x00000000 },
- + { 0x0000aa94, 0x00000000, 0x00000000, 0x00068b95, 0x00068b95, 0x00000000 },
- + { 0x0000aa98, 0x00000000, 0x00000000, 0x00068b99, 0x00068b99, 0x00000000 },
- + { 0x0000aa9c, 0x00000000, 0x00000000, 0x00068ba5, 0x00068ba5, 0x00000000 },
- + { 0x0000aaa0, 0x00000000, 0x00000000, 0x00068ba9, 0x00068ba9, 0x00000000 },
- + { 0x0000aaa4, 0x00000000, 0x00000000, 0x00068bad, 0x00068bad, 0x00000000 },
- + { 0x0000aaa8, 0x00000000, 0x00000000, 0x000b8b0c, 0x000b8b0c, 0x00000000 },
- + { 0x0000aaac, 0x00000000, 0x00000000, 0x000b8f10, 0x000b8f10, 0x00000000 },
- + { 0x0000aab0, 0x00000000, 0x00000000, 0x000b8f14, 0x000b8f14, 0x00000000 },
- + { 0x0000aab4, 0x00000000, 0x00000000, 0x000b8f84, 0x000b8f84, 0x00000000 },
- + { 0x0000aab8, 0x00000000, 0x00000000, 0x000b8f84, 0x000b8f84, 0x00000000 },
- + { 0x0000aabc, 0x00000000, 0x00000000, 0x000b8f88, 0x000b8f88, 0x00000000 },
- + { 0x0000aac0, 0x00000000, 0x00000000, 0x000bb380, 0x000bb380, 0x00000000 },
- + { 0x0000aac4, 0x00000000, 0x00000000, 0x000bb384, 0x000bb384, 0x00000000 },
- + { 0x0000aac8, 0x00000000, 0x00000000, 0x000bb388, 0x000bb388, 0x00000000 },
- + { 0x0000aacc, 0x00000000, 0x00000000, 0x000bb38c, 0x000bb38c, 0x00000000 },
- + { 0x0000aad0, 0x00000000, 0x00000000, 0x000bb394, 0x000bb394, 0x00000000 },
- + { 0x0000aad4, 0x00000000, 0x00000000, 0x000bb798, 0x000bb798, 0x00000000 },
- + { 0x0000aad8, 0x00000000, 0x00000000, 0x000f970c, 0x000f970c, 0x00000000 },
- + { 0x0000aadc, 0x00000000, 0x00000000, 0x000f9710, 0x000f9710, 0x00000000 },
- + { 0x0000aae0, 0x00000000, 0x00000000, 0x000f9714, 0x000f9714, 0x00000000 },
- + { 0x0000aae4, 0x00000000, 0x00000000, 0x000f9718, 0x000f9718, 0x00000000 },
- + { 0x0000aae8, 0x00000000, 0x00000000, 0x000f9705, 0x000f9705, 0x00000000 },
- + { 0x0000aaec, 0x00000000, 0x00000000, 0x000f9709, 0x000f9709, 0x00000000 },
- + { 0x0000aaf0, 0x00000000, 0x00000000, 0x000f970d, 0x000f970d, 0x00000000 },
- + { 0x0000aaf4, 0x00000000, 0x00000000, 0x000f9711, 0x000f9711, 0x00000000 },
- + { 0x0000aaf8, 0x00000000, 0x00000000, 0x000f9715, 0x000f9715, 0x00000000 },
- + { 0x0000aafc, 0x00000000, 0x00000000, 0x000f9719, 0x000f9719, 0x00000000 },
- + { 0x0000ab00, 0x00000000, 0x00000000, 0x000fb7a4, 0x000fb7a4, 0x00000000 },
- + { 0x0000ab04, 0x00000000, 0x00000000, 0x000fb7a8, 0x000fb7a8, 0x00000000 },
- + { 0x0000ab08, 0x00000000, 0x00000000, 0x000fb7ac, 0x000fb7ac, 0x00000000 },
- + { 0x0000ab0c, 0x00000000, 0x00000000, 0x000fb7ac, 0x000fb7ac, 0x00000000 },
- + { 0x0000ab10, 0x00000000, 0x00000000, 0x000fb7b0, 0x000fb7b0, 0x00000000 },
- + { 0x0000ab14, 0x00000000, 0x00000000, 0x000fb7b8, 0x000fb7b8, 0x00000000 },
- + { 0x0000ab18, 0x00000000, 0x00000000, 0x000fb7bc, 0x000fb7bc, 0x00000000 },
- + { 0x0000ab1c, 0x00000000, 0x00000000, 0x000fb7a1, 0x000fb7a1, 0x00000000 },
- + { 0x0000ab20, 0x00000000, 0x00000000, 0x000fb7a5, 0x000fb7a5, 0x00000000 },
- + { 0x0000ab24, 0x00000000, 0x00000000, 0x000fb7a9, 0x000fb7a9, 0x00000000 },
- + { 0x0000ab28, 0x00000000, 0x00000000, 0x000fb7b1, 0x000fb7b1, 0x00000000 },
- + { 0x0000ab2c, 0x00000000, 0x00000000, 0x000fb7b5, 0x000fb7b5, 0x00000000 },
- + { 0x0000ab30, 0x00000000, 0x00000000, 0x000fb7bd, 0x000fb7bd, 0x00000000 },
- + { 0x0000ab34, 0x00000000, 0x00000000, 0x000fb7c9, 0x000fb7c9, 0x00000000 },
- + { 0x0000ab38, 0x00000000, 0x00000000, 0x000fb7cd, 0x000fb7cd, 0x00000000 },
- + { 0x0000ab3c, 0x00000000, 0x00000000, 0x000fb7d1, 0x000fb7d1, 0x00000000 },
- + { 0x0000ab40, 0x00000000, 0x00000000, 0x000fb7d9, 0x000fb7d9, 0x00000000 },
- + { 0x0000ab44, 0x00000000, 0x00000000, 0x000fb7c2, 0x000fb7c2, 0x00000000 },
- + { 0x0000ab48, 0x00000000, 0x00000000, 0x000fb7c6, 0x000fb7c6, 0x00000000 },
- + { 0x0000ab4c, 0x00000000, 0x00000000, 0x000fb7ca, 0x000fb7ca, 0x00000000 },
- + { 0x0000ab50, 0x00000000, 0x00000000, 0x000fb7ce, 0x000fb7ce, 0x00000000 },
- + { 0x0000ab54, 0x00000000, 0x00000000, 0x000fb7d2, 0x000fb7d2, 0x00000000 },
- + { 0x0000ab58, 0x00000000, 0x00000000, 0x000fb7d6, 0x000fb7d6, 0x00000000 },
- + { 0x0000ab5c, 0x00000000, 0x00000000, 0x000fb7c3, 0x000fb7c3, 0x00000000 },
- + { 0x0000ab60, 0x00000000, 0x00000000, 0x000fb7cb, 0x000fb7cb, 0x00000000 },
- + { 0x0000ab64, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000ab68, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000ab6c, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000ab70, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000ab74, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000ab78, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000ab7c, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000ab80, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000ab84, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000ab88, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000ab8c, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000ab90, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000ab94, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000ab98, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000ab9c, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000aba0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000aba4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000aba8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abac, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abb0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abb4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abb8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abbc, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abc0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abc4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abc8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abcc, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abd0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abd4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abd8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abdc, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abe0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abe4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abe8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abec, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abf0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abf4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abf8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000abfc, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- + { 0x0000a204, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004 },
- + { 0x0000a20c, 0x00000014, 0x00000014, 0x00000000, 0x00000000, 0x0001f000 },
- + { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
- + { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- + { 0x0000a250, 0x001ff000, 0x001ff000, 0x001ca000, 0x001ca000, 0x001da000 },
- + { 0x0000a274, 0x0a81c652, 0x0a81c652, 0x0a820652, 0x0a820652, 0x0a82a652 },
- + { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a304, 0x00000000, 0x00000000, 0x00007201, 0x00007201, 0x00000000 },
- + { 0x0000a308, 0x00000000, 0x00000000, 0x00010408, 0x00010408, 0x00000000 },
- + { 0x0000a30c, 0x00000000, 0x00000000, 0x0001860a, 0x0001860a, 0x00000000 },
- + { 0x0000a310, 0x00000000, 0x00000000, 0x00020818, 0x00020818, 0x00000000 },
- + { 0x0000a314, 0x00000000, 0x00000000, 0x00024858, 0x00024858, 0x00000000 },
- + { 0x0000a318, 0x00000000, 0x00000000, 0x00026859, 0x00026859, 0x00000000 },
- + { 0x0000a31c, 0x00000000, 0x00000000, 0x0002985b, 0x0002985b, 0x00000000 },
- + { 0x0000a320, 0x00000000, 0x00000000, 0x0002c89a, 0x0002c89a, 0x00000000 },
- + { 0x0000a324, 0x00000000, 0x00000000, 0x0002e89b, 0x0002e89b, 0x00000000 },
- + { 0x0000a328, 0x00000000, 0x00000000, 0x0003089c, 0x0003089c, 0x00000000 },
- + { 0x0000a32c, 0x00000000, 0x00000000, 0x0003289d, 0x0003289d, 0x00000000 },
- + { 0x0000a330, 0x00000000, 0x00000000, 0x0003489e, 0x0003489e, 0x00000000 },
- + { 0x0000a334, 0x00000000, 0x00000000, 0x000388de, 0x000388de, 0x00000000 },
- + { 0x0000a338, 0x00000000, 0x00000000, 0x0003b91e, 0x0003b91e, 0x00000000 },
- + { 0x0000a33c, 0x00000000, 0x00000000, 0x0003d95e, 0x0003d95e, 0x00000000 },
- + { 0x0000a340, 0x00000000, 0x00000000, 0x000419df, 0x000419df, 0x00000000 },
- + { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
- +};
- +
- +static const u_int32_t ar9285Common_9285[][2] = {
- + { 0x0000000c, 0x00000000 },
- + { 0x00000030, 0x00020045 },
- + { 0x00000034, 0x00000005 },
- + { 0x00000040, 0x00000000 },
- + { 0x00000044, 0x00000008 },
- + { 0x00000048, 0x00000008 },
- + { 0x0000004c, 0x00000010 },
- + { 0x00000050, 0x00000000 },
- + { 0x00000054, 0x0000001f },
- + { 0x00000800, 0x00000000 },
- + { 0x00000804, 0x00000000 },
- + { 0x00000808, 0x00000000 },
- + { 0x0000080c, 0x00000000 },
- + { 0x00000810, 0x00000000 },
- + { 0x00000814, 0x00000000 },
- + { 0x00000818, 0x00000000 },
- + { 0x0000081c, 0x00000000 },
- + { 0x00000820, 0x00000000 },
- + { 0x00000824, 0x00000000 },
- + { 0x00001040, 0x002ffc0f },
- + { 0x00001044, 0x002ffc0f },
- + { 0x00001048, 0x002ffc0f },
- + { 0x0000104c, 0x002ffc0f },
- + { 0x00001050, 0x002ffc0f },
- + { 0x00001054, 0x002ffc0f },
- + { 0x00001058, 0x002ffc0f },
- + { 0x0000105c, 0x002ffc0f },
- + { 0x00001060, 0x002ffc0f },
- + { 0x00001064, 0x002ffc0f },
- + { 0x00001230, 0x00000000 },
- + { 0x00001270, 0x00000000 },
- + { 0x00001038, 0x00000000 },
- + { 0x00001078, 0x00000000 },
- + { 0x000010b8, 0x00000000 },
- + { 0x000010f8, 0x00000000 },
- + { 0x00001138, 0x00000000 },
- + { 0x00001178, 0x00000000 },
- + { 0x000011b8, 0x00000000 },
- + { 0x000011f8, 0x00000000 },
- + { 0x00001238, 0x00000000 },
- + { 0x00001278, 0x00000000 },
- + { 0x000012b8, 0x00000000 },
- + { 0x000012f8, 0x00000000 },
- + { 0x00001338, 0x00000000 },
- + { 0x00001378, 0x00000000 },
- + { 0x000013b8, 0x00000000 },
- + { 0x000013f8, 0x00000000 },
- + { 0x00001438, 0x00000000 },
- + { 0x00001478, 0x00000000 },
- + { 0x000014b8, 0x00000000 },
- + { 0x000014f8, 0x00000000 },
- + { 0x00001538, 0x00000000 },
- + { 0x00001578, 0x00000000 },
- + { 0x000015b8, 0x00000000 },
- + { 0x000015f8, 0x00000000 },
- + { 0x00001638, 0x00000000 },
- + { 0x00001678, 0x00000000 },
- + { 0x000016b8, 0x00000000 },
- + { 0x000016f8, 0x00000000 },
- + { 0x00001738, 0x00000000 },
- + { 0x00001778, 0x00000000 },
- + { 0x000017b8, 0x00000000 },
- + { 0x000017f8, 0x00000000 },
- + { 0x0000103c, 0x00000000 },
- + { 0x0000107c, 0x00000000 },
- + { 0x000010bc, 0x00000000 },
- + { 0x000010fc, 0x00000000 },
- + { 0x0000113c, 0x00000000 },
- + { 0x0000117c, 0x00000000 },
- + { 0x000011bc, 0x00000000 },
- + { 0x000011fc, 0x00000000 },
- + { 0x0000123c, 0x00000000 },
- + { 0x0000127c, 0x00000000 },
- + { 0x000012bc, 0x00000000 },
- + { 0x000012fc, 0x00000000 },
- + { 0x0000133c, 0x00000000 },
- + { 0x0000137c, 0x00000000 },
- + { 0x000013bc, 0x00000000 },
- + { 0x000013fc, 0x00000000 },
- + { 0x0000143c, 0x00000000 },
- + { 0x0000147c, 0x00000000 },
- + { 0x00004030, 0x00000002 },
- + { 0x0000403c, 0x00000002 },
- + { 0x00004024, 0x0000001f },
- + { 0x00004060, 0x00000000 },
- + { 0x00004064, 0x00000000 },
- + { 0x00007010, 0x00000031 },
- + { 0x00007034, 0x00000002 },
- + { 0x00007038, 0x000004c2 },
- + { 0x00008004, 0x00000000 },
- + { 0x00008008, 0x00000000 },
- + { 0x0000800c, 0x00000000 },
- + { 0x00008018, 0x00000700 },
- + { 0x00008020, 0x00000000 },
- + { 0x00008038, 0x00000000 },
- + { 0x0000803c, 0x00000000 },
- + { 0x00008048, 0x00000000 },
- + { 0x00008054, 0x00000000 },
- + { 0x00008058, 0x00000000 },
- + { 0x0000805c, 0x000fc78f },
- + { 0x00008060, 0x0000000f },
- + { 0x00008064, 0x00000000 },
- + { 0x00008070, 0x00000000 },
- + { 0x000080c0, 0x2a80001a },
- + { 0x000080c4, 0x05dc01e0 },
- + { 0x000080c8, 0x1f402710 },
- + { 0x000080cc, 0x01f40000 },
- + { 0x000080d0, 0x00001e00 },
- + { 0x000080d4, 0x00000000 },
- + { 0x000080d8, 0x00400000 },
- + { 0x000080e0, 0xffffffff },
- + { 0x000080e4, 0x0000ffff },
- + { 0x000080e8, 0x003f3f3f },
- + { 0x000080ec, 0x00000000 },
- + { 0x000080f0, 0x00000000 },
- + { 0x000080f4, 0x00000000 },
- + { 0x000080f8, 0x00000000 },
- + { 0x000080fc, 0x00020000 },
- + { 0x00008100, 0x00020000 },
- + { 0x00008104, 0x00000001 },
- + { 0x00008108, 0x00000052 },
- + { 0x0000810c, 0x00000000 },
- + { 0x00008110, 0x00000168 },
- + { 0x00008118, 0x000100aa },
- + { 0x0000811c, 0x00003210 },
- + { 0x00008120, 0x08f04800 },
- + { 0x00008124, 0x00000000 },
- + { 0x00008128, 0x00000000 },
- + { 0x0000812c, 0x00000000 },
- + { 0x00008130, 0x00000000 },
- + { 0x00008134, 0x00000000 },
- + { 0x00008138, 0x00000000 },
- + { 0x0000813c, 0x00000000 },
- + { 0x00008144, 0x00000000 },
- + { 0x00008168, 0x00000000 },
- + { 0x0000816c, 0x00000000 },
- + { 0x00008170, 0x32143320 },
- + { 0x00008174, 0xfaa4fa50 },
- + { 0x00008178, 0x00000100 },
- + { 0x0000817c, 0x00000000 },
- + { 0x000081c0, 0x00000000 },
- + { 0x000081d0, 0x00003210 },
- + { 0x000081ec, 0x00000000 },
- + { 0x000081f0, 0x00000000 },
- + { 0x000081f4, 0x00000000 },
- + { 0x000081f8, 0x00000000 },
- + { 0x000081fc, 0x00000000 },
- + { 0x00008200, 0x00000000 },
- + { 0x00008204, 0x00000000 },
- + { 0x00008208, 0x00000000 },
- + { 0x0000820c, 0x00000000 },
- + { 0x00008210, 0x00000000 },
- + { 0x00008214, 0x00000000 },
- + { 0x00008218, 0x00000000 },
- + { 0x0000821c, 0x00000000 },
- + { 0x00008220, 0x00000000 },
- + { 0x00008224, 0x00000000 },
- + { 0x00008228, 0x00000000 },
- + { 0x0000822c, 0x00000000 },
- + { 0x00008230, 0x00000000 },
- + { 0x00008234, 0x00000000 },
- + { 0x00008238, 0x00000000 },
- + { 0x0000823c, 0x00000000 },
- + { 0x00008240, 0x00100000 },
- + { 0x00008244, 0x0010f400 },
- + { 0x00008248, 0x00000100 },
- + { 0x0000824c, 0x0001e800 },
- + { 0x00008250, 0x00000000 },
- + { 0x00008254, 0x00000000 },
- + { 0x00008258, 0x00000000 },
- + { 0x0000825c, 0x400000ff },
- + { 0x00008260, 0x00080922 },
- + { 0x00008264, 0xa8a00010 },
- + { 0x00008270, 0x00000000 },
- + { 0x00008274, 0x40000000 },
- + { 0x00008278, 0x003e4180 },
- + { 0x0000827c, 0x00000000 },
- + { 0x00008284, 0x0000002c },
- + { 0x00008288, 0x0000002c },
- + { 0x0000828c, 0x00000000 },
- + { 0x00008294, 0x00000000 },
- + { 0x00008298, 0x00000000 },
- + { 0x0000829c, 0x00000000 },
- + { 0x00008300, 0x00000040 },
- + { 0x00008314, 0x00000000 },
- + { 0x00008328, 0x00000000 },
- + { 0x0000832c, 0x00000001 },
- + { 0x00008330, 0x00000302 },
- + { 0x00008334, 0x00000e00 },
- + { 0x00008338, 0x00000000 },
- + { 0x0000833c, 0x00000000 },
- + { 0x00008340, 0x00010380 },
- + { 0x00008344, 0x00481043 },
- + { 0x00009808, 0x00000000 },
- + { 0x0000980c, 0xafe68e30 },
- + { 0x00009810, 0xfd14e000 },
- + { 0x00009814, 0x9c0a9f6b },
- + { 0x0000981c, 0x00000000 },
- + { 0x0000982c, 0x0000a000 },
- + { 0x00009830, 0x00000000 },
- + { 0x0000983c, 0x00200400 },
- + { 0x0000984c, 0x0040233c },
- + { 0x00009854, 0x00000044 },
- + { 0x00009900, 0x00000000 },
- + { 0x00009904, 0x00000000 },
- + { 0x00009908, 0x00000000 },
- + { 0x0000990c, 0x00000000 },
- + { 0x00009910, 0x01002310 },
- + { 0x0000991c, 0x10000fff },
- + { 0x00009920, 0x04900000 },
- + { 0x00009928, 0x00000001 },
- + { 0x0000992c, 0x00000004 },
- + { 0x00009934, 0x1e1f2022 },
- + { 0x00009938, 0x0a0b0c0d },
- + { 0x0000993c, 0x00000000 },
- + { 0x00009940, 0x14750604 },
- + { 0x00009948, 0x9280c00a },
- + { 0x0000994c, 0x00020028 },
- + { 0x00009954, 0x5f3ca3de },
- + { 0x00009958, 0x2108ecff },
- + { 0x00009968, 0x000003ce },
- + { 0x00009970, 0x1927b515 },
- + { 0x00009974, 0x00000000 },
- + { 0x00009978, 0x00000001 },
- + { 0x0000997c, 0x00000000 },
- + { 0x00009980, 0x00000000 },
- + { 0x00009984, 0x00000000 },
- + { 0x00009988, 0x00000000 },
- + { 0x0000998c, 0x00000000 },
- + { 0x00009990, 0x00000000 },
- + { 0x00009994, 0x00000000 },
- + { 0x00009998, 0x00000000 },
- + { 0x0000999c, 0x00000000 },
- + { 0x000099a0, 0x00000000 },
- + { 0x000099a4, 0x00000001 },
- + { 0x000099a8, 0x201fff00 },
- + { 0x000099ac, 0x2def0a00 },
- + { 0x000099b0, 0x03051000 },
- + { 0x000099b4, 0x00000820 },
- + { 0x000099dc, 0x00000000 },
- + { 0x000099e0, 0x00000000 },
- + { 0x000099e4, 0xaaaaaaaa },
- + { 0x000099e8, 0x3c466478 },
- + { 0x000099ec, 0x0cc80caa },
- + { 0x000099f0, 0x00000000 },
- + { 0x0000a208, 0x803e6788 },
- + { 0x0000a210, 0x4080a333 },
- + { 0x0000a214, 0x00206c10 },
- + { 0x0000a218, 0x009c4060 },
- + { 0x0000a220, 0x01834061 },
- + { 0x0000a224, 0x00000400 },
- + { 0x0000a228, 0x000003b5 },
- + { 0x0000a22c, 0x00000000 },
- + { 0x0000a234, 0x20202020 },
- + { 0x0000a238, 0x20202020 },
- + { 0x0000a244, 0x00000000 },
- + { 0x0000a248, 0xfffffffc },
- + { 0x0000a24c, 0x00000000 },
- + { 0x0000a254, 0x00000000 },
- + { 0x0000a258, 0x0ccb5380 },
- + { 0x0000a25c, 0x15151501 },
- + { 0x0000a260, 0xdfa90f01 },
- + { 0x0000a268, 0x00000000 },
- + { 0x0000a26c, 0x0ebae9e6 },
- + { 0x0000d270, 0x0d820820 },
- + { 0x0000a278, 0x39ce739c },
- + { 0x0000a27c, 0x050e039c },
- + { 0x0000d35c, 0x07ffffef },
- + { 0x0000d360, 0x0fffffe7 },
- + { 0x0000d364, 0x17ffffe5 },
- + { 0x0000d368, 0x1fffffe4 },
- + { 0x0000d36c, 0x37ffffe3 },
- + { 0x0000d370, 0x3fffffe3 },
- + { 0x0000d374, 0x57ffffe3 },
- + { 0x0000d378, 0x5fffffe2 },
- + { 0x0000d37c, 0x7fffffe2 },
- + { 0x0000d380, 0x7f3c7bba },
- + { 0x0000d384, 0xf3307ff0 },
- + { 0x0000a388, 0x0c000000 },
- + { 0x0000a38c, 0x20202020 },
- + { 0x0000a390, 0x20202020 },
- + { 0x0000a394, 0x39ce739c },
- + { 0x0000a398, 0x0000039c },
- + { 0x0000a39c, 0x00000001 },
- + { 0x0000a3a0, 0x00000000 },
- + { 0x0000a3a4, 0x00000000 },
- + { 0x0000a3a8, 0x00000000 },
- + { 0x0000a3ac, 0x00000000 },
- + { 0x0000a3b0, 0x00000000 },
- + { 0x0000a3b4, 0x00000000 },
- + { 0x0000a3b8, 0x00000000 },
- + { 0x0000a3bc, 0x00000000 },
- + { 0x0000a3c0, 0x00000000 },
- + { 0x0000a3c4, 0x00000000 },
- + { 0x0000a3cc, 0x20202020 },
- + { 0x0000a3d0, 0x20202020 },
- + { 0x0000a3d4, 0x20202020 },
- + { 0x0000a3dc, 0x39ce739c },
- + { 0x0000a3e0, 0x0000039c },
- + { 0x0000a3e4, 0x00000000 },
- + { 0x0000a3e8, 0x18c43433 },
- + { 0x0000a3ec, 0x00f70081 },
- + { 0x00007800, 0x00140000 },
- + { 0x00007804, 0x0e4548d8 },
- + { 0x00007808, 0x54214514 },
- + { 0x0000780c, 0x02025820 },
- + { 0x00007810, 0x71c0d388 },
- + { 0x00007814, 0x924934a8 },
- + { 0x0000781c, 0x00000000 },
- + { 0x00007820, 0x00000c04 },
- + { 0x00007824, 0x00d86fff },
- + { 0x00007828, 0x26d2491b },
- + { 0x0000782c, 0x6e36d97b },
- + { 0x00007830, 0xedb6d96c },
- + { 0x00007834, 0x71400086 },
- + { 0x00007838, 0xfac68800 },
- + { 0x0000783c, 0x0001fffe },
- + { 0x00007840, 0xffeb1a20 },
- + { 0x00007844, 0x000c0db6 },
- + { 0x00007848, 0x6db61b6f },
- + { 0x0000784c, 0x6d9b66db },
- + { 0x00007850, 0x6d8c6dba },
- + { 0x00007854, 0x00040000 },
- + { 0x00007858, 0xdb003012 },
- + { 0x0000785c, 0x04924914 },
- + { 0x00007860, 0x21084210 },
- + { 0x00007864, 0xf7d7ffde },
- + { 0x00007868, 0xc2034080 },
- + { 0x0000786c, 0x48609eb4 },
- + { 0x00007870, 0x10142c00 },
- +};
- +
- +static const u_int32_t ar9285PciePhy_clkreq_always_on_L1_9285[][2] = {
- + {0x00004040, 0x9248fd00 },
- + {0x00004040, 0x24924924 },
- + {0x00004040, 0xa8000019 },
- + {0x00004040, 0x13160820 },
- + {0x00004040, 0xe5980560 },
- + {0x00004040, 0xc01dcffd },
- + {0x00004040, 0x1aaabe41 },
- + {0x00004040, 0xbe105554 },
- + {0x00004040, 0x00043007 },
- + {0x00004044, 0x00000000 },
- +};
- +
- +static const u_int32_t ar9285PciePhy_clkreq_off_L1_9285[][2] = {
- + {0x00004040, 0x9248fd00 },
- + {0x00004040, 0x24924924 },
- + {0x00004040, 0xa8000019 },
- + {0x00004040, 0x13160820 },
- + {0x00004040, 0xe5980560 },
- + {0x00004040, 0xc01dcffc },
- + {0x00004040, 0x1aaabe41 },
- + {0x00004040, 0xbe105554 },
- + {0x00004040, 0x00043007 },
- + {0x00004044, 0x00000000 },
- +};
- +
- +/* AR9285 v1_2 PCI Register Writes. Created: 04/13/09 */
- +static const u_int32_t ar9285Modes_9285_1_2[][6] = {
- + /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- + { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
- + { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
- + { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
- + { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
- + { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
- + { 0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f },
- + { 0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440, 0x00006880 },
- + { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
- + { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
- + { 0x00009824, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e },
- + { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
- + { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- + { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
- + { 0x00009840, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e },
- + { 0x00009844, 0x0372161e, 0x0372161e, 0x03721620, 0x03721620, 0x037216a0 },
- + { 0x00009848, 0x00001066, 0x00001066, 0x00001053, 0x00001053, 0x00001059 },
- + { 0x0000a848, 0x00001066, 0x00001066, 0x00001053, 0x00001053, 0x00001059 },
- + { 0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2 },
- + { 0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
- + { 0x0000985c, 0x3139605e, 0x3139605e, 0x3137605e, 0x3137605e, 0x3139605e },
- + { 0x00009860, 0x00058d18, 0x00058d18, 0x00058d20, 0x00058d20, 0x00058d18 },
- + { 0x00009864, 0x0000fe00, 0x0000fe00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- + { 0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
- + { 0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881 },
- + { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
- + { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
- + { 0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d, 0xd00a800d },
- + { 0x00009944, 0xffbc1010, 0xffbc1010, 0xffbc1020, 0xffbc1020, 0xffbc1010 },
- + { 0x00009960, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x00009964, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x000099b8, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c },
- + { 0x000099bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00, 0x00000c00 },
- + { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
- + { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
- + { 0x000099c8, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f },
- + { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
- + { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
- + { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x00009a00, 0x00000000, 0x00000000, 0x00058084, 0x00058084, 0x00000000 },
- + { 0x00009a04, 0x00000000, 0x00000000, 0x00058088, 0x00058088, 0x00000000 },
- + { 0x00009a08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c, 0x00000000 },
- + { 0x00009a0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100, 0x00000000 },
- + { 0x00009a10, 0x00000000, 0x00000000, 0x00058104, 0x00058104, 0x00000000 },
- + { 0x00009a14, 0x00000000, 0x00000000, 0x00058108, 0x00058108, 0x00000000 },
- + { 0x00009a18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c, 0x00000000 },
- + { 0x00009a1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110, 0x00000000 },
- + { 0x00009a20, 0x00000000, 0x00000000, 0x00058114, 0x00058114, 0x00000000 },
- + { 0x00009a24, 0x00000000, 0x00000000, 0x00058180, 0x00058180, 0x00000000 },
- + { 0x00009a28, 0x00000000, 0x00000000, 0x00058184, 0x00058184, 0x00000000 },
- + { 0x00009a2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188, 0x00000000 },
- + { 0x00009a30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c, 0x00000000 },
- + { 0x00009a34, 0x00000000, 0x00000000, 0x00058190, 0x00058190, 0x00000000 },
- + { 0x00009a38, 0x00000000, 0x00000000, 0x00058194, 0x00058194, 0x00000000 },
- + { 0x00009a3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0, 0x00000000 },
- + { 0x00009a40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c, 0x00000000 },
- + { 0x00009a44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8, 0x00000000 },
- + { 0x00009a48, 0x00000000, 0x00000000, 0x00058284, 0x00058284, 0x00000000 },
- + { 0x00009a4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288, 0x00000000 },
- + { 0x00009a50, 0x00000000, 0x00000000, 0x00058224, 0x00058224, 0x00000000 },
- + { 0x00009a54, 0x00000000, 0x00000000, 0x00058290, 0x00058290, 0x00000000 },
- + { 0x00009a58, 0x00000000, 0x00000000, 0x00058300, 0x00058300, 0x00000000 },
- + { 0x00009a5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304, 0x00000000 },
- + { 0x00009a60, 0x00000000, 0x00000000, 0x00058308, 0x00058308, 0x00000000 },
- + { 0x00009a64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c, 0x00000000 },
- + { 0x00009a68, 0x00000000, 0x00000000, 0x00058380, 0x00058380, 0x00000000 },
- + { 0x00009a6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384, 0x00000000 },
- + { 0x00009a70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000 },
- + { 0x00009a74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000 },
- + { 0x00009a78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000 },
- + { 0x00009a7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000 },
- + { 0x00009a80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000 },
- + { 0x00009a84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000 },
- + { 0x00009a88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00, 0x00000000 },
- + { 0x00009a8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04, 0x00000000 },
- + { 0x00009a90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08, 0x00000000 },
- + { 0x00009a94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c, 0x00000000 },
- + { 0x00009a98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80, 0x00000000 },
- + { 0x00009a9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84, 0x00000000 },
- + { 0x00009aa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88, 0x00000000 },
- + { 0x00009aa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c, 0x00000000 },
- + { 0x00009aa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90, 0x00000000 },
- + { 0x00009aac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80, 0x00000000 },
- + { 0x00009ab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84, 0x00000000 },
- + { 0x00009ab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88, 0x00000000 },
- + { 0x00009ab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c, 0x00000000 },
- + { 0x00009abc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90, 0x00000000 },
- + { 0x00009ac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c, 0x00000000 },
- + { 0x00009ac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310, 0x00000000 },
- + { 0x00009ac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384, 0x00000000 },
- + { 0x00009acc, 0x00000000, 0x00000000, 0x000db388, 0x000db388, 0x00000000 },
- + { 0x00009ad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324, 0x00000000 },
- + { 0x00009ad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704, 0x00000000 },
- + { 0x00009ad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4, 0x00000000 },
- + { 0x00009adc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8, 0x00000000 },
- + { 0x00009ae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710, 0x00000000 },
- + { 0x00009ae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714, 0x00000000 },
- + { 0x00009ae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720, 0x00000000 },
- + { 0x00009aec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724, 0x00000000 },
- + { 0x00009af0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728, 0x00000000 },
- + { 0x00009af4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c, 0x00000000 },
- + { 0x00009af8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0, 0x00000000 },
- + { 0x00009afc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4, 0x00000000 },
- + { 0x00009b00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8, 0x00000000 },
- + { 0x00009b04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0, 0x00000000 },
- + { 0x00009b08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4, 0x00000000 },
- + { 0x00009b0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8, 0x00000000 },
- + { 0x00009b10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5, 0x00000000 },
- + { 0x00009b14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9, 0x00000000 },
- + { 0x00009b18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad, 0x00000000 },
- + { 0x00009b1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1, 0x00000000 },
- + { 0x00009b20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5, 0x00000000 },
- + { 0x00009b24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9, 0x00000000 },
- + { 0x00009b28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5, 0x00000000 },
- + { 0x00009b2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9, 0x00000000 },
- + { 0x00009b30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1, 0x00000000 },
- + { 0x00009b34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5, 0x00000000 },
- + { 0x00009b38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9, 0x00000000 },
- + { 0x00009b3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6, 0x00000000 },
- + { 0x00009b40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca, 0x00000000 },
- + { 0x00009b44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce, 0x00000000 },
- + { 0x00009b48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2, 0x00000000 },
- + { 0x00009b4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6, 0x00000000 },
- + { 0x00009b50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3, 0x00000000 },
- + { 0x00009b54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7, 0x00000000 },
- + { 0x00009b58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb, 0x00000000 },
- + { 0x00009b5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf, 0x00000000 },
- + { 0x00009b60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7, 0x00000000 },
- + { 0x00009b64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009ba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009ba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009ba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009be0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009be4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009be8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000aa00, 0x00000000, 0x00000000, 0x00058084, 0x00058084, 0x00000000 },
- + { 0x0000aa04, 0x00000000, 0x00000000, 0x00058088, 0x00058088, 0x00000000 },
- + { 0x0000aa08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c, 0x00000000 },
- + { 0x0000aa0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100, 0x00000000 },
- + { 0x0000aa10, 0x00000000, 0x00000000, 0x00058104, 0x00058104, 0x00000000 },
- + { 0x0000aa14, 0x00000000, 0x00000000, 0x00058108, 0x00058108, 0x00000000 },
- + { 0x0000aa18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c, 0x00000000 },
- + { 0x0000aa1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110, 0x00000000 },
- + { 0x0000aa20, 0x00000000, 0x00000000, 0x00058114, 0x00058114, 0x00000000 },
- + { 0x0000aa24, 0x00000000, 0x00000000, 0x00058180, 0x00058180, 0x00000000 },
- + { 0x0000aa28, 0x00000000, 0x00000000, 0x00058184, 0x00058184, 0x00000000 },
- + { 0x0000aa2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188, 0x00000000 },
- + { 0x0000aa30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c, 0x00000000 },
- + { 0x0000aa34, 0x00000000, 0x00000000, 0x00058190, 0x00058190, 0x00000000 },
- + { 0x0000aa38, 0x00000000, 0x00000000, 0x00058194, 0x00058194, 0x00000000 },
- + { 0x0000aa3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0, 0x00000000 },
- + { 0x0000aa40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c, 0x00000000 },
- + { 0x0000aa44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8, 0x00000000 },
- + { 0x0000aa48, 0x00000000, 0x00000000, 0x00058284, 0x00058284, 0x00000000 },
- + { 0x0000aa4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288, 0x00000000 },
- + { 0x0000aa50, 0x00000000, 0x00000000, 0x00058224, 0x00058224, 0x00000000 },
- + { 0x0000aa54, 0x00000000, 0x00000000, 0x00058290, 0x00058290, 0x00000000 },
- + { 0x0000aa58, 0x00000000, 0x00000000, 0x00058300, 0x00058300, 0x00000000 },
- + { 0x0000aa5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304, 0x00000000 },
- + { 0x0000aa60, 0x00000000, 0x00000000, 0x00058308, 0x00058308, 0x00000000 },
- + { 0x0000aa64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c, 0x00000000 },
- + { 0x0000aa68, 0x00000000, 0x00000000, 0x00058380, 0x00058380, 0x00000000 },
- + { 0x0000aa6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384, 0x00000000 },
- + { 0x0000aa70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000 },
- + { 0x0000aa74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000 },
- + { 0x0000aa78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000 },
- + { 0x0000aa7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000 },
- + { 0x0000aa80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000 },
- + { 0x0000aa84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000 },
- + { 0x0000aa88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00, 0x00000000 },
- + { 0x0000aa8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04, 0x00000000 },
- + { 0x0000aa90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08, 0x00000000 },
- + { 0x0000aa94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c, 0x00000000 },
- + { 0x0000aa98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80, 0x00000000 },
- + { 0x0000aa9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84, 0x00000000 },
- + { 0x0000aaa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88, 0x00000000 },
- + { 0x0000aaa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c, 0x00000000 },
- + { 0x0000aaa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90, 0x00000000 },
- + { 0x0000aaac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80, 0x00000000 },
- + { 0x0000aab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84, 0x00000000 },
- + { 0x0000aab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88, 0x00000000 },
- + { 0x0000aab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c, 0x00000000 },
- + { 0x0000aabc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90, 0x00000000 },
- + { 0x0000aac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c, 0x00000000 },
- + { 0x0000aac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310, 0x00000000 },
- + { 0x0000aac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384, 0x00000000 },
- + { 0x0000aacc, 0x00000000, 0x00000000, 0x000db388, 0x000db388, 0x00000000 },
- + { 0x0000aad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324, 0x00000000 },
- + { 0x0000aad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704, 0x00000000 },
- + { 0x0000aad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4, 0x00000000 },
- + { 0x0000aadc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8, 0x00000000 },
- + { 0x0000aae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710, 0x00000000 },
- + { 0x0000aae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714, 0x00000000 },
- + { 0x0000aae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720, 0x00000000 },
- + { 0x0000aaec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724, 0x00000000 },
- + { 0x0000aaf0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728, 0x00000000 },
- + { 0x0000aaf4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c, 0x00000000 },
- + { 0x0000aaf8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0, 0x00000000 },
- + { 0x0000aafc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4, 0x00000000 },
- + { 0x0000ab00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8, 0x00000000 },
- + { 0x0000ab04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0, 0x00000000 },
- + { 0x0000ab08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4, 0x00000000 },
- + { 0x0000ab0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8, 0x00000000 },
- + { 0x0000ab10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5, 0x00000000 },
- + { 0x0000ab14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9, 0x00000000 },
- + { 0x0000ab18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad, 0x00000000 },
- + { 0x0000ab1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1, 0x00000000 },
- + { 0x0000ab20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5, 0x00000000 },
- + { 0x0000ab24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9, 0x00000000 },
- + { 0x0000ab28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5, 0x00000000 },
- + { 0x0000ab2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9, 0x00000000 },
- + { 0x0000ab30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1, 0x00000000 },
- + { 0x0000ab34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5, 0x00000000 },
- + { 0x0000ab38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9, 0x00000000 },
- + { 0x0000ab3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6, 0x00000000 },
- + { 0x0000ab40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca, 0x00000000 },
- + { 0x0000ab44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce, 0x00000000 },
- + { 0x0000ab48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2, 0x00000000 },
- + { 0x0000ab4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6, 0x00000000 },
- + { 0x0000ab50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3, 0x00000000 },
- + { 0x0000ab54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7, 0x00000000 },
- + { 0x0000ab58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb, 0x00000000 },
- + { 0x0000ab5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf, 0x00000000 },
- + { 0x0000ab60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7, 0x00000000 },
- + { 0x0000ab64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000aba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000aba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000aba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abe0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abe4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abe8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000a204, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004 },
- + { 0x0000a20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000, 0x0001f000 },
- + { 0x0000b20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000, 0x0001f000 },
- + { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
- + { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- + { 0x0000a250, 0x0004f000, 0x0004f000, 0x0004a000, 0x0004a000, 0x0004a000 },
- + { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
- +};
- +
- +static const u_int32_t ar9285Common_9285_1_2[][2] = {
- + { 0x0000000c, 0x00000000 },
- + { 0x00000030, 0x00020045 },
- + { 0x00000034, 0x00000005 },
- + { 0x00000040, 0x00000000 },
- + { 0x00000044, 0x00000008 },
- + { 0x00000048, 0x00000008 },
- + { 0x0000004c, 0x00000010 },
- + { 0x00000050, 0x00000000 },
- + { 0x00000054, 0x0000001f },
- + { 0x00000800, 0x00000000 },
- + { 0x00000804, 0x00000000 },
- + { 0x00000808, 0x00000000 },
- + { 0x0000080c, 0x00000000 },
- + { 0x00000810, 0x00000000 },
- + { 0x00000814, 0x00000000 },
- + { 0x00000818, 0x00000000 },
- + { 0x0000081c, 0x00000000 },
- + { 0x00000820, 0x00000000 },
- + { 0x00000824, 0x00000000 },
- + { 0x00001040, 0x002ffc0f },
- + { 0x00001044, 0x002ffc0f },
- + { 0x00001048, 0x002ffc0f },
- + { 0x0000104c, 0x002ffc0f },
- + { 0x00001050, 0x002ffc0f },
- + { 0x00001054, 0x002ffc0f },
- + { 0x00001058, 0x002ffc0f },
- + { 0x0000105c, 0x002ffc0f },
- + { 0x00001060, 0x002ffc0f },
- + { 0x00001064, 0x002ffc0f },
- + { 0x00001230, 0x00000000 },
- + { 0x00001270, 0x00000000 },
- + { 0x00001038, 0x00000000 },
- + { 0x00001078, 0x00000000 },
- + { 0x000010b8, 0x00000000 },
- + { 0x000010f8, 0x00000000 },
- + { 0x00001138, 0x00000000 },
- + { 0x00001178, 0x00000000 },
- + { 0x000011b8, 0x00000000 },
- + { 0x000011f8, 0x00000000 },
- + { 0x00001238, 0x00000000 },
- + { 0x00001278, 0x00000000 },
- + { 0x000012b8, 0x00000000 },
- + { 0x000012f8, 0x00000000 },
- + { 0x00001338, 0x00000000 },
- + { 0x00001378, 0x00000000 },
- + { 0x000013b8, 0x00000000 },
- + { 0x000013f8, 0x00000000 },
- + { 0x00001438, 0x00000000 },
- + { 0x00001478, 0x00000000 },
- + { 0x000014b8, 0x00000000 },
- + { 0x000014f8, 0x00000000 },
- + { 0x00001538, 0x00000000 },
- + { 0x00001578, 0x00000000 },
- + { 0x000015b8, 0x00000000 },
- + { 0x000015f8, 0x00000000 },
- + { 0x00001638, 0x00000000 },
- + { 0x00001678, 0x00000000 },
- + { 0x000016b8, 0x00000000 },
- + { 0x000016f8, 0x00000000 },
- + { 0x00001738, 0x00000000 },
- + { 0x00001778, 0x00000000 },
- + { 0x000017b8, 0x00000000 },
- + { 0x000017f8, 0x00000000 },
- + { 0x0000103c, 0x00000000 },
- + { 0x0000107c, 0x00000000 },
- + { 0x000010bc, 0x00000000 },
- + { 0x000010fc, 0x00000000 },
- + { 0x0000113c, 0x00000000 },
- + { 0x0000117c, 0x00000000 },
- + { 0x000011bc, 0x00000000 },
- + { 0x000011fc, 0x00000000 },
- + { 0x0000123c, 0x00000000 },
- + { 0x0000127c, 0x00000000 },
- + { 0x000012bc, 0x00000000 },
- + { 0x000012fc, 0x00000000 },
- + { 0x0000133c, 0x00000000 },
- + { 0x0000137c, 0x00000000 },
- + { 0x000013bc, 0x00000000 },
- + { 0x000013fc, 0x00000000 },
- + { 0x0000143c, 0x00000000 },
- + { 0x0000147c, 0x00000000 },
- + { 0x00004030, 0x00000002 },
- + { 0x0000403c, 0x00000002 },
- + { 0x00004024, 0x0000001f },
- + { 0x00004060, 0x00000000 },
- + { 0x00004064, 0x00000000 },
- + { 0x00007010, 0x00000031 },
- + { 0x00007034, 0x00000002 },
- + { 0x00007038, 0x000004c2 },
- + { 0x00008004, 0x00000000 },
- + { 0x00008008, 0x00000000 },
- + { 0x0000800c, 0x00000000 },
- + { 0x00008018, 0x00000700 },
- + { 0x00008020, 0x00000000 },
- + { 0x00008038, 0x00000000 },
- + { 0x0000803c, 0x00000000 },
- + { 0x00008048, 0x00000000 },
- + { 0x00008054, 0x00000000 },
- + { 0x00008058, 0x00000000 },
- + { 0x0000805c, 0x000fc78f },
- + { 0x00008060, 0x0000000f },
- + { 0x00008064, 0x00000000 },
- + { 0x00008070, 0x00000000 },
- + { 0x000080c0, 0x2a80001a },
- + { 0x000080c4, 0x05dc01e0 },
- + { 0x000080c8, 0x1f402710 },
- + { 0x000080cc, 0x01f40000 },
- + { 0x000080d0, 0x00001e00 },
- + { 0x000080d4, 0x00000000 },
- + { 0x000080d8, 0x00400000 },
- + { 0x000080e0, 0xffffffff },
- + { 0x000080e4, 0x0000ffff },
- + { 0x000080e8, 0x003f3f3f },
- + { 0x000080ec, 0x00000000 },
- + { 0x000080f0, 0x00000000 },
- + { 0x000080f4, 0x00000000 },
- + { 0x000080f8, 0x00000000 },
- + { 0x000080fc, 0x00020000 },
- + { 0x00008100, 0x00020000 },
- + { 0x00008104, 0x00000001 },
- + { 0x00008108, 0x00000052 },
- + { 0x0000810c, 0x00000000 },
- + { 0x00008110, 0x00000168 },
- + { 0x00008118, 0x000100aa },
- + { 0x0000811c, 0x00003210 },
- + { 0x00008120, 0x08f04810 },
- + { 0x00008124, 0x00000000 },
- + { 0x00008128, 0x00000000 },
- + { 0x0000812c, 0x00000000 },
- + { 0x00008130, 0x00000000 },
- + { 0x00008134, 0x00000000 },
- + { 0x00008138, 0x00000000 },
- + { 0x0000813c, 0x00000000 },
- + { 0x00008144, 0xffffffff },
- + { 0x00008168, 0x00000000 },
- + { 0x0000816c, 0x00000000 },
- + { 0x00008170, 0x32143320 },
- + { 0x00008174, 0xfaa4fa50 },
- + { 0x00008178, 0x00000100 },
- + { 0x0000817c, 0x00000000 },
- + { 0x000081c0, 0x00000000 },
- + { 0x000081d0, 0x0000320a },
- + { 0x000081ec, 0x00000000 },
- + { 0x000081f0, 0x00000000 },
- + { 0x000081f4, 0x00000000 },
- + { 0x000081f8, 0x00000000 },
- + { 0x000081fc, 0x00000000 },
- + { 0x00008200, 0x00000000 },
- + { 0x00008204, 0x00000000 },
- + { 0x00008208, 0x00000000 },
- + { 0x0000820c, 0x00000000 },
- + { 0x00008210, 0x00000000 },
- + { 0x00008214, 0x00000000 },
- + { 0x00008218, 0x00000000 },
- + { 0x0000821c, 0x00000000 },
- + { 0x00008220, 0x00000000 },
- + { 0x00008224, 0x00000000 },
- + { 0x00008228, 0x00000000 },
- + { 0x0000822c, 0x00000000 },
- + { 0x00008230, 0x00000000 },
- + { 0x00008234, 0x00000000 },
- + { 0x00008238, 0x00000000 },
- + { 0x0000823c, 0x00000000 },
- + { 0x00008240, 0x00100000 },
- + { 0x00008244, 0x0010f400 },
- + { 0x00008248, 0x00000100 },
- + { 0x0000824c, 0x0001e800 },
- + { 0x00008250, 0x00000000 },
- + { 0x00008254, 0x00000000 },
- + { 0x00008258, 0x00000000 },
- + { 0x0000825c, 0x400000ff },
- + { 0x00008260, 0x00080922 },
- + { 0x00008264, 0x88a00010 },
- + { 0x00008270, 0x00000000 },
- + { 0x00008274, 0x40000000 },
- + { 0x00008278, 0x003e4180 },
- + { 0x0000827c, 0x00000000 },
- + { 0x00008284, 0x0000002c },
- + { 0x00008288, 0x0000002c },
- + { 0x0000828c, 0x00000000 },
- + { 0x00008294, 0x00000000 },
- + { 0x00008298, 0x00000000 },
- + { 0x0000829c, 0x00000000 },
- + { 0x00008300, 0x00000040 },
- + { 0x00008314, 0x00000000 },
- + { 0x00008328, 0x00000000 },
- + { 0x0000832c, 0x00000001 },
- + { 0x00008330, 0x00000302 },
- + { 0x00008334, 0x00000e00 },
- + { 0x00008338, 0x00ff0000 },
- + { 0x0000833c, 0x00000000 },
- + { 0x00008340, 0x00010380 },
- + { 0x00008344, 0x00481043 },
- + { 0x00009808, 0x00000000 },
- + { 0x0000980c, 0xafe68e30 },
- + { 0x00009810, 0xfd14e000 },
- + { 0x00009814, 0x9c0a9f6b },
- + { 0x0000981c, 0x00000000 },
- + { 0x0000982c, 0x0000a000 },
- + { 0x00009830, 0x00000000 },
- + { 0x0000983c, 0x00200400 },
- + { 0x0000984c, 0x0040233c },
- + { 0x00009854, 0x00000044 },
- + { 0x00009900, 0x00000000 },
- + { 0x00009904, 0x00000000 },
- + { 0x00009908, 0x00000000 },
- + { 0x0000990c, 0x00000000 },
- + { 0x00009910, 0x01002310 },
- + { 0x0000991c, 0x10000fff },
- + { 0x00009920, 0x04900000 },
- + { 0x00009928, 0x00000001 },
- + { 0x0000992c, 0x00000004 },
- + { 0x00009934, 0x1e1f2022 },
- + { 0x00009938, 0x0a0b0c0d },
- + { 0x0000993c, 0x00000000 },
- + { 0x00009940, 0x14750604 },
- + { 0x00009948, 0x9280c00a },
- + { 0x0000994c, 0x00020028 },
- + { 0x00009954, 0x5f3ca3de },
- + { 0x00009958, 0x2108ecff },
- + { 0x00009968, 0x000003ce },
- + { 0x00009970, 0x192bb514 },
- + { 0x00009974, 0x00000000 },
- + { 0x00009978, 0x00000001 },
- + { 0x0000997c, 0x00000000 },
- + { 0x00009980, 0x00000000 },
- + { 0x00009984, 0x00000000 },
- + { 0x00009988, 0x00000000 },
- + { 0x0000998c, 0x00000000 },
- + { 0x00009990, 0x00000000 },
- + { 0x00009994, 0x00000000 },
- + { 0x00009998, 0x00000000 },
- + { 0x0000999c, 0x00000000 },
- + { 0x000099a0, 0x00000000 },
- + { 0x000099a4, 0x00000001 },
- + { 0x000099a8, 0x201fff00 },
- + { 0x000099ac, 0x2def0400 },
- + { 0x000099b0, 0x03051000 },
- + { 0x000099b4, 0x00000820 },
- + { 0x000099dc, 0x00000000 },
- + { 0x000099e0, 0x00000000 },
- + { 0x000099e4, 0xaaaaaaaa },
- + { 0x000099e8, 0x3c466478 },
- + { 0x000099ec, 0x0cc80caa },
- + { 0x000099f0, 0x00000000 },
- + { 0x0000a208, 0x803e68c8 },
- + { 0x0000a210, 0x4080a333 },
- + { 0x0000a214, 0x00206c10 },
- + { 0x0000a218, 0x009c4060 },
- + { 0x0000a220, 0x01834061 },
- + { 0x0000a224, 0x00000400 },
- + { 0x0000a228, 0x000003b5 },
- + { 0x0000a22c, 0x00000000 },
- + { 0x0000a234, 0x20202020 },
- + { 0x0000a238, 0x20202020 },
- + { 0x0000a244, 0x00000000 },
- + { 0x0000a248, 0xfffffffc },
- + { 0x0000a24c, 0x00000000 },
- + { 0x0000a254, 0x00000000 },
- + { 0x0000a258, 0x0ccb5380 },
- + { 0x0000a25c, 0x15151501 },
- + { 0x0000a260, 0xdfa90f01 },
- + { 0x0000a268, 0x00000000 },
- + { 0x0000a26c, 0x0ebae9e6 },
- + { 0x0000d270, 0x0d820820 },
- + { 0x0000d35c, 0x07ffffef },
- + { 0x0000d360, 0x0fffffe7 },
- + { 0x0000d364, 0x17ffffe5 },
- + { 0x0000d368, 0x1fffffe4 },
- + { 0x0000d36c, 0x37ffffe3 },
- + { 0x0000d370, 0x3fffffe3 },
- + { 0x0000d374, 0x57ffffe3 },
- + { 0x0000d378, 0x5fffffe2 },
- + { 0x0000d37c, 0x7fffffe2 },
- + { 0x0000d380, 0x7f3c7bba },
- + { 0x0000d384, 0xf3307ff0 },
- + { 0x0000a388, 0x0c000000 },
- + { 0x0000a38c, 0x20202020 },
- + { 0x0000a390, 0x20202020 },
- + { 0x0000a39c, 0x00000001 },
- + { 0x0000a3a0, 0x00000000 },
- + { 0x0000a3a4, 0x00000000 },
- + { 0x0000a3a8, 0x00000000 },
- + { 0x0000a3ac, 0x00000000 },
- + { 0x0000a3b0, 0x00000000 },
- + { 0x0000a3b4, 0x00000000 },
- + { 0x0000a3b8, 0x00000000 },
- + { 0x0000a3bc, 0x00000000 },
- + { 0x0000a3c0, 0x00000000 },
- + { 0x0000a3c4, 0x00000000 },
- + { 0x0000a3cc, 0x20202020 },
- + { 0x0000a3d0, 0x20202020 },
- + { 0x0000a3d4, 0x20202020 },
- + { 0x0000a3e4, 0x00000000 },
- + { 0x0000a3e8, 0x18c43433 },
- + { 0x0000a3ec, 0x00f70081 },
- + { 0x00007800, 0x00140000 },
- + { 0x00007804, 0x0e4548d8 },
- + { 0x00007808, 0x54214514 },
- + { 0x0000780c, 0x02025830 },
- + { 0x00007810, 0x71c0d388 },
- + { 0x0000781c, 0x00000000 },
- + { 0x00007824, 0x00d86fff },
- + { 0x0000782c, 0x6e36d97b },
- + { 0x00007834, 0x71400087 },
- + { 0x00007844, 0x000c0db6 },
- + { 0x00007848, 0x6db6246f },
- + { 0x0000784c, 0x6d9b66db },
- + { 0x00007850, 0x6d8c6dba },
- + { 0x00007854, 0x00040000 },
- + { 0x00007858, 0xdb003012 },
- + { 0x0000785c, 0x04924914 },
- + { 0x00007860, 0x21084210 },
- + { 0x00007864, 0xf7d7ffde },
- + { 0x00007868, 0xc2034080 },
- + { 0x00007870, 0x10142c00 },
- +};
- +
- +static const u_int32_t ar9285Modes_high_power_tx_gain_9285_1_2[][6] = {
- + /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- + { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a304, 0x00000000, 0x00000000, 0x00006200, 0x00006200, 0x00000000 },
- + { 0x0000a308, 0x00000000, 0x00000000, 0x00008201, 0x00008201, 0x00000000 },
- + { 0x0000a30c, 0x00000000, 0x00000000, 0x0000b240, 0x0000b240, 0x00000000 },
- + { 0x0000a310, 0x00000000, 0x00000000, 0x0000d241, 0x0000d241, 0x00000000 },
- + { 0x0000a314, 0x00000000, 0x00000000, 0x0000f600, 0x0000f600, 0x00000000 },
- + { 0x0000a318, 0x00000000, 0x00000000, 0x00012800, 0x00012800, 0x00000000 },
- + { 0x0000a31c, 0x00000000, 0x00000000, 0x00016802, 0x00016802, 0x00000000 },
- + { 0x0000a320, 0x00000000, 0x00000000, 0x0001b805, 0x0001b805, 0x00000000 },
- + { 0x0000a324, 0x00000000, 0x00000000, 0x00021a80, 0x00021a80, 0x00000000 },
- + { 0x0000a328, 0x00000000, 0x00000000, 0x00028b00, 0x00028b00, 0x00000000 },
- + { 0x0000a32c, 0x00000000, 0x00000000, 0x0002ab40, 0x0002ab40, 0x00000000 },
- + { 0x0000a330, 0x00000000, 0x00000000, 0x0002cd80, 0x0002cd80, 0x00000000 },
- + { 0x0000a334, 0x00000000, 0x00000000, 0x00033d82, 0x00033d82, 0x00000000 },
- + { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
- + { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
- + { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x00007814, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8 },
- + { 0x00007828, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b },
- + { 0x00007830, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e },
- + { 0x00007838, 0xfac68803, 0xfac68803, 0xfac68803, 0xfac68803, 0xfac68803 },
- + { 0x0000783c, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe },
- + { 0x00007840, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20 },
- + { 0x0000786c, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe },
- + { 0x00007820, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00 },
- + { 0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a216652, 0x0a216652, 0x0a22a652 },
- + { 0x0000a278, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
- + { 0x0000a27c, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7 },
- + { 0x0000a394, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
- + { 0x0000a398, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7 },
- + { 0x0000a3dc, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
- + { 0x0000a3e0, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7 },
- +};
- +
- +static const u_int32_t ar9285Modes_original_tx_gain_9285_1_2[][6] = {
- + /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- + { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a304, 0x00000000, 0x00000000, 0x00009200, 0x00009200, 0x00000000 },
- + { 0x0000a308, 0x00000000, 0x00000000, 0x00010208, 0x00010208, 0x00000000 },
- + { 0x0000a30c, 0x00000000, 0x00000000, 0x00019608, 0x00019608, 0x00000000 },
- + { 0x0000a310, 0x00000000, 0x00000000, 0x00022618, 0x00022618, 0x00000000 },
- + { 0x0000a314, 0x00000000, 0x00000000, 0x0002a6c9, 0x0002a6c9, 0x00000000 },
- + { 0x0000a318, 0x00000000, 0x00000000, 0x00031710, 0x00031710, 0x00000000 },
- + { 0x0000a31c, 0x00000000, 0x00000000, 0x00035718, 0x00035718, 0x00000000 },
- + { 0x0000a320, 0x00000000, 0x00000000, 0x00038758, 0x00038758, 0x00000000 },
- + { 0x0000a324, 0x00000000, 0x00000000, 0x0003c75a, 0x0003c75a, 0x00000000 },
- + { 0x0000a328, 0x00000000, 0x00000000, 0x0004075c, 0x0004075c, 0x00000000 },
- + { 0x0000a32c, 0x00000000, 0x00000000, 0x0004475e, 0x0004475e, 0x00000000 },
- + { 0x0000a330, 0x00000000, 0x00000000, 0x0004679f, 0x0004679f, 0x00000000 },
- + { 0x0000a334, 0x00000000, 0x00000000, 0x000487df, 0x000487df, 0x00000000 },
- + { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
- + { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
- + { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x00007814, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8 },
- + { 0x00007828, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b },
- + { 0x00007830, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e },
- + { 0x00007838, 0xfac68801, 0xfac68801, 0xfac68801, 0xfac68801, 0xfac68801 },
- + { 0x0000783c, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe },
- + { 0x00007840, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20 },
- + { 0x0000786c, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4 },
- + { 0x00007820, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04 },
- + { 0x0000a274, 0x0a21c652, 0x0a21c652, 0x0a21a652, 0x0a21a652, 0x0a22a652 },
- + { 0x0000a278, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
- + { 0x0000a27c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c },
- + { 0x0000a394, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
- + { 0x0000a398, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c },
- + { 0x0000a3dc, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
- + { 0x0000a3e0, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c },
- +};
- +
- +static const u_int32_t ar9285Modes_XE2_0_normal_power[][6] = {
- + { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a304, 0x00000000, 0x00000000, 0x00009200, 0x00009200, 0x00000000 },
- + { 0x0000a308, 0x00000000, 0x00000000, 0x00010208, 0x00010208, 0x00000000 },
- + { 0x0000a30c, 0x00000000, 0x00000000, 0x00019608, 0x00019608, 0x00000000 },
- + { 0x0000a310, 0x00000000, 0x00000000, 0x00022618, 0x00022618, 0x00000000 },
- + { 0x0000a314, 0x00000000, 0x00000000, 0x0002a6c9, 0x0002a6c9, 0x00000000 },
- + { 0x0000a318, 0x00000000, 0x00000000, 0x00031710, 0x00031710, 0x00000000 },
- + { 0x0000a31c, 0x00000000, 0x00000000, 0x00035718, 0x00035718, 0x00000000 },
- + { 0x0000a320, 0x00000000, 0x00000000, 0x00038758, 0x00038758, 0x00000000 },
- + { 0x0000a324, 0x00000000, 0x00000000, 0x0003c75a, 0x0003c75a, 0x00000000 },
- + { 0x0000a328, 0x00000000, 0x00000000, 0x0004075c, 0x0004075c, 0x00000000 },
- + { 0x0000a32c, 0x00000000, 0x00000000, 0x0004475e, 0x0004475e, 0x00000000 },
- + { 0x0000a330, 0x00000000, 0x00000000, 0x0004679f, 0x0004679f, 0x00000000 },
- + { 0x0000a334, 0x00000000, 0x00000000, 0x000487df, 0x000487df, 0x00000000 },
- + { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
- + { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
- + { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x00007814, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8 },
- + { 0x00007828, 0x4ad2491b, 0x4ad2491b, 0x2ad2491b, 0x4ad2491b, 0x4ad2491b },
- + { 0x00007830, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6dbae },
- + { 0x00007838, 0xdac71441, 0xdac71441, 0xdac71441, 0xdac71441, 0xdac71441 },
- + { 0x0000783c, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe },
- + { 0x00007840, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c },
- + { 0x0000786c, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4 },
- + { 0x00007820, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04 },
- + { 0x0000a274, 0x0a21c652, 0x0a21c652, 0x0a21a652, 0x0a21a652, 0x0a22a652 },
- + { 0x0000a278, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
- + { 0x0000a27c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c },
- + { 0x0000a394, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
- + { 0x0000a398, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c },
- + { 0x0000a3dc, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
- + { 0x0000a3e0, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c },
- +};
- +
- +static const u_int32_t ar9285Modes_XE2_0_high_power[][6] = {
- + { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a304, 0x00000000, 0x00000000, 0x00006200, 0x00006200, 0x00000000 },
- + { 0x0000a308, 0x00000000, 0x00000000, 0x00008201, 0x00008201, 0x00000000 },
- + { 0x0000a30c, 0x00000000, 0x00000000, 0x0000b240, 0x0000b240, 0x00000000 },
- + { 0x0000a310, 0x00000000, 0x00000000, 0x0000d241, 0x0000d241, 0x00000000 },
- + { 0x0000a314, 0x00000000, 0x00000000, 0x0000f600, 0x0000f600, 0x00000000 },
- + { 0x0000a318, 0x00000000, 0x00000000, 0x00012800, 0x00012800, 0x00000000 },
- + { 0x0000a31c, 0x00000000, 0x00000000, 0x00016802, 0x00016802, 0x00000000 },
- + { 0x0000a320, 0x00000000, 0x00000000, 0x0001b805, 0x0001b805, 0x00000000 },
- + { 0x0000a324, 0x00000000, 0x00000000, 0x00021a80, 0x00021a80, 0x00000000 },
- + { 0x0000a328, 0x00000000, 0x00000000, 0x00028b00, 0x00028b00, 0x00000000 },
- + { 0x0000a32c, 0x00000000, 0x00000000, 0x0002ab40, 0x0002ab40, 0x00000000 },
- + { 0x0000a330, 0x00000000, 0x00000000, 0x0002cd80, 0x0002cd80, 0x00000000 },
- + { 0x0000a334, 0x00000000, 0x00000000, 0x00033d82, 0x00033d82, 0x00000000 },
- + { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
- + { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
- + { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x00007814, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8 },
- + { 0x00007828, 0x4ad2491b, 0x4ad2491b, 0x2ad2491b, 0x4ad2491b, 0x4ad2491b },
- + { 0x00007830, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e },
- + { 0x00007838, 0xdac71443, 0xdac71443, 0xdac71443, 0xdac71443, 0xdac71443 },
- + { 0x0000783c, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe },
- + { 0x00007840, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c },
- + { 0x0000786c, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe },
- + { 0x00007820, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00 },
- + { 0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a216652, 0x0a216652, 0x0a22a652 },
- + { 0x0000a278, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
- + { 0x0000a27c, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7 },
- + { 0x0000a394, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
- + { 0x0000a398, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7 },
- + { 0x0000a3dc, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
- + { 0x0000a3e0, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7 },
- +};
- +
- +static const u_int32_t ar9285PciePhy_clkreq_always_on_L1_9285_1_2[][2] = {
- + {0x00004040, 0x9248fd00 },
- + {0x00004040, 0x24924924 },
- + {0x00004040, 0xa8000019 },
- + {0x00004040, 0x13160820 },
- + {0x00004040, 0xe5980560 },
- + {0x00004040, 0xc01dcffd },
- + {0x00004040, 0x1aaabe41 },
- + {0x00004040, 0xbe105554 },
- + {0x00004040, 0x00043007 },
- + {0x00004044, 0x00000000 },
- +};
- +
- +static const u_int32_t ar9285PciePhy_clkreq_off_L1_9285_1_2[][2] = {
- + {0x00004040, 0x9248fd00 },
- + {0x00004040, 0x24924924 },
- + {0x00004040, 0xa8000019 },
- + {0x00004040, 0x13160820 },
- + {0x00004040, 0xe5980560 },
- + {0x00004040, 0xc01dcffc },
- + {0x00004040, 0x1aaabe41 },
- + {0x00004040, 0xbe105554 },
- + {0x00004040, 0x00043007 },
- + {0x00004044, 0x00000000 },
- +};
- +
- +/* AR9287 Revision 10 */
- +static const u_int32_t ar9287Modes_9287_1_0[][6] = {
- + /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- + { 0x00001030, 0x00000000, 0x00000000, 0x000002c0, 0x00000160, 0x000001e0 },
- + { 0x00001070, 0x00000000, 0x00000000, 0x00000318, 0x0000018c, 0x000001e0 },
- + { 0x000010b0, 0x00000000, 0x00000000, 0x00007c70, 0x00003e38, 0x00001180 },
- + { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
- + { 0x00008014, 0x00000000, 0x00000000, 0x10801600, 0x08400b00, 0x06e006e0 },
- + { 0x0000801c, 0x00000000, 0x00000000, 0x12e00057, 0x12e0002b, 0x0988004f },
- + { 0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810 },
- + { 0x000081d0, 0x00003200, 0x00003200, 0x0000320a, 0x0000320a, 0x0000320a },
- + { 0x00008318, 0x00000000, 0x00000000, 0x00006880, 0x00003440, 0x00006880 },
- + { 0x00009804, 0x00000000, 0x00000000, 0x000003c4, 0x00000300, 0x00000303 },
- + { 0x00009820, 0x00000000, 0x00000000, 0x02020200, 0x02020200, 0x02020200 },
- + { 0x00009824, 0x00000000, 0x00000000, 0x01000e0e, 0x01000e0e, 0x01000e0e },
- + { 0x00009828, 0x00000000, 0x00000000, 0x0a020001, 0x0a020001, 0x0a020001 },
- + { 0x00009834, 0x00000000, 0x00000000, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- + { 0x00009838, 0x00000003, 0x00000003, 0x00000007, 0x00000007, 0x00000007 },
- + { 0x00009840, 0x206a002e, 0x206a002e, 0x206a012e, 0x206a012e, 0x206a012e },
- + { 0x00009844, 0x03720000, 0x03720000, 0x037216a0, 0x037216a0, 0x037216a0 },
- + { 0x00009850, 0x60000000, 0x60000000, 0x6d4000e2, 0x6c4000e2, 0x6c4000e2 },
- + { 0x00009858, 0x7c000d00, 0x7c000d00, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
- + { 0x0000985c, 0x3100005e, 0x3100005e, 0x3139605e, 0x31395d5e, 0x31395d5e },
- + { 0x00009860, 0x00058d00, 0x00058d00, 0x00058d20, 0x00058d20, 0x00058d18 },
- + { 0x00009864, 0x00000e00, 0x00000e00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- + { 0x00009868, 0x000040c0, 0x000040c0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
- + { 0x0000986c, 0x00000080, 0x00000080, 0x06903881, 0x06903881, 0x06903881 },
- + { 0x00009914, 0x00000000, 0x00000000, 0x00001130, 0x00000898, 0x000007d0 },
- + { 0x00009918, 0x00000000, 0x00000000, 0x00000016, 0x0000000b, 0x00000016 },
- + { 0x00009924, 0xd00a8a01, 0xd00a8a01, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d },
- + { 0x00009944, 0xefbc0000, 0xefbc0000, 0xefbc1010, 0xefbc1010, 0xefbc1010 },
- + { 0x00009960, 0x00000000, 0x00000000, 0x00000010, 0x00000010, 0x00000010 },
- + { 0x0000a960, 0x00000000, 0x00000000, 0x00000010, 0x00000010, 0x00000010 },
- + { 0x00009964, 0x00000000, 0x00000000, 0x00000210, 0x00000210, 0x00000210 },
- + { 0x0000c968, 0x00000200, 0x00000200, 0x000003ce, 0x000003ce, 0x000003ce },
- + { 0x000099b8, 0x00000000, 0x00000000, 0x0000001c, 0x0000001c, 0x0000001c },
- + { 0x000099bc, 0x00000000, 0x00000000, 0x00000c00, 0x00000c00, 0x00000c00 },
- + { 0x000099c0, 0x00000000, 0x00000000, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
- + { 0x0000a204, 0x00000440, 0x00000440, 0x00000444, 0x00000444, 0x00000444 },
- + { 0x0000a20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000b20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a21c, 0x1803800a, 0x1803800a, 0x1883800a, 0x1883800a, 0x1883800a },
- + { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- + { 0x0000a250, 0x00000000, 0x00000000, 0x0004a000, 0x0004a000, 0x0004a000 },
- + { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
- + { 0x0000a3d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- +};
- +
- +static const u_int32_t ar9287Common_9287_1_0[][2] = {
- + { 0x0000000c, 0x00000000 },
- + { 0x00000030, 0x00020015 },
- + { 0x00000034, 0x00000005 },
- + { 0x00000040, 0x00000000 },
- + { 0x00000044, 0x00000008 },
- + { 0x00000048, 0x00000008 },
- + { 0x0000004c, 0x00000010 },
- + { 0x00000050, 0x00000000 },
- + { 0x00000054, 0x0000001f },
- + { 0x00000800, 0x00000000 },
- + { 0x00000804, 0x00000000 },
- + { 0x00000808, 0x00000000 },
- + { 0x0000080c, 0x00000000 },
- + { 0x00000810, 0x00000000 },
- + { 0x00000814, 0x00000000 },
- + { 0x00000818, 0x00000000 },
- + { 0x0000081c, 0x00000000 },
- + { 0x00000820, 0x00000000 },
- + { 0x00000824, 0x00000000 },
- + { 0x00001040, 0x002ffc0f },
- + { 0x00001044, 0x002ffc0f },
- + { 0x00001048, 0x002ffc0f },
- + { 0x0000104c, 0x002ffc0f },
- + { 0x00001050, 0x002ffc0f },
- + { 0x00001054, 0x002ffc0f },
- + { 0x00001058, 0x002ffc0f },
- + { 0x0000105c, 0x002ffc0f },
- + { 0x00001060, 0x002ffc0f },
- + { 0x00001064, 0x002ffc0f },
- + { 0x00001230, 0x00000000 },
- + { 0x00001270, 0x00000000 },
- + { 0x00001038, 0x00000000 },
- + { 0x00001078, 0x00000000 },
- + { 0x000010b8, 0x00000000 },
- + { 0x000010f8, 0x00000000 },
- + { 0x00001138, 0x00000000 },
- + { 0x00001178, 0x00000000 },
- + { 0x000011b8, 0x00000000 },
- + { 0x000011f8, 0x00000000 },
- + { 0x00001238, 0x00000000 },
- + { 0x00001278, 0x00000000 },
- + { 0x000012b8, 0x00000000 },
- + { 0x000012f8, 0x00000000 },
- + { 0x00001338, 0x00000000 },
- + { 0x00001378, 0x00000000 },
- + { 0x000013b8, 0x00000000 },
- + { 0x000013f8, 0x00000000 },
- + { 0x00001438, 0x00000000 },
- + { 0x00001478, 0x00000000 },
- + { 0x000014b8, 0x00000000 },
- + { 0x000014f8, 0x00000000 },
- + { 0x00001538, 0x00000000 },
- + { 0x00001578, 0x00000000 },
- + { 0x000015b8, 0x00000000 },
- + { 0x000015f8, 0x00000000 },
- + { 0x00001638, 0x00000000 },
- + { 0x00001678, 0x00000000 },
- + { 0x000016b8, 0x00000000 },
- + { 0x000016f8, 0x00000000 },
- + { 0x00001738, 0x00000000 },
- + { 0x00001778, 0x00000000 },
- + { 0x000017b8, 0x00000000 },
- + { 0x000017f8, 0x00000000 },
- + { 0x0000103c, 0x00000000 },
- + { 0x0000107c, 0x00000000 },
- + { 0x000010bc, 0x00000000 },
- + { 0x000010fc, 0x00000000 },
- + { 0x0000113c, 0x00000000 },
- + { 0x0000117c, 0x00000000 },
- + { 0x000011bc, 0x00000000 },
- + { 0x000011fc, 0x00000000 },
- + { 0x0000123c, 0x00000000 },
- + { 0x0000127c, 0x00000000 },
- + { 0x000012bc, 0x00000000 },
- + { 0x000012fc, 0x00000000 },
- + { 0x0000133c, 0x00000000 },
- + { 0x0000137c, 0x00000000 },
- + { 0x000013bc, 0x00000000 },
- + { 0x000013fc, 0x00000000 },
- + { 0x0000143c, 0x00000000 },
- + { 0x0000147c, 0x00000000 },
- + { 0x00004030, 0x00000002 },
- + { 0x0000403c, 0x00000002 },
- + { 0x00004024, 0x0000001f },
- + { 0x00004060, 0x00000000 },
- + { 0x00004064, 0x00000000 },
- + { 0x00007010, 0x00000033 },
- + { 0x00007020, 0x00000000 },
- + { 0x00007034, 0x00000002 },
- + { 0x00007038, 0x000004c2 },
- + { 0x00008004, 0x00000000 },
- + { 0x00008008, 0x00000000 },
- + { 0x0000800c, 0x00000000 },
- + { 0x00008018, 0x00000700 },
- + { 0x00008020, 0x00000000 },
- + { 0x00008038, 0x00000000 },
- + { 0x0000803c, 0x00000000 },
- + { 0x00008048, 0x40000000 },
- + { 0x00008054, 0x00000000 },
- + { 0x00008058, 0x00000000 },
- + { 0x0000805c, 0x000fc78f },
- + { 0x00008060, 0x0000000f },
- + { 0x00008064, 0x00000000 },
- + { 0x00008070, 0x00000000 },
- + { 0x000080c0, 0x2a80001a },
- + { 0x000080c4, 0x05dc01e0 },
- + { 0x000080c8, 0x1f402710 },
- + { 0x000080cc, 0x01f40000 },
- + { 0x000080d0, 0x00001e00 },
- + { 0x000080d4, 0x00000000 },
- + { 0x000080d8, 0x00400000 },
- + { 0x000080e0, 0xffffffff },
- + { 0x000080e4, 0x0000ffff },
- + { 0x000080e8, 0x003f3f3f },
- + { 0x000080ec, 0x00000000 },
- + { 0x000080f0, 0x00000000 },
- + { 0x000080f4, 0x00000000 },
- + { 0x000080f8, 0x00000000 },
- + { 0x000080fc, 0x00020000 },
- + { 0x00008100, 0x00020000 },
- + { 0x00008104, 0x00000001 },
- + { 0x00008108, 0x00000052 },
- + { 0x0000810c, 0x00000000 },
- + { 0x00008110, 0x00000168 },
- + { 0x00008118, 0x000100aa },
- + { 0x0000811c, 0x00003210 },
- + { 0x00008124, 0x00000000 },
- + { 0x00008128, 0x00000000 },
- + { 0x0000812c, 0x00000000 },
- + { 0x00008130, 0x00000000 },
- + { 0x00008134, 0x00000000 },
- + { 0x00008138, 0x00000000 },
- + { 0x0000813c, 0x00000000 },
- + { 0x00008144, 0xffffffff },
- + { 0x00008168, 0x00000000 },
- + { 0x0000816c, 0x00000000 },
- + { 0x00008170, 0x18487320 },
- + { 0x00008174, 0xfaa4fa50 },
- + { 0x00008178, 0x00000100 },
- + { 0x0000817c, 0x00000000 },
- + { 0x000081c0, 0x00000000 },
- + { 0x000081c4, 0x00000000 },
- + { 0x000081d4, 0x00000000 },
- + { 0x000081ec, 0x00000000 },
- + { 0x000081f0, 0x00000000 },
- + { 0x000081f4, 0x00000000 },
- + { 0x000081f8, 0x00000000 },
- + { 0x000081fc, 0x00000000 },
- + { 0x00008200, 0x00000000 },
- + { 0x00008204, 0x00000000 },
- + { 0x00008208, 0x00000000 },
- + { 0x0000820c, 0x00000000 },
- + { 0x00008210, 0x00000000 },
- + { 0x00008214, 0x00000000 },
- + { 0x00008218, 0x00000000 },
- + { 0x0000821c, 0x00000000 },
- + { 0x00008220, 0x00000000 },
- + { 0x00008224, 0x00000000 },
- + { 0x00008228, 0x00000000 },
- + { 0x0000822c, 0x00000000 },
- + { 0x00008230, 0x00000000 },
- + { 0x00008234, 0x00000000 },
- + { 0x00008238, 0x00000000 },
- + { 0x0000823c, 0x00000000 },
- + { 0x00008240, 0x00100000 },
- + { 0x00008244, 0x0010f400 },
- + { 0x00008248, 0x00000100 },
- + { 0x0000824c, 0x0001e800 },
- + { 0x00008250, 0x00000000 },
- + { 0x00008254, 0x00000000 },
- + { 0x00008258, 0x00000000 },
- + { 0x0000825c, 0x400000ff },
- + { 0x00008260, 0x00080922 },
- + { 0x00008264, 0xa8a00010 },
- + { 0x00008270, 0x00000000 },
- + { 0x00008274, 0x40000000 },
- + { 0x00008278, 0x003e4180 },
- + { 0x0000827c, 0x00000000 },
- + { 0x00008284, 0x0000002c },
- + { 0x00008288, 0x0000002c },
- + { 0x0000828c, 0x000000ff },
- + { 0x00008294, 0x00000000 },
- + { 0x00008298, 0x00000000 },
- + { 0x0000829c, 0x00000000 },
- + { 0x00008300, 0x00000040 },
- + { 0x00008314, 0x00000000 },
- + { 0x00008328, 0x00000000 },
- + { 0x0000832c, 0x00000007 },
- + { 0x00008330, 0x00000302 },
- + { 0x00008334, 0x00000e00 },
- + { 0x00008338, 0x00ff0000 },
- + { 0x0000833c, 0x00000000 },
- + { 0x00008340, 0x000107ff },
- + { 0x00008344, 0x01c81043 },
- + { 0x00008360, 0xffffffff },
- + { 0x00008364, 0xffffffff },
- + { 0x00008368, 0x00000000 },
- + { 0x00008370, 0x00000000 },
- + { 0x00008374, 0x000000ff },
- + { 0x00008378, 0x00000000 },
- + { 0x0000837c, 0x00000000 },
- + { 0x00008380, 0xffffffff },
- + { 0x00008384, 0xffffffff },
- + { 0x00008390, 0x0fffffff },
- + { 0x00008394, 0x0fffffff },
- + { 0x00008398, 0x00000000 },
- + { 0x0000839c, 0x00000000 },
- + { 0x000083a0, 0x00000000 },
- + { 0x00009808, 0x00000000 },
- + { 0x0000980c, 0xafe68e30 },
- + { 0x00009810, 0xfd14e000 },
- + { 0x00009814, 0x9c0a9f6b },
- + { 0x0000981c, 0x00000000 },
- + { 0x0000982c, 0x0000a000 },
- + { 0x00009830, 0x00000000 },
- + { 0x0000983c, 0x00200400 },
- + { 0x0000984c, 0x0040233c },
- + { 0x0000a84c, 0x0040233c },
- + { 0x00009854, 0x00000044 },
- + { 0x00009900, 0x00000000 },
- + { 0x00009904, 0x00000000 },
- + { 0x00009908, 0x00000000 },
- + { 0x0000990c, 0x00000000 },
- + { 0x00009910, 0x10002310 },
- + { 0x0000991c, 0x10000fff },
- + { 0x00009920, 0x04900000 },
- + { 0x0000a920, 0x04900000 },
- + { 0x00009928, 0x00000001 },
- + { 0x0000992c, 0x00000004 },
- + { 0x00009930, 0x00000000 },
- + { 0x0000a930, 0x00000000 },
- + { 0x00009934, 0x1e1f2022 },
- + { 0x00009938, 0x0a0b0c0d },
- + { 0x0000993c, 0x00000000 },
- + { 0x00009948, 0x9280c00a },
- + { 0x0000994c, 0x00020028 },
- + { 0x00009954, 0x5f3ca3de },
- + { 0x00009958, 0x0108ecff },
- + { 0x00009940, 0x14750604 },
- + { 0x0000c95c, 0x004b6a8e },
- + { 0x00009970, 0x990bb515 },
- + { 0x00009974, 0x00000000 },
- + { 0x00009978, 0x00000001 },
- + { 0x0000997c, 0x00000000 },
- + { 0x000099a0, 0x00000000 },
- + { 0x000099a4, 0x00000001 },
- + { 0x000099a8, 0x201fff00 },
- + { 0x000099ac, 0x0c6f0000 },
- + { 0x000099b0, 0x03051000 },
- + { 0x000099b4, 0x00000820 },
- + { 0x000099c4, 0x06336f77 },
- + { 0x000099c8, 0x6af65329 },
- + { 0x000099cc, 0x08f186c8 },
- + { 0x000099d0, 0x00046384 },
- + { 0x000099dc, 0x00000000 },
- + { 0x000099e0, 0x00000000 },
- + { 0x000099e4, 0xaaaaaaaa },
- + { 0x000099e8, 0x3c466478 },
- + { 0x000099ec, 0x0cc80caa },
- + { 0x000099f0, 0x00000000 },
- + { 0x000099fc, 0x00001042 },
- + { 0x0000a1f4, 0x00fffeff },
- + { 0x0000a1f8, 0x00f5f9ff },
- + { 0x0000a1fc, 0xb79f6427 },
- + { 0x0000a208, 0x803e4788 },
- + { 0x0000a210, 0x4080a333 },
- + { 0x0000a214, 0x40206c10 },
- + { 0x0000a218, 0x009c4060 },
- + { 0x0000a220, 0x01834061 },
- + { 0x0000a224, 0x00000400 },
- + { 0x0000a228, 0x000003b5 },
- + { 0x0000a22c, 0x233f7180 },
- + { 0x0000a234, 0x20202020 },
- + { 0x0000a238, 0x20202020 },
- + { 0x0000a23c, 0x13c889af },
- + { 0x0000a240, 0x38490a20 },
- + { 0x0000a244, 0x00000000 },
- + { 0x0000a248, 0xfffffffc },
- + { 0x0000a24c, 0x00000000 },
- + { 0x0000a254, 0x00000000 },
- + { 0x0000a258, 0x0cdbd380 },
- + { 0x0000a25c, 0x0f0f0f01 },
- + { 0x0000a260, 0xdfa91f01 },
- + { 0x0000a264, 0x00418a11 },
- + { 0x0000b264, 0x00418a11 },
- + { 0x0000a268, 0x00000000 },
- + { 0x0000a26c, 0x0e79e5c6 },
- + { 0x0000b26c, 0x0e79e5c6 },
- + { 0x0000d270, 0x00820820 },
- + { 0x0000a278, 0x1ce739ce },
- + { 0x0000a27c, 0x050701ce },
- + { 0x0000d35c, 0x07ffffef },
- + { 0x0000d360, 0x0fffffe7 },
- + { 0x0000d364, 0x17ffffe5 },
- + { 0x0000d368, 0x1fffffe4 },
- + { 0x0000d36c, 0x37ffffe3 },
- + { 0x0000d370, 0x3fffffe3 },
- + { 0x0000d374, 0x57ffffe3 },
- + { 0x0000d378, 0x5fffffe2 },
- + { 0x0000d37c, 0x7fffffe2 },
- + { 0x0000d380, 0x7f3c7bba },
- + { 0x0000d384, 0xf3307ff0 },
- + { 0x0000a388, 0x0c000000 },
- + { 0x0000a38c, 0x20202020 },
- + { 0x0000a390, 0x20202020 },
- + { 0x0000a394, 0x1ce739ce },
- + { 0x0000a398, 0x000001ce },
- + { 0x0000b398, 0x000001ce },
- + { 0x0000a39c, 0x00000001 },
- + { 0x0000a3c8, 0x00000246 },
- + { 0x0000a3cc, 0x20202020 },
- + { 0x0000a3d0, 0x20202020 },
- + { 0x0000a3d4, 0x20202020 },
- + { 0x0000a3dc, 0x1ce739ce },
- + { 0x0000a3e0, 0x000001ce },
- + { 0x0000a3e4, 0x00000000 },
- + { 0x0000a3e8, 0x18c43433 },
- + { 0x0000a3ec, 0x00f70081 },
- + { 0x0000a3f0, 0x01036a1e },
- + { 0x0000a3f4, 0x00000000 },
- + { 0x0000b3f4, 0x00000000 },
- + { 0x0000a7d8, 0x00000001 },
- + { 0x00007800, 0x00000800 },
- + { 0x00007804, 0x6c35ffb0 },
- + { 0x00007808, 0x6db6c000 },
- + { 0x0000780c, 0x6db6cb30 },
- + { 0x00007810, 0x6db6cb6c },
- + { 0x00007814, 0x0501e200 },
- + { 0x00007818, 0x0094128d },
- + { 0x0000781c, 0x976ee392 },
- + { 0x00007820, 0xf75ff6fc },
- + { 0x00007824, 0x00040000 },
- + { 0x00007828, 0xdb003012 },
- + { 0x0000782c, 0x04924914 },
- + { 0x00007830, 0x21084210 },
- + { 0x00007834, 0x00140000 },
- + { 0x00007838, 0x0e4548d8 },
- + { 0x0000783c, 0x54214514 },
- + { 0x00007840, 0x02025820 },
- + { 0x00007844, 0x71c0d388 },
- + { 0x00007848, 0x934934a8 },
- + { 0x00007850, 0x00000000 },
- + { 0x00007854, 0x00000800 },
- + { 0x00007858, 0x6c35ffb0 },
- + { 0x0000785c, 0x6db6c000 },
- + { 0x00007860, 0x6db6cb2c },
- + { 0x00007864, 0x6db6cb6c },
- + { 0x00007868, 0x0501e200 },
- + { 0x0000786c, 0x0094128d },
- + { 0x00007870, 0x976ee392 },
- + { 0x00007874, 0xf75ff6fc },
- + { 0x00007878, 0x00040000 },
- + { 0x0000787c, 0xdb003012 },
- + { 0x00007880, 0x04924914 },
- + { 0x00007884, 0x21084210 },
- + { 0x00007888, 0x001b6db0 },
- + { 0x0000788c, 0x00376b63 },
- + { 0x00007890, 0x06db6db6 },
- + { 0x00007894, 0x006d8000 },
- + { 0x00007898, 0x48100000 },
- + { 0x0000789c, 0x00000000 },
- + { 0x000078a0, 0x08000000 },
- + { 0x000078a4, 0x0007ffd8 },
- + { 0x000078a8, 0x0007ffd8 },
- + { 0x000078ac, 0x001c0020 },
- + { 0x000078b0, 0x000611eb },
- + { 0x000078b4, 0x40008080 },
- + { 0x000078b8, 0x2a850160 },
- +};
- +
- +static const u_int32_t ar9287Modes_tx_gain_9287_1_0[][6] = {
- + /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- + { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a304, 0x00000000, 0x00000000, 0x00004002, 0x00004002, 0x00004002 },
- + { 0x0000a308, 0x00000000, 0x00000000, 0x00008004, 0x00008004, 0x00008004 },
- + { 0x0000a30c, 0x00000000, 0x00000000, 0x0000c00a, 0x0000c00a, 0x0000c00a },
- + { 0x0000a310, 0x00000000, 0x00000000, 0x0001000c, 0x0001000c, 0x0001000c },
- + { 0x0000a314, 0x00000000, 0x00000000, 0x0001420b, 0x0001420b, 0x0001420b },
- + { 0x0000a318, 0x00000000, 0x00000000, 0x0001824a, 0x0001824a, 0x0001824a },
- + { 0x0000a31c, 0x00000000, 0x00000000, 0x0001c44a, 0x0001c44a, 0x0001c44a },
- + { 0x0000a320, 0x00000000, 0x00000000, 0x0002064a, 0x0002064a, 0x0002064a },
- + { 0x0000a324, 0x00000000, 0x00000000, 0x0002484a, 0x0002484a, 0x0002484a },
- + { 0x0000a328, 0x00000000, 0x00000000, 0x00028a4a, 0x00028a4a, 0x00028a4a },
- + { 0x0000a32c, 0x00000000, 0x00000000, 0x0002cc4a, 0x0002cc4a, 0x0002cc4a },
- + { 0x0000a330, 0x00000000, 0x00000000, 0x00030e4a, 0x00030e4a, 0x00030e4a },
- + { 0x0000a334, 0x00000000, 0x00000000, 0x00034e8a, 0x00034e8a, 0x00034e8a },
- + { 0x0000a338, 0x00000000, 0x00000000, 0x00038e8c, 0x00038e8c, 0x00038e8c },
- + { 0x0000a33c, 0x00000000, 0x00000000, 0x0003cecc, 0x0003cecc, 0x0003cecc },
- + { 0x0000a340, 0x00000000, 0x00000000, 0x00040ed4, 0x00040ed4, 0x00040ed4 },
- + { 0x0000a344, 0x00000000, 0x00000000, 0x00044edc, 0x00044edc, 0x00044edc },
- + { 0x0000a348, 0x00000000, 0x00000000, 0x00048ede, 0x00048ede, 0x00048ede },
- + { 0x0000a34c, 0x00000000, 0x00000000, 0x0004cf1e, 0x0004cf1e, 0x0004cf1e },
- + { 0x0000a350, 0x00000000, 0x00000000, 0x00050f5e, 0x00050f5e, 0x00050f5e },
- + { 0x0000a354, 0x00000000, 0x00000000, 0x00054f9e, 0x00054f9e, 0x00054f9e },
- + { 0x0000a780, 0x00000000, 0x00000000, 0x00000060, 0x00000060, 0x00000060 },
- + { 0x0000a784, 0x00000000, 0x00000000, 0x00004062, 0x00004062, 0x00004062 },
- + { 0x0000a788, 0x00000000, 0x00000000, 0x00008064, 0x00008064, 0x00008064 },
- + { 0x0000a78c, 0x00000000, 0x00000000, 0x0000c0a4, 0x0000c0a4, 0x0000c0a4 },
- + { 0x0000a790, 0x00000000, 0x00000000, 0x000100b0, 0x000100b0, 0x000100b0 },
- + { 0x0000a794, 0x00000000, 0x00000000, 0x000140b2, 0x000140b2, 0x000140b2 },
- + { 0x0000a798, 0x00000000, 0x00000000, 0x000180b4, 0x000180b4, 0x000180b4 },
- + { 0x0000a79c, 0x00000000, 0x00000000, 0x0001c0f4, 0x0001c0f4, 0x0001c0f4 },
- + { 0x0000a7a0, 0x00000000, 0x00000000, 0x00020134, 0x00020134, 0x00020134 },
- + { 0x0000a7a4, 0x00000000, 0x00000000, 0x000240fe, 0x000240fe, 0x000240fe },
- + { 0x0000a7a8, 0x00000000, 0x00000000, 0x0002813e, 0x0002813e, 0x0002813e },
- + { 0x0000a7ac, 0x00000000, 0x00000000, 0x0002c17e, 0x0002c17e, 0x0002c17e },
- + { 0x0000a7b0, 0x00000000, 0x00000000, 0x000301be, 0x000301be, 0x000301be },
- + { 0x0000a7b4, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- + { 0x0000a7b8, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- + { 0x0000a7bc, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- + { 0x0000a7c0, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- + { 0x0000a7c4, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- + { 0x0000a7c8, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- + { 0x0000a7cc, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- + { 0x0000a7d0, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- + { 0x0000a7d4, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- + { 0x0000a274, 0x0a180000, 0x0a180000, 0x0a1aa000, 0x0a1aa000, 0x0a1aa000 },
- +};
- +
- +
- +static const u_int32_t ar9287Modes_rx_gain_9287_1_0[][6] = {
- + /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- + { 0x00009a00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120, 0x0000a120 },
- + { 0x00009a04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124, 0x0000a124 },
- + { 0x00009a08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128, 0x0000a128 },
- + { 0x00009a0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c, 0x0000a12c },
- + { 0x00009a10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130, 0x0000a130 },
- + { 0x00009a14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194, 0x0000a194 },
- + { 0x00009a18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198, 0x0000a198 },
- + { 0x00009a1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c, 0x0000a20c },
- + { 0x00009a20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210, 0x0000a210 },
- + { 0x00009a24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284, 0x0000a284 },
- + { 0x00009a28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288, 0x0000a288 },
- + { 0x00009a2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c, 0x0000a28c },
- + { 0x00009a30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290, 0x0000a290 },
- + { 0x00009a34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294, 0x0000a294 },
- + { 0x00009a38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0, 0x0000a2a0 },
- + { 0x00009a3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4, 0x0000a2a4 },
- + { 0x00009a40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8, 0x0000a2a8 },
- + { 0x00009a44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac, 0x0000a2ac },
- + { 0x00009a48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0, 0x0000a2b0 },
- + { 0x00009a4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4, 0x0000a2b4 },
- + { 0x00009a50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8, 0x0000a2b8 },
- + { 0x00009a54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4, 0x0000a2c4 },
- + { 0x00009a58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708, 0x0000a708 },
- + { 0x00009a5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c, 0x0000a70c },
- + { 0x00009a60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710, 0x0000a710 },
- + { 0x00009a64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04, 0x0000ab04 },
- + { 0x00009a68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08, 0x0000ab08 },
- + { 0x00009a6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c, 0x0000ab0c },
- + { 0x00009a70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10, 0x0000ab10 },
- + { 0x00009a74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14, 0x0000ab14 },
- + { 0x00009a78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18, 0x0000ab18 },
- + { 0x00009a7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c, 0x0000ab8c },
- + { 0x00009a80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90, 0x0000ab90 },
- + { 0x00009a84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94, 0x0000ab94 },
- + { 0x00009a88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98, 0x0000ab98 },
- + { 0x00009a8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4, 0x0000aba4 },
- + { 0x00009a90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8, 0x0000aba8 },
- + { 0x00009a94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04, 0x0000cb04 },
- + { 0x00009a98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08, 0x0000cb08 },
- + { 0x00009a9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c, 0x0000cb0c },
- + { 0x00009aa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10, 0x0000cb10 },
- + { 0x00009aa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14, 0x0000cb14 },
- + { 0x00009aa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18, 0x0000cb18 },
- + { 0x00009aac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c, 0x0000cb8c },
- + { 0x00009ab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90, 0x0000cb90 },
- + { 0x00009ab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18, 0x0000cf18 },
- + { 0x00009ab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24, 0x0000cf24 },
- + { 0x00009abc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28, 0x0000cf28 },
- + { 0x00009ac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314, 0x0000d314 },
- + { 0x00009ac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318, 0x0000d318 },
- + { 0x00009ac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c, 0x0000d38c },
- + { 0x00009acc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390, 0x0000d390 },
- + { 0x00009ad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394, 0x0000d394 },
- + { 0x00009ad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398, 0x0000d398 },
- + { 0x00009ad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4, 0x0000d3a4 },
- + { 0x00009adc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8, 0x0000d3a8 },
- + { 0x00009ae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac, 0x0000d3ac },
- + { 0x00009ae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0, 0x0000d3b0 },
- + { 0x00009ae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380, 0x0000f380 },
- + { 0x00009aec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384, 0x0000f384 },
- + { 0x00009af0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388, 0x0000f388 },
- + { 0x00009af4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710, 0x0000f710 },
- + { 0x00009af8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714, 0x0000f714 },
- + { 0x00009afc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718, 0x0000f718 },
- + { 0x00009b00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10, 0x0000fb10 },
- + { 0x00009b04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14, 0x0000fb14 },
- + { 0x00009b08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18, 0x0000fb18 },
- + { 0x00009b0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c, 0x0000fb8c },
- + { 0x00009b10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90, 0x0000fb90 },
- + { 0x00009b14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94, 0x0000fb94 },
- + { 0x00009b18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c, 0x0000ff8c },
- + { 0x00009b1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90, 0x0000ff90 },
- + { 0x00009b20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94, 0x0000ff94 },
- + { 0x00009b24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0, 0x0000ffa0 },
- + { 0x00009b28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4, 0x0000ffa4 },
- + { 0x00009b2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8, 0x0000ffa8 },
- + { 0x00009b30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac, 0x0000ffac },
- + { 0x00009b34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0, 0x0000ffb0 },
- + { 0x00009b38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4, 0x0000ffb4 },
- + { 0x00009b3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1, 0x0000ffa1 },
- + { 0x00009b40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5, 0x0000ffa5 },
- + { 0x00009b44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9, 0x0000ffa9 },
- + { 0x00009b48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad, 0x0000ffad },
- + { 0x00009b4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1, 0x0000ffb1 },
- + { 0x00009b50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5, 0x0000ffb5 },
- + { 0x00009b54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9, 0x0000ffb9 },
- + { 0x00009b58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5, 0x0000ffc5 },
- + { 0x00009b5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9, 0x0000ffc9 },
- + { 0x00009b60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd, 0x0000ffcd },
- + { 0x00009b64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1, 0x0000ffd1 },
- + { 0x00009b68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5, 0x0000ffd5 },
- + { 0x00009b6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2, 0x0000ffc2 },
- + { 0x00009b70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6, 0x0000ffc6 },
- + { 0x00009b74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca, 0x0000ffca },
- + { 0x00009b78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce, 0x0000ffce },
- + { 0x00009b7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2, 0x0000ffd2 },
- + { 0x00009b80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6, 0x0000ffd6 },
- + { 0x00009b84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda, 0x0000ffda },
- + { 0x00009b88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7, 0x0000ffc7 },
- + { 0x00009b8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb, 0x0000ffcb },
- + { 0x00009b90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf, 0x0000ffcf },
- + { 0x00009b94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3, 0x0000ffd3 },
- + { 0x00009b98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7, 0x0000ffd7 },
- + { 0x00009b9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009ba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009ba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009ba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009be0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009be4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009be8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000aa00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120, 0x0000a120 },
- + { 0x0000aa04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124, 0x0000a124 },
- + { 0x0000aa08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128, 0x0000a128 },
- + { 0x0000aa0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c, 0x0000a12c },
- + { 0x0000aa10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130, 0x0000a130 },
- + { 0x0000aa14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194, 0x0000a194 },
- + { 0x0000aa18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198, 0x0000a198 },
- + { 0x0000aa1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c, 0x0000a20c },
- + { 0x0000aa20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210, 0x0000a210 },
- + { 0x0000aa24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284, 0x0000a284 },
- + { 0x0000aa28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288, 0x0000a288 },
- + { 0x0000aa2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c, 0x0000a28c },
- + { 0x0000aa30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290, 0x0000a290 },
- + { 0x0000aa34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294, 0x0000a294 },
- + { 0x0000aa38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0, 0x0000a2a0 },
- + { 0x0000aa3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4, 0x0000a2a4 },
- + { 0x0000aa40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8, 0x0000a2a8 },
- + { 0x0000aa44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac, 0x0000a2ac },
- + { 0x0000aa48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0, 0x0000a2b0 },
- + { 0x0000aa4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4, 0x0000a2b4 },
- + { 0x0000aa50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8, 0x0000a2b8 },
- + { 0x0000aa54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4, 0x0000a2c4 },
- + { 0x0000aa58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708, 0x0000a708 },
- + { 0x0000aa5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c, 0x0000a70c },
- + { 0x0000aa60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710, 0x0000a710 },
- + { 0x0000aa64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04, 0x0000ab04 },
- + { 0x0000aa68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08, 0x0000ab08 },
- + { 0x0000aa6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c, 0x0000ab0c },
- + { 0x0000aa70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10, 0x0000ab10 },
- + { 0x0000aa74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14, 0x0000ab14 },
- + { 0x0000aa78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18, 0x0000ab18 },
- + { 0x0000aa7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c, 0x0000ab8c },
- + { 0x0000aa80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90, 0x0000ab90 },
- + { 0x0000aa84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94, 0x0000ab94 },
- + { 0x0000aa88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98, 0x0000ab98 },
- + { 0x0000aa8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4, 0x0000aba4 },
- + { 0x0000aa90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8, 0x0000aba8 },
- + { 0x0000aa94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04, 0x0000cb04 },
- + { 0x0000aa98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08, 0x0000cb08 },
- + { 0x0000aa9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c, 0x0000cb0c },
- + { 0x0000aaa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10, 0x0000cb10 },
- + { 0x0000aaa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14, 0x0000cb14 },
- + { 0x0000aaa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18, 0x0000cb18 },
- + { 0x0000aaac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c, 0x0000cb8c },
- + { 0x0000aab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90, 0x0000cb90 },
- + { 0x0000aab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18, 0x0000cf18 },
- + { 0x0000aab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24, 0x0000cf24 },
- + { 0x0000aabc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28, 0x0000cf28 },
- + { 0x0000aac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314, 0x0000d314 },
- + { 0x0000aac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318, 0x0000d318 },
- + { 0x0000aac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c, 0x0000d38c },
- + { 0x0000aacc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390, 0x0000d390 },
- + { 0x0000aad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394, 0x0000d394 },
- + { 0x0000aad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398, 0x0000d398 },
- + { 0x0000aad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4, 0x0000d3a4 },
- + { 0x0000aadc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8, 0x0000d3a8 },
- + { 0x0000aae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac, 0x0000d3ac },
- + { 0x0000aae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0, 0x0000d3b0 },
- + { 0x0000aae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380, 0x0000f380 },
- + { 0x0000aaec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384, 0x0000f384 },
- + { 0x0000aaf0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388, 0x0000f388 },
- + { 0x0000aaf4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710, 0x0000f710 },
- + { 0x0000aaf8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714, 0x0000f714 },
- + { 0x0000aafc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718, 0x0000f718 },
- + { 0x0000ab00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10, 0x0000fb10 },
- + { 0x0000ab04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14, 0x0000fb14 },
- + { 0x0000ab08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18, 0x0000fb18 },
- + { 0x0000ab0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c, 0x0000fb8c },
- + { 0x0000ab10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90, 0x0000fb90 },
- + { 0x0000ab14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94, 0x0000fb94 },
- + { 0x0000ab18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c, 0x0000ff8c },
- + { 0x0000ab1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90, 0x0000ff90 },
- + { 0x0000ab20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94, 0x0000ff94 },
- + { 0x0000ab24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0, 0x0000ffa0 },
- + { 0x0000ab28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4, 0x0000ffa4 },
- + { 0x0000ab2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8, 0x0000ffa8 },
- + { 0x0000ab30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac, 0x0000ffac },
- + { 0x0000ab34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0, 0x0000ffb0 },
- + { 0x0000ab38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4, 0x0000ffb4 },
- + { 0x0000ab3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1, 0x0000ffa1 },
- + { 0x0000ab40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5, 0x0000ffa5 },
- + { 0x0000ab44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9, 0x0000ffa9 },
- + { 0x0000ab48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad, 0x0000ffad },
- + { 0x0000ab4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1, 0x0000ffb1 },
- + { 0x0000ab50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5, 0x0000ffb5 },
- + { 0x0000ab54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9, 0x0000ffb9 },
- + { 0x0000ab58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5, 0x0000ffc5 },
- + { 0x0000ab5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9, 0x0000ffc9 },
- + { 0x0000ab60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd, 0x0000ffcd },
- + { 0x0000ab64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1, 0x0000ffd1 },
- + { 0x0000ab68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5, 0x0000ffd5 },
- + { 0x0000ab6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2, 0x0000ffc2 },
- + { 0x0000ab70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6, 0x0000ffc6 },
- + { 0x0000ab74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca, 0x0000ffca },
- + { 0x0000ab78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce, 0x0000ffce },
- + { 0x0000ab7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2, 0x0000ffd2 },
- + { 0x0000ab80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6, 0x0000ffd6 },
- + { 0x0000ab84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda, 0x0000ffda },
- + { 0x0000ab88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7, 0x0000ffc7 },
- + { 0x0000ab8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb, 0x0000ffcb },
- + { 0x0000ab90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf, 0x0000ffcf },
- + { 0x0000ab94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3, 0x0000ffd3 },
- + { 0x0000ab98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7, 0x0000ffd7 },
- + { 0x0000ab9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000aba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000aba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000aba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abe0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abe4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abe8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009848, 0x00000000, 0x00000000, 0x00001067, 0x00001067, 0x00001067 },
- + { 0x0000a848, 0x00000000, 0x00000000, 0x00001067, 0x00001067, 0x00001067 },
- +};
- +
- +static const u_int32_t ar9287PciePhy_clkreq_always_on_L1_9287_1_0[][2] = {
- + {0x00004040, 0x9248fd00 },
- + {0x00004040, 0x24924924 },
- + {0x00004040, 0xa8000019 },
- + {0x00004040, 0x13160820 },
- + {0x00004040, 0xe5980560 },
- + {0x00004040, 0xc01dcffd },
- + {0x00004040, 0x1aaabe41 },
- + {0x00004040, 0xbe105554 },
- + {0x00004040, 0x00043007 },
- + {0x00004044, 0x00000000 },
- +};
- +
- +static const u_int32_t ar9287PciePhy_clkreq_off_L1_9287_1_0[][2] = {
- + {0x00004040, 0x9248fd00 },
- + {0x00004040, 0x24924924 },
- + {0x00004040, 0xa8000019 },
- + {0x00004040, 0x13160820 },
- + {0x00004040, 0xe5980560 },
- + {0x00004040, 0xc01dcffc },
- + {0x00004040, 0x1aaabe41 },
- + {0x00004040, 0xbe105554 },
- + {0x00004040, 0x00043007 },
- + {0x00004044, 0x00000000 },
- +};
- +
- +/* AR9287 Revision 11 */
- +
- +static const u_int32_t ar9287Modes_9287_1_1[][6] = {
- + /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- + { 0x00001030, 0x00000000, 0x00000000, 0x000002c0, 0x00000160, 0x000001e0 },
- + { 0x00001070, 0x00000000, 0x00000000, 0x00000318, 0x0000018c, 0x000001e0 },
- + { 0x000010b0, 0x00000000, 0x00000000, 0x00007c70, 0x00003e38, 0x00001180 },
- + { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
- + { 0x00008014, 0x00000000, 0x00000000, 0x10801600, 0x08400b00, 0x06e006e0 },
- + { 0x0000801c, 0x00000000, 0x00000000, 0x12e00057, 0x12e0002b, 0x0988004f },
- + { 0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810 },
- + { 0x000081d0, 0x00003200, 0x00003200, 0x0000320a, 0x0000320a, 0x0000320a },
- + { 0x00008318, 0x00000000, 0x00000000, 0x00006880, 0x00003440, 0x00006880 },
- + { 0x00009804, 0x00000000, 0x00000000, 0x000003c4, 0x00000300, 0x00000303 },
- + { 0x00009820, 0x00000000, 0x00000000, 0x02020200, 0x02020200, 0x02020200 },
- + { 0x00009824, 0x00000000, 0x00000000, 0x01000e0e, 0x01000e0e, 0x01000e0e },
- + { 0x00009828, 0x00000000, 0x00000000, 0x3a020001, 0x3a020001, 0x3a020001 },
- + { 0x00009834, 0x00000000, 0x00000000, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- + { 0x00009838, 0x00000003, 0x00000003, 0x00000007, 0x00000007, 0x00000007 },
- + { 0x00009840, 0x206a002e, 0x206a002e, 0x206a012e, 0x206a012e, 0x206a012e },
- + { 0x00009844, 0x03720000, 0x03720000, 0x037216a0, 0x037216a0, 0x037216a0 },
- + { 0x00009850, 0x60000000, 0x60000000, 0x6d4000e2, 0x6c4000e2, 0x6c4000e2 },
- + { 0x00009858, 0x7c000d00, 0x7c000d00, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
- + { 0x0000985c, 0x3100005e, 0x3100005e, 0x3139605e, 0x31395d5e, 0x31395d5e },
- + { 0x00009860, 0x00058d00, 0x00058d00, 0x00058d20, 0x00058d20, 0x00058d18 },
- + { 0x00009864, 0x00000e00, 0x00000e00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- + { 0x00009868, 0x000040c0, 0x000040c0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
- + { 0x0000986c, 0x00000080, 0x00000080, 0x06903881, 0x06903881, 0x06903881 },
- + { 0x00009914, 0x00000000, 0x00000000, 0x00001130, 0x00000898, 0x000007d0 },
- + { 0x00009918, 0x00000000, 0x00000000, 0x00000016, 0x0000000b, 0x00000016 },
- + { 0x00009924, 0xd00a8a01, 0xd00a8a01, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d },
- + { 0x00009944, 0xefbc0000, 0xefbc0000, 0xefbc1010, 0xefbc1010, 0xefbc1010 },
- + { 0x00009960, 0x00000000, 0x00000000, 0x00000010, 0x00000010, 0x00000010 },
- + { 0x0000a960, 0x00000000, 0x00000000, 0x00000010, 0x00000010, 0x00000010 },
- + { 0x00009964, 0x00000000, 0x00000000, 0x00000210, 0x00000210, 0x00000210 },
- + { 0x0000c968, 0x00000200, 0x00000200, 0x000003ce, 0x000003ce, 0x000003ce },
- + { 0x000099b8, 0x00000000, 0x00000000, 0x0000001c, 0x0000001c, 0x0000001c },
- + { 0x000099bc, 0x00000000, 0x00000000, 0x00000c00, 0x00000c00, 0x00000c00 },
- + { 0x000099c0, 0x00000000, 0x00000000, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
- + { 0x0000a204, 0x00000440, 0x00000440, 0x00000444, 0x00000444, 0x00000444 },
- + { 0x0000a20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000b20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a21c, 0x1803800a, 0x1803800a, 0x1883800a, 0x1883800a, 0x1883800a },
- + { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- + { 0x0000a250, 0x00000000, 0x00000000, 0x0004a000, 0x0004a000, 0x0004a000 },
- + { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
- + { 0x0000a3d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- +};
- +
- +static const u_int32_t ar9287Common_9287_1_1[][2] = {
- + { 0x0000000c, 0x00000000 },
- + { 0x00000030, 0x00020015 },
- + { 0x00000034, 0x00000005 },
- + { 0x00000040, 0x00000000 },
- + { 0x00000044, 0x00000008 },
- + { 0x00000048, 0x00000008 },
- + { 0x0000004c, 0x00000010 },
- + { 0x00000050, 0x00000000 },
- + { 0x00000054, 0x0000001f },
- + { 0x00000800, 0x00000000 },
- + { 0x00000804, 0x00000000 },
- + { 0x00000808, 0x00000000 },
- + { 0x0000080c, 0x00000000 },
- + { 0x00000810, 0x00000000 },
- + { 0x00000814, 0x00000000 },
- + { 0x00000818, 0x00000000 },
- + { 0x0000081c, 0x00000000 },
- + { 0x00000820, 0x00000000 },
- + { 0x00000824, 0x00000000 },
- + { 0x00001040, 0x002ffc0f },
- + { 0x00001044, 0x002ffc0f },
- + { 0x00001048, 0x002ffc0f },
- + { 0x0000104c, 0x002ffc0f },
- + { 0x00001050, 0x002ffc0f },
- + { 0x00001054, 0x002ffc0f },
- + { 0x00001058, 0x002ffc0f },
- + { 0x0000105c, 0x002ffc0f },
- + { 0x00001060, 0x002ffc0f },
- + { 0x00001064, 0x002ffc0f },
- + { 0x00001230, 0x00000000 },
- + { 0x00001270, 0x00000000 },
- + { 0x00001038, 0x00000000 },
- + { 0x00001078, 0x00000000 },
- + { 0x000010b8, 0x00000000 },
- + { 0x000010f8, 0x00000000 },
- + { 0x00001138, 0x00000000 },
- + { 0x00001178, 0x00000000 },
- + { 0x000011b8, 0x00000000 },
- + { 0x000011f8, 0x00000000 },
- + { 0x00001238, 0x00000000 },
- + { 0x00001278, 0x00000000 },
- + { 0x000012b8, 0x00000000 },
- + { 0x000012f8, 0x00000000 },
- + { 0x00001338, 0x00000000 },
- + { 0x00001378, 0x00000000 },
- + { 0x000013b8, 0x00000000 },
- + { 0x000013f8, 0x00000000 },
- + { 0x00001438, 0x00000000 },
- + { 0x00001478, 0x00000000 },
- + { 0x000014b8, 0x00000000 },
- + { 0x000014f8, 0x00000000 },
- + { 0x00001538, 0x00000000 },
- + { 0x00001578, 0x00000000 },
- + { 0x000015b8, 0x00000000 },
- + { 0x000015f8, 0x00000000 },
- + { 0x00001638, 0x00000000 },
- + { 0x00001678, 0x00000000 },
- + { 0x000016b8, 0x00000000 },
- + { 0x000016f8, 0x00000000 },
- + { 0x00001738, 0x00000000 },
- + { 0x00001778, 0x00000000 },
- + { 0x000017b8, 0x00000000 },
- + { 0x000017f8, 0x00000000 },
- + { 0x0000103c, 0x00000000 },
- + { 0x0000107c, 0x00000000 },
- + { 0x000010bc, 0x00000000 },
- + { 0x000010fc, 0x00000000 },
- + { 0x0000113c, 0x00000000 },
- + { 0x0000117c, 0x00000000 },
- + { 0x000011bc, 0x00000000 },
- + { 0x000011fc, 0x00000000 },
- + { 0x0000123c, 0x00000000 },
- + { 0x0000127c, 0x00000000 },
- + { 0x000012bc, 0x00000000 },
- + { 0x000012fc, 0x00000000 },
- + { 0x0000133c, 0x00000000 },
- + { 0x0000137c, 0x00000000 },
- + { 0x000013bc, 0x00000000 },
- + { 0x000013fc, 0x00000000 },
- + { 0x0000143c, 0x00000000 },
- + { 0x0000147c, 0x00000000 },
- + { 0x00004030, 0x00000002 },
- + { 0x0000403c, 0x00000002 },
- + { 0x00004024, 0x0000001f },
- + { 0x00004060, 0x00000000 },
- + { 0x00004064, 0x00000000 },
- + { 0x00007010, 0x00000033 },
- + { 0x00007020, 0x00000000 },
- + { 0x00007034, 0x00000002 },
- + { 0x00007038, 0x000004c2 },
- + { 0x00008004, 0x00000000 },
- + { 0x00008008, 0x00000000 },
- + { 0x0000800c, 0x00000000 },
- + { 0x00008018, 0x00000700 },
- + { 0x00008020, 0x00000000 },
- + { 0x00008038, 0x00000000 },
- + { 0x0000803c, 0x00000000 },
- + { 0x00008048, 0x40000000 },
- + { 0x00008054, 0x00000000 },
- + { 0x00008058, 0x00000000 },
- + { 0x0000805c, 0x000fc78f },
- + { 0x00008060, 0x0000000f },
- + { 0x00008064, 0x00000000 },
- + { 0x00008070, 0x00000000 },
- + { 0x000080c0, 0x2a80001a },
- + { 0x000080c4, 0x05dc01e0 },
- + { 0x000080c8, 0x1f402710 },
- + { 0x000080cc, 0x01f40000 },
- + { 0x000080d0, 0x00001e00 },
- + { 0x000080d4, 0x00000000 },
- + { 0x000080d8, 0x00400000 },
- + { 0x000080e0, 0xffffffff },
- + { 0x000080e4, 0x0000ffff },
- + { 0x000080e8, 0x003f3f3f },
- + { 0x000080ec, 0x00000000 },
- + { 0x000080f0, 0x00000000 },
- + { 0x000080f4, 0x00000000 },
- + { 0x000080f8, 0x00000000 },
- + { 0x000080fc, 0x00020000 },
- + { 0x00008100, 0x00020000 },
- + { 0x00008104, 0x00000001 },
- + { 0x00008108, 0x00000052 },
- + { 0x0000810c, 0x00000000 },
- + { 0x00008110, 0x00000168 },
- + { 0x00008118, 0x000100aa },
- + { 0x0000811c, 0x00003210 },
- + { 0x00008124, 0x00000000 },
- + { 0x00008128, 0x00000000 },
- + { 0x0000812c, 0x00000000 },
- + { 0x00008130, 0x00000000 },
- + { 0x00008134, 0x00000000 },
- + { 0x00008138, 0x00000000 },
- + { 0x0000813c, 0x00000000 },
- + { 0x00008144, 0xffffffff },
- + { 0x00008168, 0x00000000 },
- + { 0x0000816c, 0x00000000 },
- + { 0x00008170, 0x18487320 },
- + { 0x00008174, 0xfaa4fa50 },
- + { 0x00008178, 0x00000100 },
- + { 0x0000817c, 0x00000000 },
- + { 0x000081c0, 0x00000000 },
- + { 0x000081c4, 0x00000000 },
- + { 0x000081d4, 0x00000000 },
- + { 0x000081ec, 0x00000000 },
- + { 0x000081f0, 0x00000000 },
- + { 0x000081f4, 0x00000000 },
- + { 0x000081f8, 0x00000000 },
- + { 0x000081fc, 0x00000000 },
- + { 0x00008200, 0x00000000 },
- + { 0x00008204, 0x00000000 },
- + { 0x00008208, 0x00000000 },
- + { 0x0000820c, 0x00000000 },
- + { 0x00008210, 0x00000000 },
- + { 0x00008214, 0x00000000 },
- + { 0x00008218, 0x00000000 },
- + { 0x0000821c, 0x00000000 },
- + { 0x00008220, 0x00000000 },
- + { 0x00008224, 0x00000000 },
- + { 0x00008228, 0x00000000 },
- + { 0x0000822c, 0x00000000 },
- + { 0x00008230, 0x00000000 },
- + { 0x00008234, 0x00000000 },
- + { 0x00008238, 0x00000000 },
- + { 0x0000823c, 0x00000000 },
- + { 0x00008240, 0x00100000 },
- + { 0x00008244, 0x0010f400 },
- + { 0x00008248, 0x00000100 },
- + { 0x0000824c, 0x0001e800 },
- + { 0x00008250, 0x00000000 },
- + { 0x00008254, 0x00000000 },
- + { 0x00008258, 0x00000000 },
- + { 0x0000825c, 0x400000ff },
- + { 0x00008260, 0x00080922 },
- + { 0x00008264, 0x88a00010 },
- + { 0x00008270, 0x00000000 },
- + { 0x00008274, 0x40000000 },
- + { 0x00008278, 0x003e4180 },
- + { 0x0000827c, 0x00000000 },
- + { 0x00008284, 0x0000002c },
- + { 0x00008288, 0x0000002c },
- + { 0x0000828c, 0x000000ff },
- + { 0x00008294, 0x00000000 },
- + { 0x00008298, 0x00000000 },
- + { 0x0000829c, 0x00000000 },
- + { 0x00008300, 0x00000040 },
- + { 0x00008314, 0x00000000 },
- + { 0x00008328, 0x00000000 },
- + { 0x0000832c, 0x00000007 },
- + { 0x00008330, 0x00000302 },
- + { 0x00008334, 0x00000e00 },
- + { 0x00008338, 0x00ff0000 },
- + { 0x0000833c, 0x00000000 },
- + { 0x00008340, 0x000107ff },
- + { 0x00008344, 0x01c81043 },
- + { 0x00008360, 0xffffffff },
- + { 0x00008364, 0xffffffff },
- + { 0x00008368, 0x00000000 },
- + { 0x00008370, 0x00000000 },
- + { 0x00008374, 0x000000ff },
- + { 0x00008378, 0x00000000 },
- + { 0x0000837c, 0x00000000 },
- + { 0x00008380, 0xffffffff },
- + { 0x00008384, 0xffffffff },
- + { 0x00008390, 0x0fffffff },
- + { 0x00008394, 0x0fffffff },
- + { 0x00008398, 0x00000000 },
- + { 0x0000839c, 0x00000000 },
- + { 0x000083a0, 0x00000000 },
- + { 0x00009808, 0x00000000 },
- + { 0x0000980c, 0xafe68e30 },
- + { 0x00009810, 0xfd14e000 },
- + { 0x00009814, 0x9c0a9f6b },
- + { 0x0000981c, 0x00000000 },
- + { 0x0000982c, 0x0000a000 },
- + { 0x00009830, 0x00000000 },
- + { 0x0000983c, 0x00200400 },
- + { 0x0000984c, 0x0040233c },
- + { 0x0000a84c, 0x0040233c },
- + { 0x00009854, 0x00000044 },
- + { 0x00009900, 0x00000000 },
- + { 0x00009904, 0x00000000 },
- + { 0x00009908, 0x00000000 },
- + { 0x0000990c, 0x00000000 },
- + { 0x00009910, 0x10002310 },
- + { 0x0000991c, 0x10000fff },
- + { 0x00009920, 0x04900000 },
- + { 0x0000a920, 0x04900000 },
- + { 0x00009928, 0x00000001 },
- + { 0x0000992c, 0x00000004 },
- + { 0x00009930, 0x00000000 },
- + { 0x0000a930, 0x00000000 },
- + { 0x00009934, 0x1e1f2022 },
- + { 0x00009938, 0x0a0b0c0d },
- + { 0x0000993c, 0x00000000 },
- + { 0x00009948, 0x9280c00a },
- + { 0x0000994c, 0x00020028 },
- + { 0x00009954, 0x5f3ca3de },
- + { 0x00009958, 0x0108ecff },
- + { 0x00009940, 0x14750604 },
- + { 0x0000c95c, 0x004b6a8e },
- + { 0x00009970, 0x990bb514 },
- + { 0x00009974, 0x00000000 },
- + { 0x00009978, 0x00000001 },
- + { 0x0000997c, 0x00000000 },
- + { 0x000099a0, 0x00000000 },
- + { 0x000099a4, 0x00000001 },
- + { 0x000099a8, 0x201fff00 },
- + { 0x000099ac, 0x0c6f0000 },
- + { 0x000099b0, 0x03051000 },
- + { 0x000099b4, 0x00000820 },
- + { 0x000099c4, 0x06336f77 },
- + { 0x000099c8, 0x6af6532f },
- + { 0x000099cc, 0x08f186c8 },
- + { 0x000099d0, 0x00046384 },
- + { 0x000099dc, 0x00000000 },
- + { 0x000099e0, 0x00000000 },
- + { 0x000099e4, 0xaaaaaaaa },
- + { 0x000099e8, 0x3c466478 },
- + { 0x000099ec, 0x0cc80caa },
- + { 0x000099f0, 0x00000000 },
- + { 0x000099fc, 0x00001042 },
- + { 0x0000a208, 0x803e4788 },
- + { 0x0000a210, 0x4080a333 },
- + { 0x0000a214, 0x40206c10 },
- + { 0x0000a218, 0x009c4060 },
- + { 0x0000a220, 0x01834061 },
- + { 0x0000a224, 0x00000400 },
- + { 0x0000a228, 0x000003b5 },
- + { 0x0000a22c, 0x233f7180 },
- + { 0x0000a234, 0x20202020 },
- + { 0x0000a238, 0x20202020 },
- + { 0x0000a23c, 0x13c889af },
- + { 0x0000a240, 0x38490a20 },
- + { 0x0000a244, 0x00000000 },
- + { 0x0000a248, 0xfffffffc },
- + { 0x0000a24c, 0x00000000 },
- + { 0x0000a254, 0x00000000 },
- + { 0x0000a258, 0x0cdbd380 },
- + { 0x0000a25c, 0x0f0f0f01 },
- + { 0x0000a260, 0xdfa91f01 },
- + { 0x0000a264, 0x00418a11 },
- + { 0x0000b264, 0x00418a11 },
- + { 0x0000a268, 0x00000000 },
- + { 0x0000a26c, 0x0e79e5c6 },
- + { 0x0000b26c, 0x0e79e5c6 },
- + { 0x0000d270, 0x00820820 },
- + { 0x0000a278, 0x1ce739ce },
- + { 0x0000a27c, 0x050701ce },
- + { 0x0000d35c, 0x07ffffef },
- + { 0x0000d360, 0x0fffffe7 },
- + { 0x0000d364, 0x17ffffe5 },
- + { 0x0000d368, 0x1fffffe4 },
- + { 0x0000d36c, 0x37ffffe3 },
- + { 0x0000d370, 0x3fffffe3 },
- + { 0x0000d374, 0x57ffffe3 },
- + { 0x0000d378, 0x5fffffe2 },
- + { 0x0000d37c, 0x7fffffe2 },
- + { 0x0000d380, 0x7f3c7bba },
- + { 0x0000d384, 0xf3307ff0 },
- + { 0x0000a388, 0x0c000000 },
- + { 0x0000a38c, 0x20202020 },
- + { 0x0000a390, 0x20202020 },
- + { 0x0000a394, 0x1ce739ce },
- + { 0x0000a398, 0x000001ce },
- + { 0x0000b398, 0x000001ce },
- + { 0x0000a39c, 0x00000001 },
- + { 0x0000a3c8, 0x00000246 },
- + { 0x0000a3cc, 0x20202020 },
- + { 0x0000a3d0, 0x20202020 },
- + { 0x0000a3d4, 0x20202020 },
- + { 0x0000a3dc, 0x1ce739ce },
- + { 0x0000a3e0, 0x000001ce },
- + { 0x0000a3e4, 0x00000000 },
- + { 0x0000a3e8, 0x18c43433 },
- + { 0x0000a3ec, 0x00f70081 },
- + { 0x0000a3f0, 0x01036a1e },
- + { 0x0000a3f4, 0x00000000 },
- + { 0x0000b3f4, 0x00000000 },
- + { 0x0000a7d8, 0x000003f1 },
- + { 0x00007800, 0x00000800 },
- + { 0x00007804, 0x6c35ffd2 },
- + { 0x00007808, 0x6db6c000 },
- + { 0x0000780c, 0x6db6cb30 },
- + { 0x00007810, 0x6db6cb6c },
- + { 0x00007814, 0x0501e200 },
- + { 0x00007818, 0x0094128d },
- + { 0x0000781c, 0x976ee392 },
- + { 0x00007820, 0xf75ff6fc },
- + { 0x00007824, 0x00040000 },
- + { 0x00007828, 0xdb003012 },
- + { 0x0000782c, 0x04924914 },
- + { 0x00007830, 0x21084210 },
- + { 0x00007834, 0x00140000 },
- + { 0x00007838, 0x0e4548d8 },
- + { 0x0000783c, 0x54214514 },
- + { 0x00007840, 0x02025830 },
- + { 0x00007844, 0x71c0d388 },
- + { 0x00007848, 0x934934a8 },
- + { 0x00007850, 0x00000000 },
- + { 0x00007854, 0x00000800 },
- + { 0x00007858, 0x6c35ffd2 },
- + { 0x0000785c, 0x6db6c000 },
- + { 0x00007860, 0x6db6cb30 },
- + { 0x00007864, 0x6db6cb6c },
- + { 0x00007868, 0x0501e200 },
- + { 0x0000786c, 0x0094128d },
- + { 0x00007870, 0x976ee392 },
- + { 0x00007874, 0xf75ff6fc },
- + { 0x00007878, 0x00040000 },
- + { 0x0000787c, 0xdb003012 },
- + { 0x00007880, 0x04924914 },
- + { 0x00007884, 0x21084210 },
- + { 0x00007888, 0x001b6db0 },
- + { 0x0000788c, 0x00376b63 },
- + { 0x00007890, 0x06db6db6 },
- + { 0x00007894, 0x006d8000 },
- + { 0x00007898, 0x48100000 },
- + { 0x0000789c, 0x00000000 },
- + { 0x000078a0, 0x08000000 },
- + { 0x000078a4, 0x0007ffd8 },
- + { 0x000078a8, 0x0007ffd8 },
- + { 0x000078ac, 0x001c0020 },
- + { 0x000078b0, 0x00060aeb },
- + { 0x000078b4, 0x40008080 },
- + { 0x000078b8, 0x2a850160 },
- +};
- +
- +/*
- + * For Japanese regulatory requirements, 2484 MHz requires the following three
- + * registers be programmed differently from the channel between 2412 and 2472 MHz.
- + */
- +static const u_int32_t ar9287Common_normal_cck_fir_coeff_92871_1[][2] = {
- + { 0x0000a1f4, 0x00fffeff },
- + { 0x0000a1f8, 0x00f5f9ff },
- + { 0x0000a1fc, 0xb79f6427 },
- +};
- +
- +static const u_int32_t ar9287Common_japan_2484_cck_fir_coeff_92871_1[][2] = {
- + { 0x0000a1f4, 0x00000000 },
- + { 0x0000a1f8, 0xefff0301 },
- + { 0x0000a1fc, 0xca9228ee },
- +};
- +
- +static const u_int32_t ar9287Modes_tx_gain_9287_1_1[][6] = {
- + /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- + { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a304, 0x00000000, 0x00000000, 0x00004002, 0x00004002, 0x00004002 },
- + { 0x0000a308, 0x00000000, 0x00000000, 0x00008004, 0x00008004, 0x00008004 },
- + { 0x0000a30c, 0x00000000, 0x00000000, 0x0000c00a, 0x0000c00a, 0x0000c00a },
- + { 0x0000a310, 0x00000000, 0x00000000, 0x0001000c, 0x0001000c, 0x0001000c },
- + { 0x0000a314, 0x00000000, 0x00000000, 0x0001420b, 0x0001420b, 0x0001420b },
- + { 0x0000a318, 0x00000000, 0x00000000, 0x0001824a, 0x0001824a, 0x0001824a },
- + { 0x0000a31c, 0x00000000, 0x00000000, 0x0001c44a, 0x0001c44a, 0x0001c44a },
- + { 0x0000a320, 0x00000000, 0x00000000, 0x0002064a, 0x0002064a, 0x0002064a },
- + { 0x0000a324, 0x00000000, 0x00000000, 0x0002484a, 0x0002484a, 0x0002484a },
- + { 0x0000a328, 0x00000000, 0x00000000, 0x00028a4a, 0x00028a4a, 0x00028a4a },
- + { 0x0000a32c, 0x00000000, 0x00000000, 0x0002cc4a, 0x0002cc4a, 0x0002cc4a },
- + { 0x0000a330, 0x00000000, 0x00000000, 0x00030e4a, 0x00030e4a, 0x00030e4a },
- + { 0x0000a334, 0x00000000, 0x00000000, 0x00034e8a, 0x00034e8a, 0x00034e8a },
- + { 0x0000a338, 0x00000000, 0x00000000, 0x00038e8c, 0x00038e8c, 0x00038e8c },
- + { 0x0000a33c, 0x00000000, 0x00000000, 0x0003cecc, 0x0003cecc, 0x0003cecc },
- + { 0x0000a340, 0x00000000, 0x00000000, 0x00040ed4, 0x00040ed4, 0x00040ed4 },
- + { 0x0000a344, 0x00000000, 0x00000000, 0x00044edc, 0x00044edc, 0x00044edc },
- + { 0x0000a348, 0x00000000, 0x00000000, 0x00048ede, 0x00048ede, 0x00048ede },
- + { 0x0000a34c, 0x00000000, 0x00000000, 0x0004cf1e, 0x0004cf1e, 0x0004cf1e },
- + { 0x0000a350, 0x00000000, 0x00000000, 0x00050f5e, 0x00050f5e, 0x00050f5e },
- + { 0x0000a354, 0x00000000, 0x00000000, 0x00054f9e, 0x00054f9e, 0x00054f9e },
- + { 0x0000a780, 0x00000000, 0x00000000, 0x00000062, 0x00000062, 0x00000062 },
- + { 0x0000a784, 0x00000000, 0x00000000, 0x00004064, 0x00004064, 0x00004064 },
- + { 0x0000a788, 0x00000000, 0x00000000, 0x000080a4, 0x000080a4, 0x000080a4 },
- + { 0x0000a78c, 0x00000000, 0x00000000, 0x0000c0aa, 0x0000c0aa, 0x0000c0aa },
- + { 0x0000a790, 0x00000000, 0x00000000, 0x000100ac, 0x000100ac, 0x000100ac },
- + { 0x0000a794, 0x00000000, 0x00000000, 0x000140b4, 0x000140b4, 0x000140b4 },
- + { 0x0000a798, 0x00000000, 0x00000000, 0x000180f4, 0x000180f4, 0x000180f4 },
- + { 0x0000a79c, 0x00000000, 0x00000000, 0x0001c134, 0x0001c134, 0x0001c134 },
- + { 0x0000a7a0, 0x00000000, 0x00000000, 0x00020174, 0x00020174, 0x00020174 },
- + { 0x0000a7a4, 0x00000000, 0x00000000, 0x0002417c, 0x0002417c, 0x0002417c },
- + { 0x0000a7a8, 0x00000000, 0x00000000, 0x0002817e, 0x0002817e, 0x0002817e },
- + { 0x0000a7ac, 0x00000000, 0x00000000, 0x0002c1be, 0x0002c1be, 0x0002c1be },
- + { 0x0000a7b0, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- + { 0x0000a7b4, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- + { 0x0000a7b8, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- + { 0x0000a7bc, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- + { 0x0000a7c0, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- + { 0x0000a7c4, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- + { 0x0000a7c8, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- + { 0x0000a7cc, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- + { 0x0000a7d0, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- + { 0x0000a7d4, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- + { 0x0000a274, 0x0a180000, 0x0a180000, 0x0a1aa000, 0x0a1aa000, 0x0a1aa000 },
- +};
- +
- +static const u_int32_t ar9287Modes_rx_gain_9287_1_1[][6] = {
- + /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- + { 0x00009a00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120, 0x0000a120 },
- + { 0x00009a04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124, 0x0000a124 },
- + { 0x00009a08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128, 0x0000a128 },
- + { 0x00009a0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c, 0x0000a12c },
- + { 0x00009a10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130, 0x0000a130 },
- + { 0x00009a14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194, 0x0000a194 },
- + { 0x00009a18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198, 0x0000a198 },
- + { 0x00009a1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c, 0x0000a20c },
- + { 0x00009a20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210, 0x0000a210 },
- + { 0x00009a24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284, 0x0000a284 },
- + { 0x00009a28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288, 0x0000a288 },
- + { 0x00009a2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c, 0x0000a28c },
- + { 0x00009a30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290, 0x0000a290 },
- + { 0x00009a34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294, 0x0000a294 },
- + { 0x00009a38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0, 0x0000a2a0 },
- + { 0x00009a3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4, 0x0000a2a4 },
- + { 0x00009a40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8, 0x0000a2a8 },
- + { 0x00009a44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac, 0x0000a2ac },
- + { 0x00009a48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0, 0x0000a2b0 },
- + { 0x00009a4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4, 0x0000a2b4 },
- + { 0x00009a50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8, 0x0000a2b8 },
- + { 0x00009a54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4, 0x0000a2c4 },
- + { 0x00009a58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708, 0x0000a708 },
- + { 0x00009a5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c, 0x0000a70c },
- + { 0x00009a60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710, 0x0000a710 },
- + { 0x00009a64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04, 0x0000ab04 },
- + { 0x00009a68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08, 0x0000ab08 },
- + { 0x00009a6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c, 0x0000ab0c },
- + { 0x00009a70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10, 0x0000ab10 },
- + { 0x00009a74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14, 0x0000ab14 },
- + { 0x00009a78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18, 0x0000ab18 },
- + { 0x00009a7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c, 0x0000ab8c },
- + { 0x00009a80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90, 0x0000ab90 },
- + { 0x00009a84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94, 0x0000ab94 },
- + { 0x00009a88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98, 0x0000ab98 },
- + { 0x00009a8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4, 0x0000aba4 },
- + { 0x00009a90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8, 0x0000aba8 },
- + { 0x00009a94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04, 0x0000cb04 },
- + { 0x00009a98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08, 0x0000cb08 },
- + { 0x00009a9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c, 0x0000cb0c },
- + { 0x00009aa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10, 0x0000cb10 },
- + { 0x00009aa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14, 0x0000cb14 },
- + { 0x00009aa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18, 0x0000cb18 },
- + { 0x00009aac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c, 0x0000cb8c },
- + { 0x00009ab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90, 0x0000cb90 },
- + { 0x00009ab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18, 0x0000cf18 },
- + { 0x00009ab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24, 0x0000cf24 },
- + { 0x00009abc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28, 0x0000cf28 },
- + { 0x00009ac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314, 0x0000d314 },
- + { 0x00009ac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318, 0x0000d318 },
- + { 0x00009ac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c, 0x0000d38c },
- + { 0x00009acc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390, 0x0000d390 },
- + { 0x00009ad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394, 0x0000d394 },
- + { 0x00009ad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398, 0x0000d398 },
- + { 0x00009ad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4, 0x0000d3a4 },
- + { 0x00009adc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8, 0x0000d3a8 },
- + { 0x00009ae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac, 0x0000d3ac },
- + { 0x00009ae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0, 0x0000d3b0 },
- + { 0x00009ae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380, 0x0000f380 },
- + { 0x00009aec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384, 0x0000f384 },
- + { 0x00009af0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388, 0x0000f388 },
- + { 0x00009af4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710, 0x0000f710 },
- + { 0x00009af8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714, 0x0000f714 },
- + { 0x00009afc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718, 0x0000f718 },
- + { 0x00009b00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10, 0x0000fb10 },
- + { 0x00009b04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14, 0x0000fb14 },
- + { 0x00009b08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18, 0x0000fb18 },
- + { 0x00009b0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c, 0x0000fb8c },
- + { 0x00009b10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90, 0x0000fb90 },
- + { 0x00009b14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94, 0x0000fb94 },
- + { 0x00009b18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c, 0x0000ff8c },
- + { 0x00009b1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90, 0x0000ff90 },
- + { 0x00009b20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94, 0x0000ff94 },
- + { 0x00009b24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0, 0x0000ffa0 },
- + { 0x00009b28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4, 0x0000ffa4 },
- + { 0x00009b2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8, 0x0000ffa8 },
- + { 0x00009b30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac, 0x0000ffac },
- + { 0x00009b34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0, 0x0000ffb0 },
- + { 0x00009b38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4, 0x0000ffb4 },
- + { 0x00009b3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1, 0x0000ffa1 },
- + { 0x00009b40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5, 0x0000ffa5 },
- + { 0x00009b44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9, 0x0000ffa9 },
- + { 0x00009b48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad, 0x0000ffad },
- + { 0x00009b4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1, 0x0000ffb1 },
- + { 0x00009b50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5, 0x0000ffb5 },
- + { 0x00009b54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9, 0x0000ffb9 },
- + { 0x00009b58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5, 0x0000ffc5 },
- + { 0x00009b5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9, 0x0000ffc9 },
- + { 0x00009b60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd, 0x0000ffcd },
- + { 0x00009b64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1, 0x0000ffd1 },
- + { 0x00009b68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5, 0x0000ffd5 },
- + { 0x00009b6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2, 0x0000ffc2 },
- + { 0x00009b70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6, 0x0000ffc6 },
- + { 0x00009b74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca, 0x0000ffca },
- + { 0x00009b78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce, 0x0000ffce },
- + { 0x00009b7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2, 0x0000ffd2 },
- + { 0x00009b80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6, 0x0000ffd6 },
- + { 0x00009b84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda, 0x0000ffda },
- + { 0x00009b88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7, 0x0000ffc7 },
- + { 0x00009b8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb, 0x0000ffcb },
- + { 0x00009b90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf, 0x0000ffcf },
- + { 0x00009b94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3, 0x0000ffd3 },
- + { 0x00009b98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7, 0x0000ffd7 },
- + { 0x00009b9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009ba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009ba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009ba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009be0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009be4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009be8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009bfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000aa00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120, 0x0000a120 },
- + { 0x0000aa04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124, 0x0000a124 },
- + { 0x0000aa08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128, 0x0000a128 },
- + { 0x0000aa0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c, 0x0000a12c },
- + { 0x0000aa10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130, 0x0000a130 },
- + { 0x0000aa14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194, 0x0000a194 },
- + { 0x0000aa18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198, 0x0000a198 },
- + { 0x0000aa1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c, 0x0000a20c },
- + { 0x0000aa20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210, 0x0000a210 },
- + { 0x0000aa24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284, 0x0000a284 },
- + { 0x0000aa28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288, 0x0000a288 },
- + { 0x0000aa2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c, 0x0000a28c },
- + { 0x0000aa30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290, 0x0000a290 },
- + { 0x0000aa34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294, 0x0000a294 },
- + { 0x0000aa38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0, 0x0000a2a0 },
- + { 0x0000aa3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4, 0x0000a2a4 },
- + { 0x0000aa40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8, 0x0000a2a8 },
- + { 0x0000aa44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac, 0x0000a2ac },
- + { 0x0000aa48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0, 0x0000a2b0 },
- + { 0x0000aa4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4, 0x0000a2b4 },
- + { 0x0000aa50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8, 0x0000a2b8 },
- + { 0x0000aa54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4, 0x0000a2c4 },
- + { 0x0000aa58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708, 0x0000a708 },
- + { 0x0000aa5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c, 0x0000a70c },
- + { 0x0000aa60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710, 0x0000a710 },
- + { 0x0000aa64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04, 0x0000ab04 },
- + { 0x0000aa68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08, 0x0000ab08 },
- + { 0x0000aa6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c, 0x0000ab0c },
- + { 0x0000aa70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10, 0x0000ab10 },
- + { 0x0000aa74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14, 0x0000ab14 },
- + { 0x0000aa78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18, 0x0000ab18 },
- + { 0x0000aa7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c, 0x0000ab8c },
- + { 0x0000aa80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90, 0x0000ab90 },
- + { 0x0000aa84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94, 0x0000ab94 },
- + { 0x0000aa88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98, 0x0000ab98 },
- + { 0x0000aa8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4, 0x0000aba4 },
- + { 0x0000aa90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8, 0x0000aba8 },
- + { 0x0000aa94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04, 0x0000cb04 },
- + { 0x0000aa98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08, 0x0000cb08 },
- + { 0x0000aa9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c, 0x0000cb0c },
- + { 0x0000aaa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10, 0x0000cb10 },
- + { 0x0000aaa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14, 0x0000cb14 },
- + { 0x0000aaa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18, 0x0000cb18 },
- + { 0x0000aaac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c, 0x0000cb8c },
- + { 0x0000aab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90, 0x0000cb90 },
- + { 0x0000aab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18, 0x0000cf18 },
- + { 0x0000aab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24, 0x0000cf24 },
- + { 0x0000aabc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28, 0x0000cf28 },
- + { 0x0000aac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314, 0x0000d314 },
- + { 0x0000aac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318, 0x0000d318 },
- + { 0x0000aac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c, 0x0000d38c },
- + { 0x0000aacc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390, 0x0000d390 },
- + { 0x0000aad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394, 0x0000d394 },
- + { 0x0000aad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398, 0x0000d398 },
- + { 0x0000aad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4, 0x0000d3a4 },
- + { 0x0000aadc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8, 0x0000d3a8 },
- + { 0x0000aae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac, 0x0000d3ac },
- + { 0x0000aae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0, 0x0000d3b0 },
- + { 0x0000aae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380, 0x0000f380 },
- + { 0x0000aaec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384, 0x0000f384 },
- + { 0x0000aaf0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388, 0x0000f388 },
- + { 0x0000aaf4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710, 0x0000f710 },
- + { 0x0000aaf8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714, 0x0000f714 },
- + { 0x0000aafc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718, 0x0000f718 },
- + { 0x0000ab00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10, 0x0000fb10 },
- + { 0x0000ab04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14, 0x0000fb14 },
- + { 0x0000ab08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18, 0x0000fb18 },
- + { 0x0000ab0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c, 0x0000fb8c },
- + { 0x0000ab10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90, 0x0000fb90 },
- + { 0x0000ab14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94, 0x0000fb94 },
- + { 0x0000ab18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c, 0x0000ff8c },
- + { 0x0000ab1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90, 0x0000ff90 },
- + { 0x0000ab20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94, 0x0000ff94 },
- + { 0x0000ab24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0, 0x0000ffa0 },
- + { 0x0000ab28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4, 0x0000ffa4 },
- + { 0x0000ab2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8, 0x0000ffa8 },
- + { 0x0000ab30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac, 0x0000ffac },
- + { 0x0000ab34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0, 0x0000ffb0 },
- + { 0x0000ab38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4, 0x0000ffb4 },
- + { 0x0000ab3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1, 0x0000ffa1 },
- + { 0x0000ab40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5, 0x0000ffa5 },
- + { 0x0000ab44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9, 0x0000ffa9 },
- + { 0x0000ab48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad, 0x0000ffad },
- + { 0x0000ab4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1, 0x0000ffb1 },
- + { 0x0000ab50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5, 0x0000ffb5 },
- + { 0x0000ab54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9, 0x0000ffb9 },
- + { 0x0000ab58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5, 0x0000ffc5 },
- + { 0x0000ab5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9, 0x0000ffc9 },
- + { 0x0000ab60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd, 0x0000ffcd },
- + { 0x0000ab64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1, 0x0000ffd1 },
- + { 0x0000ab68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5, 0x0000ffd5 },
- + { 0x0000ab6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2, 0x0000ffc2 },
- + { 0x0000ab70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6, 0x0000ffc6 },
- + { 0x0000ab74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca, 0x0000ffca },
- + { 0x0000ab78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce, 0x0000ffce },
- + { 0x0000ab7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2, 0x0000ffd2 },
- + { 0x0000ab80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6, 0x0000ffd6 },
- + { 0x0000ab84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda, 0x0000ffda },
- + { 0x0000ab88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7, 0x0000ffc7 },
- + { 0x0000ab8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb, 0x0000ffcb },
- + { 0x0000ab90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf, 0x0000ffcf },
- + { 0x0000ab94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3, 0x0000ffd3 },
- + { 0x0000ab98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7, 0x0000ffd7 },
- + { 0x0000ab9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000aba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000aba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000aba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abe0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abe4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abe8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x0000abfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- + { 0x00009848, 0x00000000, 0x00000000, 0x00001067, 0x00001067, 0x00001067 },
- + { 0x0000a848, 0x00000000, 0x00000000, 0x00001067, 0x00001067, 0x00001067 },
- +};
- +
- +static const u_int32_t ar9287PciePhy_clkreq_always_on_L1_9287_1_1[][2] = {
- + {0x00004040, 0x9248fd00 },
- + {0x00004040, 0x24924924 },
- + {0x00004040, 0xa8000019 },
- + {0x00004040, 0x13160820 },
- + {0x00004040, 0xe5980560 },
- + {0x00004040, 0xc01dcffd },
- + {0x00004040, 0x1aaabe41 },
- + {0x00004040, 0xbe105554 },
- + {0x00004040, 0x00043007 },
- + {0x00004044, 0x00000000 },
- +};
- +
- +static const u_int32_t ar9287PciePhy_clkreq_off_L1_9287_1_1[][2] = {
- + {0x00004040, 0x9248fd00 },
- + {0x00004040, 0x24924924 },
- + {0x00004040, 0xa8000019 },
- + {0x00004040, 0x13160820 },
- + {0x00004040, 0xe5980560 },
- + {0x00004040, 0xc01dcffc },
- + {0x00004040, 0x1aaabe41 },
- + {0x00004040, 0xbe105554 },
- + {0x00004040, 0x00043007 },
- + {0x00004044, 0x00000000 },
- +};
- +
- +
- +/* AR9271 initialization values automaticaly created: 06/04/09 */
- +static const u_int32_t ar9271Modes_9271[][6] = {
- + { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
- + { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
- + { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
- + { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
- + { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
- + { 0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f },
- + { 0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440, 0x00006880 },
- + { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
- + { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
- + { 0x00009824, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e },
- + { 0x00009828, 0x3a020001, 0x3a020001, 0x3a020001, 0x3a020001, 0x3a020001 },
- + { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- + { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
- + { 0x00009840, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e },
- + { 0x00009844, 0x0372161e, 0x0372161e, 0x03721620, 0x03721620, 0x037216a0 },
- + { 0x00009848, 0x00001066, 0x00001066, 0x00001053, 0x00001053, 0x00001059 },
- + { 0x0000a848, 0x00001066, 0x00001066, 0x00001053, 0x00001053, 0x00001059 },
- + { 0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2 },
- + { 0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
- + { 0x0000985c, 0x3139605e, 0x3139605e, 0x3137605e, 0x3137605e, 0x3139605e },
- + { 0x00009860, 0x00058d18, 0x00058d18, 0x00058d18, 0x00058d18, 0x00058d18 },
- + { 0x00009864, 0x0000fe00, 0x0000fe00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- + { 0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
- + { 0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881 },
- + { 0x00009910, 0x30002310, 0x30002310, 0x30002310, 0x30002310, 0x30002310 },
- + { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
- + { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
- + { 0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d, 0xd00a800d },
- + { 0x00009944, 0xffbc1010, 0xffbc1010, 0xffbc1020, 0xffbc1020, 0xffbc1010 },
- + { 0x00009960, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x00009964, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x000099b8, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c },
- + { 0x000099bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00, 0x00000c00 },
- + { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
- + { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
- + { 0x000099c8, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f },
- + { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
- + { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
- + { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x00009a00, 0x00000000, 0x00000000, 0x00058084, 0x00058084, 0x00000000 },
- + { 0x00009a04, 0x00000000, 0x00000000, 0x00058088, 0x00058088, 0x00000000 },
- + { 0x00009a08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c, 0x00000000 },
- + { 0x00009a0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100, 0x00000000 },
- + { 0x00009a10, 0x00000000, 0x00000000, 0x00058104, 0x00058104, 0x00000000 },
- + { 0x00009a14, 0x00000000, 0x00000000, 0x00058108, 0x00058108, 0x00000000 },
- + { 0x00009a18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c, 0x00000000 },
- + { 0x00009a1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110, 0x00000000 },
- + { 0x00009a20, 0x00000000, 0x00000000, 0x00058114, 0x00058114, 0x00000000 },
- + { 0x00009a24, 0x00000000, 0x00000000, 0x00058180, 0x00058180, 0x00000000 },
- + { 0x00009a28, 0x00000000, 0x00000000, 0x00058184, 0x00058184, 0x00000000 },
- + { 0x00009a2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188, 0x00000000 },
- + { 0x00009a30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c, 0x00000000 },
- + { 0x00009a34, 0x00000000, 0x00000000, 0x00058190, 0x00058190, 0x00000000 },
- + { 0x00009a38, 0x00000000, 0x00000000, 0x00058194, 0x00058194, 0x00000000 },
- + { 0x00009a3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0, 0x00000000 },
- + { 0x00009a40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c, 0x00000000 },
- + { 0x00009a44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8, 0x00000000 },
- + { 0x00009a48, 0x00000000, 0x00000000, 0x00058284, 0x00058284, 0x00000000 },
- + { 0x00009a4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288, 0x00000000 },
- + { 0x00009a50, 0x00000000, 0x00000000, 0x00058224, 0x00058224, 0x00000000 },
- + { 0x00009a54, 0x00000000, 0x00000000, 0x00058290, 0x00058290, 0x00000000 },
- + { 0x00009a58, 0x00000000, 0x00000000, 0x00058300, 0x00058300, 0x00000000 },
- + { 0x00009a5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304, 0x00000000 },
- + { 0x00009a60, 0x00000000, 0x00000000, 0x00058308, 0x00058308, 0x00000000 },
- + { 0x00009a64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c, 0x00000000 },
- + { 0x00009a68, 0x00000000, 0x00000000, 0x00058380, 0x00058380, 0x00000000 },
- + { 0x00009a6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384, 0x00000000 },
- + { 0x00009a70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000 },
- + { 0x00009a74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000 },
- + { 0x00009a78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000 },
- + { 0x00009a7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000 },
- + { 0x00009a80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000 },
- + { 0x00009a84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000 },
- + { 0x00009a88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00, 0x00000000 },
- + { 0x00009a8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04, 0x00000000 },
- + { 0x00009a90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08, 0x00000000 },
- + { 0x00009a94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c, 0x00000000 },
- + { 0x00009a98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80, 0x00000000 },
- + { 0x00009a9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84, 0x00000000 },
- + { 0x00009aa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88, 0x00000000 },
- + { 0x00009aa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c, 0x00000000 },
- + { 0x00009aa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90, 0x00000000 },
- + { 0x00009aac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80, 0x00000000 },
- + { 0x00009ab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84, 0x00000000 },
- + { 0x00009ab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88, 0x00000000 },
- + { 0x00009ab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c, 0x00000000 },
- + { 0x00009abc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90, 0x00000000 },
- + { 0x00009ac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c, 0x00000000 },
- + { 0x00009ac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310, 0x00000000 },
- + { 0x00009ac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384, 0x00000000 },
- + { 0x00009acc, 0x00000000, 0x00000000, 0x000db388, 0x000db388, 0x00000000 },
- + { 0x00009ad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324, 0x00000000 },
- + { 0x00009ad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704, 0x00000000 },
- + { 0x00009ad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4, 0x00000000 },
- + { 0x00009adc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8, 0x00000000 },
- + { 0x00009ae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710, 0x00000000 },
- + { 0x00009ae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714, 0x00000000 },
- + { 0x00009ae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720, 0x00000000 },
- + { 0x00009aec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724, 0x00000000 },
- + { 0x00009af0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728, 0x00000000 },
- + { 0x00009af4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c, 0x00000000 },
- + { 0x00009af8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0, 0x00000000 },
- + { 0x00009afc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4, 0x00000000 },
- + { 0x00009b00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8, 0x00000000 },
- + { 0x00009b04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0, 0x00000000 },
- + { 0x00009b08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4, 0x00000000 },
- + { 0x00009b0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8, 0x00000000 },
- + { 0x00009b10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5, 0x00000000 },
- + { 0x00009b14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9, 0x00000000 },
- + { 0x00009b18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad, 0x00000000 },
- + { 0x00009b1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1, 0x00000000 },
- + { 0x00009b20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5, 0x00000000 },
- + { 0x00009b24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9, 0x00000000 },
- + { 0x00009b28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5, 0x00000000 },
- + { 0x00009b2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9, 0x00000000 },
- + { 0x00009b30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1, 0x00000000 },
- + { 0x00009b34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5, 0x00000000 },
- + { 0x00009b38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9, 0x00000000 },
- + { 0x00009b3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6, 0x00000000 },
- + { 0x00009b40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca, 0x00000000 },
- + { 0x00009b44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce, 0x00000000 },
- + { 0x00009b48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2, 0x00000000 },
- + { 0x00009b4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6, 0x00000000 },
- + { 0x00009b50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3, 0x00000000 },
- + { 0x00009b54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7, 0x00000000 },
- + { 0x00009b58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb, 0x00000000 },
- + { 0x00009b5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf, 0x00000000 },
- + { 0x00009b60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7, 0x00000000 },
- + { 0x00009b64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009b9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009ba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009ba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009ba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009be0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009be4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009be8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x00009bfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000aa00, 0x00000000, 0x00000000, 0x00058084, 0x00058084, 0x00000000 },
- + { 0x0000aa04, 0x00000000, 0x00000000, 0x00058088, 0x00058088, 0x00000000 },
- + { 0x0000aa08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c, 0x00000000 },
- + { 0x0000aa0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100, 0x00000000 },
- + { 0x0000aa10, 0x00000000, 0x00000000, 0x00058104, 0x00058104, 0x00000000 },
- + { 0x0000aa14, 0x00000000, 0x00000000, 0x00058108, 0x00058108, 0x00000000 },
- + { 0x0000aa18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c, 0x00000000 },
- + { 0x0000aa1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110, 0x00000000 },
- + { 0x0000aa20, 0x00000000, 0x00000000, 0x00058114, 0x00058114, 0x00000000 },
- + { 0x0000aa24, 0x00000000, 0x00000000, 0x00058180, 0x00058180, 0x00000000 },
- + { 0x0000aa28, 0x00000000, 0x00000000, 0x00058184, 0x00058184, 0x00000000 },
- + { 0x0000aa2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188, 0x00000000 },
- + { 0x0000aa30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c, 0x00000000 },
- + { 0x0000aa34, 0x00000000, 0x00000000, 0x00058190, 0x00058190, 0x00000000 },
- + { 0x0000aa38, 0x00000000, 0x00000000, 0x00058194, 0x00058194, 0x00000000 },
- + { 0x0000aa3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0, 0x00000000 },
- + { 0x0000aa40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c, 0x00000000 },
- + { 0x0000aa44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8, 0x00000000 },
- + { 0x0000aa48, 0x00000000, 0x00000000, 0x00058284, 0x00058284, 0x00000000 },
- + { 0x0000aa4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288, 0x00000000 },
- + { 0x0000aa50, 0x00000000, 0x00000000, 0x00058224, 0x00058224, 0x00000000 },
- + { 0x0000aa54, 0x00000000, 0x00000000, 0x00058290, 0x00058290, 0x00000000 },
- + { 0x0000aa58, 0x00000000, 0x00000000, 0x00058300, 0x00058300, 0x00000000 },
- + { 0x0000aa5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304, 0x00000000 },
- + { 0x0000aa60, 0x00000000, 0x00000000, 0x00058308, 0x00058308, 0x00000000 },
- + { 0x0000aa64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c, 0x00000000 },
- + { 0x0000aa68, 0x00000000, 0x00000000, 0x00058380, 0x00058380, 0x00000000 },
- + { 0x0000aa6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384, 0x00000000 },
- + { 0x0000aa70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000 },
- + { 0x0000aa74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000 },
- + { 0x0000aa78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000 },
- + { 0x0000aa7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000 },
- + { 0x0000aa80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000 },
- + { 0x0000aa84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000 },
- + { 0x0000aa88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00, 0x00000000 },
- + { 0x0000aa8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04, 0x00000000 },
- + { 0x0000aa90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08, 0x00000000 },
- + { 0x0000aa94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c, 0x00000000 },
- + { 0x0000aa98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80, 0x00000000 },
- + { 0x0000aa9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84, 0x00000000 },
- + { 0x0000aaa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88, 0x00000000 },
- + { 0x0000aaa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c, 0x00000000 },
- + { 0x0000aaa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90, 0x00000000 },
- + { 0x0000aaac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80, 0x00000000 },
- + { 0x0000aab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84, 0x00000000 },
- + { 0x0000aab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88, 0x00000000 },
- + { 0x0000aab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c, 0x00000000 },
- + { 0x0000aabc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90, 0x00000000 },
- + { 0x0000aac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c, 0x00000000 },
- + { 0x0000aac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310, 0x00000000 },
- + { 0x0000aac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384, 0x00000000 },
- + { 0x0000aacc, 0x00000000, 0x00000000, 0x000db388, 0x000db388, 0x00000000 },
- + { 0x0000aad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324, 0x00000000 },
- + { 0x0000aad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704, 0x00000000 },
- + { 0x0000aad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4, 0x00000000 },
- + { 0x0000aadc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8, 0x00000000 },
- + { 0x0000aae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710, 0x00000000 },
- + { 0x0000aae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714, 0x00000000 },
- + { 0x0000aae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720, 0x00000000 },
- + { 0x0000aaec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724, 0x00000000 },
- + { 0x0000aaf0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728, 0x00000000 },
- + { 0x0000aaf4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c, 0x00000000 },
- + { 0x0000aaf8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0, 0x00000000 },
- + { 0x0000aafc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4, 0x00000000 },
- + { 0x0000ab00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8, 0x00000000 },
- + { 0x0000ab04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0, 0x00000000 },
- + { 0x0000ab08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4, 0x00000000 },
- + { 0x0000ab0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8, 0x00000000 },
- + { 0x0000ab10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5, 0x00000000 },
- + { 0x0000ab14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9, 0x00000000 },
- + { 0x0000ab18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad, 0x00000000 },
- + { 0x0000ab1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1, 0x00000000 },
- + { 0x0000ab20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5, 0x00000000 },
- + { 0x0000ab24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9, 0x00000000 },
- + { 0x0000ab28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5, 0x00000000 },
- + { 0x0000ab2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9, 0x00000000 },
- + { 0x0000ab30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1, 0x00000000 },
- + { 0x0000ab34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5, 0x00000000 },
- + { 0x0000ab38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9, 0x00000000 },
- + { 0x0000ab3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6, 0x00000000 },
- + { 0x0000ab40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca, 0x00000000 },
- + { 0x0000ab44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce, 0x00000000 },
- + { 0x0000ab48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2, 0x00000000 },
- + { 0x0000ab4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6, 0x00000000 },
- + { 0x0000ab50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3, 0x00000000 },
- + { 0x0000ab54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7, 0x00000000 },
- + { 0x0000ab58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb, 0x00000000 },
- + { 0x0000ab5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf, 0x00000000 },
- + { 0x0000ab60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7, 0x00000000 },
- + { 0x0000ab64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000ab9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000aba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000aba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000aba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abe0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abe4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abe8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000abfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- + { 0x0000a204, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004 },
- + { 0x0000a20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000, 0x0001f000 },
- + { 0x0000b20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000, 0x0001f000 },
- + { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
- + { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- + { 0x0000a250, 0x0004f000, 0x0004f000, 0x0004a000, 0x0004a000, 0x0004a000 },
- + { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
- +};
- +
- +static const u_int32_t ar9271Common_9271[][2] = {
- + { 0x0000000c, 0x00000000 },
- + { 0x00000030, 0x00020045 },
- + { 0x00000034, 0x00000005 },
- + { 0x00000040, 0x00000000 },
- + { 0x00000044, 0x00000008 },
- + { 0x00000048, 0x00000008 },
- + { 0x0000004c, 0x00000010 },
- + { 0x00000050, 0x00000000 },
- + { 0x00000054, 0x0000001f },
- + { 0x00000800, 0x00000000 },
- + { 0x00000804, 0x00000000 },
- + { 0x00000808, 0x00000000 },
- + { 0x0000080c, 0x00000000 },
- + { 0x00000810, 0x00000000 },
- + { 0x00000814, 0x00000000 },
- + { 0x00000818, 0x00000000 },
- + { 0x0000081c, 0x00000000 },
- + { 0x00000820, 0x00000000 },
- + { 0x00000824, 0x00000000 },
- + { 0x00001040, 0x002ffc0f },
- + { 0x00001044, 0x002ffc0f },
- + { 0x00001048, 0x002ffc0f },
- + { 0x0000104c, 0x002ffc0f },
- + { 0x00001050, 0x002ffc0f },
- + { 0x00001054, 0x002ffc0f },
- + { 0x00001058, 0x002ffc0f },
- + { 0x0000105c, 0x002ffc0f },
- + { 0x00001060, 0x002ffc0f },
- + { 0x00001064, 0x002ffc0f },
- + { 0x00001230, 0x00000000 },
- + { 0x00001270, 0x00000000 },
- + { 0x00001038, 0x00000000 },
- + { 0x00001078, 0x00000000 },
- + { 0x000010b8, 0x00000000 },
- + { 0x000010f8, 0x00000000 },
- + { 0x00001138, 0x00000000 },
- + { 0x00001178, 0x00000000 },
- + { 0x000011b8, 0x00000000 },
- + { 0x000011f8, 0x00000000 },
- + { 0x00001238, 0x00000000 },
- + { 0x00001278, 0x00000000 },
- + { 0x000012b8, 0x00000000 },
- + { 0x000012f8, 0x00000000 },
- + { 0x00001338, 0x00000000 },
- + { 0x00001378, 0x00000000 },
- + { 0x000013b8, 0x00000000 },
- + { 0x000013f8, 0x00000000 },
- + { 0x00001438, 0x00000000 },
- + { 0x00001478, 0x00000000 },
- + { 0x000014b8, 0x00000000 },
- + { 0x000014f8, 0x00000000 },
- + { 0x00001538, 0x00000000 },
- + { 0x00001578, 0x00000000 },
- + { 0x000015b8, 0x00000000 },
- + { 0x000015f8, 0x00000000 },
- + { 0x00001638, 0x00000000 },
- + { 0x00001678, 0x00000000 },
- + { 0x000016b8, 0x00000000 },
- + { 0x000016f8, 0x00000000 },
- + { 0x00001738, 0x00000000 },
- + { 0x00001778, 0x00000000 },
- + { 0x000017b8, 0x00000000 },
- + { 0x000017f8, 0x00000000 },
- + { 0x0000103c, 0x00000000 },
- + { 0x0000107c, 0x00000000 },
- + { 0x000010bc, 0x00000000 },
- + { 0x000010fc, 0x00000000 },
- + { 0x0000113c, 0x00000000 },
- + { 0x0000117c, 0x00000000 },
- + { 0x000011bc, 0x00000000 },
- + { 0x000011fc, 0x00000000 },
- + { 0x0000123c, 0x00000000 },
- + { 0x0000127c, 0x00000000 },
- + { 0x000012bc, 0x00000000 },
- + { 0x000012fc, 0x00000000 },
- + { 0x0000133c, 0x00000000 },
- + { 0x0000137c, 0x00000000 },
- + { 0x000013bc, 0x00000000 },
- + { 0x000013fc, 0x00000000 },
- + { 0x0000143c, 0x00000000 },
- + { 0x0000147c, 0x00000000 },
- + { 0x00004030, 0x00000002 },
- + { 0x0000403c, 0x00000002 },
- + { 0x00004024, 0x0000001f },
- + { 0x00004060, 0x00000000 },
- + { 0x00004064, 0x00000000 },
- + { 0x00008004, 0x00000000 },
- + { 0x00008008, 0x00000000 },
- + { 0x0000800c, 0x00000000 },
- + { 0x00008018, 0x00000700 },
- + { 0x00008020, 0x00000000 },
- + { 0x00008038, 0x00000000 },
- + { 0x0000803c, 0x00000000 },
- + { 0x00008048, 0x00000000 },
- + { 0x00008054, 0x00000000 },
- + { 0x00008058, 0x00000000 },
- + { 0x0000805c, 0x000fc78f },
- + { 0x00008060, 0x0000000f },
- + { 0x00008064, 0x00000000 },
- + { 0x00008070, 0x00000000 },
- + { 0x000080b0, 0x00000000 },
- + { 0x000080b4, 0x00000000 },
- + { 0x000080b8, 0x00000000 },
- + { 0x000080bc, 0x00000000 },
- + { 0x000080c0, 0x2a80001a },
- + { 0x000080c4, 0x05dc01e0 },
- + { 0x000080c8, 0x1f402710 },
- + { 0x000080cc, 0x01f40000 },
- + { 0x000080d0, 0x00001e00 },
- + { 0x000080d4, 0x00000000 },
- + { 0x000080d8, 0x00400000 },
- + { 0x000080e0, 0xffffffff },
- + { 0x000080e4, 0x0000ffff },
- + { 0x000080e8, 0x003f3f3f },
- + { 0x000080ec, 0x00000000 },
- + { 0x000080f0, 0x00000000 },
- + { 0x000080f4, 0x00000000 },
- + { 0x000080f8, 0x00000000 },
- + { 0x000080fc, 0x00020000 },
- + { 0x00008100, 0x00020000 },
- + { 0x00008104, 0x00000001 },
- + { 0x00008108, 0x00000052 },
- + { 0x0000810c, 0x00000000 },
- + { 0x00008110, 0x00000168 },
- + { 0x00008118, 0x000100aa },
- + { 0x0000811c, 0x00003210 },
- + { 0x00008120, 0x08f04810 },
- + { 0x00008124, 0x00000000 },
- + { 0x00008128, 0x00000000 },
- + { 0x0000812c, 0x00000000 },
- + { 0x00008130, 0x00000000 },
- + { 0x00008134, 0x00000000 },
- + { 0x00008138, 0x00000000 },
- + { 0x0000813c, 0x00000000 },
- + { 0x00008144, 0xffffffff },
- + { 0x00008168, 0x00000000 },
- + { 0x0000816c, 0x00000000 },
- + { 0x00008170, 0x32143320 },
- + { 0x00008174, 0xfaa4fa50 },
- + { 0x00008178, 0x00000100 },
- + { 0x0000817c, 0x00000000 },
- + { 0x000081c0, 0x00000000 },
- + { 0x000081d0, 0x0000320a },
- + { 0x000081ec, 0x00000000 },
- + { 0x000081f0, 0x00000000 },
- + { 0x000081f4, 0x00000000 },
- + { 0x000081f8, 0x00000000 },
- + { 0x000081fc, 0x00000000 },
- + { 0x00008200, 0x00000000 },
- + { 0x00008204, 0x00000000 },
- + { 0x00008208, 0x00000000 },
- + { 0x0000820c, 0x00000000 },
- + { 0x00008210, 0x00000000 },
- + { 0x00008214, 0x00000000 },
- + { 0x00008218, 0x00000000 },
- + { 0x0000821c, 0x00000000 },
- + { 0x00008220, 0x00000000 },
- + { 0x00008224, 0x00000000 },
- + { 0x00008228, 0x00000000 },
- + { 0x0000822c, 0x00000000 },
- + { 0x00008230, 0x00000000 },
- + { 0x00008234, 0x00000000 },
- + { 0x00008238, 0x00000000 },
- + { 0x0000823c, 0x00000000 },
- + { 0x00008240, 0x00100000 },
- + { 0x00008244, 0x0010f400 },
- + { 0x00008248, 0x00000100 },
- + { 0x0000824c, 0x0001e800 },
- + { 0x00008250, 0x00000000 },
- + { 0x00008254, 0x00000000 },
- + { 0x00008258, 0x00000000 },
- + { 0x0000825c, 0x400000ff },
- + { 0x00008260, 0x00080922 },
- + { 0x00008264, 0xa8a00010 },
- + { 0x00008270, 0x00000000 },
- + { 0x00008274, 0x40000000 },
- + { 0x00008278, 0x003e4180 },
- + { 0x0000827c, 0x00000000 },
- + { 0x00008284, 0x0000002c },
- + { 0x00008288, 0x0000002c },
- + { 0x0000828c, 0x00000000 },
- + { 0x00008294, 0x00000000 },
- + { 0x00008298, 0x00000000 },
- + { 0x0000829c, 0x00000000 },
- + { 0x00008300, 0x00000040 },
- + { 0x00008314, 0x00000000 },
- + { 0x00008328, 0x00000000 },
- + { 0x0000832c, 0x00000001 },
- + { 0x00008330, 0x00000302 },
- + { 0x00008334, 0x00000e00 },
- + { 0x00008338, 0x00ff0000 },
- + { 0x0000833c, 0x00000000 },
- + { 0x00008340, 0x00010380 },
- + { 0x00008344, 0x00581043 },
- + { 0x00007010, 0x00000030 },
- + { 0x00007034, 0x00000002 },
- + { 0x00007038, 0x000004c2 },
- + { 0x00007800, 0x00140000 },
- + { 0x00007804, 0x0e4548d8 },
- + { 0x00007808, 0x54214514 },
- + { 0x0000780c, 0x02025820 },
- + { 0x00007810, 0x71c0d388 },
- + { 0x00007814, 0x924934a8 },
- + { 0x0000781c, 0x00000000 },
- + { 0x00007828, 0x66964300 },
- + { 0x0000782c, 0x8db6d961 },
- + { 0x00007830, 0x8db6d96c },
- + { 0x00007834, 0x6140008b },
- + { 0x0000783c, 0x72ee0a72 },
- + { 0x00007840, 0xbbfffffc },
- + { 0x00007844, 0x000c0db6 },
- + { 0x00007848, 0x6db61b6f },
- + { 0x0000784c, 0x6d9b66db },
- + { 0x00007850, 0x6d8c6dba },
- + { 0x00007854, 0x00040000 },
- + { 0x00007858, 0xdb003012 },
- + { 0x0000785c, 0x04924914 },
- + { 0x00007860, 0x21084210 },
- + { 0x00007864, 0xf7d7ffde },
- + { 0x00007868, 0xc2034080 },
- + { 0x00007870, 0x10142c00 },
- + { 0x00009808, 0x00000000 },
- + { 0x0000980c, 0xafe68e30 },
- + { 0x00009810, 0xfd14e000 },
- + { 0x00009814, 0x9c0a9f6b },
- + { 0x0000981c, 0x00000000 },
- + { 0x0000982c, 0x0000a000 },
- + { 0x00009830, 0x00000000 },
- + { 0x0000983c, 0x00200400 },
- + { 0x0000984c, 0x0040233c },
- + { 0x00009854, 0x00000044 },
- + { 0x00009900, 0x00000000 },
- + { 0x00009904, 0x00000000 },
- + { 0x00009908, 0x00000000 },
- + { 0x0000990c, 0x00000000 },
- + { 0x0000991c, 0x10000fff },
- + { 0x00009920, 0x04900000 },
- + { 0x00009928, 0x00000001 },
- + { 0x0000992c, 0x00000004 },
- + { 0x00009934, 0x1e1f2022 },
- + { 0x00009938, 0x0a0b0c0d },
- + { 0x0000993c, 0x00000000 },
- + { 0x00009940, 0x14750604 },
- + { 0x00009948, 0x9280c00a },
- + { 0x0000994c, 0x00020028 },
- + { 0x00009954, 0x5f3ca3de },
- + { 0x00009958, 0x0108ecff },
- + { 0x00009968, 0x000003ce },
- + { 0x00009970, 0x192bb514 },
- + { 0x00009974, 0x00000000 },
- + { 0x00009978, 0x00000001 },
- + { 0x0000997c, 0x00000000 },
- + { 0x00009980, 0x00000000 },
- + { 0x00009984, 0x00000000 },
- + { 0x00009988, 0x00000000 },
- + { 0x0000998c, 0x00000000 },
- + { 0x00009990, 0x00000000 },
- + { 0x00009994, 0x00000000 },
- + { 0x00009998, 0x00000000 },
- + { 0x0000999c, 0x00000000 },
- + { 0x000099a0, 0x00000000 },
- + { 0x000099a4, 0x00000001 },
- + { 0x000099a8, 0x201fff00 },
- + { 0x000099ac, 0x2def0400 },
- + { 0x000099b0, 0x03051000 },
- + { 0x000099b4, 0x00000820 },
- + { 0x000099dc, 0x00000000 },
- + { 0x000099e0, 0x00000000 },
- + { 0x000099e4, 0xaaaaaaaa },
- + { 0x000099e8, 0x3c466478 },
- + { 0x000099ec, 0x0cc80caa },
- + { 0x000099f0, 0x00000000 },
- + { 0x0000a208, 0x803e68c8 },
- + { 0x0000a210, 0x4080a333 },
- + { 0x0000a214, 0x00206c10 },
- + { 0x0000a218, 0x009c4060 },
- + { 0x0000a220, 0x01834061 },
- + { 0x0000a224, 0x00000400 },
- + { 0x0000a228, 0x000003b5 },
- + { 0x0000a22c, 0x00000000 },
- + { 0x0000a234, 0x20202020 },
- + { 0x0000a238, 0x20202020 },
- + { 0x0000a244, 0x00000000 },
- + { 0x0000a248, 0xfffffffc },
- + { 0x0000a24c, 0x00000000 },
- + { 0x0000a254, 0x00000000 },
- + { 0x0000a258, 0x0ccb5380 },
- + { 0x0000a25c, 0x15151501 },
- + { 0x0000a260, 0xdfa90f01 },
- + { 0x0000a268, 0x00000000 },
- + { 0x0000a26c, 0x0ebae9e6 },
- + { 0x0000a388, 0x0c000000 },
- + { 0x0000a38c, 0x20202020 },
- + { 0x0000a390, 0x20202020 },
- + { 0x0000a39c, 0x00000001 },
- + { 0x0000a3a0, 0x00000000 },
- + { 0x0000a3a4, 0x00000000 },
- + { 0x0000a3a8, 0x00000000 },
- + { 0x0000a3ac, 0x00000000 },
- + { 0x0000a3b0, 0x00000000 },
- + { 0x0000a3b4, 0x00000000 },
- + { 0x0000a3b8, 0x00000000 },
- + { 0x0000a3bc, 0x00000000 },
- + { 0x0000a3c0, 0x00000000 },
- + { 0x0000a3c4, 0x00000000 },
- + { 0x0000a3cc, 0x20202020 },
- + { 0x0000a3d0, 0x20202020 },
- + { 0x0000a3d4, 0x20202020 },
- + { 0x0000a3e4, 0x00000000 },
- + { 0x0000a3e8, 0x18c43433 },
- + { 0x0000a3ec, 0x00f70081 },
- + { 0x0000a3f0, 0x01036a2f },
- + { 0x0000a3f4, 0x00000000 },
- + { 0x0000d270, 0x0d820820 },
- + { 0x0000d35c, 0x07ffffef },
- + { 0x0000d360, 0x0fffffe7 },
- + { 0x0000d364, 0x17ffffe5 },
- + { 0x0000d368, 0x1fffffe4 },
- + { 0x0000d36c, 0x37ffffe3 },
- + { 0x0000d370, 0x3fffffe3 },
- + { 0x0000d374, 0x57ffffe3 },
- + { 0x0000d378, 0x5fffffe2 },
- + { 0x0000d37c, 0x7fffffe2 },
- + { 0x0000d380, 0x7f3c7bba },
- + { 0x0000d384, 0xf3307ff0 },
- +};
- +
- +static const u_int32_t ar9271Common_normal_cck_fir_coeff_9271[][2] = {
- + { 0x0000a1f4, 0x00fffeff },
- + { 0x0000a1f8, 0x00f5f9ff },
- + { 0x0000a1fc, 0xb79f6427 },
- +};
- +
- +static const u_int32_t ar9271Common_japan_2484_cck_fir_coeff_9271[][2] = {
- + { 0x0000a1f4, 0x00000000 },
- + { 0x0000a1f8, 0xefff0301 },
- + { 0x0000a1fc, 0xca9228ee },
- +};
- +
- +static const u_int32_t ar9271Modes_9271_1_0_only[][6] = {
- + { 0x00009910, 0x30002311, 0x30002311, 0x30002311, 0x30002311, 0x30002311 },
- + { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
- +};
- +
- +static const u_int32_t ar9271Modes_9271_ANI_reg[][6] = {
- + { 0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2 },
- + { 0x0000985c, 0x3139605e, 0x3139605e, 0x3137605e, 0x3137605e, 0x3139605e },
- + { 0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
- + { 0x0000986c, 0x06903881, 0x06903881, 0x06903881, 0x06903881, 0x06903881 },
- + { 0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
- + { 0x0000a208, 0x803e68c8, 0x803e68c8, 0x803e68c8, 0x803e68c8, 0x803e68c8 },
- + { 0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d, 0xd00a800d },
- + { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
- +};
- +
- +static const u_int32_t ar9271Modes_normal_power_tx_gain_9271[][6] = {
- + { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- + { 0x0000a304, 0x00000000, 0x00000000, 0x00009200, 0x00009200, 0x00000000 },
- + { 0x0000a308, 0x00000000, 0x00000000, 0x00010208, 0x00010208, 0x00000000 },
- + { 0x0000a30c, 0x00000000, 0x00000000, 0x00019608, 0x00019608, 0x00000000 },
- + { 0x0000a310, 0x00000000, 0x00000000, 0x0001e610, 0x0001e610, 0x00000000 },
- + { 0x0000a314, 0x00000000, 0x00000000, 0x0002d6d0, 0x0002d6d0, 0x00000000 },
- + { 0x0000a318, 0x00000000, 0x00000000, 0x00039758, 0x00039758, 0x00000000 },
- + { 0x0000a31c, 0x00000000, 0x00000000, 0x0003b759, 0x0003b759, 0x00000000 },
- + { 0x0000a320, 0x00000000, 0x00000000, 0x0003d75a, 0x0003d75a, 0x00000000 },
- + { 0x0000a324, 0x00000000, 0x00000000, 0x0004175c, 0x0004175c, 0x00000000 },
- + { 0x0000a328, 0x00000000, 0x00000000, 0x0004575e, 0x0004575e, 0x00000000 },
- + { 0x0000a32c, 0x00000000, 0x00000000, 0x0004979f, 0x0004979f, 0x00000000 },
- + { 0x0000a330, 0x00000000, 0x00000000, 0x0004d7df, 0x0004d7df, 0x00000000 },
- + { 0x0000a334, 0x000368de, 0x000368de, 0x000368de, 0x000368de, 0x00000000 },
- + { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
- + { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
- + { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x00007838, 0x00000029, 0x00000029, 0x00000029, 0x00000029, 0x00000029 },
- + { 0x00007824, 0x00d8abff, 0x00d8abff, 0x00d8abff, 0x00d8abff, 0x00d8abff },
- + { 0x0000786c, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4 },
- + { 0x00007820, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04 },
- + { 0x0000a274, 0x0a21c652, 0x0a21c652, 0x0a218652, 0x0a218652, 0x0a22a652 },
- + { 0x0000a278, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd },
- + { 0x0000a27c, 0x050e83bd, 0x050e83bd, 0x050e83bd, 0x050e83bd, 0x050e83bd },
- + { 0x0000a394, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd },
- + { 0x0000a398, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd },
- + { 0x0000a3dc, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd },
- + { 0x0000a3e0, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd },
- +};
- +
- +static const u_int32_t ar9271Modes_high_power_tx_gain_9271[][6] = {
- + { 0x0000a300, 0x00000000, 0x00000000, 0x00010000, 0x00010000, 0x00000000 },
- + { 0x0000a304, 0x00000000, 0x00000000, 0x00016200, 0x00016200, 0x00000000 },
- + { 0x0000a308, 0x00000000, 0x00000000, 0x00018201, 0x00018201, 0x00000000 },
- + { 0x0000a30c, 0x00000000, 0x00000000, 0x0001b240, 0x0001b240, 0x00000000 },
- + { 0x0000a310, 0x00000000, 0x00000000, 0x0001d241, 0x0001d241, 0x00000000 },
- + { 0x0000a314, 0x00000000, 0x00000000, 0x0001f600, 0x0001f600, 0x00000000 },
- + { 0x0000a318, 0x00000000, 0x00000000, 0x00022800, 0x00022800, 0x00000000 },
- + { 0x0000a31c, 0x00000000, 0x00000000, 0x00026802, 0x00026802, 0x00000000 },
- + { 0x0000a320, 0x00000000, 0x00000000, 0x0002b805, 0x0002b805, 0x00000000 },
- + { 0x0000a324, 0x00000000, 0x00000000, 0x0002ea41, 0x0002ea41, 0x00000000 },
- + { 0x0000a328, 0x00000000, 0x00000000, 0x00038b00, 0x00038b00, 0x00000000 },
- + { 0x0000a32c, 0x00000000, 0x00000000, 0x0003ab40, 0x0003ab40, 0x00000000 },
- + { 0x0000a330, 0x00000000, 0x00000000, 0x0003cd80, 0x0003cd80, 0x00000000 },
- + { 0x0000a334, 0x000368de, 0x000368de, 0x000368de, 0x000368de, 0x00000000 },
- + { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
- + { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
- + { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- + { 0x00007838, 0x0000002b, 0x0000002b, 0x0000002b, 0x0000002b, 0x0000002b },
- + { 0x00007824, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff },
- + { 0x0000786c, 0x08609eb6, 0x08609eb6, 0x08609eba, 0x08609eba, 0x08609eb6 },
- + { 0x00007820, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00 },
- + { 0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a212652, 0x0a212652, 0x0a22a652 },
- + { 0x0000a278, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
- + { 0x0000a27c, 0x05018063, 0x05038063, 0x05018063, 0x05018063, 0x05018063 },
- + { 0x0000a394, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63 },
- + { 0x0000a398, 0x00000063, 0x00000063, 0x00000063, 0x00000063, 0x00000063 },
- + { 0x0000a3dc, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63 },
- + { 0x0000a3e0, 0x00000063, 0x00000063, 0x00000063, 0x00000063, 0x00000063 },
- +};
- +
- +#endif /* INITVALS_9002_10_H */
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar9002_mac.c
- @@ -0,0 +1,462 @@
- +/*
- + * Copyright (c) 2008-2009 Atheros Communications Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +
- +#include "hw.h"
- +
- +static void ar9002_hw_rx_enable(struct ath_hw *ah)
- +{
- + REG_WRITE(ah, AR_CR, AR_CR_RXE);
- +}
- +
- +static void ar9002_hw_set_desc_link(void *ds, u32 ds_link)
- +{
- + ((struct ath_desc*) ds)->ds_link = ds_link;
- +}
- +
- +static void ar9002_hw_get_desc_link(void *ds, u32 **ds_link)
- +{
- + *ds_link = &((struct ath_desc *)ds)->ds_link;
- +}
- +
- +static bool ar9002_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked)
- +{
- + u32 isr = 0;
- + u32 mask2 = 0;
- + struct ath9k_hw_capabilities *pCap = &ah->caps;
- + u32 sync_cause = 0;
- + bool fatal_int = false;
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + if (!AR_SREV_9100(ah)) {
- + if (REG_READ(ah, AR_INTR_ASYNC_CAUSE) & AR_INTR_MAC_IRQ) {
- + if ((REG_READ(ah, AR_RTC_STATUS) & AR_RTC_STATUS_M)
- + == AR_RTC_STATUS_ON) {
- + isr = REG_READ(ah, AR_ISR);
- + }
- + }
- +
- + sync_cause = REG_READ(ah, AR_INTR_SYNC_CAUSE) &
- + AR_INTR_SYNC_DEFAULT;
- +
- + *masked = 0;
- +
- + if (!isr && !sync_cause)
- + return false;
- + } else {
- + *masked = 0;
- + isr = REG_READ(ah, AR_ISR);
- + }
- +
- + if (isr) {
- + if (isr & AR_ISR_BCNMISC) {
- + u32 isr2;
- + isr2 = REG_READ(ah, AR_ISR_S2);
- + if (isr2 & AR_ISR_S2_TIM)
- + mask2 |= ATH9K_INT_TIM;
- + if (isr2 & AR_ISR_S2_DTIM)
- + mask2 |= ATH9K_INT_DTIM;
- + if (isr2 & AR_ISR_S2_DTIMSYNC)
- + mask2 |= ATH9K_INT_DTIMSYNC;
- + if (isr2 & (AR_ISR_S2_CABEND))
- + mask2 |= ATH9K_INT_CABEND;
- + if (isr2 & AR_ISR_S2_GTT)
- + mask2 |= ATH9K_INT_GTT;
- + if (isr2 & AR_ISR_S2_CST)
- + mask2 |= ATH9K_INT_CST;
- + if (isr2 & AR_ISR_S2_TSFOOR)
- + mask2 |= ATH9K_INT_TSFOOR;
- + }
- +
- + isr = REG_READ(ah, AR_ISR_RAC);
- + if (isr == 0xffffffff) {
- + *masked = 0;
- + return false;
- + }
- +
- + *masked = isr & ATH9K_INT_COMMON;
- +
- + if (ah->config.rx_intr_mitigation) {
- + if (isr & (AR_ISR_RXMINTR | AR_ISR_RXINTM))
- + *masked |= ATH9K_INT_RX;
- + }
- +
- + if (isr & (AR_ISR_RXOK | AR_ISR_RXERR))
- + *masked |= ATH9K_INT_RX;
- + if (isr &
- + (AR_ISR_TXOK | AR_ISR_TXDESC | AR_ISR_TXERR |
- + AR_ISR_TXEOL)) {
- + u32 s0_s, s1_s;
- +
- + *masked |= ATH9K_INT_TX;
- +
- + s0_s = REG_READ(ah, AR_ISR_S0_S);
- + ah->intr_txqs |= MS(s0_s, AR_ISR_S0_QCU_TXOK);
- + ah->intr_txqs |= MS(s0_s, AR_ISR_S0_QCU_TXDESC);
- +
- + s1_s = REG_READ(ah, AR_ISR_S1_S);
- + ah->intr_txqs |= MS(s1_s, AR_ISR_S1_QCU_TXERR);
- + ah->intr_txqs |= MS(s1_s, AR_ISR_S1_QCU_TXEOL);
- + }
- +
- + if (isr & AR_ISR_RXORN) {
- + ath_print(common, ATH_DBG_INTERRUPT,
- + "receive FIFO overrun interrupt\n");
- + }
- +
- + if (!AR_SREV_9100(ah)) {
- + if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
- + u32 isr5 = REG_READ(ah, AR_ISR_S5_S);
- + if (isr5 & AR_ISR_S5_TIM_TIMER)
- + *masked |= ATH9K_INT_TIM_TIMER;
- + }
- + }
- +
- + *masked |= mask2;
- + }
- +
- + if (AR_SREV_9100(ah))
- + return true;
- +
- + if (isr & AR_ISR_GENTMR) {
- + u32 s5_s;
- +
- + s5_s = REG_READ(ah, AR_ISR_S5_S);
- + if (isr & AR_ISR_GENTMR) {
- + ah->intr_gen_timer_trigger =
- + MS(s5_s, AR_ISR_S5_GENTIMER_TRIG);
- +
- + ah->intr_gen_timer_thresh =
- + MS(s5_s, AR_ISR_S5_GENTIMER_THRESH);
- +
- + if (ah->intr_gen_timer_trigger)
- + *masked |= ATH9K_INT_GENTIMER;
- +
- + }
- + }
- +
- + if (sync_cause) {
- + fatal_int =
- + (sync_cause &
- + (AR_INTR_SYNC_HOST1_FATAL | AR_INTR_SYNC_HOST1_PERR))
- + ? true : false;
- +
- + if (fatal_int) {
- + if (sync_cause & AR_INTR_SYNC_HOST1_FATAL) {
- + ath_print(common, ATH_DBG_ANY,
- + "received PCI FATAL interrupt\n");
- + }
- + if (sync_cause & AR_INTR_SYNC_HOST1_PERR) {
- + ath_print(common, ATH_DBG_ANY,
- + "received PCI PERR interrupt\n");
- + }
- + *masked |= ATH9K_INT_FATAL;
- + }
- + if (sync_cause & AR_INTR_SYNC_RADM_CPL_TIMEOUT) {
- + ath_print(common, ATH_DBG_INTERRUPT,
- + "AR_INTR_SYNC_RADM_CPL_TIMEOUT\n");
- + REG_WRITE(ah, AR_RC, AR_RC_HOSTIF);
- + REG_WRITE(ah, AR_RC, 0);
- + *masked |= ATH9K_INT_FATAL;
- + }
- + if (sync_cause & AR_INTR_SYNC_LOCAL_TIMEOUT) {
- + ath_print(common, ATH_DBG_INTERRUPT,
- + "AR_INTR_SYNC_LOCAL_TIMEOUT\n");
- + }
- +
- + REG_WRITE(ah, AR_INTR_SYNC_CAUSE_CLR, sync_cause);
- + (void) REG_READ(ah, AR_INTR_SYNC_CAUSE_CLR);
- + }
- +
- + return true;
- +}
- +
- +static void ar9002_hw_fill_txdesc(struct ath_hw *ah, void *ds, u32 seglen,
- + bool is_firstseg, bool is_lastseg,
- + const void *ds0, dma_addr_t buf_addr,
- + unsigned int qcu)
- +{
- + struct ar5416_desc *ads = AR5416DESC(ds);
- +
- + ads->ds_data = buf_addr;
- +
- + if (is_firstseg) {
- + ads->ds_ctl1 |= seglen | (is_lastseg ? 0 : AR_TxMore);
- + } else if (is_lastseg) {
- + ads->ds_ctl0 = 0;
- + ads->ds_ctl1 = seglen;
- + ads->ds_ctl2 = AR5416DESC_CONST(ds0)->ds_ctl2;
- + ads->ds_ctl3 = AR5416DESC_CONST(ds0)->ds_ctl3;
- + } else {
- + ads->ds_ctl0 = 0;
- + ads->ds_ctl1 = seglen | AR_TxMore;
- + ads->ds_ctl2 = 0;
- + ads->ds_ctl3 = 0;
- + }
- + ads->ds_txstatus0 = ads->ds_txstatus1 = 0;
- + ads->ds_txstatus2 = ads->ds_txstatus3 = 0;
- + ads->ds_txstatus4 = ads->ds_txstatus5 = 0;
- + ads->ds_txstatus6 = ads->ds_txstatus7 = 0;
- + ads->ds_txstatus8 = ads->ds_txstatus9 = 0;
- +}
- +
- +static int ar9002_hw_proc_txdesc(struct ath_hw *ah, void *ds,
- + struct ath_tx_status *ts)
- +{
- + struct ar5416_desc *ads = AR5416DESC(ds);
- +
- + if ((ads->ds_txstatus9 & AR_TxDone) == 0)
- + return -EINPROGRESS;
- +
- + ts->ts_seqnum = MS(ads->ds_txstatus9, AR_SeqNum);
- + ts->ts_tstamp = ads->AR_SendTimestamp;
- + ts->ts_status = 0;
- + ts->ts_flags = 0;
- +
- + if (ads->ds_txstatus1 & AR_FrmXmitOK)
- + ts->ts_status |= ATH9K_TX_ACKED;
- + if (ads->ds_txstatus1 & AR_ExcessiveRetries)
- + ts->ts_status |= ATH9K_TXERR_XRETRY;
- + if (ads->ds_txstatus1 & AR_Filtered)
- + ts->ts_status |= ATH9K_TXERR_FILT;
- + if (ads->ds_txstatus1 & AR_FIFOUnderrun) {
- + ts->ts_status |= ATH9K_TXERR_FIFO;
- + ath9k_hw_updatetxtriglevel(ah, true);
- + }
- + if (ads->ds_txstatus9 & AR_TxOpExceeded)
- + ts->ts_status |= ATH9K_TXERR_XTXOP;
- + if (ads->ds_txstatus1 & AR_TxTimerExpired)
- + ts->ts_status |= ATH9K_TXERR_TIMER_EXPIRED;
- +
- + if (ads->ds_txstatus1 & AR_DescCfgErr)
- + ts->ts_flags |= ATH9K_TX_DESC_CFG_ERR;
- + if (ads->ds_txstatus1 & AR_TxDataUnderrun) {
- + ts->ts_flags |= ATH9K_TX_DATA_UNDERRUN;
- + ath9k_hw_updatetxtriglevel(ah, true);
- + }
- + if (ads->ds_txstatus1 & AR_TxDelimUnderrun) {
- + ts->ts_flags |= ATH9K_TX_DELIM_UNDERRUN;
- + ath9k_hw_updatetxtriglevel(ah, true);
- + }
- + if (ads->ds_txstatus0 & AR_TxBaStatus) {
- + ts->ts_flags |= ATH9K_TX_BA;
- + ts->ba_low = ads->AR_BaBitmapLow;
- + ts->ba_high = ads->AR_BaBitmapHigh;
- + }
- +
- + ts->ts_rateindex = MS(ads->ds_txstatus9, AR_FinalTxIdx);
- + switch (ts->ts_rateindex) {
- + case 0:
- + ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate0);
- + break;
- + case 1:
- + ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate1);
- + break;
- + case 2:
- + ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate2);
- + break;
- + case 3:
- + ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate3);
- + break;
- + }
- +
- + ts->ts_rssi = MS(ads->ds_txstatus5, AR_TxRSSICombined);
- + ts->ts_rssi_ctl0 = MS(ads->ds_txstatus0, AR_TxRSSIAnt00);
- + ts->ts_rssi_ctl1 = MS(ads->ds_txstatus0, AR_TxRSSIAnt01);
- + ts->ts_rssi_ctl2 = MS(ads->ds_txstatus0, AR_TxRSSIAnt02);
- + ts->ts_rssi_ext0 = MS(ads->ds_txstatus5, AR_TxRSSIAnt10);
- + ts->ts_rssi_ext1 = MS(ads->ds_txstatus5, AR_TxRSSIAnt11);
- + ts->ts_rssi_ext2 = MS(ads->ds_txstatus5, AR_TxRSSIAnt12);
- + ts->evm0 = ads->AR_TxEVM0;
- + ts->evm1 = ads->AR_TxEVM1;
- + ts->evm2 = ads->AR_TxEVM2;
- + ts->ts_shortretry = MS(ads->ds_txstatus1, AR_RTSFailCnt);
- + ts->ts_longretry = MS(ads->ds_txstatus1, AR_DataFailCnt);
- + ts->ts_virtcol = MS(ads->ds_txstatus1, AR_VirtRetryCnt);
- + ts->ts_antenna = 0;
- +
- + return 0;
- +}
- +
- +static void ar9002_hw_set11n_txdesc(struct ath_hw *ah, void *ds,
- + u32 pktLen, enum ath9k_pkt_type type,
- + u32 txPower, u32 keyIx,
- + enum ath9k_key_type keyType, u32 flags)
- +{
- + struct ar5416_desc *ads = AR5416DESC(ds);
- +
- + txPower += ah->txpower_indexoffset;
- + if (txPower > 63)
- + txPower = 63;
- +
- + ads->ds_ctl0 = (pktLen & AR_FrameLen)
- + | (flags & ATH9K_TXDESC_VMF ? AR_VirtMoreFrag : 0)
- + | SM(txPower, AR_XmitPower)
- + | (flags & ATH9K_TXDESC_VEOL ? AR_VEOL : 0)
- + | (flags & ATH9K_TXDESC_CLRDMASK ? AR_ClrDestMask : 0)
- + | (flags & ATH9K_TXDESC_INTREQ ? AR_TxIntrReq : 0)
- + | (keyIx != ATH9K_TXKEYIX_INVALID ? AR_DestIdxValid : 0);
- +
- + ads->ds_ctl1 =
- + (keyIx != ATH9K_TXKEYIX_INVALID ? SM(keyIx, AR_DestIdx) : 0)
- + | SM(type, AR_FrameType)
- + | (flags & ATH9K_TXDESC_NOACK ? AR_NoAck : 0)
- + | (flags & ATH9K_TXDESC_EXT_ONLY ? AR_ExtOnly : 0)
- + | (flags & ATH9K_TXDESC_EXT_AND_CTL ? AR_ExtAndCtl : 0);
- +
- + ads->ds_ctl6 = SM(keyType, AR_EncrType);
- +
- + if (AR_SREV_9285(ah) || AR_SREV_9271(ah)) {
- + ads->ds_ctl8 = 0;
- + ads->ds_ctl9 = 0;
- + ads->ds_ctl10 = 0;
- + ads->ds_ctl11 = 0;
- + }
- +}
- +
- +static void ar9002_hw_set11n_ratescenario(struct ath_hw *ah, void *ds,
- + void *lastds,
- + u32 durUpdateEn, u32 rtsctsRate,
- + u32 rtsctsDuration,
- + struct ath9k_11n_rate_series series[],
- + u32 nseries, u32 flags)
- +{
- + struct ar5416_desc *ads = AR5416DESC(ds);
- + struct ar5416_desc *last_ads = AR5416DESC(lastds);
- + u32 ds_ctl0;
- +
- + if (flags & (ATH9K_TXDESC_RTSENA | ATH9K_TXDESC_CTSENA)) {
- + ds_ctl0 = ads->ds_ctl0;
- +
- + if (flags & ATH9K_TXDESC_RTSENA) {
- + ds_ctl0 &= ~AR_CTSEnable;
- + ds_ctl0 |= AR_RTSEnable;
- + } else {
- + ds_ctl0 &= ~AR_RTSEnable;
- + ds_ctl0 |= AR_CTSEnable;
- + }
- +
- + ads->ds_ctl0 = ds_ctl0;
- + } else {
- + ads->ds_ctl0 =
- + (ads->ds_ctl0 & ~(AR_RTSEnable | AR_CTSEnable));
- + }
- +
- + ads->ds_ctl2 = set11nTries(series, 0)
- + | set11nTries(series, 1)
- + | set11nTries(series, 2)
- + | set11nTries(series, 3)
- + | (durUpdateEn ? AR_DurUpdateEna : 0)
- + | SM(0, AR_BurstDur);
- +
- + ads->ds_ctl3 = set11nRate(series, 0)
- + | set11nRate(series, 1)
- + | set11nRate(series, 2)
- + | set11nRate(series, 3);
- +
- + ads->ds_ctl4 = set11nPktDurRTSCTS(series, 0)
- + | set11nPktDurRTSCTS(series, 1);
- +
- + ads->ds_ctl5 = set11nPktDurRTSCTS(series, 2)
- + | set11nPktDurRTSCTS(series, 3);
- +
- + ads->ds_ctl7 = set11nRateFlags(series, 0)
- + | set11nRateFlags(series, 1)
- + | set11nRateFlags(series, 2)
- + | set11nRateFlags(series, 3)
- + | SM(rtsctsRate, AR_RTSCTSRate);
- + last_ads->ds_ctl2 = ads->ds_ctl2;
- + last_ads->ds_ctl3 = ads->ds_ctl3;
- +}
- +
- +static void ar9002_hw_set11n_aggr_first(struct ath_hw *ah, void *ds,
- + u32 aggrLen)
- +{
- + struct ar5416_desc *ads = AR5416DESC(ds);
- +
- + ads->ds_ctl1 |= (AR_IsAggr | AR_MoreAggr);
- + ads->ds_ctl6 &= ~AR_AggrLen;
- + ads->ds_ctl6 |= SM(aggrLen, AR_AggrLen);
- +}
- +
- +static void ar9002_hw_set11n_aggr_middle(struct ath_hw *ah, void *ds,
- + u32 numDelims)
- +{
- + struct ar5416_desc *ads = AR5416DESC(ds);
- + unsigned int ctl6;
- +
- + ads->ds_ctl1 |= (AR_IsAggr | AR_MoreAggr);
- +
- + ctl6 = ads->ds_ctl6;
- + ctl6 &= ~AR_PadDelim;
- + ctl6 |= SM(numDelims, AR_PadDelim);
- + ads->ds_ctl6 = ctl6;
- +}
- +
- +static void ar9002_hw_set11n_aggr_last(struct ath_hw *ah, void *ds)
- +{
- + struct ar5416_desc *ads = AR5416DESC(ds);
- +
- + ads->ds_ctl1 |= AR_IsAggr;
- + ads->ds_ctl1 &= ~AR_MoreAggr;
- + ads->ds_ctl6 &= ~AR_PadDelim;
- +}
- +
- +static void ar9002_hw_clr11n_aggr(struct ath_hw *ah, void *ds)
- +{
- + struct ar5416_desc *ads = AR5416DESC(ds);
- +
- + ads->ds_ctl1 &= (~AR_IsAggr & ~AR_MoreAggr);
- +}
- +
- +static void ar9002_hw_set11n_burstduration(struct ath_hw *ah, void *ds,
- + u32 burstDuration)
- +{
- + struct ar5416_desc *ads = AR5416DESC(ds);
- +
- + ads->ds_ctl2 &= ~AR_BurstDur;
- + ads->ds_ctl2 |= SM(burstDuration, AR_BurstDur);
- +}
- +
- +static void ar9002_hw_set11n_virtualmorefrag(struct ath_hw *ah, void *ds,
- + u32 vmf)
- +{
- + struct ar5416_desc *ads = AR5416DESC(ds);
- +
- + if (vmf)
- + ads->ds_ctl0 |= AR_VirtMoreFrag;
- + else
- + ads->ds_ctl0 &= ~AR_VirtMoreFrag;
- +}
- +
- +void ar9002_hw_attach_mac_ops(struct ath_hw *ah)
- +{
- + struct ath_hw_ops *ops = ath9k_hw_ops(ah);
- +
- + ops->rx_enable = ar9002_hw_rx_enable;
- + ops->set_desc_link = ar9002_hw_set_desc_link;
- + ops->get_desc_link = ar9002_hw_get_desc_link;
- + ops->get_isr = ar9002_hw_get_isr;
- + ops->fill_txdesc = ar9002_hw_fill_txdesc;
- + ops->proc_txdesc = ar9002_hw_proc_txdesc;
- + ops->set11n_txdesc = ar9002_hw_set11n_txdesc;
- + ops->set11n_ratescenario = ar9002_hw_set11n_ratescenario;
- + ops->set11n_aggr_first = ar9002_hw_set11n_aggr_first;
- + ops->set11n_aggr_middle = ar9002_hw_set11n_aggr_middle;
- + ops->set11n_aggr_last = ar9002_hw_set11n_aggr_last;
- + ops->clr11n_aggr = ar9002_hw_clr11n_aggr;
- + ops->set11n_burstduration = ar9002_hw_set11n_burstduration;
- + ops->set11n_virtualmorefrag = ar9002_hw_set11n_virtualmorefrag;
- +}
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
- @@ -0,0 +1,534 @@
- +/*
- + * Copyright (c) 2008-2010 Atheros Communications Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +
- +/**
- + * DOC: Programming Atheros 802.11n analog front end radios
- + *
- + * AR5416 MAC based PCI devices and AR518 MAC based PCI-Express
- + * devices have either an external AR2133 analog front end radio for single
- + * band 2.4 GHz communication or an AR5133 analog front end radio for dual
- + * band 2.4 GHz / 5 GHz communication.
- + *
- + * All devices after the AR5416 and AR5418 family starting with the AR9280
- + * have their analog front radios, MAC/BB and host PCIe/USB interface embedded
- + * into a single-chip and require less programming.
- + *
- + * The following single-chips exist with a respective embedded radio:
- + *
- + * AR9280 - 11n dual-band 2x2 MIMO for PCIe
- + * AR9281 - 11n single-band 1x2 MIMO for PCIe
- + * AR9285 - 11n single-band 1x1 for PCIe
- + * AR9287 - 11n single-band 2x2 MIMO for PCIe
- + *
- + * AR9220 - 11n dual-band 2x2 MIMO for PCI
- + * AR9223 - 11n single-band 2x2 MIMO for PCI
- + *
- + * AR9287 - 11n single-band 1x1 MIMO for USB
- + */
- +
- +#include "hw.h"
- +#include "ar9002_phy.h"
- +
- +/**
- + * ar9002_hw_set_channel - set channel on single-chip device
- + * @ah: atheros hardware structure
- + * @chan:
- + *
- + * This is the function to change channel on single-chip devices, that is
- + * all devices after ar9280.
- + *
- + * This function takes the channel value in MHz and sets
- + * hardware channel value. Assumes writes have been enabled to analog bus.
- + *
- + * Actual Expression,
- + *
- + * For 2GHz channel,
- + * Channel Frequency = (3/4) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^17)
- + * (freq_ref = 40MHz)
- + *
- + * For 5GHz channel,
- + * Channel Frequency = (3/2) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^10)
- + * (freq_ref = 40MHz/(24>>amodeRefSel))
- + */
- +static int ar9002_hw_set_channel(struct ath_hw *ah, struct ath9k_channel *chan)
- +{
- + u16 bMode, fracMode, aModeRefSel = 0;
- + u32 freq, ndiv, channelSel = 0, channelFrac = 0, reg32 = 0;
- + struct chan_centers centers;
- + u32 refDivA = 24;
- +
- + ath9k_hw_get_channel_centers(ah, chan, ¢ers);
- + freq = centers.synth_center;
- +
- + reg32 = REG_READ(ah, AR_PHY_SYNTH_CONTROL);
- + reg32 &= 0xc0000000;
- +
- + if (freq < 4800) { /* 2 GHz, fractional mode */
- + u32 txctl;
- + int regWrites = 0;
- +
- + bMode = 1;
- + fracMode = 1;
- + aModeRefSel = 0;
- + channelSel = CHANSEL_2G(freq);
- +
- + if (AR_SREV_9287_11_OR_LATER(ah)) {
- + if (freq == 2484) {
- + /* Enable channel spreading for channel 14 */
- + REG_WRITE_ARRAY(&ah->iniCckfirJapan2484,
- + 1, regWrites);
- + } else {
- + REG_WRITE_ARRAY(&ah->iniCckfirNormal,
- + 1, regWrites);
- + }
- + } else {
- + txctl = REG_READ(ah, AR_PHY_CCK_TX_CTRL);
- + if (freq == 2484) {
- + /* Enable channel spreading for channel 14 */
- + REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
- + txctl | AR_PHY_CCK_TX_CTRL_JAPAN);
- + } else {
- + REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
- + txctl &~ AR_PHY_CCK_TX_CTRL_JAPAN);
- + }
- + }
- + } else {
- + bMode = 0;
- + fracMode = 0;
- +
- + switch(ah->eep_ops->get_eeprom(ah, EEP_FRAC_N_5G)) {
- + case 0:
- + if ((freq % 20) == 0) {
- + aModeRefSel = 3;
- + } else if ((freq % 10) == 0) {
- + aModeRefSel = 2;
- + }
- + if (aModeRefSel)
- + break;
- + case 1:
- + default:
- + aModeRefSel = 0;
- + /*
- + * Enable 2G (fractional) mode for channels
- + * which are 5MHz spaced.
- + */
- + fracMode = 1;
- + refDivA = 1;
- + channelSel = CHANSEL_5G(freq);
- +
- + /* RefDivA setting */
- + REG_RMW_FIELD(ah, AR_AN_SYNTH9,
- + AR_AN_SYNTH9_REFDIVA, refDivA);
- +
- + }
- +
- + if (!fracMode) {
- + ndiv = (freq * (refDivA >> aModeRefSel)) / 60;
- + channelSel = ndiv & 0x1ff;
- + channelFrac = (ndiv & 0xfffffe00) * 2;
- + channelSel = (channelSel << 17) | channelFrac;
- + }
- + }
- +
- + reg32 = reg32 |
- + (bMode << 29) |
- + (fracMode << 28) | (aModeRefSel << 26) | (channelSel);
- +
- + REG_WRITE(ah, AR_PHY_SYNTH_CONTROL, reg32);
- +
- + ah->curchan = chan;
- + ah->curchan_rad_index = -1;
- +
- + return 0;
- +}
- +
- +/**
- + * ar9002_hw_spur_mitigate - convert baseband spur frequency
- + * @ah: atheros hardware structure
- + * @chan:
- + *
- + * For single-chip solutions. Converts to baseband spur frequency given the
- + * input channel frequency and compute register settings below.
- + */
- +static void ar9002_hw_spur_mitigate(struct ath_hw *ah, struct ath9k_channel *chan)
- +{
- + int bb_spur = AR_NO_SPUR;
- + int freq;
- + int bin, cur_bin;
- + int bb_spur_off, spur_subchannel_sd;
- + int spur_freq_sd;
- + int spur_delta_phase;
- + int denominator;
- + int upper, lower, cur_vit_mask;
- + int tmp, newVal;
- + int i;
- + int pilot_mask_reg[4] = { AR_PHY_TIMING7, AR_PHY_TIMING8,
- + AR_PHY_PILOT_MASK_01_30, AR_PHY_PILOT_MASK_31_60
- + };
- + int chan_mask_reg[4] = { AR_PHY_TIMING9, AR_PHY_TIMING10,
- + AR_PHY_CHANNEL_MASK_01_30, AR_PHY_CHANNEL_MASK_31_60
- + };
- + int inc[4] = { 0, 100, 0, 0 };
- + struct chan_centers centers;
- +
- + int8_t mask_m[123];
- + int8_t mask_p[123];
- + int8_t mask_amt;
- + int tmp_mask;
- + int cur_bb_spur;
- + bool is2GHz = IS_CHAN_2GHZ(chan);
- +
- + memset(&mask_m, 0, sizeof(int8_t) * 123);
- + memset(&mask_p, 0, sizeof(int8_t) * 123);
- +
- + ath9k_hw_get_channel_centers(ah, chan, ¢ers);
- + freq = centers.synth_center;
- +
- + ah->config.spurmode = SPUR_ENABLE_EEPROM;
- + for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
- + cur_bb_spur = ah->eep_ops->get_spur_channel(ah, i, is2GHz);
- +
- + if (is2GHz)
- + cur_bb_spur = (cur_bb_spur / 10) + AR_BASE_FREQ_2GHZ;
- + else
- + cur_bb_spur = (cur_bb_spur / 10) + AR_BASE_FREQ_5GHZ;
- +
- + if (AR_NO_SPUR == cur_bb_spur)
- + break;
- + cur_bb_spur = cur_bb_spur - freq;
- +
- + if (IS_CHAN_HT40(chan)) {
- + if ((cur_bb_spur > -AR_SPUR_FEEQ_BOUND_HT40) &&
- + (cur_bb_spur < AR_SPUR_FEEQ_BOUND_HT40)) {
- + bb_spur = cur_bb_spur;
- + break;
- + }
- + } else if ((cur_bb_spur > -AR_SPUR_FEEQ_BOUND_HT20) &&
- + (cur_bb_spur < AR_SPUR_FEEQ_BOUND_HT20)) {
- + bb_spur = cur_bb_spur;
- + break;
- + }
- + }
- +
- + if (AR_NO_SPUR == bb_spur) {
- + REG_CLR_BIT(ah, AR_PHY_FORCE_CLKEN_CCK,
- + AR_PHY_FORCE_CLKEN_CCK_MRC_MUX);
- + return;
- + } else {
- + REG_CLR_BIT(ah, AR_PHY_FORCE_CLKEN_CCK,
- + AR_PHY_FORCE_CLKEN_CCK_MRC_MUX);
- + }
- +
- + bin = bb_spur * 320;
- +
- + tmp = REG_READ(ah, AR_PHY_TIMING_CTRL4(0));
- +
- + newVal = tmp | (AR_PHY_TIMING_CTRL4_ENABLE_SPUR_RSSI |
- + AR_PHY_TIMING_CTRL4_ENABLE_SPUR_FILTER |
- + AR_PHY_TIMING_CTRL4_ENABLE_CHAN_MASK |
- + AR_PHY_TIMING_CTRL4_ENABLE_PILOT_MASK);
- + REG_WRITE(ah, AR_PHY_TIMING_CTRL4(0), newVal);
- +
- + newVal = (AR_PHY_SPUR_REG_MASK_RATE_CNTL |
- + AR_PHY_SPUR_REG_ENABLE_MASK_PPM |
- + AR_PHY_SPUR_REG_MASK_RATE_SELECT |
- + AR_PHY_SPUR_REG_ENABLE_VIT_SPUR_RSSI |
- + SM(SPUR_RSSI_THRESH, AR_PHY_SPUR_REG_SPUR_RSSI_THRESH));
- + REG_WRITE(ah, AR_PHY_SPUR_REG, newVal);
- +
- + if (IS_CHAN_HT40(chan)) {
- + if (bb_spur < 0) {
- + spur_subchannel_sd = 1;
- + bb_spur_off = bb_spur + 10;
- + } else {
- + spur_subchannel_sd = 0;
- + bb_spur_off = bb_spur - 10;
- + }
- + } else {
- + spur_subchannel_sd = 0;
- + bb_spur_off = bb_spur;
- + }
- +
- + if (IS_CHAN_HT40(chan))
- + spur_delta_phase =
- + ((bb_spur * 262144) /
- + 10) & AR_PHY_TIMING11_SPUR_DELTA_PHASE;
- + else
- + spur_delta_phase =
- + ((bb_spur * 524288) /
- + 10) & AR_PHY_TIMING11_SPUR_DELTA_PHASE;
- +
- + denominator = IS_CHAN_2GHZ(chan) ? 44 : 40;
- + spur_freq_sd = ((bb_spur_off * 2048) / denominator) & 0x3ff;
- +
- + newVal = (AR_PHY_TIMING11_USE_SPUR_IN_AGC |
- + SM(spur_freq_sd, AR_PHY_TIMING11_SPUR_FREQ_SD) |
- + SM(spur_delta_phase, AR_PHY_TIMING11_SPUR_DELTA_PHASE));
- + REG_WRITE(ah, AR_PHY_TIMING11, newVal);
- +
- + newVal = spur_subchannel_sd << AR_PHY_SFCORR_SPUR_SUBCHNL_SD_S;
- + REG_WRITE(ah, AR_PHY_SFCORR_EXT, newVal);
- +
- + cur_bin = -6000;
- + upper = bin + 100;
- + lower = bin - 100;
- +
- + for (i = 0; i < 4; i++) {
- + int pilot_mask = 0;
- + int chan_mask = 0;
- + int bp = 0;
- + for (bp = 0; bp < 30; bp++) {
- + if ((cur_bin > lower) && (cur_bin < upper)) {
- + pilot_mask = pilot_mask | 0x1 << bp;
- + chan_mask = chan_mask | 0x1 << bp;
- + }
- + cur_bin += 100;
- + }
- + cur_bin += inc[i];
- + REG_WRITE(ah, pilot_mask_reg[i], pilot_mask);
- + REG_WRITE(ah, chan_mask_reg[i], chan_mask);
- + }
- +
- + cur_vit_mask = 6100;
- + upper = bin + 120;
- + lower = bin - 120;
- +
- + for (i = 0; i < 123; i++) {
- + if ((cur_vit_mask > lower) && (cur_vit_mask < upper)) {
- +
- + /* workaround for gcc bug #37014 */
- + volatile int tmp_v = abs(cur_vit_mask - bin);
- +
- + if (tmp_v < 75)
- + mask_amt = 1;
- + else
- + mask_amt = 0;
- + if (cur_vit_mask < 0)
- + mask_m[abs(cur_vit_mask / 100)] = mask_amt;
- + else
- + mask_p[cur_vit_mask / 100] = mask_amt;
- + }
- + cur_vit_mask -= 100;
- + }
- +
- + tmp_mask = (mask_m[46] << 30) | (mask_m[47] << 28)
- + | (mask_m[48] << 26) | (mask_m[49] << 24)
- + | (mask_m[50] << 22) | (mask_m[51] << 20)
- + | (mask_m[52] << 18) | (mask_m[53] << 16)
- + | (mask_m[54] << 14) | (mask_m[55] << 12)
- + | (mask_m[56] << 10) | (mask_m[57] << 8)
- + | (mask_m[58] << 6) | (mask_m[59] << 4)
- + | (mask_m[60] << 2) | (mask_m[61] << 0);
- + REG_WRITE(ah, AR_PHY_BIN_MASK_1, tmp_mask);
- + REG_WRITE(ah, AR_PHY_VIT_MASK2_M_46_61, tmp_mask);
- +
- + tmp_mask = (mask_m[31] << 28)
- + | (mask_m[32] << 26) | (mask_m[33] << 24)
- + | (mask_m[34] << 22) | (mask_m[35] << 20)
- + | (mask_m[36] << 18) | (mask_m[37] << 16)
- + | (mask_m[48] << 14) | (mask_m[39] << 12)
- + | (mask_m[40] << 10) | (mask_m[41] << 8)
- + | (mask_m[42] << 6) | (mask_m[43] << 4)
- + | (mask_m[44] << 2) | (mask_m[45] << 0);
- + REG_WRITE(ah, AR_PHY_BIN_MASK_2, tmp_mask);
- + REG_WRITE(ah, AR_PHY_MASK2_M_31_45, tmp_mask);
- +
- + tmp_mask = (mask_m[16] << 30) | (mask_m[16] << 28)
- + | (mask_m[18] << 26) | (mask_m[18] << 24)
- + | (mask_m[20] << 22) | (mask_m[20] << 20)
- + | (mask_m[22] << 18) | (mask_m[22] << 16)
- + | (mask_m[24] << 14) | (mask_m[24] << 12)
- + | (mask_m[25] << 10) | (mask_m[26] << 8)
- + | (mask_m[27] << 6) | (mask_m[28] << 4)
- + | (mask_m[29] << 2) | (mask_m[30] << 0);
- + REG_WRITE(ah, AR_PHY_BIN_MASK_3, tmp_mask);
- + REG_WRITE(ah, AR_PHY_MASK2_M_16_30, tmp_mask);
- +
- + tmp_mask = (mask_m[0] << 30) | (mask_m[1] << 28)
- + | (mask_m[2] << 26) | (mask_m[3] << 24)
- + | (mask_m[4] << 22) | (mask_m[5] << 20)
- + | (mask_m[6] << 18) | (mask_m[7] << 16)
- + | (mask_m[8] << 14) | (mask_m[9] << 12)
- + | (mask_m[10] << 10) | (mask_m[11] << 8)
- + | (mask_m[12] << 6) | (mask_m[13] << 4)
- + | (mask_m[14] << 2) | (mask_m[15] << 0);
- + REG_WRITE(ah, AR_PHY_MASK_CTL, tmp_mask);
- + REG_WRITE(ah, AR_PHY_MASK2_M_00_15, tmp_mask);
- +
- + tmp_mask = (mask_p[15] << 28)
- + | (mask_p[14] << 26) | (mask_p[13] << 24)
- + | (mask_p[12] << 22) | (mask_p[11] << 20)
- + | (mask_p[10] << 18) | (mask_p[9] << 16)
- + | (mask_p[8] << 14) | (mask_p[7] << 12)
- + | (mask_p[6] << 10) | (mask_p[5] << 8)
- + | (mask_p[4] << 6) | (mask_p[3] << 4)
- + | (mask_p[2] << 2) | (mask_p[1] << 0);
- + REG_WRITE(ah, AR_PHY_BIN_MASK2_1, tmp_mask);
- + REG_WRITE(ah, AR_PHY_MASK2_P_15_01, tmp_mask);
- +
- + tmp_mask = (mask_p[30] << 28)
- + | (mask_p[29] << 26) | (mask_p[28] << 24)
- + | (mask_p[27] << 22) | (mask_p[26] << 20)
- + | (mask_p[25] << 18) | (mask_p[24] << 16)
- + | (mask_p[23] << 14) | (mask_p[22] << 12)
- + | (mask_p[21] << 10) | (mask_p[20] << 8)
- + | (mask_p[19] << 6) | (mask_p[18] << 4)
- + | (mask_p[17] << 2) | (mask_p[16] << 0);
- + REG_WRITE(ah, AR_PHY_BIN_MASK2_2, tmp_mask);
- + REG_WRITE(ah, AR_PHY_MASK2_P_30_16, tmp_mask);
- +
- + tmp_mask = (mask_p[45] << 28)
- + | (mask_p[44] << 26) | (mask_p[43] << 24)
- + | (mask_p[42] << 22) | (mask_p[41] << 20)
- + | (mask_p[40] << 18) | (mask_p[39] << 16)
- + | (mask_p[38] << 14) | (mask_p[37] << 12)
- + | (mask_p[36] << 10) | (mask_p[35] << 8)
- + | (mask_p[34] << 6) | (mask_p[33] << 4)
- + | (mask_p[32] << 2) | (mask_p[31] << 0);
- + REG_WRITE(ah, AR_PHY_BIN_MASK2_3, tmp_mask);
- + REG_WRITE(ah, AR_PHY_MASK2_P_45_31, tmp_mask);
- +
- + tmp_mask = (mask_p[61] << 30) | (mask_p[60] << 28)
- + | (mask_p[59] << 26) | (mask_p[58] << 24)
- + | (mask_p[57] << 22) | (mask_p[56] << 20)
- + | (mask_p[55] << 18) | (mask_p[54] << 16)
- + | (mask_p[53] << 14) | (mask_p[52] << 12)
- + | (mask_p[51] << 10) | (mask_p[50] << 8)
- + | (mask_p[49] << 6) | (mask_p[48] << 4)
- + | (mask_p[47] << 2) | (mask_p[46] << 0);
- + REG_WRITE(ah, AR_PHY_BIN_MASK2_4, tmp_mask);
- + REG_WRITE(ah, AR_PHY_MASK2_P_61_45, tmp_mask);
- +}
- +
- +static void ar9002_olc_init(struct ath_hw *ah)
- +{
- + u32 i;
- +
- + if (!OLC_FOR_AR9280_20_LATER)
- + return;
- +
- + if (OLC_FOR_AR9287_10_LATER) {
- + REG_SET_BIT(ah, AR_PHY_TX_PWRCTRL9,
- + AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL);
- + ath9k_hw_analog_shift_rmw(ah, AR9287_AN_TXPC0,
- + AR9287_AN_TXPC0_TXPCMODE,
- + AR9287_AN_TXPC0_TXPCMODE_S,
- + AR9287_AN_TXPC0_TXPCMODE_TEMPSENSE);
- + udelay(100);
- + } else {
- + for (i = 0; i < AR9280_TX_GAIN_TABLE_SIZE; i++)
- + ah->originalGain[i] =
- + MS(REG_READ(ah, AR_PHY_TX_GAIN_TBL1 + i * 4),
- + AR_PHY_TX_GAIN);
- + ah->PDADCdelta = 0;
- + }
- +}
- +
- +static u32 ar9002_hw_compute_pll_control(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + u32 pll;
- +
- + pll = SM(0x5, AR_RTC_9160_PLL_REFDIV);
- +
- + if (chan && IS_CHAN_HALF_RATE(chan))
- + pll |= SM(0x1, AR_RTC_9160_PLL_CLKSEL);
- + else if (chan && IS_CHAN_QUARTER_RATE(chan))
- + pll |= SM(0x2, AR_RTC_9160_PLL_CLKSEL);
- +
- + if (chan && IS_CHAN_5GHZ(chan)) {
- + pll |= SM(0x28, AR_RTC_9160_PLL_DIV);
- +
- +
- + if (AR_SREV_9280_20(ah)) {
- + if (((chan->channel % 20) == 0)
- + || ((chan->channel % 10) == 0))
- + pll = 0x2850;
- + else
- + pll = 0x142c;
- + }
- + } else {
- + pll |= SM(0x2c, AR_RTC_9160_PLL_DIV);
- + }
- +
- + return pll;
- +}
- +
- +static void ar9002_hw_do_getnf(struct ath_hw *ah,
- + int16_t nfarray[NUM_NF_READINGS])
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- + int16_t nf;
- +
- + nf = MS(REG_READ(ah, AR_PHY_CCA), AR9280_PHY_MINCCA_PWR);
- +
- + if (nf & 0x100)
- + nf = 0 - ((nf ^ 0x1ff) + 1);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "NF calibrated [ctl] [chain 0] is %d\n", nf);
- +
- + if (AR_SREV_9271(ah) && (nf >= -114))
- + nf = -116;
- +
- + nfarray[0] = nf;
- +
- + if (!AR_SREV_9285(ah) && !AR_SREV_9271(ah)) {
- + nf = MS(REG_READ(ah, AR_PHY_CH1_CCA),
- + AR9280_PHY_CH1_MINCCA_PWR);
- +
- + if (nf & 0x100)
- + nf = 0 - ((nf ^ 0x1ff) + 1);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "NF calibrated [ctl] [chain 1] is %d\n", nf);
- + nfarray[1] = nf;
- + }
- +
- + nf = MS(REG_READ(ah, AR_PHY_EXT_CCA), AR9280_PHY_EXT_MINCCA_PWR);
- + if (nf & 0x100)
- + nf = 0 - ((nf ^ 0x1ff) + 1);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "NF calibrated [ext] [chain 0] is %d\n", nf);
- +
- + if (AR_SREV_9271(ah) && (nf >= -114))
- + nf = -116;
- +
- + nfarray[3] = nf;
- +
- + if (!AR_SREV_9285(ah) && !AR_SREV_9271(ah)) {
- + nf = MS(REG_READ(ah, AR_PHY_CH1_EXT_CCA),
- + AR9280_PHY_CH1_EXT_MINCCA_PWR);
- +
- + if (nf & 0x100)
- + nf = 0 - ((nf ^ 0x1ff) + 1);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "NF calibrated [ext] [chain 1] is %d\n", nf);
- + nfarray[4] = nf;
- + }
- +}
- +
- +void ar9002_hw_attach_phy_ops(struct ath_hw *ah)
- +{
- + struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
- +
- + priv_ops->set_rf_regs = NULL;
- + priv_ops->rf_alloc_ext_banks = NULL;
- + priv_ops->rf_free_ext_banks = NULL;
- + priv_ops->rf_set_freq = ar9002_hw_set_channel;
- + priv_ops->spur_mitigate_freq = ar9002_hw_spur_mitigate;
- + priv_ops->olc_init = ar9002_olc_init;
- + priv_ops->compute_pll_control = ar9002_hw_compute_pll_control;
- + priv_ops->do_getnf = ar9002_hw_do_getnf;
- +}
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.h
- @@ -0,0 +1,572 @@
- +/*
- + * Copyright (c) 2008-2010 Atheros Communications Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +#ifndef AR9002_PHY_H
- +#define AR9002_PHY_H
- +
- +#define AR_PHY_TEST 0x9800
- +#define PHY_AGC_CLR 0x10000000
- +#define RFSILENT_BB 0x00002000
- +
- +#define AR_PHY_TURBO 0x9804
- +#define AR_PHY_FC_TURBO_MODE 0x00000001
- +#define AR_PHY_FC_TURBO_SHORT 0x00000002
- +#define AR_PHY_FC_DYN2040_EN 0x00000004
- +#define AR_PHY_FC_DYN2040_PRI_ONLY 0x00000008
- +#define AR_PHY_FC_DYN2040_PRI_CH 0x00000010
- +/* For 25 MHz channel spacing -- not used but supported by hw */
- +#define AR_PHY_FC_DYN2040_EXT_CH 0x00000020
- +#define AR_PHY_FC_HT_EN 0x00000040
- +#define AR_PHY_FC_SHORT_GI_40 0x00000080
- +#define AR_PHY_FC_WALSH 0x00000100
- +#define AR_PHY_FC_SINGLE_HT_LTF1 0x00000200
- +#define AR_PHY_FC_ENABLE_DAC_FIFO 0x00000800
- +
- +#define AR_PHY_TEST2 0x9808
- +
- +#define AR_PHY_TIMING2 0x9810
- +#define AR_PHY_TIMING3 0x9814
- +#define AR_PHY_TIMING3_DSC_MAN 0xFFFE0000
- +#define AR_PHY_TIMING3_DSC_MAN_S 17
- +#define AR_PHY_TIMING3_DSC_EXP 0x0001E000
- +#define AR_PHY_TIMING3_DSC_EXP_S 13
- +
- +#define AR_PHY_CHIP_ID_REV_0 0x80
- +#define AR_PHY_CHIP_ID_REV_1 0x81
- +#define AR_PHY_CHIP_ID_9160_REV_0 0xb0
- +
- +#define AR_PHY_ACTIVE 0x981C
- +#define AR_PHY_ACTIVE_EN 0x00000001
- +#define AR_PHY_ACTIVE_DIS 0x00000000
- +
- +#define AR_PHY_RF_CTL2 0x9824
- +#define AR_PHY_TX_END_DATA_START 0x000000FF
- +#define AR_PHY_TX_END_DATA_START_S 0
- +#define AR_PHY_TX_END_PA_ON 0x0000FF00
- +#define AR_PHY_TX_END_PA_ON_S 8
- +
- +#define AR_PHY_RF_CTL3 0x9828
- +#define AR_PHY_TX_END_TO_A2_RX_ON 0x00FF0000
- +#define AR_PHY_TX_END_TO_A2_RX_ON_S 16
- +
- +#define AR_PHY_ADC_CTL 0x982C
- +#define AR_PHY_ADC_CTL_OFF_INBUFGAIN 0x00000003
- +#define AR_PHY_ADC_CTL_OFF_INBUFGAIN_S 0
- +#define AR_PHY_ADC_CTL_OFF_PWDDAC 0x00002000
- +#define AR_PHY_ADC_CTL_OFF_PWDBANDGAP 0x00004000
- +#define AR_PHY_ADC_CTL_OFF_PWDADC 0x00008000
- +#define AR_PHY_ADC_CTL_ON_INBUFGAIN 0x00030000
- +#define AR_PHY_ADC_CTL_ON_INBUFGAIN_S 16
- +
- +#define AR_PHY_ADC_SERIAL_CTL 0x9830
- +#define AR_PHY_SEL_INTERNAL_ADDAC 0x00000000
- +#define AR_PHY_SEL_EXTERNAL_RADIO 0x00000001
- +
- +#define AR_PHY_RF_CTL4 0x9834
- +#define AR_PHY_RF_CTL4_TX_END_XPAB_OFF 0xFF000000
- +#define AR_PHY_RF_CTL4_TX_END_XPAB_OFF_S 24
- +#define AR_PHY_RF_CTL4_TX_END_XPAA_OFF 0x00FF0000
- +#define AR_PHY_RF_CTL4_TX_END_XPAA_OFF_S 16
- +#define AR_PHY_RF_CTL4_FRAME_XPAB_ON 0x0000FF00
- +#define AR_PHY_RF_CTL4_FRAME_XPAB_ON_S 8
- +#define AR_PHY_RF_CTL4_FRAME_XPAA_ON 0x000000FF
- +#define AR_PHY_RF_CTL4_FRAME_XPAA_ON_S 0
- +
- +#define AR_PHY_TSTDAC_CONST 0x983c
- +
- +#define AR_PHY_SETTLING 0x9844
- +#define AR_PHY_SETTLING_SWITCH 0x00003F80
- +#define AR_PHY_SETTLING_SWITCH_S 7
- +
- +#define AR_PHY_RXGAIN 0x9848
- +#define AR_PHY_RXGAIN_TXRX_ATTEN 0x0003F000
- +#define AR_PHY_RXGAIN_TXRX_ATTEN_S 12
- +#define AR_PHY_RXGAIN_TXRX_RF_MAX 0x007C0000
- +#define AR_PHY_RXGAIN_TXRX_RF_MAX_S 18
- +#define AR9280_PHY_RXGAIN_TXRX_ATTEN 0x00003F80
- +#define AR9280_PHY_RXGAIN_TXRX_ATTEN_S 7
- +#define AR9280_PHY_RXGAIN_TXRX_MARGIN 0x001FC000
- +#define AR9280_PHY_RXGAIN_TXRX_MARGIN_S 14
- +
- +#define AR_PHY_DESIRED_SZ 0x9850
- +#define AR_PHY_DESIRED_SZ_ADC 0x000000FF
- +#define AR_PHY_DESIRED_SZ_ADC_S 0
- +#define AR_PHY_DESIRED_SZ_PGA 0x0000FF00
- +#define AR_PHY_DESIRED_SZ_PGA_S 8
- +#define AR_PHY_DESIRED_SZ_TOT_DES 0x0FF00000
- +#define AR_PHY_DESIRED_SZ_TOT_DES_S 20
- +
- +#define AR_PHY_FIND_SIG 0x9858
- +#define AR_PHY_FIND_SIG_FIRSTEP 0x0003F000
- +#define AR_PHY_FIND_SIG_FIRSTEP_S 12
- +#define AR_PHY_FIND_SIG_FIRPWR 0x03FC0000
- +#define AR_PHY_FIND_SIG_FIRPWR_S 18
- +
- +#define AR_PHY_AGC_CTL1 0x985C
- +#define AR_PHY_AGC_CTL1_COARSE_LOW 0x00007F80
- +#define AR_PHY_AGC_CTL1_COARSE_LOW_S 7
- +#define AR_PHY_AGC_CTL1_COARSE_HIGH 0x003F8000
- +#define AR_PHY_AGC_CTL1_COARSE_HIGH_S 15
- +
- +#define AR_PHY_CCA 0x9864
- +#define AR_PHY_MINCCA_PWR 0x0FF80000
- +#define AR_PHY_MINCCA_PWR_S 19
- +#define AR_PHY_CCA_THRESH62 0x0007F000
- +#define AR_PHY_CCA_THRESH62_S 12
- +#define AR9280_PHY_MINCCA_PWR 0x1FF00000
- +#define AR9280_PHY_MINCCA_PWR_S 20
- +#define AR9280_PHY_CCA_THRESH62 0x000FF000
- +#define AR9280_PHY_CCA_THRESH62_S 12
- +
- +#define AR_PHY_SFCORR_LOW 0x986C
- +#define AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW 0x00000001
- +#define AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW 0x00003F00
- +#define AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW_S 8
- +#define AR_PHY_SFCORR_LOW_M1_THRESH_LOW 0x001FC000
- +#define AR_PHY_SFCORR_LOW_M1_THRESH_LOW_S 14
- +#define AR_PHY_SFCORR_LOW_M2_THRESH_LOW 0x0FE00000
- +#define AR_PHY_SFCORR_LOW_M2_THRESH_LOW_S 21
- +
- +#define AR_PHY_SFCORR 0x9868
- +#define AR_PHY_SFCORR_M2COUNT_THR 0x0000001F
- +#define AR_PHY_SFCORR_M2COUNT_THR_S 0
- +#define AR_PHY_SFCORR_M1_THRESH 0x00FE0000
- +#define AR_PHY_SFCORR_M1_THRESH_S 17
- +#define AR_PHY_SFCORR_M2_THRESH 0x7F000000
- +#define AR_PHY_SFCORR_M2_THRESH_S 24
- +
- +#define AR_PHY_SLEEP_CTR_CONTROL 0x9870
- +#define AR_PHY_SLEEP_CTR_LIMIT 0x9874
- +#define AR_PHY_SYNTH_CONTROL 0x9874
- +#define AR_PHY_SLEEP_SCAL 0x9878
- +
- +#define AR_PHY_PLL_CTL 0x987c
- +#define AR_PHY_PLL_CTL_40 0xaa
- +#define AR_PHY_PLL_CTL_40_5413 0x04
- +#define AR_PHY_PLL_CTL_44 0xab
- +#define AR_PHY_PLL_CTL_44_2133 0xeb
- +#define AR_PHY_PLL_CTL_40_2133 0xea
- +
- +#define AR_PHY_SPECTRAL_SCAN 0x9910 /* AR9280 spectral scan configuration register */
- +#define AR_PHY_SPECTRAL_SCAN_ENABLE 0x1
- +#define AR_PHY_SPECTRAL_SCAN_ENA 0x00000001 /* Enable spectral scan, reg 68, bit 0 */
- +#define AR_PHY_SPECTRAL_SCAN_ENA_S 0 /* Enable spectral scan, reg 68, bit 0 */
- +#define AR_PHY_SPECTRAL_SCAN_ACTIVE 0x00000002 /* Activate spectral scan reg 68, bit 1*/
- +#define AR_PHY_SPECTRAL_SCAN_ACTIVE_S 1 /* Activate spectral scan reg 68, bit 1*/
- +#define AR_PHY_SPECTRAL_SCAN_FFT_PERIOD 0x000000F0 /* Interval for FFT reports, reg 68, bits 4-7*/
- +#define AR_PHY_SPECTRAL_SCAN_FFT_PERIOD_S 4
- +#define AR_PHY_SPECTRAL_SCAN_PERIOD 0x0000FF00 /* Interval for FFT reports, reg 68, bits 8-15*/
- +#define AR_PHY_SPECTRAL_SCAN_PERIOD_S 8
- +#define AR_PHY_SPECTRAL_SCAN_COUNT 0x00FF0000 /* Number of reports, reg 68, bits 16-23*/
- +#define AR_PHY_SPECTRAL_SCAN_COUNT_S 16
- +#define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT 0x01000000 /* Short repeat, reg 68, bit 24*/
- +#define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT_S 24 /* Short repeat, reg 68, bit 24*/
- +
- +#define AR_PHY_RX_DELAY 0x9914
- +#define AR_PHY_SEARCH_START_DELAY 0x9918
- +#define AR_PHY_RX_DELAY_DELAY 0x00003FFF
- +
- +#define AR_PHY_TIMING_CTRL4(_i) (0x9920 + ((_i) << 12))
- +#define AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF 0x01F
- +#define AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF_S 0
- +#define AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF 0x7E0
- +#define AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF_S 5
- +#define AR_PHY_TIMING_CTRL4_IQCORR_ENABLE 0x800
- +#define AR_PHY_TIMING_CTRL4_IQCAL_LOG_COUNT_MAX 0xF000
- +#define AR_PHY_TIMING_CTRL4_IQCAL_LOG_COUNT_MAX_S 12
- +#define AR_PHY_TIMING_CTRL4_DO_CAL 0x10000
- +
- +#define AR_PHY_TIMING_CTRL4_ENABLE_SPUR_RSSI 0x80000000
- +#define AR_PHY_TIMING_CTRL4_ENABLE_SPUR_FILTER 0x40000000
- +#define AR_PHY_TIMING_CTRL4_ENABLE_CHAN_MASK 0x20000000
- +#define AR_PHY_TIMING_CTRL4_ENABLE_PILOT_MASK 0x10000000
- +
- +#define AR_PHY_TIMING5 0x9924
- +#define AR_PHY_TIMING5_CYCPWR_THR1 0x000000FE
- +#define AR_PHY_TIMING5_CYCPWR_THR1_S 1
- +
- +#define AR_PHY_POWER_TX_RATE1 0x9934
- +#define AR_PHY_POWER_TX_RATE2 0x9938
- +#define AR_PHY_POWER_TX_RATE_MAX 0x993c
- +#define AR_PHY_POWER_TX_RATE_MAX_TPC_ENABLE 0x00000040
- +
- +#define AR_PHY_FRAME_CTL 0x9944
- +#define AR_PHY_FRAME_CTL_TX_CLIP 0x00000038
- +#define AR_PHY_FRAME_CTL_TX_CLIP_S 3
- +
- +#define AR_PHY_TXPWRADJ 0x994C
- +#define AR_PHY_TXPWRADJ_CCK_GAIN_DELTA 0x00000FC0
- +#define AR_PHY_TXPWRADJ_CCK_GAIN_DELTA_S 6
- +#define AR_PHY_TXPWRADJ_CCK_PCDAC_INDEX 0x00FC0000
- +#define AR_PHY_TXPWRADJ_CCK_PCDAC_INDEX_S 18
- +
- +#define AR_PHY_RADAR_EXT 0x9940
- +#define AR_PHY_RADAR_EXT_ENA 0x00004000
- +
- +#define AR_PHY_RADAR_0 0x9954
- +#define AR_PHY_RADAR_0_ENA 0x00000001
- +#define AR_PHY_RADAR_0_FFT_ENA 0x80000000
- +#define AR_PHY_RADAR_0_INBAND 0x0000003e
- +#define AR_PHY_RADAR_0_INBAND_S 1
- +#define AR_PHY_RADAR_0_PRSSI 0x00000FC0
- +#define AR_PHY_RADAR_0_PRSSI_S 6
- +#define AR_PHY_RADAR_0_HEIGHT 0x0003F000
- +#define AR_PHY_RADAR_0_HEIGHT_S 12
- +#define AR_PHY_RADAR_0_RRSSI 0x00FC0000
- +#define AR_PHY_RADAR_0_RRSSI_S 18
- +#define AR_PHY_RADAR_0_FIRPWR 0x7F000000
- +#define AR_PHY_RADAR_0_FIRPWR_S 24
- +
- +#define AR_PHY_RADAR_1 0x9958
- +#define AR_PHY_RADAR_1_RELPWR_ENA 0x00800000
- +#define AR_PHY_RADAR_1_USE_FIR128 0x00400000
- +#define AR_PHY_RADAR_1_RELPWR_THRESH 0x003F0000
- +#define AR_PHY_RADAR_1_RELPWR_THRESH_S 16
- +#define AR_PHY_RADAR_1_BLOCK_CHECK 0x00008000
- +#define AR_PHY_RADAR_1_MAX_RRSSI 0x00004000
- +#define AR_PHY_RADAR_1_RELSTEP_CHECK 0x00002000
- +#define AR_PHY_RADAR_1_RELSTEP_THRESH 0x00001F00
- +#define AR_PHY_RADAR_1_RELSTEP_THRESH_S 8
- +#define AR_PHY_RADAR_1_MAXLEN 0x000000FF
- +#define AR_PHY_RADAR_1_MAXLEN_S 0
- +
- +#define AR_PHY_SWITCH_CHAIN_0 0x9960
- +#define AR_PHY_SWITCH_COM 0x9964
- +
- +#define AR_PHY_SIGMA_DELTA 0x996C
- +#define AR_PHY_SIGMA_DELTA_ADC_SEL 0x00000003
- +#define AR_PHY_SIGMA_DELTA_ADC_SEL_S 0
- +#define AR_PHY_SIGMA_DELTA_FILT2 0x000000F8
- +#define AR_PHY_SIGMA_DELTA_FILT2_S 3
- +#define AR_PHY_SIGMA_DELTA_FILT1 0x00001F00
- +#define AR_PHY_SIGMA_DELTA_FILT1_S 8
- +#define AR_PHY_SIGMA_DELTA_ADC_CLIP 0x01FFE000
- +#define AR_PHY_SIGMA_DELTA_ADC_CLIP_S 13
- +
- +#define AR_PHY_RESTART 0x9970
- +#define AR_PHY_RESTART_DIV_GC 0x001C0000
- +#define AR_PHY_RESTART_DIV_GC_S 18
- +
- +#define AR_PHY_RFBUS_REQ 0x997C
- +#define AR_PHY_RFBUS_REQ_EN 0x00000001
- +
- +#define AR_PHY_TIMING7 0x9980
- +#define AR_PHY_TIMING8 0x9984
- +#define AR_PHY_TIMING8_PILOT_MASK_2 0x000FFFFF
- +#define AR_PHY_TIMING8_PILOT_MASK_2_S 0
- +
- +#define AR_PHY_BIN_MASK2_1 0x9988
- +#define AR_PHY_BIN_MASK2_2 0x998c
- +#define AR_PHY_BIN_MASK2_3 0x9990
- +#define AR_PHY_BIN_MASK2_4 0x9994
- +
- +#define AR_PHY_BIN_MASK_1 0x9900
- +#define AR_PHY_BIN_MASK_2 0x9904
- +#define AR_PHY_BIN_MASK_3 0x9908
- +
- +#define AR_PHY_MASK_CTL 0x990c
- +
- +#define AR_PHY_BIN_MASK2_4_MASK_4 0x00003FFF
- +#define AR_PHY_BIN_MASK2_4_MASK_4_S 0
- +
- +#define AR_PHY_TIMING9 0x9998
- +#define AR_PHY_TIMING10 0x999c
- +#define AR_PHY_TIMING10_PILOT_MASK_2 0x000FFFFF
- +#define AR_PHY_TIMING10_PILOT_MASK_2_S 0
- +
- +#define AR_PHY_TIMING11 0x99a0
- +#define AR_PHY_TIMING11_SPUR_DELTA_PHASE 0x000FFFFF
- +#define AR_PHY_TIMING11_SPUR_DELTA_PHASE_S 0
- +#define AR_PHY_TIMING11_USE_SPUR_IN_AGC 0x40000000
- +#define AR_PHY_TIMING11_USE_SPUR_IN_SELFCOR 0x80000000
- +
- +#define AR_PHY_RX_CHAINMASK 0x99a4
- +#define AR_PHY_NEW_ADC_DC_GAIN_CORR(_i) (0x99b4 + ((_i) << 12))
- +#define AR_PHY_NEW_ADC_GAIN_CORR_ENABLE 0x40000000
- +#define AR_PHY_NEW_ADC_DC_OFFSET_CORR_ENABLE 0x80000000
- +
- +#define AR_PHY_MULTICHAIN_GAIN_CTL 0x99ac
- +#define AR_PHY_9285_ANT_DIV_CTL_ALL 0x7f000000
- +#define AR_PHY_9285_ANT_DIV_CTL 0x01000000
- +#define AR_PHY_9285_ANT_DIV_CTL_S 24
- +#define AR_PHY_9285_ANT_DIV_ALT_LNACONF 0x06000000
- +#define AR_PHY_9285_ANT_DIV_ALT_LNACONF_S 25
- +#define AR_PHY_9285_ANT_DIV_MAIN_LNACONF 0x18000000
- +#define AR_PHY_9285_ANT_DIV_MAIN_LNACONF_S 27
- +#define AR_PHY_9285_ANT_DIV_ALT_GAINTB 0x20000000
- +#define AR_PHY_9285_ANT_DIV_ALT_GAINTB_S 29
- +#define AR_PHY_9285_ANT_DIV_MAIN_GAINTB 0x40000000
- +#define AR_PHY_9285_ANT_DIV_MAIN_GAINTB_S 30
- +#define AR_PHY_9285_ANT_DIV_LNA1 2
- +#define AR_PHY_9285_ANT_DIV_LNA2 1
- +#define AR_PHY_9285_ANT_DIV_LNA1_PLUS_LNA2 3
- +#define AR_PHY_9285_ANT_DIV_LNA1_MINUS_LNA2 0
- +#define AR_PHY_9285_ANT_DIV_GAINTB_0 0
- +#define AR_PHY_9285_ANT_DIV_GAINTB_1 1
- +
- +#define AR_PHY_EXT_CCA0 0x99b8
- +#define AR_PHY_EXT_CCA0_THRESH62 0x000000FF
- +#define AR_PHY_EXT_CCA0_THRESH62_S 0
- +
- +#define AR_PHY_EXT_CCA 0x99bc
- +#define AR_PHY_EXT_CCA_CYCPWR_THR1 0x0000FE00
- +#define AR_PHY_EXT_CCA_CYCPWR_THR1_S 9
- +#define AR_PHY_EXT_CCA_THRESH62 0x007F0000
- +#define AR_PHY_EXT_CCA_THRESH62_S 16
- +#define AR_PHY_EXT_MINCCA_PWR 0xFF800000
- +#define AR_PHY_EXT_MINCCA_PWR_S 23
- +#define AR9280_PHY_EXT_MINCCA_PWR 0x01FF0000
- +#define AR9280_PHY_EXT_MINCCA_PWR_S 16
- +
- +#define AR_PHY_SFCORR_EXT 0x99c0
- +#define AR_PHY_SFCORR_EXT_M1_THRESH 0x0000007F
- +#define AR_PHY_SFCORR_EXT_M1_THRESH_S 0
- +#define AR_PHY_SFCORR_EXT_M2_THRESH 0x00003F80
- +#define AR_PHY_SFCORR_EXT_M2_THRESH_S 7
- +#define AR_PHY_SFCORR_EXT_M1_THRESH_LOW 0x001FC000
- +#define AR_PHY_SFCORR_EXT_M1_THRESH_LOW_S 14
- +#define AR_PHY_SFCORR_EXT_M2_THRESH_LOW 0x0FE00000
- +#define AR_PHY_SFCORR_EXT_M2_THRESH_LOW_S 21
- +#define AR_PHY_SFCORR_SPUR_SUBCHNL_SD_S 28
- +
- +#define AR_PHY_HALFGI 0x99D0
- +#define AR_PHY_HALFGI_DSC_MAN 0x0007FFF0
- +#define AR_PHY_HALFGI_DSC_MAN_S 4
- +#define AR_PHY_HALFGI_DSC_EXP 0x0000000F
- +#define AR_PHY_HALFGI_DSC_EXP_S 0
- +
- +#define AR_PHY_CHAN_INFO_MEMORY 0x99DC
- +#define AR_PHY_CHAN_INFO_MEMORY_CAPTURE_MASK 0x0001
- +
- +#define AR_PHY_HEAVY_CLIP_ENABLE 0x99E0
- +
- +#define AR_PHY_HEAVY_CLIP_FACTOR_RIFS 0x99EC
- +#define AR_PHY_RIFS_INIT_DELAY 0x03ff0000
- +
- +#define AR_PHY_M_SLEEP 0x99f0
- +#define AR_PHY_REFCLKDLY 0x99f4
- +#define AR_PHY_REFCLKPD 0x99f8
- +
- +#define AR_PHY_CALMODE 0x99f0
- +
- +#define AR_PHY_CALMODE_IQ 0x00000000
- +#define AR_PHY_CALMODE_ADC_GAIN 0x00000001
- +#define AR_PHY_CALMODE_ADC_DC_PER 0x00000002
- +#define AR_PHY_CALMODE_ADC_DC_INIT 0x00000003
- +
- +#define AR_PHY_CAL_MEAS_0(_i) (0x9c10 + ((_i) << 12))
- +#define AR_PHY_CAL_MEAS_1(_i) (0x9c14 + ((_i) << 12))
- +#define AR_PHY_CAL_MEAS_2(_i) (0x9c18 + ((_i) << 12))
- +#define AR_PHY_CAL_MEAS_3(_i) (0x9c1c + ((_i) << 12))
- +
- +#define AR_PHY_CURRENT_RSSI 0x9c1c
- +#define AR9280_PHY_CURRENT_RSSI 0x9c3c
- +
- +#define AR_PHY_RFBUS_GRANT 0x9C20
- +#define AR_PHY_RFBUS_GRANT_EN 0x00000001
- +
- +#define AR_PHY_CHAN_INFO_GAIN_DIFF 0x9CF4
- +#define AR_PHY_CHAN_INFO_GAIN_DIFF_UPPER_LIMIT 320
- +
- +#define AR_PHY_CHAN_INFO_GAIN 0x9CFC
- +
- +#define AR_PHY_MODE 0xA200
- +#define AR_PHY_MODE_ASYNCFIFO 0x80
- +#define AR_PHY_MODE_AR2133 0x08
- +#define AR_PHY_MODE_AR5111 0x00
- +#define AR_PHY_MODE_AR5112 0x08
- +#define AR_PHY_MODE_DYNAMIC 0x04
- +#define AR_PHY_MODE_RF2GHZ 0x02
- +#define AR_PHY_MODE_RF5GHZ 0x00
- +#define AR_PHY_MODE_CCK 0x01
- +#define AR_PHY_MODE_OFDM 0x00
- +#define AR_PHY_MODE_DYN_CCK_DISABLE 0x100
- +
- +#define AR_PHY_CCK_TX_CTRL 0xA204
- +#define AR_PHY_CCK_TX_CTRL_JAPAN 0x00000010
- +#define AR_PHY_CCK_TX_CTRL_TX_DAC_SCALE_CCK 0x0000000C
- +#define AR_PHY_CCK_TX_CTRL_TX_DAC_SCALE_CCK_S 2
- +
- +#define AR_PHY_CCK_DETECT 0xA208
- +#define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK 0x0000003F
- +#define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK_S 0
- +/* [12:6] settling time for antenna switch */
- +#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME 0x00001FC0
- +#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME_S 6
- +#define AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV 0x2000
- +#define AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV_S 13
- +
- +#define AR_PHY_GAIN_2GHZ 0xA20C
- +#define AR_PHY_GAIN_2GHZ_RXTX_MARGIN 0x00FC0000
- +#define AR_PHY_GAIN_2GHZ_RXTX_MARGIN_S 18
- +#define AR_PHY_GAIN_2GHZ_BSW_MARGIN 0x00003C00
- +#define AR_PHY_GAIN_2GHZ_BSW_MARGIN_S 10
- +#define AR_PHY_GAIN_2GHZ_BSW_ATTEN 0x0000001F
- +#define AR_PHY_GAIN_2GHZ_BSW_ATTEN_S 0
- +
- +#define AR_PHY_GAIN_2GHZ_XATTEN2_MARGIN 0x003E0000
- +#define AR_PHY_GAIN_2GHZ_XATTEN2_MARGIN_S 17
- +#define AR_PHY_GAIN_2GHZ_XATTEN1_MARGIN 0x0001F000
- +#define AR_PHY_GAIN_2GHZ_XATTEN1_MARGIN_S 12
- +#define AR_PHY_GAIN_2GHZ_XATTEN2_DB 0x00000FC0
- +#define AR_PHY_GAIN_2GHZ_XATTEN2_DB_S 6
- +#define AR_PHY_GAIN_2GHZ_XATTEN1_DB 0x0000003F
- +#define AR_PHY_GAIN_2GHZ_XATTEN1_DB_S 0
- +
- +#define AR_PHY_CCK_RXCTRL4 0xA21C
- +#define AR_PHY_CCK_RXCTRL4_FREQ_EST_SHORT 0x01F80000
- +#define AR_PHY_CCK_RXCTRL4_FREQ_EST_SHORT_S 19
- +
- +#define AR_PHY_DAG_CTRLCCK 0xA228
- +#define AR_PHY_DAG_CTRLCCK_EN_RSSI_THR 0x00000200
- +#define AR_PHY_DAG_CTRLCCK_RSSI_THR 0x0001FC00
- +#define AR_PHY_DAG_CTRLCCK_RSSI_THR_S 10
- +
- +#define AR_PHY_FORCE_CLKEN_CCK 0xA22C
- +#define AR_PHY_FORCE_CLKEN_CCK_MRC_MUX 0x00000040
- +
- +#define AR_PHY_POWER_TX_RATE3 0xA234
- +#define AR_PHY_POWER_TX_RATE4 0xA238
- +
- +#define AR_PHY_SCRM_SEQ_XR 0xA23C
- +#define AR_PHY_HEADER_DETECT_XR 0xA240
- +#define AR_PHY_CHIRP_DETECTED_XR 0xA244
- +#define AR_PHY_BLUETOOTH 0xA254
- +
- +#define AR_PHY_TPCRG1 0xA258
- +#define AR_PHY_TPCRG1_NUM_PD_GAIN 0x0000c000
- +#define AR_PHY_TPCRG1_NUM_PD_GAIN_S 14
- +
- +#define AR_PHY_TPCRG1_PD_GAIN_1 0x00030000
- +#define AR_PHY_TPCRG1_PD_GAIN_1_S 16
- +#define AR_PHY_TPCRG1_PD_GAIN_2 0x000C0000
- +#define AR_PHY_TPCRG1_PD_GAIN_2_S 18
- +#define AR_PHY_TPCRG1_PD_GAIN_3 0x00300000
- +#define AR_PHY_TPCRG1_PD_GAIN_3_S 20
- +
- +#define AR_PHY_TPCRG1_PD_CAL_ENABLE 0x00400000
- +#define AR_PHY_TPCRG1_PD_CAL_ENABLE_S 22
- +
- +#define AR_PHY_TX_PWRCTRL4 0xa264
- +#define AR_PHY_TX_PWRCTRL_PD_AVG_VALID 0x00000001
- +#define AR_PHY_TX_PWRCTRL_PD_AVG_VALID_S 0
- +#define AR_PHY_TX_PWRCTRL_PD_AVG_OUT 0x000001FE
- +#define AR_PHY_TX_PWRCTRL_PD_AVG_OUT_S 1
- +
- +#define AR_PHY_TX_PWRCTRL6_0 0xa270
- +#define AR_PHY_TX_PWRCTRL6_1 0xb270
- +#define AR_PHY_TX_PWRCTRL_ERR_EST_MODE 0x03000000
- +#define AR_PHY_TX_PWRCTRL_ERR_EST_MODE_S 24
- +
- +#define AR_PHY_TX_PWRCTRL7 0xa274
- +#define AR_PHY_TX_PWRCTRL_INIT_TX_GAIN 0x01F80000
- +#define AR_PHY_TX_PWRCTRL_INIT_TX_GAIN_S 19
- +
- +#define AR_PHY_TX_PWRCTRL9 0xa27C
- +#define AR_PHY_TX_DESIRED_SCALE_CCK 0x00007C00
- +#define AR_PHY_TX_DESIRED_SCALE_CCK_S 10
- +#define AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL 0x80000000
- +#define AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL_S 31
- +
- +#define AR_PHY_TX_GAIN_TBL1 0xa300
- +#define AR_PHY_TX_GAIN 0x0007F000
- +#define AR_PHY_TX_GAIN_S 12
- +
- +#define AR_PHY_CH0_TX_PWRCTRL11 0xa398
- +#define AR_PHY_CH1_TX_PWRCTRL11 0xb398
- +#define AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP 0x0000FC00
- +#define AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP_S 10
- +
- +#define AR_PHY_VIT_MASK2_M_46_61 0xa3a0
- +#define AR_PHY_MASK2_M_31_45 0xa3a4
- +#define AR_PHY_MASK2_M_16_30 0xa3a8
- +#define AR_PHY_MASK2_M_00_15 0xa3ac
- +#define AR_PHY_MASK2_P_15_01 0xa3b8
- +#define AR_PHY_MASK2_P_30_16 0xa3bc
- +#define AR_PHY_MASK2_P_45_31 0xa3c0
- +#define AR_PHY_MASK2_P_61_45 0xa3c4
- +#define AR_PHY_SPUR_REG 0x994c
- +
- +#define AR_PHY_SPUR_REG_MASK_RATE_CNTL (0xFF << 18)
- +#define AR_PHY_SPUR_REG_MASK_RATE_CNTL_S 18
- +
- +#define AR_PHY_SPUR_REG_ENABLE_MASK_PPM 0x20000
- +#define AR_PHY_SPUR_REG_MASK_RATE_SELECT (0xFF << 9)
- +#define AR_PHY_SPUR_REG_MASK_RATE_SELECT_S 9
- +#define AR_PHY_SPUR_REG_ENABLE_VIT_SPUR_RSSI 0x100
- +#define AR_PHY_SPUR_REG_SPUR_RSSI_THRESH 0x7F
- +#define AR_PHY_SPUR_REG_SPUR_RSSI_THRESH_S 0
- +
- +#define AR_PHY_PILOT_MASK_01_30 0xa3b0
- +#define AR_PHY_PILOT_MASK_31_60 0xa3b4
- +
- +#define AR_PHY_CHANNEL_MASK_01_30 0x99d4
- +#define AR_PHY_CHANNEL_MASK_31_60 0x99d8
- +
- +#define AR_PHY_ANALOG_SWAP 0xa268
- +#define AR_PHY_SWAP_ALT_CHAIN 0x00000040
- +
- +#define AR_PHY_TPCRG5 0xA26C
- +#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP 0x0000000F
- +#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP_S 0
- +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1 0x000003F0
- +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1_S 4
- +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2 0x0000FC00
- +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2_S 10
- +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3 0x003F0000
- +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3_S 16
- +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4 0x0FC00000
- +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4_S 22
- +
- +/* Carrier leak calibration control, do it after AGC calibration */
- +#define AR_PHY_CL_CAL_CTL 0xA358
- +#define AR_PHY_CL_CAL_ENABLE 0x00000002
- +#define AR_PHY_PARALLEL_CAL_ENABLE 0x00000001
- +
- +#define AR_PHY_POWER_TX_RATE5 0xA38C
- +#define AR_PHY_POWER_TX_RATE6 0xA390
- +
- +#define AR_PHY_CAL_CHAINMASK 0xA39C
- +
- +#define AR_PHY_POWER_TX_SUB 0xA3C8
- +#define AR_PHY_POWER_TX_RATE7 0xA3CC
- +#define AR_PHY_POWER_TX_RATE8 0xA3D0
- +#define AR_PHY_POWER_TX_RATE9 0xA3D4
- +
- +#define AR_PHY_XPA_CFG 0xA3D8
- +#define AR_PHY_FORCE_XPA_CFG 0x000000001
- +#define AR_PHY_FORCE_XPA_CFG_S 0
- +
- +#define AR_PHY_CH1_CCA 0xa864
- +#define AR_PHY_CH1_MINCCA_PWR 0x0FF80000
- +#define AR_PHY_CH1_MINCCA_PWR_S 19
- +#define AR9280_PHY_CH1_MINCCA_PWR 0x1FF00000
- +#define AR9280_PHY_CH1_MINCCA_PWR_S 20
- +
- +#define AR_PHY_CH2_CCA 0xb864
- +#define AR_PHY_CH2_MINCCA_PWR 0x0FF80000
- +#define AR_PHY_CH2_MINCCA_PWR_S 19
- +
- +#define AR_PHY_CH1_EXT_CCA 0xa9bc
- +#define AR_PHY_CH1_EXT_MINCCA_PWR 0xFF800000
- +#define AR_PHY_CH1_EXT_MINCCA_PWR_S 23
- +#define AR9280_PHY_CH1_EXT_MINCCA_PWR 0x01FF0000
- +#define AR9280_PHY_CH1_EXT_MINCCA_PWR_S 16
- +
- +#define AR_PHY_CH2_EXT_CCA 0xb9bc
- +#define AR_PHY_CH2_EXT_MINCCA_PWR 0xFF800000
- +#define AR_PHY_CH2_EXT_MINCCA_PWR_S 23
- +
- +#endif
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
- @@ -0,0 +1,798 @@
- +/*
- + * Copyright (c) 2010 Atheros Communications Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +
- +#include "hw.h"
- +#include "hw-ops.h"
- +#include "ar9003_phy.h"
- +
- +static void ar9003_hw_setup_calibration(struct ath_hw *ah,
- + struct ath9k_cal_list *currCal)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + /* Select calibration to run */
- + switch(currCal->calData->calType) {
- + case IQ_MISMATCH_CAL:
- + /*
- + * Start calibration with
- + * 2^(INIT_IQCAL_LOG_COUNT_MAX+1) samples
- + */
- + REG_RMW_FIELD(ah, AR_PHY_TIMING4,
- + AR_PHY_TIMING4_IQCAL_LOG_COUNT_MAX,
- + currCal->calData->calCountMax);
- + REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_IQ);
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "starting IQ Mismatch Calibration\n");
- +
- + /* Kick-off cal */
- + REG_SET_BIT(ah, AR_PHY_TIMING4, AR_PHY_TIMING4_DO_CAL);
- + break;
- + case TEMP_COMP_CAL:
- + REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_THERM,
- + AR_PHY_65NM_CH0_THERM_LOCAL, 1);
- + REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_THERM,
- + AR_PHY_65NM_CH0_THERM_START, 1);
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "starting Temperature Compensation Calibration\n");
- + break;
- + case ADC_DC_INIT_CAL:
- + case ADC_GAIN_CAL:
- + case ADC_DC_CAL:
- + /* Not yet */
- + break;
- + }
- +}
- +
- +/*
- + * Generic calibration routine.
- + * Recalibrate the lower PHY chips to account for temperature/environment
- + * changes.
- + */
- +static bool ar9003_hw_per_calibration(struct ath_hw *ah,
- + struct ath9k_channel *ichan,
- + u8 rxchainmask,
- + struct ath9k_cal_list *currCal)
- +{
- + /* Cal is assumed not done until explicitly set below */
- + bool iscaldone = false;
- +
- + /* Calibration in progress. */
- + if (currCal->calState == CAL_RUNNING) {
- + /* Check to see if it has finished. */
- + if (!(REG_READ(ah, AR_PHY_TIMING4) & AR_PHY_TIMING4_DO_CAL)) {
- + /*
- + * Accumulate cal measures for active chains
- + */
- + currCal->calData->calCollect(ah);
- + ah->cal_samples++;
- +
- + if (ah->cal_samples >=
- + currCal->calData->calNumSamples) {
- + unsigned int i, numChains = 0;
- + for (i = 0; i < AR9300_MAX_CHAINS; i++) {
- + if (rxchainmask & (1 << i))
- + numChains++;
- + }
- +
- + /*
- + * Process accumulated data
- + */
- + currCal->calData->calPostProc(ah, numChains);
- +
- + /* Calibration has finished. */
- + ichan->CalValid |= currCal->calData->calType;
- + currCal->calState = CAL_DONE;
- + iscaldone = true;
- + } else {
- + /*
- + * Set-up collection of another sub-sample until we
- + * get desired number
- + */
- + ar9003_hw_setup_calibration(ah, currCal);
- + }
- + }
- + } else if (!(ichan->CalValid & currCal->calData->calType)) {
- + /* If current cal is marked invalid in channel, kick it off */
- + ath9k_hw_reset_calibration(ah, currCal);
- + }
- +
- + return iscaldone;
- +}
- +
- +static bool ar9003_hw_calibrate(struct ath_hw *ah,
- + struct ath9k_channel *chan,
- + u8 rxchainmask,
- + bool longcal)
- +{
- + bool iscaldone = true;
- + struct ath9k_cal_list *currCal = ah->cal_list_curr;
- +
- + /*
- + * For given calibration:
- + * 1. Call generic cal routine
- + * 2. When this cal is done (isCalDone) if we have more cals waiting
- + * (eg after reset), mask this to upper layers by not propagating
- + * isCalDone if it is set to TRUE.
- + * Instead, change isCalDone to FALSE and setup the waiting cal(s)
- + * to be run.
- + */
- + if (currCal &&
- + (currCal->calState == CAL_RUNNING ||
- + currCal->calState == CAL_WAITING)) {
- + iscaldone = ar9003_hw_per_calibration(ah, chan,
- + rxchainmask, currCal);
- + if (iscaldone) {
- + ah->cal_list_curr = currCal = currCal->calNext;
- +
- + if (currCal->calState == CAL_WAITING) {
- + iscaldone = false;
- + ath9k_hw_reset_calibration(ah, currCal);
- + }
- + }
- + }
- +
- + /* Do NF cal only at longer intervals */
- + if (longcal) {
- + /*
- + * Load the NF from history buffer of the current channel.
- + * NF is slow time-variant, so it is OK to use a historical value.
- + */
- + ath9k_hw_loadnf(ah, ah->curchan);
- +
- + /* start NF calibration, without updating BB NF register */
- + ath9k_hw_start_nfcal(ah);
- + }
- +
- + return iscaldone;
- +}
- +
- +static void ar9003_hw_iqcal_collect(struct ath_hw *ah)
- +{
- + int i;
- +
- + /* Accumulate IQ cal measures for active chains */
- + for (i = 0; i < AR5416_MAX_CHAINS; i++) {
- + ah->totalPowerMeasI[i] +=
- + REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
- + ah->totalPowerMeasQ[i] +=
- + REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
- + ah->totalIqCorrMeas[i] +=
- + (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
- + ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
- + "%d: Chn %d pmi=0x%08x;pmq=0x%08x;iqcm=0x%08x;\n",
- + ah->cal_samples, i, ah->totalPowerMeasI[i],
- + ah->totalPowerMeasQ[i],
- + ah->totalIqCorrMeas[i]);
- + }
- +}
- +
- +static void ar9003_hw_iqcalibrate(struct ath_hw *ah, u8 numChains)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- + u32 powerMeasQ, powerMeasI, iqCorrMeas;
- + u32 qCoffDenom, iCoffDenom;
- + int32_t qCoff, iCoff;
- + int iqCorrNeg, i;
- + const u_int32_t offset_array[3] = {
- + AR_PHY_RX_IQCAL_CORR_B0,
- + AR_PHY_RX_IQCAL_CORR_B1,
- + AR_PHY_RX_IQCAL_CORR_B2,
- + };
- +
- + for (i = 0; i < numChains; i++) {
- + powerMeasI = ah->totalPowerMeasI[i];
- + powerMeasQ = ah->totalPowerMeasQ[i];
- + iqCorrMeas = ah->totalIqCorrMeas[i];
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Starting IQ Cal and Correction for Chain %d\n",
- + i);
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Orignal: Chn %diq_corr_meas = 0x%08x\n",
- + i, ah->totalIqCorrMeas[i]);
- +
- + iqCorrNeg = 0;
- +
- + if (iqCorrMeas > 0x80000000) {
- + iqCorrMeas = (0xffffffff - iqCorrMeas) + 1;
- + iqCorrNeg = 1;
- + }
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d pwr_meas_i = 0x%08x\n", i, powerMeasI);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d pwr_meas_q = 0x%08x\n", i, powerMeasQ);
- + ath_print(common, ATH_DBG_CALIBRATE, "iqCorrNeg is 0x%08x\n",
- + iqCorrNeg);
- +
- + iCoffDenom = (powerMeasI / 2 + powerMeasQ / 2) / 256;
- + qCoffDenom = powerMeasQ / 64;
- +
- + if ((iCoffDenom != 0) && (qCoffDenom != 0)) {
- + iCoff = iqCorrMeas / iCoffDenom;
- + qCoff = powerMeasI / qCoffDenom - 64;
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d iCoff = 0x%08x\n", i, iCoff);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d qCoff = 0x%08x\n", i, qCoff);
- +
- + /* Force bounds on iCoff */
- + if (iCoff >= 63)
- + iCoff = 63;
- + else if (iCoff <= -63)
- + iCoff = -63;
- +
- + /* Negate iCoff if iqCorrNeg == 0 */
- + if (iqCorrNeg == 0x0)
- + iCoff = -iCoff;
- +
- + /* Force bounds on qCoff */
- + if (qCoff >= 63)
- + qCoff = 63;
- + else if (qCoff <= -63)
- + qCoff = -63;
- +
- + iCoff = iCoff & 0x7f;
- + qCoff = qCoff & 0x7f;
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Chn %d : iCoff = 0x%x qCoff = 0x%x\n",
- + i, iCoff, qCoff);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Register offset (0x%04x) "
- + "before update = 0x%x\n",
- + offset_array[i],
- + REG_READ(ah, offset_array[i]));
- +
- + REG_RMW_FIELD(ah, offset_array[i],
- + AR_PHY_RX_IQCAL_CORR_IQCORR_Q_I_COFF,
- + iCoff);
- + REG_RMW_FIELD(ah, offset_array[i],
- + AR_PHY_RX_IQCAL_CORR_IQCORR_Q_Q_COFF,
- + qCoff);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Register offset (0x%04x) QI COFF "
- + "(bitfields 0x%08x) after update = 0x%x\n",
- + offset_array[i],
- + AR_PHY_RX_IQCAL_CORR_IQCORR_Q_I_COFF,
- + REG_READ(ah, offset_array[i]));
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Register offset (0x%04x) QQ COFF "
- + "(bitfields 0x%08x) after update = 0x%x\n",
- + offset_array[i], AR_PHY_RX_IQCAL_CORR_IQCORR_Q_Q_COFF,
- + REG_READ(ah, offset_array[i]));
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "IQ Cal and Correction done for Chain %d\n",
- + i);
- + }
- + }
- +
- + REG_SET_BIT(ah, AR_PHY_RX_IQCAL_CORR_B0,
- + AR_PHY_RX_IQCAL_CORR_IQCORR_ENABLE);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "IQ Cal and Correction (offset 0x%04x) enabled "
- + "(bit position 0x%08x). New Value 0x%08x\n",
- + (unsigned) (AR_PHY_RX_IQCAL_CORR_B0),
- + AR_PHY_RX_IQCAL_CORR_IQCORR_ENABLE,
- + REG_READ(ah, AR_PHY_RX_IQCAL_CORR_B0));
- +}
- +
- +static const struct ath9k_percal_data iq_cal_single_sample = {
- + IQ_MISMATCH_CAL,
- + MIN_CAL_SAMPLES,
- + PER_MAX_LOG_COUNT,
- + ar9003_hw_iqcal_collect,
- + ar9003_hw_iqcalibrate
- +};
- +
- +static void ar9003_hw_init_cal_settings(struct ath_hw *ah)
- +{
- + ah->iq_caldata.calData = &iq_cal_single_sample;
- + ah->supp_cals = IQ_MISMATCH_CAL;
- +}
- +
- +static bool ar9003_hw_iscal_supported(struct ath_hw *ah,
- + enum ath9k_cal_types calType)
- +{
- + switch (calType & ah->supp_cals) {
- + case IQ_MISMATCH_CAL:
- + /*
- + * XXX: Run IQ Mismatch for non-CCK only
- + * Note that CHANNEL_B is never set though.
- + */
- + return true;
- + case ADC_GAIN_CAL:
- + case ADC_DC_CAL:
- + return false;
- + case TEMP_COMP_CAL:
- + return true;
- + }
- +
- + return false;
- +}
- +
- +/*
- + * solve 4x4 linear equation used in loopback iq cal.
- + */
- +static bool ar9003_hw_solve_iq_cal(struct ath_hw *ah,
- + s32 sin_2phi_1,
- + s32 cos_2phi_1,
- + s32 sin_2phi_2,
- + s32 cos_2phi_2,
- + s32 mag_a0_d0,
- + s32 phs_a0_d0,
- + s32 mag_a1_d0,
- + s32 phs_a1_d0,
- + s32 solved_eq[])
- +{
- + s32 f1 = cos_2phi_1 - cos_2phi_2,
- + f3 = sin_2phi_1 - sin_2phi_2,
- + f2;
- + s32 mag_tx, phs_tx, mag_rx, phs_rx;
- + const s32 result_shift = 1 << 15;
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + f2 = (f1 * f1 + f3 * f3) / result_shift;
- +
- + if (!f2) {
- + ath_print(common, ATH_DBG_CALIBRATE, "Divide by 0\n");
- + return false;
- + }
- +
- + /* mag mismatch, tx */
- + mag_tx = f1 * (mag_a0_d0 - mag_a1_d0) + f3 * (phs_a0_d0 - phs_a1_d0);
- + /* phs mismatch, tx */
- + phs_tx = f3 * (-mag_a0_d0 + mag_a1_d0) + f1 * (phs_a0_d0 - phs_a1_d0);
- +
- + mag_tx = (mag_tx / f2);
- + phs_tx = (phs_tx / f2);
- +
- + /* mag mismatch, rx */
- + mag_rx = mag_a0_d0 - (cos_2phi_1 * mag_tx + sin_2phi_1 * phs_tx) /
- + result_shift;
- + /* phs mismatch, rx */
- + phs_rx = phs_a0_d0 + (sin_2phi_1 * mag_tx - cos_2phi_1 * phs_tx) /
- + result_shift;
- +
- + solved_eq[0] = mag_tx;
- + solved_eq[1] = phs_tx;
- + solved_eq[2] = mag_rx;
- + solved_eq[3] = phs_rx;
- +
- + return true;
- +}
- +
- +static s32 ar9003_hw_find_mag_approx(struct ath_hw *ah, s32 in_re, s32 in_im)
- +{
- + s32 abs_i = abs(in_re),
- + abs_q = abs(in_im),
- + max_abs, min_abs;
- +
- + if (abs_i > abs_q) {
- + max_abs = abs_i;
- + min_abs = abs_q;
- + } else {
- + max_abs = abs_q;
- + min_abs = abs_i;
- + }
- +
- + return (max_abs - (max_abs / 32) + (min_abs / 8) + (min_abs / 4));
- +}
- +
- +#define DELPT 32
- +
- +static bool ar9003_hw_calc_iq_corr(struct ath_hw *ah,
- + s32 chain_idx,
- + const s32 iq_res[],
- + s32 iqc_coeff[])
- +{
- + s32 i2_m_q2_a0_d0, i2_p_q2_a0_d0, iq_corr_a0_d0,
- + i2_m_q2_a0_d1, i2_p_q2_a0_d1, iq_corr_a0_d1,
- + i2_m_q2_a1_d0, i2_p_q2_a1_d0, iq_corr_a1_d0,
- + i2_m_q2_a1_d1, i2_p_q2_a1_d1, iq_corr_a1_d1;
- + s32 mag_a0_d0, mag_a1_d0, mag_a0_d1, mag_a1_d1,
- + phs_a0_d0, phs_a1_d0, phs_a0_d1, phs_a1_d1,
- + sin_2phi_1, cos_2phi_1,
- + sin_2phi_2, cos_2phi_2;
- + s32 mag_tx, phs_tx, mag_rx, phs_rx;
- + s32 solved_eq[4], mag_corr_tx, phs_corr_tx, mag_corr_rx, phs_corr_rx,
- + q_q_coff, q_i_coff;
- + const s32 res_scale = 1 << 15;
- + const s32 delpt_shift = 1 << 8;
- + s32 mag1, mag2;
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + i2_m_q2_a0_d0 = iq_res[0] & 0xfff;
- + i2_p_q2_a0_d0 = (iq_res[0] >> 12) & 0xfff;
- + iq_corr_a0_d0 = ((iq_res[0] >> 24) & 0xff) + ((iq_res[1] & 0xf) << 8);
- +
- + if (i2_m_q2_a0_d0 > 0x800)
- + i2_m_q2_a0_d0 = -((0xfff - i2_m_q2_a0_d0) + 1);
- +
- + if (i2_p_q2_a0_d0 > 0x800)
- + i2_p_q2_a0_d0 = -((0xfff - i2_p_q2_a0_d0) + 1);
- +
- + if (iq_corr_a0_d0 > 0x800)
- + iq_corr_a0_d0 = -((0xfff - iq_corr_a0_d0) + 1);
- +
- + i2_m_q2_a0_d1 = (iq_res[1] >> 4) & 0xfff;
- + i2_p_q2_a0_d1 = (iq_res[2] & 0xfff);
- + iq_corr_a0_d1 = (iq_res[2] >> 12) & 0xfff;
- +
- + if (i2_m_q2_a0_d1 > 0x800)
- + i2_m_q2_a0_d1 = -((0xfff - i2_m_q2_a0_d1) + 1);
- +
- + if (i2_p_q2_a0_d1 > 0x800)
- + i2_p_q2_a0_d1 = -((0xfff - i2_p_q2_a0_d1) + 1);
- +
- + if (iq_corr_a0_d1 > 0x800)
- + iq_corr_a0_d1 = -((0xfff - iq_corr_a0_d1) + 1);
- +
- + i2_m_q2_a1_d0 = ((iq_res[2] >> 24) & 0xff) + ((iq_res[3] & 0xf) << 8);
- + i2_p_q2_a1_d0 = (iq_res[3] >> 4) & 0xfff;
- + iq_corr_a1_d0 = iq_res[4] & 0xfff;
- +
- + if (i2_m_q2_a1_d0 > 0x800)
- + i2_m_q2_a1_d0 = -((0xfff - i2_m_q2_a1_d0) + 1);
- +
- + if (i2_p_q2_a1_d0 > 0x800)
- + i2_p_q2_a1_d0 = -((0xfff - i2_p_q2_a1_d0) + 1);
- +
- + if (iq_corr_a1_d0 > 0x800)
- + iq_corr_a1_d0 = -((0xfff - iq_corr_a1_d0) + 1);
- +
- + i2_m_q2_a1_d1 = (iq_res[4] >> 12) & 0xfff;
- + i2_p_q2_a1_d1 = ((iq_res[4] >> 24) & 0xff) + ((iq_res[5] & 0xf) << 8);
- + iq_corr_a1_d1 = (iq_res[5] >> 4) & 0xfff;
- +
- + if (i2_m_q2_a1_d1 > 0x800)
- + i2_m_q2_a1_d1 = -((0xfff - i2_m_q2_a1_d1) + 1);
- +
- + if (i2_p_q2_a1_d1 > 0x800)
- + i2_p_q2_a1_d1 = -((0xfff - i2_p_q2_a1_d1) + 1);
- +
- + if (iq_corr_a1_d1 > 0x800)
- + iq_corr_a1_d1 = -((0xfff - iq_corr_a1_d1) + 1);
- +
- + if ((i2_p_q2_a0_d0 == 0) || (i2_p_q2_a0_d1 == 0) ||
- + (i2_p_q2_a1_d0 == 0) || (i2_p_q2_a1_d1 == 0)) {
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Divide by 0:\na0_d0=%d\n"
- + "a0_d1=%d\na2_d0=%d\na1_d1=%d\n",
- + i2_p_q2_a0_d0, i2_p_q2_a0_d1,
- + i2_p_q2_a1_d0, i2_p_q2_a1_d1);
- + return false;
- + }
- +
- + mag_a0_d0 = (i2_m_q2_a0_d0 * res_scale) / i2_p_q2_a0_d0;
- + phs_a0_d0 = (iq_corr_a0_d0 * res_scale) / i2_p_q2_a0_d0;
- +
- + mag_a0_d1 = (i2_m_q2_a0_d1 * res_scale) / i2_p_q2_a0_d1;
- + phs_a0_d1 = (iq_corr_a0_d1 * res_scale) / i2_p_q2_a0_d1;
- +
- + mag_a1_d0 = (i2_m_q2_a1_d0 * res_scale) / i2_p_q2_a1_d0;
- + phs_a1_d0 = (iq_corr_a1_d0 * res_scale) / i2_p_q2_a1_d0;
- +
- + mag_a1_d1 = (i2_m_q2_a1_d1 * res_scale) / i2_p_q2_a1_d1;
- + phs_a1_d1 = (iq_corr_a1_d1 * res_scale) / i2_p_q2_a1_d1;
- +
- + /* w/o analog phase shift */
- + sin_2phi_1 = (((mag_a0_d0 - mag_a0_d1) * delpt_shift) / DELPT);
- + /* w/o analog phase shift */
- + cos_2phi_1 = (((phs_a0_d1 - phs_a0_d0) * delpt_shift) / DELPT);
- + /* w/ analog phase shift */
- + sin_2phi_2 = (((mag_a1_d0 - mag_a1_d1) * delpt_shift) / DELPT);
- + /* w/ analog phase shift */
- + cos_2phi_2 = (((phs_a1_d1 - phs_a1_d0) * delpt_shift) / DELPT);
- +
- + /*
- + * force sin^2 + cos^2 = 1;
- + * find magnitude by approximation
- + */
- + mag1 = ar9003_hw_find_mag_approx(ah, cos_2phi_1, sin_2phi_1);
- + mag2 = ar9003_hw_find_mag_approx(ah, cos_2phi_2, sin_2phi_2);
- +
- + if ((mag1 == 0) || (mag2 == 0)) {
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Divide by 0: mag1=%d, mag2=%d\n",
- + mag1, mag2);
- + return false;
- + }
- +
- + /* normalization sin and cos by mag */
- + sin_2phi_1 = (sin_2phi_1 * res_scale / mag1);
- + cos_2phi_1 = (cos_2phi_1 * res_scale / mag1);
- + sin_2phi_2 = (sin_2phi_2 * res_scale / mag2);
- + cos_2phi_2 = (cos_2phi_2 * res_scale / mag2);
- +
- + /* calculate IQ mismatch */
- + if (!ar9003_hw_solve_iq_cal(ah,
- + sin_2phi_1, cos_2phi_1,
- + sin_2phi_2, cos_2phi_2,
- + mag_a0_d0, phs_a0_d0,
- + mag_a1_d0,
- + phs_a1_d0, solved_eq)) {
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Call to ar9003_hw_solve_iq_cal() failed.\n");
- + return false;
- + }
- +
- + mag_tx = solved_eq[0];
- + phs_tx = solved_eq[1];
- + mag_rx = solved_eq[2];
- + phs_rx = solved_eq[3];
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "chain %d: mag mismatch=%d phase mismatch=%d\n",
- + chain_idx, mag_tx/res_scale, phs_tx/res_scale);
- +
- + if (res_scale == mag_tx) {
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Divide by 0: mag_tx=%d, res_scale=%d\n",
- + mag_tx, res_scale);
- + return false;
- + }
- +
- + /* calculate and quantize Tx IQ correction factor */
- + mag_corr_tx = (mag_tx * res_scale) / (res_scale - mag_tx);
- + phs_corr_tx = -phs_tx;
- +
- + q_q_coff = (mag_corr_tx * 128 / res_scale);
- + q_i_coff = (phs_corr_tx * 256 / res_scale);
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "tx chain %d: mag corr=%d phase corr=%d\n",
- + chain_idx, q_q_coff, q_i_coff);
- +
- + if (q_i_coff < -63)
- + q_i_coff = -63;
- + if (q_i_coff > 63)
- + q_i_coff = 63;
- + if (q_q_coff < -63)
- + q_q_coff = -63;
- + if (q_q_coff > 63)
- + q_q_coff = 63;
- +
- + iqc_coeff[0] = (q_q_coff * 128) + q_i_coff;
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "tx chain %d: iq corr coeff=%x\n",
- + chain_idx, iqc_coeff[0]);
- +
- + if (-mag_rx == res_scale) {
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Divide by 0: mag_rx=%d, res_scale=%d\n",
- + mag_rx, res_scale);
- + return false;
- + }
- +
- + /* calculate and quantize Rx IQ correction factors */
- + mag_corr_rx = (-mag_rx * res_scale) / (res_scale + mag_rx);
- + phs_corr_rx = -phs_rx;
- +
- + q_q_coff = (mag_corr_rx * 128 / res_scale);
- + q_i_coff = (phs_corr_rx * 256 / res_scale);
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "rx chain %d: mag corr=%d phase corr=%d\n",
- + chain_idx, q_q_coff, q_i_coff);
- +
- + if (q_i_coff < -63)
- + q_i_coff = -63;
- + if (q_i_coff > 63)
- + q_i_coff = 63;
- + if (q_q_coff < -63)
- + q_q_coff = -63;
- + if (q_q_coff > 63)
- + q_q_coff = 63;
- +
- + iqc_coeff[1] = (q_q_coff * 128) + q_i_coff;
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "rx chain %d: iq corr coeff=%x\n",
- + chain_idx, iqc_coeff[1]);
- +
- + return true;
- +}
- +
- +static void ar9003_hw_tx_iq_cal(struct ath_hw *ah)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- + const u32 txiqcal_status[AR9300_MAX_CHAINS] = {
- + AR_PHY_TX_IQCAL_STATUS_B0,
- + AR_PHY_TX_IQCAL_STATUS_B1,
- + AR_PHY_TX_IQCAL_STATUS_B2,
- + };
- + const u32 tx_corr_coeff[AR9300_MAX_CHAINS] = {
- + AR_PHY_TX_IQCAL_CORR_COEFF_01_B0,
- + AR_PHY_TX_IQCAL_CORR_COEFF_01_B1,
- + AR_PHY_TX_IQCAL_CORR_COEFF_01_B2,
- + };
- + const u32 rx_corr[AR9300_MAX_CHAINS] = {
- + AR_PHY_RX_IQCAL_CORR_B0,
- + AR_PHY_RX_IQCAL_CORR_B1,
- + AR_PHY_RX_IQCAL_CORR_B2,
- + };
- + const u_int32_t chan_info_tab[] = {
- + AR_PHY_CHAN_INFO_TAB_0,
- + AR_PHY_CHAN_INFO_TAB_1,
- + AR_PHY_CHAN_INFO_TAB_2,
- + };
- + s32 iq_res[6];
- + s32 iqc_coeff[2];
- + s32 i, j;
- + u32 num_chains = 0;
- +
- + for (i = 0; i < AR9300_MAX_CHAINS; i++) {
- + if (ah->txchainmask & (1 << i))
- + num_chains++;
- + }
- +
- + REG_RMW_FIELD(ah, AR_PHY_TX_IQCAL_CONTROL_1,
- + AR_PHY_TX_IQCAQL_CONTROL_1_IQCORR_I_Q_COFF_DELPT,
- + DELPT);
- + REG_RMW_FIELD(ah, AR_PHY_TX_IQCAL_START,
- + AR_PHY_TX_IQCAL_START_DO_CAL,
- + AR_PHY_TX_IQCAL_START_DO_CAL);
- +
- + if (!ath9k_hw_wait(ah, AR_PHY_TX_IQCAL_START,
- + AR_PHY_TX_IQCAL_START_DO_CAL,
- + 0, AH_WAIT_TIMEOUT)) {
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Tx IQ Cal not complete.\n");
- + goto TX_IQ_CAL_FAILED;
- + }
- +
- + for (i = 0; i < num_chains; i++) {
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Doing Tx IQ Cal for chain %d.\n", i);
- +
- + if (REG_READ(ah, txiqcal_status[i]) &
- + AR_PHY_TX_IQCAL_STATUS_FAILED) {
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Tx IQ Cal failed for chain %d.\n", i);
- + goto TX_IQ_CAL_FAILED;
- + }
- +
- + for (j = 0; j < 3; j++) {
- + u_int8_t idx = 2 * j,
- + offset = 4 * j;
- +
- + REG_RMW_FIELD(ah, AR_PHY_CHAN_INFO_MEMORY,
- + AR_PHY_CHAN_INFO_TAB_S2_READ, 0);
- +
- + /* 32 bits */
- + iq_res[idx] = REG_READ(ah, chan_info_tab[i] + offset);
- +
- + REG_RMW_FIELD(ah, AR_PHY_CHAN_INFO_MEMORY,
- + AR_PHY_CHAN_INFO_TAB_S2_READ, 1);
- +
- + /* 16 bits */
- + iq_res[idx+1] = 0xffff & REG_READ(ah, chan_info_tab[i] + offset);
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "IQ RES[%d]=0x%x IQ_RES[%d]=0x%x\n",
- + idx, iq_res[idx], idx+1, iq_res[idx+1]);
- + }
- +
- + if (!ar9003_hw_calc_iq_corr(ah, i, iq_res, iqc_coeff)) {
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "Failed in calculation of IQ correction.\n");
- + goto TX_IQ_CAL_FAILED;
- + }
- +
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "IQ_COEFF[0] = 0x%x IQ_COEFF[1] = 0x%x\n",
- + iqc_coeff[0], iqc_coeff[1]);
- +
- + REG_RMW_FIELD(ah, tx_corr_coeff[i],
- + AR_PHY_TX_IQCAL_CORR_COEFF_01_COEFF_TABLE,
- + iqc_coeff[0]);
- + REG_RMW_FIELD(ah, rx_corr[i],
- + AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_Q_COFF,
- + iqc_coeff[1] >> 7);
- + REG_RMW_FIELD(ah, rx_corr[i],
- + AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_I_COFF,
- + iqc_coeff[1]);
- + }
- +
- + REG_RMW_FIELD(ah, AR_PHY_TX_IQCAL_CONTROL_3,
- + AR_PHY_TX_IQCAL_CONTROL_3_IQCORR_EN, 0x1);
- + REG_RMW_FIELD(ah, AR_PHY_RX_IQCAL_CORR_B0,
- + AR_PHY_RX_IQCAL_CORR_B0_LOOPBACK_IQCORR_EN, 0x1);
- +
- + return;
- +
- +TX_IQ_CAL_FAILED:
- + ath_print(common, ATH_DBG_CALIBRATE, "Tx IQ Cal failed\n");
- + return;
- +}
- +
- +static bool ar9003_hw_init_cal(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + /*
- + * 0x7 = 0b111 , AR9003 needs to be configured for 3-chain mode before
- + * running AGC/TxIQ cals
- + */
- + ar9003_hw_set_chain_masks(ah, 0x7, 0x7);
- +
- + /* Calibrate the AGC */
- + REG_WRITE(ah, AR_PHY_AGC_CONTROL,
- + REG_READ(ah, AR_PHY_AGC_CONTROL) |
- + AR_PHY_AGC_CONTROL_CAL);
- +
- + /* Poll for offset calibration complete */
- + if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL,
- + 0, AH_WAIT_TIMEOUT)) {
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "offset calibration failed to "
- + "complete in 1ms; noisy environment?\n");
- + return false;
- + }
- +
- + /* Do Tx IQ Calibration */
- + ar9003_hw_tx_iq_cal(ah);
- +
- + /* Revert chainmasks to their original values before NF cal */
- + ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask);
- +
- + /* Initialize list pointers */
- + ah->cal_list = ah->cal_list_last = ah->cal_list_curr = NULL;
- +
- + if (ar9003_hw_iscal_supported(ah, IQ_MISMATCH_CAL)) {
- + INIT_CAL(&ah->iq_caldata);
- + INSERT_CAL(ah, &ah->iq_caldata);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "enabling IQ Calibration.\n");
- + }
- +
- + if (ar9003_hw_iscal_supported(ah, TEMP_COMP_CAL)) {
- + INIT_CAL(&ah->tempCompCalData);
- + INSERT_CAL(ah, &ah->tempCompCalData);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "enabling Temperature Compensation Calibration.\n");
- + }
- +
- + /* Initialize current pointer to first element in list */
- + ah->cal_list_curr = ah->cal_list;
- +
- + if (ah->cal_list_curr)
- + ath9k_hw_reset_calibration(ah, ah->cal_list_curr);
- +
- + chan->CalValid = 0;
- +
- + return true;
- +}
- +
- +void ar9003_hw_attach_calib_ops(struct ath_hw *ah)
- +{
- + struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
- + struct ath_hw_ops *ops = ath9k_hw_ops(ah);
- +
- + priv_ops->init_cal_settings = ar9003_hw_init_cal_settings;
- + priv_ops->init_cal = ar9003_hw_init_cal;
- + priv_ops->setup_calibration = ar9003_hw_setup_calibration;
- + priv_ops->iscal_supported = ar9003_hw_iscal_supported;
- +
- + ops->calibrate = ar9003_hw_calibrate;
- +}
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
- @@ -0,0 +1,1841 @@
- +/*
- + * Copyright (c) 2010 Atheros Communications Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +
- +#include "hw.h"
- +#include "ar9003_phy.h"
- +#include "ar9003_eeprom.h"
- +
- +#define COMP_HDR_LEN 4
- +#define COMP_CKSUM_LEN 2
- +
- +#define AR_CH0_TOP (0x00016288)
- +#define AR_CH0_TOP_XPABIASLVL (0x3)
- +#define AR_CH0_TOP_XPABIASLVL_S (8)
- +
- +#define AR_CH0_THERM (0x00016290)
- +#define AR_CH0_THERM_SPARE (0x3f)
- +#define AR_CH0_THERM_SPARE_S (0)
- +
- +#define AR_SWITCH_TABLE_COM_ALL (0xffff)
- +#define AR_SWITCH_TABLE_COM_ALL_S (0)
- +
- +#define AR_SWITCH_TABLE_COM2_ALL (0xffffff)
- +#define AR_SWITCH_TABLE_COM2_ALL_S (0)
- +
- +#define AR_SWITCH_TABLE_ALL (0xfff)
- +#define AR_SWITCH_TABLE_ALL_S (0)
- +
- +static const struct ar9300_eeprom ar9300_default = {
- + .eepromVersion = 2,
- + .templateVersion = 2,
- + .macAddr = {1, 2, 3, 4, 5, 6},
- + .custData = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- + .baseEepHeader = {
- + .regDmn = {0, 0x1f},
- + .txrxMask = 0x77, /* 4 bits tx and 4 bits rx */
- + .opCapFlags = {
- + .opFlags = AR9300_OPFLAGS_11G | AR9300_OPFLAGS_11A,
- + .eepMisc = 0,
- + },
- + .rfSilent = 0,
- + .blueToothOptions = 0,
- + .deviceCap = 0,
- + .deviceType = 5, /* takes lower byte in eeprom location */
- + .pwrTableOffset = AR9300_PWR_TABLE_OFFSET,
- + .params_for_tuning_caps = {0, 0},
- + .featureEnable = 0x0c,
- + /*
- + * bit0 - enable tx temp comp - disabled
- + * bit1 - enable tx volt comp - disabled
- + * bit2 - enable fastClock - enabled
- + * bit3 - enable doubling - enabled
- + * bit4 - enable internal regulator - disabled
- + */
- + .miscConfiguration = 0, /* bit0 - turn down drivestrength */
- + .eepromWriteEnableGpio = 3,
- + .wlanDisableGpio = 0,
- + .wlanLedGpio = 8,
- + .rxBandSelectGpio = 0xff,
- + .txrxgain = 0,
- + .swreg = 0,
- + },
- + .modalHeader2G = {
- + /* ar9300_modal_eep_header 2g */
- + /* 4 idle,t1,t2,b(4 bits per setting) */
- + .antCtrlCommon = 0x110,
- + /* 4 ra1l1, ra2l1, ra1l2, ra2l2, ra12 */
- + .antCtrlCommon2 = 0x22222,
- +
- + /*
- + * antCtrlChain[AR9300_MAX_CHAINS]; 6 idle, t, r,
- + * rx1, rx12, b (2 bits each)
- + */
- + .antCtrlChain = {0x150, 0x150, 0x150},
- +
- + /*
- + * xatten1DB[AR9300_MAX_CHAINS]; 3 xatten1_db
- + * for ar9280 (0xa20c/b20c 5:0)
- + */
- + .xatten1DB = {0, 0, 0},
- +
- + /*
- + * xatten1Margin[AR9300_MAX_CHAINS]; 3 xatten1_margin
- + * for ar9280 (0xa20c/b20c 16:12
- + */
- + .xatten1Margin = {0, 0, 0},
- + .tempSlope = 36,
- + .voltSlope = 0,
- +
- + /*
- + * spurChans[OSPREY_EEPROM_MODAL_SPURS]; spur
- + * channels in usual fbin coding format
- + */
- + .spurChans = {0, 0, 0, 0, 0},
- +
- + /*
- + * noiseFloorThreshCh[AR9300_MAX_CHAINS]; 3 Check
- + * if the register is per chain
- + */
- + .noiseFloorThreshCh = {-1, 0, 0},
- + .ob = {1, 1, 1},/* 3 chain */
- + .db_stage2 = {1, 1, 1}, /* 3 chain */
- + .db_stage3 = {0, 0, 0},
- + .db_stage4 = {0, 0, 0},
- + .xpaBiasLvl = 0,
- + .txFrameToDataStart = 0x0e,
- + .txFrameToPaOn = 0x0e,
- + .txClip = 3, /* 4 bits tx_clip, 4 bits dac_scale_cck */
- + .antennaGain = 0,
- + .switchSettling = 0x2c,
- + .adcDesiredSize = -30,
- + .txEndToXpaOff = 0,
- + .txEndToRxOn = 0x2,
- + .txFrameToXpaOn = 0xe,
- + .thresh62 = 28,
- + .futureModal = { /* [32] */
- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- + },
- + },
- + .calFreqPier2G = {
- + FREQ2FBIN(2412, 1),
- + FREQ2FBIN(2437, 1),
- + FREQ2FBIN(2472, 1),
- + },
- + /* ar9300_cal_data_per_freq_op_loop 2g */
- + .calPierData2G = {
- + {{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}},
- + {{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}},
- + {{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}},
- + },
- + .calTarget_freqbin_Cck = {
- + FREQ2FBIN(2412, 1),
- + FREQ2FBIN(2484, 1),
- + },
- + .calTarget_freqbin_2G = {
- + FREQ2FBIN(2412, 1),
- + FREQ2FBIN(2437, 1),
- + FREQ2FBIN(2472, 1)
- + },
- + .calTarget_freqbin_2GHT20 = {
- + FREQ2FBIN(2412, 1),
- + FREQ2FBIN(2437, 1),
- + FREQ2FBIN(2472, 1)
- + },
- + .calTarget_freqbin_2GHT40 = {
- + FREQ2FBIN(2412, 1),
- + FREQ2FBIN(2437, 1),
- + FREQ2FBIN(2472, 1)
- + },
- + .calTargetPowerCck = {
- + /* 1L-5L,5S,11L,11S */
- + {{36, 36, 36, 36}},
- + {{36, 36, 36, 36}},
- + },
- + .calTargetPower2G = {
- + /* 6-24,36,48,54 */
- + {{32, 32, 28, 24}},
- + {{32, 32, 28, 24}},
- + {{32, 32, 28, 24}},
- + },
- + .calTargetPower2GHT20 = {
- + {{32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20}},
- + {{32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20}},
- + {{32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20}},
- + },
- + .calTargetPower2GHT40 = {
- + {{32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20}},
- + {{32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20}},
- + {{32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20}},
- + },
- + .ctlIndex_2G = {
- + 0x11, 0x12, 0x15, 0x17, 0x41, 0x42,
- + 0x45, 0x47, 0x31, 0x32, 0x35, 0x37,
- + },
- + .ctl_freqbin_2G = {
- + {
- + FREQ2FBIN(2412, 1),
- + FREQ2FBIN(2417, 1),
- + FREQ2FBIN(2457, 1),
- + FREQ2FBIN(2462, 1)
- + },
- + {
- + FREQ2FBIN(2412, 1),
- + FREQ2FBIN(2417, 1),
- + FREQ2FBIN(2462, 1),
- + 0xFF,
- + },
- +
- + {
- + FREQ2FBIN(2412, 1),
- + FREQ2FBIN(2417, 1),
- + FREQ2FBIN(2462, 1),
- + 0xFF,
- + },
- + {
- + FREQ2FBIN(2422, 1),
- + FREQ2FBIN(2427, 1),
- + FREQ2FBIN(2447, 1),
- + FREQ2FBIN(2452, 1)
- + },
- +
- + {
- + /* Data[4].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
- + /* Data[4].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
- + /* Data[4].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
- + /* Data[4].ctlEdges[3].bChannel */ FREQ2FBIN(2484, 1),
- + },
- +
- + {
- + /* Data[5].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
- + /* Data[5].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
- + /* Data[5].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
- + 0,
- + },
- +
- + {
- + /* Data[6].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
- + /* Data[6].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
- + FREQ2FBIN(2472, 1),
- + 0,
- + },
- +
- + {
- + /* Data[7].ctlEdges[0].bChannel */ FREQ2FBIN(2422, 1),
- + /* Data[7].ctlEdges[1].bChannel */ FREQ2FBIN(2427, 1),
- + /* Data[7].ctlEdges[2].bChannel */ FREQ2FBIN(2447, 1),
- + /* Data[7].ctlEdges[3].bChannel */ FREQ2FBIN(2462, 1),
- + },
- +
- + {
- + /* Data[8].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
- + /* Data[8].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
- + /* Data[8].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
- + },
- +
- + {
- + /* Data[9].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
- + /* Data[9].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
- + /* Data[9].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
- + 0
- + },
- +
- + {
- + /* Data[10].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
- + /* Data[10].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
- + /* Data[10].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
- + 0
- + },
- +
- + {
- + /* Data[11].ctlEdges[0].bChannel */ FREQ2FBIN(2422, 1),
- + /* Data[11].ctlEdges[1].bChannel */ FREQ2FBIN(2427, 1),
- + /* Data[11].ctlEdges[2].bChannel */ FREQ2FBIN(2447, 1),
- + /* Data[11].ctlEdges[3].bChannel */
- + FREQ2FBIN(2462, 1),
- + }
- + },
- + .ctlPowerData_2G = {
- + {{{60, 0}, {60, 1}, {60, 0}, {60, 0}}},
- + {{{60, 0}, {60, 1}, {60, 0}, {60, 0}}},
- + {{{60, 1}, {60, 0}, {60, 0}, {60, 1}}},
- +
- + {{{60, 1}, {60, 0}, {0, 0}, {0, 0}}},
- + {{{60, 0}, {60, 1}, {60, 0}, {60, 0}}},
- + {{{60, 0}, {60, 1}, {60, 0}, {60, 0}}},
- +
- + {{{60, 0}, {60, 1}, {60, 1}, {60, 0}}},
- + {{{60, 0}, {60, 1}, {60, 0}, {60, 0}}},
- + {{{60, 0}, {60, 1}, {60, 0}, {60, 0}}},
- +
- + {{{60, 0}, {60, 1}, {60, 0}, {60, 0}}},
- + {{{60, 0}, {60, 1}, {60, 1}, {60, 1}}},
- + },
- + .modalHeader5G = {
- + /* 4 idle,t1,t2,b (4 bits per setting) */
- + .antCtrlCommon = 0x110,
- + /* 4 ra1l1, ra2l1, ra1l2,ra2l2,ra12 */
- + .antCtrlCommon2 = 0x22222,
- + /* antCtrlChain 6 idle, t,r,rx1,rx12,b (2 bits each) */
- + .antCtrlChain = {
- + 0x000, 0x000, 0x000,
- + },
- + /* xatten1DB 3 xatten1_db for AR9280 (0xa20c/b20c 5:0) */
- + .xatten1DB = {0, 0, 0},
- +
- + /*
- + * xatten1Margin[AR9300_MAX_CHAINS]; 3 xatten1_margin
- + * for merlin (0xa20c/b20c 16:12
- + */
- + .xatten1Margin = {0, 0, 0},
- + .tempSlope = 68,
- + .voltSlope = 0,
- + /* spurChans spur channels in usual fbin coding format */
- + .spurChans = {0, 0, 0, 0, 0},
- + /* noiseFloorThreshCh Check if the register is per chain */
- + .noiseFloorThreshCh = {-1, 0, 0},
- + .ob = {3, 3, 3}, /* 3 chain */
- + .db_stage2 = {3, 3, 3}, /* 3 chain */
- + .db_stage3 = {3, 3, 3}, /* doesn't exist for 2G */
- + .db_stage4 = {3, 3, 3}, /* don't exist for 2G */
- + .xpaBiasLvl = 0,
- + .txFrameToDataStart = 0x0e,
- + .txFrameToPaOn = 0x0e,
- + .txClip = 3, /* 4 bits tx_clip, 4 bits dac_scale_cck */
- + .antennaGain = 0,
- + .switchSettling = 0x2d,
- + .adcDesiredSize = -30,
- + .txEndToXpaOff = 0,
- + .txEndToRxOn = 0x2,
- + .txFrameToXpaOn = 0xe,
- + .thresh62 = 28,
- + .futureModal = {
- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- + },
- + },
- + .calFreqPier5G = {
- + FREQ2FBIN(5180, 0),
- + FREQ2FBIN(5220, 0),
- + FREQ2FBIN(5320, 0),
- + FREQ2FBIN(5400, 0),
- + FREQ2FBIN(5500, 0),
- + FREQ2FBIN(5600, 0),
- + FREQ2FBIN(5725, 0),
- + FREQ2FBIN(5825, 0)
- + },
- + .calPierData5G = {
- + {
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + },
- + {
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + },
- + {
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + {0, 0, 0, 0, 0},
- + },
- +
- + },
- + .calTarget_freqbin_5G = {
- + FREQ2FBIN(5180, 0),
- + FREQ2FBIN(5220, 0),
- + FREQ2FBIN(5320, 0),
- + FREQ2FBIN(5400, 0),
- + FREQ2FBIN(5500, 0),
- + FREQ2FBIN(5600, 0),
- + FREQ2FBIN(5725, 0),
- + FREQ2FBIN(5825, 0)
- + },
- + .calTarget_freqbin_5GHT20 = {
- + FREQ2FBIN(5180, 0),
- + FREQ2FBIN(5240, 0),
- + FREQ2FBIN(5320, 0),
- + FREQ2FBIN(5500, 0),
- + FREQ2FBIN(5700, 0),
- + FREQ2FBIN(5745, 0),
- + FREQ2FBIN(5725, 0),
- + FREQ2FBIN(5825, 0)
- + },
- + .calTarget_freqbin_5GHT40 = {
- + FREQ2FBIN(5180, 0),
- + FREQ2FBIN(5240, 0),
- + FREQ2FBIN(5320, 0),
- + FREQ2FBIN(5500, 0),
- + FREQ2FBIN(5700, 0),
- + FREQ2FBIN(5745, 0),
- + FREQ2FBIN(5725, 0),
- + FREQ2FBIN(5825, 0)
- + },
- + .calTargetPower5G = {
- + /* 6-24,36,48,54 */
- + {{20, 20, 20, 10}},
- + {{20, 20, 20, 10}},
- + {{20, 20, 20, 10}},
- + {{20, 20, 20, 10}},
- + {{20, 20, 20, 10}},
- + {{20, 20, 20, 10}},
- + {{20, 20, 20, 10}},
- + {{20, 20, 20, 10}},
- + },
- + .calTargetPower5GHT20 = {
- + /*
- + * 0_8_16,1-3_9-11_17-19,
- + * 4,5,6,7,12,13,14,15,20,21,22,23
- + */
- + {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
- + {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
- + {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
- + {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
- + {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
- + {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
- + {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
- + {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
- + },
- + .calTargetPower5GHT40 = {
- + /*
- + * 0_8_16,1-3_9-11_17-19,
- + * 4,5,6,7,12,13,14,15,20,21,22,23
- + */
- + {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
- + {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
- + {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
- + {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
- + {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
- + {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
- + {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
- + {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
- + },
- + .ctlIndex_5G = {
- + 0x10, 0x16, 0x18, 0x40, 0x46,
- + 0x48, 0x30, 0x36, 0x38
- + },
- + .ctl_freqbin_5G = {
- + {
- + /* Data[0].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
- + /* Data[0].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
- + /* Data[0].ctlEdges[2].bChannel */ FREQ2FBIN(5280, 0),
- + /* Data[0].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
- + /* Data[0].ctlEdges[4].bChannel */ FREQ2FBIN(5600, 0),
- + /* Data[0].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
- + /* Data[0].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
- + /* Data[0].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
- + },
- + {
- + /* Data[1].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
- + /* Data[1].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
- + /* Data[1].ctlEdges[2].bChannel */ FREQ2FBIN(5280, 0),
- + /* Data[1].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
- + /* Data[1].ctlEdges[4].bChannel */ FREQ2FBIN(5520, 0),
- + /* Data[1].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
- + /* Data[1].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
- + /* Data[1].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
- + },
- +
- + {
- + /* Data[2].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
- + /* Data[2].ctlEdges[1].bChannel */ FREQ2FBIN(5230, 0),
- + /* Data[2].ctlEdges[2].bChannel */ FREQ2FBIN(5270, 0),
- + /* Data[2].ctlEdges[3].bChannel */ FREQ2FBIN(5310, 0),
- + /* Data[2].ctlEdges[4].bChannel */ FREQ2FBIN(5510, 0),
- + /* Data[2].ctlEdges[5].bChannel */ FREQ2FBIN(5550, 0),
- + /* Data[2].ctlEdges[6].bChannel */ FREQ2FBIN(5670, 0),
- + /* Data[2].ctlEdges[7].bChannel */ FREQ2FBIN(5755, 0)
- + },
- +
- + {
- + /* Data[3].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
- + /* Data[3].ctlEdges[1].bChannel */ FREQ2FBIN(5200, 0),
- + /* Data[3].ctlEdges[2].bChannel */ FREQ2FBIN(5260, 0),
- + /* Data[3].ctlEdges[3].bChannel */ FREQ2FBIN(5320, 0),
- + /* Data[3].ctlEdges[4].bChannel */ FREQ2FBIN(5500, 0),
- + /* Data[3].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
- + /* Data[3].ctlEdges[6].bChannel */ 0xFF,
- + /* Data[3].ctlEdges[7].bChannel */ 0xFF,
- + },
- +
- + {
- + /* Data[4].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
- + /* Data[4].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
- + /* Data[4].ctlEdges[2].bChannel */ FREQ2FBIN(5500, 0),
- + /* Data[4].ctlEdges[3].bChannel */ FREQ2FBIN(5700, 0),
- + /* Data[4].ctlEdges[4].bChannel */ 0xFF,
- + /* Data[4].ctlEdges[5].bChannel */ 0xFF,
- + /* Data[4].ctlEdges[6].bChannel */ 0xFF,
- + /* Data[4].ctlEdges[7].bChannel */ 0xFF,
- + },
- +
- + {
- + /* Data[5].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
- + /* Data[5].ctlEdges[1].bChannel */ FREQ2FBIN(5270, 0),
- + /* Data[5].ctlEdges[2].bChannel */ FREQ2FBIN(5310, 0),
- + /* Data[5].ctlEdges[3].bChannel */ FREQ2FBIN(5510, 0),
- + /* Data[5].ctlEdges[4].bChannel */ FREQ2FBIN(5590, 0),
- + /* Data[5].ctlEdges[5].bChannel */ FREQ2FBIN(5670, 0),
- + /* Data[5].ctlEdges[6].bChannel */ 0xFF,
- + /* Data[5].ctlEdges[7].bChannel */ 0xFF
- + },
- +
- + {
- + /* Data[6].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
- + /* Data[6].ctlEdges[1].bChannel */ FREQ2FBIN(5200, 0),
- + /* Data[6].ctlEdges[2].bChannel */ FREQ2FBIN(5220, 0),
- + /* Data[6].ctlEdges[3].bChannel */ FREQ2FBIN(5260, 0),
- + /* Data[6].ctlEdges[4].bChannel */ FREQ2FBIN(5500, 0),
- + /* Data[6].ctlEdges[5].bChannel */ FREQ2FBIN(5600, 0),
- + /* Data[6].ctlEdges[6].bChannel */ FREQ2FBIN(5700, 0),
- + /* Data[6].ctlEdges[7].bChannel */ FREQ2FBIN(5745, 0)
- + },
- +
- + {
- + /* Data[7].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
- + /* Data[7].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
- + /* Data[7].ctlEdges[2].bChannel */ FREQ2FBIN(5320, 0),
- + /* Data[7].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
- + /* Data[7].ctlEdges[4].bChannel */ FREQ2FBIN(5560, 0),
- + /* Data[7].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
- + /* Data[7].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
- + /* Data[7].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
- + },
- +
- + {
- + /* Data[8].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
- + /* Data[8].ctlEdges[1].bChannel */ FREQ2FBIN(5230, 0),
- + /* Data[8].ctlEdges[2].bChannel */ FREQ2FBIN(5270, 0),
- + /* Data[8].ctlEdges[3].bChannel */ FREQ2FBIN(5510, 0),
- + /* Data[8].ctlEdges[4].bChannel */ FREQ2FBIN(5550, 0),
- + /* Data[8].ctlEdges[5].bChannel */ FREQ2FBIN(5670, 0),
- + /* Data[8].ctlEdges[6].bChannel */ FREQ2FBIN(5755, 0),
- + /* Data[8].ctlEdges[7].bChannel */ FREQ2FBIN(5795, 0)
- + }
- + },
- + .ctlPowerData_5G = {
- + {
- + {
- + {60, 1}, {60, 1}, {60, 1}, {60, 1},
- + {60, 1}, {60, 1}, {60, 1}, {60, 0},
- + }
- + },
- + {
- + {
- + {60, 1}, {60, 1}, {60, 1}, {60, 1},
- + {60, 1}, {60, 1}, {60, 1}, {60, 0},
- + }
- + },
- + {
- + {
- + {60, 0}, {60, 1}, {60, 0}, {60, 1},
- + {60, 1}, {60, 1}, {60, 1}, {60, 1},
- + }
- + },
- + {
- + {
- + {60, 0}, {60, 1}, {60, 1}, {60, 0},
- + {60, 1}, {60, 0}, {60, 0}, {60, 0},
- + }
- + },
- + {
- + {
- + {60, 1}, {60, 1}, {60, 1}, {60, 0},
- + {60, 0}, {60, 0}, {60, 0}, {60, 0},
- + }
- + },
- + {
- + {
- + {60, 1}, {60, 1}, {60, 1}, {60, 1},
- + {60, 1}, {60, 0}, {60, 0}, {60, 0},
- + }
- + },
- + {
- + {
- + {60, 1}, {60, 1}, {60, 1}, {60, 1},
- + {60, 1}, {60, 1}, {60, 1}, {60, 1},
- + }
- + },
- + {
- + {
- + {60, 1}, {60, 1}, {60, 0}, {60, 1},
- + {60, 1}, {60, 1}, {60, 1}, {60, 0},
- + }
- + },
- + {
- + {
- + {60, 1}, {60, 0}, {60, 1}, {60, 1},
- + {60, 1}, {60, 1}, {60, 0}, {60, 1},
- + }
- + },
- + }
- +};
- +
- +static int ath9k_hw_ar9300_check_eeprom(struct ath_hw *ah)
- +{
- + return 0;
- +}
- +
- +static u32 ath9k_hw_ar9300_get_eeprom(struct ath_hw *ah,
- + enum eeprom_param param)
- +{
- + struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
- + struct ar9300_base_eep_hdr *pBase = &eep->baseEepHeader;
- +
- + switch (param) {
- + case EEP_MAC_LSW:
- + return eep->macAddr[0] << 8 | eep->macAddr[1];
- + case EEP_MAC_MID:
- + return eep->macAddr[2] << 8 | eep->macAddr[3];
- + case EEP_MAC_MSW:
- + return eep->macAddr[4] << 8 | eep->macAddr[5];
- + case EEP_REG_0:
- + return pBase->regDmn[0];
- + case EEP_REG_1:
- + return pBase->regDmn[1];
- + case EEP_OP_CAP:
- + return pBase->deviceCap;
- + case EEP_OP_MODE:
- + return pBase->opCapFlags.opFlags;
- + case EEP_RF_SILENT:
- + return pBase->rfSilent;
- + case EEP_TX_MASK:
- + return (pBase->txrxMask >> 4) & 0xf;
- + case EEP_RX_MASK:
- + return pBase->txrxMask & 0xf;
- + case EEP_DRIVE_STRENGTH:
- +#define AR9300_EEP_BASE_DRIV_STRENGTH 0x1
- + return pBase->miscConfiguration & AR9300_EEP_BASE_DRIV_STRENGTH;
- + case EEP_INTERNAL_REGULATOR:
- + /* Bit 4 is internal regulator flag */
- + return ((pBase->featureEnable & 0x10) >> 4);
- + case EEP_SWREG:
- + return (pBase->swreg);
- + default:
- + return 0;
- + }
- +}
- +
- +#ifdef __BIG_ENDIAN
- +static void ar9300_swap_eeprom(struct ar9300_eeprom *eep)
- +{
- + u32 dword;
- + u16 word;
- + int i;
- +
- + word = swab16(eep->baseEepHeader.regDmn[0]);
- + eep->baseEepHeader.regDmn[0] = word;
- +
- + word = swab16(eep->baseEepHeader.regDmn[1]);
- + eep->baseEepHeader.regDmn[1] = word;
- +
- + dword = swab32(eep->modalHeader2G.antCtrlCommon);
- + eep->modalHeader2G.antCtrlCommon = dword;
- +
- + dword = swab32(eep->modalHeader2G.antCtrlCommon2);
- + eep->modalHeader2G.antCtrlCommon2 = dword;
- +
- + dword = swab32(eep->modalHeader5G.antCtrlCommon);
- + eep->modalHeader5G.antCtrlCommon = dword;
- +
- + dword = swab32(eep->modalHeader5G.antCtrlCommon2);
- + eep->modalHeader5G.antCtrlCommon2 = dword;
- +
- + for (i = 0; i < AR9300_MAX_CHAINS; i++) {
- + word = swab16(eep->modalHeader2G.antCtrlChain[i]);
- + eep->modalHeader2G.antCtrlChain[i] = word;
- +
- + word = swab16(eep->modalHeader5G.antCtrlChain[i]);
- + eep->modalHeader5G.antCtrlChain[i] = word;
- + }
- +}
- +#endif
- +
- +static bool ar9300_hw_read_eeprom(struct ath_hw *ah,
- + long address, u8 * buffer, int many)
- +{
- + int i;
- + u8 value[2];
- + unsigned long eepAddr;
- + unsigned long byteAddr;
- + u16 *svalue;
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + if ((address < 0) || ((address + many) > AR9300_EEPROM_SIZE - 1)) {
- + ath_print(common, ATH_DBG_EEPROM,
- + "eeprom address not in range \n");
- + return false;
- + }
- +
- + for (i = 0; i < many; i++) {
- + eepAddr = (u16) (address + i) / 2;
- + byteAddr = (u16) (address + i) % 2;
- + svalue = (u16 *) value;
- + if (!ath9k_hw_nvram_read(common, eepAddr, svalue)) {
- + ath_print(common, ATH_DBG_EEPROM,
- + "unable to read eeprom region\n");
- + return false;
- + }
- + *svalue = le16_to_cpu(*svalue);
- + buffer[i] = value[byteAddr];
- + }
- +
- + return true;
- +}
- +
- +static bool ar9300_read_eeprom(struct ath_hw *ah,
- + int address, u8 * buffer, int many)
- +{
- + int it;
- +
- + for (it = 0; it < many; it++)
- + if (!ar9300_hw_read_eeprom(ah, (address - it), (buffer + it), 1))
- + return false;
- + return true;
- +}
- +
- +static void ar9300_comp_hdr_unpack(u8 * best, int *code, int *reference,
- + int *length, int *major, int *minor)
- +{
- + unsigned long value[4];
- +
- + value[0] = best[0];
- + value[1] = best[1];
- + value[2] = best[2];
- + value[3] = best[3];
- + *code = ((value[0] >> 5) & 0x0007);
- + *reference = (value[0] & 0x001f) | ((value[1] >> 2) & 0x0020);
- + *length = ((value[1] << 4) & 0x07f0) | ((value[2] >> 4) & 0x000f);
- + *major = (value[2] & 0x000f);
- + *minor = (value[3] & 0x00ff);
- +}
- +
- +static u16 ar9300_comp_cksum(u8 * data, int dsize)
- +{
- + int it, checksum = 0;
- +
- + for (it = 0; it < dsize; it++) {
- + checksum += data[it];
- + checksum &= 0xffff;
- + }
- +
- + return checksum;
- +}
- +
- +static bool ar9300_uncompress_block(struct ath_hw *ah,
- + u8 *mptr,
- + int mdataSize,
- + u8 *block,
- + int size)
- +{
- + int it;
- + int spot;
- + int offset;
- + int length;
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + spot = 0;
- +
- + for (it = 0; it < size; it += (length+2)) {
- + offset = block[it];
- + offset &= 0xff;
- + spot += offset;
- + length = block[it+1];
- + length &= 0xff;
- +
- + if (length > 0 && spot >= 0 && spot+length < mdataSize) {
- + ath_print(common, ATH_DBG_EEPROM,
- + "Restore at %d: spot=%d offset=%d length=%d\n",
- + it, spot, offset, length);
- + memcpy(&mptr[spot],&block[it+2],length);
- + spot += length;
- + } else if (length > 0) {
- + ath_print(common, ATH_DBG_EEPROM,
- + "Bad restore at %d: spot=%d offset=%d length=%d\n",
- + it, spot, offset, length);
- + return false;
- + }
- + }
- + return true;
- +}
- +
- +static int ar9300_compress_decision(struct ath_hw *ah,
- + int it,
- + int code,
- + int reference,
- + u8 * mptr,
- + u8 * word, int length, int mdata_size)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- + u8 *dptr;
- +
- + switch (code) {
- + case _CompressNone:
- + if (length != mdata_size) {
- + ath_print(common, ATH_DBG_EEPROM,
- + "EEPROM structure size mismatch"
- + "memory=%d eeprom=%d\n", mdata_size, length);
- + return -1;
- + }
- + memcpy(mptr, (u8 *) (word + COMP_HDR_LEN), length);
- + ath_print(common, ATH_DBG_EEPROM, "restored eeprom %d:"
- + " uncompressed, length %d\n", it, length);
- + break;
- + case _CompressBlock:
- + if (reference == 0) {
- + dptr = mptr;
- + } else {
- + if (reference != 2) {
- + ath_print(common, ATH_DBG_EEPROM,
- + "cant find reference eeprom"
- + "struct %d\n", reference);
- + return -1;
- + }
- + memcpy(mptr, &ar9300_default, mdata_size);
- + }
- + ath_print(common, ATH_DBG_EEPROM,
- + "restore eeprom %d: block, reference %d,"
- + " length %d\n", it, reference, length);
- + ar9300_uncompress_block(ah, mptr, mdata_size,
- + (u8 *) (word + COMP_HDR_LEN), length);
- + break;
- + default:
- + ath_print(common, ATH_DBG_EEPROM, "unknown compression"
- + " code %d\n", code);
- + return -1;
- + }
- + return 0;
- +}
- +
- +/*
- + * Read the configuration data from the eeprom.
- + * The data can be put in any specified memory buffer.
- + *
- + * Returns -1 on error.
- + * Returns address of next memory location on success.
- + */
- +static int ar9300_eeprom_restore_internal(struct ath_hw *ah,
- + u8 * mptr, int mdata_size)
- +{
- +#define MDEFAULT 15
- +#define MSTATE 100
- + int cptr;
- + u8 *word;
- + int code;
- + int reference, length, major, minor;
- + int osize;
- + int it;
- + u16 checksum, mchecksum;
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + word = kzalloc(2048, GFP_KERNEL);
- + if (!word)
- + return -1;
- +
- + memcpy(mptr, &ar9300_default, mdata_size);
- +
- + cptr = AR9300_BASE_ADDR;
- + for (it = 0; it < MSTATE; it++) {
- + if (!ar9300_read_eeprom(ah, cptr, word, COMP_HDR_LEN))
- + goto fail;
- +
- + if ((word[0] == 0 && word[1] == 0 && word[2] == 0 &&
- + word[3] == 0) || (word[0] == 0xff && word[1] == 0xff
- + && word[2] == 0xff && word[3] == 0xff))
- + break;
- +
- + ar9300_comp_hdr_unpack(word, &code, &reference,
- + &length, &major, &minor);
- + ath_print(common, ATH_DBG_EEPROM,
- + "Found block at %x: code=%d ref=%d"
- + "length=%d major=%d minor=%d\n", cptr, code,
- + reference, length, major, minor);
- + if (length >= 1024) {
- + ath_print(common, ATH_DBG_EEPROM,
- + "Skipping bad header\n");
- + cptr -= COMP_HDR_LEN;
- + continue;
- + }
- +
- + osize = length;
- + ar9300_read_eeprom(ah, cptr, word,
- + COMP_HDR_LEN + osize + COMP_CKSUM_LEN);
- + checksum = ar9300_comp_cksum(&word[COMP_HDR_LEN], length);
- + mchecksum = word[COMP_HDR_LEN + osize] |
- + (word[COMP_HDR_LEN + osize + 1] << 8);
- + ath_print(common, ATH_DBG_EEPROM,
- + "checksum %x %x\n", checksum, mchecksum);
- + if (checksum == mchecksum) {
- + ar9300_compress_decision(ah, it, code, reference, mptr,
- + word, length, mdata_size);
- + } else {
- + ath_print(common, ATH_DBG_EEPROM,
- + "skipping block with bad checksum\n");
- + }
- + cptr -= (COMP_HDR_LEN + osize + COMP_CKSUM_LEN);
- + }
- +
- + kfree(word);
- + return cptr;
- +
- +fail:
- + kfree(word);
- + return -1;
- +}
- +
- +/*
- + * Restore the configuration structure by reading the eeprom.
- + * This function destroys any existing in-memory structure
- + * content.
- + */
- +static bool ath9k_hw_ar9300_fill_eeprom(struct ath_hw *ah)
- +{
- + u8 *mptr = NULL;
- + int mdata_size;
- +
- + mptr = (u8 *) & ah->eeprom.ar9300_eep;
- + mdata_size = sizeof(struct ar9300_eeprom);
- +
- + if (mptr && mdata_size > 0) {
- + /* At this point, mptr points to the eeprom data structure
- + * in it's "default" state. If this is big endian, swap the
- + * data structures back to "little endian"
- + */
- + /* First swap, default to Little Endian */
- +#ifdef __BIG_ENDIAN
- + ar9300_swap_eeprom((struct ar9300_eeprom *)mptr);
- +#endif
- + if (ar9300_eeprom_restore_internal(ah, mptr, mdata_size) >= 0)
- + return true;
- +
- + /* Second Swap, back to Big Endian */
- +#ifdef __BIG_ENDIAN
- + ar9300_swap_eeprom((struct ar9300_eeprom *)mptr);
- +#endif
- + }
- + return false;
- +}
- +
- +/* XXX: review hardware docs */
- +static int ath9k_hw_ar9300_get_eeprom_ver(struct ath_hw *ah)
- +{
- + return ah->eeprom.ar9300_eep.eepromVersion;
- +}
- +
- +/* XXX: could be read from the eepromVersion, not sure yet */
- +static int ath9k_hw_ar9300_get_eeprom_rev(struct ath_hw *ah)
- +{
- + return 0;
- +}
- +
- +static u8 ath9k_hw_ar9300_get_num_ant_config(struct ath_hw *ah,
- + enum ieee80211_band freq_band)
- +{
- + return 1;
- +}
- +
- +static u16 ath9k_hw_ar9300_get_eeprom_antenna_cfg(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + return -EINVAL;
- +}
- +
- +static s32 ar9003_hw_xpa_bias_level_get(struct ath_hw *ah, bool is2ghz)
- +{
- + struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
- +
- + if (is2ghz)
- + return eep->modalHeader2G.xpaBiasLvl;
- + else
- + return eep->modalHeader5G.xpaBiasLvl;
- +}
- +
- +static void ar9003_hw_xpa_bias_level_apply(struct ath_hw *ah, bool is2ghz)
- +{
- + int bias = ar9003_hw_xpa_bias_level_get(ah, is2ghz);
- + REG_RMW_FIELD(ah, AR_CH0_TOP, AR_CH0_TOP_XPABIASLVL, (bias & 0x3));
- + REG_RMW_FIELD(ah, AR_CH0_THERM, AR_CH0_THERM_SPARE,
- + ((bias >> 2) & 0x3));
- +}
- +
- +static u32 ar9003_hw_ant_ctrl_common_get(struct ath_hw *ah, bool is2ghz)
- +{
- + struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
- +
- + if (is2ghz)
- + return eep->modalHeader2G.antCtrlCommon;
- + else
- + return eep->modalHeader5G.antCtrlCommon;
- +}
- +
- +static u32 ar9003_hw_ant_ctrl_common_2_get(struct ath_hw *ah, bool is2ghz)
- +{
- + struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
- +
- + if (is2ghz)
- + return eep->modalHeader2G.antCtrlCommon2;
- + else
- + return eep->modalHeader5G.antCtrlCommon2;
- +}
- +
- +static u16 ar9003_hw_ant_ctrl_chain_get(struct ath_hw *ah, int chain, bool is2ghz)
- +{
- + struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
- +
- + if (chain >= 0 && chain < AR9300_MAX_CHAINS) {
- + if (is2ghz)
- + return eep->modalHeader2G.antCtrlChain[chain];
- + else
- + return eep->modalHeader5G.antCtrlChain[chain];
- + }
- +
- + return 0;
- +}
- +
- +static void ar9003_hw_ant_ctrl_apply(struct ath_hw *ah, bool is2ghz)
- +{
- + u32 value = ar9003_hw_ant_ctrl_common_get(ah, is2ghz);
- + REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM, AR_SWITCH_TABLE_COM_ALL, value);
- +
- + value = ar9003_hw_ant_ctrl_common_2_get(ah, is2ghz);
- + REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM_2, AR_SWITCH_TABLE_COM2_ALL, value);
- +
- + value = ar9003_hw_ant_ctrl_chain_get(ah, 0, is2ghz);
- + REG_RMW_FIELD(ah, AR_PHY_SWITCH_CHAIN_0, AR_SWITCH_TABLE_ALL, value);
- +
- + value = ar9003_hw_ant_ctrl_chain_get(ah, 1, is2ghz);
- + REG_RMW_FIELD(ah, AR_PHY_SWITCH_CHAIN_1, AR_SWITCH_TABLE_ALL, value);
- +
- + value = ar9003_hw_ant_ctrl_chain_get(ah, 2, is2ghz);
- + REG_RMW_FIELD(ah, AR_PHY_SWITCH_CHAIN_2, AR_SWITCH_TABLE_ALL, value);
- +}
- +
- +static void ar9003_hw_drive_strength_apply(struct ath_hw *ah)
- +{
- + int drive_strength;
- + unsigned long reg;
- +
- + drive_strength = ath9k_hw_ar9300_get_eeprom(ah, EEP_DRIVE_STRENGTH);
- +
- + if (!drive_strength)
- + return;
- +
- + reg = REG_READ(ah, AR_PHY_65NM_CH0_BIAS1);
- + reg &= ~0x00ffffc0;
- + reg |= 0x5 << 21;
- + reg |= 0x5 << 18;
- + reg |= 0x5 << 15;
- + reg |= 0x5 << 12;
- + reg |= 0x5 << 9;
- + reg |= 0x5 << 6;
- + REG_WRITE(ah, AR_PHY_65NM_CH0_BIAS1, reg);
- +
- + reg = REG_READ(ah, AR_PHY_65NM_CH0_BIAS2);
- + reg &= ~0xffffffe0;
- + reg |= 0x5 << 29;
- + reg |= 0x5 << 26;
- + reg |= 0x5 << 23;
- + reg |= 0x5 << 20;
- + reg |= 0x5 << 17;
- + reg |= 0x5 << 14;
- + reg |= 0x5 << 11;
- + reg |= 0x5 << 8;
- + reg |= 0x5 << 5;
- + REG_WRITE(ah, AR_PHY_65NM_CH0_BIAS2, reg);
- +
- + reg = REG_READ(ah, AR_PHY_65NM_CH0_BIAS4);
- + reg &= ~0xff800000;
- + reg |= 0x5 << 29;
- + reg |= 0x5 << 26;
- + reg |= 0x5 << 23;
- + REG_WRITE(ah, AR_PHY_65NM_CH0_BIAS4, reg);
- +}
- +
- +static void ar9003_hw_internal_regulator_apply(struct ath_hw *ah)
- +{
- + int internal_regulator =
- + ath9k_hw_ar9300_get_eeprom(ah, EEP_INTERNAL_REGULATOR);
- +
- + if (internal_regulator) {
- + /* Internal regulator is ON. Write swreg register. */
- + int swreg = ath9k_hw_ar9300_get_eeprom(ah, EEP_SWREG);
- + REG_WRITE(ah, AR_RTC_REG_CONTROL1,
- + REG_READ(ah, AR_RTC_REG_CONTROL1) &
- + (~AR_RTC_REG_CONTROL1_SWREG_PROGRAM));
- + REG_WRITE(ah, AR_RTC_REG_CONTROL0, swreg);
- + /* Set REG_CONTROL1.SWREG_PROGRAM */
- + REG_WRITE(ah, AR_RTC_REG_CONTROL1,
- + REG_READ(ah,
- + AR_RTC_REG_CONTROL1) |
- + AR_RTC_REG_CONTROL1_SWREG_PROGRAM);
- + } else {
- + REG_WRITE(ah, AR_RTC_SLEEP_CLK,
- + (REG_READ(ah,
- + AR_RTC_SLEEP_CLK) |
- + AR_RTC_FORCE_SWREG_PRD));
- + }
- +}
- +
- +static void ath9k_hw_ar9300_set_board_values(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + ar9003_hw_xpa_bias_level_apply(ah, IS_CHAN_2GHZ(chan));
- + ar9003_hw_ant_ctrl_apply(ah, IS_CHAN_2GHZ(chan));
- + ar9003_hw_drive_strength_apply(ah);
- + ar9003_hw_internal_regulator_apply(ah);
- +}
- +
- +static void ath9k_hw_ar9300_set_addac(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- +}
- +
- +/*
- + * Returns the interpolated y value corresponding to the specified x value
- + * from the np ordered pairs of data (px,py).
- + * The pairs do not have to be in any order.
- + * If the specified x value is less than any of the px,
- + * the returned y value is equal to the py for the lowest px.
- + * If the specified x value is greater than any of the px,
- + * the returned y value is equal to the py for the highest px.
- + */
- +static int ar9003_hw_power_interpolate(int32_t x,
- + int32_t * px, int32_t * py, u_int16_t np)
- +{
- + int ip = 0;
- + int lx = 0, ly = 0, lhave = 0;
- + int hx = 0, hy = 0, hhave = 0;
- + int dx = 0;
- + int y = 0;
- +
- + lhave = 0;
- + hhave = 0;
- +
- + /* identify best lower and higher x calibration measurement */
- + for (ip = 0; ip < np; ip++) {
- + dx = x - px[ip];
- +
- + /* this measurement is higher than our desired x */
- + if (dx <= 0) {
- + if (!hhave || dx > (x - hx)) {
- + /* new best higher x measurement */
- + hx = px[ip];
- + hy = py[ip];
- + hhave = 1;
- + }
- + }
- + /* this measurement is lower than our desired x */
- + if (dx >= 0) {
- + if (!lhave || dx < (x - lx)) {
- + /* new best lower x measurement */
- + lx = px[ip];
- + ly = py[ip];
- + lhave = 1;
- + }
- + }
- + }
- +
- + /* the low x is good */
- + if (lhave) {
- + /* so is the high x */
- + if (hhave) {
- + /* they're the same, so just pick one */
- + if (hx == lx)
- + y = ly;
- + else /* interpolate */
- + y = ly + (((x - lx) * (hy - ly)) / (hx - lx));
- + } else /* only low is good, use it */
- + y = ly;
- + } else if (hhave) /* only high is good, use it */
- + y = hy;
- + else /* nothing is good,this should never happen unless np=0, ???? */
- + y = -(1 << 30);
- + return y;
- +}
- +
- +static u8 ar9003_hw_eeprom_get_tgt_pwr(struct ath_hw *ah,
- + u16 rateIndex, u16 freq, bool is2GHz)
- +{
- + u16 numPiers, i;
- + s32 targetPowerArray[AR9300_NUM_5G_20_TARGET_POWERS];
- + s32 freqArray[AR9300_NUM_5G_20_TARGET_POWERS];
- + struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
- + struct cal_tgt_pow_legacy *pEepromTargetPwr;
- + u8 *pFreqBin;
- +
- + if (is2GHz) {
- + numPiers = AR9300_NUM_5G_20_TARGET_POWERS;
- + pEepromTargetPwr = eep->calTargetPower2G;
- + pFreqBin = eep->calTarget_freqbin_2G;
- + } else {
- + numPiers = AR9300_NUM_5G_20_TARGET_POWERS;
- + pEepromTargetPwr = eep->calTargetPower5G;
- + pFreqBin = eep->calTarget_freqbin_5G;
- + }
- +
- + /*
- + * create array of channels and targetpower from
- + * targetpower piers stored on eeprom
- + */
- + for (i = 0; i < numPiers; i++) {
- + freqArray[i] = FBIN2FREQ(pFreqBin[i], is2GHz);
- + targetPowerArray[i] = pEepromTargetPwr[i].tPow2x[rateIndex];
- + }
- +
- + /* interpolate to get target power for given frequency */
- + return ((u8) ar9003_hw_power_interpolate((s32) freq,
- + freqArray,
- + targetPowerArray, numPiers));
- +}
- +
- +static u8 ar9003_hw_eeprom_get_ht20_tgt_pwr(struct ath_hw *ah,
- + u16 rateIndex,
- + u16 freq, bool is2GHz)
- +{
- + u16 numPiers, i;
- + s32 targetPowerArray[AR9300_NUM_5G_20_TARGET_POWERS];
- + s32 freqArray[AR9300_NUM_5G_20_TARGET_POWERS];
- + struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
- + struct cal_tgt_pow_ht *pEepromTargetPwr;
- + u8 *pFreqBin;
- +
- + if (is2GHz) {
- + numPiers = AR9300_NUM_5G_20_TARGET_POWERS;
- + pEepromTargetPwr = eep->calTargetPower2GHT20;
- + pFreqBin = eep->calTarget_freqbin_2GHT20;
- + } else {
- + numPiers = AR9300_NUM_5G_20_TARGET_POWERS;
- + pEepromTargetPwr = eep->calTargetPower5GHT20;
- + pFreqBin = eep->calTarget_freqbin_5GHT20;
- + }
- +
- + /*
- + * create array of channels and targetpower
- + * from targetpower piers stored on eeprom
- + */
- + for (i = 0; i < numPiers; i++) {
- + freqArray[i] = FBIN2FREQ(pFreqBin[i], is2GHz);
- + targetPowerArray[i] = pEepromTargetPwr[i].tPow2x[rateIndex];
- + }
- +
- + /* interpolate to get target power for given frequency */
- + return ((u8) ar9003_hw_power_interpolate((s32) freq,
- + freqArray,
- + targetPowerArray, numPiers));
- +}
- +
- +static u8 ar9003_hw_eeprom_get_ht40_tgt_pwr(struct ath_hw *ah,
- + u16 rateIndex,
- + u16 freq, bool is2GHz)
- +{
- + u16 numPiers, i;
- + s32 targetPowerArray[AR9300_NUM_5G_40_TARGET_POWERS];
- + s32 freqArray[AR9300_NUM_5G_40_TARGET_POWERS];
- + struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
- + struct cal_tgt_pow_ht *pEepromTargetPwr;
- + u8 *pFreqBin;
- +
- + if (is2GHz) {
- + numPiers = AR9300_NUM_2G_40_TARGET_POWERS;
- + pEepromTargetPwr = eep->calTargetPower2GHT40;
- + pFreqBin = eep->calTarget_freqbin_2GHT40;
- + } else {
- + numPiers = AR9300_NUM_5G_40_TARGET_POWERS;
- + pEepromTargetPwr = eep->calTargetPower5GHT40;
- + pFreqBin = eep->calTarget_freqbin_5GHT40;
- + }
- +
- + /*
- + * create array of channels and targetpower from
- + * targetpower piers stored on eeprom
- + */
- + for (i = 0; i < numPiers; i++) {
- + freqArray[i] = FBIN2FREQ(pFreqBin[i], is2GHz);
- + targetPowerArray[i] = pEepromTargetPwr[i].tPow2x[rateIndex];
- + }
- +
- + /* interpolate to get target power for given frequency */
- + return ((u8) ar9003_hw_power_interpolate((s32) freq,
- + freqArray,
- + targetPowerArray, numPiers));
- +}
- +
- +static u8 ar9003_hw_eeprom_get_cck_tgt_pwr(struct ath_hw *ah,
- + u16 rateIndex, u16 freq)
- +{
- + u16 numPiers = AR9300_NUM_2G_CCK_TARGET_POWERS, i;
- + s32 targetPowerArray[AR9300_NUM_2G_CCK_TARGET_POWERS];
- + s32 freqArray[AR9300_NUM_2G_CCK_TARGET_POWERS];
- + struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
- + struct cal_tgt_pow_legacy *pEepromTargetPwr = eep->calTargetPowerCck;
- + u8 *pFreqBin = eep->calTarget_freqbin_Cck;
- +
- + /*
- + * create array of channels and targetpower from
- + * targetpower piers stored on eeprom
- + */
- + for (i = 0; i < numPiers; i++) {
- + freqArray[i] = FBIN2FREQ(pFreqBin[i], 1);
- + targetPowerArray[i] = pEepromTargetPwr[i].tPow2x[rateIndex];
- + }
- +
- + /* interpolate to get target power for given frequency */
- + return ((u8) ar9003_hw_power_interpolate((s32) freq,
- + freqArray,
- + targetPowerArray, numPiers));
- +}
- +
- +/* Set tx power registers to array of values passed in */
- +static int ar9003_hw_tx_power_regwrite(struct ath_hw *ah, u8 * pPwrArray)
- +{
- +#define POW_SM(_r, _s) (((_r) & 0x3f) << (_s))
- + /* make sure forced gain is not set */
- + REG_WRITE(ah, 0xa458, 0);
- +
- + /* Write the OFDM power per rate set */
- +
- + /* 6 (LSB), 9, 12, 18 (MSB) */
- + REG_WRITE(ah, 0xa3c0,
- + POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 24) |
- + POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 16) |
- + POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 8) |
- + POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 0));
- +
- + /* 24 (LSB), 36, 48, 54 (MSB) */
- + REG_WRITE(ah, 0xa3c4,
- + POW_SM(pPwrArray[ALL_TARGET_LEGACY_54], 24) |
- + POW_SM(pPwrArray[ALL_TARGET_LEGACY_48], 16) |
- + POW_SM(pPwrArray[ALL_TARGET_LEGACY_36], 8) |
- + POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 0));
- +
- + /* Write the CCK power per rate set */
- +
- + /* 1L (LSB), reserved, 2L, 2S (MSB) */
- + REG_WRITE(ah, 0xa3c8,
- + POW_SM(pPwrArray[ALL_TARGET_LEGACY_1L_5L], 24) |
- + POW_SM(pPwrArray[ALL_TARGET_LEGACY_1L_5L], 16) |
- + // POW_SM(txPowerTimes2, 8) | /* this is reserved for AR9003 */
- + POW_SM(pPwrArray[ALL_TARGET_LEGACY_1L_5L], 0));
- +
- + /* 5.5L (LSB), 5.5S, 11L, 11S (MSB) */
- + REG_WRITE(ah, 0xa3cc,
- + POW_SM(pPwrArray[ALL_TARGET_LEGACY_11S], 24) |
- + POW_SM(pPwrArray[ALL_TARGET_LEGACY_11L], 16) |
- + POW_SM(pPwrArray[ALL_TARGET_LEGACY_5S], 8) |
- + POW_SM(pPwrArray[ALL_TARGET_LEGACY_1L_5L], 0)
- + );
- +
- + /* Write the HT20 power per rate set */
- +
- + /* 0/8/16 (LSB), 1-3/9-11/17-19, 4, 5 (MSB) */
- + REG_WRITE(ah, 0xa3d0,
- + POW_SM(pPwrArray[ALL_TARGET_HT20_5], 24) |
- + POW_SM(pPwrArray[ALL_TARGET_HT20_4], 16) |
- + POW_SM(pPwrArray[ALL_TARGET_HT20_1_3_9_11_17_19], 8) |
- + POW_SM(pPwrArray[ALL_TARGET_HT20_0_8_16], 0)
- + );
- +
- + /* 6 (LSB), 7, 12, 13 (MSB) */
- + REG_WRITE(ah, 0xa3d4,
- + POW_SM(pPwrArray[ALL_TARGET_HT20_13], 24) |
- + POW_SM(pPwrArray[ALL_TARGET_HT20_12], 16) |
- + POW_SM(pPwrArray[ALL_TARGET_HT20_7], 8) |
- + POW_SM(pPwrArray[ALL_TARGET_HT20_6], 0)
- + );
- +
- + /* 14 (LSB), 15, 20, 21 */
- + REG_WRITE(ah, 0xa3e4,
- + POW_SM(pPwrArray[ALL_TARGET_HT20_21], 24) |
- + POW_SM(pPwrArray[ALL_TARGET_HT20_20], 16) |
- + POW_SM(pPwrArray[ALL_TARGET_HT20_15], 8) |
- + POW_SM(pPwrArray[ALL_TARGET_HT20_14], 0)
- + );
- +
- + /* Mixed HT20 and HT40 rates */
- +
- + /* HT20 22 (LSB), HT20 23, HT40 22, HT40 23 (MSB) */
- + REG_WRITE(ah, 0xa3e8,
- + POW_SM(pPwrArray[ALL_TARGET_HT40_23], 24) |
- + POW_SM(pPwrArray[ALL_TARGET_HT40_22], 16) |
- + POW_SM(pPwrArray[ALL_TARGET_HT20_23], 8) |
- + POW_SM(pPwrArray[ALL_TARGET_HT20_22], 0)
- + );
- +
- + /* Write the HT40 power per rate set */
- + // correct PAR difference between HT40 and HT20/LEGACY
- + /* 0/8/16 (LSB), 1-3/9-11/17-19, 4, 5 (MSB) */
- + REG_WRITE(ah, 0xa3d8,
- + POW_SM(pPwrArray[ALL_TARGET_HT40_5], 24) |
- + POW_SM(pPwrArray[ALL_TARGET_HT40_4], 16) |
- + POW_SM(pPwrArray[ALL_TARGET_HT40_1_3_9_11_17_19], 8) |
- + POW_SM(pPwrArray[ALL_TARGET_HT40_0_8_16], 0)
- + );
- +
- + /* 6 (LSB), 7, 12, 13 (MSB) */
- + REG_WRITE(ah, 0xa3dc,
- + POW_SM(pPwrArray[ALL_TARGET_HT40_13], 24) |
- + POW_SM(pPwrArray[ALL_TARGET_HT40_12], 16) |
- + POW_SM(pPwrArray[ALL_TARGET_HT40_7], 8) |
- + POW_SM(pPwrArray[ALL_TARGET_HT40_6], 0)
- + );
- +
- + /* 14 (LSB), 15, 20, 21 */
- + REG_WRITE(ah, 0xa3ec,
- + POW_SM(pPwrArray[ALL_TARGET_HT40_21], 24) |
- + POW_SM(pPwrArray[ALL_TARGET_HT40_20], 16) |
- + POW_SM(pPwrArray[ALL_TARGET_HT40_15], 8) |
- + POW_SM(pPwrArray[ALL_TARGET_HT40_14], 0)
- + );
- +
- + return 0;
- +#undef POW_SM
- +}
- +
- +static void ar9003_hw_set_target_power_eeprom(struct ath_hw *ah, u16 freq)
- +{
- + u8 targetPowerValT2[ar9300RateSize];
- + /* XXX: hard code for now, need to get from eeprom struct */
- + u8 ht40PowerIncForPdadc = 0;
- + bool is2GHz = false;
- + unsigned int i = 0;
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + if (freq < 4000)
- + is2GHz = true;
- +
- + targetPowerValT2[ALL_TARGET_LEGACY_6_24] =
- + ar9003_hw_eeprom_get_tgt_pwr(ah, LEGACY_TARGET_RATE_6_24, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_LEGACY_36] =
- + ar9003_hw_eeprom_get_tgt_pwr(ah, LEGACY_TARGET_RATE_36, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_LEGACY_48] =
- + ar9003_hw_eeprom_get_tgt_pwr(ah, LEGACY_TARGET_RATE_48, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_LEGACY_54] =
- + ar9003_hw_eeprom_get_tgt_pwr(ah, LEGACY_TARGET_RATE_54, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_LEGACY_1L_5L] =
- + ar9003_hw_eeprom_get_cck_tgt_pwr(ah, LEGACY_TARGET_RATE_1L_5L,
- + freq);
- + targetPowerValT2[ALL_TARGET_LEGACY_5S] =
- + ar9003_hw_eeprom_get_cck_tgt_pwr(ah, LEGACY_TARGET_RATE_5S, freq);
- + targetPowerValT2[ALL_TARGET_LEGACY_11L] =
- + ar9003_hw_eeprom_get_cck_tgt_pwr(ah, LEGACY_TARGET_RATE_11L, freq);
- + targetPowerValT2[ALL_TARGET_LEGACY_11S] =
- + ar9003_hw_eeprom_get_cck_tgt_pwr(ah, LEGACY_TARGET_RATE_11S, freq);
- + targetPowerValT2[ALL_TARGET_HT20_0_8_16] =
- + ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_0_8_16, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_HT20_1_3_9_11_17_19] =
- + ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_1_3_9_11_17_19,
- + freq, is2GHz);
- + targetPowerValT2[ALL_TARGET_HT20_4] =
- + ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_4, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_HT20_5] =
- + ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_5, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_HT20_6] =
- + ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_6, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_HT20_7] =
- + ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_7, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_HT20_12] =
- + ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_12, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_HT20_13] =
- + ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_13, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_HT20_14] =
- + ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_14, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_HT20_15] =
- + ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_15, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_HT20_20] =
- + ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_20, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_HT20_21] =
- + ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_21, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_HT20_22] =
- + ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_22, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_HT20_23] =
- + ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_23, freq,
- + is2GHz);
- + targetPowerValT2[ALL_TARGET_HT40_0_8_16] =
- + ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_0_8_16, freq,
- + is2GHz) + ht40PowerIncForPdadc;
- + targetPowerValT2[ALL_TARGET_HT40_1_3_9_11_17_19] =
- + ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_1_3_9_11_17_19,
- + freq,
- + is2GHz) + ht40PowerIncForPdadc;
- + targetPowerValT2[ALL_TARGET_HT40_4] =
- + ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_4, freq,
- + is2GHz) + ht40PowerIncForPdadc;
- + targetPowerValT2[ALL_TARGET_HT40_5] =
- + ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_5, freq,
- + is2GHz) + ht40PowerIncForPdadc;
- + targetPowerValT2[ALL_TARGET_HT40_6] =
- + ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_6, freq,
- + is2GHz) + ht40PowerIncForPdadc;
- + targetPowerValT2[ALL_TARGET_HT40_7] =
- + ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_7, freq,
- + is2GHz) + ht40PowerIncForPdadc;
- + targetPowerValT2[ALL_TARGET_HT40_12] =
- + ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_12, freq,
- + is2GHz) + ht40PowerIncForPdadc;
- + targetPowerValT2[ALL_TARGET_HT40_13] =
- + ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_13, freq,
- + is2GHz) + ht40PowerIncForPdadc;
- + targetPowerValT2[ALL_TARGET_HT40_14] =
- + ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_14, freq,
- + is2GHz) + ht40PowerIncForPdadc;
- + targetPowerValT2[ALL_TARGET_HT40_15] =
- + ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_15, freq,
- + is2GHz) + ht40PowerIncForPdadc;
- + targetPowerValT2[ALL_TARGET_HT40_20] =
- + ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_20, freq,
- + is2GHz) + ht40PowerIncForPdadc;
- + targetPowerValT2[ALL_TARGET_HT40_21] =
- + ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_21, freq,
- + is2GHz) + ht40PowerIncForPdadc;
- + targetPowerValT2[ALL_TARGET_HT40_22] =
- + ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_22, freq,
- + is2GHz) + ht40PowerIncForPdadc;
- + targetPowerValT2[ALL_TARGET_HT40_23] =
- + ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_23, freq,
- + is2GHz) + ht40PowerIncForPdadc;
- +
- + while (i < ar9300RateSize) {
- + ath_print(common, ATH_DBG_EEPROM,
- + "TPC[%02d] 0x%08x ", i, targetPowerValT2[i]);
- + i++;
- +
- + ath_print(common, ATH_DBG_EEPROM,
- + "TPC[%02d] 0x%08x ", i, targetPowerValT2[i]);
- + i++;
- +
- + ath_print(common, ATH_DBG_EEPROM,
- + "TPC[%02d] 0x%08x ", i, targetPowerValT2[i]);
- + i++;
- +
- + ath_print(common, ATH_DBG_EEPROM,
- + "TPC[%02d] 0x%08x \n", i, targetPowerValT2[i]);
- + i++;
- + }
- +
- + /* Write target power array to registers */
- + ar9003_hw_tx_power_regwrite(ah, targetPowerValT2);
- +}
- +
- +static int ar9003_hw_cal_pier_get(struct ath_hw *ah,
- + int mode,
- + int ipier,
- + int ichain,
- + int *pfrequency,
- + int *pcorrection,
- + int *ptemperature, int *pvoltage)
- +{
- + u8 *pCalPier;
- + struct ar9300_cal_data_per_freq_op_loop *pCalPierStruct;
- + int is2GHz;
- + struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + if (ichain >= AR9300_MAX_CHAINS) {
- + ath_print(common, ATH_DBG_EEPROM,
- + "Invalid chain index, must be less than %d\n",
- + AR9300_MAX_CHAINS);
- + return -1;
- + }
- +
- + if (mode) { /* 5GHz */
- + if (ipier >= AR9300_NUM_5G_CAL_PIERS) {
- + ath_print(common, ATH_DBG_EEPROM,
- + "Invalid 5GHz cal pier index, must be less than %d\n",
- + AR9300_NUM_5G_CAL_PIERS);
- + return -1;
- + }
- + pCalPier = &(eep->calFreqPier5G[ipier]);
- + pCalPierStruct = &(eep->calPierData5G[ichain][ipier]);
- + is2GHz = 0;
- + } else {
- + if (ipier >= AR9300_NUM_2G_CAL_PIERS) {
- + ath_print(common, ATH_DBG_EEPROM,
- + "Invalid 2GHz cal pier index, must "
- + "be less than %d\n", AR9300_NUM_2G_CAL_PIERS);
- + return -1;
- + }
- +
- + pCalPier = &(eep->calFreqPier2G[ipier]);
- + pCalPierStruct = &(eep->calPierData2G[ichain][ipier]);
- + is2GHz = 1;
- + }
- +
- + *pfrequency = FBIN2FREQ(*pCalPier, is2GHz);
- + *pcorrection = pCalPierStruct->refPower;
- + *ptemperature = pCalPierStruct->tempMeas;
- + *pvoltage = pCalPierStruct->voltMeas;
- +
- + return 0;
- +}
- +
- +static int ar9003_hw_power_control_override(struct ath_hw *ah,
- + int frequency,
- + int *correction,
- + int *voltage, int *temperature)
- +{
- + int tempSlope = 0;
- + struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
- +
- + REG_RMW(ah, AR_PHY_TPC_11_B0,
- + (correction[0] << AR_PHY_TPC_OLPC_GAIN_DELTA_S),
- + AR_PHY_TPC_OLPC_GAIN_DELTA);
- + REG_RMW(ah, AR_PHY_TPC_11_B1,
- + (correction[1] << AR_PHY_TPC_OLPC_GAIN_DELTA_S),
- + AR_PHY_TPC_OLPC_GAIN_DELTA);
- + REG_RMW(ah, AR_PHY_TPC_11_B2,
- + (correction[2] << AR_PHY_TPC_OLPC_GAIN_DELTA_S),
- + AR_PHY_TPC_OLPC_GAIN_DELTA);
- +
- + /* enable open loop power control on chip */
- + REG_RMW(ah, AR_PHY_TPC_6_B0,
- + (3 << AR_PHY_TPC_6_ERROR_EST_MODE_S),
- + AR_PHY_TPC_6_ERROR_EST_MODE);
- + REG_RMW(ah, AR_PHY_TPC_6_B1,
- + (3 << AR_PHY_TPC_6_ERROR_EST_MODE_S),
- + AR_PHY_TPC_6_ERROR_EST_MODE);
- + REG_RMW(ah, AR_PHY_TPC_6_B2,
- + (3 << AR_PHY_TPC_6_ERROR_EST_MODE_S),
- + AR_PHY_TPC_6_ERROR_EST_MODE);
- +
- + /*
- + * enable temperature compensation
- + * Need to use register names
- + */
- + if (frequency < 4000)
- + tempSlope = eep->modalHeader2G.tempSlope;
- + else
- + tempSlope = eep->modalHeader5G.tempSlope;
- +
- + REG_RMW_FIELD(ah, AR_PHY_TPC_19, AR_PHY_TPC_19_ALPHA_THERM, tempSlope);
- + REG_RMW_FIELD(ah, AR_PHY_TPC_18, AR_PHY_TPC_18_THERM_CAL_VALUE,
- + temperature[0]);
- +
- + return 0;
- +}
- +
- +/* Apply the recorded correction values. */
- +static int ar9003_hw_calibration_apply(struct ath_hw *ah, int frequency)
- +{
- + int ichain, ipier, npier;
- + int mode;
- + int lfrequency[AR9300_MAX_CHAINS],
- + lcorrection[AR9300_MAX_CHAINS],
- + ltemperature[AR9300_MAX_CHAINS], lvoltage[AR9300_MAX_CHAINS];
- + int hfrequency[AR9300_MAX_CHAINS],
- + hcorrection[AR9300_MAX_CHAINS],
- + htemperature[AR9300_MAX_CHAINS], hvoltage[AR9300_MAX_CHAINS];
- + int fdiff;
- + int correction[AR9300_MAX_CHAINS],
- + voltage[AR9300_MAX_CHAINS], temperature[AR9300_MAX_CHAINS];
- + int pfrequency, pcorrection, ptemperature, pvoltage;
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + mode = (frequency >= 4000);
- + if (mode)
- + npier = AR9300_NUM_5G_CAL_PIERS;
- + else
- + npier = AR9300_NUM_2G_CAL_PIERS;
- +
- + for (ichain = 0; ichain < AR9300_MAX_CHAINS; ichain++) {
- + lfrequency[ichain] = 0;
- + hfrequency[ichain] = 100000;
- + }
- + /* identify best lower and higher frequency calibration measurement */
- + for (ichain = 0; ichain < AR9300_MAX_CHAINS; ichain++) {
- + for (ipier = 0; ipier < npier; ipier++) {
- + if (!ar9003_hw_cal_pier_get(ah, mode, ipier, ichain,
- + &pfrequency, &pcorrection,
- + &ptemperature, &pvoltage)) {
- + fdiff = frequency - pfrequency;
- +
- + /*
- + * this measurement is higher than
- + * our desired frequency
- + */
- + if (fdiff <= 0) {
- + if (hfrequency[ichain] <= 0 ||
- + hfrequency[ichain] >= 100000 ||
- + fdiff >
- + (frequency - hfrequency[ichain])) {
- + /* new best higher frequency measurement */
- + hfrequency[ichain] = pfrequency;
- + hcorrection[ichain] =
- + pcorrection;
- + htemperature[ichain] =
- + ptemperature;
- + hvoltage[ichain] = pvoltage;
- + }
- + }
- + if (fdiff >= 0) {
- + if (lfrequency[ichain] <= 0
- + || fdiff <
- + (frequency - lfrequency[ichain])) {
- + /* new best lower frequency measurement */
- + lfrequency[ichain] = pfrequency;
- + lcorrection[ichain] =
- + pcorrection;
- + ltemperature[ichain] =
- + ptemperature;
- + lvoltage[ichain] = pvoltage;
- + }
- + }
- + }
- + }
- + }
- +
- + /* interpolate */
- + for (ichain = 0; ichain < AR9300_MAX_CHAINS; ichain++) {
- + ath_print(common, ATH_DBG_EEPROM,
- + "ch=%d f=%d low=%d %d h=%d %d\n",
- + ichain, frequency, lfrequency[ichain],
- + lcorrection[ichain], hfrequency[ichain],
- + hcorrection[ichain]);
- + /* they're the same, so just pick one */
- + if (hfrequency[ichain] == lfrequency[ichain]) {
- + correction[ichain] = lcorrection[ichain];
- + voltage[ichain] = lvoltage[ichain];
- + temperature[ichain] = ltemperature[ichain];
- + }
- + /* the low frequency is good */
- + else if (frequency - lfrequency[ichain] < 1000) {
- + /* so is the high frequency, interpolate */
- + if (hfrequency[ichain] - frequency < 1000) {
- +
- + correction[ichain] = lcorrection[ichain] +
- + (((frequency - lfrequency[ichain]) *
- + (hcorrection[ichain] -
- + lcorrection[ichain])) /
- + (hfrequency[ichain] - lfrequency[ichain]));
- +
- + temperature[ichain] = ltemperature[ichain] +
- + (((frequency - lfrequency[ichain]) *
- + (htemperature[ichain] -
- + ltemperature[ichain])) /
- + (hfrequency[ichain] - lfrequency[ichain]));
- +
- + voltage[ichain] =
- + lvoltage[ichain] +
- + (((frequency -
- + lfrequency[ichain]) * (hvoltage[ichain] -
- + lvoltage[ichain]))
- + / (hfrequency[ichain] -
- + lfrequency[ichain]));
- + }
- + /* only low is good, use it */
- + else {
- + correction[ichain] = lcorrection[ichain];
- + temperature[ichain] = ltemperature[ichain];
- + voltage[ichain] = lvoltage[ichain];
- + }
- + }
- + /* only high is good, use it */
- + else if (hfrequency[ichain] - frequency < 1000) {
- + correction[ichain] = hcorrection[ichain];
- + temperature[ichain] = htemperature[ichain];
- + voltage[ichain] = hvoltage[ichain];
- + } else { /* nothing is good, presume 0???? */
- + correction[ichain] = 0;
- + temperature[ichain] = 0;
- + voltage[ichain] = 0;
- + }
- + }
- +
- + ar9003_hw_power_control_override(ah, frequency, correction, voltage,
- + temperature);
- +
- + ath_print(common, ATH_DBG_EEPROM,
- + "for frequency=%d, calibration correction = %d %d %d\n",
- + frequency, correction[0], correction[1], correction[2]);
- +
- + return 0;
- +}
- +
- +static void ath9k_hw_ar9300_set_txpower(struct ath_hw *ah,
- + struct ath9k_channel *chan, u16 cfgCtl,
- + u8 twiceAntennaReduction,
- + u8 twiceMaxRegulatoryPower,
- + u8 powerLimit)
- +{
- + ar9003_hw_set_target_power_eeprom(ah, chan->channel);
- + ar9003_hw_calibration_apply(ah, chan->channel);
- +}
- +
- +static u16 ath9k_hw_ar9300_get_spur_channel(struct ath_hw *ah,
- + u16 i, bool is2GHz)
- +{
- + return AR_NO_SPUR;
- +}
- +
- +s32 ar9003_hw_get_tx_gain_idx(struct ath_hw *ah)
- +{
- + struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
- +
- + return (eep->baseEepHeader.txrxgain >> 4) & 0xf; /* bits 7:4 */
- +}
- +
- +s32 ar9003_hw_get_rx_gain_idx(struct ath_hw *ah)
- +{
- + struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
- +
- + return (eep->baseEepHeader.txrxgain) & 0xf; /* bits 3:0 */
- +}
- +
- +const struct eeprom_ops eep_ar9300_ops = {
- + .check_eeprom = ath9k_hw_ar9300_check_eeprom,
- + .get_eeprom = ath9k_hw_ar9300_get_eeprom,
- + .fill_eeprom = ath9k_hw_ar9300_fill_eeprom,
- + .get_eeprom_ver = ath9k_hw_ar9300_get_eeprom_ver,
- + .get_eeprom_rev = ath9k_hw_ar9300_get_eeprom_rev,
- + .get_num_ant_config = ath9k_hw_ar9300_get_num_ant_config,
- + .get_eeprom_antenna_cfg = ath9k_hw_ar9300_get_eeprom_antenna_cfg,
- + .set_board_values = ath9k_hw_ar9300_set_board_values,
- + .set_addac = ath9k_hw_ar9300_set_addac,
- + .set_txpower = ath9k_hw_ar9300_set_txpower,
- + .get_spur_channel = ath9k_hw_ar9300_get_spur_channel
- +};
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h
- @@ -0,0 +1,323 @@
- +#ifndef AR9003_EEPROM_H
- +#define AR9003_EEPROM_H
- +
- +#include <linux/types.h>
- +
- +#define AR9300_EEP_VER 0xD000
- +#define AR9300_EEP_VER_MINOR_MASK 0xFFF
- +#define AR9300_EEP_MINOR_VER_1 0x1
- +#define AR9300_EEP_MINOR_VER AR9300_EEP_MINOR_VER_1
- +
- +// 16-bit offset location start of calibration struct
- +#define AR9300_EEP_START_LOC 256
- +#define AR9300_NUM_5G_CAL_PIERS 8
- +#define AR9300_NUM_2G_CAL_PIERS 3
- +#define AR9300_NUM_5G_20_TARGET_POWERS 8
- +#define AR9300_NUM_5G_40_TARGET_POWERS 8
- +#define AR9300_NUM_2G_CCK_TARGET_POWERS 2
- +#define AR9300_NUM_2G_20_TARGET_POWERS 3
- +#define AR9300_NUM_2G_40_TARGET_POWERS 3
- +//#define AR9300_NUM_CTLS 21
- +#define AR9300_NUM_CTLS_5G 9
- +#define AR9300_NUM_CTLS_2G 12
- +#define AR9300_CTL_MODE_M 0xF
- +#define AR9300_NUM_BAND_EDGES_5G 8
- +#define AR9300_NUM_BAND_EDGES_2G 4
- +#define AR9300_NUM_PD_GAINS 4
- +#define AR9300_PD_GAINS_IN_MASK 4
- +#define AR9300_PD_GAIN_ICEPTS 5
- +#define AR9300_EEPROM_MODAL_SPURS 5
- +#define AR9300_MAX_RATE_POWER 63
- +#define AR9300_NUM_PDADC_VALUES 128
- +#define AR9300_NUM_RATES 16
- +#define AR9300_BCHAN_UNUSED 0xFF
- +#define AR9300_MAX_PWR_RANGE_IN_HALF_DB 64
- +#define AR9300_OPFLAGS_11A 0x01
- +#define AR9300_OPFLAGS_11G 0x02
- +#define AR9300_OPFLAGS_5G_HT40 0x04
- +#define AR9300_OPFLAGS_2G_HT40 0x08
- +#define AR9300_OPFLAGS_5G_HT20 0x10
- +#define AR9300_OPFLAGS_2G_HT20 0x20
- +#define AR9300_EEPMISC_BIG_ENDIAN 0x01
- +#define AR9300_EEPMISC_WOW 0x02
- +#define AR9300_CUSTOMER_DATA_SIZE 20
- +
- +#define FREQ2FBIN(x,y) ((y) ? ((x) - 2300) : (((x) - 4800) / 5))
- +#define FBIN2FREQ(x,y) ((y) ? (2300 + x) : (4800 + 5 * x))
- +#define AR9300_MAX_CHAINS 3
- +#define AR9300_ANT_16S 25
- +#define AR9300_FUTURE_MODAL_SZ 6
- +
- +#define AR9300_NUM_ANT_CHAIN_FIELDS 7
- +#define AR9300_NUM_ANT_COMMON_FIELDS 4
- +#define AR9300_SIZE_ANT_CHAIN_FIELD 3
- +#define AR9300_SIZE_ANT_COMMON_FIELD 4
- +#define AR9300_ANT_CHAIN_MASK 0x7
- +#define AR9300_ANT_COMMON_MASK 0xf
- +#define AR9300_CHAIN_0_IDX 0
- +#define AR9300_CHAIN_1_IDX 1
- +#define AR9300_CHAIN_2_IDX 2
- +
- +#define AR928X_NUM_ANT_CHAIN_FIELDS 6
- +#define AR928X_SIZE_ANT_CHAIN_FIELD 2
- +#define AR928X_ANT_CHAIN_MASK 0x3
- +
- +/* Delta from which to start power to pdadc table */
- +/* This offset is used in both open loop and closed loop power control
- + * schemes. In open loop power control, it is not really needed, but for
- + * the "sake of consistency" it was kept. For certain AP designs, this
- + * value is overwritten by the value in the flag "pwrTableOffset" just
- + * before writing the pdadc vs pwr into the chip registers.
- + */
- +#define AR9300_PWR_TABLE_OFFSET 0
- +
- +/* enable flags for voltage and temp compensation */
- +#define ENABLE_TEMP_COMPENSATION 0x01
- +#define ENABLE_VOLT_COMPENSATION 0x02
- +/* byte addressable */
- +#define AR9300_EEPROM_SIZE 16*1024
- +#define FIXED_CCA_THRESHOLD 15
- +
- +#define AR9300_BASE_ADDR 0x3ff
- +
- +enum targetPowerHTRates {
- + HT_TARGET_RATE_0_8_16,
- + HT_TARGET_RATE_1_3_9_11_17_19,
- + HT_TARGET_RATE_4,
- + HT_TARGET_RATE_5,
- + HT_TARGET_RATE_6,
- + HT_TARGET_RATE_7,
- + HT_TARGET_RATE_12,
- + HT_TARGET_RATE_13,
- + HT_TARGET_RATE_14,
- + HT_TARGET_RATE_15,
- + HT_TARGET_RATE_20,
- + HT_TARGET_RATE_21,
- + HT_TARGET_RATE_22,
- + HT_TARGET_RATE_23
- +};
- +
- +enum targetPowerLegacyRates {
- + LEGACY_TARGET_RATE_6_24,
- + LEGACY_TARGET_RATE_36,
- + LEGACY_TARGET_RATE_48,
- + LEGACY_TARGET_RATE_54
- +};
- +
- +enum targetPowerCckRates {
- + LEGACY_TARGET_RATE_1L_5L,
- + LEGACY_TARGET_RATE_5S,
- + LEGACY_TARGET_RATE_11L,
- + LEGACY_TARGET_RATE_11S
- +};
- +
- +enum ar9300_Rates {
- + ALL_TARGET_LEGACY_6_24,
- + ALL_TARGET_LEGACY_36,
- + ALL_TARGET_LEGACY_48,
- + ALL_TARGET_LEGACY_54,
- + ALL_TARGET_LEGACY_1L_5L,
- + ALL_TARGET_LEGACY_5S,
- + ALL_TARGET_LEGACY_11L,
- + ALL_TARGET_LEGACY_11S,
- + ALL_TARGET_HT20_0_8_16,
- + ALL_TARGET_HT20_1_3_9_11_17_19,
- + ALL_TARGET_HT20_4,
- + ALL_TARGET_HT20_5,
- + ALL_TARGET_HT20_6,
- + ALL_TARGET_HT20_7,
- + ALL_TARGET_HT20_12,
- + ALL_TARGET_HT20_13,
- + ALL_TARGET_HT20_14,
- + ALL_TARGET_HT20_15,
- + ALL_TARGET_HT20_20,
- + ALL_TARGET_HT20_21,
- + ALL_TARGET_HT20_22,
- + ALL_TARGET_HT20_23,
- + ALL_TARGET_HT40_0_8_16,
- + ALL_TARGET_HT40_1_3_9_11_17_19,
- + ALL_TARGET_HT40_4,
- + ALL_TARGET_HT40_5,
- + ALL_TARGET_HT40_6,
- + ALL_TARGET_HT40_7,
- + ALL_TARGET_HT40_12,
- + ALL_TARGET_HT40_13,
- + ALL_TARGET_HT40_14,
- + ALL_TARGET_HT40_15,
- + ALL_TARGET_HT40_20,
- + ALL_TARGET_HT40_21,
- + ALL_TARGET_HT40_22,
- + ALL_TARGET_HT40_23,
- + ar9300RateSize,
- +};
- +
- +
- +struct eepFlags {
- + u8 opFlags;
- + u8 eepMisc;
- +} __packed;
- +
- +enum CompressAlgorithm {
- + _CompressNone = 0,
- + _CompressLzma,
- + _CompressPairs,
- + _CompressBlock,
- + _Compress4,
- + _Compress5,
- + _Compress6,
- + _Compress7,
- +};
- +
- +struct ar9300_base_eep_hdr {
- + u16 regDmn[2];
- + /* 4 bits tx and 4 bits rx */
- + u8 txrxMask;
- + struct eepFlags opCapFlags;
- + u8 rfSilent;
- + u8 blueToothOptions;
- + u8 deviceCap;
- + /* takes lower byte in eeprom location */
- + u8 deviceType;
- + /* offset in dB to be added to beginning
- + * of pdadc table in calibration
- + */
- + int8_t pwrTableOffset;
- + u8 params_for_tuning_caps[2];
- + /*
- + * bit0 - enable tx temp comp
- + * bit1 - enable tx volt comp
- + * bit2 - enable fastClock - default to 1
- + * bit3 - enable doubling - default to 1
- + * bit4 - enable internal regulator - default to 1
- + */
- + u8 featureEnable;
- + /* misc flags: bit0 - turn down drivestrength */
- + u8 miscConfiguration;
- + u8 eepromWriteEnableGpio;
- + u8 wlanDisableGpio;
- + u8 wlanLedGpio;
- + u8 rxBandSelectGpio;
- + u8 txrxgain;
- + /* SW controlled internal regulator fields */
- + u32 swreg;
- +} __packed;
- +
- +struct ar9300_modal_eep_header {
- + /* 4 idle, t1, t2, b (4 bits per setting) */
- + u32 antCtrlCommon;
- + /* 4 ra1l1, ra2l1, ra1l2, ra2l2, ra12 */
- + u32 antCtrlCommon2;
- + /* 6 idle, t, r, rx1, rx12, b (2 bits each) */
- + u16 antCtrlChain[AR9300_MAX_CHAINS];
- + /* 3 xatten1_db for AR9280 (0xa20c/b20c 5:0) */
- + u8 xatten1DB[AR9300_MAX_CHAINS];
- + /* 3 xatten1_margin for merlin (0xa20c/b20c 16:12 */
- + u8 xatten1Margin[AR9300_MAX_CHAINS];
- + int8_t tempSlope;
- + int8_t voltSlope;
- + /* spur channels in usual fbin coding format */
- + u8 spurChans[AR9300_EEPROM_MODAL_SPURS];
- + /* 3 Check if the register is per chain */
- + int8_t noiseFloorThreshCh[AR9300_MAX_CHAINS];
- + u8 ob[AR9300_MAX_CHAINS];
- + u8 db_stage2[AR9300_MAX_CHAINS];
- + u8 db_stage3[AR9300_MAX_CHAINS];
- + u8 db_stage4[AR9300_MAX_CHAINS];
- + u8 xpaBiasLvl;
- + u8 txFrameToDataStart;
- + u8 txFrameToPaOn;
- + u8 txClip;
- + int8_t antennaGain;
- + u8 switchSettling;
- + int8_t adcDesiredSize;
- + u8 txEndToXpaOff;
- + u8 txEndToRxOn;
- + u8 txFrameToXpaOn;
- + u8 thresh62;
- + u8 futureModal[32];
- +} __packed;
- +
- +struct ar9300_cal_data_per_freq_op_loop {
- + int8_t refPower;
- + /* pdadc voltage at power measurement */
- + u8 voltMeas;
- + /* pcdac used for power measurement */
- + u8 tempMeas;
- + /* range is -60 to -127 create a mapping equation 1db resolution */
- + int8_t rxNoisefloorCal;
- + /*range is same as noisefloor */
- + int8_t rxNoisefloorPower;
- + /* temp measured when noisefloor cal was performed */
- + u8 rxTempMeas;
- +} __packed;
- +
- +struct cal_tgt_pow_legacy {
- + u8 tPow2x[4];
- +} __packed;
- +
- +struct cal_tgt_pow_ht {
- + u8 tPow2x[14];
- +} __packed;
- +
- +struct cal_ctl_edge_pwr {
- + u8 tPower :6,
- + flag :2;
- +} __packed;
- +
- +struct cal_ctl_data_2g {
- + struct cal_ctl_edge_pwr ctlEdges[AR9300_NUM_BAND_EDGES_5G];
- +} __packed;
- +
- +struct cal_ctl_data_5g {
- + struct cal_ctl_edge_pwr ctlEdges[AR9300_NUM_BAND_EDGES_5G];
- +} __packed;
- +
- +struct ar9300_eeprom {
- + u8 eepromVersion;
- + u8 templateVersion;
- + u8 macAddr[6];
- + u8 custData[AR9300_CUSTOMER_DATA_SIZE];
- +
- + struct ar9300_base_eep_hdr baseEepHeader;
- +
- + struct ar9300_modal_eep_header modalHeader2G;
- + u8 calFreqPier2G[AR9300_NUM_2G_CAL_PIERS];
- + struct ar9300_cal_data_per_freq_op_loop
- + calPierData2G[AR9300_MAX_CHAINS][AR9300_NUM_2G_CAL_PIERS];
- + u8 calTarget_freqbin_Cck[AR9300_NUM_2G_CCK_TARGET_POWERS];
- + u8 calTarget_freqbin_2G[AR9300_NUM_2G_20_TARGET_POWERS];
- + u8 calTarget_freqbin_2GHT20[AR9300_NUM_2G_20_TARGET_POWERS];
- + u8 calTarget_freqbin_2GHT40[AR9300_NUM_2G_40_TARGET_POWERS];
- + struct cal_tgt_pow_legacy
- + calTargetPowerCck[AR9300_NUM_2G_CCK_TARGET_POWERS];
- + struct cal_tgt_pow_legacy
- + calTargetPower2G[AR9300_NUM_2G_20_TARGET_POWERS];
- + struct cal_tgt_pow_ht
- + calTargetPower2GHT20[AR9300_NUM_2G_20_TARGET_POWERS];
- + struct cal_tgt_pow_ht
- + calTargetPower2GHT40[AR9300_NUM_2G_40_TARGET_POWERS];
- + u8 ctlIndex_2G[AR9300_NUM_CTLS_2G];
- + u8 ctl_freqbin_2G[AR9300_NUM_CTLS_2G][AR9300_NUM_BAND_EDGES_2G];
- + struct cal_ctl_data_2g ctlPowerData_2G[AR9300_NUM_CTLS_2G];
- + struct ar9300_modal_eep_header modalHeader5G;
- + u8 calFreqPier5G[AR9300_NUM_5G_CAL_PIERS];
- + struct ar9300_cal_data_per_freq_op_loop
- + calPierData5G[AR9300_MAX_CHAINS][AR9300_NUM_5G_CAL_PIERS];
- + u8 calTarget_freqbin_5G[AR9300_NUM_5G_20_TARGET_POWERS];
- + u8 calTarget_freqbin_5GHT20[AR9300_NUM_5G_20_TARGET_POWERS];
- + u8 calTarget_freqbin_5GHT40[AR9300_NUM_5G_40_TARGET_POWERS];
- + struct cal_tgt_pow_legacy
- + calTargetPower5G[AR9300_NUM_5G_20_TARGET_POWERS];
- + struct cal_tgt_pow_ht
- + calTargetPower5GHT20[AR9300_NUM_5G_20_TARGET_POWERS];
- + struct cal_tgt_pow_ht
- + calTargetPower5GHT40[AR9300_NUM_5G_40_TARGET_POWERS];
- + u8 ctlIndex_5G[AR9300_NUM_CTLS_5G];
- + u8 ctl_freqbin_5G[AR9300_NUM_CTLS_5G][AR9300_NUM_BAND_EDGES_5G];
- + struct cal_ctl_data_5g ctlPowerData_5G[AR9300_NUM_CTLS_5G];
- +} __packed;
- +
- +s32 ar9003_hw_get_tx_gain_idx(struct ath_hw *ah);
- +s32 ar9003_hw_get_rx_gain_idx(struct ath_hw *ah);
- +
- +#endif
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
- @@ -0,0 +1,205 @@
- +/*
- + * Copyright (c) 2008-2010 Atheros Communications Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +
- +#include "hw.h"
- +#include "ar9003_initvals.h"
- +
- +/* General hardware code for the AR9003 hadware family */
- +
- +static bool ar9003_hw_macversion_supported(u32 macversion)
- +{
- + switch (macversion) {
- + case AR_SREV_VERSION_9300:
- + return true;
- + default:
- + break;
- + }
- + return false;
- +}
- +
- +/* AR9003 2.0 - new INI format (pre, core, post arrays per subsystem) */
- +/*
- + * XXX: move TX/RX gain INI to its own init_mode_gain_regs after
- + * ensuring it does not affect hardware bring up
- + */
- +static void ar9003_hw_init_mode_regs(struct ath_hw *ah)
- +{
- + /* mac */
- + INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
- + INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
- + ar9300_2p0_mac_core,
- + ARRAY_SIZE(ar9300_2p0_mac_core), 2);
- + INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
- + ar9300_2p0_mac_postamble,
- + ARRAY_SIZE(ar9300_2p0_mac_postamble), 5);
- +
- + /* bb */
- + INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0);
- + INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
- + ar9300_2p0_baseband_core,
- + ARRAY_SIZE(ar9300_2p0_baseband_core), 2);
- + INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
- + ar9300_2p0_baseband_postamble,
- + ARRAY_SIZE(ar9300_2p0_baseband_postamble), 5);
- +
- + /* radio */
- + INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0);
- + INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
- + ar9300_2p0_radio_core,
- + ARRAY_SIZE(ar9300_2p0_radio_core), 2);
- + INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
- + ar9300_2p0_radio_postamble,
- + ARRAY_SIZE(ar9300_2p0_radio_postamble), 5);
- +
- + /* soc */
- + INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
- + ar9300_2p0_soc_preamble,
- + ARRAY_SIZE(ar9300_2p0_soc_preamble), 2);
- + INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0);
- + INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
- + ar9300_2p0_soc_postamble,
- + ARRAY_SIZE(ar9300_2p0_soc_postamble), 5);
- +
- + /* rx/tx gain */
- + INIT_INI_ARRAY(&ah->iniModesRxGain,
- + ar9300Common_rx_gain_table_2p0,
- + ARRAY_SIZE(ar9300Common_rx_gain_table_2p0), 2);
- + INIT_INI_ARRAY(&ah->iniModesTxGain,
- + ar9300Modes_lowest_ob_db_tx_gain_table_2p0,
- + ARRAY_SIZE(ar9300Modes_lowest_ob_db_tx_gain_table_2p0),
- + 5);
- +
- + /* Load PCIE SERDES settings from INI */
- +
- + /* Awake Setting */
- +
- + INIT_INI_ARRAY(&ah->iniPcieSerdes,
- + ar9300PciePhy_pll_on_clkreq_disable_L1_2p0,
- + ARRAY_SIZE(ar9300PciePhy_pll_on_clkreq_disable_L1_2p0),
- + 2);
- +
- + /* Sleep Setting */
- +
- + INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
- + ar9300PciePhy_clkreq_enable_L1_2p0,
- + ARRAY_SIZE(ar9300PciePhy_clkreq_enable_L1_2p0),
- + 2);
- +
- + /* Fast clock modal settings */
- + INIT_INI_ARRAY(&ah->iniModesAdditional,
- + ar9300Modes_fast_clock_2p0,
- + ARRAY_SIZE(ar9300Modes_fast_clock_2p0),
- + 3);
- +}
- +
- +static void ar9003_tx_gain_table_apply(struct ath_hw *ah)
- +{
- + switch(ar9003_hw_get_tx_gain_idx(ah)) {
- + case 0:
- + default:
- + INIT_INI_ARRAY(&ah->iniModesTxGain,
- + ar9300Modes_lowest_ob_db_tx_gain_table_2p0,
- + ARRAY_SIZE(ar9300Modes_lowest_ob_db_tx_gain_table_2p0),
- + 5);
- + break;
- + case 1:
- + INIT_INI_ARRAY(&ah->iniModesTxGain,
- + ar9300Modes_high_ob_db_tx_gain_table_2p0,
- + ARRAY_SIZE(ar9300Modes_high_ob_db_tx_gain_table_2p0),
- + 5);
- + break;
- + case 2:
- + INIT_INI_ARRAY(&ah->iniModesTxGain,
- + ar9300Modes_low_ob_db_tx_gain_table_2p0,
- + ARRAY_SIZE(ar9300Modes_low_ob_db_tx_gain_table_2p0),
- + 5);
- + break;
- + }
- +}
- +
- +static void ar9003_rx_gain_table_apply(struct ath_hw *ah)
- +{
- + switch(ar9003_hw_get_rx_gain_idx(ah))
- + {
- + case 0:
- + default:
- + INIT_INI_ARRAY(&ah->iniModesRxGain, ar9300Common_rx_gain_table_2p0,
- + ARRAY_SIZE(ar9300Common_rx_gain_table_2p0),
- + 2);
- + break;
- + case 1:
- + INIT_INI_ARRAY(&ah->iniModesRxGain,
- + ar9300Common_wo_xlna_rx_gain_table_2p0,
- + ARRAY_SIZE(ar9300Common_wo_xlna_rx_gain_table_2p0),
- + 2);
- + break;
- + }
- +}
- +
- +/* set gain table pointers according to values read from the eeprom */
- +static void ar9003_hw_init_mode_gain_regs(struct ath_hw *ah)
- +{
- + ar9003_tx_gain_table_apply(ah);
- + ar9003_rx_gain_table_apply(ah);
- +}
- +
- +/*
- + * Helper for ASPM support.
- + *
- + * Disable PLL when in L0s as well as receiver clock when in L1.
- + * This power saving option must be enabled through the SerDes.
- + *
- + * Programming the SerDes must go through the same 288 bit serial shift
- + * register as the other analog registers. Hence the 9 writes.
- + */
- +static void ar9003_hw_configpcipowersave(struct ath_hw *ah,
- + int restore,
- + int power_off)
- +{
- + if (ah->is_pciexpress != true)
- + return;
- +
- + /* Do not touch SerDes registers */
- + if (ah->config.pcie_powersave_enable == 2)
- + return;
- +
- + /* Nothing to do on restore for 11N */
- + if (!restore) {
- + /* set bit 19 to allow forcing of pcie core into L1 state */
- + REG_SET_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
- +
- + /* Several PCIe massages to ensure proper behaviour */
- + if (ah->config.pcie_waen)
- + REG_WRITE(ah, AR_WA, ah->config.pcie_waen);
- + }
- +}
- +
- +/* Sets up the AR9003 hardware familiy callbacks */
- +void ar9003_hw_attach_ops(struct ath_hw *ah)
- +{
- + struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
- + struct ath_hw_ops *ops = ath9k_hw_ops(ah);
- +
- + priv_ops->init_mode_regs = ar9003_hw_init_mode_regs;
- + priv_ops->init_mode_gain_regs = ar9003_hw_init_mode_gain_regs;
- + priv_ops->macversion_supported = ar9003_hw_macversion_supported;
- +
- + ops->config_pci_powersave = ar9003_hw_configpcipowersave;
- +
- + ar9003_hw_attach_phy_ops(ah);
- + ar9003_hw_attach_calib_ops(ah);
- + ar9003_hw_attach_mac_ops(ah);
- +}
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar9003_initvals.h
- @@ -0,0 +1,1793 @@
- +/*
- + * Copyright (c) 2010 Atheros Communications Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +
- +#ifndef INITVALS_9003_H
- +#define INITVALS_9003_H
- +
- +/* AR9003 2.0 */
- +
- +static const u32 ar9300_2p0_radio_postamble[][5] = {
- + /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
- + {0x0001609c, 0x0dd08f29, 0x0dd08f29, 0x0b283f31, 0x0b283f31},
- + {0x000160ac, 0xa4653c00, 0xa4653c00, 0x24652800, 0x24652800},
- + {0x000160b0, 0x03284f3e, 0x03284f3e, 0x05d08f20, 0x05d08f20},
- + {0x0001610c, 0x08000000, 0x00000000, 0x00000000, 0x00000000},
- + {0x0001650c, 0x08000000, 0x00000000, 0x00000000, 0x00000000},
- + {0x0001690c, 0x08000000, 0x00000000, 0x00000000, 0x00000000},
- +};
- +
- +static const u32 ar9300Modes_lowest_ob_db_tx_gain_table_2p0[][5] = {
- + /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
- + {0x0000a410, 0x000050da, 0x000050da, 0x000050da, 0x000050da},
- + {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
- + {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
- + {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004},
- + {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200},
- + {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202},
- + {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400},
- + {0x0000a518, 0x21020220, 0x21020220, 0x16000402, 0x16000402},
- + {0x0000a51c, 0x27020223, 0x27020223, 0x19000404, 0x19000404},
- + {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603},
- + {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02},
- + {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04},
- + {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20},
- + {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20},
- + {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22},
- + {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24},
- + {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640},
- + {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660},
- + {0x0000a544, 0x5302266c, 0x5302266c, 0x3f001861, 0x3f001861},
- + {0x0000a548, 0x5702286c, 0x5702286c, 0x43001a81, 0x43001a81},
- + {0x0000a54c, 0x5c04286b, 0x5c04286b, 0x47001a83, 0x47001a83},
- + {0x0000a550, 0x61042a6c, 0x61042a6c, 0x4a001c84, 0x4a001c84},
- + {0x0000a554, 0x66062a6c, 0x66062a6c, 0x4e001ce3, 0x4e001ce3},
- + {0x0000a558, 0x6b062e6c, 0x6b062e6c, 0x52001ce5, 0x52001ce5},
- + {0x0000a55c, 0x7006308c, 0x7006308c, 0x56001ce9, 0x56001ce9},
- + {0x0000a560, 0x730a308a, 0x730a308a, 0x5a001ceb, 0x5a001ceb},
- + {0x0000a564, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
- + {0x0000a568, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
- + {0x0000a56c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
- + {0x0000a570, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
- + {0x0000a574, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
- + {0x0000a578, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
- + {0x0000a57c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
- + {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
- + {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002},
- + {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004},
- + {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200},
- + {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202},
- + {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400},
- + {0x0000a598, 0x21820220, 0x21820220, 0x16800402, 0x16800402},
- + {0x0000a59c, 0x27820223, 0x27820223, 0x19800404, 0x19800404},
- + {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603},
- + {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02},
- + {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04},
- + {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20},
- + {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20},
- + {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22},
- + {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24},
- + {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640},
- + {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660},
- + {0x0000a5c4, 0x5382266c, 0x5382266c, 0x3f801861, 0x3f801861},
- + {0x0000a5c8, 0x5782286c, 0x5782286c, 0x43801a81, 0x43801a81},
- + {0x0000a5cc, 0x5c84286b, 0x5c84286b, 0x47801a83, 0x47801a83},
- + {0x0000a5d0, 0x61842a6c, 0x61842a6c, 0x4a801c84, 0x4a801c84},
- + {0x0000a5d4, 0x66862a6c, 0x66862a6c, 0x4e801ce3, 0x4e801ce3},
- + {0x0000a5d8, 0x6b862e6c, 0x6b862e6c, 0x52801ce5, 0x52801ce5},
- + {0x0000a5dc, 0x7086308c, 0x7086308c, 0x56801ce9, 0x56801ce9},
- + {0x0000a5e0, 0x738a308a, 0x738a308a, 0x5a801ceb, 0x5a801ceb},
- + {0x0000a5e4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
- + {0x0000a5e8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
- + {0x0000a5ec, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
- + {0x0000a5f0, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
- + {0x0000a5f4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
- + {0x0000a5f8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
- + {0x0000a5fc, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
- + {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
- + {0x00016048, 0x60001a61, 0x60001a61, 0x60001a61, 0x60001a61},
- + {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
- + {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
- + {0x00016448, 0x60001a61, 0x60001a61, 0x60001a61, 0x60001a61},
- + {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
- + {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
- + {0x00016848, 0x60001a61, 0x60001a61, 0x60001a61, 0x60001a61},
- + {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
- +};
- +
- +static const u32 ar9300Modes_fast_clock_2p0[][3] = {
- + /* Addr 5G_HT20 5G_HT40 */
- + {0x00001030, 0x00000268, 0x000004d0},
- + {0x00001070, 0x0000018c, 0x00000318},
- + {0x000010b0, 0x00000fd0, 0x00001fa0},
- + {0x00008014, 0x044c044c, 0x08980898},
- + {0x0000801c, 0x148ec02b, 0x148ec057},
- + {0x00008318, 0x000044c0, 0x00008980},
- + {0x00009e00, 0x03721821, 0x03721821},
- + {0x0000a230, 0x0000000b, 0x00000016},
- + {0x0000a254, 0x00000898, 0x00001130},
- +};
- +
- +static const u32 ar9300_2p0_radio_core[][2] = {
- + /* Addr allmodes */
- + {0x00016000, 0x36db6db6},
- + {0x00016004, 0x6db6db40},
- + {0x00016008, 0x73f00000},
- + {0x0001600c, 0x00000000},
- + {0x00016040, 0x7f80fff8},
- + {0x0001604c, 0x76d005b5},
- + {0x00016050, 0x556cf031},
- + {0x00016054, 0x43449440},
- + {0x00016058, 0x0c51c92c},
- + {0x0001605c, 0x3db7fffc},
- + {0x00016060, 0xfffffffc},
- + {0x00016064, 0x000f0278},
- + {0x0001606c, 0x6db60000},
- + {0x00016080, 0x00000000},
- + {0x00016084, 0x0e48048c},
- + {0x00016088, 0x54214514},
- + {0x0001608c, 0x119f481e},
- + {0x00016090, 0x24926490},
- + {0x00016098, 0xd2888888},
- + {0x000160a0, 0x0a108ffe},
- + {0x000160a4, 0x812fc370},
- + {0x000160a8, 0x423c8000},
- + {0x000160b4, 0x92480080},
- + {0x000160c0, 0x00adb6d0},
- + {0x000160c4, 0x6db6db60},
- + {0x000160c8, 0x6db6db6c},
- + {0x000160cc, 0x01e6c000},
- + {0x00016100, 0x3fffbe01},
- + {0x00016104, 0xfff80000},
- + {0x00016108, 0x00080010},
- + {0x00016140, 0x10804008},
- + {0x00016144, 0x02084080},
- + {0x00016148, 0x00000000},
- + {0x00016280, 0x058a0001},
- + {0x00016284, 0x3d840208},
- + {0x00016288, 0x01a20408},
- + {0x0001628c, 0x00038c07},
- + {0x00016290, 0x40000004},
- + {0x00016294, 0x458aa14f},
- + {0x00016380, 0x00000000},
- + {0x00016384, 0x00000000},
- + {0x00016388, 0x00800700},
- + {0x0001638c, 0x00800700},
- + {0x00016390, 0x00800700},
- + {0x00016394, 0x00000000},
- + {0x00016398, 0x00000000},
- + {0x0001639c, 0x00000000},
- + {0x000163a0, 0x00000001},
- + {0x000163a4, 0x00000001},
- + {0x000163a8, 0x00000000},
- + {0x000163ac, 0x00000000},
- + {0x000163b0, 0x00000000},
- + {0x000163b4, 0x00000000},
- + {0x000163b8, 0x00000000},
- + {0x000163bc, 0x00000000},
- + {0x000163c0, 0x000000a0},
- + {0x000163c4, 0x000c0000},
- + {0x000163c8, 0x14021402},
- + {0x000163cc, 0x00001402},
- + {0x000163d0, 0x00000000},
- + {0x000163d4, 0x00000000},
- + {0x00016400, 0x36db6db6},
- + {0x00016404, 0x6db6db40},
- + {0x00016408, 0x73f00000},
- + {0x0001640c, 0x00000000},
- + {0x00016440, 0x7f80fff8},
- + {0x0001644c, 0x76d005b5},
- + {0x00016450, 0x556cf031},
- + {0x00016454, 0x43449440},
- + {0x00016458, 0x0c51c92c},
- + {0x0001645c, 0x3db7fffc},
- + {0x00016460, 0xfffffffc},
- + {0x00016464, 0x000f0278},
- + {0x0001646c, 0x6db60000},
- + {0x00016500, 0x3fffbe01},
- + {0x00016504, 0xfff80000},
- + {0x00016508, 0x00080010},
- + {0x00016540, 0x10804008},
- + {0x00016544, 0x02084080},
- + {0x00016548, 0x00000000},
- + {0x00016780, 0x00000000},
- + {0x00016784, 0x00000000},
- + {0x00016788, 0x00800700},
- + {0x0001678c, 0x00800700},
- + {0x00016790, 0x00800700},
- + {0x00016794, 0x00000000},
- + {0x00016798, 0x00000000},
- + {0x0001679c, 0x00000000},
- + {0x000167a0, 0x00000001},
- + {0x000167a4, 0x00000001},
- + {0x000167a8, 0x00000000},
- + {0x000167ac, 0x00000000},
- + {0x000167b0, 0x00000000},
- + {0x000167b4, 0x00000000},
- + {0x000167b8, 0x00000000},
- + {0x000167bc, 0x00000000},
- + {0x000167c0, 0x000000a0},
- + {0x000167c4, 0x000c0000},
- + {0x000167c8, 0x14021402},
- + {0x000167cc, 0x00001402},
- + {0x000167d0, 0x00000000},
- + {0x000167d4, 0x00000000},
- + {0x00016800, 0x36db6db6},
- + {0x00016804, 0x6db6db40},
- + {0x00016808, 0x73f00000},
- + {0x0001680c, 0x00000000},
- + {0x00016840, 0x7f80fff8},
- + {0x0001684c, 0x76d005b5},
- + {0x00016850, 0x556cf031},
- + {0x00016854, 0x43449440},
- + {0x00016858, 0x0c51c92c},
- + {0x0001685c, 0x3db7fffc},
- + {0x00016860, 0xfffffffc},
- + {0x00016864, 0x000f0278},
- + {0x0001686c, 0x6db60000},
- + {0x00016900, 0x3fffbe01},
- + {0x00016904, 0xfff80000},
- + {0x00016908, 0x00080010},
- + {0x00016940, 0x10804008},
- + {0x00016944, 0x02084080},
- + {0x00016948, 0x00000000},
- + {0x00016b80, 0x00000000},
- + {0x00016b84, 0x00000000},
- + {0x00016b88, 0x00800700},
- + {0x00016b8c, 0x00800700},
- + {0x00016b90, 0x00800700},
- + {0x00016b94, 0x00000000},
- + {0x00016b98, 0x00000000},
- + {0x00016b9c, 0x00000000},
- + {0x00016ba0, 0x00000001},
- + {0x00016ba4, 0x00000001},
- + {0x00016ba8, 0x00000000},
- + {0x00016bac, 0x00000000},
- + {0x00016bb0, 0x00000000},
- + {0x00016bb4, 0x00000000},
- + {0x00016bb8, 0x00000000},
- + {0x00016bbc, 0x00000000},
- + {0x00016bc0, 0x000000a0},
- + {0x00016bc4, 0x000c0000},
- + {0x00016bc8, 0x14021402},
- + {0x00016bcc, 0x00001402},
- + {0x00016bd0, 0x00000000},
- + {0x00016bd4, 0x00000000},
- +};
- +
- +static const u32 ar9300Common_rx_gain_table_merlin_2p0[][2] = {
- + /* Addr allmodes */
- + {0x0000a000, 0x02000101},
- + {0x0000a004, 0x02000102},
- + {0x0000a008, 0x02000103},
- + {0x0000a00c, 0x02000104},
- + {0x0000a010, 0x02000200},
- + {0x0000a014, 0x02000201},
- + {0x0000a018, 0x02000202},
- + {0x0000a01c, 0x02000203},
- + {0x0000a020, 0x02000204},
- + {0x0000a024, 0x02000205},
- + {0x0000a028, 0x02000208},
- + {0x0000a02c, 0x02000302},
- + {0x0000a030, 0x02000303},
- + {0x0000a034, 0x02000304},
- + {0x0000a038, 0x02000400},
- + {0x0000a03c, 0x02010300},
- + {0x0000a040, 0x02010301},
- + {0x0000a044, 0x02010302},
- + {0x0000a048, 0x02000500},
- + {0x0000a04c, 0x02010400},
- + {0x0000a050, 0x02020300},
- + {0x0000a054, 0x02020301},
- + {0x0000a058, 0x02020302},
- + {0x0000a05c, 0x02020303},
- + {0x0000a060, 0x02020400},
- + {0x0000a064, 0x02030300},
- + {0x0000a068, 0x02030301},
- + {0x0000a06c, 0x02030302},
- + {0x0000a070, 0x02030303},
- + {0x0000a074, 0x02030400},
- + {0x0000a078, 0x02040300},
- + {0x0000a07c, 0x02040301},
- + {0x0000a080, 0x02040302},
- + {0x0000a084, 0x02040303},
- + {0x0000a088, 0x02030500},
- + {0x0000a08c, 0x02040400},
- + {0x0000a090, 0x02050203},
- + {0x0000a094, 0x02050204},
- + {0x0000a098, 0x02050205},
- + {0x0000a09c, 0x02040500},
- + {0x0000a0a0, 0x02050301},
- + {0x0000a0a4, 0x02050302},
- + {0x0000a0a8, 0x02050303},
- + {0x0000a0ac, 0x02050400},
- + {0x0000a0b0, 0x02050401},
- + {0x0000a0b4, 0x02050402},
- + {0x0000a0b8, 0x02050403},
- + {0x0000a0bc, 0x02050500},
- + {0x0000a0c0, 0x02050501},
- + {0x0000a0c4, 0x02050502},
- + {0x0000a0c8, 0x02050503},
- + {0x0000a0cc, 0x02050504},
- + {0x0000a0d0, 0x02050600},
- + {0x0000a0d4, 0x02050601},
- + {0x0000a0d8, 0x02050602},
- + {0x0000a0dc, 0x02050603},
- + {0x0000a0e0, 0x02050604},
- + {0x0000a0e4, 0x02050700},
- + {0x0000a0e8, 0x02050701},
- + {0x0000a0ec, 0x02050702},
- + {0x0000a0f0, 0x02050703},
- + {0x0000a0f4, 0x02050704},
- + {0x0000a0f8, 0x02050705},
- + {0x0000a0fc, 0x02050708},
- + {0x0000a100, 0x02050709},
- + {0x0000a104, 0x0205070a},
- + {0x0000a108, 0x0205070b},
- + {0x0000a10c, 0x0205070c},
- + {0x0000a110, 0x0205070d},
- + {0x0000a114, 0x02050710},
- + {0x0000a118, 0x02050711},
- + {0x0000a11c, 0x02050712},
- + {0x0000a120, 0x02050713},
- + {0x0000a124, 0x02050714},
- + {0x0000a128, 0x02050715},
- + {0x0000a12c, 0x02050730},
- + {0x0000a130, 0x02050731},
- + {0x0000a134, 0x02050732},
- + {0x0000a138, 0x02050733},
- + {0x0000a13c, 0x02050734},
- + {0x0000a140, 0x02050735},
- + {0x0000a144, 0x02050750},
- + {0x0000a148, 0x02050751},
- + {0x0000a14c, 0x02050752},
- + {0x0000a150, 0x02050753},
- + {0x0000a154, 0x02050754},
- + {0x0000a158, 0x02050755},
- + {0x0000a15c, 0x02050770},
- + {0x0000a160, 0x02050771},
- + {0x0000a164, 0x02050772},
- + {0x0000a168, 0x02050773},
- + {0x0000a16c, 0x02050774},
- + {0x0000a170, 0x02050775},
- + {0x0000a174, 0x00000776},
- + {0x0000a178, 0x00000776},
- + {0x0000a17c, 0x00000776},
- + {0x0000a180, 0x00000776},
- + {0x0000a184, 0x00000776},
- + {0x0000a188, 0x00000776},
- + {0x0000a18c, 0x00000776},
- + {0x0000a190, 0x00000776},
- + {0x0000a194, 0x00000776},
- + {0x0000a198, 0x00000776},
- + {0x0000a19c, 0x00000776},
- + {0x0000a1a0, 0x00000776},
- + {0x0000a1a4, 0x00000776},
- + {0x0000a1a8, 0x00000776},
- + {0x0000a1ac, 0x00000776},
- + {0x0000a1b0, 0x00000776},
- + {0x0000a1b4, 0x00000776},
- + {0x0000a1b8, 0x00000776},
- + {0x0000a1bc, 0x00000776},
- + {0x0000a1c0, 0x00000776},
- + {0x0000a1c4, 0x00000776},
- + {0x0000a1c8, 0x00000776},
- + {0x0000a1cc, 0x00000776},
- + {0x0000a1d0, 0x00000776},
- + {0x0000a1d4, 0x00000776},
- + {0x0000a1d8, 0x00000776},
- + {0x0000a1dc, 0x00000776},
- + {0x0000a1e0, 0x00000776},
- + {0x0000a1e4, 0x00000776},
- + {0x0000a1e8, 0x00000776},
- + {0x0000a1ec, 0x00000776},
- + {0x0000a1f0, 0x00000776},
- + {0x0000a1f4, 0x00000776},
- + {0x0000a1f8, 0x00000776},
- + {0x0000a1fc, 0x00000776},
- + {0x0000b000, 0x02000101},
- + {0x0000b004, 0x02000102},
- + {0x0000b008, 0x02000103},
- + {0x0000b00c, 0x02000104},
- + {0x0000b010, 0x02000200},
- + {0x0000b014, 0x02000201},
- + {0x0000b018, 0x02000202},
- + {0x0000b01c, 0x02000203},
- + {0x0000b020, 0x02000204},
- + {0x0000b024, 0x02000205},
- + {0x0000b028, 0x02000208},
- + {0x0000b02c, 0x02000302},
- + {0x0000b030, 0x02000303},
- + {0x0000b034, 0x02000304},
- + {0x0000b038, 0x02000400},
- + {0x0000b03c, 0x02010300},
- + {0x0000b040, 0x02010301},
- + {0x0000b044, 0x02010302},
- + {0x0000b048, 0x02000500},
- + {0x0000b04c, 0x02010400},
- + {0x0000b050, 0x02020300},
- + {0x0000b054, 0x02020301},
- + {0x0000b058, 0x02020302},
- + {0x0000b05c, 0x02020303},
- + {0x0000b060, 0x02020400},
- + {0x0000b064, 0x02030300},
- + {0x0000b068, 0x02030301},
- + {0x0000b06c, 0x02030302},
- + {0x0000b070, 0x02030303},
- + {0x0000b074, 0x02030400},
- + {0x0000b078, 0x02040300},
- + {0x0000b07c, 0x02040301},
- + {0x0000b080, 0x02040302},
- + {0x0000b084, 0x02040303},
- + {0x0000b088, 0x02030500},
- + {0x0000b08c, 0x02040400},
- + {0x0000b090, 0x02050203},
- + {0x0000b094, 0x02050204},
- + {0x0000b098, 0x02050205},
- + {0x0000b09c, 0x02040500},
- + {0x0000b0a0, 0x02050301},
- + {0x0000b0a4, 0x02050302},
- + {0x0000b0a8, 0x02050303},
- + {0x0000b0ac, 0x02050400},
- + {0x0000b0b0, 0x02050401},
- + {0x0000b0b4, 0x02050402},
- + {0x0000b0b8, 0x02050403},
- + {0x0000b0bc, 0x02050500},
- + {0x0000b0c0, 0x02050501},
- + {0x0000b0c4, 0x02050502},
- + {0x0000b0c8, 0x02050503},
- + {0x0000b0cc, 0x02050504},
- + {0x0000b0d0, 0x02050600},
- + {0x0000b0d4, 0x02050601},
- + {0x0000b0d8, 0x02050602},
- + {0x0000b0dc, 0x02050603},
- + {0x0000b0e0, 0x02050604},
- + {0x0000b0e4, 0x02050700},
- + {0x0000b0e8, 0x02050701},
- + {0x0000b0ec, 0x02050702},
- + {0x0000b0f0, 0x02050703},
- + {0x0000b0f4, 0x02050704},
- + {0x0000b0f8, 0x02050705},
- + {0x0000b0fc, 0x02050708},
- + {0x0000b100, 0x02050709},
- + {0x0000b104, 0x0205070a},
- + {0x0000b108, 0x0205070b},
- + {0x0000b10c, 0x0205070c},
- + {0x0000b110, 0x0205070d},
- + {0x0000b114, 0x02050710},
- + {0x0000b118, 0x02050711},
- + {0x0000b11c, 0x02050712},
- + {0x0000b120, 0x02050713},
- + {0x0000b124, 0x02050714},
- + {0x0000b128, 0x02050715},
- + {0x0000b12c, 0x02050730},
- + {0x0000b130, 0x02050731},
- + {0x0000b134, 0x02050732},
- + {0x0000b138, 0x02050733},
- + {0x0000b13c, 0x02050734},
- + {0x0000b140, 0x02050735},
- + {0x0000b144, 0x02050750},
- + {0x0000b148, 0x02050751},
- + {0x0000b14c, 0x02050752},
- + {0x0000b150, 0x02050753},
- + {0x0000b154, 0x02050754},
- + {0x0000b158, 0x02050755},
- + {0x0000b15c, 0x02050770},
- + {0x0000b160, 0x02050771},
- + {0x0000b164, 0x02050772},
- + {0x0000b168, 0x02050773},
- + {0x0000b16c, 0x02050774},
- + {0x0000b170, 0x02050775},
- + {0x0000b174, 0x00000776},
- + {0x0000b178, 0x00000776},
- + {0x0000b17c, 0x00000776},
- + {0x0000b180, 0x00000776},
- + {0x0000b184, 0x00000776},
- + {0x0000b188, 0x00000776},
- + {0x0000b18c, 0x00000776},
- + {0x0000b190, 0x00000776},
- + {0x0000b194, 0x00000776},
- + {0x0000b198, 0x00000776},
- + {0x0000b19c, 0x00000776},
- + {0x0000b1a0, 0x00000776},
- + {0x0000b1a4, 0x00000776},
- + {0x0000b1a8, 0x00000776},
- + {0x0000b1ac, 0x00000776},
- + {0x0000b1b0, 0x00000776},
- + {0x0000b1b4, 0x00000776},
- + {0x0000b1b8, 0x00000776},
- + {0x0000b1bc, 0x00000776},
- + {0x0000b1c0, 0x00000776},
- + {0x0000b1c4, 0x00000776},
- + {0x0000b1c8, 0x00000776},
- + {0x0000b1cc, 0x00000776},
- + {0x0000b1d0, 0x00000776},
- + {0x0000b1d4, 0x00000776},
- + {0x0000b1d8, 0x00000776},
- + {0x0000b1dc, 0x00000776},
- + {0x0000b1e0, 0x00000776},
- + {0x0000b1e4, 0x00000776},
- + {0x0000b1e8, 0x00000776},
- + {0x0000b1ec, 0x00000776},
- + {0x0000b1f0, 0x00000776},
- + {0x0000b1f4, 0x00000776},
- + {0x0000b1f8, 0x00000776},
- + {0x0000b1fc, 0x00000776},
- +};
- +
- +static const u32 ar9300_2p0_mac_postamble[][5] = {
- + /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
- + {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160},
- + {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c},
- + {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38},
- + {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00},
- + {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b},
- + {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810},
- + {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a},
- + {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440},
- +};
- +
- +static const u32 ar9300_2p0_soc_postamble[][5] = {
- + /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
- + {0x00007010, 0x00000023, 0x00000023, 0x00000022, 0x00000022},
- +};
- +
- +static const u32 ar9200_merlin_2p0_radio_core[][2] = {
- + /* Addr common */
- + {0x00007800, 0x00040000},
- + {0x00007804, 0xdb005012},
- + {0x00007808, 0x04924914},
- + {0x0000780c, 0x21084210},
- + {0x00007810, 0x6d801300},
- + {0x00007814, 0x0019beff},
- + {0x00007818, 0x07e41000},
- + {0x0000781c, 0x00392000},
- + {0x00007820, 0x92592480},
- + {0x00007824, 0x00040000},
- + {0x00007828, 0xdb005012},
- + {0x0000782c, 0x04924914},
- + {0x00007830, 0x21084210},
- + {0x00007834, 0x6d801300},
- + {0x00007838, 0x0019beff},
- + {0x0000783c, 0x07e40000},
- + {0x00007840, 0x00392000},
- + {0x00007844, 0x92592480},
- + {0x00007848, 0x00100000},
- + {0x0000784c, 0x773f0567},
- + {0x00007850, 0x54214514},
- + {0x00007854, 0x12035828},
- + {0x00007858, 0x92592692},
- + {0x0000785c, 0x00000000},
- + {0x00007860, 0x56400000},
- + {0x00007864, 0x0a8e370e},
- + {0x00007868, 0xc0102850},
- + {0x0000786c, 0x812d4000},
- + {0x00007870, 0x807ec400},
- + {0x00007874, 0x001b6db0},
- + {0x00007878, 0x00376b63},
- + {0x0000787c, 0x06db6db6},
- + {0x00007880, 0x006d8000},
- + {0x00007884, 0xffeffffe},
- + {0x00007888, 0xffeffffe},
- + {0x0000788c, 0x00010000},
- + {0x00007890, 0x02060aeb},
- + {0x00007894, 0x5a108000},
- +};
- +
- +static const u32 ar9300_2p0_baseband_postamble[][5] = {
- + /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
- + {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8005, 0xd00a8005},
- + {0x00009820, 0x206a022e, 0x206a022e, 0x206a012e, 0x206a012e},
- + {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
- + {0x00009828, 0x06903081, 0x06903081, 0x06903881, 0x06903881},
- + {0x0000982c, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4},
- + {0x00009830, 0x0000059c, 0x0000059c, 0x0000059c, 0x0000059c},
- + {0x00009c00, 0x00000044, 0x000000c4, 0x000000c4, 0x00000044},
- + {0x00009e00, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0},
- + {0x00009e04, 0x00802020, 0x00802020, 0x00802020, 0x00802020},
- + {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2},
- + {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec84d2e, 0x7ec84d2e},
- + {0x00009e14, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e},
- + {0x00009e18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
- + {0x00009e1c, 0x0001cf9c, 0x0001cf9c, 0x00021f9c, 0x00021f9c},
- + {0x00009e20, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce},
- + {0x00009e2c, 0x0000001c, 0x0000001c, 0x00000021, 0x00000021},
- + {0x00009e44, 0x02321e27, 0x02321e27, 0x02282324, 0x02282324},
- + {0x00009e48, 0x5030201a, 0x5030201a, 0x50302010, 0x50302010},
- + {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000},
- + {0x0000a204, 0x000037c0, 0x000037c4, 0x000037c4, 0x000037c0},
- + {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004},
- + {0x0000a230, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b},
- + {0x0000a238, 0xffb81018, 0xffb81018, 0xffb81018, 0xffb81018},
- + {0x0000a250, 0x00000000, 0x00000000, 0x00000210, 0x00000108},
- + {0x0000a254, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898},
- + {0x0000a258, 0x02020002, 0x02020002, 0x02020002, 0x02020002},
- + {0x0000a25c, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e},
- + {0x0000a260, 0x0a021501, 0x0a021501, 0x3a021501, 0x3a021501},
- + {0x0000a264, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
- + {0x0000a280, 0x00000007, 0x00000007, 0x0000000b, 0x0000000b},
- + {0x0000a284, 0x00000000, 0x00000000, 0x00000150, 0x00000150},
- + {0x0000a288, 0x00000110, 0x00000110, 0x00000110, 0x00000110},
- + {0x0000a28c, 0x00022222, 0x00022222, 0x00022222, 0x00022222},
- + {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18},
- + {0x0000a2d0, 0x00071981, 0x00071981, 0x00071981, 0x00071982},
- + {0x0000a2d8, 0xf999a83a, 0xf999a83a, 0xf999a83a, 0xf999a83a},
- + {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
- + {0x0000a830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
- + {0x0000ae04, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
- + {0x0000ae18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
- + {0x0000ae1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
- + {0x0000ae20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce},
- + {0x0000b284, 0x00000000, 0x00000000, 0x00000150, 0x00000150},
- + {0x0000b830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
- + {0x0000be04, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
- + {0x0000be18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
- + {0x0000be1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
- + {0x0000be20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce},
- + {0x0000c284, 0x00000000, 0x00000000, 0x00000150, 0x00000150},
- +};
- +
- +static const u32 ar9300_2p0_baseband_core[][2] = {
- + /* Addr allmodes */
- + {0x00009800, 0xafe68e30},
- + {0x00009804, 0xfd14e000},
- + {0x00009808, 0x9c0a9f6b},
- + {0x0000980c, 0x04900000},
- + {0x00009814, 0x9280c00a},
- + {0x00009818, 0x00000000},
- + {0x0000981c, 0x00020028},
- + {0x00009834, 0x5f3ca3de},
- + {0x00009838, 0x0108ecff},
- + {0x0000983c, 0x14750600},
- + {0x00009880, 0x201fff00},
- + {0x00009884, 0x00001042},
- + {0x000098a4, 0x00200400},
- + {0x000098b0, 0x52440bbe},
- + {0x000098d0, 0x004b6a8e},
- + {0x000098d4, 0x00000820},
- + {0x000098dc, 0x00000000},
- + {0x000098f0, 0x00000000},
- + {0x000098f4, 0x00000000},
- + {0x00009c04, 0xff55ff55},
- + {0x00009c08, 0x0320ff55},
- + {0x00009c0c, 0x00000000},
- + {0x00009c10, 0x00000000},
- + {0x00009c14, 0x00046384},
- + {0x00009c18, 0x05b6b440},
- + {0x00009c1c, 0x00b6b440},
- + {0x00009d00, 0xc080a333},
- + {0x00009d04, 0x40206c10},
- + {0x00009d08, 0x009c4060},
- + {0x00009d0c, 0x9883800a},
- + {0x00009d10, 0x01834061},
- + {0x00009d14, 0x00c0040b},
- + {0x00009d18, 0x00000000},
- + {0x00009e08, 0x0038233c},
- + {0x00009e24, 0x990bb515},
- + {0x00009e28, 0x0c6f0000},
- + {0x00009e30, 0x06336f77},
- + {0x00009e34, 0x6af6532f},
- + {0x00009e38, 0x0cc80c00},
- + {0x00009e3c, 0xcf946222},
- + {0x00009e40, 0x0d261820},
- + {0x00009e4c, 0x00001004},
- + {0x00009e50, 0x00ff03f1},
- + {0x00009e54, 0x00000000},
- + {0x00009fc0, 0x803e4788},
- + {0x00009fc4, 0x0001efb5},
- + {0x00009fcc, 0x40000014},
- + {0x00009fd0, 0x01193b93},
- + {0x0000a20c, 0x00000000},
- + {0x0000a220, 0x00000000},
- + {0x0000a224, 0x00000000},
- + {0x0000a228, 0x10002310},
- + {0x0000a22c, 0x01036a1e},
- + {0x0000a234, 0x10000fff},
- + {0x0000a23c, 0x00000000},
- + {0x0000a244, 0x0c000000},
- + {0x0000a2a0, 0x00000001},
- + {0x0000a2c0, 0x00000001},
- + {0x0000a2c8, 0x00000000},
- + {0x0000a2cc, 0x18c43433},
- + {0x0000a2d4, 0x00000000},
- + {0x0000a2dc, 0x00000000},
- + {0x0000a2e0, 0x00000000},
- + {0x0000a2e4, 0x00000000},
- + {0x0000a2e8, 0x00000000},
- + {0x0000a2ec, 0x00000000},
- + {0x0000a2f0, 0x00000000},
- + {0x0000a2f4, 0x00000000},
- + {0x0000a2f8, 0x00000000},
- + {0x0000a344, 0x00000000},
- + {0x0000a34c, 0x00000000},
- + {0x0000a350, 0x0000a000},
- + {0x0000a364, 0x00000000},
- + {0x0000a370, 0x00000000},
- + {0x0000a390, 0x00000001},
- + {0x0000a394, 0x00000444},
- + {0x0000a398, 0x001f0e0f},
- + {0x0000a39c, 0x0075393f},
- + {0x0000a3a0, 0xb79f6427},
- + {0x0000a3a4, 0x00000000},
- + {0x0000a3a8, 0xaaaaaaaa},
- + {0x0000a3ac, 0x3c466478},
- + {0x0000a3c0, 0x20202020},
- + {0x0000a3c4, 0x22222220},
- + {0x0000a3c8, 0x20200020},
- + {0x0000a3cc, 0x20202020},
- + {0x0000a3d0, 0x20202020},
- + {0x0000a3d4, 0x20202020},
- + {0x0000a3d8, 0x20202020},
- + {0x0000a3dc, 0x20202020},
- + {0x0000a3e0, 0x20202020},
- + {0x0000a3e4, 0x20202020},
- + {0x0000a3e8, 0x20202020},
- + {0x0000a3ec, 0x20202020},
- + {0x0000a3f0, 0x00000000},
- + {0x0000a3f4, 0x00000246},
- + {0x0000a3f8, 0x0cdbd380},
- + {0x0000a3fc, 0x000f0f01},
- + {0x0000a400, 0x8fa91f01},
- + {0x0000a404, 0x00000000},
- + {0x0000a408, 0x0e79e5c6},
- + {0x0000a40c, 0x00820820},
- + {0x0000a414, 0x1ce739ce},
- + {0x0000a418, 0x7d001dce},
- + {0x0000a41c, 0x1ce739ce},
- + {0x0000a420, 0x000001ce},
- + {0x0000a424, 0x1ce739ce},
- + {0x0000a428, 0x000001ce},
- + {0x0000a42c, 0x1ce739ce},
- + {0x0000a430, 0x1ce739ce},
- + {0x0000a434, 0x00000000},
- + {0x0000a438, 0x00001801},
- + {0x0000a43c, 0x00000000},
- + {0x0000a440, 0x00000000},
- + {0x0000a444, 0x00000000},
- + {0x0000a448, 0x07000080},
- + {0x0000a44c, 0x00000001},
- + {0x0000a450, 0x00010000},
- + {0x0000a458, 0x00000000},
- + {0x0000a600, 0x00000000},
- + {0x0000a604, 0x00000000},
- + {0x0000a608, 0x00000000},
- + {0x0000a60c, 0x00000000},
- + {0x0000a610, 0x00000000},
- + {0x0000a614, 0x00000000},
- + {0x0000a618, 0x00000000},
- + {0x0000a61c, 0x00000000},
- + {0x0000a620, 0x00000000},
- + {0x0000a624, 0x00000000},
- + {0x0000a628, 0x00000000},
- + {0x0000a62c, 0x00000000},
- + {0x0000a630, 0x00000000},
- + {0x0000a634, 0x00000000},
- + {0x0000a638, 0x00000000},
- + {0x0000a63c, 0x00000000},
- + {0x0000a640, 0x00000000},
- + {0x0000a644, 0x3ffd9d74},
- + {0x0000a648, 0x0048060a},
- + {0x0000a64c, 0x00000637},
- + {0x0000a670, 0x03020100},
- + {0x0000a674, 0x09080504},
- + {0x0000a678, 0x0d0c0b0a},
- + {0x0000a67c, 0x13121110},
- + {0x0000a680, 0x31301514},
- + {0x0000a684, 0x35343332},
- + {0x0000a688, 0x00000036},
- + {0x0000a690, 0x00000838},
- + {0x0000a7c0, 0x00000000},
- + {0x0000a7c4, 0xfffffffc},
- + {0x0000a7c8, 0x00000000},
- + {0x0000a7cc, 0x00000000},
- + {0x0000a7d0, 0x00000000},
- + {0x0000a7d4, 0x00000004},
- + {0x0000a7dc, 0x00000001},
- + {0x0000a8d0, 0x004b6a8e},
- + {0x0000a8d4, 0x00000820},
- + {0x0000a8dc, 0x00000000},
- + {0x0000a8f0, 0x00000000},
- + {0x0000a8f4, 0x00000000},
- + {0x0000b2d0, 0x00000080},
- + {0x0000b2d4, 0x00000000},
- + {0x0000b2dc, 0x00000000},
- + {0x0000b2e0, 0x00000000},
- + {0x0000b2e4, 0x00000000},
- + {0x0000b2e8, 0x00000000},
- + {0x0000b2ec, 0x00000000},
- + {0x0000b2f0, 0x00000000},
- + {0x0000b2f4, 0x00000000},
- + {0x0000b2f8, 0x00000000},
- + {0x0000b408, 0x0e79e5c0},
- + {0x0000b40c, 0x00820820},
- + {0x0000b420, 0x00000000},
- + {0x0000b8d0, 0x004b6a8e},
- + {0x0000b8d4, 0x00000820},
- + {0x0000b8dc, 0x00000000},
- + {0x0000b8f0, 0x00000000},
- + {0x0000b8f4, 0x00000000},
- + {0x0000c2d0, 0x00000080},
- + {0x0000c2d4, 0x00000000},
- + {0x0000c2dc, 0x00000000},
- + {0x0000c2e0, 0x00000000},
- + {0x0000c2e4, 0x00000000},
- + {0x0000c2e8, 0x00000000},
- + {0x0000c2ec, 0x00000000},
- + {0x0000c2f0, 0x00000000},
- + {0x0000c2f4, 0x00000000},
- + {0x0000c2f8, 0x00000000},
- + {0x0000c408, 0x0e79e5c0},
- + {0x0000c40c, 0x00820820},
- + {0x0000c420, 0x00000000},
- +};
- +
- +static const u32 ar9300Modes_high_power_tx_gain_table_2p0[][5] = {
- + /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
- + {0x0000a410, 0x000050d9, 0x000050d9, 0x000050da, 0x000050da},
- + {0x0000a500, 0x00020220, 0x00020220, 0x00000000, 0x00000000},
- + {0x0000a504, 0x06020223, 0x06020223, 0x04000002, 0x04000002},
- + {0x0000a508, 0x0b022220, 0x0b022220, 0x08000004, 0x08000004},
- + {0x0000a50c, 0x10022223, 0x10022223, 0x0b000200, 0x0b000200},
- + {0x0000a510, 0x17022620, 0x17022620, 0x0f000202, 0x0f000202},
- + {0x0000a514, 0x1b022622, 0x1b022622, 0x11000400, 0x11000400},
- + {0x0000a518, 0x1f022822, 0x1f022822, 0x15000402, 0x15000402},
- + {0x0000a51c, 0x24022842, 0x24022842, 0x19000404, 0x19000404},
- + {0x0000a520, 0x28042840, 0x28042840, 0x1b000603, 0x1b000603},
- + {0x0000a524, 0x2c042842, 0x2c042842, 0x1f000a02, 0x1f000a02},
- + {0x0000a528, 0x30042844, 0x30042844, 0x23000a04, 0x23000a04},
- + {0x0000a52c, 0x34042846, 0x34042846, 0x26000a20, 0x26000a20},
- + {0x0000a530, 0x39042869, 0x39042869, 0x2a000e20, 0x2a000e20},
- + {0x0000a534, 0x3d062869, 0x3d062869, 0x2e000e22, 0x2e000e22},
- + {0x0000a538, 0x44062c69, 0x44062c69, 0x31000e24, 0x31000e24},
- + {0x0000a53c, 0x48063069, 0x48063069, 0x34001640, 0x34001640},
- + {0x0000a540, 0x4c0a3065, 0x4c0a3065, 0x38001660, 0x38001660},
- + {0x0000a544, 0x500a3069, 0x500a3069, 0x3b001861, 0x3b001861},
- + {0x0000a548, 0x530a3469, 0x530a3469, 0x3e001a81, 0x3e001a81},
- + {0x0000a54c, 0x590a7464, 0x590a7464, 0x42001a83, 0x42001a83},
- + {0x0000a550, 0x5e0a7865, 0x5e0a7865, 0x44001c84, 0x44001c84},
- + {0x0000a554, 0x630a7e66, 0x630a7e66, 0x48001ce3, 0x48001ce3},
- + {0x0000a558, 0x680a7e89, 0x680a7e89, 0x4c001ce5, 0x4c001ce5},
- + {0x0000a55c, 0x6e0a7e8c, 0x6e0a7e8c, 0x50001ce9, 0x50001ce9},
- + {0x0000a560, 0x730e7e8c, 0x730e7e8c, 0x54001ceb, 0x54001ceb},
- + {0x0000a564, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
- + {0x0000a568, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
- + {0x0000a56c, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
- + {0x0000a570, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
- + {0x0000a574, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
- + {0x0000a578, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
- + {0x0000a57c, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
- + {0x0000a580, 0x00820220, 0x00820220, 0x00800000, 0x00800000},
- + {0x0000a584, 0x06820223, 0x06820223, 0x04800002, 0x04800002},
- + {0x0000a588, 0x0b822220, 0x0b822220, 0x08800004, 0x08800004},
- + {0x0000a58c, 0x10822223, 0x10822223, 0x0b800200, 0x0b800200},
- + {0x0000a590, 0x17822620, 0x17822620, 0x0f800202, 0x0f800202},
- + {0x0000a594, 0x1b822622, 0x1b822622, 0x11800400, 0x11800400},
- + {0x0000a598, 0x1f822822, 0x1f822822, 0x15800402, 0x15800402},
- + {0x0000a59c, 0x24822842, 0x24822842, 0x19800404, 0x19800404},
- + {0x0000a5a0, 0x28842840, 0x28842840, 0x1b800603, 0x1b800603},
- + {0x0000a5a4, 0x2c842842, 0x2c842842, 0x1f800a02, 0x1f800a02},
- + {0x0000a5a8, 0x30842844, 0x30842844, 0x23800a04, 0x23800a04},
- + {0x0000a5ac, 0x34842846, 0x34842846, 0x26800a20, 0x26800a20},
- + {0x0000a5b0, 0x39842869, 0x39842869, 0x2a800e20, 0x2a800e20},
- + {0x0000a5b4, 0x3d862869, 0x3d862869, 0x2e800e22, 0x2e800e22},
- + {0x0000a5b8, 0x44862c69, 0x44862c69, 0x31800e24, 0x31800e24},
- + {0x0000a5bc, 0x48863069, 0x48863069, 0x34801640, 0x34801640},
- + {0x0000a5c0, 0x4c8a3065, 0x4c8a3065, 0x38801660, 0x38801660},
- + {0x0000a5c4, 0x508a3069, 0x508a3069, 0x3b801861, 0x3b801861},
- + {0x0000a5c8, 0x538a3469, 0x538a3469, 0x3e801a81, 0x3e801a81},
- + {0x0000a5cc, 0x598a7464, 0x598a7464, 0x42801a83, 0x42801a83},
- + {0x0000a5d0, 0x5e8a7865, 0x5e8a7865, 0x44801c84, 0x44801c84},
- + {0x0000a5d4, 0x638a7e66, 0x638a7e66, 0x48801ce3, 0x48801ce3},
- + {0x0000a5d8, 0x688a7e89, 0x688a7e89, 0x4c801ce5, 0x4c801ce5},
- + {0x0000a5dc, 0x6e8a7e8c, 0x6e8a7e8c, 0x50801ce9, 0x50801ce9},
- + {0x0000a5e0, 0x738e7e8c, 0x738e7e8c, 0x54801ceb, 0x54801ceb},
- + {0x0000a5e4, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
- + {0x0000a5e8, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
- + {0x0000a5ec, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
- + {0x0000a5f0, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
- + {0x0000a5f4, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
- + {0x0000a5f8, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
- + {0x0000a5fc, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
- + {0x00016044, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
- + {0x00016048, 0xad241a61, 0xad241a61, 0xad241a61, 0xad241a61},
- + {0x00016068, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
- + {0x00016444, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
- + {0x00016448, 0xad241a61, 0xad241a61, 0xad241a61, 0xad241a61},
- + {0x00016468, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
- + {0x00016844, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
- + {0x00016848, 0xad241a61, 0xad241a61, 0xad241a61, 0xad241a61},
- + {0x00016868, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
- +};
- +
- +static const u32 ar9300Modes_high_ob_db_tx_gain_table_2p0[][5] = {
- + /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
- + {0x0000a410, 0x000050d9, 0x000050d9, 0x000050da, 0x000050da},
- + {0x0000a500, 0x00020220, 0x00020220, 0x00000000, 0x00000000},
- + {0x0000a504, 0x06020223, 0x06020223, 0x04000002, 0x04000002},
- + {0x0000a508, 0x0b022220, 0x0b022220, 0x08000004, 0x08000004},
- + {0x0000a50c, 0x10022223, 0x10022223, 0x0b000200, 0x0b000200},
- + {0x0000a510, 0x17022620, 0x17022620, 0x0f000202, 0x0f000202},
- + {0x0000a514, 0x1b022622, 0x1b022622, 0x11000400, 0x11000400},
- + {0x0000a518, 0x1f022822, 0x1f022822, 0x15000402, 0x15000402},
- + {0x0000a51c, 0x24022842, 0x24022842, 0x19000404, 0x19000404},
- + {0x0000a520, 0x28042840, 0x28042840, 0x1b000603, 0x1b000603},
- + {0x0000a524, 0x2c042842, 0x2c042842, 0x1f000a02, 0x1f000a02},
- + {0x0000a528, 0x30042844, 0x30042844, 0x23000a04, 0x23000a04},
- + {0x0000a52c, 0x34042846, 0x34042846, 0x26000a20, 0x26000a20},
- + {0x0000a530, 0x39042869, 0x39042869, 0x2a000e20, 0x2a000e20},
- + {0x0000a534, 0x3d062869, 0x3d062869, 0x2e000e22, 0x2e000e22},
- + {0x0000a538, 0x44062c69, 0x44062c69, 0x31000e24, 0x31000e24},
- + {0x0000a53c, 0x48063069, 0x48063069, 0x34001640, 0x34001640},
- + {0x0000a540, 0x4c0a3065, 0x4c0a3065, 0x38001660, 0x38001660},
- + {0x0000a544, 0x500a3069, 0x500a3069, 0x3b001861, 0x3b001861},
- + {0x0000a548, 0x530a3469, 0x530a3469, 0x3e001a81, 0x3e001a81},
- + {0x0000a54c, 0x590a7464, 0x590a7464, 0x42001a83, 0x42001a83},
- + {0x0000a550, 0x5e0a7865, 0x5e0a7865, 0x44001c84, 0x44001c84},
- + {0x0000a554, 0x630a7e66, 0x630a7e66, 0x48001ce3, 0x48001ce3},
- + {0x0000a558, 0x680a7e89, 0x680a7e89, 0x4c001ce5, 0x4c001ce5},
- + {0x0000a55c, 0x6e0a7e8c, 0x6e0a7e8c, 0x50001ce9, 0x50001ce9},
- + {0x0000a560, 0x730e7e8c, 0x730e7e8c, 0x54001ceb, 0x54001ceb},
- + {0x0000a564, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
- + {0x0000a568, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
- + {0x0000a56c, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
- + {0x0000a570, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
- + {0x0000a574, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
- + {0x0000a578, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
- + {0x0000a57c, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
- + {0x0000a580, 0x00820220, 0x00820220, 0x00800000, 0x00800000},
- + {0x0000a584, 0x06820223, 0x06820223, 0x04800002, 0x04800002},
- + {0x0000a588, 0x0b822220, 0x0b822220, 0x08800004, 0x08800004},
- + {0x0000a58c, 0x10822223, 0x10822223, 0x0b800200, 0x0b800200},
- + {0x0000a590, 0x17822620, 0x17822620, 0x0f800202, 0x0f800202},
- + {0x0000a594, 0x1b822622, 0x1b822622, 0x11800400, 0x11800400},
- + {0x0000a598, 0x1f822822, 0x1f822822, 0x15800402, 0x15800402},
- + {0x0000a59c, 0x24822842, 0x24822842, 0x19800404, 0x19800404},
- + {0x0000a5a0, 0x28842840, 0x28842840, 0x1b800603, 0x1b800603},
- + {0x0000a5a4, 0x2c842842, 0x2c842842, 0x1f800a02, 0x1f800a02},
- + {0x0000a5a8, 0x30842844, 0x30842844, 0x23800a04, 0x23800a04},
- + {0x0000a5ac, 0x34842846, 0x34842846, 0x26800a20, 0x26800a20},
- + {0x0000a5b0, 0x39842869, 0x39842869, 0x2a800e20, 0x2a800e20},
- + {0x0000a5b4, 0x3d862869, 0x3d862869, 0x2e800e22, 0x2e800e22},
- + {0x0000a5b8, 0x44862c69, 0x44862c69, 0x31800e24, 0x31800e24},
- + {0x0000a5bc, 0x48863069, 0x48863069, 0x34801640, 0x34801640},
- + {0x0000a5c0, 0x4c8a3065, 0x4c8a3065, 0x38801660, 0x38801660},
- + {0x0000a5c4, 0x508a3069, 0x508a3069, 0x3b801861, 0x3b801861},
- + {0x0000a5c8, 0x538a3469, 0x538a3469, 0x3e801a81, 0x3e801a81},
- + {0x0000a5cc, 0x598a7464, 0x598a7464, 0x42801a83, 0x42801a83},
- + {0x0000a5d0, 0x5e8a7865, 0x5e8a7865, 0x44801c84, 0x44801c84},
- + {0x0000a5d4, 0x638a7e66, 0x638a7e66, 0x48801ce3, 0x48801ce3},
- + {0x0000a5d8, 0x688a7e89, 0x688a7e89, 0x4c801ce5, 0x4c801ce5},
- + {0x0000a5dc, 0x6e8a7e8c, 0x6e8a7e8c, 0x50801ce9, 0x50801ce9},
- + {0x0000a5e0, 0x738e7e8c, 0x738e7e8c, 0x54801ceb, 0x54801ceb},
- + {0x0000a5e4, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
- + {0x0000a5e8, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
- + {0x0000a5ec, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
- + {0x0000a5f0, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
- + {0x0000a5f4, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
- + {0x0000a5f8, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
- + {0x0000a5fc, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
- + {0x00016044, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4},
- + {0x00016048, 0x8c001a61, 0x8c001a61, 0x8c001a61, 0x8c001a61},
- + {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
- + {0x00016444, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4},
- + {0x00016448, 0x8c001a61, 0x8c001a61, 0x8c001a61, 0x8c001a61},
- + {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
- + {0x00016844, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4},
- + {0x00016848, 0x8c001a61, 0x8c001a61, 0x8c001a61, 0x8c001a61},
- + {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
- +};
- +
- +static const u32 ar9300Common_rx_gain_table_2p0[][2] = {
- + /* Addr allmodes */
- + {0x0000a000, 0x00010000},
- + {0x0000a004, 0x00030002},
- + {0x0000a008, 0x00050004},
- + {0x0000a00c, 0x00810080},
- + {0x0000a010, 0x01800082},
- + {0x0000a014, 0x01820181},
- + {0x0000a018, 0x01840183},
- + {0x0000a01c, 0x01880185},
- + {0x0000a020, 0x018a0189},
- + {0x0000a024, 0x02850284},
- + {0x0000a028, 0x02890288},
- + {0x0000a02c, 0x028b028a},
- + {0x0000a030, 0x028d028c},
- + {0x0000a034, 0x02910290},
- + {0x0000a038, 0x02930292},
- + {0x0000a03c, 0x03910390},
- + {0x0000a040, 0x03930392},
- + {0x0000a044, 0x03950394},
- + {0x0000a048, 0x00000396},
- + {0x0000a04c, 0x00000000},
- + {0x0000a050, 0x00000000},
- + {0x0000a054, 0x00000000},
- + {0x0000a058, 0x00000000},
- + {0x0000a05c, 0x00000000},
- + {0x0000a060, 0x00000000},
- + {0x0000a064, 0x00000000},
- + {0x0000a068, 0x00000000},
- + {0x0000a06c, 0x00000000},
- + {0x0000a070, 0x00000000},
- + {0x0000a074, 0x00000000},
- + {0x0000a078, 0x00000000},
- + {0x0000a07c, 0x00000000},
- + {0x0000a080, 0x28282828},
- + {0x0000a084, 0x21212128},
- + {0x0000a088, 0x21212121},
- + {0x0000a08c, 0x1c1c1c21},
- + {0x0000a090, 0x1c1c1c1c},
- + {0x0000a094, 0x17171c1c},
- + {0x0000a098, 0x02020212},
- + {0x0000a09c, 0x02020202},
- + {0x0000a0a0, 0x00000000},
- + {0x0000a0a4, 0x00000000},
- + {0x0000a0a8, 0x00000000},
- + {0x0000a0ac, 0x00000000},
- + {0x0000a0b0, 0x00000000},
- + {0x0000a0b4, 0x00000000},
- + {0x0000a0b8, 0x00000000},
- + {0x0000a0bc, 0x00000000},
- + {0x0000a0c0, 0x001f0000},
- + {0x0000a0c4, 0x011f0100},
- + {0x0000a0c8, 0x011d011e},
- + {0x0000a0cc, 0x011b011c},
- + {0x0000a0d0, 0x02030204},
- + {0x0000a0d4, 0x02010202},
- + {0x0000a0d8, 0x021f0200},
- + {0x0000a0dc, 0x021d021e},
- + {0x0000a0e0, 0x03010302},
- + {0x0000a0e4, 0x031f0300},
- + {0x0000a0e8, 0x0402031e},
- + {0x0000a0ec, 0x04000401},
- + {0x0000a0f0, 0x041e041f},
- + {0x0000a0f4, 0x05010502},
- + {0x0000a0f8, 0x051f0500},
- + {0x0000a0fc, 0x0602051e},
- + {0x0000a100, 0x06000601},
- + {0x0000a104, 0x061e061f},
- + {0x0000a108, 0x0703061d},
- + {0x0000a10c, 0x07010702},
- + {0x0000a110, 0x00000700},
- + {0x0000a114, 0x00000000},
- + {0x0000a118, 0x00000000},
- + {0x0000a11c, 0x00000000},
- + {0x0000a120, 0x00000000},
- + {0x0000a124, 0x00000000},
- + {0x0000a128, 0x00000000},
- + {0x0000a12c, 0x00000000},
- + {0x0000a130, 0x00000000},
- + {0x0000a134, 0x00000000},
- + {0x0000a138, 0x00000000},
- + {0x0000a13c, 0x00000000},
- + {0x0000a140, 0x001f0000},
- + {0x0000a144, 0x011f0100},
- + {0x0000a148, 0x011d011e},
- + {0x0000a14c, 0x011b011c},
- + {0x0000a150, 0x02030204},
- + {0x0000a154, 0x02010202},
- + {0x0000a158, 0x021f0200},
- + {0x0000a15c, 0x021d021e},
- + {0x0000a160, 0x03010302},
- + {0x0000a164, 0x031f0300},
- + {0x0000a168, 0x0402031e},
- + {0x0000a16c, 0x04000401},
- + {0x0000a170, 0x041e041f},
- + {0x0000a174, 0x05010502},
- + {0x0000a178, 0x051f0500},
- + {0x0000a17c, 0x0602051e},
- + {0x0000a180, 0x06000601},
- + {0x0000a184, 0x061e061f},
- + {0x0000a188, 0x0703061d},
- + {0x0000a18c, 0x07010702},
- + {0x0000a190, 0x00000700},
- + {0x0000a194, 0x00000000},
- + {0x0000a198, 0x00000000},
- + {0x0000a19c, 0x00000000},
- + {0x0000a1a0, 0x00000000},
- + {0x0000a1a4, 0x00000000},
- + {0x0000a1a8, 0x00000000},
- + {0x0000a1ac, 0x00000000},
- + {0x0000a1b0, 0x00000000},
- + {0x0000a1b4, 0x00000000},
- + {0x0000a1b8, 0x00000000},
- + {0x0000a1bc, 0x00000000},
- + {0x0000a1c0, 0x00000000},
- + {0x0000a1c4, 0x00000000},
- + {0x0000a1c8, 0x00000000},
- + {0x0000a1cc, 0x00000000},
- + {0x0000a1d0, 0x00000000},
- + {0x0000a1d4, 0x00000000},
- + {0x0000a1d8, 0x00000000},
- + {0x0000a1dc, 0x00000000},
- + {0x0000a1e0, 0x00000000},
- + {0x0000a1e4, 0x00000000},
- + {0x0000a1e8, 0x00000000},
- + {0x0000a1ec, 0x00000000},
- + {0x0000a1f0, 0x00000396},
- + {0x0000a1f4, 0x00000396},
- + {0x0000a1f8, 0x00000396},
- + {0x0000a1fc, 0x00000196},
- + {0x0000b000, 0x00010000},
- + {0x0000b004, 0x00030002},
- + {0x0000b008, 0x00050004},
- + {0x0000b00c, 0x00810080},
- + {0x0000b010, 0x00830082},
- + {0x0000b014, 0x01810180},
- + {0x0000b018, 0x01830182},
- + {0x0000b01c, 0x01850184},
- + {0x0000b020, 0x02810280},
- + {0x0000b024, 0x02830282},
- + {0x0000b028, 0x02850284},
- + {0x0000b02c, 0x02890288},
- + {0x0000b030, 0x028b028a},
- + {0x0000b034, 0x0388028c},
- + {0x0000b038, 0x038a0389},
- + {0x0000b03c, 0x038c038b},
- + {0x0000b040, 0x0390038d},
- + {0x0000b044, 0x03920391},
- + {0x0000b048, 0x03940393},
- + {0x0000b04c, 0x03960395},
- + {0x0000b050, 0x00000000},
- + {0x0000b054, 0x00000000},
- + {0x0000b058, 0x00000000},
- + {0x0000b05c, 0x00000000},
- + {0x0000b060, 0x00000000},
- + {0x0000b064, 0x00000000},
- + {0x0000b068, 0x00000000},
- + {0x0000b06c, 0x00000000},
- + {0x0000b070, 0x00000000},
- + {0x0000b074, 0x00000000},
- + {0x0000b078, 0x00000000},
- + {0x0000b07c, 0x00000000},
- + {0x0000b080, 0x32323232},
- + {0x0000b084, 0x2f2f3232},
- + {0x0000b088, 0x23282a2d},
- + {0x0000b08c, 0x1c1e2123},
- + {0x0000b090, 0x14171919},
- + {0x0000b094, 0x0e0e1214},
- + {0x0000b098, 0x03050707},
- + {0x0000b09c, 0x00030303},
- + {0x0000b0a0, 0x00000000},
- + {0x0000b0a4, 0x00000000},
- + {0x0000b0a8, 0x00000000},
- + {0x0000b0ac, 0x00000000},
- + {0x0000b0b0, 0x00000000},
- + {0x0000b0b4, 0x00000000},
- + {0x0000b0b8, 0x00000000},
- + {0x0000b0bc, 0x00000000},
- + {0x0000b0c0, 0x003f0020},
- + {0x0000b0c4, 0x00400041},
- + {0x0000b0c8, 0x0140005f},
- + {0x0000b0cc, 0x0160015f},
- + {0x0000b0d0, 0x017e017f},
- + {0x0000b0d4, 0x02410242},
- + {0x0000b0d8, 0x025f0240},
- + {0x0000b0dc, 0x027f0260},
- + {0x0000b0e0, 0x0341027e},
- + {0x0000b0e4, 0x035f0340},
- + {0x0000b0e8, 0x037f0360},
- + {0x0000b0ec, 0x04400441},
- + {0x0000b0f0, 0x0460045f},
- + {0x0000b0f4, 0x0541047f},
- + {0x0000b0f8, 0x055f0540},
- + {0x0000b0fc, 0x057f0560},
- + {0x0000b100, 0x06400641},
- + {0x0000b104, 0x0660065f},
- + {0x0000b108, 0x067e067f},
- + {0x0000b10c, 0x07410742},
- + {0x0000b110, 0x075f0740},
- + {0x0000b114, 0x077f0760},
- + {0x0000b118, 0x07800781},
- + {0x0000b11c, 0x07a0079f},
- + {0x0000b120, 0x07c107bf},
- + {0x0000b124, 0x000007c0},
- + {0x0000b128, 0x00000000},
- + {0x0000b12c, 0x00000000},
- + {0x0000b130, 0x00000000},
- + {0x0000b134, 0x00000000},
- + {0x0000b138, 0x00000000},
- + {0x0000b13c, 0x00000000},
- + {0x0000b140, 0x003f0020},
- + {0x0000b144, 0x00400041},
- + {0x0000b148, 0x0140005f},
- + {0x0000b14c, 0x0160015f},
- + {0x0000b150, 0x017e017f},
- + {0x0000b154, 0x02410242},
- + {0x0000b158, 0x025f0240},
- + {0x0000b15c, 0x027f0260},
- + {0x0000b160, 0x0341027e},
- + {0x0000b164, 0x035f0340},
- + {0x0000b168, 0x037f0360},
- + {0x0000b16c, 0x04400441},
- + {0x0000b170, 0x0460045f},
- + {0x0000b174, 0x0541047f},
- + {0x0000b178, 0x055f0540},
- + {0x0000b17c, 0x057f0560},
- + {0x0000b180, 0x06400641},
- + {0x0000b184, 0x0660065f},
- + {0x0000b188, 0x067e067f},
- + {0x0000b18c, 0x07410742},
- + {0x0000b190, 0x075f0740},
- + {0x0000b194, 0x077f0760},
- + {0x0000b198, 0x07800781},
- + {0x0000b19c, 0x07a0079f},
- + {0x0000b1a0, 0x07c107bf},
- + {0x0000b1a4, 0x000007c0},
- + {0x0000b1a8, 0x00000000},
- + {0x0000b1ac, 0x00000000},
- + {0x0000b1b0, 0x00000000},
- + {0x0000b1b4, 0x00000000},
- + {0x0000b1b8, 0x00000000},
- + {0x0000b1bc, 0x00000000},
- + {0x0000b1c0, 0x00000000},
- + {0x0000b1c4, 0x00000000},
- + {0x0000b1c8, 0x00000000},
- + {0x0000b1cc, 0x00000000},
- + {0x0000b1d0, 0x00000000},
- + {0x0000b1d4, 0x00000000},
- + {0x0000b1d8, 0x00000000},
- + {0x0000b1dc, 0x00000000},
- + {0x0000b1e0, 0x00000000},
- + {0x0000b1e4, 0x00000000},
- + {0x0000b1e8, 0x00000000},
- + {0x0000b1ec, 0x00000000},
- + {0x0000b1f0, 0x00000396},
- + {0x0000b1f4, 0x00000396},
- + {0x0000b1f8, 0x00000396},
- + {0x0000b1fc, 0x00000196},
- +};
- +
- +static const u32 ar9300Modes_low_ob_db_tx_gain_table_2p0[][5] = {
- + /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
- + {0x0000a410, 0x000050da, 0x000050da, 0x000050da, 0x000050da},
- + {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
- + {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
- + {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004},
- + {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200},
- + {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202},
- + {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400},
- + {0x0000a518, 0x21020220, 0x21020220, 0x16000402, 0x16000402},
- + {0x0000a51c, 0x27020223, 0x27020223, 0x19000404, 0x19000404},
- + {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603},
- + {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02},
- + {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04},
- + {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20},
- + {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20},
- + {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22},
- + {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24},
- + {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640},
- + {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660},
- + {0x0000a544, 0x5302266c, 0x5302266c, 0x3f001861, 0x3f001861},
- + {0x0000a548, 0x5702286c, 0x5702286c, 0x43001a81, 0x43001a81},
- + {0x0000a54c, 0x5c04286b, 0x5c04286b, 0x47001a83, 0x47001a83},
- + {0x0000a550, 0x61042a6c, 0x61042a6c, 0x4a001c84, 0x4a001c84},
- + {0x0000a554, 0x66062a6c, 0x66062a6c, 0x4e001ce3, 0x4e001ce3},
- + {0x0000a558, 0x6b062e6c, 0x6b062e6c, 0x52001ce5, 0x52001ce5},
- + {0x0000a55c, 0x7006308c, 0x7006308c, 0x56001ce9, 0x56001ce9},
- + {0x0000a560, 0x730a308a, 0x730a308a, 0x5a001ceb, 0x5a001ceb},
- + {0x0000a564, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
- + {0x0000a568, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
- + {0x0000a56c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
- + {0x0000a570, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
- + {0x0000a574, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
- + {0x0000a578, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
- + {0x0000a57c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
- + {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
- + {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002},
- + {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004},
- + {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200},
- + {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202},
- + {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400},
- + {0x0000a598, 0x21820220, 0x21820220, 0x16800402, 0x16800402},
- + {0x0000a59c, 0x27820223, 0x27820223, 0x19800404, 0x19800404},
- + {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603},
- + {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02},
- + {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04},
- + {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20},
- + {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20},
- + {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22},
- + {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24},
- + {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640},
- + {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660},
- + {0x0000a5c4, 0x5382266c, 0x5382266c, 0x3f801861, 0x3f801861},
- + {0x0000a5c8, 0x5782286c, 0x5782286c, 0x43801a81, 0x43801a81},
- + {0x0000a5cc, 0x5c84286b, 0x5c84286b, 0x47801a83, 0x47801a83},
- + {0x0000a5d0, 0x61842a6c, 0x61842a6c, 0x4a801c84, 0x4a801c84},
- + {0x0000a5d4, 0x66862a6c, 0x66862a6c, 0x4e801ce3, 0x4e801ce3},
- + {0x0000a5d8, 0x6b862e6c, 0x6b862e6c, 0x52801ce5, 0x52801ce5},
- + {0x0000a5dc, 0x7086308c, 0x7086308c, 0x56801ce9, 0x56801ce9},
- + {0x0000a5e0, 0x738a308a, 0x738a308a, 0x5a801ceb, 0x5a801ceb},
- + {0x0000a5e4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
- + {0x0000a5e8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
- + {0x0000a5ec, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
- + {0x0000a5f0, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
- + {0x0000a5f4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
- + {0x0000a5f8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
- + {0x0000a5fc, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
- + {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
- + {0x00016048, 0x64001a61, 0x64001a61, 0x64001a61, 0x64001a61},
- + {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
- + {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
- + {0x00016448, 0x64001a61, 0x64001a61, 0x64001a61, 0x64001a61},
- + {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
- + {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
- + {0x00016848, 0x64001a61, 0x64001a61, 0x64001a61, 0x64001a61},
- + {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
- +};
- +
- +static const u32 ar9300_2p0_mac_core[][2] = {
- + /* Addr allmodes */
- + {0x00000008, 0x00000000},
- + {0x00000030, 0x00020085},
- + {0x00000034, 0x00000005},
- + {0x00000040, 0x00000000},
- + {0x00000044, 0x00000000},
- + {0x00000048, 0x00000008},
- + {0x0000004c, 0x00000010},
- + {0x00000050, 0x00000000},
- + {0x00001040, 0x002ffc0f},
- + {0x00001044, 0x002ffc0f},
- + {0x00001048, 0x002ffc0f},
- + {0x0000104c, 0x002ffc0f},
- + {0x00001050, 0x002ffc0f},
- + {0x00001054, 0x002ffc0f},
- + {0x00001058, 0x002ffc0f},
- + {0x0000105c, 0x002ffc0f},
- + {0x00001060, 0x002ffc0f},
- + {0x00001064, 0x002ffc0f},
- + {0x000010f0, 0x00000100},
- + {0x00001270, 0x00000000},
- + {0x000012b0, 0x00000000},
- + {0x000012f0, 0x00000000},
- + {0x0000143c, 0x00000000},
- + {0x0000147c, 0x00000000},
- + {0x00008000, 0x00000000},
- + {0x00008004, 0x00000000},
- + {0x00008008, 0x00000000},
- + {0x0000800c, 0x00000000},
- + {0x00008018, 0x00000000},
- + {0x00008020, 0x00000000},
- + {0x00008038, 0x00000000},
- + {0x0000803c, 0x00000000},
- + {0x00008040, 0x00000000},
- + {0x00008044, 0x00000000},
- + {0x00008048, 0x00000000},
- + {0x0000804c, 0xffffffff},
- + {0x00008054, 0x00000000},
- + {0x00008058, 0x00000000},
- + {0x0000805c, 0x000fc78f},
- + {0x00008060, 0x0000000f},
- + {0x00008064, 0x00000000},
- + {0x00008070, 0x00000310},
- + {0x00008074, 0x00000020},
- + {0x00008078, 0x00000000},
- + {0x0000809c, 0x0000000f},
- + {0x000080a0, 0x00000000},
- + {0x000080a4, 0x02ff0000},
- + {0x000080a8, 0x0e070605},
- + {0x000080ac, 0x0000000d},
- + {0x000080b0, 0x00000000},
- + {0x000080b4, 0x00000000},
- + {0x000080b8, 0x00000000},
- + {0x000080bc, 0x00000000},
- + {0x000080c0, 0x2a800000},
- + {0x000080c4, 0x06900168},
- + {0x000080c8, 0x13881c20},
- + {0x000080cc, 0x01f40000},
- + {0x000080d0, 0x00252500},
- + {0x000080d4, 0x00a00000},
- + {0x000080d8, 0x00400000},
- + {0x000080dc, 0x00000000},
- + {0x000080e0, 0xffffffff},
- + {0x000080e4, 0x0000ffff},
- + {0x000080e8, 0x3f3f3f3f},
- + {0x000080ec, 0x00000000},
- + {0x000080f0, 0x00000000},
- + {0x000080f4, 0x00000000},
- + {0x000080fc, 0x00020000},
- + {0x00008100, 0x00000000},
- + {0x00008108, 0x00000052},
- + {0x0000810c, 0x00000000},
- + {0x00008110, 0x00000000},
- + {0x00008114, 0x000007ff},
- + {0x00008118, 0x000000aa},
- + {0x0000811c, 0x00003210},
- + {0x00008124, 0x00000000},
- + {0x00008128, 0x00000000},
- + {0x0000812c, 0x00000000},
- + {0x00008130, 0x00000000},
- + {0x00008134, 0x00000000},
- + {0x00008138, 0x00000000},
- + {0x0000813c, 0x0000ffff},
- + {0x00008144, 0xffffffff},
- + {0x00008168, 0x00000000},
- + {0x0000816c, 0x00000000},
- + {0x00008170, 0x18486200},
- + {0x00008174, 0x33332210},
- + {0x00008178, 0x00000000},
- + {0x0000817c, 0x00020000},
- + {0x000081c0, 0x00000000},
- + {0x000081c4, 0x33332210},
- + {0x000081c8, 0x00000000},
- + {0x000081cc, 0x00000000},
- + {0x000081d4, 0x00000000},
- + {0x000081ec, 0x00000000},
- + {0x000081f0, 0x00000000},
- + {0x000081f4, 0x00000000},
- + {0x000081f8, 0x00000000},
- + {0x000081fc, 0x00000000},
- + {0x00008240, 0x00100000},
- + {0x00008244, 0x0010f424},
- + {0x00008248, 0x00000800},
- + {0x0000824c, 0x0001e848},
- + {0x00008250, 0x00000000},
- + {0x00008254, 0x00000000},
- + {0x00008258, 0x00000000},
- + {0x0000825c, 0x40000000},
- + {0x00008260, 0x00080922},
- + {0x00008264, 0x98a00010},
- + {0x00008268, 0xffffffff},
- + {0x0000826c, 0x0000ffff},
- + {0x00008270, 0x00000000},
- + {0x00008274, 0x40000000},
- + {0x00008278, 0x003e4180},
- + {0x0000827c, 0x00000004},
- + {0x00008284, 0x0000002c},
- + {0x00008288, 0x0000002c},
- + {0x0000828c, 0x000000ff},
- + {0x00008294, 0x00000000},
- + {0x00008298, 0x00000000},
- + {0x0000829c, 0x00000000},
- + {0x00008300, 0x00000140},
- + {0x00008314, 0x00000000},
- + {0x0000831c, 0x0000010d},
- + {0x00008328, 0x00000000},
- + {0x0000832c, 0x00000007},
- + {0x00008330, 0x00000302},
- + {0x00008334, 0x00000700},
- + {0x00008338, 0x00ff0000},
- + {0x0000833c, 0x02400000},
- + {0x00008340, 0x000107ff},
- + {0x00008344, 0xaa48105b},
- + {0x00008348, 0x008f0000},
- + {0x0000835c, 0x00000000},
- + {0x00008360, 0xffffffff},
- + {0x00008364, 0xffffffff},
- + {0x00008368, 0x00000000},
- + {0x00008370, 0x00000000},
- + {0x00008374, 0x000000ff},
- + {0x00008378, 0x00000000},
- + {0x0000837c, 0x00000000},
- + {0x00008380, 0xffffffff},
- + {0x00008384, 0xffffffff},
- + {0x00008390, 0xffffffff},
- + {0x00008394, 0xffffffff},
- + {0x00008398, 0x00000000},
- + {0x0000839c, 0x00000000},
- + {0x000083a0, 0x00000000},
- + {0x000083a4, 0x0000fa14},
- + {0x000083a8, 0x000f0c00},
- + {0x000083ac, 0x33332210},
- + {0x000083b0, 0x33332210},
- + {0x000083b4, 0x33332210},
- + {0x000083b8, 0x33332210},
- + {0x000083bc, 0x00000000},
- + {0x000083c0, 0x00000000},
- + {0x000083c4, 0x00000000},
- + {0x000083c8, 0x00000000},
- + {0x000083cc, 0x00000200},
- + {0x000083d0, 0x000301ff},
- +};
- +
- +static const u32 ar9300Common_wo_xlna_rx_gain_table_2p0[][2] = {
- + /* Addr allmodes */
- + {0x0000a000, 0x00010000},
- + {0x0000a004, 0x00030002},
- + {0x0000a008, 0x00050004},
- + {0x0000a00c, 0x00810080},
- + {0x0000a010, 0x01800082},
- + {0x0000a014, 0x01820181},
- + {0x0000a018, 0x01840183},
- + {0x0000a01c, 0x01880185},
- + {0x0000a020, 0x018a0189},
- + {0x0000a024, 0x02850284},
- + {0x0000a028, 0x02890288},
- + {0x0000a02c, 0x03850384},
- + {0x0000a030, 0x03890388},
- + {0x0000a034, 0x038b038a},
- + {0x0000a038, 0x038d038c},
- + {0x0000a03c, 0x03910390},
- + {0x0000a040, 0x03930392},
- + {0x0000a044, 0x03950394},
- + {0x0000a048, 0x00000396},
- + {0x0000a04c, 0x00000000},
- + {0x0000a050, 0x00000000},
- + {0x0000a054, 0x00000000},
- + {0x0000a058, 0x00000000},
- + {0x0000a05c, 0x00000000},
- + {0x0000a060, 0x00000000},
- + {0x0000a064, 0x00000000},
- + {0x0000a068, 0x00000000},
- + {0x0000a06c, 0x00000000},
- + {0x0000a070, 0x00000000},
- + {0x0000a074, 0x00000000},
- + {0x0000a078, 0x00000000},
- + {0x0000a07c, 0x00000000},
- + {0x0000a080, 0x28282828},
- + {0x0000a084, 0x28282828},
- + {0x0000a088, 0x28282828},
- + {0x0000a08c, 0x28282828},
- + {0x0000a090, 0x28282828},
- + {0x0000a094, 0x21212128},
- + {0x0000a098, 0x171c1c1c},
- + {0x0000a09c, 0x02020212},
- + {0x0000a0a0, 0x00000202},
- + {0x0000a0a4, 0x00000000},
- + {0x0000a0a8, 0x00000000},
- + {0x0000a0ac, 0x00000000},
- + {0x0000a0b0, 0x00000000},
- + {0x0000a0b4, 0x00000000},
- + {0x0000a0b8, 0x00000000},
- + {0x0000a0bc, 0x00000000},
- + {0x0000a0c0, 0x001f0000},
- + {0x0000a0c4, 0x011f0100},
- + {0x0000a0c8, 0x011d011e},
- + {0x0000a0cc, 0x011b011c},
- + {0x0000a0d0, 0x02030204},
- + {0x0000a0d4, 0x02010202},
- + {0x0000a0d8, 0x021f0200},
- + {0x0000a0dc, 0x021d021e},
- + {0x0000a0e0, 0x03010302},
- + {0x0000a0e4, 0x031f0300},
- + {0x0000a0e8, 0x0402031e},
- + {0x0000a0ec, 0x04000401},
- + {0x0000a0f0, 0x041e041f},
- + {0x0000a0f4, 0x05010502},
- + {0x0000a0f8, 0x051f0500},
- + {0x0000a0fc, 0x0602051e},
- + {0x0000a100, 0x06000601},
- + {0x0000a104, 0x061e061f},
- + {0x0000a108, 0x0703061d},
- + {0x0000a10c, 0x07010702},
- + {0x0000a110, 0x00000700},
- + {0x0000a114, 0x00000000},
- + {0x0000a118, 0x00000000},
- + {0x0000a11c, 0x00000000},
- + {0x0000a120, 0x00000000},
- + {0x0000a124, 0x00000000},
- + {0x0000a128, 0x00000000},
- + {0x0000a12c, 0x00000000},
- + {0x0000a130, 0x00000000},
- + {0x0000a134, 0x00000000},
- + {0x0000a138, 0x00000000},
- + {0x0000a13c, 0x00000000},
- + {0x0000a140, 0x001f0000},
- + {0x0000a144, 0x011f0100},
- + {0x0000a148, 0x011d011e},
- + {0x0000a14c, 0x011b011c},
- + {0x0000a150, 0x02030204},
- + {0x0000a154, 0x02010202},
- + {0x0000a158, 0x021f0200},
- + {0x0000a15c, 0x021d021e},
- + {0x0000a160, 0x03010302},
- + {0x0000a164, 0x031f0300},
- + {0x0000a168, 0x0402031e},
- + {0x0000a16c, 0x04000401},
- + {0x0000a170, 0x041e041f},
- + {0x0000a174, 0x05010502},
- + {0x0000a178, 0x051f0500},
- + {0x0000a17c, 0x0602051e},
- + {0x0000a180, 0x06000601},
- + {0x0000a184, 0x061e061f},
- + {0x0000a188, 0x0703061d},
- + {0x0000a18c, 0x07010702},
- + {0x0000a190, 0x00000700},
- + {0x0000a194, 0x00000000},
- + {0x0000a198, 0x00000000},
- + {0x0000a19c, 0x00000000},
- + {0x0000a1a0, 0x00000000},
- + {0x0000a1a4, 0x00000000},
- + {0x0000a1a8, 0x00000000},
- + {0x0000a1ac, 0x00000000},
- + {0x0000a1b0, 0x00000000},
- + {0x0000a1b4, 0x00000000},
- + {0x0000a1b8, 0x00000000},
- + {0x0000a1bc, 0x00000000},
- + {0x0000a1c0, 0x00000000},
- + {0x0000a1c4, 0x00000000},
- + {0x0000a1c8, 0x00000000},
- + {0x0000a1cc, 0x00000000},
- + {0x0000a1d0, 0x00000000},
- + {0x0000a1d4, 0x00000000},
- + {0x0000a1d8, 0x00000000},
- + {0x0000a1dc, 0x00000000},
- + {0x0000a1e0, 0x00000000},
- + {0x0000a1e4, 0x00000000},
- + {0x0000a1e8, 0x00000000},
- + {0x0000a1ec, 0x00000000},
- + {0x0000a1f0, 0x00000396},
- + {0x0000a1f4, 0x00000396},
- + {0x0000a1f8, 0x00000396},
- + {0x0000a1fc, 0x00000296},
- + {0x0000b000, 0x00010000},
- + {0x0000b004, 0x00030002},
- + {0x0000b008, 0x00050004},
- + {0x0000b00c, 0x00810080},
- + {0x0000b010, 0x00830082},
- + {0x0000b014, 0x01810180},
- + {0x0000b018, 0x01830182},
- + {0x0000b01c, 0x01850184},
- + {0x0000b020, 0x02810280},
- + {0x0000b024, 0x02830282},
- + {0x0000b028, 0x02850284},
- + {0x0000b02c, 0x02890288},
- + {0x0000b030, 0x028b028a},
- + {0x0000b034, 0x0388028c},
- + {0x0000b038, 0x038a0389},
- + {0x0000b03c, 0x038c038b},
- + {0x0000b040, 0x0390038d},
- + {0x0000b044, 0x03920391},
- + {0x0000b048, 0x03940393},
- + {0x0000b04c, 0x03960395},
- + {0x0000b050, 0x00000000},
- + {0x0000b054, 0x00000000},
- + {0x0000b058, 0x00000000},
- + {0x0000b05c, 0x00000000},
- + {0x0000b060, 0x00000000},
- + {0x0000b064, 0x00000000},
- + {0x0000b068, 0x00000000},
- + {0x0000b06c, 0x00000000},
- + {0x0000b070, 0x00000000},
- + {0x0000b074, 0x00000000},
- + {0x0000b078, 0x00000000},
- + {0x0000b07c, 0x00000000},
- + {0x0000b080, 0x32323232},
- + {0x0000b084, 0x2f2f3232},
- + {0x0000b088, 0x23282a2d},
- + {0x0000b08c, 0x1c1e2123},
- + {0x0000b090, 0x14171919},
- + {0x0000b094, 0x0e0e1214},
- + {0x0000b098, 0x03050707},
- + {0x0000b09c, 0x00030303},
- + {0x0000b0a0, 0x00000000},
- + {0x0000b0a4, 0x00000000},
- + {0x0000b0a8, 0x00000000},
- + {0x0000b0ac, 0x00000000},
- + {0x0000b0b0, 0x00000000},
- + {0x0000b0b4, 0x00000000},
- + {0x0000b0b8, 0x00000000},
- + {0x0000b0bc, 0x00000000},
- + {0x0000b0c0, 0x003f0020},
- + {0x0000b0c4, 0x00400041},
- + {0x0000b0c8, 0x0140005f},
- + {0x0000b0cc, 0x0160015f},
- + {0x0000b0d0, 0x017e017f},
- + {0x0000b0d4, 0x02410242},
- + {0x0000b0d8, 0x025f0240},
- + {0x0000b0dc, 0x027f0260},
- + {0x0000b0e0, 0x0341027e},
- + {0x0000b0e4, 0x035f0340},
- + {0x0000b0e8, 0x037f0360},
- + {0x0000b0ec, 0x04400441},
- + {0x0000b0f0, 0x0460045f},
- + {0x0000b0f4, 0x0541047f},
- + {0x0000b0f8, 0x055f0540},
- + {0x0000b0fc, 0x057f0560},
- + {0x0000b100, 0x06400641},
- + {0x0000b104, 0x0660065f},
- + {0x0000b108, 0x067e067f},
- + {0x0000b10c, 0x07410742},
- + {0x0000b110, 0x075f0740},
- + {0x0000b114, 0x077f0760},
- + {0x0000b118, 0x07800781},
- + {0x0000b11c, 0x07a0079f},
- + {0x0000b120, 0x07c107bf},
- + {0x0000b124, 0x000007c0},
- + {0x0000b128, 0x00000000},
- + {0x0000b12c, 0x00000000},
- + {0x0000b130, 0x00000000},
- + {0x0000b134, 0x00000000},
- + {0x0000b138, 0x00000000},
- + {0x0000b13c, 0x00000000},
- + {0x0000b140, 0x003f0020},
- + {0x0000b144, 0x00400041},
- + {0x0000b148, 0x0140005f},
- + {0x0000b14c, 0x0160015f},
- + {0x0000b150, 0x017e017f},
- + {0x0000b154, 0x02410242},
- + {0x0000b158, 0x025f0240},
- + {0x0000b15c, 0x027f0260},
- + {0x0000b160, 0x0341027e},
- + {0x0000b164, 0x035f0340},
- + {0x0000b168, 0x037f0360},
- + {0x0000b16c, 0x04400441},
- + {0x0000b170, 0x0460045f},
- + {0x0000b174, 0x0541047f},
- + {0x0000b178, 0x055f0540},
- + {0x0000b17c, 0x057f0560},
- + {0x0000b180, 0x06400641},
- + {0x0000b184, 0x0660065f},
- + {0x0000b188, 0x067e067f},
- + {0x0000b18c, 0x07410742},
- + {0x0000b190, 0x075f0740},
- + {0x0000b194, 0x077f0760},
- + {0x0000b198, 0x07800781},
- + {0x0000b19c, 0x07a0079f},
- + {0x0000b1a0, 0x07c107bf},
- + {0x0000b1a4, 0x000007c0},
- + {0x0000b1a8, 0x00000000},
- + {0x0000b1ac, 0x00000000},
- + {0x0000b1b0, 0x00000000},
- + {0x0000b1b4, 0x00000000},
- + {0x0000b1b8, 0x00000000},
- + {0x0000b1bc, 0x00000000},
- + {0x0000b1c0, 0x00000000},
- + {0x0000b1c4, 0x00000000},
- + {0x0000b1c8, 0x00000000},
- + {0x0000b1cc, 0x00000000},
- + {0x0000b1d0, 0x00000000},
- + {0x0000b1d4, 0x00000000},
- + {0x0000b1d8, 0x00000000},
- + {0x0000b1dc, 0x00000000},
- + {0x0000b1e0, 0x00000000},
- + {0x0000b1e4, 0x00000000},
- + {0x0000b1e8, 0x00000000},
- + {0x0000b1ec, 0x00000000},
- + {0x0000b1f0, 0x00000396},
- + {0x0000b1f4, 0x00000396},
- + {0x0000b1f8, 0x00000396},
- + {0x0000b1fc, 0x00000196},
- +};
- +
- +static const u32 ar9300_2p0_soc_preamble[][2] = {
- + /* Addr allmodes */
- + {0x000040a4, 0x00a0c1c9},
- + {0x00007008, 0x00000000},
- + {0x00007020, 0x00000000},
- + {0x00007034, 0x00000002},
- + {0x00007038, 0x000004c2},
- +};
- +
- +/*
- + * PCIE-PHY programming array, to be used prior to entering
- + * full sleep (holding RTC in reset, PLL is ON in L1 mode)
- + */
- +static const u32 ar9300PciePhy_pll_on_clkreq_disable_L1_2p0[][2] = {
- + {0x00004040, 0x08212e5e},
- + {0x00004040, 0x0008003b},
- + {0x00004044, 0x00000000},
- +};
- +
- +/*
- + * PCIE-PHY programming array, to be used when not in
- + * full sleep (holding RTC in reset)
- + */
- +static const u32 ar9300PciePhy_clkreq_enable_L1_2p0[][2] = {
- + {0x00004040, 0x08253e5e},
- + {0x00004040, 0x0008003b},
- + {0x00004044, 0x00000000},
- +};
- +
- +/*
- + * PCIE-PHY programming array, to be used prior to entering
- + * full sleep (holding RTC in reset)
- + */
- +static const u32 ar9300PciePhy_clkreq_disable_L1_2p0[][2] = {
- + {0x00004040, 0x08213e5e},
- + {0x00004040, 0x0008003b},
- + {0x00004044, 0x00000000},
- +};
- +
- +#endif /* INITVALS_9003_H */
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
- @@ -0,0 +1,610 @@
- +/*
- + * Copyright (c) 2010 Atheros Communications Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +#include "hw.h"
- +
- +static void ar9003_hw_rx_enable(struct ath_hw *hw)
- +{
- + REG_WRITE(hw, AR_CR, 0);
- +}
- +
- +static u16 ar9003_calc_ptr_chksum(struct ar9003_txc *ads)
- +{
- + int checksum;
- +
- + checksum = ads->info + ads->link
- + + ads->data0 + ads->ctl3
- + + ads->data1 + ads->ctl5
- + + ads->data2 + ads->ctl7
- + + ads->data3 + ads->ctl9;
- +
- + return ((checksum & 0xffff) + (checksum >> 16)) & AR_TxPtrChkSum;
- +}
- +
- +static void ar9003_hw_set_desc_link(void *ds, u32 ds_link)
- +{
- + struct ar9003_txc *ads = ds;
- +
- + ads->link = ds_link;
- + ads->ctl10 &= ~AR_TxPtrChkSum;
- + ads->ctl10 |= ar9003_calc_ptr_chksum(ads);
- +}
- +
- +static void ar9003_hw_get_desc_link(void *ds, u32 **ds_link)
- +{
- + struct ar9003_txc *ads = ds;
- +
- + *ds_link = &ads->link;
- +}
- +
- +static bool ar9003_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked)
- +{
- + u32 isr = 0;
- + u32 mask2 = 0;
- + struct ath9k_hw_capabilities *pCap = &ah->caps;
- + u32 sync_cause = 0;
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + if (REG_READ(ah, AR_INTR_ASYNC_CAUSE) & AR_INTR_MAC_IRQ) {
- + if ((REG_READ(ah, AR_RTC_STATUS) & AR_RTC_STATUS_M)
- + == AR_RTC_STATUS_ON)
- + isr = REG_READ(ah, AR_ISR);
- + }
- +
- + sync_cause = REG_READ(ah, AR_INTR_SYNC_CAUSE) & AR_INTR_SYNC_DEFAULT;
- +
- + *masked = 0;
- +
- + if (!isr && !sync_cause)
- + return false;
- +
- + if (isr) {
- + if (isr & AR_ISR_BCNMISC) {
- + u32 isr2;
- + isr2 = REG_READ(ah, AR_ISR_S2);
- +
- + mask2 |= ((isr2 & AR_ISR_S2_TIM) >>
- + MAP_ISR_S2_TIM);
- + mask2 |= ((isr2 & AR_ISR_S2_DTIM) >>
- + MAP_ISR_S2_DTIM);
- + mask2 |= ((isr2 & AR_ISR_S2_DTIMSYNC) >>
- + MAP_ISR_S2_DTIMSYNC);
- + mask2 |= ((isr2 & AR_ISR_S2_CABEND) >>
- + MAP_ISR_S2_CABEND);
- + mask2 |= ((isr2 & AR_ISR_S2_GTT) <<
- + MAP_ISR_S2_GTT);
- + mask2 |= ((isr2 & AR_ISR_S2_CST) <<
- + MAP_ISR_S2_CST);
- + mask2 |= ((isr2 & AR_ISR_S2_TSFOOR) >>
- + MAP_ISR_S2_TSFOOR);
- +
- + if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) {
- + REG_WRITE(ah, AR_ISR_S2, isr2);
- + isr &= ~AR_ISR_BCNMISC;
- + }
- + }
- +
- + if ((pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED))
- + isr = REG_READ(ah, AR_ISR_RAC);
- +
- + if (isr == 0xffffffff) {
- + *masked = 0;
- + return false;
- + }
- +
- + *masked = isr & ATH9K_INT_COMMON;
- +
- + if (ah->config.rx_intr_mitigation)
- + if (isr & (AR_ISR_RXMINTR | AR_ISR_RXINTM))
- + *masked |= ATH9K_INT_RXLP;
- +
- + if (ah->config.tx_intr_mitigation)
- + if (isr & (AR_ISR_TXMINTR | AR_ISR_TXINTM))
- + *masked |= ATH9K_INT_TX;
- +
- + if (isr & (AR_ISR_LP_RXOK | AR_ISR_RXERR))
- + *masked |= ATH9K_INT_RXLP;
- +
- + if (isr & AR_ISR_HP_RXOK)
- + *masked |= ATH9K_INT_RXHP;
- +
- + if (isr & (AR_ISR_TXOK | AR_ISR_TXERR | AR_ISR_TXEOL)) {
- + *masked |= ATH9K_INT_TX;
- +
- + if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) {
- + u32 s0, s1;
- + s0 = REG_READ(ah, AR_ISR_S0);
- + REG_WRITE(ah, AR_ISR_S0, s0);
- + s1 = REG_READ(ah, AR_ISR_S1);
- + REG_WRITE(ah, AR_ISR_S1, s1);
- +
- + isr &= ~(AR_ISR_TXOK | AR_ISR_TXERR |
- + AR_ISR_TXEOL);
- + }
- + }
- +
- + if (isr & AR_ISR_GENTMR) {
- + u32 s5;
- +
- + if (pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)
- + s5 = REG_READ(ah, AR_ISR_S5_S);
- + else
- + s5 = REG_READ(ah, AR_ISR_S5);
- +
- + ah->intr_gen_timer_trigger =
- + MS(s5, AR_ISR_S5_GENTIMER_TRIG);
- +
- + ah->intr_gen_timer_thresh =
- + MS(s5, AR_ISR_S5_GENTIMER_THRESH);
- +
- + if (ah->intr_gen_timer_trigger)
- + *masked |= ATH9K_INT_GENTIMER;
- +
- + if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) {
- + REG_WRITE(ah, AR_ISR_S5, s5);
- + isr &= ~AR_ISR_GENTMR;
- + }
- +
- + }
- +
- + *masked |= mask2;
- +
- + if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) {
- + REG_WRITE(ah, AR_ISR, isr);
- +
- + (void) REG_READ(ah, AR_ISR);
- + }
- + }
- +
- + if (sync_cause) {
- + if (sync_cause & AR_INTR_SYNC_RADM_CPL_TIMEOUT) {
- + REG_WRITE(ah, AR_RC, AR_RC_HOSTIF);
- + REG_WRITE(ah, AR_RC, 0);
- + *masked |= ATH9K_INT_FATAL;
- + }
- +
- + if (sync_cause & AR_INTR_SYNC_LOCAL_TIMEOUT)
- + ath_print(common, ATH_DBG_INTERRUPT,
- + "AR_INTR_SYNC_LOCAL_TIMEOUT\n");
- +
- + REG_WRITE(ah, AR_INTR_SYNC_CAUSE_CLR, sync_cause);
- + (void) REG_READ(ah, AR_INTR_SYNC_CAUSE_CLR);
- +
- + }
- + return true;
- +}
- +
- +static void ar9003_hw_fill_txdesc(struct ath_hw *ah, void *ds, u32 seglen,
- + bool is_firstseg, bool is_lastseg,
- + const void *ds0, dma_addr_t buf_addr,
- + unsigned int qcu)
- +{
- + struct ar9003_txc *ads = (struct ar9003_txc *) ds;
- + unsigned int descid = 0;
- +
- + ads->info = (ATHEROS_VENDOR_ID << AR_DescId_S) |
- + (1 << AR_TxRxDesc_S) |
- + (1 << AR_CtrlStat_S) |
- + (qcu << AR_TxQcuNum_S) | 0x17;
- +
- + ads->data0 = buf_addr;
- + ads->data1 = 0;
- + ads->data2 = 0;
- + ads->data3 = 0;
- +
- + ads->ctl3 = (seglen << AR_BufLen_S);
- + ads->ctl3 &= AR_BufLen;
- +
- + /* Fill in pointer checksum and descriptor id */
- + ads->ctl10 = ar9003_calc_ptr_chksum(ads);
- + ads->ctl10 |= (descid << AR_TxDescId_S);
- +
- + if (is_firstseg) {
- + ads->ctl12 |= (is_lastseg ? 0 : AR_TxMore);
- + } else if (is_lastseg) {
- + ads->ctl11 = 0;
- + ads->ctl12 = 0;
- + ads->ctl13 = AR9003TXC_CONST(ds0)->ctl13;
- + ads->ctl14 = AR9003TXC_CONST(ds0)->ctl14;
- + } else {
- + /* XXX Intermediate descriptor in a multi-descriptor frame.*/
- + ads->ctl11 = 0;
- + ads->ctl12 = AR_TxMore;
- + ads->ctl13 = 0;
- + ads->ctl14 = 0;
- + }
- +}
- +
- +static int ar9003_hw_proc_txdesc(struct ath_hw *ah, void *ds,
- + struct ath_tx_status *ts)
- +{
- + struct ar9003_txs *ads;
- +
- + ads = &ah->ts_ring[ah->ts_tail];
- +
- + if ((ads->status8 & AR_TxDone) == 0)
- + return -EINPROGRESS;
- +
- + ah->ts_tail = (ah->ts_tail + 1) % ah->ts_size;
- +
- + if ((MS(ads->ds_info, AR_DescId) != ATHEROS_VENDOR_ID) ||
- + (MS(ads->ds_info, AR_TxRxDesc) != 1)) {
- + ath_print(ath9k_hw_common(ah), ATH_DBG_XMIT,
- + "Tx Descriptor error %x\n", ads->ds_info);
- + memset(ads, 0, sizeof(*ads));
- + return -EIO;
- + }
- +
- + ts->qid = MS(ads->ds_info, AR_TxQcuNum);
- + ts->desc_id = MS(ads->status1, AR_TxDescId);
- + ts->ts_seqnum = MS(ads->status8, AR_SeqNum);
- + ts->ts_tstamp = ads->status4;
- + ts->ts_status = 0;
- + ts->ts_flags = 0;
- +
- + if (ads->status3 & AR_ExcessiveRetries)
- + ts->ts_status |= ATH9K_TXERR_XRETRY;
- + if (ads->status3 & AR_Filtered)
- + ts->ts_status |= ATH9K_TXERR_FILT;
- + if (ads->status3 & AR_FIFOUnderrun) {
- + ts->ts_status |= ATH9K_TXERR_FIFO;
- + ath9k_hw_updatetxtriglevel(ah, true);
- + }
- + if (ads->status8 & AR_TxOpExceeded)
- + ts->ts_status |= ATH9K_TXERR_XTXOP;
- + if (ads->status3 & AR_TxTimerExpired)
- + ts->ts_status |= ATH9K_TXERR_TIMER_EXPIRED;
- +
- + if (ads->status3 & AR_DescCfgErr)
- + ts->ts_flags |= ATH9K_TX_DESC_CFG_ERR;
- + if (ads->status3 & AR_TxDataUnderrun) {
- + ts->ts_flags |= ATH9K_TX_DATA_UNDERRUN;
- + ath9k_hw_updatetxtriglevel(ah, true);
- + }
- + if (ads->status3 & AR_TxDelimUnderrun) {
- + ts->ts_flags |= ATH9K_TX_DELIM_UNDERRUN;
- + ath9k_hw_updatetxtriglevel(ah, true);
- + }
- + if (ads->status2 & AR_TxBaStatus) {
- + ts->ts_flags |= ATH9K_TX_BA;
- + ts->ba_low = ads->status5;
- + ts->ba_high = ads->status6;
- + }
- +
- + ts->ts_rateindex = MS(ads->status8, AR_FinalTxIdx);
- +
- + ts->ts_rssi = MS(ads->status7, AR_TxRSSICombined);
- + ts->ts_rssi_ctl0 = MS(ads->status2, AR_TxRSSIAnt00);
- + ts->ts_rssi_ctl1 = MS(ads->status2, AR_TxRSSIAnt01);
- + ts->ts_rssi_ctl2 = MS(ads->status2, AR_TxRSSIAnt02);
- + ts->ts_rssi_ext0 = MS(ads->status7, AR_TxRSSIAnt10);
- + ts->ts_rssi_ext1 = MS(ads->status7, AR_TxRSSIAnt11);
- + ts->ts_rssi_ext2 = MS(ads->status7, AR_TxRSSIAnt12);
- + ts->ts_shortretry = MS(ads->status3, AR_RTSFailCnt);
- + ts->ts_longretry = MS(ads->status3, AR_DataFailCnt);
- + ts->ts_virtcol = MS(ads->status3, AR_VirtRetryCnt);
- + ts->ts_antenna = 0;
- +
- + ts->tid = MS(ads->status8, AR_TxTid);
- +
- + memset(ads, 0, sizeof(*ads));
- +
- + return 0;
- +}
- +
- +static void ar9003_hw_set11n_txdesc(struct ath_hw *ah, void *ds,
- + u32 pktlen, enum ath9k_pkt_type type, u32 txpower,
- + u32 keyIx, enum ath9k_key_type keyType, u32 flags)
- +{
- + struct ar9003_txc *ads = (struct ar9003_txc *) ds;
- +
- + txpower += ah->txpower_indexoffset;
- + if (txpower > 63)
- + txpower = 63;
- +
- + ads->ctl11 = (pktlen & AR_FrameLen)
- + | (flags & ATH9K_TXDESC_VMF ? AR_VirtMoreFrag : 0)
- + | SM(txpower, AR_XmitPower)
- + | (flags & ATH9K_TXDESC_VEOL ? AR_VEOL : 0)
- + | (flags & ATH9K_TXDESC_CLRDMASK ? AR_ClrDestMask : 0)
- + | (keyIx != ATH9K_TXKEYIX_INVALID ? AR_DestIdxValid : 0)
- + | (flags & ATH9K_TXDESC_LOWRXCHAIN ? AR_LowRxChain : 0);
- +
- + ads->ctl12 =
- + (keyIx != ATH9K_TXKEYIX_INVALID ? SM(keyIx, AR_DestIdx) : 0)
- + | SM(type, AR_FrameType)
- + | (flags & ATH9K_TXDESC_NOACK ? AR_NoAck : 0)
- + | (flags & ATH9K_TXDESC_EXT_ONLY ? AR_ExtOnly : 0)
- + | (flags & ATH9K_TXDESC_EXT_AND_CTL ? AR_ExtAndCtl : 0);
- +
- + ads->ctl17 = SM(keyType, AR_EncrType) |
- + (flags & ATH9K_TXDESC_LDPC ? AR_LDPC : 0);
- + ads->ctl18 = 0;
- + ads->ctl19 = AR_Not_Sounding;
- +
- + ads->ctl20 = 0;
- + ads->ctl21 = 0;
- + ads->ctl22 = 0;
- +}
- +
- +static void ar9003_hw_set11n_ratescenario(struct ath_hw *ah, void *ds,
- + void *lastds,
- + u32 durUpdateEn, u32 rtsctsRate,
- + u32 rtsctsDuration,
- + struct ath9k_11n_rate_series series[],
- + u32 nseries, u32 flags)
- +{
- + struct ar9003_txc *ads = (struct ar9003_txc *) ds;
- + struct ar9003_txc *last_ads = (struct ar9003_txc *) lastds;
- + u_int32_t ctl11;
- +
- + if (flags & (ATH9K_TXDESC_RTSENA | ATH9K_TXDESC_CTSENA)) {
- + ctl11 = ads->ctl11;
- +
- + if (flags & ATH9K_TXDESC_RTSENA) {
- + ctl11 &= ~AR_CTSEnable;
- + ctl11 |= AR_RTSEnable;
- + } else {
- + ctl11 &= ~AR_RTSEnable;
- + ctl11 |= AR_CTSEnable;
- + }
- +
- + ads->ctl11 = ctl11;
- + } else {
- + ads->ctl11 = (ads->ctl11 & ~(AR_RTSEnable | AR_CTSEnable));
- + }
- +
- + ads->ctl13 = set11nTries(series, 0)
- + | set11nTries(series, 1)
- + | set11nTries(series, 2)
- + | set11nTries(series, 3)
- + | (durUpdateEn ? AR_DurUpdateEna : 0)
- + | SM(0, AR_BurstDur);
- +
- + ads->ctl14 = set11nRate(series, 0)
- + | set11nRate(series, 1)
- + | set11nRate(series, 2)
- + | set11nRate(series, 3);
- +
- + ads->ctl15 = set11nPktDurRTSCTS(series, 0)
- + | set11nPktDurRTSCTS(series, 1);
- +
- + ads->ctl16 = set11nPktDurRTSCTS(series, 2)
- + | set11nPktDurRTSCTS(series, 3);
- +
- + ads->ctl18 = set11nRateFlags(series, 0)
- + | set11nRateFlags(series, 1)
- + | set11nRateFlags(series, 2)
- + | set11nRateFlags(series, 3)
- + | SM(rtsctsRate, AR_RTSCTSRate);
- + ads->ctl19 = AR_Not_Sounding;
- +
- + last_ads->ctl13 = ads->ctl13;
- + last_ads->ctl14 = ads->ctl14;
- +}
- +
- +static void ar9003_hw_set11n_aggr_first(struct ath_hw *ah, void *ds,
- + u32 aggrLen)
- +{
- + struct ar9003_txc *ads = (struct ar9003_txc *) ds;
- +
- + ads->ctl12 |= (AR_IsAggr | AR_MoreAggr);
- +
- + ads->ctl17 &= ~AR_AggrLen;
- + ads->ctl17 |= SM(aggrLen, AR_AggrLen);
- +}
- +
- +static void ar9003_hw_set11n_aggr_middle(struct ath_hw *ah, void *ds,
- + u32 numDelims)
- +{
- + struct ar9003_txc *ads = (struct ar9003_txc *) ds;
- + unsigned int ctl17;
- +
- + ads->ctl12 |= (AR_IsAggr | AR_MoreAggr);
- +
- + /*
- + * We use a stack variable to manipulate ctl6 to reduce uncached
- + * read modify, modfiy, write.
- + */
- + ctl17 = ads->ctl17;
- + ctl17 &= ~AR_PadDelim;
- + ctl17 |= SM(numDelims, AR_PadDelim);
- + ads->ctl17 = ctl17;
- +}
- +
- +static void ar9003_hw_set11n_aggr_last(struct ath_hw *ah, void *ds)
- +{
- + struct ar9003_txc *ads = (struct ar9003_txc *) ds;
- +
- + ads->ctl12 |= AR_IsAggr;
- + ads->ctl12 &= ~AR_MoreAggr;
- + ads->ctl17 &= ~AR_PadDelim;
- +}
- +
- +static void ar9003_hw_clr11n_aggr(struct ath_hw *ah, void *ds)
- +{
- + struct ar9003_txc *ads = (struct ar9003_txc *) ds;
- +
- + ads->ctl12 &= (~AR_IsAggr & ~AR_MoreAggr);
- +}
- +
- +static void ar9003_hw_set11n_burstduration(struct ath_hw *ah, void *ds,
- + u32 burstDuration)
- +{
- + struct ar9003_txc *ads = (struct ar9003_txc *) ds;
- +
- + ads->ctl13 &= ~AR_BurstDur;
- + ads->ctl13 |= SM(burstDuration, AR_BurstDur);
- +
- +}
- +
- +static void ar9003_hw_set11n_virtualmorefrag(struct ath_hw *ah, void *ds,
- + u32 vmf)
- +{
- + struct ar9003_txc *ads = (struct ar9003_txc *) ds;
- +
- + if (vmf)
- + ads->ctl11 |= AR_VirtMoreFrag;
- + else
- + ads->ctl11 &= ~AR_VirtMoreFrag;
- +}
- +
- +void ar9003_hw_attach_mac_ops(struct ath_hw *hw)
- +{
- + struct ath_hw_ops *ops = ath9k_hw_ops(hw);
- +
- + ops->rx_enable = ar9003_hw_rx_enable;
- + ops->set_desc_link = ar9003_hw_set_desc_link;
- + ops->get_desc_link = ar9003_hw_get_desc_link;
- + ops->get_isr = ar9003_hw_get_isr;
- + ops->fill_txdesc = ar9003_hw_fill_txdesc;
- + ops->proc_txdesc = ar9003_hw_proc_txdesc;
- + ops->set11n_txdesc = ar9003_hw_set11n_txdesc;
- + ops->set11n_ratescenario = ar9003_hw_set11n_ratescenario;
- + ops->set11n_aggr_first = ar9003_hw_set11n_aggr_first;
- + ops->set11n_aggr_middle = ar9003_hw_set11n_aggr_middle;
- + ops->set11n_aggr_last = ar9003_hw_set11n_aggr_last;
- + ops->clr11n_aggr = ar9003_hw_clr11n_aggr;
- + ops->set11n_burstduration = ar9003_hw_set11n_burstduration;
- + ops->set11n_virtualmorefrag = ar9003_hw_set11n_virtualmorefrag;
- +}
- +
- +void ath9k_hw_set_rx_bufsize(struct ath_hw *ah, u16 buf_size)
- +{
- + REG_WRITE(ah, AR_DATABUF_SIZE, buf_size & AR_DATABUF_SIZE_MASK);
- +}
- +EXPORT_SYMBOL(ath9k_hw_set_rx_bufsize);
- +
- +void ath9k_hw_addrxbuf_edma(struct ath_hw *ah, u32 rxdp,
- + enum ath9k_rx_qtype qtype)
- +{
- + if (qtype == ATH9K_RX_QUEUE_HP)
- + REG_WRITE(ah, AR_HP_RXDP, rxdp);
- + else
- + REG_WRITE(ah, AR_LP_RXDP, rxdp);
- +}
- +EXPORT_SYMBOL(ath9k_hw_addrxbuf_edma);
- +
- +int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah, struct ath_rx_status *rxs,
- + void *buf_addr)
- +{
- + struct ar9003_rxs *rxsp = (struct ar9003_rxs *) buf_addr;
- + unsigned int phyerr;
- +
- + /* TODO: byte swap on big endian for ar9300_10 */
- +
- + if ((rxsp->status11 & AR_RxDone) == 0)
- + return -EINPROGRESS;
- +
- + if (MS(rxsp->ds_info, AR_DescId) != 0x168c)
- + return -EINVAL;
- +
- + if ((rxsp->ds_info & (AR_TxRxDesc | AR_CtrlStat)) != 0)
- + return -EINPROGRESS;
- +
- + if (!rxs)
- + return 0;
- +
- + rxs->rs_status = 0;
- + rxs->rs_flags = 0;
- +
- + rxs->rs_datalen = rxsp->status2 & AR_DataLen;
- + rxs->rs_tstamp = rxsp->status3;
- +
- + /* XXX: Keycache */
- + rxs->rs_rssi = MS(rxsp->status5, AR_RxRSSICombined);
- + rxs->rs_rssi_ctl0 = MS(rxsp->status1, AR_RxRSSIAnt00);
- + rxs->rs_rssi_ctl1 = MS(rxsp->status1, AR_RxRSSIAnt01);
- + rxs->rs_rssi_ctl2 = MS(rxsp->status1, AR_RxRSSIAnt02);
- + rxs->rs_rssi_ext0 = MS(rxsp->status5, AR_RxRSSIAnt10);
- + rxs->rs_rssi_ext1 = MS(rxsp->status5, AR_RxRSSIAnt11);
- + rxs->rs_rssi_ext2 = MS(rxsp->status5, AR_RxRSSIAnt12);
- +
- + if (rxsp->status11 & AR_RxKeyIdxValid)
- + rxs->rs_keyix = MS(rxsp->status11, AR_KeyIdx);
- + else
- + rxs->rs_keyix = ATH9K_RXKEYIX_INVALID;
- +
- + rxs->rs_rate = MS(rxsp->status1, AR_RxRate);
- + rxs->rs_more = (rxsp->status2 & AR_RxMore) ? 1 : 0;
- +
- + rxs->rs_isaggr = (rxsp->status11 & AR_RxAggr) ? 1 : 0;
- + rxs->rs_moreaggr = (rxsp->status11 & AR_RxMoreAggr) ? 1 : 0;
- + rxs->rs_antenna = (MS(rxsp->status4, AR_RxAntenna) & 0x7);
- + rxs->rs_flags = (rxsp->status4 & AR_GI) ? ATH9K_RX_GI : 0;
- + rxs->rs_flags |= (rxsp->status4 & AR_2040) ? ATH9K_RX_2040 : 0;
- +
- + rxs->evm0 = rxsp->status6;
- + rxs->evm1 = rxsp->status7;
- + rxs->evm2 = rxsp->status8;
- + rxs->evm3 = rxsp->status9;
- + rxs->evm4 = (rxsp->status10 & 0xffff);
- +
- + if (rxsp->status11 & AR_PreDelimCRCErr)
- + rxs->rs_flags |= ATH9K_RX_DELIM_CRC_PRE;
- +
- + if (rxsp->status11 & AR_PostDelimCRCErr)
- + rxs->rs_flags |= ATH9K_RX_DELIM_CRC_POST;
- +
- + if (rxsp->status11 & AR_DecryptBusyErr)
- + rxs->rs_flags |= ATH9K_RX_DECRYPT_BUSY;
- +
- + if ((rxsp->status11 & AR_RxFrameOK) == 0) {
- + if (rxsp->status11 & AR_CRCErr) {
- + rxs->rs_status |= ATH9K_RXERR_CRC;
- + } else if (rxsp->status11 & AR_PHYErr) {
- + rxs->rs_status |= ATH9K_RXERR_PHY;
- + phyerr = MS(rxsp->status11, AR_PHYErrCode);
- + rxs->rs_phyerr = phyerr;
- + } else if (rxsp->status11 & AR_DecryptCRCErr) {
- + rxs->rs_status |= ATH9K_RXERR_DECRYPT;
- + } else if (rxsp->status11 & AR_MichaelErr) {
- + rxs->rs_status |= ATH9K_RXERR_MIC;
- + }
- + }
- +
- + return 0;
- +}
- +EXPORT_SYMBOL(ath9k_hw_process_rxdesc_edma);
- +
- +void ath9k_hw_reset_txstatus_ring(struct ath_hw *ah)
- +{
- + ah->ts_tail = 0;
- +
- + memset((void *) ah->ts_ring, 0,
- + ah->ts_size * sizeof(struct ar9003_txs));
- +
- + ath_print(ath9k_hw_common(ah), ATH_DBG_XMIT,
- + "TS Start 0x%x End 0x%x Virt %p, Size %d\n",
- + ah->ts_paddr_start, ah->ts_paddr_end,
- + ah->ts_ring, ah->ts_size);
- +
- + REG_WRITE(ah, AR_Q_STATUS_RING_START, ah->ts_paddr_start);
- + REG_WRITE(ah, AR_Q_STATUS_RING_END, ah->ts_paddr_end);
- +}
- +
- +void ath9k_hw_setup_statusring(struct ath_hw *ah, void *ts_start,
- + u32 ts_paddr_start,
- + u8 size)
- +{
- +
- + ah->ts_paddr_start = ts_paddr_start;
- + ah->ts_paddr_end = ts_paddr_start + (size * sizeof(struct ar9003_txs));
- + ah->ts_size = size;
- + ah->ts_ring = (struct ar9003_txs *) ts_start;
- +
- + ath9k_hw_reset_txstatus_ring(ah);
- +}
- +EXPORT_SYMBOL(ath9k_hw_setup_statusring);
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.h
- @@ -0,0 +1,124 @@
- +/*
- + * Copyright (c) 2010 Atheros Communications Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +
- +#ifndef AR9003_MAC_H
- +#define AR9003_MAC_H
- +
- +#define AR_DescId 0xffff0000
- +#define AR_DescId_S 16
- +#define AR_CtrlStat 0x00004000
- +#define AR_CtrlStat_S 14
- +#define AR_TxRxDesc 0x00008000
- +#define AR_TxRxDesc_S 15
- +#define AR_TxQcuNum 0x00000f00
- +#define AR_TxQcuNum_S 8
- +#define AR_BufLen_S 16
- +
- +#define AR_TxDescId 0xffff0000
- +#define AR_TxDescId_S 16
- +#define AR_TxPtrChkSum 0x0000ffff
- +
- +#define AR_TxTid 0xf0000000
- +#define AR_TxTid_S 28
- +
- +#define AR_LowRxChain 0x00004000
- +
- +#define AR_Not_Sounding 0x20000000
- +
- +#define MAP_ISR_S2_CST 6
- +#define MAP_ISR_S2_GTT 6
- +#define MAP_ISR_S2_TIM 3
- +#define MAP_ISR_S2_CABEND 0
- +#define MAP_ISR_S2_DTIMSYNC 7
- +#define MAP_ISR_S2_DTIM 7
- +#define MAP_ISR_S2_TSFOOR 4
- +
- +#define AR9003TXC_CONST(_ds) ((const struct ar9003_txc *) _ds)
- +
- +enum ath9k_rx_qtype {
- + ATH9K_RX_QUEUE_HP,
- + ATH9K_RX_QUEUE_LP,
- + ATH9K_RX_QUEUE_MAX,
- +};
- +
- +struct ar9003_rxs {
- + u32 ds_info;
- + u32 status1;
- + u32 status2;
- + u32 status3;
- + u32 status4;
- + u32 status5;
- + u32 status6;
- + u32 status7;
- + u32 status8;
- + u32 status9;
- + u32 status10;
- + u32 status11;
- +} __packed;
- +
- +/* Transmit Control Descriptor */
- +struct ar9003_txc {
- + u32 info; /* descriptor information */
- + u32 link; /* link pointer */
- + u32 data0; /* data pointer to 1st buffer */
- + u32 ctl3; /* DMA control 3 */
- + u32 data1; /* data pointer to 2nd buffer */
- + u32 ctl5; /* DMA control 5 */
- + u32 data2; /* data pointer to 3rd buffer */
- + u32 ctl7; /* DMA control 7 */
- + u32 data3; /* data pointer to 4th buffer */
- + u32 ctl9; /* DMA control 9 */
- + u32 ctl10; /* DMA control 10 */
- + u32 ctl11; /* DMA control 11 */
- + u32 ctl12; /* DMA control 12 */
- + u32 ctl13; /* DMA control 13 */
- + u32 ctl14; /* DMA control 14 */
- + u32 ctl15; /* DMA control 15 */
- + u32 ctl16; /* DMA control 16 */
- + u32 ctl17; /* DMA control 17 */
- + u32 ctl18; /* DMA control 18 */
- + u32 ctl19; /* DMA control 19 */
- + u32 ctl20; /* DMA control 20 */
- + u32 ctl21; /* DMA control 21 */
- + u32 ctl22; /* DMA control 22 */
- + u32 pad[9]; /* pad to cache line (128 bytes/32 dwords) */
- +} __packed;
- +
- +struct ar9003_txs {
- + u32 ds_info;
- + u32 status1;
- + u32 status2;
- + u32 status3;
- + u32 status4;
- + u32 status5;
- + u32 status6;
- + u32 status7;
- + u32 status8;
- +} __packed;
- +
- +void ar9003_hw_attach_mac_ops(struct ath_hw *hw);
- +void ath9k_hw_set_rx_bufsize(struct ath_hw *ah, u16 buf_size);
- +void ath9k_hw_addrxbuf_edma(struct ath_hw *ah, u32 rxdp,
- + enum ath9k_rx_qtype qtype);
- +
- +int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah,
- + struct ath_rx_status *rxs,
- + void *buf_addr);
- +void ath9k_hw_reset_txstatus_ring(struct ath_hw *ah);
- +void ath9k_hw_setup_statusring(struct ath_hw *ah, void *ts_start,
- + u32 ts_paddr_start,
- + u8 size);
- +#endif
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
- @@ -0,0 +1,1138 @@
- +/*
- + * Copyright (c) 2010 Atheros Communications Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +
- +#include "hw.h"
- +#include "ar9003_phy.h"
- +
- +/**
- + * ar9003_hw_set_channel - set channel on single-chip device
- + * @ah: atheros hardware structure
- + * @chan:
- + *
- + * This is the function to change channel on single-chip devices, that is
- + * all devices after ar9280.
- + *
- + * This function takes the channel value in MHz and sets
- + * hardware channel value. Assumes writes have been enabled to analog bus.
- + *
- + * Actual Expression,
- + *
- + * For 2GHz channel,
- + * Channel Frequency = (3/4) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^17)
- + * (freq_ref = 40MHz)
- + *
- + * For 5GHz channel,
- + * Channel Frequency = (3/2) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^10)
- + * (freq_ref = 40MHz/(24>>amodeRefSel))
- + *
- + * For 5GHz channels which are 5MHz spaced,
- + * Channel Frequency = (3/2) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^17)
- + * (freq_ref = 40MHz)
- + */
- +static int ar9003_hw_set_channel(struct ath_hw *ah, struct ath9k_channel *chan)
- +{
- + u16 bMode, fracMode = 0, aModeRefSel = 0;
- + u32 freq, channelSel = 0, reg32 = 0;
- + struct chan_centers centers;
- + int loadSynthChannel;
- +
- + ath9k_hw_get_channel_centers(ah, chan, ¢ers);
- + freq = centers.synth_center;
- +
- + if (freq < 4800) { /* 2 GHz, fractional mode */
- + channelSel = CHANSEL_2G(freq);
- + /* Set to 2G mode */
- + bMode = 1;
- + } else {
- + channelSel = CHANSEL_5G(freq);
- + /* Doubler is ON, so, divide channelSel by 2. */
- + channelSel >>= 1;
- + /* Set to 5G mode */
- + bMode = 0;
- + }
- +
- + /* Enable fractional mode for all channels */
- + fracMode = 1;
- + aModeRefSel = 0;
- + loadSynthChannel = 0;
- +
- + reg32 = (bMode << 29);
- + REG_WRITE(ah, AR_PHY_SYNTH_CONTROL, reg32);
- +
- + /* Enable Long shift Select for Synthesizer */
- + REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_SYNTH4,
- + AR_PHY_SYNTH4_LONG_SHIFT_SELECT, 1);
- +
- + /* Program Synth. setting */
- + reg32 = (channelSel << 2 ) | (fracMode << 30) |
- + (aModeRefSel << 28) | (loadSynthChannel << 31);
- + REG_WRITE(ah, AR_PHY_65NM_CH0_SYNTH7, reg32);
- +
- + /* Toggle Load Synth channel bit */
- + loadSynthChannel = 1;
- + reg32 = (channelSel << 2 ) | (fracMode << 30) |
- + (aModeRefSel << 28) | (loadSynthChannel << 31);
- + REG_WRITE(ah, AR_PHY_65NM_CH0_SYNTH7, reg32);
- +
- + ah->curchan = chan;
- + ah->curchan_rad_index = -1;
- +
- + return 0;
- +}
- +
- +/**
- + * ar9003_hw_spur_mitigate - convert baseband spur frequency
- + * @ah: atheros hardware structure
- + * @chan:
- + *
- + * For single-chip solutions. Converts to baseband spur frequency given the
- + * input channel frequency and compute register settings below.
- + *
- + * Spur mitigation for MRC CCK
- + */
- +static void ar9003_hw_spur_mitigate_mrc_cck(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + u32 spur_freq[4] = { 2420, 2440, 2464, 2480 };
- + int cur_bb_spur, negative = 0, cck_spur_freq;
- + int i;
- +
- + /*
- + * Need to verify range +/- 10 MHz in control channel, otherwise spur
- + * is out-of-band and can be ignored.
- + */
- +
- + for (i = 0; i < 4; i++) {
- + negative = 0;
- + cur_bb_spur = spur_freq[i] - chan->channel;
- +
- + if(cur_bb_spur < 0) {
- + negative = 1;
- + cur_bb_spur = -cur_bb_spur;
- + }
- + if (cur_bb_spur < 10) {
- + cck_spur_freq = (int)((cur_bb_spur << 19) / 11);
- +
- + if (negative == 1)
- + cck_spur_freq = -cck_spur_freq;
- +
- + cck_spur_freq = cck_spur_freq & 0xfffff;
- +
- + REG_RMW_FIELD(ah, AR_PHY_AGC_CONTROL,
- + AR_PHY_AGC_CONTROL_YCOK_MAX, 0x7);
- + REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
- + AR_PHY_CCK_SPUR_MIT_SPUR_RSSI_THR, 0x7f);
- + REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
- + AR_PHY_CCK_SPUR_MIT_SPUR_FILTER_TYPE, 0x2);
- + REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
- + AR_PHY_CCK_SPUR_MIT_USE_CCK_SPUR_MIT, 0x1);
- + REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
- + AR_PHY_CCK_SPUR_MIT_CCK_SPUR_FREQ, cck_spur_freq);
- +
- + return;
- + }
- + }
- +
- + REG_RMW_FIELD(ah, AR_PHY_AGC_CONTROL,
- + AR_PHY_AGC_CONTROL_YCOK_MAX, 0x5);
- + REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
- + AR_PHY_CCK_SPUR_MIT_USE_CCK_SPUR_MIT, 0x0);
- + REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
- + AR_PHY_CCK_SPUR_MIT_CCK_SPUR_FREQ, 0x0);
- +}
- +
- +/* Clean all spur register fields */
- +static void ar9003_hw_spur_ofdm_clear(struct ath_hw *ah)
- +{
- + REG_RMW_FIELD(ah, AR_PHY_TIMING4,
- + AR_PHY_TIMING4_ENABLE_SPUR_FILTER, 0);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING11,
- + AR_PHY_TIMING11_SPUR_FREQ_SD, 0);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING11,
- + AR_PHY_TIMING11_SPUR_DELTA_PHASE, 0);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
- + AR_PHY_SFCORR_EXT_SPUR_SUBCHANNEL_SD, 0);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING11,
- + AR_PHY_TIMING11_USE_SPUR_FILTER_IN_AGC, 0);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING11,
- + AR_PHY_TIMING11_USE_SPUR_FILTER_IN_SELFCOR, 0);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING4,
- + AR_PHY_TIMING4_ENABLE_SPUR_RSSI, 0);
- + REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
- + AR_PHY_SPUR_REG_EN_VIT_SPUR_RSSI, 0);
- + REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
- + AR_PHY_SPUR_REG_ENABLE_NF_RSSI_SPUR_MIT, 0);
- +
- + REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
- + AR_PHY_SPUR_REG_ENABLE_MASK_PPM, 0);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING4,
- + AR_PHY_TIMING4_ENABLE_PILOT_MASK, 0);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING4,
- + AR_PHY_TIMING4_ENABLE_CHAN_MASK, 0);
- + REG_RMW_FIELD(ah, AR_PHY_PILOT_SPUR_MASK,
- + AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_A, 0);
- + REG_RMW_FIELD(ah, AR_PHY_SPUR_MASK_A,
- + AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_IDX_A, 0);
- + REG_RMW_FIELD(ah, AR_PHY_CHAN_SPUR_MASK,
- + AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_A, 0);
- + REG_RMW_FIELD(ah, AR_PHY_PILOT_SPUR_MASK,
- + AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_A, 0);
- + REG_RMW_FIELD(ah, AR_PHY_CHAN_SPUR_MASK,
- + AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_A, 0);
- + REG_RMW_FIELD(ah, AR_PHY_SPUR_MASK_A,
- + AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_A, 0);
- + REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
- + AR_PHY_SPUR_REG_MASK_RATE_CNTL, 0);
- +}
- +
- +static void ar9003_hw_spur_ofdm(struct ath_hw *ah,
- + int freq_offset,
- + int spur_freq_sd,
- + int spur_delta_phase,
- + int spur_subchannel_sd)
- +{
- + int mask_index = 0;
- +
- + /* OFDM Spur mitigation */
- + REG_RMW_FIELD(ah, AR_PHY_TIMING4,
- + AR_PHY_TIMING4_ENABLE_SPUR_FILTER, 0x1);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING11,
- + AR_PHY_TIMING11_SPUR_FREQ_SD, spur_freq_sd);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING11,
- + AR_PHY_TIMING11_SPUR_DELTA_PHASE, spur_delta_phase);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
- + AR_PHY_SFCORR_EXT_SPUR_SUBCHANNEL_SD, spur_subchannel_sd);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING11,
- + AR_PHY_TIMING11_USE_SPUR_FILTER_IN_AGC, 0x1);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING11,
- + AR_PHY_TIMING11_USE_SPUR_FILTER_IN_SELFCOR, 0x1);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING4,
- + AR_PHY_TIMING4_ENABLE_SPUR_RSSI, 0x1);
- + REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
- + AR_PHY_SPUR_REG_SPUR_RSSI_THRESH, 34);
- + REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
- + AR_PHY_SPUR_REG_EN_VIT_SPUR_RSSI, 1);
- +
- + if (REG_READ_FIELD(ah, AR_PHY_MODE,
- + AR_PHY_MODE_DYNAMIC) == 0x1)
- + REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
- + AR_PHY_SPUR_REG_ENABLE_NF_RSSI_SPUR_MIT, 1);
- +
- + mask_index = (freq_offset << 4) / 5;
- + if (mask_index < 0)
- + mask_index = mask_index - 1;
- +
- + mask_index = mask_index & 0x7f;
- +
- + REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
- + AR_PHY_SPUR_REG_ENABLE_MASK_PPM, 0x1);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING4,
- + AR_PHY_TIMING4_ENABLE_PILOT_MASK, 0x1);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING4,
- + AR_PHY_TIMING4_ENABLE_CHAN_MASK, 0x1);
- + REG_RMW_FIELD(ah, AR_PHY_PILOT_SPUR_MASK,
- + AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_A, mask_index);
- + REG_RMW_FIELD(ah, AR_PHY_SPUR_MASK_A,
- + AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_IDX_A, mask_index);
- + REG_RMW_FIELD(ah, AR_PHY_CHAN_SPUR_MASK,
- + AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_A, mask_index);
- + REG_RMW_FIELD(ah, AR_PHY_PILOT_SPUR_MASK,
- + AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_A, 0xc);
- + REG_RMW_FIELD(ah, AR_PHY_CHAN_SPUR_MASK,
- + AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_A, 0xc);
- + REG_RMW_FIELD(ah, AR_PHY_SPUR_MASK_A,
- + AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_A, 0xa0);
- + REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
- + AR_PHY_SPUR_REG_MASK_RATE_CNTL, 0xff);
- +}
- +
- +static void ar9003_hw_spur_ofdm_work(struct ath_hw *ah,
- + struct ath9k_channel *chan,
- + int freq_offset)
- +{
- + int spur_freq_sd = 0;
- + int spur_subchannel_sd = 0;
- + int spur_delta_phase = 0;
- +
- + if (IS_CHAN_HT40(chan)) {
- + if (freq_offset < 0) {
- + if (REG_READ_FIELD(ah, AR_PHY_GEN_CTRL,
- + AR_PHY_GC_DYN2040_PRI_CH) == 0x0)
- + spur_subchannel_sd = 1;
- + else
- + spur_subchannel_sd = 0;
- +
- + spur_freq_sd = ((freq_offset + 10) << 9) / 11;
- +
- + } else {
- + if (REG_READ_FIELD(ah, AR_PHY_GEN_CTRL,
- + AR_PHY_GC_DYN2040_PRI_CH) == 0x0)
- + spur_subchannel_sd = 0;
- + else
- + spur_subchannel_sd = 1;
- +
- + spur_freq_sd = ((freq_offset - 10) << 9) / 11;
- +
- + }
- +
- + spur_delta_phase = (freq_offset << 17) / 5;
- +
- + } else {
- + spur_subchannel_sd = 0;
- + spur_freq_sd = (freq_offset << 9) /11;
- + spur_delta_phase = (freq_offset << 18) / 5;
- + }
- +
- + spur_freq_sd = spur_freq_sd & 0x3ff;
- + spur_delta_phase = spur_delta_phase & 0xfffff;
- +
- + ar9003_hw_spur_ofdm(ah,
- + freq_offset,
- + spur_freq_sd,
- + spur_delta_phase,
- + spur_subchannel_sd);
- +}
- +
- +/* Spur mitigation for OFDM */
- +static void ar9003_hw_spur_mitigate_ofdm(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + int synth_freq;
- + int range = 10;
- + int freq_offset = 0;
- + int mode;
- + u8* spurChansPtr;
- + unsigned int i;
- + struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
- +
- + if (IS_CHAN_5GHZ(chan)) {
- + spurChansPtr = &(eep->modalHeader5G.spurChans[0]);
- + mode = 0;
- + }
- + else {
- + spurChansPtr = &(eep->modalHeader2G.spurChans[0]);
- + mode = 1;
- + }
- +
- + if (spurChansPtr[0] == 0)
- + return; /* No spur in the mode */
- +
- + if (IS_CHAN_HT40(chan)) {
- + range = 19;
- + if (REG_READ_FIELD(ah, AR_PHY_GEN_CTRL,
- + AR_PHY_GC_DYN2040_PRI_CH) == 0x0)
- + synth_freq = chan->channel - 10;
- + else
- + synth_freq = chan->channel + 10;
- + } else {
- + range = 10;
- + synth_freq = chan->channel;
- + }
- +
- + ar9003_hw_spur_ofdm_clear(ah);
- +
- + for (i = 0; spurChansPtr[i] && i < 5; i++) {
- + freq_offset = FBIN2FREQ(spurChansPtr[i], mode) - synth_freq;
- + if (abs(freq_offset) < range) {
- + ar9003_hw_spur_ofdm_work(ah, chan, freq_offset);
- + break;
- + }
- + }
- +}
- +
- +static void ar9003_hw_spur_mitigate(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + ar9003_hw_spur_mitigate_mrc_cck(ah, chan);
- + ar9003_hw_spur_mitigate_ofdm(ah, chan);
- +}
- +
- +static u32 ar9003_hw_compute_pll_control(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + u32 pll;
- +
- + pll = SM(0x5, AR_RTC_9300_PLL_REFDIV);
- +
- + if (chan && IS_CHAN_HALF_RATE(chan))
- + pll |= SM(0x1, AR_RTC_9300_PLL_CLKSEL);
- + else if (chan && IS_CHAN_QUARTER_RATE(chan))
- + pll |= SM(0x2, AR_RTC_9300_PLL_CLKSEL);
- +
- + if (chan && IS_CHAN_5GHZ(chan)) {
- + pll |= SM(0x28, AR_RTC_9300_PLL_DIV);
- +
- + /*
- + * When doing fast clock, set PLL to 0x142c
- + */
- + if (IS_CHAN_A_5MHZ_SPACED(chan))
- + pll = 0x142c;
- + } else
- + pll |= SM(0x2c, AR_RTC_9300_PLL_DIV);
- +
- + return pll;
- +}
- +
- +static void ar9003_hw_set_channel_regs(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + u32 phymode;
- + u32 enableDacFifo = 0;
- +
- + enableDacFifo =
- + (REG_READ(ah, AR_PHY_GEN_CTRL) & AR_PHY_GC_ENABLE_DAC_FIFO);
- +
- + /* Enable 11n HT, 20 MHz */
- + phymode = AR_PHY_GC_HT_EN | AR_PHY_GC_SINGLE_HT_LTF1 | AR_PHY_GC_WALSH |
- + AR_PHY_GC_SHORT_GI_40 | enableDacFifo;
- +
- + /* Configure baseband for dynamic 20/40 operation */
- + if (IS_CHAN_HT40(chan)) {
- + phymode |= AR_PHY_GC_DYN2040_EN;
- + /* Configure control (primary) channel at +-10MHz */
- + if ((chan->chanmode == CHANNEL_A_HT40PLUS) ||
- + (chan->chanmode == CHANNEL_G_HT40PLUS))
- + phymode |= AR_PHY_GC_DYN2040_PRI_CH;
- +
- + }
- +
- + /* make sure we preserve INI settings */
- + phymode |= REG_READ(ah, AR_PHY_GEN_CTRL);
- + /* turn off Green Field detection for STA for now */
- + phymode &= ~AR_PHY_GC_GF_DETECT_EN;
- +
- + REG_WRITE(ah, AR_PHY_GEN_CTRL, phymode);
- +
- + /* Configure MAC for 20/40 operation */
- + ath9k_hw_set11nmac2040(ah);
- +
- + /* global transmit timeout (25 TUs default)*/
- + REG_WRITE(ah, AR_GTXTO, 25 << AR_GTXTO_TIMEOUT_LIMIT_S);
- + /* carrier sense timeout */
- + REG_WRITE(ah, AR_CST, 0xF << AR_CST_TIMEOUT_LIMIT_S);
- +}
- +
- +static void ar9003_hw_init_bb(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + u32 synthDelay;
- +
- + /*
- + * Wait for the frequency synth to settle (synth goes on
- + * via AR_PHY_ACTIVE_EN). Read the phy active delay register.
- + * Value is in 100ns increments.
- + */
- + synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY;
- + if (IS_CHAN_B(chan))
- + synthDelay = (4 * synthDelay) / 22;
- + else
- + synthDelay /= 10;
- +
- + /* Activate the PHY (includes baseband activate + synthesizer on) */
- + REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN);
- +
- + /*
- + * There is an issue if the AP starts the calibration before
- + * the base band timeout completes. This could result in the
- + * rx_clear false triggering. As a workaround we add delay an
- + * extra BASE_ACTIVATE_DELAY usecs to ensure this condition
- + * does not happen.
- + */
- + udelay(synthDelay + BASE_ACTIVATE_DELAY);
- +}
- +
- +void ar9003_hw_set_chain_masks(struct ath_hw *ah, u8 rx, u8 tx)
- +{
- + switch (rx) {
- + case 0x5:
- + REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
- + AR_PHY_SWAP_ALT_CHAIN);
- + case 0x3:
- + case 0x1:
- + case 0x2:
- + case 0x7:
- + REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx);
- + REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx);
- + break;
- + default:
- + break;
- + }
- +
- + REG_WRITE(ah, AR_SELFGEN_MASK, tx);
- + if (tx == 0x5) {
- + REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
- + AR_PHY_SWAP_ALT_CHAIN);
- + }
- +}
- +
- +/*
- + * Override INI values with chip specific configuration.
- + */
- +static void ar9003_hw_override_ini(struct ath_hw *ah)
- +{
- + u32 val;
- +
- + /*
- + * Set the RX_ABORT and RX_DIS and clear it only after
- + * RXE is set for MAC. This prevents frames with
- + * corrupted descriptor status.
- + */
- + REG_SET_BIT(ah, AR_DIAG_SW, (AR_DIAG_RX_DIS | AR_DIAG_RX_ABORT));
- +
- + /*
- + * For AR9280 and above, there is a new feature that allows
- + * Multicast search based on both MAC Address and Key ID. By default,
- + * this feature is enabled. But since the driver is not using this
- + * feature, we switch it off; otherwise multicast search based on
- + * MAC addr only will fail.
- + */
- + val = REG_READ(ah, AR_PCU_MISC_MODE2) & (~AR_ADHOC_MCAST_KEYID_ENABLE);
- + REG_WRITE(ah, AR_PCU_MISC_MODE2, val | AR_AGG_WEP_ENABLE_FIX | AR_AGG_WEP_ENABLE);
- +}
- +
- +static void ar9003_hw_prog_ini(struct ath_hw *ah,
- + struct ar5416IniArray *iniArr,
- + int column)
- +{
- + unsigned int i, regWrites = 0;
- +
- + /* New INI format: Array may be undefined (pre, core, post arrays) */
- + if (!iniArr->ia_array)
- + return;
- +
- + /*
- + * New INI format: Pre, core, and post arrays for a given subsystem
- + * may be modal (> 2 columns) or non-modal (2 columns). Determine if
- + * the array is non-modal and force the column to 1.
- + */
- + if (column >= iniArr->ia_columns)
- + column = 1;
- +
- + for (i = 0; i < iniArr->ia_rows; i++) {
- + u32 reg = INI_RA(iniArr, i, 0);
- + u32 val = INI_RA(iniArr, i, column);
- +
- + REG_WRITE(ah, reg, val);
- +
- + /*
- + * Determine if this is a shift register value, and insert the
- + * configured delay if so.
- + */
- + if (reg >= 0x16000 && reg < 0x17000
- + && ah->config.analog_shiftreg)
- + udelay(100);
- +
- + DO_DELAY(regWrites);
- + }
- +}
- +
- +static int ar9003_hw_process_ini(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
- + unsigned int regWrites = 0, i;
- + struct ieee80211_channel *channel = chan->chan;
- + u32 modesIndex, freqIndex;
- +
- + switch (chan->chanmode) {
- + case CHANNEL_A:
- + case CHANNEL_A_HT20:
- + modesIndex = 1;
- + freqIndex = 1;
- + break;
- + case CHANNEL_A_HT40PLUS:
- + case CHANNEL_A_HT40MINUS:
- + modesIndex = 2;
- + freqIndex = 1;
- + break;
- + case CHANNEL_G:
- + case CHANNEL_G_HT20:
- + case CHANNEL_B:
- + modesIndex = 4;
- + freqIndex = 2;
- + break;
- + case CHANNEL_G_HT40PLUS:
- + case CHANNEL_G_HT40MINUS:
- + modesIndex = 3;
- + freqIndex = 2;
- + break;
- +
- + default:
- + return -EINVAL;
- + }
- +
- + for (i = 0; i < ATH_INI_NUM_SPLIT; i++) {
- + ar9003_hw_prog_ini(ah, &ah->iniSOC[i], modesIndex);
- + ar9003_hw_prog_ini(ah, &ah->iniMac[i], modesIndex);
- + ar9003_hw_prog_ini(ah, &ah->iniBB[i], modesIndex);
- + ar9003_hw_prog_ini(ah, &ah->iniRadio[i], modesIndex);
- + }
- +
- + REG_WRITE_ARRAY(&ah->iniModesRxGain, 1, regWrites);
- + REG_WRITE_ARRAY(&ah->iniModesTxGain, modesIndex, regWrites);
- +
- + /*
- + * For 5GHz channels requiring Fast Clock, apply
- + * different modal values.
- + */
- + if (IS_CHAN_A_5MHZ_SPACED(chan))
- + REG_WRITE_ARRAY(&ah->iniModesAdditional,
- + modesIndex, regWrites);
- +
- + ar9003_hw_override_ini(ah);
- + ar9003_hw_set_channel_regs(ah, chan);
- + ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask);
- +
- + /* Set TX power */
- + ah->eep_ops->set_txpower(ah, chan,
- + ath9k_regd_get_ctl(regulatory, chan),
- + channel->max_antenna_gain * 2,
- + channel->max_power * 2,
- + min((u32) MAX_RATE_POWER,
- + (u32) regulatory->power_limit));
- +
- + return 0;
- +}
- +
- +static void ar9003_hw_set_rfmode(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + u32 rfMode = 0;
- +
- + if (chan == NULL)
- + return;
- +
- + rfMode |= (IS_CHAN_B(chan) || IS_CHAN_G(chan))
- + ? AR_PHY_MODE_DYNAMIC : AR_PHY_MODE_OFDM;
- +
- + if (IS_CHAN_A_5MHZ_SPACED(chan))
- + rfMode |= (AR_PHY_MODE_DYNAMIC | AR_PHY_MODE_DYN_CCK_DISABLE);
- +
- + REG_WRITE(ah, AR_PHY_MODE, rfMode);
- +}
- +
- +static void ar9003_hw_mark_phy_inactive(struct ath_hw *ah)
- +{
- + REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_DIS);
- +}
- +
- +static void ar9003_hw_set_delta_slope(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + u32 coef_scaled, ds_coef_exp, ds_coef_man;
- + u32 clockMhzScaled = 0x64000000;
- + struct chan_centers centers;
- +
- + /*
- + * half and quarter rate can divide the scaled clock by 2 or 4
- + * scale for selected channel bandwidth
- + */
- + if (IS_CHAN_HALF_RATE(chan))
- + clockMhzScaled = clockMhzScaled >> 1;
- + else if (IS_CHAN_QUARTER_RATE(chan))
- + clockMhzScaled = clockMhzScaled >> 2;
- +
- + /*
- + * ALGO -> coef = 1e8/fcarrier*fclock/40;
- + * scaled coef to provide precision for this floating calculation
- + */
- + ath9k_hw_get_channel_centers(ah, chan, ¢ers);
- + coef_scaled = clockMhzScaled / centers.synth_center;
- +
- + ath9k_hw_get_delta_slope_vals(ah, coef_scaled, &ds_coef_man,
- + &ds_coef_exp);
- +
- + REG_RMW_FIELD(ah, AR_PHY_TIMING3,
- + AR_PHY_TIMING3_DSC_MAN, ds_coef_man);
- + REG_RMW_FIELD(ah, AR_PHY_TIMING3,
- + AR_PHY_TIMING3_DSC_EXP, ds_coef_exp);
- +
- + /*
- + * For Short GI,
- + * scaled coeff is 9/10 that of normal coeff
- + */
- + coef_scaled = (9 * coef_scaled) / 10;
- +
- + ath9k_hw_get_delta_slope_vals(ah, coef_scaled, &ds_coef_man,
- + &ds_coef_exp);
- +
- + /* for short gi */
- + REG_RMW_FIELD(ah, AR_PHY_SGI_DELTA,
- + AR_PHY_SGI_DSC_MAN, ds_coef_man);
- + REG_RMW_FIELD(ah, AR_PHY_SGI_DELTA,
- + AR_PHY_SGI_DSC_EXP, ds_coef_exp);
- +}
- +
- +static bool ar9003_hw_rfbus_req(struct ath_hw *ah)
- +{
- + REG_WRITE(ah, AR_PHY_RFBUS_REQ, AR_PHY_RFBUS_REQ_EN);
- + return ath9k_hw_wait(ah, AR_PHY_RFBUS_GRANT, AR_PHY_RFBUS_GRANT_EN,
- + AR_PHY_RFBUS_GRANT_EN, AH_WAIT_TIMEOUT);
- +}
- +
- +/*
- + * Wait for the frequency synth to settle (synth goes on via PHY_ACTIVE_EN).
- + * Read the phy active delay register. Value is in 100ns increments.
- + */
- +static void ar9003_hw_rfbus_done(struct ath_hw *ah)
- +{
- + u32 synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY;
- + if (IS_CHAN_B(ah->curchan))
- + synthDelay = (4 * synthDelay) / 22;
- + else
- + synthDelay /= 10;
- +
- + udelay(synthDelay + BASE_ACTIVATE_DELAY);
- +
- + REG_WRITE(ah, AR_PHY_RFBUS_REQ, 0);
- +}
- +
- +/*
- + * Set the interrupt and GPIO values so the ISR can disable RF
- + * on a switch signal. Assumes GPIO port and interrupt polarity
- + * are set prior to call.
- + */
- +static void ar9003_hw_enable_rfkill(struct ath_hw *ah)
- +{
- + /* Connect rfsilent_bb_l to baseband */
- + REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL,
- + AR_GPIO_INPUT_EN_VAL_RFSILENT_BB);
- + /* Set input mux for rfsilent_bb_l to GPIO #0 */
- + REG_CLR_BIT(ah, AR_GPIO_INPUT_MUX2,
- + AR_GPIO_INPUT_MUX2_RFSILENT);
- +
- + /*
- + * Configure the desired GPIO port for input and
- + * enable baseband rf silence.
- + */
- + ath9k_hw_cfg_gpio_input(ah, ah->rfkill_gpio);
- + REG_SET_BIT(ah, AR_PHY_TEST, RFSILENT_BB);
- +}
- +
- +static void ar9003_hw_set_diversity(struct ath_hw *ah, bool value)
- +{
- + u32 v = REG_READ(ah, AR_PHY_CCK_DETECT);
- + if (value)
- + v |= AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV;
- + else
- + v &= ~AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV;
- + REG_WRITE(ah, AR_PHY_CCK_DETECT, v);
- +}
- +
- +static bool ar9003_hw_ani_control(struct ath_hw *ah,
- + enum ath9k_ani_cmd cmd, int param)
- +{
- + struct ar5416AniState *aniState = ah->curani;
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + switch (cmd & ah->ani_function) {
- + case ATH9K_ANI_NOISE_IMMUNITY_LEVEL:{
- + u32 level = param;
- +
- + if (level >= ARRAY_SIZE(ah->totalSizeDesired)) {
- + ath_print(common, ATH_DBG_ANI,
- + "level out of range (%u > %u)\n",
- + level,
- + (unsigned)ARRAY_SIZE(ah->totalSizeDesired));
- + return false;
- + }
- +
- + REG_RMW_FIELD(ah, AR_PHY_DESIRED_SZ,
- + AR_PHY_DESIRED_SZ_TOT_DES,
- + ah->totalSizeDesired[level]);
- + REG_RMW_FIELD(ah, AR_PHY_AGC,
- + AR_PHY_AGC_COARSE_LOW,
- + ah->coarse_low[level]);
- + REG_RMW_FIELD(ah, AR_PHY_AGC,
- + AR_PHY_AGC_COARSE_HIGH,
- + ah->coarse_high[level]);
- + REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
- + AR_PHY_FIND_SIG_FIRPWR, ah->firpwr[level]);
- +
- + if (level > aniState->noiseImmunityLevel)
- + ah->stats.ast_ani_niup++;
- + else if (level < aniState->noiseImmunityLevel)
- + ah->stats.ast_ani_nidown++;
- + aniState->noiseImmunityLevel = level;
- + break;
- + }
- + case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{
- + const int m1ThreshLow[] = { 127, 50 };
- + const int m2ThreshLow[] = { 127, 40 };
- + const int m1Thresh[] = { 127, 0x4d };
- + const int m2Thresh[] = { 127, 0x40 };
- + const int m2CountThr[] = { 31, 16 };
- + const int m2CountThrLow[] = { 63, 48 };
- + u32 on = param ? 1 : 0;
- +
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
- + AR_PHY_SFCORR_LOW_M1_THRESH_LOW,
- + m1ThreshLow[on]);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
- + AR_PHY_SFCORR_LOW_M2_THRESH_LOW,
- + m2ThreshLow[on]);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR,
- + AR_PHY_SFCORR_M1_THRESH, m1Thresh[on]);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR,
- + AR_PHY_SFCORR_M2_THRESH, m2Thresh[on]);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR,
- + AR_PHY_SFCORR_M2COUNT_THR, m2CountThr[on]);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
- + AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW, m2CountThrLow[on]);
- +
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
- + AR_PHY_SFCORR_EXT_M1_THRESH_LOW, m1ThreshLow[on]);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
- + AR_PHY_SFCORR_EXT_M2_THRESH_LOW, m2ThreshLow[on]);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
- + AR_PHY_SFCORR_EXT_M1_THRESH, m1Thresh[on]);
- + REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
- + AR_PHY_SFCORR_EXT_M2_THRESH, m2Thresh[on]);
- +
- + if (on)
- + REG_SET_BIT(ah, AR_PHY_SFCORR_LOW,
- + AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
- + else
- + REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
- + AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
- +
- + if (!on != aniState->ofdmWeakSigDetectOff) {
- + if (on)
- + ah->stats.ast_ani_ofdmon++;
- + else
- + ah->stats.ast_ani_ofdmoff++;
- + aniState->ofdmWeakSigDetectOff = !on;
- + }
- + break;
- + }
- + case ATH9K_ANI_CCK_WEAK_SIGNAL_THR:{
- + const int weakSigThrCck[] = { 8, 6 };
- + u32 high = param ? 1 : 0;
- +
- + REG_RMW_FIELD(ah, AR_PHY_CCK_DETECT,
- + AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK,
- + weakSigThrCck[high]);
- + if (high != aniState->cckWeakSigThreshold) {
- + if (high)
- + ah->stats.ast_ani_cckhigh++;
- + else
- + ah->stats.ast_ani_ccklow++;
- + aniState->cckWeakSigThreshold = high;
- + }
- + break;
- + }
- + case ATH9K_ANI_FIRSTEP_LEVEL:{
- + const int firstep[] = { 0, 4, 8 };
- + u32 level = param;
- +
- + if (level >= ARRAY_SIZE(firstep)) {
- + ath_print(common, ATH_DBG_ANI,
- + "level out of range (%u > %u)\n",
- + level,
- + (unsigned) ARRAY_SIZE(firstep));
- + return false;
- + }
- + REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
- + AR_PHY_FIND_SIG_FIRSTEP,
- + firstep[level]);
- + if (level > aniState->firstepLevel)
- + ah->stats.ast_ani_stepup++;
- + else if (level < aniState->firstepLevel)
- + ah->stats.ast_ani_stepdown++;
- + aniState->firstepLevel = level;
- + break;
- + }
- + case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{
- + const int cycpwrThr1[] =
- + { 2, 4, 6, 8, 10, 12, 14, 16 };
- + u32 level = param;
- +
- + if (level >= ARRAY_SIZE(cycpwrThr1)) {
- + ath_print(common, ATH_DBG_ANI,
- + "level out of range (%u > %u)\n",
- + level,
- + (unsigned) ARRAY_SIZE(cycpwrThr1));
- + return false;
- + }
- + REG_RMW_FIELD(ah, AR_PHY_TIMING5,
- + AR_PHY_TIMING5_CYCPWR_THR1,
- + cycpwrThr1[level]);
- + if (level > aniState->spurImmunityLevel)
- + ah->stats.ast_ani_spurup++;
- + else if (level < aniState->spurImmunityLevel)
- + ah->stats.ast_ani_spurdown++;
- + aniState->spurImmunityLevel = level;
- + break;
- + }
- + case ATH9K_ANI_PRESENT:
- + break;
- + default:
- + ath_print(common, ATH_DBG_ANI,
- + "invalid cmd %u\n", cmd);
- + return false;
- + }
- +
- + ath_print(common, ATH_DBG_ANI, "ANI parameters:\n");
- + ath_print(common, ATH_DBG_ANI,
- + "noiseImmunityLevel=%d, spurImmunityLevel=%d, "
- + "ofdmWeakSigDetectOff=%d\n",
- + aniState->noiseImmunityLevel,
- + aniState->spurImmunityLevel,
- + !aniState->ofdmWeakSigDetectOff);
- + ath_print(common, ATH_DBG_ANI,
- + "cckWeakSigThreshold=%d, "
- + "firstepLevel=%d, listenTime=%d\n",
- + aniState->cckWeakSigThreshold,
- + aniState->firstepLevel,
- + aniState->listenTime);
- + ath_print(common, ATH_DBG_ANI,
- + "cycleCount=%d, ofdmPhyErrCount=%d, cckPhyErrCount=%d\n\n",
- + aniState->cycleCount,
- + aniState->ofdmPhyErrCount,
- + aniState->cckPhyErrCount);
- +
- + return true;
- +}
- +
- +static void ar9003_hw_nf_sanitize_2g(struct ath_hw *ah, s16 *nf)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + if (*nf > ah->nf_2g_max) {
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "2 GHz NF (%d) > MAX (%d), "
- + "correcting to MAX",
- + *nf, ah->nf_2g_max);
- + *nf = ah->nf_2g_max;
- + } else if (*nf < ah->nf_2g_min) {
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "2 GHz NF (%d) < MIN (%d), "
- + "correcting to MIN",
- + *nf, ah->nf_2g_min);
- + *nf = ah->nf_2g_min;
- + }
- +}
- +
- +static void ar9003_hw_nf_sanitize_5g(struct ath_hw *ah, s16 *nf)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + if (*nf > ah->nf_5g_max) {
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "5 GHz NF (%d) > MAX (%d), "
- + "correcting to MAX",
- + *nf, ah->nf_5g_max);
- + *nf = ah->nf_5g_max;
- + } else if (*nf < ah->nf_5g_min) {
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "5 GHz NF (%d) < MIN (%d), "
- + "correcting to MIN",
- + *nf, ah->nf_5g_min);
- + *nf = ah->nf_5g_min;
- + }
- +}
- +
- +static void ar9003_hw_nf_sanitize(struct ath_hw *ah, s16 *nf)
- +{
- + if (IS_CHAN_2GHZ(ah->curchan))
- + ar9003_hw_nf_sanitize_2g(ah, nf);
- + else
- + ar9003_hw_nf_sanitize_5g(ah, nf);
- +}
- +
- +static void ar9003_hw_do_getnf(struct ath_hw *ah,
- + int16_t nfarray[NUM_NF_READINGS])
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
- + int16_t nf;
- +
- + nf = MS(REG_READ(ah, AR_PHY_CCA_0), AR_PHY_MINCCA_PWR);
- + if (nf & 0x100)
- + nf = 0 - ((nf ^ 0x1ff) + 1);
- + ar9003_hw_nf_sanitize(ah, &nf);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "NF calibrated [ctl] [chain 0] is %d\n", nf);
- + nfarray[0] = nf;
- +
- + nf = MS(REG_READ(ah, AR_PHY_CCA_1), AR_PHY_CH1_MINCCA_PWR);
- + if (nf & 0x100)
- + nf = 0 - ((nf ^ 0x1ff) + 1);
- + ar9003_hw_nf_sanitize(ah, &nf);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "NF calibrated [ctl] [chain 1] is %d\n", nf);
- + nfarray[1] = nf;
- +
- + nf = MS(REG_READ(ah, AR_PHY_CCA_2), AR_PHY_CH2_MINCCA_PWR);
- + if (nf & 0x100)
- + nf = 0 - ((nf ^ 0x1ff) + 1);
- + ar9003_hw_nf_sanitize(ah, &nf);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "NF calibrated [ctl] [chain 2] is %d\n", nf);
- + nfarray[2] = nf;
- +
- + nf = MS(REG_READ(ah, AR_PHY_EXT_CCA), AR_PHY_EXT_MINCCA_PWR);
- + if (nf & 0x100)
- + nf = 0 - ((nf ^ 0x1ff) + 1);
- + ar9003_hw_nf_sanitize(ah, &nf);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "NF calibrated [ext] [chain 0] is %d\n", nf);
- + nfarray[3] = nf;
- +
- + nf = MS(REG_READ(ah, AR_PHY_EXT_CCA_1), AR_PHY_CH1_EXT_MINCCA_PWR);
- + if (nf & 0x100)
- + nf = 0 - ((nf ^ 0x1ff) + 1);
- + ar9003_hw_nf_sanitize(ah, &nf);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "NF calibrated [ext] [chain 1] is %d\n", nf);
- + nfarray[4] = nf;
- +
- + nf = MS(REG_READ(ah, AR_PHY_EXT_CCA_2), AR_PHY_CH2_EXT_MINCCA_PWR);
- + if (nf & 0x100)
- + nf = 0 - ((nf ^ 0x1ff) + 1);
- + ar9003_hw_nf_sanitize(ah, &nf);
- + ath_print(common, ATH_DBG_CALIBRATE,
- + "NF calibrated [ext] [chain 2] is %d\n", nf);
- + nfarray[5] = nf;
- +}
- +
- +void ar9003_hw_set_nf_limits(struct ath_hw *ah)
- +{
- + ah->nf_2g_max = AR_PHY_CCA_MAX_GOOD_VAL_9300_2GHZ;
- + ah->nf_2g_min = AR_PHY_CCA_MIN_GOOD_VAL_9300_2GHZ;
- + ah->nf_5g_max = AR_PHY_CCA_MAX_GOOD_VAL_9300_5GHZ;
- + ah->nf_5g_min = AR_PHY_CCA_MIN_GOOD_VAL_9300_5GHZ;
- +}
- +
- +/*
- + * Find out which of the RX chains are enabled
- + */
- +static u32 ar9003_hw_get_rx_chainmask(struct ath_hw *ah)
- +{
- + u32 chain = REG_READ(ah, AR_PHY_RX_CHAINMASK);
- + /*
- + * The bits [2:0] indicate the rx chain mask and are to be
- + * interpreted as follows:
- + * 00x => Only chain 0 is enabled
- + * 01x => Chain 1 and 0 enabled
- + * 1xx => Chain 2,1 and 0 enabled
- + */
- + return (chain & 0x7);
- +}
- +
- +static void ar9003_hw_loadnf(struct ath_hw *ah, struct ath9k_channel *chan)
- +{
- + struct ath9k_nfcal_hist *h;
- + unsigned i, j;
- + int32_t val;
- + const u32 ar9300_cca_regs[6] = {
- + AR_PHY_CCA_0,
- + AR_PHY_CCA_1,
- + AR_PHY_CCA_2,
- + AR_PHY_EXT_CCA,
- + AR_PHY_EXT_CCA_1,
- + AR_PHY_EXT_CCA_2,
- + };
- + u8 chainmask, rx_chain_status;
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + rx_chain_status = ar9003_hw_get_rx_chainmask(ah);
- +
- + chainmask = 0x3F;
- + h = ah->nfCalHist;
- +
- + for (i = 0; i < NUM_NF_READINGS; i++) {
- + if (chainmask & (1 << i)) {
- + val = REG_READ(ah, ar9300_cca_regs[i]);
- + val &= 0xFFFFFE00;
- + val |= (((u32) (h[i].privNF) << 1) & 0x1ff);
- + REG_WRITE(ah, ar9300_cca_regs[i], val);
- + }
- + }
- +
- + /*
- + * Load software filtered NF value into baseband internal minCCApwr
- + * variable.
- + */
- + REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
- + AR_PHY_AGC_CONTROL_ENABLE_NF);
- + REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
- + AR_PHY_AGC_CONTROL_NO_UPDATE_NF);
- + REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_NF);
- +
- + /*
- + * Wait for load to complete, should be fast, a few 10s of us.
- + * The max delay was changed from an original 250us to 10000us
- + * since 250us often results in NF load timeout and causes deaf
- + * condition during stress testing 12/12/2009
- + */
- + for (j = 0; j < 1000; j++) {
- + if ((REG_READ(ah, AR_PHY_AGC_CONTROL) &
- + AR_PHY_AGC_CONTROL_NF) == 0)
- + break;
- + udelay(10);
- + }
- +
- + /*
- + * We timed out waiting for the noisefloor to load, probably due to an
- + * in-progress rx. Simply return here and allow the load plenty of time
- + * to complete before the next calibration interval. We need to avoid
- + * trying to load -50 (which happens below) while the previous load is
- + * still in progress as this can cause rx deafness. Instead by returning
- + * here, the baseband nf cal will just be capped by our present
- + * noisefloor until the next calibration timer.
- + */
- + if (j == 1000) {
- + ath_print(common, ATH_DBG_ANY, "Timeout while waiting for nf "
- + "to load: AR_PHY_AGC_CONTROL=0x%x\n",
- + REG_READ(ah, AR_PHY_AGC_CONTROL));
- + }
- +
- + /*
- + * Restore maxCCAPower register parameter again so that we're not capped
- + * by the median we just loaded. This will be initial (and max) value
- + * of next noise floor calibration the baseband does.
- + */
- + for (i = 0; i < NUM_NF_READINGS; i++) {
- + if (chainmask & (1 << i)) {
- + val = REG_READ(ah, ar9300_cca_regs[i]);
- + val &= 0xFFFFFE00;
- + val |= (((u32) (-50) << 1) & 0x1ff);
- + REG_WRITE(ah, ar9300_cca_regs[i], val);
- + }
- + }
- +}
- +
- +void ar9003_hw_attach_phy_ops(struct ath_hw *ah)
- +{
- + struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
- +
- + priv_ops->rf_set_freq = ar9003_hw_set_channel;
- + priv_ops->spur_mitigate_freq = ar9003_hw_spur_mitigate;
- + priv_ops->compute_pll_control = ar9003_hw_compute_pll_control;
- + priv_ops->set_channel_regs = ar9003_hw_set_channel_regs;
- + priv_ops->init_bb = ar9003_hw_init_bb;
- + priv_ops->process_ini = ar9003_hw_process_ini;
- + priv_ops->set_rfmode = ar9003_hw_set_rfmode;
- + priv_ops->mark_phy_inactive = ar9003_hw_mark_phy_inactive;
- + priv_ops->set_delta_slope = ar9003_hw_set_delta_slope;
- + priv_ops->rfbus_req = ar9003_hw_rfbus_req;
- + priv_ops->rfbus_done = ar9003_hw_rfbus_done;
- + priv_ops->enable_rfkill = ar9003_hw_enable_rfkill;
- + priv_ops->set_diversity = ar9003_hw_set_diversity;
- + priv_ops->ani_control = ar9003_hw_ani_control;
- + priv_ops->do_getnf = ar9003_hw_do_getnf;
- + priv_ops->loadnf = ar9003_hw_loadnf;
- +}
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
- @@ -0,0 +1,847 @@
- +/*
- + * Copyright (c) 2002-2010 Atheros Communications, Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +
- +#ifndef AR9003_PHY_H
- +#define AR9003_PHY_H
- +
- +/*
- + * Channel Register Map
- + */
- +#define AR_CHAN_BASE 0x9800
- +
- +#define AR_PHY_TIMING1 AR_CHAN_BASE + 0x0
- +#define AR_PHY_TIMING2 AR_CHAN_BASE + 0x4
- +#define AR_PHY_TIMING3 AR_CHAN_BASE + 0x8
- +#define AR_PHY_TIMING4 AR_CHAN_BASE + 0xc
- +#define AR_PHY_TIMING5 AR_CHAN_BASE + 0x10
- +#define AR_PHY_TIMING6 AR_CHAN_BASE + 0x14
- +#define AR_PHY_TIMING11 AR_CHAN_BASE + 0x18
- +#define AR_PHY_SPUR_REG AR_CHAN_BASE + 0x1c
- +#define AR_PHY_RX_IQCAL_CORR_B0 AR_CHAN_BASE + 0xdc
- +#define AR_PHY_TX_IQCAL_CONTROL_3 AR_CHAN_BASE + 0xb0
- +
- +#define AR_PHY_TIMING11_SPUR_FREQ_SD 0x3FF00000
- +#define AR_PHY_TIMING11_SPUR_FREQ_SD_S 20
- +
- +#define AR_PHY_TIMING11_SPUR_DELTA_PHASE 0x000FFFFF
- +#define AR_PHY_TIMING11_SPUR_DELTA_PHASE_S 0
- +
- +#define AR_PHY_TIMING11_USE_SPUR_FILTER_IN_AGC 0x40000000
- +#define AR_PHY_TIMING11_USE_SPUR_FILTER_IN_AGC_S 30
- +
- +#define AR_PHY_TIMING11_USE_SPUR_FILTER_IN_SELFCOR 0x80000000
- +#define AR_PHY_TIMING11_USE_SPUR_FILTER_IN_SELFCOR_S 31
- +
- +#define AR_PHY_SPUR_REG_ENABLE_NF_RSSI_SPUR_MIT 0x4000000
- +#define AR_PHY_SPUR_REG_ENABLE_NF_RSSI_SPUR_MIT_S 26
- +
- +#define AR_PHY_SPUR_REG_ENABLE_MASK_PPM 0x20000 /* bins move with freq offset */
- +#define AR_PHY_SPUR_REG_ENABLE_MASK_PPM_S 17
- +#define AR_PHY_SPUR_REG_SPUR_RSSI_THRESH 0x000000FF
- +#define AR_PHY_SPUR_REG_SPUR_RSSI_THRESH_S 0
- +#define AR_PHY_SPUR_REG_EN_VIT_SPUR_RSSI 0x00000100
- +#define AR_PHY_SPUR_REG_EN_VIT_SPUR_RSSI_S 8
- +#define AR_PHY_SPUR_REG_MASK_RATE_CNTL 0x03FC0000
- +#define AR_PHY_SPUR_REG_MASK_RATE_CNTL_S 18
- +
- +#define AR_PHY_RX_IQCAL_CORR_B0_LOOPBACK_IQCORR_EN 0x20000000
- +#define AR_PHY_RX_IQCAL_CORR_B0_LOOPBACK_IQCORR_EN_S 29
- +
- +#define AR_PHY_TX_IQCAL_CONTROL_3_IQCORR_EN 0x80000000
- +#define AR_PHY_TX_IQCAL_CONTROL_3_IQCORR_EN_S 31
- +
- +#define AR_PHY_FIND_SIG_LOW AR_CHAN_BASE + 0x20
- +
- +#define AR_PHY_SFCORR AR_CHAN_BASE + 0x24
- +#define AR_PHY_SFCORR_LOW AR_CHAN_BASE + 0x28
- +#define AR_PHY_SFCORR_EXT AR_CHAN_BASE + 0x2c
- +
- +#define AR_PHY_EXT_CCA AR_CHAN_BASE + 0x30
- +#define AR_PHY_RADAR_0 AR_CHAN_BASE + 0x34
- +#define AR_PHY_RADAR_1 AR_CHAN_BASE + 0x38
- +#define AR_PHY_RADAR_EXT AR_CHAN_BASE + 0x3c
- +#define AR_PHY_MULTICHAIN_CTRL AR_CHAN_BASE + 0x80
- +#define AR_PHY_PERCHAIN_CSD AR_CHAN_BASE + 0x84
- +
- +#define AR_PHY_TX_PHASE_RAMP_0 AR_CHAN_BASE + 0xd0
- +#define AR_PHY_ADC_GAIN_DC_CORR_0 AR_CHAN_BASE + 0xd4
- +#define AR_PHY_IQ_ADC_MEAS_0_B0 AR_CHAN_BASE + 0xc0
- +#define AR_PHY_IQ_ADC_MEAS_1_B0 AR_CHAN_BASE + 0xc4
- +#define AR_PHY_IQ_ADC_MEAS_2_B0 AR_CHAN_BASE + 0xc8
- +#define AR_PHY_IQ_ADC_MEAS_3_B0 AR_CHAN_BASE + 0xcc
- +
- +/* The following registers changed position from AR9300 1.0 to AR9300 2.0 */
- +#define AR_PHY_TX_PHASE_RAMP_0_9300_10 (AR_CHAN_BASE + 0xd0 - 0x10)
- +#define AR_PHY_ADC_GAIN_DC_CORR_0_9300_10 (AR_CHAN_BASE + 0xd4 - 0x10)
- +#define AR_PHY_IQ_ADC_MEAS_0_B0_9300_10 (AR_CHAN_BASE + 0xc0 + 0x8)
- +#define AR_PHY_IQ_ADC_MEAS_1_B0_9300_10 (AR_CHAN_BASE + 0xc4 + 0x8)
- +#define AR_PHY_IQ_ADC_MEAS_2_B0_9300_10 (AR_CHAN_BASE + 0xc8 + 0x8)
- +#define AR_PHY_IQ_ADC_MEAS_3_B0_9300_10 (AR_CHAN_BASE + 0xcc + 0x8)
- +
- +#define AR_PHY_TX_CRC AR_CHAN_BASE + 0xa0
- +#define AR_PHY_TST_DAC_CONST AR_CHAN_BASE + 0xa4
- +#define AR_PHY_SPUR_REPORT_0 AR_CHAN_BASE + 0xa8
- +#define AR_PHY_CHAN_INFO_TAB_0 AR_CHAN_BASE + 0x300
- +
- +/*
- + * Channel Field Definitions
- + */
- +#define AR_PHY_TIMING2_USE_FORCE_PPM 0x00001000
- +#define AR_PHY_TIMING2_FORCE_PPM_VAL 0x00000fff
- +#define AR_PHY_TIMING3_DSC_MAN 0xFFFE0000
- +#define AR_PHY_TIMING3_DSC_MAN_S 17
- +#define AR_PHY_TIMING3_DSC_EXP 0x0001E000
- +#define AR_PHY_TIMING3_DSC_EXP_S 13
- +#define AR_PHY_TIMING4_IQCAL_LOG_COUNT_MAX 0xF000
- +#define AR_PHY_TIMING4_IQCAL_LOG_COUNT_MAX_S 12
- +#define AR_PHY_TIMING4_DO_CAL 0x10000
- +
- +#define AR_PHY_TIMING4_ENABLE_PILOT_MASK 0x10000000
- +#define AR_PHY_TIMING4_ENABLE_PILOT_MASK_S 28
- +#define AR_PHY_TIMING4_ENABLE_CHAN_MASK 0x20000000
- +#define AR_PHY_TIMING4_ENABLE_CHAN_MASK_S 29
- +
- +#define AR_PHY_TIMING4_ENABLE_SPUR_FILTER 0x40000000
- +#define AR_PHY_TIMING4_ENABLE_SPUR_FILTER_S 30
- +#define AR_PHY_TIMING4_ENABLE_SPUR_RSSI 0x80000000
- +#define AR_PHY_TIMING4_ENABLE_SPUR_RSSI_S 31
- +
- +#define AR_PHY_NEW_ADC_GAIN_CORR_ENABLE 0x40000000
- +#define AR_PHY_NEW_ADC_DC_OFFSET_CORR_ENABLE 0x80000000
- +#define AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW 0x00000001
- +#define AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW 0x00003F00
- +#define AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW_S 8
- +#define AR_PHY_SFCORR_LOW_M1_THRESH_LOW 0x001FC000
- +#define AR_PHY_SFCORR_LOW_M1_THRESH_LOW_S 14
- +#define AR_PHY_SFCORR_LOW_M2_THRESH_LOW 0x0FE00000
- +#define AR_PHY_SFCORR_LOW_M2_THRESH_LOW_S 21
- +#define AR_PHY_SFCORR_M2COUNT_THR 0x0000001F
- +#define AR_PHY_SFCORR_M2COUNT_THR_S 0
- +#define AR_PHY_SFCORR_M1_THRESH 0x00FE0000
- +#define AR_PHY_SFCORR_M1_THRESH_S 17
- +#define AR_PHY_SFCORR_M2_THRESH 0x7F000000
- +#define AR_PHY_SFCORR_M2_THRESH_S 24
- +#define AR_PHY_SFCORR_EXT_M1_THRESH 0x0000007F
- +#define AR_PHY_SFCORR_EXT_M1_THRESH_S 0
- +#define AR_PHY_SFCORR_EXT_M2_THRESH 0x00003F80
- +#define AR_PHY_SFCORR_EXT_M2_THRESH_S 7
- +#define AR_PHY_SFCORR_EXT_M1_THRESH_LOW 0x001FC000
- +#define AR_PHY_SFCORR_EXT_M1_THRESH_LOW_S 14
- +#define AR_PHY_SFCORR_EXT_M2_THRESH_LOW 0x0FE00000
- +#define AR_PHY_SFCORR_EXT_M2_THRESH_LOW_S 21
- +#define AR_PHY_SFCORR_EXT_SPUR_SUBCHANNEL_SD 0x10000000
- +#define AR_PHY_SFCORR_EXT_SPUR_SUBCHANNEL_SD_S 28
- +#define AR_PHY_SFCORR_SPUR_SUBCHNL_SD_S 28
- +#define AR_PHY_EXT_CCA_THRESH62 0x007F0000
- +#define AR_PHY_EXT_CCA_THRESH62_S 16
- +#define AR_PHY_EXT_MINCCA_PWR 0x01FF0000
- +#define AR_PHY_EXT_MINCCA_PWR_S 16
- +#define AR_PHY_TIMING5_CYCPWR_THR1 0x000000FE
- +#define AR_PHY_TIMING5_CYCPWR_THR1_S 1
- +#define AR_PHY_TIMING5_CYCPWR_THR1_ENABLE 0x00000001
- +#define AR_PHY_TIMING5_CYCPWR_THR1_ENABLE_S 0
- +#define AR_PHY_TIMING5_CYCPWR_THR1A 0x007F0000
- +#define AR_PHY_TIMING5_CYCPWR_THR1A_S 16
- +#define AR_PHY_TIMING5_RSSI_THR1A (0x7F << 16)
- +#define AR_PHY_TIMING5_RSSI_THR1A_S 16
- +#define AR_PHY_TIMING5_RSSI_THR1A_ENA (0x1 << 15)
- +#define AR_PHY_RADAR_0_ENA 0x00000001
- +#define AR_PHY_RADAR_0_FFT_ENA 0x80000000
- +#define AR_PHY_RADAR_0_INBAND 0x0000003e
- +#define AR_PHY_RADAR_0_INBAND_S 1
- +#define AR_PHY_RADAR_0_PRSSI 0x00000FC0
- +#define AR_PHY_RADAR_0_PRSSI_S 6
- +#define AR_PHY_RADAR_0_HEIGHT 0x0003F000
- +#define AR_PHY_RADAR_0_HEIGHT_S 12
- +#define AR_PHY_RADAR_0_RRSSI 0x00FC0000
- +#define AR_PHY_RADAR_0_RRSSI_S 18
- +#define AR_PHY_RADAR_0_FIRPWR 0x7F000000
- +#define AR_PHY_RADAR_0_FIRPWR_S 24
- +#define AR_PHY_RADAR_1_RELPWR_ENA 0x00800000
- +#define AR_PHY_RADAR_1_USE_FIR128 0x00400000
- +#define AR_PHY_RADAR_1_RELPWR_THRESH 0x003F0000
- +#define AR_PHY_RADAR_1_RELPWR_THRESH_S 16
- +#define AR_PHY_RADAR_1_BLOCK_CHECK 0x00008000
- +#define AR_PHY_RADAR_1_MAX_RRSSI 0x00004000
- +#define AR_PHY_RADAR_1_RELSTEP_CHECK 0x00002000
- +#define AR_PHY_RADAR_1_RELSTEP_THRESH 0x00001F00
- +#define AR_PHY_RADAR_1_RELSTEP_THRESH_S 8
- +#define AR_PHY_RADAR_1_MAXLEN 0x000000FF
- +#define AR_PHY_RADAR_1_MAXLEN_S 0
- +#define AR_PHY_RADAR_EXT_ENA 0x00004000
- +#define AR_PHY_RADAR_DC_PWR_THRESH 0x007f8000
- +#define AR_PHY_RADAR_DC_PWR_THRESH_S 15
- +#define AR_PHY_RADAR_LB_DC_CAP 0x7f800000
- +#define AR_PHY_RADAR_LB_DC_CAP_S 23
- +#define AR_PHY_FIND_SIG_LOW_FIRSTEP_LOW (0x3f << 6)
- +#define AR_PHY_FIND_SIG_LOW_FIRSTEP_LOW_S 6
- +#define AR_PHY_FIND_SIG_LOW_FIRPWR (0x7f << 12)
- +#define AR_PHY_FIND_SIG_LOW_FIRPWR_S 12
- +#define AR_PHY_FIND_SIG_LOW_FIRPWR_SIGN_BIT 19
- +#define AR_PHY_FIND_SIG_LOW_RELSTEP 0x1f
- +#define AR_PHY_FIND_SIG_LOW_RELSTEP_S 0
- +#define AR_PHY_FIND_SIG_LOW_RELSTEP_SIGN_BIT 5
- +#define AR_PHY_CHAN_INFO_TAB_S2_READ 0x00000008
- +#define AR_PHY_CHAN_INFO_TAB_S2_READ_S 3
- +#define AR_PHY_RX_IQCAL_CORR_IQCORR_Q_Q_COFF 0x0000007F
- +#define AR_PHY_RX_IQCAL_CORR_IQCORR_Q_Q_COFF_S 0
- +#define AR_PHY_RX_IQCAL_CORR_IQCORR_Q_I_COFF 0x00003F80
- +#define AR_PHY_RX_IQCAL_CORR_IQCORR_Q_I_COFF_S 7
- +#define AR_PHY_RX_IQCAL_CORR_IQCORR_ENABLE 0x00004000
- +#define AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_Q_COFF 0x003f8000
- +#define AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_Q_COFF_S 15
- +#define AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_I_COFF 0x1fc00000
- +#define AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_I_COFF_S 22
- +
- +/*
- + * MRC Register Map
- + */
- +#define AR_MRC_BASE 0x9c00
- +
- +#define AR_PHY_TIMING_3A AR_MRC_BASE + 0x0
- +#define AR_PHY_LDPC_CNTL1 AR_MRC_BASE + 0x4
- +#define AR_PHY_LDPC_CNTL2 AR_MRC_BASE + 0x8
- +#define AR_PHY_PILOT_SPUR_MASK AR_MRC_BASE + 0xc
- +#define AR_PHY_CHAN_SPUR_MASK AR_MRC_BASE + 0x10
- +#define AR_PHY_SGI_DELTA AR_MRC_BASE + 0x14
- +#define AR_PHY_ML_CNTL_1 AR_MRC_BASE + 0x18
- +#define AR_PHY_ML_CNTL_2 AR_MRC_BASE + 0x1c
- +#define AR_PHY_TST_ADC AR_MRC_BASE + 0x20
- +
- +#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_A 0x00000FE0
- +#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_A_S 5
- +#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_A 0x1F
- +#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_A_S 0
- +
- +#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_A 0x00000FE0
- +#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_A_S 5
- +#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_A 0x1F
- +#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_A_S 0
- +
- +/*
- + * MRC Feild Definitions
- + */
- +#define AR_PHY_SGI_DSC_MAN 0x0007FFF0
- +#define AR_PHY_SGI_DSC_MAN_S 4
- +#define AR_PHY_SGI_DSC_EXP 0x0000000F
- +#define AR_PHY_SGI_DSC_EXP_S 0
- +/*
- + * BBB Register Map
- + */
- +#define AR_BBB_BASE 0x9d00
- +
- +/*
- + * AGC Register Map
- + */
- +#define AR_AGC_BASE 0x9e00
- +
- +#define AR_PHY_SETTLING AR_AGC_BASE + 0x0
- +#define AR_PHY_FORCEMAX_GAINS_0 AR_AGC_BASE + 0x4
- +#define AR_PHY_GAINS_MINOFF0 AR_AGC_BASE + 0x8
- +#define AR_PHY_DESIRED_SZ AR_AGC_BASE + 0xc
- +#define AR_PHY_FIND_SIG AR_AGC_BASE + 0x10
- +#define AR_PHY_AGC AR_AGC_BASE + 0x14
- +#define AR_PHY_EXT_ATTEN_CTL_0 AR_AGC_BASE + 0x18
- +#define AR_PHY_CCA_0 AR_AGC_BASE + 0x1c
- +#define AR_PHY_EXT_CCA0 AR_AGC_BASE + 0x20
- +#define AR_PHY_RESTART AR_AGC_BASE + 0x24
- +#define AR_PHY_MC_GAIN_CTRL AR_AGC_BASE + 0x28
- +#define AR_PHY_EXTCHN_PWRTHR1 AR_AGC_BASE + 0x2c
- +#define AR_PHY_EXT_CHN_WIN AR_AGC_BASE + 0x30
- +#define AR_PHY_20_40_DET_THR AR_AGC_BASE + 0x34
- +#define AR_PHY_RIFS_SRCH AR_AGC_BASE + 0x38
- +#define AR_PHY_PEAK_DET_CTRL_1 AR_AGC_BASE + 0x3c
- +#define AR_PHY_PEAK_DET_CTRL_2 AR_AGC_BASE + 0x40
- +#define AR_PHY_RX_GAIN_BOUNDS_1 AR_AGC_BASE + 0x44
- +#define AR_PHY_RX_GAIN_BOUNDS_2 AR_AGC_BASE + 0x48
- +#define AR_PHY_RSSI_0 AR_AGC_BASE + 0x180
- +#define AR_PHY_SPUR_CCK_REP0 AR_AGC_BASE + 0x184
- +#define AR_PHY_CCK_DETECT AR_AGC_BASE + 0x1c0
- +#define AR_PHY_DAG_CTRLCCK AR_AGC_BASE + 0x1c4
- +#define AR_PHY_IQCORR_CTRL_CCK AR_AGC_BASE + 0x1c8
- +
- +#define AR_PHY_CCK_SPUR_MIT AR_AGC_BASE + 0x1cc
- +#define AR_PHY_CCK_SPUR_MIT_SPUR_RSSI_THR 0x000001fe
- +#define AR_PHY_CCK_SPUR_MIT_SPUR_RSSI_THR_S 1
- +#define AR_PHY_CCK_SPUR_MIT_SPUR_FILTER_TYPE 0x60000000
- +#define AR_PHY_CCK_SPUR_MIT_SPUR_FILTER_TYPE_S 29
- +#define AR_PHY_CCK_SPUR_MIT_USE_CCK_SPUR_MIT 0x00000001
- +#define AR_PHY_CCK_SPUR_MIT_USE_CCK_SPUR_MIT_S 0
- +#define AR_PHY_CCK_SPUR_MIT_CCK_SPUR_FREQ 0x1ffffe00
- +#define AR_PHY_CCK_SPUR_MIT_CCK_SPUR_FREQ_S 9
- +
- +#define AR_PHY_RX_OCGAIN AR_AGC_BASE + 0x200
- +
- +#define AR_PHY_CCA_NOM_VAL_9300_2GHZ -110
- +#define AR_PHY_CCA_NOM_VAL_9300_5GHZ -115
- +#define AR_PHY_CCA_MIN_GOOD_VAL_9300_2GHZ -125
- +#define AR_PHY_CCA_MIN_GOOD_VAL_9300_5GHZ -125
- +#define AR_PHY_CCA_MAX_GOOD_VAL_9300_2GHZ -95
- +#define AR_PHY_CCA_MAX_GOOD_VAL_9300_5GHZ -100
- +
- +/*
- + * AGC Field Definitions
- + */
- +#define AR_PHY_EXT_ATTEN_CTL_RXTX_MARGIN 0x00FC0000
- +#define AR_PHY_EXT_ATTEN_CTL_RXTX_MARGIN_S 18
- +#define AR_PHY_EXT_ATTEN_CTL_BSW_MARGIN 0x00003C00
- +#define AR_PHY_EXT_ATTEN_CTL_BSW_MARGIN_S 10
- +#define AR_PHY_EXT_ATTEN_CTL_BSW_ATTEN 0x0000001F
- +#define AR_PHY_EXT_ATTEN_CTL_BSW_ATTEN_S 0
- +#define AR_PHY_EXT_ATTEN_CTL_XATTEN2_MARGIN 0x003E0000
- +#define AR_PHY_EXT_ATTEN_CTL_XATTEN2_MARGIN_S 17
- +#define AR_PHY_EXT_ATTEN_CTL_XATTEN1_MARGIN 0x0001F000
- +#define AR_PHY_EXT_ATTEN_CTL_XATTEN1_MARGIN_S 12
- +#define AR_PHY_EXT_ATTEN_CTL_XATTEN2_DB 0x00000FC0
- +#define AR_PHY_EXT_ATTEN_CTL_XATTEN2_DB_S 6
- +#define AR_PHY_EXT_ATTEN_CTL_XATTEN1_DB 0x0000003F
- +#define AR_PHY_EXT_ATTEN_CTL_XATTEN1_DB_S 0
- +#define AR_PHY_RXGAIN_TXRX_ATTEN 0x0003F000
- +#define AR_PHY_RXGAIN_TXRX_ATTEN_S 12
- +#define AR_PHY_RXGAIN_TXRX_RF_MAX 0x007C0000
- +#define AR_PHY_RXGAIN_TXRX_RF_MAX_S 18
- +#define AR9280_PHY_RXGAIN_TXRX_ATTEN 0x00003F80
- +#define AR9280_PHY_RXGAIN_TXRX_ATTEN_S 7
- +#define AR9280_PHY_RXGAIN_TXRX_MARGIN 0x001FC000
- +#define AR9280_PHY_RXGAIN_TXRX_MARGIN_S 14
- +#define AR_PHY_SETTLING_SWITCH 0x00003F80
- +#define AR_PHY_SETTLING_SWITCH_S 7
- +#define AR_PHY_DESIRED_SZ_ADC 0x000000FF
- +#define AR_PHY_DESIRED_SZ_ADC_S 0
- +#define AR_PHY_DESIRED_SZ_PGA 0x0000FF00
- +#define AR_PHY_DESIRED_SZ_PGA_S 8
- +#define AR_PHY_DESIRED_SZ_TOT_DES 0x0FF00000
- +#define AR_PHY_DESIRED_SZ_TOT_DES_S 20
- +#define AR_PHY_MINCCA_PWR 0x1FF00000
- +#define AR_PHY_MINCCA_PWR_S 20
- +#define AR_PHY_CCA_THRESH62 0x0007F000
- +#define AR_PHY_CCA_THRESH62_S 12
- +#define AR9280_PHY_MINCCA_PWR 0x1FF00000
- +#define AR9280_PHY_MINCCA_PWR_S 20
- +#define AR9280_PHY_CCA_THRESH62 0x000FF000
- +#define AR9280_PHY_CCA_THRESH62_S 12
- +#define AR_PHY_EXT_CCA0_THRESH62 0x000000FF
- +#define AR_PHY_EXT_CCA0_THRESH62_S 0
- +#define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK 0x0000003F
- +#define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK_S 0
- +#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME 0x00001FC0
- +#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME_S 6
- +#define AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV 0x2000
- +
- +#define AR_PHY_DAG_CTRLCCK_EN_RSSI_THR 0x00000200
- +#define AR_PHY_DAG_CTRLCCK_EN_RSSI_THR_S 9
- +#define AR_PHY_DAG_CTRLCCK_RSSI_THR 0x0001FC00
- +#define AR_PHY_DAG_CTRLCCK_RSSI_THR_S 10
- +
- +#define AR_PHY_RIFS_INIT_DELAY 0x3ff0000
- +#define AR_PHY_AGC_COARSE_LOW 0x00007F80
- +#define AR_PHY_AGC_COARSE_LOW_S 7
- +#define AR_PHY_AGC_COARSE_HIGH 0x003F8000
- +#define AR_PHY_AGC_COARSE_HIGH_S 15
- +#define AR_PHY_AGC_COARSE_PWR_CONST 0x0000007F
- +#define AR_PHY_AGC_COARSE_PWR_CONST_S 0
- +#define AR_PHY_FIND_SIG_FIRSTEP 0x0003F000
- +#define AR_PHY_FIND_SIG_FIRSTEP_S 12
- +#define AR_PHY_FIND_SIG_FIRPWR 0x03FC0000
- +#define AR_PHY_FIND_SIG_FIRPWR_S 18
- +#define AR_PHY_FIND_SIG_FIRPWR_SIGN_BIT 25
- +#define AR_PHY_FIND_SIG_RELPWR (0x1f << 6)
- +#define AR_PHY_FIND_SIG_RELPWR_S 6
- +#define AR_PHY_FIND_SIG_RELPWR_SIGN_BIT 11
- +#define AR_PHY_FIND_SIG_RELSTEP 0x1f
- +#define AR_PHY_FIND_SIG_RELSTEP_S 0
- +#define AR_PHY_FIND_SIG_RELSTEP_SIGN_BIT 5
- +#define AR_PHY_RESTART_DIV_GC 0x001C0000
- +#define AR_PHY_RESTART_DIV_GC_S 18
- +#define AR_PHY_RESTART_ENA 0x01
- +#define AR_PHY_DC_RESTART_DIS 0x40000000
- +
- +#define AR_PHY_TPC_OLPC_GAIN_DELTA_PAL_ON 0xFF000000
- +#define AR_PHY_TPC_OLPC_GAIN_DELTA_PAL_ON_S 24
- +#define AR_PHY_TPC_OLPC_GAIN_DELTA 0x00FF0000
- +#define AR_PHY_TPC_OLPC_GAIN_DELTA_S 16
- +
- +#define AR_PHY_TPC_6_ERROR_EST_MODE 0x03000000
- +#define AR_PHY_TPC_6_ERROR_EST_MODE_S 24
- +
- +/*
- + * SM Register Map
- + */
- +#define AR_SM_BASE 0xa200
- +
- +#define AR_PHY_D2_CHIP_ID AR_SM_BASE + 0x0
- +#define AR_PHY_GEN_CTRL AR_SM_BASE + 0x4
- +#define AR_PHY_MODE AR_SM_BASE + 0x8
- +#define AR_PHY_ACTIVE AR_SM_BASE + 0xc
- +#define AR_PHY_SPUR_MASK_A AR_SM_BASE + 0x20
- +#define AR_PHY_SPUR_MASK_B AR_SM_BASE + 0x24
- +#define AR_PHY_SPECTRAL_SCAN AR_SM_BASE + 0x28
- +#define AR_PHY_RADAR_BW_FILTER AR_SM_BASE + 0x2c
- +#define AR_PHY_SEARCH_START_DELAY AR_SM_BASE + 0x30
- +#define AR_PHY_MAX_RX_LEN AR_SM_BASE + 0x34
- +#define AR_PHY_FRAME_CTL AR_SM_BASE + 0x38
- +#define AR_PHY_RFBUS_REQ AR_SM_BASE + 0x3c
- +#define AR_PHY_RFBUS_GRANT AR_SM_BASE + 0x40
- +#define AR_PHY_RIFS AR_SM_BASE + 0x44
- +#define AR_PHY_RX_CLR_DELAY AR_SM_BASE + 0x50
- +#define AR_PHY_RX_DELAY AR_SM_BASE + 0x54
- +
- +#define AR_PHY_XPA_TIMING_CTL AR_SM_BASE + 0x64
- +#define AR_PHY_MISC_PA_CTL AR_SM_BASE + 0x80
- +#define AR_PHY_SWITCH_CHAIN_0 AR_SM_BASE + 0x84
- +#define AR_PHY_SWITCH_COM AR_SM_BASE + 0x88
- +#define AR_PHY_SWITCH_COM_2 AR_SM_BASE + 0x8c
- +#define AR_PHY_RX_CHAINMASK AR_SM_BASE + 0xa0
- +#define AR_PHY_CAL_CHAINMASK AR_SM_BASE + 0xc0
- +#define AR_PHY_CALMODE AR_SM_BASE + 0xc8
- +#define AR_PHY_FCAL_1 AR_SM_BASE + 0xcc
- +#define AR_PHY_FCAL_2_0 AR_SM_BASE + 0xd0
- +#define AR_PHY_DFT_TONE_CTL_0 AR_SM_BASE + 0xd4
- +#define AR_PHY_CL_CAL_CTL AR_SM_BASE + 0xd8
- +#define AR_PHY_CL_TAB_0 AR_SM_BASE + 0x100
- +#define AR_PHY_SYNTH_CONTROL AR_SM_BASE + 0x140
- +#define AR_PHY_ADDAC_CLK_SEL AR_SM_BASE + 0x144
- +#define AR_PHY_PLL_CTL AR_SM_BASE + 0x148
- +#define AR_PHY_ANALOG_SWAP AR_SM_BASE + 0x14c
- +#define AR_PHY_ADDAC_PARA_CTL AR_SM_BASE + 0x150
- +#define AR_PHY_XPA_CFG AR_SM_BASE + 0x158
- +
- +#define AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_IDX_A 0x0001FC00
- +#define AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_IDX_A_S 10
- +#define AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_A 0x3FF
- +#define AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_A_S 0
- +
- +#define AR_PHY_TEST AR_SM_BASE + 0x160
- +
- +#define AR_PHY_TEST_BBB_OBS_SEL 0x780000
- +#define AR_PHY_TEST_BBB_OBS_SEL_S 19
- +
- +#define AR_PHY_TEST_RX_OBS_SEL_BIT5_S 23
- +#define AR_PHY_TEST_RX_OBS_SEL_BIT5 (1 << AR_PHY_TEST_RX_OBS_SEL_BIT5_S)
- +
- +#define AR_PHY_TEST_CHAIN_SEL 0xC0000000
- +#define AR_PHY_TEST_CHAIN_SEL_S 30
- +
- +#define AR_PHY_TEST_CTL_STATUS AR_SM_BASE + 0x164
- +#define AR_PHY_TEST_CTL_TSTDAC_EN 0x1
- +#define AR_PHY_TEST_CTL_TSTDAC_EN_S 0
- +#define AR_PHY_TEST_CTL_TX_OBS_SEL 0x1C
- +#define AR_PHY_TEST_CTL_TX_OBS_SEL_S 2
- +#define AR_PHY_TEST_CTL_TX_OBS_MUX_SEL 0x60
- +#define AR_PHY_TEST_CTL_TX_OBS_MUX_SEL_S 5
- +#define AR_PHY_TEST_CTL_TSTADC_EN 0x100
- +#define AR_PHY_TEST_CTL_TSTADC_EN_S 8
- +#define AR_PHY_TEST_CTL_RX_OBS_SEL 0x3C00
- +#define AR_PHY_TEST_CTL_RX_OBS_SEL_S 10
- +
- +
- +#define AR_PHY_TSTDAC AR_SM_BASE + 0x168
- +
- +#define AR_PHY_CHAN_STATUS AR_SM_BASE + 0x16c
- +#define AR_PHY_CHAN_INFO_MEMORY AR_SM_BASE + 0x170
- +#define AR_PHY_CHNINFO_NOISEPWR AR_SM_BASE + 0x174
- +#define AR_PHY_CHNINFO_GAINDIFF AR_SM_BASE + 0x178
- +#define AR_PHY_CHNINFO_FINETIM AR_SM_BASE + 0x17c
- +#define AR_PHY_CHAN_INFO_GAIN_0 AR_SM_BASE + 0x180
- +#define AR_PHY_SCRAMBLER_SEED AR_SM_BASE + 0x190
- +#define AR_PHY_CCK_TX_CTRL AR_SM_BASE + 0x194
- +
- +#define AR_PHY_HEAVYCLIP_CTL AR_SM_BASE + 0x1a4
- +#define AR_PHY_HEAVYCLIP_20 AR_SM_BASE + 0x1a8
- +#define AR_PHY_HEAVYCLIP_40 AR_SM_BASE + 0x1ac
- +#define AR_PHY_ILLEGAL_TXRATE AR_SM_BASE + 0x1b0
- +
- +#define AR_PHY_PWRTX_MAX AR_SM_BASE + 0x1f0
- +#define AR_PHY_POWER_TX_SUB AR_SM_BASE + 0x1f4
- +
- +#define AR_PHY_TPC_4_B0 AR_SM_BASE + 0x204
- +#define AR_PHY_TPC_5_B0 AR_SM_BASE + 0x208
- +#define AR_PHY_TPC_6_B0 AR_SM_BASE + 0x20c
- +#define AR_PHY_TPC_11_B0 AR_SM_BASE + 0x220
- +#define AR_PHY_TPC_18 AR_SM_BASE + 0x23c
- +#define AR_PHY_TPC_19 AR_SM_BASE + 0x240
- +
- +#define AR_PHY_TX_FORCED_GAIN AR_SM_BASE + 0x258
- +
- +#define AR_PHY_PDADC_TAB_0 AR_SM_BASE + 0x280
- +
- +#define AR_PHY_TX_IQCAL_CONTROL_1 AR_SM_BASE + 0x448
- +#define AR_PHY_TX_IQCAL_START AR_SM_BASE + 0x440
- +#define AR_PHY_TX_IQCAL_STATUS_B0 AR_SM_BASE + 0x48c
- +#define AR_PHY_TX_IQCAL_CORR_COEFF_01_B0 AR_SM_BASE + 0x450
- +
- +#define AR_PHY_PANIC_WD_STATUS AR_SM_BASE + 0x5c0
- +#define AR_PHY_PANIC_WD_CTL_1 AR_SM_BASE + 0x5c4
- +#define AR_PHY_PANIC_WD_CTL_2 AR_SM_BASE + 0x5c8
- +#define AR_PHY_BT_CTL AR_SM_BASE + 0x5cc
- +#define AR_PHY_ONLY_WARMRESET AR_SM_BASE + 0x5d0
- +#define AR_PHY_ONLY_CTL AR_SM_BASE + 0x5d4
- +#define AR_PHY_ECO_CTRL AR_SM_BASE + 0x5dc
- +#define AR_PHY_BB_THERM_ADC_1 AR_SM_BASE + 0x248
- +
- +#define AR_PHY_65NM_CH0_SYNTH4 0x1608c
- +#define AR_PHY_SYNTH4_LONG_SHIFT_SELECT 0x00000002
- +#define AR_PHY_SYNTH4_LONG_SHIFT_SELECT_S 1
- +#define AR_PHY_65NM_CH0_SYNTH7 0x16098
- +#define AR_PHY_65NM_CH0_BIAS1 0x160c0
- +#define AR_PHY_65NM_CH0_BIAS2 0x160c4
- +#define AR_PHY_65NM_CH0_BIAS4 0x160cc
- +#define AR_PHY_65NM_CH0_RXTX4 0x1610c
- +#define AR_PHY_65NM_CH0_THERM 0x16290
- +
- +#define AR_PHY_65NM_CH0_THERM_LOCAL 0x80000000
- +#define AR_PHY_65NM_CH0_THERM_LOCAL_S 31
- +#define AR_PHY_65NM_CH0_THERM_START 0x20000000
- +#define AR_PHY_65NM_CH0_THERM_START_S 29
- +#define AR_PHY_65NM_CH0_THERM_SAR_ADC_OUT 0x0000ff00
- +#define AR_PHY_65NM_CH0_THERM_SAR_ADC_OUT_S 8
- +
- +#define AR_PHY_65NM_CH0_RXTX1 0x16100
- +#define AR_PHY_65NM_CH0_RXTX2 0x16104
- +#define AR_PHY_65NM_CH1_RXTX1 0x16500
- +#define AR_PHY_65NM_CH1_RXTX2 0x16504
- +#define AR_PHY_65NM_CH2_RXTX1 0x16900
- +#define AR_PHY_65NM_CH2_RXTX2 0x16904
- +
- +#define AR_PHY_RX1DB_BIQUAD_LONG_SHIFT 0x00380000
- +#define AR_PHY_RX1DB_BIQUAD_LONG_SHIFT_S 19
- +#define AR_PHY_RX6DB_BIQUAD_LONG_SHIFT 0x00c00000
- +#define AR_PHY_RX6DB_BIQUAD_LONG_SHIFT_S 22
- +#define AR_PHY_LNAGAIN_LONG_SHIFT 0xe0000000
- +#define AR_PHY_LNAGAIN_LONG_SHIFT_S 29
- +#define AR_PHY_MXRGAIN_LONG_SHIFT 0x03000000
- +#define AR_PHY_MXRGAIN_LONG_SHIFT_S 24
- +#define AR_PHY_VGAGAIN_LONG_SHIFT 0x1c000000
- +#define AR_PHY_VGAGAIN_LONG_SHIFT_S 26
- +#define AR_PHY_SCFIR_GAIN_LONG_SHIFT 0x00000001
- +#define AR_PHY_SCFIR_GAIN_LONG_SHIFT_S 0
- +#define AR_PHY_MANRXGAIN_LONG_SHIFT 0x00000002
- +#define AR_PHY_MANRXGAIN_LONG_SHIFT_S 1
- +
- +/*
- + * SM Field Definitions
- + */
- +#define AR_PHY_CL_CAL_ENABLE 0x00000002
- +#define AR_PHY_PARALLEL_CAL_ENABLE 0x00000001
- +#define AR_PHY_TPCRG1_PD_CAL_ENABLE 0x00400000
- +#define AR_PHY_TPCRG1_PD_CAL_ENABLE_S 22
- +
- +#define AR_PHY_ADDAC_PARACTL_OFF_PWDADC 0x00008000
- +
- +#define AR_PHY_FCAL20_CAP_STATUS_0 0x01f00000
- +#define AR_PHY_FCAL20_CAP_STATUS_0_S 20
- +
- +#define AR_PHY_RFBUS_REQ_EN 0x00000001 /* request for RF bus */
- +#define AR_PHY_RFBUS_GRANT_EN 0x00000001 /* RF bus granted */
- +#define AR_PHY_GC_TURBO_MODE 0x00000001 /* set turbo mode bits */
- +#define AR_PHY_GC_TURBO_SHORT 0x00000002 /* set short symbols to turbo mode setting */
- +#define AR_PHY_GC_DYN2040_EN 0x00000004 /* enable dyn 20/40 mode */
- +#define AR_PHY_GC_DYN2040_PRI_ONLY 0x00000008 /* dyn 20/40 - primary only */
- +#define AR_PHY_GC_DYN2040_PRI_CH 0x00000010 /* dyn 20/40 - primary ch offset (0=+10MHz, 1=-10MHz)*/
- +#define AR_PHY_GC_DYN2040_PRI_CH_S 4
- +#define AR_PHY_GC_DYN2040_EXT_CH 0x00000020 /* dyn 20/40 - ext ch spacing (0=20MHz/ 1=25MHz) */
- +#define AR_PHY_GC_HT_EN 0x00000040 /* ht enable */
- +#define AR_PHY_GC_SHORT_GI_40 0x00000080 /* allow short GI for HT 40 */
- +#define AR_PHY_GC_WALSH 0x00000100 /* walsh spatial spreading for 2 chains,2 streams TX */
- +#define AR_PHY_GC_SINGLE_HT_LTF1 0x00000200 /* single length (4us) 1st HT long training symbol */
- +#define AR_PHY_GC_GF_DETECT_EN 0x00000400 /* enable Green Field detection. Only affects rx, not tx */
- +#define AR_PHY_GC_ENABLE_DAC_FIFO 0x00000800 /* fifo between bb and dac */
- +#define AR_PHY_RX_DELAY_DELAY 0x00003FFF /* delay from wakeup to rx ena */
- +
- +#define AR_PHY_CALMODE_IQ 0x00000000
- +#define AR_PHY_CALMODE_ADC_GAIN 0x00000001
- +#define AR_PHY_CALMODE_ADC_DC_PER 0x00000002
- +#define AR_PHY_CALMODE_ADC_DC_INIT 0x00000003
- +#define AR_PHY_SWAP_ALT_CHAIN 0x00000040
- +#define AR_PHY_MODE_OFDM 0x00000000
- +#define AR_PHY_MODE_CCK 0x00000001
- +#define AR_PHY_MODE_DYNAMIC 0x00000004
- +#define AR_PHY_MODE_DYNAMIC_S 2
- +#define AR_PHY_MODE_HALF 0x00000020
- +#define AR_PHY_MODE_QUARTER 0x00000040
- +#define AR_PHY_MAC_CLK_MODE 0x00000080
- +#define AR_PHY_MODE_DYN_CCK_DISABLE 0x00000100
- +#define AR_PHY_MODE_SVD_HALF 0x00000200
- +#define AR_PHY_ACTIVE_EN 0x00000001
- +#define AR_PHY_ACTIVE_DIS 0x00000000
- +#define AR_PHY_FORCE_XPA_CFG 0x000000001
- +#define AR_PHY_FORCE_XPA_CFG_S 0
- +#define AR_PHY_XPA_TIMING_CTL_TX_END_XPAB_OFF 0xFF000000
- +#define AR_PHY_XPA_TIMING_CTL_TX_END_XPAB_OFF_S 24
- +#define AR_PHY_XPA_TIMING_CTL_TX_END_XPAA_OFF 0x00FF0000
- +#define AR_PHY_XPA_TIMING_CTL_TX_END_XPAA_OFF_S 16
- +#define AR_PHY_XPA_TIMING_CTL_FRAME_XPAB_ON 0x0000FF00
- +#define AR_PHY_XPA_TIMING_CTL_FRAME_XPAB_ON_S 8
- +#define AR_PHY_XPA_TIMING_CTL_FRAME_XPAA_ON 0x000000FF
- +#define AR_PHY_XPA_TIMING_CTL_FRAME_XPAA_ON_S 0
- +#define AR_PHY_TX_END_TO_A2_RX_ON 0x00FF0000
- +#define AR_PHY_TX_END_TO_A2_RX_ON_S 16
- +#define AR_PHY_TX_END_DATA_START 0x000000FF
- +#define AR_PHY_TX_END_DATA_START_S 0
- +#define AR_PHY_TX_END_PA_ON 0x0000FF00
- +#define AR_PHY_TX_END_PA_ON_S 8
- +#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP 0x0000000F
- +#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP_S 0
- +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1 0x000003F0
- +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1_S 4
- +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2 0x0000FC00
- +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2_S 10
- +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3 0x003F0000
- +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3_S 16
- +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4 0x0FC00000
- +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4_S 22
- +#define AR_PHY_TPCRG1_NUM_PD_GAIN 0x0000c000
- +#define AR_PHY_TPCRG1_NUM_PD_GAIN_S 14
- +#define AR_PHY_TPCRG1_PD_GAIN_1 0x00030000
- +#define AR_PHY_TPCRG1_PD_GAIN_1_S 16
- +#define AR_PHY_TPCRG1_PD_GAIN_2 0x000C0000
- +#define AR_PHY_TPCRG1_PD_GAIN_2_S 18
- +#define AR_PHY_TPCRG1_PD_GAIN_3 0x00300000
- +#define AR_PHY_TPCRG1_PD_GAIN_3_S 20
- +#define AR_PHY_TPCGR1_FORCED_DAC_GAIN 0x0000003e
- +#define AR_PHY_TPCGR1_FORCED_DAC_GAIN_S 1
- +#define AR_PHY_TPCGR1_FORCE_DAC_GAIN 0x00000001
- +#define AR_PHY_TXGAIN_FORCE 0x00000001
- +#define AR_PHY_TXGAIN_FORCED_PADVGNRA 0x00003c00
- +#define AR_PHY_TXGAIN_FORCED_PADVGNRA_S 10
- +#define AR_PHY_TXGAIN_FORCED_PADVGNRB 0x0003c000
- +#define AR_PHY_TXGAIN_FORCED_PADVGNRB_S 14
- +#define AR_PHY_TXGAIN_FORCED_PADVGNRD 0x00c00000
- +#define AR_PHY_TXGAIN_FORCED_PADVGNRD_S 22
- +#define AR_PHY_TXGAIN_FORCED_TXMXRGAIN 0x000003c0
- +#define AR_PHY_TXGAIN_FORCED_TXMXRGAIN_S 6
- +#define AR_PHY_TXGAIN_FORCED_TXBB1DBGAIN 0x0000000e
- +#define AR_PHY_TXGAIN_FORCED_TXBB1DBGAIN_S 1
- +
- +#define AR_PHY_POWER_TX_RATE1 0x9934
- +#define AR_PHY_POWER_TX_RATE2 0x9938
- +#define AR_PHY_POWER_TX_RATE_MAX 0x993c
- +#define AR_PHY_POWER_TX_RATE_MAX_TPC_ENABLE 0x00000040
- +#define PHY_AGC_CLR 0x10000000
- +#define RFSILENT_BB 0x00002000
- +#define AR_PHY_CHAN_INFO_GAIN_DIFF_PPM_MASK 0xFFF
- +#define AR_PHY_CHAN_INFO_GAIN_DIFF_PPM_SIGNED_BIT 0x800
- +#define AR_PHY_CHAN_INFO_GAIN_DIFF_UPPER_LIMIT 320
- +#define AR_PHY_CHAN_INFO_MEMORY_CAPTURE_MASK 0x0001
- +#define AR_PHY_RX_DELAY_DELAY 0x00003FFF
- +#define AR_PHY_CCK_TX_CTRL_JAPAN 0x00000010
- +#define AR_PHY_SPECTRAL_SCAN_ENABLE 0x00000001
- +#define AR_PHY_SPECTRAL_SCAN_ENABLE_S 0
- +#define AR_PHY_SPECTRAL_SCAN_ACTIVE 0x00000002
- +#define AR_PHY_SPECTRAL_SCAN_ACTIVE_S 1
- +#define AR_PHY_SPECTRAL_SCAN_FFT_PERIOD 0x000000F0
- +#define AR_PHY_SPECTRAL_SCAN_FFT_PERIOD_S 4
- +#define AR_PHY_SPECTRAL_SCAN_PERIOD 0x0000FF00
- +#define AR_PHY_SPECTRAL_SCAN_PERIOD_S 8
- +#define AR_PHY_SPECTRAL_SCAN_COUNT 0x00FF0000
- +#define AR_PHY_SPECTRAL_SCAN_COUNT_S 16
- +#define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT 0x01000000
- +#define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT_S 24
- +#define AR_PHY_CHANNEL_STATUS_RX_CLEAR 0x00000004
- +#define AR_PHY_TX_IQCAQL_CONTROL_1_IQCORR_I_Q_COFF_DELPT 0x01fc0000
- +#define AR_PHY_TX_IQCAQL_CONTROL_1_IQCORR_I_Q_COFF_DELPT_S 18
- +#define AR_PHY_TX_IQCAL_START_DO_CAL 0x00000001
- +#define AR_PHY_TX_IQCAL_START_DO_CAL_S 0
- +
- +#define AR_PHY_TX_IQCAL_STATUS_FAILED 0x00000001
- +#define AR_PHY_TX_IQCAL_CORR_COEFF_01_COEFF_TABLE 0x00003fff
- +#define AR_PHY_TX_IQCAL_CORR_COEFF_01_COEFF_TABLE_S 0
- +
- +#define AR_PHY_TPC_18_THERM_CAL_VALUE 0xff
- +#define AR_PHY_TPC_18_THERM_CAL_VALUE_S 0
- +#define AR_PHY_TPC_19_ALPHA_THERM 0xff
- +#define AR_PHY_TPC_19_ALPHA_THERM_S 0
- +
- +#define AR_PHY_65NM_CH0_RXTX4_THERM_ON 0x10000000
- +#define AR_PHY_65NM_CH0_RXTX4_THERM_ON_S 28
- +
- +#define AR_PHY_BB_THERM_ADC_1_INIT_THERM 0x000000ff
- +#define AR_PHY_BB_THERM_ADC_1_INIT_THERM_S 0
- +
- +/*
- + * Channel 1 Register Map
- + */
- +#define AR_CHAN1_BASE 0xa800
- +
- +#define AR_PHY_EXT_CCA_1 AR_CHAN1_BASE + 0x30
- +#define AR_PHY_TX_PHASE_RAMP_1 AR_CHAN1_BASE + 0xd0
- +#define AR_PHY_ADC_GAIN_DC_CORR_1 AR_CHAN1_BASE + 0xd4
- +
- +#define AR_PHY_SPUR_REPORT_1 AR_CHAN1_BASE + 0xa8
- +#define AR_PHY_CHAN_INFO_TAB_1 AR_CHAN1_BASE + 0x300
- +#define AR_PHY_RX_IQCAL_CORR_B1 AR_CHAN1_BASE + 0xdc
- +
- +/*
- + * Channel 1 Field Definitions
- + */
- +#define AR_PHY_CH1_EXT_MINCCA_PWR 0x01FF0000
- +#define AR_PHY_CH1_EXT_MINCCA_PWR_S 16
- +
- +/*
- + * AGC 1 Register Map
- + */
- +#define AR_AGC1_BASE 0xae00
- +
- +#define AR_PHY_FORCEMAX_GAINS_1 AR_AGC1_BASE + 0x4
- +#define AR_PHY_EXT_ATTEN_CTL_1 AR_AGC1_BASE + 0x18
- +#define AR_PHY_CCA_1 AR_AGC1_BASE + 0x1c
- +#define AR_PHY_CCA_CTRL_1 AR_AGC1_BASE + 0x20
- +#define AR_PHY_RSSI_1 AR_AGC1_BASE + 0x180
- +#define AR_PHY_SPUR_CCK_REP_1 AR_AGC1_BASE + 0x184
- +#define AR_PHY_RX_OCGAIN_2 AR_AGC1_BASE + 0x200
- +
- +/*
- + * AGC 1 Field Definitions
- + */
- +#define AR_PHY_CH1_MINCCA_PWR 0x1FF00000
- +#define AR_PHY_CH1_MINCCA_PWR_S 20
- +
- +/*
- + * SM 1 Register Map
- + */
- +#define AR_SM1_BASE 0xb200
- +
- +#define AR_PHY_SWITCH_CHAIN_1 AR_SM1_BASE + 0x84
- +#define AR_PHY_FCAL_2_1 AR_SM1_BASE + 0xd0
- +#define AR_PHY_DFT_TONE_CTL_1 AR_SM1_BASE + 0xd4
- +#define AR_PHY_CL_TAB_1 AR_SM1_BASE + 0x100
- +#define AR_PHY_CHAN_INFO_GAIN_1 AR_SM1_BASE + 0x180
- +#define AR_PHY_TPC_4_B1 AR_SM1_BASE + 0x204
- +#define AR_PHY_TPC_5_B1 AR_SM1_BASE + 0x208
- +#define AR_PHY_TPC_6_B1 AR_SM1_BASE + 0x20c
- +#define AR_PHY_TPC_11_B1 AR_SM1_BASE + 0x220
- +#define AR_PHY_PDADC_TAB_1 AR_SM1_BASE + 0x240
- +#define AR_PHY_TX_IQCAL_STATUS_B1 AR_SM1_BASE + 0x48c
- +#define AR_PHY_TX_IQCAL_CORR_COEFF_01_B1 AR_SM1_BASE + 0x450
- +
- +/*
- + * Channel 2 Register Map
- + */
- +#define AR_CHAN2_BASE 0xb800
- +
- +#define AR_PHY_EXT_CCA_2 AR_CHAN2_BASE + 0x30
- +#define AR_PHY_TX_PHASE_RAMP_2 AR_CHAN2_BASE + 0xd0
- +#define AR_PHY_ADC_GAIN_DC_CORR_2 AR_CHAN2_BASE + 0xd4
- +
- +#define AR_PHY_SPUR_REPORT_2 AR_CHAN2_BASE + 0xa8
- +#define AR_PHY_CHAN_INFO_TAB_2 AR_CHAN2_BASE + 0x300
- +#define AR_PHY_RX_IQCAL_CORR_B2 AR_CHAN2_BASE + 0xdc
- +
- +/*
- + * Channel 2 Field Definitions
- + */
- +#define AR_PHY_CH2_EXT_MINCCA_PWR 0x01FF0000
- +#define AR_PHY_CH2_EXT_MINCCA_PWR_S 16
- +/*
- + * AGC 2 Register Map
- + */
- +#define AR_AGC2_BASE 0xbe00
- +
- +#define AR_PHY_FORCEMAX_GAINS_2 AR_AGC2_BASE + 0x4
- +#define AR_PHY_EXT_ATTEN_CTL_2 AR_AGC2_BASE + 0x18
- +#define AR_PHY_CCA_2 AR_AGC2_BASE + 0x1c
- +#define AR_PHY_CCA_CTRL_2 AR_AGC2_BASE + 0x20
- +#define AR_PHY_RSSI_2 AR_AGC2_BASE + 0x180
- +
- +/*
- + * AGC 2 Field Definitions
- + */
- +#define AR_PHY_CH2_MINCCA_PWR 0x1FF00000
- +#define AR_PHY_CH2_MINCCA_PWR_S 20
- +
- +/*
- + * SM 2 Register Map
- + */
- +#define AR_SM2_BASE 0xc200
- +
- +#define AR_PHY_SWITCH_CHAIN_2 AR_SM2_BASE + 0x84
- +#define AR_PHY_FCAL_2_2 AR_SM2_BASE + 0xd0
- +#define AR_PHY_DFT_TONE_CTL_2 AR_SM2_BASE + 0xd4
- +#define AR_PHY_CL_TAB_2 AR_SM2_BASE + 0x100
- +#define AR_PHY_CHAN_INFO_GAIN_2 AR_SM2_BASE + 0x180
- +#define AR_PHY_TPC_4_B2 AR_SM2_BASE + 0x204
- +#define AR_PHY_TPC_5_B2 AR_SM2_BASE + 0x208
- +#define AR_PHY_TPC_6_B2 AR_SM2_BASE + 0x20c
- +#define AR_PHY_TPC_11_B2 AR_SM2_BASE + 0x220
- +#define AR_PHY_PDADC_TAB_2 AR_SM2_BASE + 0x240
- +#define AR_PHY_TX_IQCAL_STATUS_B2 AR_SM2_BASE + 0x48c
- +#define AR_PHY_TX_IQCAL_CORR_COEFF_01_B2 AR_SM2_BASE + 0x450
- +
- +#define AR_PHY_TX_IQCAL_STATUS_B2_FAILED 0x00000001
- +
- +/*
- + * AGC 3 Register Map
- + */
- +#define AR_AGC3_BASE 0xce00
- +
- +#define AR_PHY_RSSI_3 AR_AGC3_BASE + 0x180
- +
- +/*
- + * Misc helper defines
- + */
- +#define AR_PHY_CHAIN_OFFSET (AR_CHAN1_BASE - AR_CHAN_BASE)
- +
- +#define AR_PHY_NEW_ADC_DC_GAIN_CORR(_i) (AR_PHY_ADC_GAIN_DC_CORR_0 + (AR_PHY_CHAIN_OFFSET * (_i)))
- +#define AR_PHY_NEW_ADC_DC_GAIN_CORR_9300_10(_i) (AR_PHY_ADC_GAIN_DC_CORR_0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i)))
- +#define AR_PHY_SWITCH_CHAIN(_i) (AR_PHY_SWITCH_CHAIN_0 + (AR_PHY_CHAIN_OFFSET * (_i)))
- +#define AR_PHY_EXT_ATTEN_CTL(_i) (AR_PHY_EXT_ATTEN_CTL_0 + (AR_PHY_CHAIN_OFFSET * (_i)))
- +
- +#define AR_PHY_RXGAIN(_i) (AR_PHY_FORCEMAX_GAINS_0 + (AR_PHY_CHAIN_OFFSET * (_i)))
- +#define AR_PHY_TPCRG5(_i) (AR_PHY_TPC_5_B0 + (AR_PHY_CHAIN_OFFSET * (_i)))
- +#define AR_PHY_PDADC_TAB(_i) (AR_PHY_PDADC_TAB_0 + (AR_PHY_CHAIN_OFFSET * (_i)))
- +
- +#define AR_PHY_CAL_MEAS_0(_i) (AR_PHY_IQ_ADC_MEAS_0_B0 + (AR_PHY_CHAIN_OFFSET * (_i)))
- +#define AR_PHY_CAL_MEAS_1(_i) (AR_PHY_IQ_ADC_MEAS_1_B0 + (AR_PHY_CHAIN_OFFSET * (_i)))
- +#define AR_PHY_CAL_MEAS_2(_i) (AR_PHY_IQ_ADC_MEAS_2_B0 + (AR_PHY_CHAIN_OFFSET * (_i)))
- +#define AR_PHY_CAL_MEAS_3(_i) (AR_PHY_IQ_ADC_MEAS_3_B0 + (AR_PHY_CHAIN_OFFSET * (_i)))
- +#define AR_PHY_CAL_MEAS_0_9300_10(_i) (AR_PHY_IQ_ADC_MEAS_0_B0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i)))
- +#define AR_PHY_CAL_MEAS_1_9300_10(_i) (AR_PHY_IQ_ADC_MEAS_1_B0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i)))
- +#define AR_PHY_CAL_MEAS_2_9300_10(_i) (AR_PHY_IQ_ADC_MEAS_2_B0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i)))
- +#define AR_PHY_CAL_MEAS_3_9300_10(_i) (AR_PHY_IQ_ADC_MEAS_3_B0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i)))
- +
- +#define AR_PHY_BB_PANIC_NON_IDLE_ENABLE 0x00000001
- +#define AR_PHY_BB_PANIC_IDLE_ENABLE 0x00000002
- +#define AR_PHY_BB_PANIC_IDLE_MASK 0xFFFF0000
- +#define AR_PHY_BB_PANIC_NON_IDLE_MASK 0x0000FFFC
- +
- +#define AR_PHY_BB_PANIC_RST_ENABLE 0x00000002
- +#define AR_PHY_BB_PANIC_IRQ_ENABLE 0x00000004
- +#define AR_PHY_BB_PANIC_CNTL2_MASK 0xFFFFFFF9
- +
- +#define AR_PHY_BB_WD_STATUS 0x00000007
- +#define AR_PHY_BB_WD_STATUS_S 0
- +#define AR_PHY_BB_WD_DET_HANG 0x00000008
- +#define AR_PHY_BB_WD_DET_HANG_S 3
- +#define AR_PHY_BB_WD_RADAR_SM 0x000000F0
- +#define AR_PHY_BB_WD_RADAR_SM_S 4
- +#define AR_PHY_BB_WD_RX_OFDM_SM 0x00000F00
- +#define AR_PHY_BB_WD_RX_OFDM_SM_S 8
- +#define AR_PHY_BB_WD_RX_CCK_SM 0x0000F000
- +#define AR_PHY_BB_WD_RX_CCK_SM_S 12
- +#define AR_PHY_BB_WD_TX_OFDM_SM 0x000F0000
- +#define AR_PHY_BB_WD_TX_OFDM_SM_S 16
- +#define AR_PHY_BB_WD_TX_CCK_SM 0x00F00000
- +#define AR_PHY_BB_WD_TX_CCK_SM_S 20
- +#define AR_PHY_BB_WD_AGC_SM 0x0F000000
- +#define AR_PHY_BB_WD_AGC_SM_S 24
- +#define AR_PHY_BB_WD_SRCH_SM 0xF0000000
- +#define AR_PHY_BB_WD_SRCH_SM_S 28
- +
- +#define AR_PHY_BB_WD_STATUS_CLR 0x00000008
- +
- +void ar9003_hw_set_chain_masks(struct ath_hw *ah, u8 rx, u8 tx);
- +
- +#endif /* AR9003_PHY_H */
- --- a/drivers/net/wireless/ath/ath9k/ath9k.h
- +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
- @@ -114,8 +114,10 @@ enum buffer_type {
- #define bf_isretried(bf) (bf->bf_state.bf_type & BUF_RETRY)
- #define bf_isxretried(bf) (bf->bf_state.bf_type & BUF_XRETRY)
-
- +#define ATH_TXSTATUS_RING_SIZE 64
- +
- struct ath_descdma {
- - struct ath_desc *dd_desc;
- + void *dd_desc;
- dma_addr_t dd_desc_paddr;
- u32 dd_desc_len;
- struct ath_buf *dd_bufptr;
- @@ -123,7 +125,7 @@ struct ath_descdma {
-
- int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
- struct list_head *head, const char *name,
- - int nbuf, int ndesc);
- + int nbuf, int ndesc, bool is_tx);
- void ath_descdma_cleanup(struct ath_softc *sc, struct ath_descdma *dd,
- struct list_head *head);
-
- @@ -188,6 +190,7 @@ enum ATH_AGGR_STATUS {
- ATH_AGGR_LIMITED,
- };
-
- +#define ATH_TXFIFO_DEPTH 8
- struct ath_txq {
- u32 axq_qnum;
- u32 *axq_link;
- @@ -197,6 +200,10 @@ struct ath_txq {
- bool stopped;
- bool axq_tx_inprogress;
- struct list_head axq_acq;
- + struct list_head txq_fifo[ATH_TXFIFO_DEPTH];
- + struct list_head txq_fifo_pending;
- + u8 txq_headidx;
- + u8 txq_tailidx;
- };
-
- #define AGGR_CLEANUP BIT(1)
- @@ -223,6 +230,12 @@ struct ath_tx {
- struct ath_descdma txdma;
- };
-
- +struct ath_rx_edma {
- + struct sk_buff_head rx_fifo;
- + struct sk_buff_head rx_buffers;
- + u32 rx_fifo_hwsize;
- +};
- +
- struct ath_rx {
- u8 defant;
- u8 rxotherant;
- @@ -232,6 +245,8 @@ struct ath_rx {
- spinlock_t rxbuflock;
- struct list_head rxbuf;
- struct ath_descdma rxdma;
- + struct ath_buf *rx_bufptr;
- + struct ath_rx_edma rx_edma[ATH9K_RX_QUEUE_MAX];
- };
-
- int ath_startrecv(struct ath_softc *sc);
- @@ -240,7 +255,7 @@ void ath_flushrecv(struct ath_softc *sc)
- u32 ath_calcrxfilter(struct ath_softc *sc);
- int ath_rx_init(struct ath_softc *sc, int nbufs);
- void ath_rx_cleanup(struct ath_softc *sc);
- -int ath_rx_tasklet(struct ath_softc *sc, int flush);
- +int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp);
- struct ath_txq *ath_txq_setup(struct ath_softc *sc, int qtype, int subtype);
- void ath_tx_cleanupq(struct ath_softc *sc, struct ath_txq *txq);
- int ath_tx_setup(struct ath_softc *sc, int haltype);
- @@ -258,6 +273,7 @@ int ath_txq_update(struct ath_softc *sc,
- int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb,
- struct ath_tx_control *txctl);
- void ath_tx_tasklet(struct ath_softc *sc);
- +void ath_tx_edma_tasklet(struct ath_softc *sc);
- void ath_tx_cabq(struct ieee80211_hw *hw, struct sk_buff *skb);
- bool ath_tx_aggr_check(struct ath_softc *sc, struct ath_node *an, u8 tidno);
- void ath_tx_aggr_start(struct ath_softc *sc, struct ieee80211_sta *sta,
- @@ -507,6 +523,8 @@ struct ath_softc {
- struct ath_beacon_config cur_beacon_conf;
- struct delayed_work tx_complete_work;
- struct ath_btcoex btcoex;
- +
- + struct ath_descdma txsdma;
- };
-
- struct ath_wiphy {
- --- a/drivers/net/wireless/ath/ath9k/beacon.c
- +++ b/drivers/net/wireless/ath/ath9k/beacon.c
- @@ -93,8 +93,6 @@ static void ath_beacon_setup(struct ath_
- antenna = ((sc->beacon.ast_be_xmit / sc->nbcnvifs) & 1 ? 2 : 1);
- }
-
- - ds->ds_data = bf->bf_buf_addr;
- -
- sband = &sc->sbands[common->hw->conf.channel->band];
- rate = sband->bitrates[rateidx].hw_value;
- if (sc->sc_flags & SC_OP_PREAMBLE_SHORT)
- @@ -109,7 +107,8 @@ static void ath_beacon_setup(struct ath_
-
- /* NB: beacon's BufLen must be a multiple of 4 bytes */
- ath9k_hw_filltxdesc(ah, ds, roundup(skb->len, 4),
- - true, true, ds);
- + true, true, ds, bf->bf_buf_addr,
- + sc->beacon.beaconq);
-
- memset(series, 0, sizeof(struct ath9k_11n_rate_series) * 4);
- series[0].Tries = 1;
- --- a/drivers/net/wireless/ath/ath9k/calib.c
- +++ b/drivers/net/wireless/ath/ath9k/calib.c
- @@ -15,10 +15,12 @@
- */
-
- #include "hw.h"
- +#include "hw-ops.h"
- +
- +/* Common calibration code */
-
- /* We can tune this as we go by monitoring really low values */
- #define ATH9K_NF_TOO_LOW -60
- -#define AR9285_CLCAL_REDO_THRESH 1
-
- /* AR5416 may return very high value (like -31 dBm), in those cases the nf
- * is incorrect and we should use the static NF value. Later we can try to
- @@ -87,98 +89,9 @@ static void ath9k_hw_update_nfcal_hist_b
- return;
- }
-
- -static void ath9k_hw_do_getnf(struct ath_hw *ah,
- - int16_t nfarray[NUM_NF_READINGS])
- -{
- - struct ath_common *common = ath9k_hw_common(ah);
- - int16_t nf;
- -
- - if (AR_SREV_9280_10_OR_LATER(ah))
- - nf = MS(REG_READ(ah, AR_PHY_CCA), AR9280_PHY_MINCCA_PWR);
- - else
- - nf = MS(REG_READ(ah, AR_PHY_CCA), AR_PHY_MINCCA_PWR);
- -
- - if (nf & 0x100)
- - nf = 0 - ((nf ^ 0x1ff) + 1);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "NF calibrated [ctl] [chain 0] is %d\n", nf);
- -
- - if (AR_SREV_9271(ah) && (nf >= -114))
- - nf = -116;
- -
- - nfarray[0] = nf;
- -
- - if (!AR_SREV_9285(ah) && !AR_SREV_9271(ah)) {
- - if (AR_SREV_9280_10_OR_LATER(ah))
- - nf = MS(REG_READ(ah, AR_PHY_CH1_CCA),
- - AR9280_PHY_CH1_MINCCA_PWR);
- - else
- - nf = MS(REG_READ(ah, AR_PHY_CH1_CCA),
- - AR_PHY_CH1_MINCCA_PWR);
- -
- - if (nf & 0x100)
- - nf = 0 - ((nf ^ 0x1ff) + 1);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "NF calibrated [ctl] [chain 1] is %d\n", nf);
- - nfarray[1] = nf;
- -
- - if (!AR_SREV_9280(ah) && !AR_SREV_9287(ah)) {
- - nf = MS(REG_READ(ah, AR_PHY_CH2_CCA),
- - AR_PHY_CH2_MINCCA_PWR);
- - if (nf & 0x100)
- - nf = 0 - ((nf ^ 0x1ff) + 1);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "NF calibrated [ctl] [chain 2] is %d\n", nf);
- - nfarray[2] = nf;
- - }
- - }
- -
- - if (AR_SREV_9280_10_OR_LATER(ah))
- - nf = MS(REG_READ(ah, AR_PHY_EXT_CCA),
- - AR9280_PHY_EXT_MINCCA_PWR);
- - else
- - nf = MS(REG_READ(ah, AR_PHY_EXT_CCA),
- - AR_PHY_EXT_MINCCA_PWR);
- -
- - if (nf & 0x100)
- - nf = 0 - ((nf ^ 0x1ff) + 1);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "NF calibrated [ext] [chain 0] is %d\n", nf);
- -
- - if (AR_SREV_9271(ah) && (nf >= -114))
- - nf = -116;
- -
- - nfarray[3] = nf;
- -
- - if (!AR_SREV_9285(ah) && !AR_SREV_9271(ah)) {
- - if (AR_SREV_9280_10_OR_LATER(ah))
- - nf = MS(REG_READ(ah, AR_PHY_CH1_EXT_CCA),
- - AR9280_PHY_CH1_EXT_MINCCA_PWR);
- - else
- - nf = MS(REG_READ(ah, AR_PHY_CH1_EXT_CCA),
- - AR_PHY_CH1_EXT_MINCCA_PWR);
- -
- - if (nf & 0x100)
- - nf = 0 - ((nf ^ 0x1ff) + 1);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "NF calibrated [ext] [chain 1] is %d\n", nf);
- - nfarray[4] = nf;
- -
- - if (!AR_SREV_9280(ah) && !AR_SREV_9287(ah)) {
- - nf = MS(REG_READ(ah, AR_PHY_CH2_EXT_CCA),
- - AR_PHY_CH2_EXT_MINCCA_PWR);
- - if (nf & 0x100)
- - nf = 0 - ((nf ^ 0x1ff) + 1);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "NF calibrated [ext] [chain 2] is %d\n", nf);
- - nfarray[5] = nf;
- - }
- - }
- -}
- -
- -static bool getNoiseFloorThresh(struct ath_hw *ah,
- - enum ieee80211_band band,
- - int16_t *nft)
- +static bool ath9k_hw_get_nf_thresh(struct ath_hw *ah,
- + enum ieee80211_band band,
- + int16_t *nft)
- {
- switch (band) {
- case IEEE80211_BAND_5GHZ:
- @@ -195,44 +108,8 @@ static bool getNoiseFloorThresh(struct a
- return true;
- }
-
- -static void ath9k_hw_setup_calibration(struct ath_hw *ah,
- - struct ath9k_cal_list *currCal)
- -{
- - struct ath_common *common = ath9k_hw_common(ah);
- -
- - REG_RMW_FIELD(ah, AR_PHY_TIMING_CTRL4(0),
- - AR_PHY_TIMING_CTRL4_IQCAL_LOG_COUNT_MAX,
- - currCal->calData->calCountMax);
- -
- - switch (currCal->calData->calType) {
- - case IQ_MISMATCH_CAL:
- - REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_IQ);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "starting IQ Mismatch Calibration\n");
- - break;
- - case ADC_GAIN_CAL:
- - REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_ADC_GAIN);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "starting ADC Gain Calibration\n");
- - break;
- - case ADC_DC_CAL:
- - REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_ADC_DC_PER);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "starting ADC DC Calibration\n");
- - break;
- - case ADC_DC_INIT_CAL:
- - REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_ADC_DC_INIT);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "starting Init ADC DC Calibration\n");
- - break;
- - }
- -
- - REG_SET_BIT(ah, AR_PHY_TIMING_CTRL4(0),
- - AR_PHY_TIMING_CTRL4_DO_CAL);
- -}
- -
- -static void ath9k_hw_reset_calibration(struct ath_hw *ah,
- - struct ath9k_cal_list *currCal)
- +void ath9k_hw_reset_calibration(struct ath_hw *ah,
- + struct ath9k_cal_list *currCal)
- {
- int i;
-
- @@ -250,324 +127,6 @@ static void ath9k_hw_reset_calibration(s
- ah->cal_samples = 0;
- }
-
- -static bool ath9k_hw_per_calibration(struct ath_hw *ah,
- - struct ath9k_channel *ichan,
- - u8 rxchainmask,
- - struct ath9k_cal_list *currCal)
- -{
- - bool iscaldone = false;
- -
- - if (currCal->calState == CAL_RUNNING) {
- - if (!(REG_READ(ah, AR_PHY_TIMING_CTRL4(0)) &
- - AR_PHY_TIMING_CTRL4_DO_CAL)) {
- -
- - currCal->calData->calCollect(ah);
- - ah->cal_samples++;
- -
- - if (ah->cal_samples >= currCal->calData->calNumSamples) {
- - int i, numChains = 0;
- - for (i = 0; i < AR5416_MAX_CHAINS; i++) {
- - if (rxchainmask & (1 << i))
- - numChains++;
- - }
- -
- - currCal->calData->calPostProc(ah, numChains);
- - ichan->CalValid |= currCal->calData->calType;
- - currCal->calState = CAL_DONE;
- - iscaldone = true;
- - } else {
- - ath9k_hw_setup_calibration(ah, currCal);
- - }
- - }
- - } else if (!(ichan->CalValid & currCal->calData->calType)) {
- - ath9k_hw_reset_calibration(ah, currCal);
- - }
- -
- - return iscaldone;
- -}
- -
- -/* Assumes you are talking about the currently configured channel */
- -static bool ath9k_hw_iscal_supported(struct ath_hw *ah,
- - enum ath9k_cal_types calType)
- -{
- - struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
- -
- - switch (calType & ah->supp_cals) {
- - case IQ_MISMATCH_CAL: /* Both 2 GHz and 5 GHz support OFDM */
- - return true;
- - case ADC_GAIN_CAL:
- - case ADC_DC_CAL:
- - if (!(conf->channel->band == IEEE80211_BAND_2GHZ &&
- - conf_is_ht20(conf)))
- - return true;
- - break;
- - }
- - return false;
- -}
- -
- -static void ath9k_hw_iqcal_collect(struct ath_hw *ah)
- -{
- - int i;
- -
- - for (i = 0; i < AR5416_MAX_CHAINS; i++) {
- - ah->totalPowerMeasI[i] +=
- - REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
- - ah->totalPowerMeasQ[i] +=
- - REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
- - ah->totalIqCorrMeas[i] +=
- - (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
- - ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
- - "%d: Chn %d pmi=0x%08x;pmq=0x%08x;iqcm=0x%08x;\n",
- - ah->cal_samples, i, ah->totalPowerMeasI[i],
- - ah->totalPowerMeasQ[i],
- - ah->totalIqCorrMeas[i]);
- - }
- -}
- -
- -static void ath9k_hw_adc_gaincal_collect(struct ath_hw *ah)
- -{
- - int i;
- -
- - for (i = 0; i < AR5416_MAX_CHAINS; i++) {
- - ah->totalAdcIOddPhase[i] +=
- - REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
- - ah->totalAdcIEvenPhase[i] +=
- - REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
- - ah->totalAdcQOddPhase[i] +=
- - REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
- - ah->totalAdcQEvenPhase[i] +=
- - REG_READ(ah, AR_PHY_CAL_MEAS_3(i));
- -
- - ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
- - "%d: Chn %d oddi=0x%08x; eveni=0x%08x; "
- - "oddq=0x%08x; evenq=0x%08x;\n",
- - ah->cal_samples, i,
- - ah->totalAdcIOddPhase[i],
- - ah->totalAdcIEvenPhase[i],
- - ah->totalAdcQOddPhase[i],
- - ah->totalAdcQEvenPhase[i]);
- - }
- -}
- -
- -static void ath9k_hw_adc_dccal_collect(struct ath_hw *ah)
- -{
- - int i;
- -
- - for (i = 0; i < AR5416_MAX_CHAINS; i++) {
- - ah->totalAdcDcOffsetIOddPhase[i] +=
- - (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
- - ah->totalAdcDcOffsetIEvenPhase[i] +=
- - (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
- - ah->totalAdcDcOffsetQOddPhase[i] +=
- - (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
- - ah->totalAdcDcOffsetQEvenPhase[i] +=
- - (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_3(i));
- -
- - ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
- - "%d: Chn %d oddi=0x%08x; eveni=0x%08x; "
- - "oddq=0x%08x; evenq=0x%08x;\n",
- - ah->cal_samples, i,
- - ah->totalAdcDcOffsetIOddPhase[i],
- - ah->totalAdcDcOffsetIEvenPhase[i],
- - ah->totalAdcDcOffsetQOddPhase[i],
- - ah->totalAdcDcOffsetQEvenPhase[i]);
- - }
- -}
- -
- -static void ath9k_hw_iqcalibrate(struct ath_hw *ah, u8 numChains)
- -{
- - struct ath_common *common = ath9k_hw_common(ah);
- - u32 powerMeasQ, powerMeasI, iqCorrMeas;
- - u32 qCoffDenom, iCoffDenom;
- - int32_t qCoff, iCoff;
- - int iqCorrNeg, i;
- -
- - for (i = 0; i < numChains; i++) {
- - powerMeasI = ah->totalPowerMeasI[i];
- - powerMeasQ = ah->totalPowerMeasQ[i];
- - iqCorrMeas = ah->totalIqCorrMeas[i];
- -
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Starting IQ Cal and Correction for Chain %d\n",
- - i);
- -
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Orignal: Chn %diq_corr_meas = 0x%08x\n",
- - i, ah->totalIqCorrMeas[i]);
- -
- - iqCorrNeg = 0;
- -
- - if (iqCorrMeas > 0x80000000) {
- - iqCorrMeas = (0xffffffff - iqCorrMeas) + 1;
- - iqCorrNeg = 1;
- - }
- -
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d pwr_meas_i = 0x%08x\n", i, powerMeasI);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d pwr_meas_q = 0x%08x\n", i, powerMeasQ);
- - ath_print(common, ATH_DBG_CALIBRATE, "iqCorrNeg is 0x%08x\n",
- - iqCorrNeg);
- -
- - iCoffDenom = (powerMeasI / 2 + powerMeasQ / 2) / 128;
- - qCoffDenom = powerMeasQ / 64;
- -
- - if ((powerMeasQ != 0) && (iCoffDenom != 0) &&
- - (qCoffDenom != 0)) {
- - iCoff = iqCorrMeas / iCoffDenom;
- - qCoff = powerMeasI / qCoffDenom - 64;
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d iCoff = 0x%08x\n", i, iCoff);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d qCoff = 0x%08x\n", i, qCoff);
- -
- - iCoff = iCoff & 0x3f;
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "New: Chn %d iCoff = 0x%08x\n", i, iCoff);
- - if (iqCorrNeg == 0x0)
- - iCoff = 0x40 - iCoff;
- -
- - if (qCoff > 15)
- - qCoff = 15;
- - else if (qCoff <= -16)
- - qCoff = 16;
- -
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d : iCoff = 0x%x qCoff = 0x%x\n",
- - i, iCoff, qCoff);
- -
- - REG_RMW_FIELD(ah, AR_PHY_TIMING_CTRL4(i),
- - AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF,
- - iCoff);
- - REG_RMW_FIELD(ah, AR_PHY_TIMING_CTRL4(i),
- - AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF,
- - qCoff);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "IQ Cal and Correction done for Chain %d\n",
- - i);
- - }
- - }
- -
- - REG_SET_BIT(ah, AR_PHY_TIMING_CTRL4(0),
- - AR_PHY_TIMING_CTRL4_IQCORR_ENABLE);
- -}
- -
- -static void ath9k_hw_adc_gaincal_calibrate(struct ath_hw *ah, u8 numChains)
- -{
- - struct ath_common *common = ath9k_hw_common(ah);
- - u32 iOddMeasOffset, iEvenMeasOffset, qOddMeasOffset, qEvenMeasOffset;
- - u32 qGainMismatch, iGainMismatch, val, i;
- -
- - for (i = 0; i < numChains; i++) {
- - iOddMeasOffset = ah->totalAdcIOddPhase[i];
- - iEvenMeasOffset = ah->totalAdcIEvenPhase[i];
- - qOddMeasOffset = ah->totalAdcQOddPhase[i];
- - qEvenMeasOffset = ah->totalAdcQEvenPhase[i];
- -
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Starting ADC Gain Cal for Chain %d\n", i);
- -
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d pwr_meas_odd_i = 0x%08x\n", i,
- - iOddMeasOffset);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d pwr_meas_even_i = 0x%08x\n", i,
- - iEvenMeasOffset);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d pwr_meas_odd_q = 0x%08x\n", i,
- - qOddMeasOffset);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d pwr_meas_even_q = 0x%08x\n", i,
- - qEvenMeasOffset);
- -
- - if (iOddMeasOffset != 0 && qEvenMeasOffset != 0) {
- - iGainMismatch =
- - ((iEvenMeasOffset * 32) /
- - iOddMeasOffset) & 0x3f;
- - qGainMismatch =
- - ((qOddMeasOffset * 32) /
- - qEvenMeasOffset) & 0x3f;
- -
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d gain_mismatch_i = 0x%08x\n", i,
- - iGainMismatch);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d gain_mismatch_q = 0x%08x\n", i,
- - qGainMismatch);
- -
- - val = REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i));
- - val &= 0xfffff000;
- - val |= (qGainMismatch) | (iGainMismatch << 6);
- - REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i), val);
- -
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "ADC Gain Cal done for Chain %d\n", i);
- - }
- - }
- -
- - REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0),
- - REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0)) |
- - AR_PHY_NEW_ADC_GAIN_CORR_ENABLE);
- -}
- -
- -static void ath9k_hw_adc_dccal_calibrate(struct ath_hw *ah, u8 numChains)
- -{
- - struct ath_common *common = ath9k_hw_common(ah);
- - u32 iOddMeasOffset, iEvenMeasOffset, val, i;
- - int32_t qOddMeasOffset, qEvenMeasOffset, qDcMismatch, iDcMismatch;
- - const struct ath9k_percal_data *calData =
- - ah->cal_list_curr->calData;
- - u32 numSamples =
- - (1 << (calData->calCountMax + 5)) * calData->calNumSamples;
- -
- - for (i = 0; i < numChains; i++) {
- - iOddMeasOffset = ah->totalAdcDcOffsetIOddPhase[i];
- - iEvenMeasOffset = ah->totalAdcDcOffsetIEvenPhase[i];
- - qOddMeasOffset = ah->totalAdcDcOffsetQOddPhase[i];
- - qEvenMeasOffset = ah->totalAdcDcOffsetQEvenPhase[i];
- -
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Starting ADC DC Offset Cal for Chain %d\n", i);
- -
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d pwr_meas_odd_i = %d\n", i,
- - iOddMeasOffset);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d pwr_meas_even_i = %d\n", i,
- - iEvenMeasOffset);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d pwr_meas_odd_q = %d\n", i,
- - qOddMeasOffset);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d pwr_meas_even_q = %d\n", i,
- - qEvenMeasOffset);
- -
- - iDcMismatch = (((iEvenMeasOffset - iOddMeasOffset) * 2) /
- - numSamples) & 0x1ff;
- - qDcMismatch = (((qOddMeasOffset - qEvenMeasOffset) * 2) /
- - numSamples) & 0x1ff;
- -
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d dc_offset_mismatch_i = 0x%08x\n", i,
- - iDcMismatch);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "Chn %d dc_offset_mismatch_q = 0x%08x\n", i,
- - qDcMismatch);
- -
- - val = REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i));
- - val &= 0xc0000fff;
- - val |= (qDcMismatch << 12) | (iDcMismatch << 21);
- - REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i), val);
- -
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "ADC DC Offset Cal done for Chain %d\n", i);
- - }
- -
- - REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0),
- - REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0)) |
- - AR_PHY_NEW_ADC_DC_OFFSET_CORR_ENABLE);
- -}
- -
- /* This is done for the currently configured channel */
- bool ath9k_hw_reset_calvalid(struct ath_hw *ah)
- {
- @@ -614,72 +173,6 @@ void ath9k_hw_start_nfcal(struct ath_hw
- REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_NF);
- }
-
- -void ath9k_hw_loadnf(struct ath_hw *ah, struct ath9k_channel *chan)
- -{
- - struct ath9k_nfcal_hist *h;
- - int i, j;
- - int32_t val;
- - const u32 ar5416_cca_regs[6] = {
- - AR_PHY_CCA,
- - AR_PHY_CH1_CCA,
- - AR_PHY_CH2_CCA,
- - AR_PHY_EXT_CCA,
- - AR_PHY_CH1_EXT_CCA,
- - AR_PHY_CH2_EXT_CCA
- - };
- - u8 chainmask, rx_chain_status;
- -
- - rx_chain_status = REG_READ(ah, AR_PHY_RX_CHAINMASK);
- - if (AR_SREV_9285(ah) || AR_SREV_9271(ah))
- - chainmask = 0x9;
- - else if (AR_SREV_9280(ah) || AR_SREV_9287(ah)) {
- - if ((rx_chain_status & 0x2) || (rx_chain_status & 0x4))
- - chainmask = 0x1B;
- - else
- - chainmask = 0x09;
- - } else {
- - if (rx_chain_status & 0x4)
- - chainmask = 0x3F;
- - else if (rx_chain_status & 0x2)
- - chainmask = 0x1B;
- - else
- - chainmask = 0x09;
- - }
- -
- - h = ah->nfCalHist;
- -
- - for (i = 0; i < NUM_NF_READINGS; i++) {
- - if (chainmask & (1 << i)) {
- - val = REG_READ(ah, ar5416_cca_regs[i]);
- - val &= 0xFFFFFE00;
- - val |= (((u32) (h[i].privNF) << 1) & 0x1ff);
- - REG_WRITE(ah, ar5416_cca_regs[i], val);
- - }
- - }
- -
- - REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
- - AR_PHY_AGC_CONTROL_ENABLE_NF);
- - REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
- - AR_PHY_AGC_CONTROL_NO_UPDATE_NF);
- - REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_NF);
- -
- - for (j = 0; j < 5; j++) {
- - if ((REG_READ(ah, AR_PHY_AGC_CONTROL) &
- - AR_PHY_AGC_CONTROL_NF) == 0)
- - break;
- - udelay(50);
- - }
- -
- - for (i = 0; i < NUM_NF_READINGS; i++) {
- - if (chainmask & (1 << i)) {
- - val = REG_READ(ah, ar5416_cca_regs[i]);
- - val &= 0xFFFFFE00;
- - val |= (((u32) (-50) << 1) & 0x1ff);
- - REG_WRITE(ah, ar5416_cca_regs[i], val);
- - }
- - }
- -}
- -
- int16_t ath9k_hw_getnf(struct ath_hw *ah,
- struct ath9k_channel *chan)
- {
- @@ -699,7 +192,7 @@ int16_t ath9k_hw_getnf(struct ath_hw *ah
- } else {
- ath9k_hw_do_getnf(ah, nfarray);
- nf = nfarray[0];
- - if (getNoiseFloorThresh(ah, c->band, &nfThresh)
- + if (ath9k_hw_get_nf_thresh(ah, c->band, &nfThresh)
- && nf > nfThresh) {
- ath_print(common, ATH_DBG_CALIBRATE,
- "noise floor failed detected; "
- @@ -757,567 +250,3 @@ s16 ath9k_hw_getchan_noise(struct ath_hw
- return nf;
- }
- EXPORT_SYMBOL(ath9k_hw_getchan_noise);
- -
- -static void ath9k_olc_temp_compensation_9287(struct ath_hw *ah)
- -{
- - u32 rddata;
- - int32_t delta, currPDADC, slope;
- -
- - rddata = REG_READ(ah, AR_PHY_TX_PWRCTRL4);
- - currPDADC = MS(rddata, AR_PHY_TX_PWRCTRL_PD_AVG_OUT);
- -
- - if (ah->initPDADC == 0 || currPDADC == 0) {
- - /*
- - * Zero value indicates that no frames have been transmitted yet,
- - * can't do temperature compensation until frames are transmitted.
- - */
- - return;
- - } else {
- - slope = ah->eep_ops->get_eeprom(ah, EEP_TEMPSENSE_SLOPE);
- -
- - if (slope == 0) { /* to avoid divide by zero case */
- - delta = 0;
- - } else {
- - delta = ((currPDADC - ah->initPDADC)*4) / slope;
- - }
- - REG_RMW_FIELD(ah, AR_PHY_CH0_TX_PWRCTRL11,
- - AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP, delta);
- - REG_RMW_FIELD(ah, AR_PHY_CH1_TX_PWRCTRL11,
- - AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP, delta);
- - }
- -}
- -
- -static void ath9k_olc_temp_compensation(struct ath_hw *ah)
- -{
- - u32 rddata, i;
- - int delta, currPDADC, regval;
- -
- - if (OLC_FOR_AR9287_10_LATER) {
- - ath9k_olc_temp_compensation_9287(ah);
- - } else {
- - rddata = REG_READ(ah, AR_PHY_TX_PWRCTRL4);
- - currPDADC = MS(rddata, AR_PHY_TX_PWRCTRL_PD_AVG_OUT);
- -
- - if (ah->initPDADC == 0 || currPDADC == 0) {
- - return;
- - } else {
- - if (ah->eep_ops->get_eeprom(ah, EEP_DAC_HPWR_5G))
- - delta = (currPDADC - ah->initPDADC + 4) / 8;
- - else
- - delta = (currPDADC - ah->initPDADC + 5) / 10;
- -
- - if (delta != ah->PDADCdelta) {
- - ah->PDADCdelta = delta;
- - for (i = 1; i < AR9280_TX_GAIN_TABLE_SIZE; i++) {
- - regval = ah->originalGain[i] - delta;
- - if (regval < 0)
- - regval = 0;
- -
- - REG_RMW_FIELD(ah,
- - AR_PHY_TX_GAIN_TBL1 + i * 4,
- - AR_PHY_TX_GAIN, regval);
- - }
- - }
- - }
- - }
- -}
- -
- -static void ath9k_hw_9271_pa_cal(struct ath_hw *ah, bool is_reset)
- -{
- - u32 regVal;
- - unsigned int i;
- - u32 regList [][2] = {
- - { 0x786c, 0 },
- - { 0x7854, 0 },
- - { 0x7820, 0 },
- - { 0x7824, 0 },
- - { 0x7868, 0 },
- - { 0x783c, 0 },
- - { 0x7838, 0 } ,
- - { 0x7828, 0 } ,
- - };
- -
- - for (i = 0; i < ARRAY_SIZE(regList); i++)
- - regList[i][1] = REG_READ(ah, regList[i][0]);
- -
- - regVal = REG_READ(ah, 0x7834);
- - regVal &= (~(0x1));
- - REG_WRITE(ah, 0x7834, regVal);
- - regVal = REG_READ(ah, 0x9808);
- - regVal |= (0x1 << 27);
- - REG_WRITE(ah, 0x9808, regVal);
- -
- - /* 786c,b23,1, pwddac=1 */
- - REG_RMW_FIELD(ah, AR9285_AN_TOP3, AR9285_AN_TOP3_PWDDAC, 1);
- - /* 7854, b5,1, pdrxtxbb=1 */
- - REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDRXTXBB1, 1);
- - /* 7854, b7,1, pdv2i=1 */
- - REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDV2I, 1);
- - /* 7854, b8,1, pddacinterface=1 */
- - REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDDACIF, 1);
- - /* 7824,b12,0, offcal=0 */
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G2, AR9285_AN_RF2G2_OFFCAL, 0);
- - /* 7838, b1,0, pwddb=0 */
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G7, AR9285_AN_RF2G7_PWDDB, 0);
- - /* 7820,b11,0, enpacal=0 */
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_ENPACAL, 0);
- - /* 7820,b25,1, pdpadrv1=0 */
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPADRV1, 0);
- - /* 7820,b24,0, pdpadrv2=0 */
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G1,AR9285_AN_RF2G1_PDPADRV2,0);
- - /* 7820,b23,0, pdpaout=0 */
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPAOUT, 0);
- - /* 783c,b14-16,7, padrvgn2tab_0=7 */
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G8,AR9285_AN_RF2G8_PADRVGN2TAB0, 7);
- - /*
- - * 7838,b29-31,0, padrvgn1tab_0=0
- - * does not matter since we turn it off
- - */
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G7,AR9285_AN_RF2G7_PADRVGN2TAB0, 0);
- -
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9271_AN_RF2G3_CCOMP, 0xfff);
- -
- - /* Set:
- - * localmode=1,bmode=1,bmoderxtx=1,synthon=1,
- - * txon=1,paon=1,oscon=1,synthon_force=1
- - */
- - REG_WRITE(ah, AR9285_AN_TOP2, 0xca0358a0);
- - udelay(30);
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9271_AN_RF2G6_OFFS, 0);
- -
- - /* find off_6_1; */
- - for (i = 6; i > 0; i--) {
- - regVal = REG_READ(ah, 0x7834);
- - regVal |= (1 << (20 + i));
- - REG_WRITE(ah, 0x7834, regVal);
- - udelay(1);
- - //regVal = REG_READ(ah, 0x7834);
- - regVal &= (~(0x1 << (20 + i)));
- - regVal |= (MS(REG_READ(ah, 0x7840), AR9285_AN_RXTXBB1_SPARE9)
- - << (20 + i));
- - REG_WRITE(ah, 0x7834, regVal);
- - }
- -
- - regVal = (regVal >>20) & 0x7f;
- -
- - /* Update PA cal info */
- - if ((!is_reset) && (ah->pacal_info.prev_offset == regVal)) {
- - if (ah->pacal_info.max_skipcount < MAX_PACAL_SKIPCOUNT)
- - ah->pacal_info.max_skipcount =
- - 2 * ah->pacal_info.max_skipcount;
- - ah->pacal_info.skipcount = ah->pacal_info.max_skipcount;
- - } else {
- - ah->pacal_info.max_skipcount = 1;
- - ah->pacal_info.skipcount = 0;
- - ah->pacal_info.prev_offset = regVal;
- - }
- -
- - regVal = REG_READ(ah, 0x7834);
- - regVal |= 0x1;
- - REG_WRITE(ah, 0x7834, regVal);
- - regVal = REG_READ(ah, 0x9808);
- - regVal &= (~(0x1 << 27));
- - REG_WRITE(ah, 0x9808, regVal);
- -
- - for (i = 0; i < ARRAY_SIZE(regList); i++)
- - REG_WRITE(ah, regList[i][0], regList[i][1]);
- -}
- -
- -static inline void ath9k_hw_9285_pa_cal(struct ath_hw *ah, bool is_reset)
- -{
- - struct ath_common *common = ath9k_hw_common(ah);
- - u32 regVal;
- - int i, offset, offs_6_1, offs_0;
- - u32 ccomp_org, reg_field;
- - u32 regList[][2] = {
- - { 0x786c, 0 },
- - { 0x7854, 0 },
- - { 0x7820, 0 },
- - { 0x7824, 0 },
- - { 0x7868, 0 },
- - { 0x783c, 0 },
- - { 0x7838, 0 },
- - };
- -
- - ath_print(common, ATH_DBG_CALIBRATE, "Running PA Calibration\n");
- -
- - /* PA CAL is not needed for high power solution */
- - if (ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE) ==
- - AR5416_EEP_TXGAIN_HIGH_POWER)
- - return;
- -
- - if (AR_SREV_9285_11(ah)) {
- - REG_WRITE(ah, AR9285_AN_TOP4, (AR9285_AN_TOP4_DEFAULT | 0x14));
- - udelay(10);
- - }
- -
- - for (i = 0; i < ARRAY_SIZE(regList); i++)
- - regList[i][1] = REG_READ(ah, regList[i][0]);
- -
- - regVal = REG_READ(ah, 0x7834);
- - regVal &= (~(0x1));
- - REG_WRITE(ah, 0x7834, regVal);
- - regVal = REG_READ(ah, 0x9808);
- - regVal |= (0x1 << 27);
- - REG_WRITE(ah, 0x9808, regVal);
- -
- - REG_RMW_FIELD(ah, AR9285_AN_TOP3, AR9285_AN_TOP3_PWDDAC, 1);
- - REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDRXTXBB1, 1);
- - REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDV2I, 1);
- - REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDDACIF, 1);
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G2, AR9285_AN_RF2G2_OFFCAL, 0);
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G7, AR9285_AN_RF2G7_PWDDB, 0);
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_ENPACAL, 0);
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPADRV1, 0);
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPADRV2, 0);
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPAOUT, 0);
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G8, AR9285_AN_RF2G8_PADRVGN2TAB0, 7);
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G7, AR9285_AN_RF2G7_PADRVGN2TAB0, 0);
- - ccomp_org = MS(REG_READ(ah, AR9285_AN_RF2G6), AR9285_AN_RF2G6_CCOMP);
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_CCOMP, 0xf);
- -
- - REG_WRITE(ah, AR9285_AN_TOP2, 0xca0358a0);
- - udelay(30);
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_OFFS, 0);
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, 0);
- -
- - for (i = 6; i > 0; i--) {
- - regVal = REG_READ(ah, 0x7834);
- - regVal |= (1 << (19 + i));
- - REG_WRITE(ah, 0x7834, regVal);
- - udelay(1);
- - regVal = REG_READ(ah, 0x7834);
- - regVal &= (~(0x1 << (19 + i)));
- - reg_field = MS(REG_READ(ah, 0x7840), AR9285_AN_RXTXBB1_SPARE9);
- - regVal |= (reg_field << (19 + i));
- - REG_WRITE(ah, 0x7834, regVal);
- - }
- -
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, 1);
- - udelay(1);
- - reg_field = MS(REG_READ(ah, AR9285_AN_RF2G9), AR9285_AN_RXTXBB1_SPARE9);
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, reg_field);
- - offs_6_1 = MS(REG_READ(ah, AR9285_AN_RF2G6), AR9285_AN_RF2G6_OFFS);
- - offs_0 = MS(REG_READ(ah, AR9285_AN_RF2G3), AR9285_AN_RF2G3_PDVCCOMP);
- -
- - offset = (offs_6_1<<1) | offs_0;
- - offset = offset - 0;
- - offs_6_1 = offset>>1;
- - offs_0 = offset & 1;
- -
- - if ((!is_reset) && (ah->pacal_info.prev_offset == offset)) {
- - if (ah->pacal_info.max_skipcount < MAX_PACAL_SKIPCOUNT)
- - ah->pacal_info.max_skipcount =
- - 2 * ah->pacal_info.max_skipcount;
- - ah->pacal_info.skipcount = ah->pacal_info.max_skipcount;
- - } else {
- - ah->pacal_info.max_skipcount = 1;
- - ah->pacal_info.skipcount = 0;
- - ah->pacal_info.prev_offset = offset;
- - }
- -
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_OFFS, offs_6_1);
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, offs_0);
- -
- - regVal = REG_READ(ah, 0x7834);
- - regVal |= 0x1;
- - REG_WRITE(ah, 0x7834, regVal);
- - regVal = REG_READ(ah, 0x9808);
- - regVal &= (~(0x1 << 27));
- - REG_WRITE(ah, 0x9808, regVal);
- -
- - for (i = 0; i < ARRAY_SIZE(regList); i++)
- - REG_WRITE(ah, regList[i][0], regList[i][1]);
- -
- - REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_CCOMP, ccomp_org);
- -
- - if (AR_SREV_9285_11(ah))
- - REG_WRITE(ah, AR9285_AN_TOP4, AR9285_AN_TOP4_DEFAULT);
- -
- -}
- -
- -bool ath9k_hw_calibrate(struct ath_hw *ah, struct ath9k_channel *chan,
- - u8 rxchainmask, bool longcal)
- -{
- - bool iscaldone = true;
- - struct ath9k_cal_list *currCal = ah->cal_list_curr;
- -
- - if (currCal &&
- - (currCal->calState == CAL_RUNNING ||
- - currCal->calState == CAL_WAITING)) {
- - iscaldone = ath9k_hw_per_calibration(ah, chan,
- - rxchainmask, currCal);
- - if (iscaldone) {
- - ah->cal_list_curr = currCal = currCal->calNext;
- -
- - if (currCal->calState == CAL_WAITING) {
- - iscaldone = false;
- - ath9k_hw_reset_calibration(ah, currCal);
- - }
- - }
- - }
- -
- - /* Do NF cal only at longer intervals */
- - if (longcal) {
- - /* Do periodic PAOffset Cal */
- - if (AR_SREV_9271(ah)) {
- - if (!ah->pacal_info.skipcount)
- - ath9k_hw_9271_pa_cal(ah, false);
- - else
- - ah->pacal_info.skipcount--;
- - } else if (AR_SREV_9285_11_OR_LATER(ah)) {
- - if (!ah->pacal_info.skipcount)
- - ath9k_hw_9285_pa_cal(ah, false);
- - else
- - ah->pacal_info.skipcount--;
- - }
- -
- - if (OLC_FOR_AR9280_20_LATER || OLC_FOR_AR9287_10_LATER)
- - ath9k_olc_temp_compensation(ah);
- -
- - /* Get the value from the previous NF cal and update history buffer */
- - ath9k_hw_getnf(ah, chan);
- -
- - /*
- - * Load the NF from history buffer of the current channel.
- - * NF is slow time-variant, so it is OK to use a historical value.
- - */
- - ath9k_hw_loadnf(ah, ah->curchan);
- -
- - ath9k_hw_start_nfcal(ah);
- - }
- -
- - return iscaldone;
- -}
- -EXPORT_SYMBOL(ath9k_hw_calibrate);
- -
- -/* Carrier leakage Calibration fix */
- -static bool ar9285_cl_cal(struct ath_hw *ah, struct ath9k_channel *chan)
- -{
- - struct ath_common *common = ath9k_hw_common(ah);
- -
- - REG_SET_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE);
- - if (IS_CHAN_HT20(chan)) {
- - REG_SET_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_PARALLEL_CAL_ENABLE);
- - REG_SET_BIT(ah, AR_PHY_TURBO, AR_PHY_FC_DYN2040_EN);
- - REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
- - AR_PHY_AGC_CONTROL_FLTR_CAL);
- - REG_CLR_BIT(ah, AR_PHY_TPCRG1, AR_PHY_TPCRG1_PD_CAL_ENABLE);
- - REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL);
- - if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL,
- - AR_PHY_AGC_CONTROL_CAL, 0, AH_WAIT_TIMEOUT)) {
- - ath_print(common, ATH_DBG_CALIBRATE, "offset "
- - "calibration failed to complete in "
- - "1ms; noisy ??\n");
- - return false;
- - }
- - REG_CLR_BIT(ah, AR_PHY_TURBO, AR_PHY_FC_DYN2040_EN);
- - REG_CLR_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_PARALLEL_CAL_ENABLE);
- - REG_CLR_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE);
- - }
- - REG_CLR_BIT(ah, AR_PHY_ADC_CTL, AR_PHY_ADC_CTL_OFF_PWDADC);
- - REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_FLTR_CAL);
- - REG_SET_BIT(ah, AR_PHY_TPCRG1, AR_PHY_TPCRG1_PD_CAL_ENABLE);
- - REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL);
- - if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL,
- - 0, AH_WAIT_TIMEOUT)) {
- - ath_print(common, ATH_DBG_CALIBRATE, "offset calibration "
- - "failed to complete in 1ms; noisy ??\n");
- - return false;
- - }
- -
- - REG_SET_BIT(ah, AR_PHY_ADC_CTL, AR_PHY_ADC_CTL_OFF_PWDADC);
- - REG_CLR_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE);
- - REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_FLTR_CAL);
- -
- - return true;
- -}
- -
- -static bool ar9285_clc(struct ath_hw *ah, struct ath9k_channel *chan)
- -{
- - int i;
- - u_int32_t txgain_max;
- - u_int32_t clc_gain, gain_mask = 0, clc_num = 0;
- - u_int32_t reg_clc_I0, reg_clc_Q0;
- - u_int32_t i0_num = 0;
- - u_int32_t q0_num = 0;
- - u_int32_t total_num = 0;
- - u_int32_t reg_rf2g5_org;
- - bool retv = true;
- -
- - if (!(ar9285_cl_cal(ah, chan)))
- - return false;
- -
- - txgain_max = MS(REG_READ(ah, AR_PHY_TX_PWRCTRL7),
- - AR_PHY_TX_PWRCTRL_TX_GAIN_TAB_MAX);
- -
- - for (i = 0; i < (txgain_max+1); i++) {
- - clc_gain = (REG_READ(ah, (AR_PHY_TX_GAIN_TBL1+(i<<2))) &
- - AR_PHY_TX_GAIN_CLC) >> AR_PHY_TX_GAIN_CLC_S;
- - if (!(gain_mask & (1 << clc_gain))) {
- - gain_mask |= (1 << clc_gain);
- - clc_num++;
- - }
- - }
- -
- - for (i = 0; i < clc_num; i++) {
- - reg_clc_I0 = (REG_READ(ah, (AR_PHY_CLC_TBL1 + (i << 2)))
- - & AR_PHY_CLC_I0) >> AR_PHY_CLC_I0_S;
- - reg_clc_Q0 = (REG_READ(ah, (AR_PHY_CLC_TBL1 + (i << 2)))
- - & AR_PHY_CLC_Q0) >> AR_PHY_CLC_Q0_S;
- - if (reg_clc_I0 == 0)
- - i0_num++;
- -
- - if (reg_clc_Q0 == 0)
- - q0_num++;
- - }
- - total_num = i0_num + q0_num;
- - if (total_num > AR9285_CLCAL_REDO_THRESH) {
- - reg_rf2g5_org = REG_READ(ah, AR9285_RF2G5);
- - if (AR_SREV_9285E_20(ah)) {
- - REG_WRITE(ah, AR9285_RF2G5,
- - (reg_rf2g5_org & AR9285_RF2G5_IC50TX) |
- - AR9285_RF2G5_IC50TX_XE_SET);
- - } else {
- - REG_WRITE(ah, AR9285_RF2G5,
- - (reg_rf2g5_org & AR9285_RF2G5_IC50TX) |
- - AR9285_RF2G5_IC50TX_SET);
- - }
- - retv = ar9285_cl_cal(ah, chan);
- - REG_WRITE(ah, AR9285_RF2G5, reg_rf2g5_org);
- - }
- - return retv;
- -}
- -
- -bool ath9k_hw_init_cal(struct ath_hw *ah, struct ath9k_channel *chan)
- -{
- - struct ath_common *common = ath9k_hw_common(ah);
- -
- - if (AR_SREV_9271(ah) || AR_SREV_9285_12_OR_LATER(ah)) {
- - if (!ar9285_clc(ah, chan))
- - return false;
- - } else {
- - if (AR_SREV_9280_10_OR_LATER(ah)) {
- - if (!AR_SREV_9287_10_OR_LATER(ah))
- - REG_CLR_BIT(ah, AR_PHY_ADC_CTL,
- - AR_PHY_ADC_CTL_OFF_PWDADC);
- - REG_SET_BIT(ah, AR_PHY_AGC_CONTROL,
- - AR_PHY_AGC_CONTROL_FLTR_CAL);
- - }
- -
- - /* Calibrate the AGC */
- - REG_WRITE(ah, AR_PHY_AGC_CONTROL,
- - REG_READ(ah, AR_PHY_AGC_CONTROL) |
- - AR_PHY_AGC_CONTROL_CAL);
- -
- - /* Poll for offset calibration complete */
- - if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL,
- - 0, AH_WAIT_TIMEOUT)) {
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "offset calibration failed to "
- - "complete in 1ms; noisy environment?\n");
- - return false;
- - }
- -
- - if (AR_SREV_9280_10_OR_LATER(ah)) {
- - if (!AR_SREV_9287_10_OR_LATER(ah))
- - REG_SET_BIT(ah, AR_PHY_ADC_CTL,
- - AR_PHY_ADC_CTL_OFF_PWDADC);
- - REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
- - AR_PHY_AGC_CONTROL_FLTR_CAL);
- - }
- - }
- -
- - /* Do PA Calibration */
- - if (AR_SREV_9271(ah))
- - ath9k_hw_9271_pa_cal(ah, true);
- - else if (AR_SREV_9285_11_OR_LATER(ah))
- - ath9k_hw_9285_pa_cal(ah, true);
- -
- - /* Do NF Calibration after DC offset and other calibrations */
- - REG_WRITE(ah, AR_PHY_AGC_CONTROL,
- - REG_READ(ah, AR_PHY_AGC_CONTROL) | AR_PHY_AGC_CONTROL_NF);
- -
- - ah->cal_list = ah->cal_list_last = ah->cal_list_curr = NULL;
- -
- - /* Enable IQ, ADC Gain and ADC DC offset CALs */
- - if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah)) {
- - if (ath9k_hw_iscal_supported(ah, ADC_GAIN_CAL)) {
- - INIT_CAL(&ah->adcgain_caldata);
- - INSERT_CAL(ah, &ah->adcgain_caldata);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "enabling ADC Gain Calibration.\n");
- - }
- - if (ath9k_hw_iscal_supported(ah, ADC_DC_CAL)) {
- - INIT_CAL(&ah->adcdc_caldata);
- - INSERT_CAL(ah, &ah->adcdc_caldata);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "enabling ADC DC Calibration.\n");
- - }
- - if (ath9k_hw_iscal_supported(ah, IQ_MISMATCH_CAL)) {
- - INIT_CAL(&ah->iq_caldata);
- - INSERT_CAL(ah, &ah->iq_caldata);
- - ath_print(common, ATH_DBG_CALIBRATE,
- - "enabling IQ Calibration.\n");
- - }
- -
- - ah->cal_list_curr = ah->cal_list;
- -
- - if (ah->cal_list_curr)
- - ath9k_hw_reset_calibration(ah, ah->cal_list_curr);
- - }
- -
- - chan->CalValid = 0;
- -
- - return true;
- -}
- -
- -const struct ath9k_percal_data iq_cal_multi_sample = {
- - IQ_MISMATCH_CAL,
- - MAX_CAL_SAMPLES,
- - PER_MIN_LOG_COUNT,
- - ath9k_hw_iqcal_collect,
- - ath9k_hw_iqcalibrate
- -};
- -const struct ath9k_percal_data iq_cal_single_sample = {
- - IQ_MISMATCH_CAL,
- - MIN_CAL_SAMPLES,
- - PER_MAX_LOG_COUNT,
- - ath9k_hw_iqcal_collect,
- - ath9k_hw_iqcalibrate
- -};
- -const struct ath9k_percal_data adc_gain_cal_multi_sample = {
- - ADC_GAIN_CAL,
- - MAX_CAL_SAMPLES,
- - PER_MIN_LOG_COUNT,
- - ath9k_hw_adc_gaincal_collect,
- - ath9k_hw_adc_gaincal_calibrate
- -};
- -const struct ath9k_percal_data adc_gain_cal_single_sample = {
- - ADC_GAIN_CAL,
- - MIN_CAL_SAMPLES,
- - PER_MAX_LOG_COUNT,
- - ath9k_hw_adc_gaincal_collect,
- - ath9k_hw_adc_gaincal_calibrate
- -};
- -const struct ath9k_percal_data adc_dc_cal_multi_sample = {
- - ADC_DC_CAL,
- - MAX_CAL_SAMPLES,
- - PER_MIN_LOG_COUNT,
- - ath9k_hw_adc_dccal_collect,
- - ath9k_hw_adc_dccal_calibrate
- -};
- -const struct ath9k_percal_data adc_dc_cal_single_sample = {
- - ADC_DC_CAL,
- - MIN_CAL_SAMPLES,
- - PER_MAX_LOG_COUNT,
- - ath9k_hw_adc_dccal_collect,
- - ath9k_hw_adc_dccal_calibrate
- -};
- -const struct ath9k_percal_data adc_init_dc_cal = {
- - ADC_DC_INIT_CAL,
- - MIN_CAL_SAMPLES,
- - INIT_LOG_COUNT,
- - ath9k_hw_adc_dccal_collect,
- - ath9k_hw_adc_dccal_calibrate
- -};
- --- a/drivers/net/wireless/ath/ath9k/calib.h
- +++ b/drivers/net/wireless/ath/ath9k/calib.h
- @@ -19,14 +19,6 @@
-
- #include "hw.h"
-
- -extern const struct ath9k_percal_data iq_cal_multi_sample;
- -extern const struct ath9k_percal_data iq_cal_single_sample;
- -extern const struct ath9k_percal_data adc_gain_cal_multi_sample;
- -extern const struct ath9k_percal_data adc_gain_cal_single_sample;
- -extern const struct ath9k_percal_data adc_dc_cal_multi_sample;
- -extern const struct ath9k_percal_data adc_dc_cal_single_sample;
- -extern const struct ath9k_percal_data adc_init_dc_cal;
- -
- #define AR_PHY_CCA_MAX_AR5416_GOOD_VALUE -85
- #define AR_PHY_CCA_MAX_AR9280_GOOD_VALUE -112
- #define AR_PHY_CCA_MAX_AR9285_GOOD_VALUE -118
- @@ -76,7 +68,8 @@ enum ath9k_cal_types {
- ADC_DC_INIT_CAL = 0x1,
- ADC_GAIN_CAL = 0x2,
- ADC_DC_CAL = 0x4,
- - IQ_MISMATCH_CAL = 0x8
- + IQ_MISMATCH_CAL = 0x8,
- + TEMP_COMP_CAL = 0x10,
- };
-
- enum ath9k_cal_state {
- @@ -122,14 +115,12 @@ struct ath9k_pacal_info{
-
- bool ath9k_hw_reset_calvalid(struct ath_hw *ah);
- void ath9k_hw_start_nfcal(struct ath_hw *ah);
- -void ath9k_hw_loadnf(struct ath_hw *ah, struct ath9k_channel *chan);
- int16_t ath9k_hw_getnf(struct ath_hw *ah,
- struct ath9k_channel *chan);
- void ath9k_init_nfcal_hist_buffer(struct ath_hw *ah);
- s16 ath9k_hw_getchan_noise(struct ath_hw *ah, struct ath9k_channel *chan);
- -bool ath9k_hw_calibrate(struct ath_hw *ah, struct ath9k_channel *chan,
- - u8 rxchainmask, bool longcal);
- -bool ath9k_hw_init_cal(struct ath_hw *ah,
- - struct ath9k_channel *chan);
- +void ath9k_hw_reset_calibration(struct ath_hw *ah,
- + struct ath9k_cal_list *currCal);
- +
-
- #endif /* CALIB_H */
- --- a/drivers/net/wireless/ath/ath9k/common.h
- +++ b/drivers/net/wireless/ath/ath9k/common.h
- @@ -20,6 +20,7 @@
- #include "../debug.h"
-
- #include "hw.h"
- +#include "hw-ops.h"
-
- /* Common header for Atheros 802.11n base driver cores */
-
- @@ -76,11 +77,12 @@ struct ath_buf {
- an aggregate) */
- struct ath_buf *bf_next; /* next subframe in the aggregate */
- struct sk_buff *bf_mpdu; /* enclosing frame structure */
- - struct ath_desc *bf_desc; /* virtual addr of desc */
- + void *bf_desc; /* virtual addr of desc */
- dma_addr_t bf_daddr; /* physical addr of desc */
- dma_addr_t bf_buf_addr; /* physical addr of data buffer */
- bool bf_stale;
- bool bf_isnullfunc;
- + bool bf_tx_aborted;
- u16 bf_flags;
- struct ath_buf_state bf_state;
- dma_addr_t bf_dmacontext;
- --- a/drivers/net/wireless/ath/ath9k/debug.c
- +++ b/drivers/net/wireless/ath/ath9k/debug.c
- @@ -180,8 +180,15 @@ void ath_debug_stat_interrupt(struct ath
- {
- if (status)
- sc->debug.stats.istats.total++;
- - if (status & ATH9K_INT_RX)
- - sc->debug.stats.istats.rxok++;
- + if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
- + if (status & ATH9K_INT_RXLP)
- + sc->debug.stats.istats.rxlp++;
- + if (status & ATH9K_INT_RXHP)
- + sc->debug.stats.istats.rxhp++;
- + } else {
- + if (status & ATH9K_INT_RX)
- + sc->debug.stats.istats.rxok++;
- + }
- if (status & ATH9K_INT_RXEOL)
- sc->debug.stats.istats.rxeol++;
- if (status & ATH9K_INT_RXORN)
- @@ -223,8 +230,15 @@ static ssize_t read_file_interrupt(struc
- char buf[512];
- unsigned int len = 0;
-
- - len += snprintf(buf + len, sizeof(buf) - len,
- - "%8s: %10u\n", "RX", sc->debug.stats.istats.rxok);
- + if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
- + len += snprintf(buf + len, sizeof(buf) - len,
- + "%8s: %10u\n", "RXLP", sc->debug.stats.istats.rxlp);
- + len += snprintf(buf + len, sizeof(buf) - len,
- + "%8s: %10u\n", "RXHP", sc->debug.stats.istats.rxhp);
- + } else {
- + len += snprintf(buf + len, sizeof(buf) - len,
- + "%8s: %10u\n", "RX", sc->debug.stats.istats.rxok);
- + }
- len += snprintf(buf + len, sizeof(buf) - len,
- "%8s: %10u\n", "RXEOL", sc->debug.stats.istats.rxeol);
- len += snprintf(buf + len, sizeof(buf) - len,
- --- a/drivers/net/wireless/ath/ath9k/debug.h
- +++ b/drivers/net/wireless/ath/ath9k/debug.h
- @@ -35,6 +35,8 @@ struct ath_buf;
- * struct ath_interrupt_stats - Contains statistics about interrupts
- * @total: Total no. of interrupts generated so far
- * @rxok: RX with no errors
- + * @rxlp: RX with low priority RX
- + * @rxhp: RX with high priority, uapsd only
- * @rxeol: RX with no more RXDESC available
- * @rxorn: RX FIFO overrun
- * @txok: TX completed at the requested rate
- @@ -55,6 +57,8 @@ struct ath_buf;
- struct ath_interrupt_stats {
- u32 total;
- u32 rxok;
- + u32 rxlp;
- + u32 rxhp;
- u32 rxeol;
- u32 rxorn;
- u32 txok;
- --- a/drivers/net/wireless/ath/ath9k/eeprom.c
- +++ b/drivers/net/wireless/ath/ath9k/eeprom.c
- @@ -256,14 +256,13 @@ int ath9k_hw_eeprom_init(struct ath_hw *
- {
- int status;
-
- - if (AR_SREV_9287(ah)) {
- - ah->eep_map = EEP_MAP_AR9287;
- - ah->eep_ops = &eep_AR9287_ops;
- + if (AR_SREV_9300_20_OR_LATER(ah))
- + ah->eep_ops = &eep_ar9300_ops;
- + else if (AR_SREV_9287(ah)) {
- + ah->eep_ops = &eep_ar9287_ops;
- } else if (AR_SREV_9285(ah) || AR_SREV_9271(ah)) {
- - ah->eep_map = EEP_MAP_4KBITS;
- ah->eep_ops = &eep_4k_ops;
- } else {
- - ah->eep_map = EEP_MAP_DEFAULT;
- ah->eep_ops = &eep_def_ops;
- }
-
- --- a/drivers/net/wireless/ath/ath9k/eeprom.h
- +++ b/drivers/net/wireless/ath/ath9k/eeprom.h
- @@ -19,6 +19,7 @@
-
- #include "../ath.h"
- #include <net/cfg80211.h>
- +#include "ar9003_eeprom.h"
-
- #define AH_USE_EEPROM 0x1
-
- @@ -93,7 +94,6 @@
- */
- #define AR9285_RDEXT_DEFAULT 0x1F
-
- -#define AR_EEPROM_MAC(i) (0x1d+(i))
- #define ATH9K_POW_SM(_r, _s) (((_r) & 0x3f) << (_s))
- #define FREQ2FBIN(x, y) ((y) ? ((x) - 2300) : (((x) - 4800) / 5))
- #define ath9k_hw_use_flash(_ah) (!(_ah->ah_flags & AH_USE_EEPROM))
- @@ -155,6 +155,7 @@
- #define AR5416_BCHAN_UNUSED 0xFF
- #define AR5416_MAX_PWR_RANGE_IN_HALF_DB 64
- #define AR5416_MAX_CHAINS 3
- +#define AR9300_MAX_CHAINS 3
- #define AR5416_PWR_TABLE_OFFSET_DB -5
-
- /* Rx gain type values */
- @@ -249,16 +250,20 @@ enum eeprom_param {
- EEP_MINOR_REV,
- EEP_TX_MASK,
- EEP_RX_MASK,
- + EEP_FSTCLK_5G,
- EEP_RXGAIN_TYPE,
- - EEP_TXGAIN_TYPE,
- EEP_OL_PWRCTRL,
- + EEP_TXGAIN_TYPE,
- EEP_RC_CHAIN_MASK,
- EEP_DAC_HPWR_5G,
- EEP_FRAC_N_5G,
- EEP_DEV_TYPE,
- EEP_TEMPSENSE_SLOPE,
- EEP_TEMPSENSE_SLOPE_PAL_ON,
- - EEP_PWR_TABLE_OFFSET
- + EEP_PWR_TABLE_OFFSET,
- + EEP_DRIVE_STRENGTH,
- + EEP_INTERNAL_REGULATOR,
- + EEP_SWREG
- };
-
- enum ar5416_rates {
- @@ -656,13 +661,6 @@ struct ath9k_country_entry {
- u8 iso[3];
- };
-
- -enum ath9k_eep_map {
- - EEP_MAP_DEFAULT = 0x0,
- - EEP_MAP_4KBITS,
- - EEP_MAP_AR9287,
- - EEP_MAP_MAX
- -};
- -
- struct eeprom_ops {
- int (*check_eeprom)(struct ath_hw *hw);
- u32 (*get_eeprom)(struct ath_hw *hw, enum eeprom_param param);
- @@ -713,6 +711,8 @@ int ath9k_hw_eeprom_init(struct ath_hw *
-
- extern const struct eeprom_ops eep_def_ops;
- extern const struct eeprom_ops eep_4k_ops;
- -extern const struct eeprom_ops eep_AR9287_ops;
- +extern const struct eeprom_ops eep_ar9287_ops;
- +extern const struct eeprom_ops eep_ar9287_ops;
- +extern const struct eeprom_ops eep_ar9300_ops;
-
- #endif /* EEPROM_H */
- --- a/drivers/net/wireless/ath/ath9k/eeprom_4k.c
- +++ b/drivers/net/wireless/ath/ath9k/eeprom_4k.c
- @@ -15,6 +15,7 @@
- */
-
- #include "hw.h"
- +#include "ar9002_phy.h"
-
- static int ath9k_hw_4k_get_eeprom_ver(struct ath_hw *ah)
- {
- @@ -182,11 +183,11 @@ static u32 ath9k_hw_4k_get_eeprom(struct
- switch (param) {
- case EEP_NFTHRESH_2:
- return pModal->noiseFloorThreshCh[0];
- - case AR_EEPROM_MAC(0):
- + case EEP_MAC_LSW:
- return pBase->macAddr[0] << 8 | pBase->macAddr[1];
- - case AR_EEPROM_MAC(1):
- + case EEP_MAC_MID:
- return pBase->macAddr[2] << 8 | pBase->macAddr[3];
- - case AR_EEPROM_MAC(2):
- + case EEP_MAC_MSW:
- return pBase->macAddr[4] << 8 | pBase->macAddr[5];
- case EEP_REG_0:
- return pBase->regDmn[0];
- --- a/drivers/net/wireless/ath/ath9k/eeprom_9287.c
- +++ b/drivers/net/wireless/ath/ath9k/eeprom_9287.c
- @@ -15,6 +15,7 @@
- */
-
- #include "hw.h"
- +#include "ar9002_phy.h"
-
- static int ath9k_hw_AR9287_get_eeprom_ver(struct ath_hw *ah)
- {
- @@ -172,11 +173,11 @@ static u32 ath9k_hw_AR9287_get_eeprom(st
- switch (param) {
- case EEP_NFTHRESH_2:
- return pModal->noiseFloorThreshCh[0];
- - case AR_EEPROM_MAC(0):
- + case EEP_MAC_LSW:
- return pBase->macAddr[0] << 8 | pBase->macAddr[1];
- - case AR_EEPROM_MAC(1):
- + case EEP_MAC_MID:
- return pBase->macAddr[2] << 8 | pBase->macAddr[3];
- - case AR_EEPROM_MAC(2):
- + case EEP_MAC_MSW:
- return pBase->macAddr[4] << 8 | pBase->macAddr[5];
- case EEP_REG_0:
- return pBase->regDmn[0];
- @@ -1169,7 +1170,7 @@ static u16 ath9k_hw_AR9287_get_spur_chan
- #undef EEP_MAP9287_SPURCHAN
- }
-
- -const struct eeprom_ops eep_AR9287_ops = {
- +const struct eeprom_ops eep_ar9287_ops = {
- .check_eeprom = ath9k_hw_AR9287_check_eeprom,
- .get_eeprom = ath9k_hw_AR9287_get_eeprom,
- .fill_eeprom = ath9k_hw_AR9287_fill_eeprom,
- --- a/drivers/net/wireless/ath/ath9k/eeprom_def.c
- +++ b/drivers/net/wireless/ath/ath9k/eeprom_def.c
- @@ -15,6 +15,7 @@
- */
-
- #include "hw.h"
- +#include "ar9002_phy.h"
-
- static void ath9k_get_txgain_index(struct ath_hw *ah,
- struct ath9k_channel *chan,
- @@ -222,6 +223,12 @@ static int ath9k_hw_def_check_eeprom(str
- return -EINVAL;
- }
-
- + /* Enable fixup for AR_AN_TOP2 if necessary */
- + if (AR_SREV_9280_10_OR_LATER(ah) &&
- + (eep->baseEepHeader.version & 0xff) > 0x0a &&
- + eep->baseEepHeader.pwdclkind == 0)
- + ah->need_an_top2_fixup = 1;
- +
- return 0;
- }
-
- @@ -237,11 +244,11 @@ static u32 ath9k_hw_def_get_eeprom(struc
- return pModal[0].noiseFloorThreshCh[0];
- case EEP_NFTHRESH_2:
- return pModal[1].noiseFloorThreshCh[0];
- - case AR_EEPROM_MAC(0):
- + case EEP_MAC_LSW:
- return pBase->macAddr[0] << 8 | pBase->macAddr[1];
- - case AR_EEPROM_MAC(1):
- + case EEP_MAC_MID:
- return pBase->macAddr[2] << 8 | pBase->macAddr[3];
- - case AR_EEPROM_MAC(2):
- + case EEP_MAC_MSW:
- return pBase->macAddr[4] << 8 | pBase->macAddr[5];
- case EEP_REG_0:
- return pBase->regDmn[0];
- --- /dev/null
- +++ b/drivers/net/wireless/ath/ath9k/hw-ops.h
- @@ -0,0 +1,279 @@
- +/*
- + * Copyright (c) 2010 Atheros Communications Inc.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- + */
- +
- +#ifndef ATH9K_HW_OPS_H
- +#define ATH9K_HW_OPS_H
- +
- +#include "hw.h"
- +
- +/* Hardware core and driver accessible callbacks */
- +
- +static inline void ath9k_hw_configpcipowersave(struct ath_hw *ah,
- + int restore,
- + int power_off)
- +{
- + ath9k_hw_ops(ah)->config_pci_powersave(ah, restore, power_off);
- +}
- +
- +static inline void ath9k_hw_rxena(struct ath_hw *ah)
- +{
- + ath9k_hw_ops(ah)->rx_enable(ah);
- +}
- +
- +static inline void ath9k_hw_set_desc_link(struct ath_hw *ah, void *ds,
- + u32 link)
- +{
- + ath9k_hw_ops(ah)->set_desc_link(ds, link);
- +}
- +
- +static inline void ath9k_hw_get_desc_link(struct ath_hw *ah, void *ds,
- + u32 **link)
- +{
- + ath9k_hw_ops(ah)->get_desc_link(ds, link);
- +}
- +static inline bool ath9k_hw_calibrate(struct ath_hw *ah,
- + struct ath9k_channel *chan,
- + u8 rxchainmask,
- + bool longcal)
- +{
- + return ath9k_hw_ops(ah)->calibrate(ah, chan, rxchainmask, longcal);
- +}
- +
- +static inline bool ath9k_hw_getisr(struct ath_hw *ah, enum ath9k_int *masked)
- +{
- + return ath9k_hw_ops(ah)->get_isr(ah, masked);
- +}
- +
- +static inline void ath9k_hw_filltxdesc(struct ath_hw *ah, void *ds, u32 seglen,
- + bool is_firstseg, bool is_lastseg,
- + const void *ds0, dma_addr_t buf_addr,
- + unsigned int qcu)
- +{
- + ath9k_hw_ops(ah)->fill_txdesc(ah, ds, seglen, is_firstseg, is_lastseg,
- + ds0, buf_addr, qcu);
- +}
- +
- +static inline int ath9k_hw_txprocdesc(struct ath_hw *ah, void *ds,
- + struct ath_tx_status *ts)
- +{
- + return ath9k_hw_ops(ah)->proc_txdesc(ah, ds, ts);
- +}
- +
- +static inline void ath9k_hw_set11n_txdesc(struct ath_hw *ah, void *ds,
- + u32 pktLen, enum ath9k_pkt_type type,
- + u32 txPower, u32 keyIx,
- + enum ath9k_key_type keyType,
- + u32 flags)
- +{
- + ath9k_hw_ops(ah)->set11n_txdesc(ah, ds, pktLen, type, txPower, keyIx,
- + keyType, flags);
- +}
- +
- +static inline void ath9k_hw_set11n_ratescenario(struct ath_hw *ah, void *ds,
- + void *lastds,
- + u32 durUpdateEn, u32 rtsctsRate,
- + u32 rtsctsDuration,
- + struct ath9k_11n_rate_series series[],
- + u32 nseries, u32 flags)
- +{
- + ath9k_hw_ops(ah)->set11n_ratescenario(ah, ds, lastds, durUpdateEn,
- + rtsctsRate, rtsctsDuration, series,
- + nseries, flags);
- +}
- +
- +static inline void ath9k_hw_set11n_aggr_first(struct ath_hw *ah, void *ds,
- + u32 aggrLen)
- +{
- + ath9k_hw_ops(ah)->set11n_aggr_first(ah, ds, aggrLen);
- +}
- +
- +static inline void ath9k_hw_set11n_aggr_middle(struct ath_hw *ah, void *ds,
- + u32 numDelims)
- +{
- + ath9k_hw_ops(ah)->set11n_aggr_middle(ah, ds, numDelims);
- +}
- +
- +static inline void ath9k_hw_set11n_aggr_last(struct ath_hw *ah, void *ds)
- +{
- + ath9k_hw_ops(ah)->set11n_aggr_last(ah, ds);
- +}
- +
- +static inline void ath9k_hw_clr11n_aggr(struct ath_hw *ah, void *ds)
- +{
- + ath9k_hw_ops(ah)->clr11n_aggr(ah, ds);
- +}
- +
- +static inline void ath9k_hw_set11n_burstduration(struct ath_hw *ah, void *ds,
- + u32 burstDuration)
- +{
- + ath9k_hw_ops(ah)->set11n_burstduration(ah, ds, burstDuration);
- +}
- +
- +static inline void ath9k_hw_set11n_virtualmorefrag(struct ath_hw *ah, void *ds,
- + u32 vmf)
- +{
- + ath9k_hw_ops(ah)->set11n_virtualmorefrag(ah, ds, vmf);
- +}
- +
- +/* Private hardware call ops */
- +
- +/* PHY ops */
- +
- +static inline int ath9k_hw_rf_set_freq(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + return ath9k_hw_private_ops(ah)->rf_set_freq(ah, chan);
- +}
- +
- +static inline void ath9k_hw_spur_mitigate_freq(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + ath9k_hw_private_ops(ah)->spur_mitigate_freq(ah, chan);
- +}
- +
- +static inline int ath9k_hw_rf_alloc_ext_banks(struct ath_hw *ah)
- +{
- + if (!ath9k_hw_private_ops(ah)->rf_alloc_ext_banks)
- + return 0;
- +
- + return ath9k_hw_private_ops(ah)->rf_alloc_ext_banks(ah);
- +}
- +
- +static inline void ath9k_hw_rf_free_ext_banks(struct ath_hw *ah)
- +{
- + if (!ath9k_hw_private_ops(ah)->rf_free_ext_banks)
- + return;
- +
- + ath9k_hw_private_ops(ah)->rf_free_ext_banks(ah);
- +}
- +
- +static inline bool ath9k_hw_set_rf_regs(struct ath_hw *ah,
- + struct ath9k_channel *chan,
- + u16 modesIndex)
- +{
- + if (!ath9k_hw_private_ops(ah)->set_rf_regs)
- + return true;
- +
- + return ath9k_hw_private_ops(ah)->set_rf_regs(ah, chan, modesIndex);
- +}
- +
- +static inline void ath9k_hw_init_bb(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + return ath9k_hw_private_ops(ah)->init_bb(ah, chan);
- +}
- +
- +static inline void ath9k_hw_set_channel_regs(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + return ath9k_hw_private_ops(ah)->set_channel_regs(ah, chan);
- +}
- +
- +static inline int ath9k_hw_process_ini(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + return ath9k_hw_private_ops(ah)->process_ini(ah, chan);
- +}
- +
- +static inline void ath9k_olc_init(struct ath_hw *ah)
- +{
- + if (!ath9k_hw_private_ops(ah)->olc_init)
- + return;
- +
- + return ath9k_hw_private_ops(ah)->olc_init(ah);
- +}
- +
- +static inline void ath9k_hw_set_rfmode(struct ath_hw *ah, struct ath9k_channel *chan)
- +{
- + return ath9k_hw_private_ops(ah)->set_rfmode(ah, chan);
- +}
- +
- +static inline void ath9k_hw_mark_phy_inactive(struct ath_hw *ah)
- +{
- + return ath9k_hw_private_ops(ah)->mark_phy_inactive(ah);
- +}
- +
- +static inline void ath9k_hw_set_delta_slope(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + return ath9k_hw_private_ops(ah)->set_delta_slope(ah, chan);
- +}
- +
- +static inline bool ath9k_hw_rfbus_req(struct ath_hw *ah)
- +{
- + return ath9k_hw_private_ops(ah)->rfbus_req(ah);
- +}
- +
- +static inline void ath9k_hw_rfbus_done(struct ath_hw *ah)
- +{
- + return ath9k_hw_private_ops(ah)->rfbus_done(ah);
- +}
- +
- +static inline void ath9k_enable_rfkill(struct ath_hw *ah)
- +{
- + return ath9k_hw_private_ops(ah)->enable_rfkill(ah);
- +}
- +
- +static inline void ath9k_hw_restore_chainmask(struct ath_hw *ah)
- +{
- + if (!ath9k_hw_private_ops(ah)->restore_chainmask)
- + return;
- +
- + return ath9k_hw_private_ops(ah)->restore_chainmask(ah);
- +}
- +
- +static inline void ath9k_hw_set_diversity(struct ath_hw *ah, bool value)
- +{
- + return ath9k_hw_private_ops(ah)->set_diversity(ah, value);
- +}
- +
- +static inline bool ath9k_hw_ani_control(struct ath_hw *ah,
- + enum ath9k_ani_cmd cmd, int param)
- +{
- + return ath9k_hw_private_ops(ah)->ani_control(ah, cmd, param);
- +}
- +
- +static inline void ath9k_hw_do_getnf(struct ath_hw *ah,
- + int16_t nfarray[NUM_NF_READINGS])
- +{
- + ath9k_hw_private_ops(ah)->do_getnf(ah, nfarray);
- +}
- +
- +static inline void ath9k_hw_loadnf(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + ath9k_hw_private_ops(ah)->loadnf(ah, chan);
- +}
- +
- +static inline bool ath9k_hw_init_cal(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + return ath9k_hw_private_ops(ah)->init_cal(ah, chan);
- +}
- +
- +static inline void ath9k_hw_setup_calibration(struct ath_hw *ah,
- + struct ath9k_cal_list *currCal)
- +{
- + ath9k_hw_private_ops(ah)->setup_calibration(ah, currCal);
- +}
- +
- +static inline bool ath9k_hw_iscal_supported(struct ath_hw *ah,
- + enum ath9k_cal_types calType)
- +{
- + return ath9k_hw_private_ops(ah)->iscal_supported(ah, calType);
- +}
- +
- +#endif /* ATH9K_HW_OPS_H */
- --- a/drivers/net/wireless/ath/ath9k/hw.c
- +++ b/drivers/net/wireless/ath/ath9k/hw.c
- @@ -1,5 +1,5 @@
- /*
- - * Copyright (c) 2008-2009 Atheros Communications Inc.
- + * Copyright (c) 2008-2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- @@ -19,15 +19,14 @@
- #include <asm/unaligned.h>
-
- #include "hw.h"
- +#include "hw-ops.h"
- #include "rc.h"
- -#include "initvals.h"
-
- #define ATH9K_CLOCK_RATE_CCK 22
- #define ATH9K_CLOCK_RATE_5GHZ_OFDM 40
- #define ATH9K_CLOCK_RATE_2GHZ_OFDM 44
-
- static bool ath9k_hw_set_reset_reg(struct ath_hw *ah, u32 type);
- -static void ath9k_hw_set_regs(struct ath_hw *ah, struct ath9k_channel *chan);
-
- MODULE_AUTHOR("Atheros Communications");
- MODULE_DESCRIPTION("Support for Atheros 802.11n wireless LAN cards.");
- @@ -46,6 +45,37 @@ static void __exit ath9k_exit(void)
- }
- module_exit(ath9k_exit);
-
- +/* Private hardware callbacks */
- +
- +static void ath9k_hw_init_cal_settings(struct ath_hw *ah)
- +{
- + ath9k_hw_private_ops(ah)->init_cal_settings(ah);
- +}
- +
- +static void ath9k_hw_init_mode_regs(struct ath_hw *ah)
- +{
- + ath9k_hw_private_ops(ah)->init_mode_regs(ah);
- +}
- +
- +static bool ath9k_hw_macversion_supported(struct ath_hw *ah)
- +{
- + return ath9k_hw_private_ops(ah)->macversion_supported(ah->hw_version.macVersion);
- +}
- +
- +static u32 ath9k_hw_compute_pll_control(struct ath_hw *ah,
- + struct ath9k_channel *chan)
- +{
- + return ath9k_hw_private_ops(ah)->compute_pll_control(ah, chan);
- +}
- +
- +static void ath9k_hw_init_mode_gain_regs(struct ath_hw *ah)
- +{
- + if (!ath9k_hw_private_ops(ah)->init_mode_gain_regs)
- + return;
- +
- + ath9k_hw_private_ops(ah)->init_mode_gain_regs(ah);
- +}
- +
- /********************/
- /* Helper Functions */
- /********************/
- @@ -233,21 +263,6 @@ static void ath9k_hw_read_revisions(stru
- }
- }
-
- -static int ath9k_hw_get_radiorev(struct ath_hw *ah)
- -{
- - u32 val;
- - int i;
- -
- - REG_WRITE(ah, AR_PHY(0x36), 0x00007058);
- -
- - for (i = 0; i < 8; i++)
- - REG_WRITE(ah, AR_PHY(0x20), 0x00010000);
- - val = (REG_READ(ah, AR_PHY(256)) >> 24) & 0xff;
- - val = ((val & 0xf0) >> 4) | ((val & 0x0f) << 4);
- -
- - return ath9k_hw_reverse_bits(val, 8);
- -}
- -
- /************************************/
- /* HW Attach, Detach, Init Routines */
- /************************************/
- @@ -270,18 +285,25 @@ static void ath9k_hw_disablepcie(struct
- REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000);
- }
-
- +/* This should work for all families including legacy */
- static bool ath9k_hw_chip_test(struct ath_hw *ah)
- {
- struct ath_common *common = ath9k_hw_common(ah);
- - u32 regAddr[2] = { AR_STA_ID0, AR_PHY_BASE + (8 << 2) };
- + u32 regAddr[2] = { AR_STA_ID0 };
- u32 regHold[2];
- u32 patternData[4] = { 0x55555555,
- 0xaaaaaaaa,
- 0x66666666,
- 0x99999999 };
- - int i, j;
- + int i, j, loop_max;
- +
- + if (!AR_SREV_9300_20_OR_LATER(ah)) {
- + loop_max = 2;
- + regAddr[1] = AR_PHY_BASE + (8 << 2);
- + } else
- + loop_max = 1;
-
- - for (i = 0; i < 2; i++) {
- + for (i = 0; i < loop_max; i++) {
- u32 addr = regAddr[i];
- u32 wrData, rdData;
-
- @@ -369,7 +391,6 @@ static void ath9k_hw_init_config(struct
- if (num_possible_cpus() > 1)
- ah->config.serialize_regmode = SER_REG_MODE_AUTO;
- }
- -EXPORT_SYMBOL(ath9k_hw_init);
-
- static void ath9k_hw_init_defaults(struct ath_hw *ah)
- {
- @@ -383,8 +404,6 @@ static void ath9k_hw_init_defaults(struc
- ah->hw_version.subvendorid = 0;
-
- ah->ah_flags = 0;
- - if (ah->hw_version.devid == AR5416_AR9100_DEVID)
- - ah->hw_version.macVersion = AR_SREV_VERSION_9100;
- if (!AR_SREV_9100(ah))
- ah->ah_flags = AH_USE_EEPROM;
-
- @@ -397,44 +416,17 @@ static void ath9k_hw_init_defaults(struc
- ah->power_mode = ATH9K_PM_UNDEFINED;
- }
-
- -static int ath9k_hw_rf_claim(struct ath_hw *ah)
- -{
- - u32 val;
- -
- - REG_WRITE(ah, AR_PHY(0), 0x00000007);
- -
- - val = ath9k_hw_get_radiorev(ah);
- - switch (val & AR_RADIO_SREV_MAJOR) {
- - case 0:
- - val = AR_RAD5133_SREV_MAJOR;
- - break;
- - case AR_RAD5133_SREV_MAJOR:
- - case AR_RAD5122_SREV_MAJOR:
- - case AR_RAD2133_SREV_MAJOR:
- - case AR_RAD2122_SREV_MAJOR:
- - break;
- - default:
- - ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
- - "Radio Chip Rev 0x%02X not supported\n",
- - val & AR_RADIO_SREV_MAJOR);
- - return -EOPNOTSUPP;
- - }
- -
- - ah->hw_version.analog5GhzRev = val;
- -
- - return 0;
- -}
- -
- static int ath9k_hw_init_macaddr(struct ath_hw *ah)
- {
- struct ath_common *common = ath9k_hw_common(ah);
- u32 sum;
- int i;
- u16 eeval;
- + u32 EEP_MAC[] = { EEP_MAC_LSW, EEP_MAC_MID, EEP_MAC_MSW };
-
- sum = 0;
- for (i = 0; i < 3; i++) {
- - eeval = ah->eep_ops->get_eeprom(ah, AR_EEPROM_MAC(i));
- + eeval = ah->eep_ops->get_eeprom(ah, EEP_MAC[i]);
- sum += eeval;
- common->macaddr[2 * i] = eeval >> 8;
- common->macaddr[2 * i + 1] = eeval & 0xff;
- @@ -445,54 +437,6 @@ static int ath9k_hw_init_macaddr(struct
- return 0;
- }
-
- -static void ath9k_hw_init_rxgain_ini(struct ath_hw *ah)
- -{
- - u32 rxgain_type;
- -
- - if (ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV) >= AR5416_EEP_MINOR_VER_17) {
- - rxgain_type = ah->eep_ops->get_eeprom(ah, EEP_RXGAIN_TYPE);
- -
- - if (rxgain_type == AR5416_EEP_RXGAIN_13DB_BACKOFF)
- - INIT_INI_ARRAY(&ah->iniModesRxGain,
- - ar9280Modes_backoff_13db_rxgain_9280_2,
- - ARRAY_SIZE(ar9280Modes_backoff_13db_rxgain_9280_2), 6);
- - else if (rxgain_type == AR5416_EEP_RXGAIN_23DB_BACKOFF)
- - INIT_INI_ARRAY(&ah->iniModesRxGain,
- - ar9280Modes_backoff_23db_rxgain_9280_2,
- - ARRAY_SIZE(ar9280Modes_backoff_23db_rxgain_9280_2), 6);
- - else
- - INIT_INI_ARRAY(&ah->iniModesRxGain,
- - ar9280Modes_original_rxgain_9280_2,
- - ARRAY_SIZE(ar9280Modes_original_rxgain_9280_2), 6);
- - } else {
- - INIT_INI_ARRAY(&ah->iniModesRxGain,
- - ar9280Modes_original_rxgain_9280_2,
- - ARRAY_SIZE(ar9280Modes_original_rxgain_9280_2), 6);
- - }
- -}
- -
- -static void ath9k_hw_init_txgain_ini(struct ath_hw *ah)
- -{
- - u32 txgain_type;
- -
- - if (ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV) >= AR5416_EEP_MINOR_VER_19) {
- - txgain_type = ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE);
- -
- - if (txgain_type == AR5416_EEP_TXGAIN_HIGH_POWER)
- - INIT_INI_ARRAY(&ah->iniModesTxGain,
- - ar9280Modes_high_power_tx_gain_9280_2,
- - ARRAY_SIZE(ar9280Modes_high_power_tx_gain_9280_2), 6);
- - else
- - INIT_INI_ARRAY(&ah->iniModesTxGain,
- - ar9280Modes_original_tx_gain_9280_2,
- - ARRAY_SIZE(ar9280Modes_original_tx_gain_9280_2), 6);
- - } else {
- - INIT_INI_ARRAY(&ah->iniModesTxGain,
- - ar9280Modes_original_tx_gain_9280_2,
- - ARRAY_SIZE(ar9280Modes_original_tx_gain_9280_2), 6);
- - }
- -}
- -
- static int ath9k_hw_post_init(struct ath_hw *ah)
- {
- int ecode;
- @@ -502,9 +446,11 @@ static int ath9k_hw_post_init(struct ath
- return -ENODEV;
- }
-
- - ecode = ath9k_hw_rf_claim(ah);
- - if (ecode != 0)
- - return ecode;
- + if (!AR_SREV_9300_20_OR_LATER(ah)) {
- + ecode = ar9002_hw_rf_claim(ah);
- + if (ecode != 0)
- + return ecode;
- + }
-
- ecode = ath9k_hw_eeprom_init(ah);
- if (ecode != 0)
- @@ -515,14 +461,12 @@ static int ath9k_hw_post_init(struct ath
- ah->eep_ops->get_eeprom_ver(ah),
- ah->eep_ops->get_eeprom_rev(ah));
-
- - if (!AR_SREV_9280_10_OR_LATER(ah)) {
- - ecode = ath9k_hw_rf_alloc_ext_banks(ah);
- - if (ecode) {
- - ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
- - "Failed allocating banks for "
- - "external radio\n");
- - return ecode;
- - }
- + ecode = ath9k_hw_rf_alloc_ext_banks(ah);
- + if (ecode) {
- + ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
- + "Failed allocating banks for "
- + "external radio\n");
- + return ecode;
- }
-
- if (!AR_SREV_9100(ah)) {
- @@ -533,344 +477,22 @@ static int ath9k_hw_post_init(struct ath
- return 0;
- }
-
- -static bool ath9k_hw_devid_supported(u16 devid)
- -{
- - switch (devid) {
- - case AR5416_DEVID_PCI:
- - case AR5416_DEVID_PCIE:
- - case AR5416_AR9100_DEVID:
- - case AR9160_DEVID_PCI:
- - case AR9280_DEVID_PCI:
- - case AR9280_DEVID_PCIE:
- - case AR9285_DEVID_PCIE:
- - case AR5416_DEVID_AR9287_PCI:
- - case AR5416_DEVID_AR9287_PCIE:
- - case AR2427_DEVID_PCIE:
- - return true;
- - default:
- - break;
- - }
- - return false;
- -}
- -
- -static bool ath9k_hw_macversion_supported(u32 macversion)
- -{
- - switch (macversion) {
- - case AR_SREV_VERSION_5416_PCI:
- - case AR_SREV_VERSION_5416_PCIE:
- - case AR_SREV_VERSION_9160:
- - case AR_SREV_VERSION_9100:
- - case AR_SREV_VERSION_9280:
- - case AR_SREV_VERSION_9285:
- - case AR_SREV_VERSION_9287:
- - case AR_SREV_VERSION_9271:
- - return true;
- - default:
- - break;
- - }
- - return false;
- -}
- -
- -static void ath9k_hw_init_cal_settings(struct ath_hw *ah)
- -{
- - if (AR_SREV_9160_10_OR_LATER(ah)) {
- - if (AR_SREV_9280_10_OR_LATER(ah)) {
- - ah->iq_caldata.calData = &iq_cal_single_sample;
- - ah->adcgain_caldata.calData =
- - &adc_gain_cal_single_sample;
- - ah->adcdc_caldata.calData =
- - &adc_dc_cal_single_sample;
- - ah->adcdc_calinitdata.calData =
- - &adc_init_dc_cal;
- - } else {
- - ah->iq_caldata.calData = &iq_cal_multi_sample;
- - ah->adcgain_caldata.calData =
- - &adc_gain_cal_multi_sample;
- - ah->adcdc_caldata.calData =
- - &adc_dc_cal_multi_sample;
- - ah->adcdc_calinitdata.calData =
- - &adc_init_dc_cal;
- - }
- - ah->supp_cals = ADC_GAIN_CAL | ADC_DC_CAL | IQ_MISMATCH_CAL;
- - }
- -}
- -
- -static void ath9k_hw_init_mode_regs(struct ath_hw *ah)
- -{
- - if (AR_SREV_9271(ah)) {
- - INIT_INI_ARRAY(&ah->iniModes, ar9271Modes_9271,
- - ARRAY_SIZE(ar9271Modes_9271), 6);
- - INIT_INI_ARRAY(&ah->iniCommon, ar9271Common_9271,
- - ARRAY_SIZE(ar9271Common_9271), 2);
- - INIT_INI_ARRAY(&ah->iniCommon_normal_cck_fir_coeff_9271,
- - ar9271Common_normal_cck_fir_coeff_9271,
- - ARRAY_SIZE(ar9271Common_normal_cck_fir_coeff_9271), 2);
- - INIT_INI_ARRAY(&ah->iniCommon_japan_2484_cck_fir_coeff_9271,
- - ar9271Common_japan_2484_cck_fir_coeff_9271,
- - ARRAY_SIZE(ar9271Common_japan_2484_cck_fir_coeff_9271), 2);
- - INIT_INI_ARRAY(&ah->iniModes_9271_1_0_only,
- - ar9271Modes_9271_1_0_only,
- - ARRAY_SIZE(ar9271Modes_9271_1_0_only), 6);
- - INIT_INI_ARRAY(&ah->iniModes_9271_ANI_reg, ar9271Modes_9271_ANI_reg,
- - ARRAY_SIZE(ar9271Modes_9271_ANI_reg), 6);
- - INIT_INI_ARRAY(&ah->iniModes_high_power_tx_gain_9271,
- - ar9271Modes_high_power_tx_gain_9271,
- - ARRAY_SIZE(ar9271Modes_high_power_tx_gain_9271), 6);
- - INIT_INI_ARRAY(&ah->iniModes_normal_power_tx_gain_9271,
- - ar9271Modes_normal_power_tx_gain_9271,
- - ARRAY_SIZE(ar9271Modes_normal_power_tx_gain_9271), 6);
- - return;
- - }
- -
- - if (AR_SREV_9287_11_OR_LATER(ah)) {
- - INIT_INI_ARRAY(&ah->iniModes, ar9287Modes_9287_1_1,
- - ARRAY_SIZE(ar9287Modes_9287_1_1), 6);
- - INIT_INI_ARRAY(&ah->iniCommon, ar9287Common_9287_1_1,
- - ARRAY_SIZE(ar9287Common_9287_1_1), 2);
- - if (ah->config.pcie_clock_req)
- - INIT_INI_ARRAY(&ah->iniPcieSerdes,
- - ar9287PciePhy_clkreq_off_L1_9287_1_1,
- - ARRAY_SIZE(ar9287PciePhy_clkreq_off_L1_9287_1_1), 2);
- - else
- - INIT_INI_ARRAY(&ah->iniPcieSerdes,
- - ar9287PciePhy_clkreq_always_on_L1_9287_1_1,
- - ARRAY_SIZE(ar9287PciePhy_clkreq_always_on_L1_9287_1_1),
- - 2);
- - } else if (AR_SREV_9287_10_OR_LATER(ah)) {
- - INIT_INI_ARRAY(&ah->iniModes, ar9287Modes_9287_1_0,
- - ARRAY_SIZE(ar9287Modes_9287_1_0), 6);
- - INIT_INI_ARRAY(&ah->iniCommon, ar9287Common_9287_1_0,
- - ARRAY_SIZE(ar9287Common_9287_1_0), 2);
- -
- - if (ah->config.pcie_clock_req)
- - INIT_INI_ARRAY(&ah->iniPcieSerdes,
- - ar9287PciePhy_clkreq_off_L1_9287_1_0,
- - ARRAY_SIZE(ar9287PciePhy_clkreq_off_L1_9287_1_0), 2);
- - else
- - INIT_INI_ARRAY(&ah->iniPcieSerdes,
- - ar9287PciePhy_clkreq_always_on_L1_9287_1_0,
- - ARRAY_SIZE(ar9287PciePhy_clkreq_always_on_L1_9287_1_0),
- - 2);
- - } else if (AR_SREV_9285_12_OR_LATER(ah)) {
- -
- -
- - INIT_INI_ARRAY(&ah->iniModes, ar9285Modes_9285_1_2,
- - ARRAY_SIZE(ar9285Modes_9285_1_2), 6);
- - INIT_INI_ARRAY(&ah->iniCommon, ar9285Common_9285_1_2,
- - ARRAY_SIZE(ar9285Common_9285_1_2), 2);
- -
- - if (ah->config.pcie_clock_req) {
- - INIT_INI_ARRAY(&ah->iniPcieSerdes,
- - ar9285PciePhy_clkreq_off_L1_9285_1_2,
- - ARRAY_SIZE(ar9285PciePhy_clkreq_off_L1_9285_1_2), 2);
- - } else {
- - INIT_INI_ARRAY(&ah->iniPcieSerdes,
- - ar9285PciePhy_clkreq_always_on_L1_9285_1_2,
- - ARRAY_SIZE(ar9285PciePhy_clkreq_always_on_L1_9285_1_2),
- - 2);
- - }
- - } else if (AR_SREV_9285_10_OR_LATER(ah)) {
- - INIT_INI_ARRAY(&ah->iniModes, ar9285Modes_9285,
- - ARRAY_SIZE(ar9285Modes_9285), 6);
- - INIT_INI_ARRAY(&ah->iniCommon, ar9285Common_9285,
- - ARRAY_SIZE(ar9285Common_9285), 2);
- -
- - if (ah->config.pcie_clock_req) {
- - INIT_INI_ARRAY(&ah->iniPcieSerdes,
- - ar9285PciePhy_clkreq_off_L1_9285,
- - ARRAY_SIZE(ar9285PciePhy_clkreq_off_L1_9285), 2);
- - } else {
- - INIT_INI_ARRAY(&ah->iniPcieSerdes,
- - ar9285PciePhy_clkreq_always_on_L1_9285,
- - ARRAY_SIZE(ar9285PciePhy_clkreq_always_on_L1_9285), 2);
- - }
- - } else if (AR_SREV_9280_20_OR_LATER(ah)) {
- - INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280_2,
- - ARRAY_SIZE(ar9280Modes_9280_2), 6);
- - INIT_INI_ARRAY(&ah->iniCommon, ar9280Common_9280_2,
- - ARRAY_SIZE(ar9280Common_9280_2), 2);
- -
- - if (ah->config.pcie_clock_req) {
- - INIT_INI_ARRAY(&ah->iniPcieSerdes,
- - ar9280PciePhy_clkreq_off_L1_9280,
- - ARRAY_SIZE(ar9280PciePhy_clkreq_off_L1_9280),2);
- - } else {
- - INIT_INI_ARRAY(&ah->iniPcieSerdes,
- - ar9280PciePhy_clkreq_always_on_L1_9280,
- - ARRAY_SIZE(ar9280PciePhy_clkreq_always_on_L1_9280), 2);
- - }
- - INIT_INI_ARRAY(&ah->iniModesAdditional,
- - ar9280Modes_fast_clock_9280_2,
- - ARRAY_SIZE(ar9280Modes_fast_clock_9280_2), 3);
- - } else if (AR_SREV_9280_10_OR_LATER(ah)) {
- - INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280,
- - ARRAY_SIZE(ar9280Modes_9280), 6);
- - INIT_INI_ARRAY(&ah->iniCommon, ar9280Common_9280,
- - ARRAY_SIZE(ar9280Common_9280), 2);
- - } else if (AR_SREV_9160_10_OR_LATER(ah)) {
- - INIT_INI_ARRAY(&ah->iniModes, ar5416Modes_9160,
- - ARRAY_SIZE(ar5416Modes_9160), 6);
- - INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9160,
- - ARRAY_SIZE(ar5416Common_9160), 2);
- - INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0_9160,
- - ARRAY_SIZE(ar5416Bank0_9160), 2);
- - INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain_9160,
- - ARRAY_SIZE(ar5416BB_RfGain_9160), 3);
- - INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1_9160,
- - ARRAY_SIZE(ar5416Bank1_9160), 2);
- - INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2_9160,
- - ARRAY_SIZE(ar5416Bank2_9160), 2);
- - INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3_9160,
- - ARRAY_SIZE(ar5416Bank3_9160), 3);
- - INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6_9160,
- - ARRAY_SIZE(ar5416Bank6_9160), 3);
- - INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9160,
- - ARRAY_SIZE(ar5416Bank6TPC_9160), 3);
- - INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7_9160,
- - ARRAY_SIZE(ar5416Bank7_9160), 2);
- - if (AR_SREV_9160_11(ah)) {
- - INIT_INI_ARRAY(&ah->iniAddac,
- - ar5416Addac_91601_1,
- - ARRAY_SIZE(ar5416Addac_91601_1), 2);
- - } else {
- - INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac_9160,
- - ARRAY_SIZE(ar5416Addac_9160), 2);
- - }
- - } else if (AR_SREV_9100_OR_LATER(ah)) {
- - INIT_INI_ARRAY(&ah->iniModes, ar5416Modes_9100,
- - ARRAY_SIZE(ar5416Modes_9100), 6);
- - INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9100,
- - ARRAY_SIZE(ar5416Common_9100), 2);
- - INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0_9100,
- - ARRAY_SIZE(ar5416Bank0_9100), 2);
- - INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain_9100,
- - ARRAY_SIZE(ar5416BB_RfGain_9100), 3);
- - INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1_9100,
- - ARRAY_SIZE(ar5416Bank1_9100), 2);
- - INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2_9100,
- - ARRAY_SIZE(ar5416Bank2_9100), 2);
- - INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3_9100,
- - ARRAY_SIZE(ar5416Bank3_9100), 3);
- - INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6_9100,
- - ARRAY_SIZE(ar5416Bank6_9100), 3);
- - INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9100,
- - ARRAY_SIZE(ar5416Bank6TPC_9100), 3);
- - INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7_9100,
- - ARRAY_SIZE(ar5416Bank7_9100), 2);
- - INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac_9100,
- - ARRAY_SIZE(ar5416Addac_9100), 2);
- - } else {
- - INIT_INI_ARRAY(&ah->iniModes, ar5416Modes,
- - ARRAY_SIZE(ar5416Modes), 6);
- - INIT_INI_ARRAY(&ah->iniCommon, ar5416Common,
- - ARRAY_SIZE(ar5416Common), 2);
- - INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0,
- - ARRAY_SIZE(ar5416Bank0), 2);
- - INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain,
- - ARRAY_SIZE(ar5416BB_RfGain), 3);
- - INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1,
- - ARRAY_SIZE(ar5416Bank1), 2);
- - INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2,
- - ARRAY_SIZE(ar5416Bank2), 2);
- - INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3,
- - ARRAY_SIZE(ar5416Bank3), 3);
- - INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6,
- - ARRAY_SIZE(ar5416Bank6), 3);
- - INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC,
- - ARRAY_SIZE(ar5416Bank6TPC), 3);
- - INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7,
- - ARRAY_SIZE(ar5416Bank7), 2);
- - INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac,
- - ARRAY_SIZE(ar5416Addac), 2);
- - }
- -}
- -
- -static void ath9k_hw_init_mode_gain_regs(struct ath_hw *ah)
- -{
- - if (AR_SREV_9287_11_OR_LATER(ah))
- - INIT_INI_ARRAY(&ah->iniModesRxGain,
- - ar9287Modes_rx_gain_9287_1_1,
- - ARRAY_SIZE(ar9287Modes_rx_gain_9287_1_1), 6);
- - else if (AR_SREV_9287_10(ah))
- - INIT_INI_ARRAY(&ah->iniModesRxGain,
- - ar9287Modes_rx_gain_9287_1_0,
- - ARRAY_SIZE(ar9287Modes_rx_gain_9287_1_0), 6);
- - else if (AR_SREV_9280_20(ah))
- - ath9k_hw_init_rxgain_ini(ah);
- -
- - if (AR_SREV_9287_11_OR_LATER(ah)) {
- - INIT_INI_ARRAY(&ah->iniModesTxGain,
- - ar9287Modes_tx_gain_9287_1_1,
- - ARRAY_SIZE(ar9287Modes_tx_gain_9287_1_1), 6);
- - } else if (AR_SREV_9287_10(ah)) {
- - INIT_INI_ARRAY(&ah->iniModesTxGain,
- - ar9287Modes_tx_gain_9287_1_0,
- - ARRAY_SIZE(ar9287Modes_tx_gain_9287_1_0), 6);
- - } else if (AR_SREV_9280_20(ah)) {
- - ath9k_hw_init_txgain_ini(ah);
- - } else if (AR_SREV_9285_12_OR_LATER(ah)) {
- - u32 txgain_type = ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE);
- -
- - /* txgain table */
- - if (txgain_type == AR5416_EEP_TXGAIN_HIGH_POWER) {
- - if (AR_SREV_9285E_20(ah)) {
- - INIT_INI_ARRAY(&ah->iniModesTxGain,
- - ar9285Modes_XE2_0_high_power,
- - ARRAY_SIZE(
- - ar9285Modes_XE2_0_high_power), 6);
- - } else {
- - INIT_INI_ARRAY(&ah->iniModesTxGain,
- - ar9285Modes_high_power_tx_gain_9285_1_2,
- - ARRAY_SIZE(
- - ar9285Modes_high_power_tx_gain_9285_1_2), 6);
- - }
- - } else {
- - if (AR_SREV_9285E_20(ah)) {
- - INIT_INI_ARRAY(&ah->iniModesTxGain,
- - ar9285Modes_XE2_0_normal_power,
- - ARRAY_SIZE(
- - ar9285Modes_XE2_0_normal_power), 6);
- - } else {
- - INIT_INI_ARRAY(&ah->iniModesTxGain,
- - ar9285Modes_original_tx_gain_9285_1_2,
- - ARRAY_SIZE(
- - ar9285Modes_original_tx_gain_9285_1_2), 6);
- - }
- - }
- - }
- -}
- -
- -static void ath9k_hw_init_eeprom_fix(struct ath_hw *ah)
- +static void ath9k_hw_attach_ops(struct ath_hw *ah)
- {
- - struct base_eep_header *pBase = &(ah->eeprom.def.baseEepHeader);
- - struct ath_common *common = ath9k_hw_common(ah);
- -
- - ah->need_an_top2_fixup = (ah->hw_version.devid == AR9280_DEVID_PCI) &&
- - (ah->eep_map != EEP_MAP_4KBITS) &&
- - ((pBase->version & 0xff) > 0x0a) &&
- - (pBase->pwdclkind == 0);
- -
- - if (ah->need_an_top2_fixup)
- - ath_print(common, ATH_DBG_EEPROM,
- - "needs fixup for AR_AN_TOP2 register\n");
- + if (AR_SREV_9300_20_OR_LATER(ah))
- + ar9003_hw_attach_ops(ah);
- + else
- + ar9002_hw_attach_ops(ah);
- }
-
- -int ath9k_hw_init(struct ath_hw *ah)
- +/* Called for all hardware families */
- +static int __ath9k_hw_init(struct ath_hw *ah)
- {
- struct ath_common *common = ath9k_hw_common(ah);
- int r = 0;
-
- - if (common->bus_ops->ath_bus_type != ATH_USB) {
- - if (!ath9k_hw_devid_supported(ah->hw_version.devid)) {
- - ath_print(common, ATH_DBG_FATAL,
- - "Unsupported device ID: 0x%0x\n",
- - ah->hw_version.devid);
- - return -EOPNOTSUPP;
- - }
- - }
- -
- - ath9k_hw_init_defaults(ah);
- - ath9k_hw_init_config(ah);
- + if (ah->hw_version.devid == AR5416_AR9100_DEVID)
- + ah->hw_version.macVersion = AR_SREV_VERSION_9100;
-
- if (!ath9k_hw_set_reset_reg(ah, ATH9K_RESET_POWER_ON)) {
- ath_print(common, ATH_DBG_FATAL,
- @@ -878,6 +500,11 @@ int ath9k_hw_init(struct ath_hw *ah)
- return -EIO;
- }
-
- + ath9k_hw_init_defaults(ah);
- + ath9k_hw_init_config(ah);
- +
- + ath9k_hw_attach_ops(ah);
- +
- if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE)) {
- ath_print(common, ATH_DBG_FATAL, "Couldn't wakeup chip\n");
- return -EIO;
- @@ -902,7 +529,7 @@ int ath9k_hw_init(struct ath_hw *ah)
- else
- ah->config.max_txtrig_level = MAX_TX_FIFO_THRESHOLD;
-
- - if (!ath9k_hw_macversion_supported(ah->hw_version.macVersion)) {
- + if (!ath9k_hw_macversion_supported(ah)) {
- ath_print(common, ATH_DBG_FATAL,
- "Mac Chip Rev 0x%02x.%x is not supported by "
- "this driver\n", ah->hw_version.macVersion,
- @@ -910,28 +537,19 @@ int ath9k_hw_init(struct ath_hw *ah)
- return -EOPNOTSUPP;
- }
-
- - if (AR_SREV_9100(ah)) {
- - ah->iq_caldata.calData = &iq_cal_multi_sample;
- - ah->supp_cals = IQ_MISMATCH_CAL;
- - ah->is_pciexpress = false;
- - }
- -
- - if (AR_SREV_9271(ah))
- + if (AR_SREV_9271(ah) || AR_SREV_9100(ah))
- ah->is_pciexpress = false;
-
- ah->hw_version.phyRev = REG_READ(ah, AR_PHY_CHIP_ID);
- -
- ath9k_hw_init_cal_settings(ah);
-
- ah->ani_function = ATH9K_ANI_ALL;
- - if (AR_SREV_9280_10_OR_LATER(ah)) {
- + if (AR_SREV_9280_10_OR_LATER(ah))
- ah->ani_function &= ~ATH9K_ANI_NOISE_IMMUNITY_LEVEL;
- - ah->ath9k_hw_rf_set_freq = &ath9k_hw_ar9280_set_channel;
- - ah->ath9k_hw_spur_mitigate_freq = &ath9k_hw_9280_spur_mitigate;
- - } else {
- - ah->ath9k_hw_rf_set_freq = &ath9k_hw_set_channel;
- - ah->ath9k_hw_spur_mitigate_freq = &ath9k_hw_spur_mitigate;
- - }
- +
- + /* this is still being tested */
- + if (AR_SREV_9300_20_OR_LATER(ah))
- + ah->ani_function = 0;
-
- ath9k_hw_init_mode_regs(ah);
-
- @@ -940,15 +558,8 @@ int ath9k_hw_init(struct ath_hw *ah)
- else
- ath9k_hw_disablepcie(ah);
-
- - /* Support for Japan ch.14 (2484) spread */
- - if (AR_SREV_9287_11_OR_LATER(ah)) {
- - INIT_INI_ARRAY(&ah->iniCckfirNormal,
- - ar9287Common_normal_cck_fir_coeff_92871_1,
- - ARRAY_SIZE(ar9287Common_normal_cck_fir_coeff_92871_1), 2);
- - INIT_INI_ARRAY(&ah->iniCckfirJapan2484,
- - ar9287Common_japan_2484_cck_fir_coeff_92871_1,
- - ARRAY_SIZE(ar9287Common_japan_2484_cck_fir_coeff_92871_1), 2);
- - }
- + if (!AR_SREV_9300_20_OR_LATER(ah))
- + ar9002_hw_cck_chan14_spread(ah);
-
- r = ath9k_hw_post_init(ah);
- if (r)
- @@ -959,8 +570,6 @@ int ath9k_hw_init(struct ath_hw *ah)
- if (r)
- return r;
-
- - ath9k_hw_init_eeprom_fix(ah);
- -
- r = ath9k_hw_init_macaddr(ah);
- if (r) {
- ath_print(common, ATH_DBG_FATAL,
- @@ -973,6 +582,9 @@ int ath9k_hw_init(struct ath_hw *ah)
- else
- ah->tx_trig_level = (AR_FTRIG_512B >> AR_FTRIG_S);
-
- + if (AR_SREV_9300_20_OR_LATER(ah))
- + ar9003_hw_set_nf_limits(ah);
- +
- ath9k_init_nfcal_hist_buffer(ah);
-
- common->state = ATH_HW_INITIALIZED;
- @@ -980,21 +592,45 @@ int ath9k_hw_init(struct ath_hw *ah)
- return 0;
- }
-
- -static void ath9k_hw_init_bb(struct ath_hw *ah,
- - struct ath9k_channel *chan)
- +int ath9k_hw_init(struct ath_hw *ah)
- {
- - u32 synthDelay;
- + int ret;
- + struct ath_common *common = ath9k_hw_common(ah);
-
- - synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY;
- - if (IS_CHAN_B(chan))
- - synthDelay = (4 * synthDelay) / 22;
- - else
- - synthDelay /= 10;
- + /* These are all the AR5008/AR9001/AR9002 hardware family of chipsets */
- + switch (ah->hw_version.devid) {
- + case AR5416_DEVID_PCI:
- + case AR5416_DEVID_PCIE:
- + case AR5416_AR9100_DEVID:
- + case AR9160_DEVID_PCI:
- + case AR9280_DEVID_PCI:
- + case AR9280_DEVID_PCIE:
- + case AR9285_DEVID_PCIE:
- + case AR9287_DEVID_PCI:
- + case AR9287_DEVID_PCIE:
- + case AR2427_DEVID_PCIE:
- + case AR9300_DEVID_PCIE:
- + break;
- + default:
- + if (common->bus_ops->ath_bus_type == ATH_USB)
- + break;
- + ath_print(common, ATH_DBG_FATAL,
- + "Hardware device ID 0x%04x not supported\n",
- + ah->hw_version.devid);
- + return -EOPNOTSUPP;
- + }
-
- - REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN);
- + ret = __ath9k_hw_init(ah);
- + if (ret) {
- + ath_print(common, ATH_DBG_FATAL,
- + "Unable to initialize hardware; "
- + "initialization status: %d\n", ret);
- + return ret;
- + }
-
- - udelay(synthDelay + BASE_ACTIVATE_DELAY);
- + return 0;
- }
- +EXPORT_SYMBOL(ath9k_hw_init);
-
- static void ath9k_hw_init_qos(struct ath_hw *ah)
- {
- @@ -1016,64 +652,8 @@ static void ath9k_hw_init_qos(struct ath
- static void ath9k_hw_init_pll(struct ath_hw *ah,
- struct ath9k_channel *chan)
- {
- - u32 pll;
- + u32 pll = ath9k_hw_compute_pll_control(ah, chan);
-
- - if (AR_SREV_9100(ah)) {
- - if (chan && IS_CHAN_5GHZ(chan))
- - pll = 0x1450;
- - else
- - pll = 0x1458;
- - } else {
- - if (AR_SREV_9280_10_OR_LATER(ah)) {
- - pll = SM(0x5, AR_RTC_9160_PLL_REFDIV);
- -
- - if (chan && IS_CHAN_HALF_RATE(chan))
- - pll |= SM(0x1, AR_RTC_9160_PLL_CLKSEL);
- - else if (chan && IS_CHAN_QUARTER_RATE(chan))
- - pll |= SM(0x2, AR_RTC_9160_PLL_CLKSEL);
- -
- - if (chan && IS_CHAN_5GHZ(chan)) {
- - pll |= SM(0x28, AR_RTC_9160_PLL_DIV);
- -
- -
- - if (AR_SREV_9280_20(ah)) {
- - if (((chan->channel % 20) == 0)
- - || ((chan->channel % 10) == 0))
- - pll = 0x2850;
- - else
- - pll = 0x142c;
- - }
- - } else {
- - pll |= SM(0x2c, AR_RTC_9160_PLL_DIV);
- - }
- -
- - } else if (AR_SREV_9160_10_OR_LATER(ah)) {
- -
- - pll = SM(0x5, AR_RTC_9160_PLL_REFDIV);
- -
- - if (chan && IS_CHAN_HALF_RATE(chan))
- - pll |= SM(0x1, AR_RTC_9160_PLL_CLKSEL);
- - else if (chan && IS_CHAN_QUARTER_RATE(chan))
- - pll |= SM(0x2, AR_RTC_9160_PLL_CLKSEL);
- -
- - if (chan && IS_CHAN_5GHZ(chan))
- - pll |= SM(0x50, AR_RTC_9160_PLL_DIV);
- - else
- - pll |= SM(0x58, AR_RTC_9160_PLL_DIV);
- - } else {
- - pll = AR_RTC_PLL_REFDIV_5 | AR_RTC_PLL_DIV2;
- -
- - if (chan && IS_CHAN_HALF_RATE(chan))
- - pll |= SM(0x1, AR_RTC_PLL_CLKSEL);
- - else if (chan && IS_CHAN_QUARTER_RATE(chan))
- - pll |= SM(0x2, AR_RTC_PLL_CLKSEL);
- -
- - if (chan && IS_CHAN_5GHZ(chan))
- - pll |= SM(0xa, AR_RTC_PLL_DIV);
- - else
- - pll |= SM(0xb, AR_RTC_PLL_DIV);
- - }
- - }
- REG_WRITE(ah, AR_RTC_PLL_CONTROL, pll);
-
- /* Switch the core clock for ar9271 to 117Mhz */
- @@ -1087,43 +667,6 @@ static void ath9k_hw_init_pll(struct ath
- REG_WRITE(ah, AR_RTC_SLEEP_CLK, AR_RTC_FORCE_DERIVED_CLK);
- }
-
- -static void ath9k_hw_init_chain_masks(struct ath_hw *ah)
- -{
- - int rx_chainmask, tx_chainmask;
- -
- - rx_chainmask = ah->rxchainmask;
- - tx_chainmask = ah->txchainmask;
- -
- - switch (rx_chainmask) {
- - case 0x5:
- - REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
- - AR_PHY_SWAP_ALT_CHAIN);
- - case 0x3:
- - if (ah->hw_version.macVersion == AR_SREV_REVISION_5416_10) {
- - REG_WRITE(ah, AR_PHY_RX_CHAINMASK, 0x7);
- - REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, 0x7);
- - break;
- - }
- - case 0x1:
- - case 0x2:
- - case 0x7:
- - REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx_chainmask);
- - REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx_chainmask);
- - break;
- - default:
- - break;
- - }
- -
- - REG_WRITE(ah, AR_SELFGEN_MASK, tx_chainmask);
- - if (tx_chainmask == 0x5) {
- - REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
- - AR_PHY_SWAP_ALT_CHAIN);
- - }
- - if (AR_SREV_9100(ah))
- - REG_WRITE(ah, AR_PHY_ANALOG_SWAP,
- - REG_READ(ah, AR_PHY_ANALOG_SWAP) | 0x00000001);
- -}
- -
- static void ath9k_hw_init_interrupt_masks(struct ath_hw *ah,
- enum nl80211_iftype opmode)
- {
- @@ -1133,12 +676,24 @@ static void ath9k_hw_init_interrupt_mask
- AR_IMR_RXORN |
- AR_IMR_BCNMISC;
-
- - if (ah->config.rx_intr_mitigation)
- - imr_reg |= AR_IMR_RXINTM | AR_IMR_RXMINTR;
- - else
- - imr_reg |= AR_IMR_RXOK;
- + if (AR_SREV_9300_20_OR_LATER(ah)) {
- + imr_reg |= AR_IMR_RXOK_HP;
- + if (ah->config.rx_intr_mitigation)
- + imr_reg |= AR_IMR_RXINTM | AR_IMR_RXMINTR;
- + else
- + imr_reg |= AR_IMR_RXOK_LP;
-
- - imr_reg |= AR_IMR_TXOK;
- + } else {
- + if (ah->config.rx_intr_mitigation)
- + imr_reg |= AR_IMR_RXINTM | AR_IMR_RXMINTR;
- + else
- + imr_reg |= AR_IMR_RXOK;
- + }
- +
- + if (ah->config.tx_intr_mitigation)
- + imr_reg |= AR_IMR_TXINTM | AR_IMR_TXMINTR;
- + else
- + imr_reg |= AR_IMR_TXOK;
-
- if (opmode == NL80211_IFTYPE_AP)
- imr_reg |= AR_IMR_MIB;
- @@ -1152,6 +707,13 @@ static void ath9k_hw_init_interrupt_mask
- REG_WRITE(ah, AR_INTR_SYNC_ENABLE, AR_INTR_SYNC_DEFAULT);
- REG_WRITE(ah, AR_INTR_SYNC_MASK, 0);
- }
- +
- + if (AR_SREV_9300_20_OR_LATER(ah)) {
- + REG_WRITE(ah, AR_INTR_PRIO_ASYNC_ENABLE, 0);
- + REG_WRITE(ah, AR_INTR_PRIO_ASYNC_MASK, 0);
- + REG_WRITE(ah, AR_INTR_PRIO_SYNC_ENABLE, 0);
- + REG_WRITE(ah, AR_INTR_PRIO_SYNC_MASK, 0);
- + }
- }
-
- static void ath9k_hw_setslottime(struct ath_hw *ah, u32 us)
- @@ -1220,305 +782,67 @@ void ath9k_hw_init_global_settings(struc
- * timeout issues in other cases as well.
- */
- if (conf->channel && conf->channel->band == IEEE80211_BAND_2GHZ)
- - acktimeout += 64 - sifstime - ah->slottime;
- -
- - ath9k_hw_setslottime(ah, slottime);
- - ath9k_hw_set_ack_timeout(ah, acktimeout);
- - ath9k_hw_set_cts_timeout(ah, acktimeout);
- - if (ah->globaltxtimeout != (u32) -1)
- - ath9k_hw_set_global_txtimeout(ah, ah->globaltxtimeout);
- -}
- -EXPORT_SYMBOL(ath9k_hw_init_global_settings);
- -
- -void ath9k_hw_deinit(struct ath_hw *ah)
- -{
- - struct ath_common *common = ath9k_hw_common(ah);
- -
- - if (common->state < ATH_HW_INITIALIZED)
- - goto free_hw;
- -
- - if (!AR_SREV_9100(ah))
- - ath9k_hw_ani_disable(ah);
- -
- - ath9k_hw_setpower(ah, ATH9K_PM_FULL_SLEEP);
- -
- -free_hw:
- - if (!AR_SREV_9280_10_OR_LATER(ah))
- - ath9k_hw_rf_free_ext_banks(ah);
- -}
- -EXPORT_SYMBOL(ath9k_hw_deinit);
- -
- -/*******/
- -/* INI */
- -/*******/
- -
- -static void ath9k_hw_override_ini(struct ath_hw *ah,
- - struct ath9k_channel *chan)
- -{
- - u32 val;
- -
- - /*
- - * Set the RX_ABORT and RX_DIS and clear if off only after
- - * RXE is set for MAC. This prevents frames with corrupted
- - * descriptor status.
- - */
- - REG_SET_BIT(ah, AR_DIAG_SW, (AR_DIAG_RX_DIS | AR_DIAG_RX_ABORT));
- -
- - if (AR_SREV_9280_10_OR_LATER(ah)) {
- - val = REG_READ(ah, AR_PCU_MISC_MODE2);
- -
- - if (!AR_SREV_9271(ah))
- - val &= ~AR_PCU_MISC_MODE2_HWWAR1;
- -
- - if (AR_SREV_9287_10_OR_LATER(ah))
- - val = val & (~AR_PCU_MISC_MODE2_HWWAR2);
- -
- - REG_WRITE(ah, AR_PCU_MISC_MODE2, val);
- - }
- -
- - if (!AR_SREV_5416_20_OR_LATER(ah) ||
- - AR_SREV_9280_10_OR_LATER(ah))
- - return;
- - /*
- - * Disable BB clock gating
- - * Necessary to avoid issues on AR5416 2.0
- - */
- - REG_WRITE(ah, 0x9800 + (651 << 2), 0x11);
- -
- - /*
- - * Disable RIFS search on some chips to avoid baseband
- - * hang issues.
- - */
- - if (AR_SREV_9100(ah) || AR_SREV_9160(ah)) {
- - val = REG_READ(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS);
- - val &= ~AR_PHY_RIFS_INIT_DELAY;
- - REG_WRITE(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS, val);
- - }
- -}
- -
- -static void ath9k_olc_init(struct ath_hw *ah)
- -{
- - u32 i;
- -
- - if (OLC_FOR_AR9287_10_LATER) {
- - REG_SET_BIT(ah, AR_PHY_TX_PWRCTRL9,
- - AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL);
- - ath9k_hw_analog_shift_rmw(ah, AR9287_AN_TXPC0,
- - AR9287_AN_TXPC0_TXPCMODE,
- - AR9287_AN_TXPC0_TXPCMODE_S,
- - AR9287_AN_TXPC0_TXPCMODE_TEMPSENSE);
- - udelay(100);
- - } else {
- - for (i = 0; i < AR9280_TX_GAIN_TABLE_SIZE; i++)
- - ah->originalGain[i] =
- - MS(REG_READ(ah, AR_PHY_TX_GAIN_TBL1 + i * 4),
- - AR_PHY_TX_GAIN);
- - ah->PDADCdelta = 0;
- - }
- -}
- -
- -static u32 ath9k_regd_get_ctl(struct ath_regulatory *reg,
- - struct ath9k_channel *chan)
- -{
- - u32 ctl = ath_regd_get_band_ctl(reg, chan->chan->band);
- -
- - if (IS_CHAN_B(chan))
- - ctl |= CTL_11B;
- - else if (IS_CHAN_G(chan))
- - ctl |= CTL_11G;
- - else
- - ctl |= CTL_11A;
- -
- - return ctl;
- -}
- -
- -static int ath9k_hw_process_ini(struct ath_hw *ah,
- - struct ath9k_channel *chan)
- -{
- - struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
- - int i, regWrites = 0;
- - struct ieee80211_channel *channel = chan->chan;
- - u32 modesIndex, freqIndex;
- -
- - switch (chan->chanmode) {
- - case CHANNEL_A:
- - case CHANNEL_A_HT20:
- - modesIndex = 1;
- - freqIndex = 1;
- - break;
- - case CHANNEL_A_HT40PLUS:
- - case CHANNEL_A_HT40MINUS:
- - modesIndex = 2;
- - freqIndex = 1;
- - break;
- - case CHANNEL_G:
- - case CHANNEL_G_HT20:
- - case CHANNEL_B:
- - modesIndex = 4;
- - freqIndex = 2;
- - break;
- - case CHANNEL_G_HT40PLUS:
- - case CHANNEL_G_HT40MINUS:
- - modesIndex = 3;
- - freqIndex = 2;
- - break;
- -
- - default:
- - return -EINVAL;
- - }
- -
- - /* Set correct baseband to analog shift setting to access analog chips */
- - REG_WRITE(ah, AR_PHY(0), 0x00000007);
- -
- - /* Write ADDAC shifts */
- - REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_EXTERNAL_RADIO);
- - ah->eep_ops->set_addac(ah, chan);
- -
- - if (AR_SREV_5416_22_OR_LATER(ah)) {
- - REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites);
- - } else {
- - struct ar5416IniArray temp;
- - u32 addacSize =
- - sizeof(u32) * ah->iniAddac.ia_rows *
- - ah->iniAddac.ia_columns;
- -
- - /* For AR5416 2.0/2.1 */
- - memcpy(ah->addac5416_21,
- - ah->iniAddac.ia_array, addacSize);
- -
- - /* override CLKDRV value at [row, column] = [31, 1] */
- - (ah->addac5416_21)[31 * ah->iniAddac.ia_columns + 1] = 0;
- -
- - temp.ia_array = ah->addac5416_21;
- - temp.ia_columns = ah->iniAddac.ia_columns;
- - temp.ia_rows = ah->iniAddac.ia_rows;
- - REG_WRITE_ARRAY(&temp, 1, regWrites);
- - }
- -
- - REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC);
- -
- - for (i = 0; i < ah->iniModes.ia_rows; i++) {
- - u32 reg = INI_RA(&ah->iniModes, i, 0);
- - u32 val = INI_RA(&ah->iniModes, i, modesIndex);
- -
- - if (reg == AR_AN_TOP2 && ah->need_an_top2_fixup)
- - val &= ~AR_AN_TOP2_PWDCLKIND;
- -
- - REG_WRITE(ah, reg, val);
- -
- - if (reg >= 0x7800 && reg < 0x78a0
- - && ah->config.analog_shiftreg) {
- - udelay(100);
- - }
- -
- - DO_DELAY(regWrites);
- - }
- -
- - if (AR_SREV_9280(ah) || AR_SREV_9287_10_OR_LATER(ah))
- - REG_WRITE_ARRAY(&ah->iniModesRxGain, modesIndex, regWrites);
- -
- - if (AR_SREV_9280(ah) || AR_SREV_9285_12_OR_LATER(ah) ||
- - AR_SREV_9287_10_OR_LATER(ah))
- - REG_WRITE_ARRAY(&ah->iniModesTxGain, modesIndex, regWrites);
- -
- - if (AR_SREV_9271_10(ah))
- - REG_WRITE_ARRAY(&ah->iniModes_9271_1_0_only,
- - modesIndex, regWrites);
- -
- - /* Write common array parameters */
- - for (i = 0; i < ah->iniCommon.ia_rows; i++) {
- - u32 reg = INI_RA(&ah->iniCommon, i, 0);
- - u32 val = INI_RA(&ah->iniCommon, i, 1);
- -
- - REG_WRITE(ah, reg, val);
- + acktimeout += 64 - sifstime - ah->slottime;
-
- - if (reg >= 0x7800 && reg < 0x78a0
- - && ah->config.analog_shiftreg) {
- - udelay(100);
- - }
- + ath9k_hw_setslottime(ah, slottime);
- + ath9k_hw_set_ack_timeout(ah, acktimeout);
- + ath9k_hw_set_cts_timeout(ah, acktimeout);
- + if (ah->globaltxtimeout != (u32) -1)
- + ath9k_hw_set_global_txtimeout(ah, ah->globaltxtimeout);
- +}
- +EXPORT_SYMBOL(ath9k_hw_init_global_settings);
-
- - DO_DELAY(regWrites);
- - }
- +void ath9k_hw_deinit(struct ath_hw *ah)
- +{
- + struct ath_common *common = ath9k_hw_common(ah);
-
- - if (AR_SREV_9271(ah)) {
- - if (ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE) == 1)
- - REG_WRITE_ARRAY(&ah->iniModes_high_power_tx_gain_9271,
- - modesIndex, regWrites);
- - else
- - REG_WRITE_ARRAY(&ah->iniModes_normal_power_tx_gain_9271,
- - modesIndex, regWrites);
- - }
- + if (common->state < ATH_HW_INITIALIZED)
- + goto free_hw;
-
- - ath9k_hw_write_regs(ah, freqIndex, regWrites);
- + if (!AR_SREV_9100(ah))
- + ath9k_hw_ani_disable(ah);
-
- - if (AR_SREV_9280_20(ah) && IS_CHAN_A_5MHZ_SPACED(chan)) {
- - REG_WRITE_ARRAY(&ah->iniModesAdditional, modesIndex,
- - regWrites);
- - }
- + ath9k_hw_setpower(ah, ATH9K_PM_FULL_SLEEP);
-
- - ath9k_hw_override_ini(ah, chan);
- - ath9k_hw_set_regs(ah, chan);
- - ath9k_hw_init_chain_masks(ah);
- +free_hw:
- + ath9k_hw_rf_free_ext_banks(ah);
- +}
- +EXPORT_SYMBOL(ath9k_hw_deinit);
-
- - if (OLC_FOR_AR9280_20_LATER)
- - ath9k_olc_init(ah);
- +/*******/
- +/* INI */
- +/*******/
-
- - /* Set TX power */
- - ah->eep_ops->set_txpower(ah, chan,
- - ath9k_regd_get_ctl(regulatory, chan),
- - channel->max_antenna_gain * 2,
- - channel->max_power * 2,
- - min((u32) MAX_RATE_POWER,
- - (u32) regulatory->power_limit));
- +u32 ath9k_regd_get_ctl(struct ath_regulatory *reg, struct ath9k_channel *chan)
- +{
- + u32 ctl = ath_regd_get_band_ctl(reg, chan->chan->band);
-
- - /* Write analog registers */
- - if (!ath9k_hw_set_rf_regs(ah, chan, freqIndex)) {
- - ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
- - "ar5416SetRfRegs failed\n");
- - return -EIO;
- - }
- + if (IS_CHAN_B(chan))
- + ctl |= CTL_11B;
- + else if (IS_CHAN_G(chan))
- + ctl |= CTL_11G;
- + else
- + ctl |= CTL_11A;
-
- - return 0;
- + return ctl;
- }
-
- /****************************************/
- /* Reset and Channel Switching Routines */
- /****************************************/
-
- -static void ath9k_hw_set_rfmode(struct ath_hw *ah, struct ath9k_channel *chan)
- -{
- - u32 rfMode = 0;
- -
- - if (chan == NULL)
- - return;
- -
- - rfMode |= (IS_CHAN_B(chan) || IS_CHAN_G(chan))
- - ? AR_PHY_MODE_DYNAMIC : AR_PHY_MODE_OFDM;
- -
- - if (!AR_SREV_9280_10_OR_LATER(ah))
- - rfMode |= (IS_CHAN_5GHZ(chan)) ?
- - AR_PHY_MODE_RF5GHZ : AR_PHY_MODE_RF2GHZ;
- -
- - if (AR_SREV_9280_20(ah) && IS_CHAN_A_5MHZ_SPACED(chan))
- - rfMode |= (AR_PHY_MODE_DYNAMIC | AR_PHY_MODE_DYN_CCK_DISABLE);
- -
- - REG_WRITE(ah, AR_PHY_MODE, rfMode);
- -}
- -
- -static void ath9k_hw_mark_phy_inactive(struct ath_hw *ah)
- -{
- - REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_DIS);
- -}
- -
- static inline void ath9k_hw_set_dma(struct ath_hw *ah)
- {
- + struct ath_common *common = ath9k_hw_common(ah);
- u32 regval;
-
- /*
- * set AHB_MODE not to do cacheline prefetches
- */
- - regval = REG_READ(ah, AR_AHB_MODE);
- - REG_WRITE(ah, AR_AHB_MODE, regval | AR_AHB_PREFETCH_RD_EN);
- + if (!AR_SREV_9300_20_OR_LATER(ah)) {
- + regval = REG_READ(ah, AR_AHB_MODE);
- + REG_WRITE(ah, AR_AHB_MODE, regval | AR_AHB_PREFETCH_RD_EN);
- + }
-
- /*
- * let mac dma reads be in 128 byte chunks
- @@ -1531,7 +855,8 @@ static inline void ath9k_hw_set_dma(stru
- * The initial value depends on whether aggregation is enabled, and is
- * adjusted whenever underruns are detected.
- */
- - REG_RMW_FIELD(ah, AR_TXCFG, AR_FTRIG, ah->tx_trig_level);
- + if (!AR_SREV_9300_20_OR_LATER(ah))
- + REG_RMW_FIELD(ah, AR_TXCFG, AR_FTRIG, ah->tx_trig_level);
-
- /*
- * let mac dma writes be in 128 byte chunks
- @@ -1544,6 +869,14 @@ static inline void ath9k_hw_set_dma(stru
- */
- REG_WRITE(ah, AR_RXFIFO_CFG, 0x200);
-
- + if (AR_SREV_9300_20_OR_LATER(ah)) {
- + REG_RMW_FIELD(ah, AR_RXBP_THRESH, AR_RXBP_THRESH_HP, 0x1);
- + REG_RMW_FIELD(ah, AR_RXBP_THRESH, AR_RXBP_THRESH_LP, 0x1);
- +
- + ath9k_hw_set_rx_bufsize(ah, common->rx_bufsize -
- + ah->caps.rx_status_len);
- + }
- +
- /*
- * reduce the number of usable entries in PCU TXBUF to avoid
- * wrap around issues.
- @@ -1559,6 +892,9 @@ static inline void ath9k_hw_set_dma(stru
- REG_WRITE(ah, AR_PCU_TXBUF_CTRL,
- AR_PCU_TXBUF_CTRL_USABLE_SIZE);
- }
- +
- + if (AR_SREV_9300_20_OR_LATER(ah))
- + ath9k_hw_reset_txstatus_ring(ah);
- }
-
- static void ath9k_hw_set_operating_mode(struct ath_hw *ah, int opmode)
- @@ -1586,10 +922,8 @@ static void ath9k_hw_set_operating_mode(
- }
- }
-
- -static inline void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah,
- - u32 coef_scaled,
- - u32 *coef_mantissa,
- - u32 *coef_exponent)
- +void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah, u32 coef_scaled,
- + u32 *coef_mantissa, u32 *coef_exponent)
- {
- u32 coef_exp, coef_man;
-
- @@ -1605,40 +939,6 @@ static inline void ath9k_hw_get_delta_sl
- *coef_exponent = coef_exp - 16;
- }
-
- -static void ath9k_hw_set_delta_slope(struct ath_hw *ah,
- - struct ath9k_channel *chan)
- -{
- - u32 coef_scaled, ds_coef_exp, ds_coef_man;
- - u32 clockMhzScaled = 0x64000000;
- - struct chan_centers centers;
- -
- - if (IS_CHAN_HALF_RATE(chan))
- - clockMhzScaled = clockMhzScaled >> 1;
- - else if (IS_CHAN_QUARTER_RATE(chan))
- - clockMhzScaled = clockMhzScaled >> 2;
- -
- - ath9k_hw_get_channel_centers(ah, chan, ¢ers);
- - coef_scaled = clockMhzScaled / centers.synth_center;
- -
- - ath9k_hw_get_delta_slope_vals(ah, coef_scaled, &ds_coef_man,
- - &ds_coef_exp);
- -
- - REG_RMW_FIELD(ah, AR_PHY_TIMING3,
- - AR_PHY_TIMING3_DSC_MAN, ds_coef_man);
- - REG_RMW_FIELD(ah, AR_PHY_TIMING3,
- - AR_PHY_TIMING3_DSC_EXP, ds_coef_exp);
- -
- - coef_scaled = (9 * coef_scaled) / 10;
- -
- - ath9k_hw_get_delta_slope_vals(ah, coef_scaled, &ds_coef_man,
- - &ds_coef_exp);
- -
- - REG_RMW_FIELD(ah, AR_PHY_HALFGI,
- - AR_PHY_HALFGI_DSC_MAN, ds_coef_man);
- - REG_RMW_FIELD(ah, AR_PHY_HALFGI,
- - AR_PHY_HALFGI_DSC_EXP, ds_coef_exp);
- -}
- -
- static bool ath9k_hw_set_reset(struct ath_hw *ah, int type)
- {
- u32 rst_flags;
- @@ -1663,11 +963,16 @@ static bool ath9k_hw_set_reset(struct at
- if (tmpReg &
- (AR_INTR_SYNC_LOCAL_TIMEOUT |
- AR_INTR_SYNC_RADM_CPL_TIMEOUT)) {
- + u32 val;
- REG_WRITE(ah, AR_INTR_SYNC_ENABLE, 0);
- - REG_WRITE(ah, AR_RC, AR_RC_AHB | AR_RC_HOSTIF);
- - } else {
- +
- + val = AR_RC_HOSTIF;
- + if (!AR_SREV_9300_20_OR_LATER(ah))
- + val |= AR_RC_AHB;
- + REG_WRITE(ah, AR_RC, val);
- +
- + } else if (!AR_SREV_9300_20_OR_LATER(ah))
- REG_WRITE(ah, AR_RC, AR_RC_AHB);
- - }
-
- rst_flags = AR_RTC_RC_MAC_WARM;
- if (type == ATH9K_RESET_COLD)
- @@ -1698,13 +1003,15 @@ static bool ath9k_hw_set_reset_power_on(
- REG_WRITE(ah, AR_RTC_FORCE_WAKE, AR_RTC_FORCE_WAKE_EN |
- AR_RTC_FORCE_WAKE_ON_INT);
-
- - if (!AR_SREV_9100(ah))
- + if (!AR_SREV_9100(ah) && !AR_SREV_9300_20_OR_LATER(ah))
- REG_WRITE(ah, AR_RC, AR_RC_AHB);
-
- REG_WRITE(ah, AR_RTC_RESET, 0);
- - udelay(2);
-
- - if (!AR_SREV_9100(ah))
- + if (!AR_SREV_9300_20_OR_LATER(ah))
- + udelay(2);
- +
- + if (!AR_SREV_9100(ah) && !AR_SREV_9300_20_OR_LATER(ah))
- REG_WRITE(ah, AR_RC, 0);
-
- REG_WRITE(ah, AR_RTC_RESET, 1);
- @@ -1740,34 +1047,6 @@ static bool ath9k_hw_set_reset_reg(struc
- }
- }
-
- -static void ath9k_hw_set_regs(struct ath_hw *ah, struct ath9k_channel *chan)
- -{
- - u32 phymode;
- - u32 enableDacFifo = 0;
- -
- - if (AR_SREV_9285_10_OR_LATER(ah))
- - enableDacFifo = (REG_READ(ah, AR_PHY_TURBO) &
- - AR_PHY_FC_ENABLE_DAC_FIFO);
- -
- - phymode = AR_PHY_FC_HT_EN | AR_PHY_FC_SHORT_GI_40
- - | AR_PHY_FC_SINGLE_HT_LTF1 | AR_PHY_FC_WALSH | enableDacFifo;
- -
- - if (IS_CHAN_HT40(chan)) {
- - phymode |= AR_PHY_FC_DYN2040_EN;
- -
- - if ((chan->chanmode == CHANNEL_A_HT40PLUS) ||
- - (chan->chanmode == CHANNEL_G_HT40PLUS))
- - phymode |= AR_PHY_FC_DYN2040_PRI_CH;
- -
- - }
- - REG_WRITE(ah, AR_PHY_TURBO, phymode);
- -
- - ath9k_hw_set11nmac2040(ah);
- -
- - REG_WRITE(ah, AR_GTXTO, 25 << AR_GTXTO_TIMEOUT_LIMIT_S);
- - REG_WRITE(ah, AR_CST, 0xF << AR_CST_TIMEOUT_LIMIT_S);
- -}
- -
- static bool ath9k_hw_chip_reset(struct ath_hw *ah,
- struct ath9k_channel *chan)
- {
- @@ -1793,7 +1072,7 @@ static bool ath9k_hw_channel_change(stru
- struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
- struct ath_common *common = ath9k_hw_common(ah);
- struct ieee80211_channel *channel = chan->chan;
- - u32 synthDelay, qnum;
- + u32 qnum;
- int r;
-
- for (qnum = 0; qnum < AR_NUM_QCU; qnum++) {
- @@ -1805,17 +1084,15 @@ static bool ath9k_hw_channel_change(stru
- }
- }
-
- - REG_WRITE(ah, AR_PHY_RFBUS_REQ, AR_PHY_RFBUS_REQ_EN);
- - if (!ath9k_hw_wait(ah, AR_PHY_RFBUS_GRANT, AR_PHY_RFBUS_GRANT_EN,
- - AR_PHY_RFBUS_GRANT_EN, AH_WAIT_TIMEOUT)) {
- + if (!ath9k_hw_rfbus_req(ah)) {
- ath_print(common, ATH_DBG_FATAL,
- "Could not kill baseband RX\n");
- return false;
- }
-
- - ath9k_hw_set_regs(ah, chan);
- + ath9k_hw_set_channel_regs(ah, chan);
-
- - r = ah->ath9k_hw_rf_set_freq(ah, chan);
- + r = ath9k_hw_rf_set_freq(ah, chan);
- if (r) {
- ath_print(common, ATH_DBG_FATAL,
- "Failed to set channel\n");
- @@ -1829,20 +1106,12 @@ static bool ath9k_hw_channel_change(stru
- min((u32) MAX_RATE_POWER,
- (u32) regulatory->power_limit));
-
- - synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY;
- - if (IS_CHAN_B(chan))
- - synthDelay = (4 * synthDelay) / 22;
- - else
- - synthDelay /= 10;
- -
- - udelay(synthDelay + BASE_ACTIVATE_DELAY);
- -
- - REG_WRITE(ah, AR_PHY_RFBUS_REQ, 0);
- + ath9k_hw_rfbus_done(ah);
-
- if (IS_CHAN_OFDM(chan) || IS_CHAN_HT(chan))
- ath9k_hw_set_delta_slope(ah, chan);
-
- - ah->ath9k_hw_spur_mitigate_freq(ah, chan);
- + ath9k_hw_spur_mitigate_freq(ah, chan);
-
- if (!chan->oneTimeCalsDone)
- chan->oneTimeCalsDone = true;
- @@ -1850,18 +1119,6 @@ static bool ath9k_hw_channel_change(stru
- return true;
- }
-
- -static void ath9k_enable_rfkill(struct ath_hw *ah)
- -{
- - REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL,
- - AR_GPIO_INPUT_EN_VAL_RFSILENT_BB);
- -
- - REG_CLR_BIT(ah, AR_GPIO_INPUT_MUX2,
- - AR_GPIO_INPUT_MUX2_RFSILENT);
- -
- - ath9k_hw_cfg_gpio_input(ah, ah->rfkill_gpio);
- - REG_SET_BIT(ah, AR_PHY_TEST, RFSILENT_BB);
- -}
- -
- int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
- bool bChannelChange)
- {
- @@ -1871,11 +1128,18 @@ int ath9k_hw_reset(struct ath_hw *ah, st
- u32 saveDefAntenna;
- u32 macStaId1;
- u64 tsf = 0;
- - int i, rx_chainmask, r;
- + int i, r;
-
- ah->txchainmask = common->tx_chainmask;
- ah->rxchainmask = common->rx_chainmask;
-
- + if (!ah->chip_fullsleep) {
- + ath9k_hw_abortpcurecv(ah);
- + if (!ath9k_hw_stopdmarecv(ah))
- + ath_print(common, ATH_DBG_XMIT,
- + "Failed to stop receive dma\n");
- + }
- +
- if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE))
- return -EIO;
-
- @@ -1943,16 +1207,6 @@ int ath9k_hw_reset(struct ath_hw *ah, st
- if (AR_SREV_9280_10_OR_LATER(ah))
- REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL, AR_GPIO_JTAG_DISABLE);
-
- - if (AR_SREV_9287_12_OR_LATER(ah)) {
- - /* Enable ASYNC FIFO */
- - REG_SET_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
- - AR_MAC_PCU_ASYNC_FIFO_REG3_DATAPATH_SEL);
- - REG_SET_BIT(ah, AR_PHY_MODE, AR_PHY_MODE_ASYNCFIFO);
- - REG_CLR_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
- - AR_MAC_PCU_ASYNC_FIFO_REG3_SOFT_RESET);
- - REG_SET_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
- - AR_MAC_PCU_ASYNC_FIFO_REG3_SOFT_RESET);
- - }
- r = ath9k_hw_process_ini(ah, chan);
- if (r)
- return r;
- @@ -1977,7 +1231,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
- if (IS_CHAN_OFDM(chan) || IS_CHAN_HT(chan))
- ath9k_hw_set_delta_slope(ah, chan);
-
- - ah->ath9k_hw_spur_mitigate_freq(ah, chan);
- + ath9k_hw_spur_mitigate_freq(ah, chan);
- ah->eep_ops->set_board_values(ah, chan);
-
- REG_WRITE(ah, AR_STA_ID0, get_unaligned_le32(common->macaddr));
- @@ -1999,7 +1253,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
-
- REG_WRITE(ah, AR_RSSI_THR, INIT_RSSI_THR);
-
- - r = ah->ath9k_hw_rf_set_freq(ah, chan);
- + r = ath9k_hw_rf_set_freq(ah, chan);
- if (r)
- return r;
-
- @@ -2018,25 +1272,9 @@ int ath9k_hw_reset(struct ath_hw *ah, st
-
- ath9k_hw_init_global_settings(ah);
-
- - if (AR_SREV_9287_12_OR_LATER(ah)) {
- - REG_WRITE(ah, AR_D_GBL_IFS_SIFS,
- - AR_D_GBL_IFS_SIFS_ASYNC_FIFO_DUR);
- - REG_WRITE(ah, AR_D_GBL_IFS_SLOT,
- - AR_D_GBL_IFS_SLOT_ASYNC_FIFO_DUR);
- - REG_WRITE(ah, AR_D_GBL_IFS_EIFS,
- - AR_D_GBL_IFS_EIFS_ASYNC_FIFO_DUR);
- -
- - REG_WRITE(ah, AR_TIME_OUT, AR_TIME_OUT_ACK_CTS_ASYNC_FIFO_DUR);
- - REG_WRITE(ah, AR_USEC, AR_USEC_ASYNC_FIFO_DUR);
- -
- - REG_SET_BIT(ah, AR_MAC_PCU_LOGIC_ANALYZER,
- - AR_MAC_PCU_LOGIC_ANALYZER_DISBUG20768);
- - REG_RMW_FIELD(ah, AR_AHB_MODE, AR_AHB_CUSTOM_BURST_EN,
- - AR_AHB_CUSTOM_BURST_ASYNC_FIFO_VAL);
- - }
- - if (AR_SREV_9287_12_OR_LATER(ah)) {
- - REG_SET_BIT(ah, AR_PCU_MISC_MODE2,
- - AR_PCU_MISC_MODE2_ENABLE_AGGWEP);
- + if (!AR_SREV_9300_20_OR_LATER(ah)) {
- + ar9002_hw_enable_async_fifo(ah);
- + ar9002_hw_enable_wep_aggregation(ah);
- }
-
- REG_WRITE(ah, AR_STA_ID1,
- @@ -2051,17 +1289,17 @@ int ath9k_hw_reset(struct ath_hw *ah, st
- REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_FIRST, 2000);
- }
-
- + if (ah->config.tx_intr_mitigation) {
- + REG_RMW_FIELD(ah, AR_TIMT, AR_TIMT_LAST, 300);
- + REG_RMW_FIELD(ah, AR_TIMT, AR_TIMT_FIRST, 750);
- + }
- +
- ath9k_hw_init_bb(ah, chan);
-
- if (!ath9k_hw_init_cal(ah, chan))
- return -EIO;
-
- - rx_chainmask = ah->rxchainmask;
- - if ((rx_chainmask == 0x5) || (rx_chainmask == 0x3)) {
- - REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx_chainmask);
- - REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx_chainmask);
- - }
- -
- + ath9k_hw_restore_chainmask(ah);
- REG_WRITE(ah, AR_CFG_LED, saveLedState | AR_CFG_SCLK_32KHZ);
-
- /*
- @@ -2093,6 +1331,11 @@ int ath9k_hw_reset(struct ath_hw *ah, st
- if (ah->btcoex_hw.enabled)
- ath9k_hw_btcoex_enable(ah);
-
- + if (AR_SREV_9300_20_OR_LATER(ah)) {
- + ath9k_hw_loadnf(ah, curchan);
- + ath9k_hw_start_nfcal(ah);
- + }
- +
- return 0;
- }
- EXPORT_SYMBOL(ath9k_hw_reset);
- @@ -2379,21 +1622,32 @@ EXPORT_SYMBOL(ath9k_hw_keyisvalid);
- /* Power Management (Chipset) */
- /******************************/
-
- +/*
- + * Notify Power Mgt is disabled in self-generated frames.
- + * If requested, force chip to sleep.
- + */
- static void ath9k_set_power_sleep(struct ath_hw *ah, int setChip)
- {
- REG_SET_BIT(ah, AR_STA_ID1, AR_STA_ID1_PWR_SAV);
- if (setChip) {
- + /* Clear the RTC force wake bit to allow the mac to go to sleep */
- REG_CLR_BIT(ah, AR_RTC_FORCE_WAKE,
- AR_RTC_FORCE_WAKE_EN);
- - if (!AR_SREV_9100(ah))
- + if (!AR_SREV_9100(ah) && !AR_SREV_9300_20_OR_LATER(ah))
- REG_WRITE(ah, AR_RC, AR_RC_AHB | AR_RC_HOSTIF);
-
- + /* Shutdown chip. Active low */
- if (!AR_SREV_5416(ah) && !AR_SREV_9271(ah))
- REG_CLR_BIT(ah, (AR_RTC_RESET),
- AR_RTC_RESET_EN);
- }
- }
-
- +/*
- + * Notify Power Management is enabled in self-generating
- + * frames. If request, set power mode of chip to
- + * auto/normal. Duration in units of 128us (1/8 TU).
- + */
- static void ath9k_set_power_network_sleep(struct ath_hw *ah, int setChip)
- {
- REG_SET_BIT(ah, AR_STA_ID1, AR_STA_ID1_PWR_SAV);
- @@ -2401,9 +1655,14 @@ static void ath9k_set_power_network_slee
- struct ath9k_hw_capabilities *pCap = &ah->caps;
-
- if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
- + /* Set WakeOnInterrupt bit; clear ForceWake bit */
- REG_WRITE(ah, AR_RTC_FORCE_WAKE,
- AR_RTC_FORCE_WAKE_ON_INT);
- } else {
- + /*
- + * Clear the RTC force wake bit to allow the
- + * mac to go to sleep.
- + */
- REG_CLR_BIT(ah, AR_RTC_FORCE_WAKE,
- AR_RTC_FORCE_WAKE_EN);
- }
- @@ -2422,7 +1681,8 @@ static bool ath9k_hw_set_power_awake(str
- ATH9K_RESET_POWER_ON) != true) {
- return false;
- }
- - ath9k_hw_init_pll(ah, NULL);
- + if (!AR_SREV_9300_20_OR_LATER(ah))
- + ath9k_hw_init_pll(ah, NULL);
- }
- if (AR_SREV_9100(ah))
- REG_SET_BIT(ah, AR_RTC_RESET,
- @@ -2492,420 +1752,6 @@ bool ath9k_hw_setpower(struct ath_hw *ah
- }
- EXPORT_SYMBOL(ath9k_hw_setpower);
-
- -/*
- - * Helper for ASPM support.
- - *
- - * Disable PLL when in L0s as well as receiver clock when in L1.
- - * This power saving option must be enabled through the SerDes.
- - *
- - * Programming the SerDes must go through the same 288 bit serial shift
- - * register as the other analog registers. Hence the 9 writes.
- - */
- -void ath9k_hw_configpcipowersave(struct ath_hw *ah, int restore, int power_off)
- -{
- - u8 i;
- - u32 val;
- -
- - if (ah->is_pciexpress != true)
- - return;
- -
- - /* Do not touch SerDes registers */
- - if (ah->config.pcie_powersave_enable == 2)
- - return;
- -
- - /* Nothing to do on restore for 11N */
- - if (!restore) {
- - if (AR_SREV_9280_20_OR_LATER(ah)) {
- - /*
- - * AR9280 2.0 or later chips use SerDes values from the
- - * initvals.h initialized depending on chipset during
- - * ath9k_hw_init()
- - */
- - for (i = 0; i < ah->iniPcieSerdes.ia_rows; i++) {
- - REG_WRITE(ah, INI_RA(&ah->iniPcieSerdes, i, 0),
- - INI_RA(&ah->iniPcieSerdes, i, 1));
- - }
- - } else if (AR_SREV_9280(ah) &&
- - (ah->hw_version.macRev == AR_SREV_REVISION_9280_10)) {
- - REG_WRITE(ah, AR_PCIE_SERDES, 0x9248fd00);
- - REG_WRITE(ah, AR_PCIE_SERDES, 0x24924924);
- -
- - /* RX shut off when elecidle is asserted */
- - REG_WRITE(ah, AR_PCIE_SERDES, 0xa8000019);
- - REG_WRITE(ah, AR_PCIE_SERDES, 0x13160820);
- - REG_WRITE(ah, AR_PCIE_SERDES, 0xe5980560);
- -
- - /* Shut off CLKREQ active in L1 */
- - if (ah->config.pcie_clock_req)
- - REG_WRITE(ah, AR_PCIE_SERDES, 0x401deffc);
- - else
- - REG_WRITE(ah, AR_PCIE_SERDES, 0x401deffd);
- -
- - REG_WRITE(ah, AR_PCIE_SERDES, 0x1aaabe40);
- - REG_WRITE(ah, AR_PCIE_SERDES, 0xbe105554);
- - REG_WRITE(ah, AR_PCIE_SERDES, 0x00043007);
- -
- - /* Load the new settings */
- - REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000);
- -
- - } else {
- - REG_WRITE(ah, AR_PCIE_SERDES, 0x9248fc00);
- - REG_WRITE(ah, AR_PCIE_SERDES, 0x24924924);
- -
- - /* RX shut off when elecidle is asserted */
- - REG_WRITE(ah, AR_PCIE_SERDES, 0x28000039);
- - REG_WRITE(ah, AR_PCIE_SERDES, 0x53160824);
- - REG_WRITE(ah, AR_PCIE_SERDES, 0xe5980579);
- -
- - /*
- - * Ignore ah->ah_config.pcie_clock_req setting for
- - * pre-AR9280 11n
- - */
- - REG_WRITE(ah, AR_PCIE_SERDES, 0x001defff);
- -
- - REG_WRITE(ah, AR_PCIE_SERDES, 0x1aaabe40);
- - REG_WRITE(ah, AR_PCIE_SERDES, 0xbe105554);
- - REG_WRITE(ah, AR_PCIE_SERDES, 0x000e3007);
- -
- - /* Load the new settings */
- - REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000);
- - }
- -
- - udelay(1000);
- -
- - /* set bit 19 to allow forcing of pcie core into L1 state */
- - REG_SET_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
- -
- - /* Several PCIe massages to ensure proper behaviour */
- - if (ah->config.pcie_waen) {
- - val = ah->config.pcie_waen;
- - if (!power_off)
- - val &= (~AR_WA_D3_L1_DISABLE);
- - } else {
- - if (AR_SREV_9285(ah) || AR_SREV_9271(ah) ||
- - AR_SREV_9287(ah)) {
- - val = AR9285_WA_DEFAULT;
- - if (!power_off)
- - val &= (~AR_WA_D3_L1_DISABLE);
- - } else if (AR_SREV_9280(ah)) {
- - /*
- - * On AR9280 chips bit 22 of 0x4004 needs to be
- - * set otherwise card may disappear.
- - */
- - val = AR9280_WA_DEFAULT;
- - if (!power_off)
- - val &= (~AR_WA_D3_L1_DISABLE);
- - } else
- - val = AR_WA_DEFAULT;
- - }
- -
- - REG_WRITE(ah, AR_WA, val);
- - }
- -
- - if (power_off) {
- - /*
- - * Set PCIe workaround bits
- - * bit 14 in WA register (disable L1) should only
- - * be set when device enters D3 and be cleared
- - * when device comes back to D0.
- - */
- - if (ah->config.pcie_waen) {
- - if (ah->config.pcie_waen & AR_WA_D3_L1_DISABLE)
- - REG_SET_BIT(ah, AR_WA, AR_WA_D3_L1_DISABLE);
- - } else {
- - if (((AR_SREV_9285(ah) || AR_SREV_9271(ah) ||
- - AR_SREV_9287(ah)) &&
- - (AR9285_WA_DEFAULT & AR_WA_D3_L1_DISABLE)) ||
- - (AR_SREV_9280(ah) &&
- - (AR9280_WA_DEFAULT & AR_WA_D3_L1_DISABLE))) {
- - REG_SET_BIT(ah, AR_WA, AR_WA_D3_L1_DISABLE);
- - }
- - }
- - }
- -}
- -EXPORT_SYMBOL(ath9k_hw_configpcipowersave);
- -
- -/**********************/
- -/* Interrupt Handling */
- -/**********************/
- -
- -bool ath9k_hw_intrpend(struct ath_hw *ah)
- -{
- - u32 host_isr;
- -
- - if (AR_SREV_9100(ah))
- - return true;
- -
- - host_isr = REG_READ(ah, AR_INTR_ASYNC_CAUSE);
- - if ((host_isr & AR_INTR_MAC_IRQ) && (host_isr != AR_INTR_SPURIOUS))
- - return true;
- -
- - host_isr = REG_READ(ah, AR_INTR_SYNC_CAUSE);
- - if ((host_isr & AR_INTR_SYNC_DEFAULT)
- - && (host_isr != AR_INTR_SPURIOUS))
- - return true;
- -
- - return false;
- -}
- -EXPORT_SYMBOL(ath9k_hw_intrpend);
- -
- -bool ath9k_hw_getisr(struct ath_hw *ah, enum ath9k_int *masked)
- -{
- - u32 isr = 0;
- - u32 mask2 = 0;
- - struct ath9k_hw_capabilities *pCap = &ah->caps;
- - u32 sync_cause = 0;
- - bool fatal_int = false;
- - struct ath_common *common = ath9k_hw_common(ah);
- -
- - if (!AR_SREV_9100(ah)) {
- - if (REG_READ(ah, AR_INTR_ASYNC_CAUSE) & AR_INTR_MAC_IRQ) {
- - if ((REG_READ(ah, AR_RTC_STATUS) & AR_RTC_STATUS_M)
- - == AR_RTC_STATUS_ON) {
- - isr = REG_READ(ah, AR_ISR);
- - }
- - }
- -
- - sync_cause = REG_READ(ah, AR_INTR_SYNC_CAUSE) &
- - AR_INTR_SYNC_DEFAULT;
- -
- - *masked = 0;
- -
- - if (!isr && !sync_cause)
- - return false;
- - } else {
- - *masked = 0;
- - isr = REG_READ(ah, AR_ISR);
- - }
- -
- - if (isr) {
- - if (isr & AR_ISR_BCNMISC) {
- - u32 isr2;
- - isr2 = REG_READ(ah, AR_ISR_S2);
- - if (isr2 & AR_ISR_S2_TIM)
- - mask2 |= ATH9K_INT_TIM;
- - if (isr2 & AR_ISR_S2_DTIM)
- - mask2 |= ATH9K_INT_DTIM;
- - if (isr2 & AR_ISR_S2_DTIMSYNC)
- - mask2 |= ATH9K_INT_DTIMSYNC;
- - if (isr2 & (AR_ISR_S2_CABEND))
- - mask2 |= ATH9K_INT_CABEND;
- - if (isr2 & AR_ISR_S2_GTT)
- - mask2 |= ATH9K_INT_GTT;
- - if (isr2 & AR_ISR_S2_CST)
- - mask2 |= ATH9K_INT_CST;
- - if (isr2 & AR_ISR_S2_TSFOOR)
- - mask2 |= ATH9K_INT_TSFOOR;
- - }
- -
- - isr = REG_READ(ah, AR_ISR_RAC);
- - if (isr == 0xffffffff) {
- - *masked = 0;
- - return false;
- - }
- -
- - *masked = isr & ATH9K_INT_COMMON;
- -
- - if (ah->config.rx_intr_mitigation) {
- - if (isr & (AR_ISR_RXMINTR | AR_ISR_RXINTM))
- - *masked |= ATH9K_INT_RX;
- - }
- -
- - if (isr & (AR_ISR_RXOK | AR_ISR_RXERR))
- - *masked |= ATH9K_INT_RX;
- - if (isr &
- - (AR_ISR_TXOK | AR_ISR_TXDESC | AR_ISR_TXERR |
- - AR_ISR_TXEOL)) {
- - u32 s0_s, s1_s;
- -
- - *masked |= ATH9K_INT_TX;
- -
- - s0_s = REG_READ(ah, AR_ISR_S0_S);
- - ah->intr_txqs |= MS(s0_s, AR_ISR_S0_QCU_TXOK);
- - ah->intr_txqs |= MS(s0_s, AR_ISR_S0_QCU_TXDESC);
- -
- - s1_s = REG_READ(ah, AR_ISR_S1_S);
- - ah->intr_txqs |= MS(s1_s, AR_ISR_S1_QCU_TXERR);
- - ah->intr_txqs |= MS(s1_s, AR_ISR_S1_QCU_TXEOL);
- - }
- -
- - if (isr & AR_ISR_RXORN) {
- - ath_print(common, ATH_DBG_INTERRUPT,
- - "receive FIFO overrun interrupt\n");
- - }
- -
- - if (!AR_SREV_9100(ah)) {
- - if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
- - u32 isr5 = REG_READ(ah, AR_ISR_S5_S);
- - if (isr5 & AR_ISR_S5_TIM_TIMER)
- - *masked |= ATH9K_INT_TIM_TIMER;
- - }
- - }
- -
- - *masked |= mask2;
- - }
- -
- - if (AR_SREV_9100(ah))
- - return true;
- -
- - if (isr & AR_ISR_GENTMR) {
- - u32 s5_s;
- -
- - s5_s = REG_READ(ah, AR_ISR_S5_S);
- - if (isr & AR_ISR_GENTMR) {
- - ah->intr_gen_timer_trigger =
- - MS(s5_s, AR_ISR_S5_GENTIMER_TRIG);
- -
- - ah->intr_gen_timer_thresh =
- - MS(s5_s, AR_ISR_S5_GENTIMER_THRESH);
- -
- - if (ah->intr_gen_timer_trigger)
- - *masked |= ATH9K_INT_GENTIMER;
- -
- - }
- - }
- -
- - if (sync_cause) {
- - fatal_int =
- - (sync_cause &
- - (AR_INTR_SYNC_HOST1_FATAL | AR_INTR_SYNC_HOST1_PERR))
- - ? true : false;
- -
- - if (fatal_int) {
- - if (sync_cause & AR_INTR_SYNC_HOST1_FATAL) {
- - ath_print(common, ATH_DBG_ANY,
- - "received PCI FATAL interrupt\n");
- - }
- - if (sync_cause & AR_INTR_SYNC_HOST1_PERR) {
- - ath_print(common, ATH_DBG_ANY,
- - "received PCI PERR interrupt\n");
- - }
- - *masked |= ATH9K_INT_FATAL;
- - }
- - if (sync_cause & AR_INTR_SYNC_RADM_CPL_TIMEOUT) {
- - ath_print(common, ATH_DBG_INTERRUPT,
- - "AR_INTR_SYNC_RADM_CPL_TIMEOUT\n");
- - REG_WRITE(ah, AR_RC, AR_RC_HOSTIF);
- - REG_WRITE(ah, AR_RC, 0);
- - *masked |= ATH9K_INT_FATAL;
- - }
- - if (sync_cause & AR_INTR_SYNC_LOCAL_TIMEOUT) {
- - ath_print(common, ATH_DBG_INTERRUPT,
- - "AR_INTR_SYNC_LOCAL_TIMEOUT\n");
- - }
- -
- - REG_WRITE(ah, AR_INTR_SYNC_CAUSE_CLR, sync_cause);
- - (void) REG_READ(ah, AR_INTR_SYNC_CAUSE_CLR);
- - }
- -
- - return true;
- -}
- -EXPORT_SYMBOL(ath9k_hw_getisr);
- -
- -enum ath9k_int ath9k_hw_set_interrupts(struct ath_hw *ah, enum ath9k_int ints)
- -{
- - enum ath9k_int omask = ah->imask;
- - u32 mask, mask2;
- - struct ath9k_hw_capabilities *pCap = &ah->caps;
- - struct ath_common *common = ath9k_hw_common(ah);
- -
- - ath_print(common, ATH_DBG_INTERRUPT, "0x%x => 0x%x\n", omask, ints);
- -
- - if (omask & ATH9K_INT_GLOBAL) {
- - ath_print(common, ATH_DBG_INTERRUPT, "disable IER\n");
- - REG_WRITE(ah, AR_IER, AR_IER_DISABLE);
- - (void) REG_READ(ah, AR_IER);
- - if (!AR_SREV_9100(ah)) {
- - REG_WRITE(ah, AR_INTR_ASYNC_ENABLE, 0);
- - (void) REG_READ(ah, AR_INTR_ASYNC_ENABLE);
- -
- - REG_WRITE(ah, AR_INTR_SYNC_ENABLE, 0);
- - (void) REG_READ(ah, AR_INTR_SYNC_ENABLE);
- - }
- - }
- -
- - mask = ints & ATH9K_INT_COMMON;
- - mask2 = 0;
- -
- - if (ints & ATH9K_INT_TX) {
- - if (ah->txok_interrupt_mask)
- - mask |= AR_IMR_TXOK;
- - if (ah->txdesc_interrupt_mask)
- - mask |= AR_IMR_TXDESC;
- - if (ah->txerr_interrupt_mask)
- - mask |= AR_IMR_TXERR;
- - if (ah->txeol_interrupt_mask)
- - mask |= AR_IMR_TXEOL;
- - }
- - if (ints & ATH9K_INT_RX) {
- - mask |= AR_IMR_RXERR;
- - if (ah->config.rx_intr_mitigation)
- - mask |= AR_IMR_RXMINTR | AR_IMR_RXINTM;
- - else
- - mask |= AR_IMR_RXOK | AR_IMR_RXDESC;
- - if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
- - mask |= AR_IMR_GENTMR;
- - }
- -
- - if (ints & (ATH9K_INT_BMISC)) {
- - mask |= AR_IMR_BCNMISC;
- - if (ints & ATH9K_INT_TIM)
- - mask2 |= AR_IMR_S2_TIM;
- - if (ints & ATH9K_INT_DTIM)
- - mask2 |= AR_IMR_S2_DTIM;
- - if (ints & ATH9K_INT_DTIMSYNC)
- - mask2 |= AR_IMR_S2_DTIMSYNC;
- - if (ints & ATH9K_INT_CABEND)
- - mask2 |= AR_IMR_S2_CABEND;
- - if (ints & ATH9K_INT_TSFOOR)
- - mask2 |= AR_IMR_S2_TSFOOR;
- - }
- -
- - if (ints & (ATH9K_INT_GTT | ATH9K_INT_CST)) {
- - mask |= AR_IMR_BCNMISC;
- - if (ints & ATH9K_INT_GTT)
- - mask2 |= AR_IMR_S2_GTT;
- - if (ints & ATH9K_INT_CST)
- - mask2 |= AR_IMR_S2_CST;
- - }
- -
- - ath_print(common, ATH_DBG_INTERRUPT, "new IMR 0x%x\n", mask);
- - REG_WRITE(ah, AR_IMR, mask);
- - ah->imrs2_reg &= ~(AR_IMR_S2_TIM | AR_IMR_S2_DTIM | AR_IMR_S2_DTIMSYNC |
- - AR_IMR_S2_CABEND | AR_IMR_S2_CABTO |
- - AR_IMR_S2_TSFOOR | AR_IMR_S2_GTT | AR_IMR_S2_CST);
- - ah->imrs2_reg |= mask2;
- - REG_WRITE(ah, AR_IMR_S2, ah->imrs2_reg);
- -
- - if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
- - if (ints & ATH9K_INT_TIM_TIMER)
- - REG_SET_BIT(ah, AR_IMR_S5, AR_IMR_S5_TIM_TIMER);
- - else
- - REG_CLR_BIT(ah, AR_IMR_S5, AR_IMR_S5_TIM_TIMER);
- - }
- -
- - if (ints & ATH9K_INT_GLOBAL) {
- - ath_print(common, ATH_DBG_INTERRUPT, "enable IER\n");
- - REG_WRITE(ah, AR_IER, AR_IER_ENABLE);
- - if (!AR_SREV_9100(ah)) {
- - REG_WRITE(ah, AR_INTR_ASYNC_ENABLE,
- - AR_INTR_MAC_IRQ);
- - REG_WRITE(ah, AR_INTR_ASYNC_MASK, AR_INTR_MAC_IRQ);
- -
- -
- - REG_WRITE(ah, AR_INTR_SYNC_ENABLE,
- - AR_INTR_SYNC_DEFAULT);
- - REG_WRITE(ah, AR_INTR_SYNC_MASK,
- - AR_INTR_SYNC_DEFAULT);
- - }
- - ath_print(common, ATH_DBG_INTERRUPT, "AR_IMR 0x%x IER 0x%x\n",
- - REG_READ(ah, AR_IMR), REG_READ(ah, AR_IER));
- - }
- -
- - return omask;
- -}
- -EXPORT_SYMBOL(ath9k_hw_set_interrupts);
- -
- /*******************/
- /* Beacon Handling */
- /*******************/
- @@ -3241,6 +2087,20 @@ int ath9k_hw_fill_cap_info(struct ath_hw
- btcoex_hw->scheme = ATH_BTCOEX_CFG_NONE;
- }
-
- + if (AR_SREV_9300_20_OR_LATER(ah)) {
- + pCap->hw_caps |= ATH9K_HW_CAP_EDMA | ATH9K_HW_CAP_LDPC;
- + pCap->rx_hp_qdepth = ATH9K_HW_RX_HP_QDEPTH;
- + pCap->rx_lp_qdepth = ATH9K_HW_RX_LP_QDEPTH;
- + pCap->rx_status_len = sizeof(struct ar9003_rxs);
- + pCap->tx_desc_len = sizeof(struct ar9003_txc);
- + pCap->txs_len = sizeof(struct ar9003_txs);
- + } else {
- + pCap->tx_desc_len = sizeof(struct ath_desc);
- + }
- +
- + if (AR_SREV_9300_20_OR_LATER(ah))
- + pCap->hw_caps |= ATH9K_HW_CAP_RAC_SUPPORTED;
- +
- return 0;
- }
-
- @@ -3273,10 +2133,6 @@ bool ath9k_hw_getcapability(struct ath_h
- case ATH9K_CAP_TKIP_SPLIT:
- return (ah->misc_mode & AR_PCU_MIC_NEW_LOC_ENA) ?
- false : true;
- - case ATH9K_CAP_DIVERSITY:
- - return (REG_READ(ah, AR_PHY_CCK_DETECT) &
- - AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV) ?
- - true : false;
- case ATH9K_CAP_MCAST_KEYSRCH:
- switch (capability) {
- case 0:
- @@ -3319,8 +2175,6 @@ EXPORT_SYMBOL(ath9k_hw_getcapability);
- bool ath9k_hw_setcapability(struct ath_hw *ah, enum ath9k_capability_type type,
- u32 capability, u32 setting, int *status)
- {
- - u32 v;
- -
- switch (type) {
- case ATH9K_CAP_TKIP_MIC:
- if (setting)
- @@ -3330,14 +2184,6 @@ bool ath9k_hw_setcapability(struct ath_h
- ah->sta_id1_defaults &=
- ~AR_STA_ID1_CRPT_MIC_ENABLE;
- return true;
- - case ATH9K_CAP_DIVERSITY:
- - v = REG_READ(ah, AR_PHY_CCK_DETECT);
- - if (setting)
- - v |= AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV;
- - else
- - v &= ~AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV;
- - REG_WRITE(ah, AR_PHY_CCK_DETECT, v);
- - return true;
- case ATH9K_CAP_MCAST_KEYSRCH:
- if (setting)
- ah->sta_id1_defaults |= AR_STA_ID1_MCAST_KSRCH;
- @@ -3405,7 +2251,9 @@ u32 ath9k_hw_gpio_get(struct ath_hw *ah,
- if (gpio >= ah->caps.num_gpio_pins)
- return 0xffffffff;
-
- - if (AR_SREV_9271(ah))
- + if (AR_SREV_9300_20_OR_LATER(ah))
- + return MS_REG_READ(AR9300, gpio) != 0;
- + else if (AR_SREV_9271(ah))
- return MS_REG_READ(AR9271, gpio) != 0;
- else if (AR_SREV_9287_10_OR_LATER(ah))
- return MS_REG_READ(AR9287, gpio) != 0;
- @@ -3847,6 +2695,7 @@ static struct {
- { AR_SREV_VERSION_9285, "9285" },
- { AR_SREV_VERSION_9287, "9287" },
- { AR_SREV_VERSION_9271, "9271" },
- + { AR_SREV_VERSION_9300, "9300" },
- };
-
- /* For devices with external radios */
- --- a/drivers/net/wireless/ath/ath9k/hw.h
- +++ b/drivers/net/wireless/ath/ath9k/hw.h
- @@ -1,5 +1,5 @@
- /*
- - * Copyright (c) 2008-2009 Atheros Communications Inc.
- + * Copyright (c) 2008-2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- @@ -28,6 +28,7 @@
- #include "reg.h"
- #include "phy.h"
- #include "btcoex.h"
- +#include "ar9003_mac.h"
-
- #include "../regd.h"
- #include "../debug.h"
- @@ -41,6 +42,9 @@
- #define AR9280_DEVID_PCIE 0x002a
- #define AR9285_DEVID_PCIE 0x002b
- #define AR2427_DEVID_PCIE 0x002c
- +#define AR9287_DEVID_PCI 0x002d
- +#define AR9287_DEVID_PCIE 0x002e
- +#define AR9300_DEVID_PCIE 0x0030
-
- #define AR5416_AR9100_DEVID 0x000b
-
- @@ -48,9 +52,6 @@
- #define AR_SUBVENDOR_ID_NEW_A 0x7065
- #define AR5416_MAGIC 0x19641014
-
- -#define AR5416_DEVID_AR9287_PCI 0x002D
- -#define AR5416_DEVID_AR9287_PCIE 0x002E
- -
- #define AR9280_COEX2WIRE_SUBSYSID 0x309b
- #define AT9285_COEX3WIRE_SA_SUBSYSID 0x30aa
- #define AT9285_COEX3WIRE_DA_SUBSYSID 0x30ab
- @@ -75,6 +76,8 @@
- #define REG_RMW_FIELD(_a, _r, _f, _v) \
- REG_WRITE(_a, _r, \
- (REG_READ(_a, _r) & ~_f) | (((_v) << _f##_S) & _f))
- +#define REG_READ_FIELD(_a, _r, _f) \
- + (((REG_READ(_a, _r) & _f) >> _f##_S))
- #define REG_SET_BIT(_a, _r, _f) \
- REG_WRITE(_a, _r, REG_READ(_a, _r) | _f)
- #define REG_CLR_BIT(_a, _r, _f) \
- @@ -135,6 +138,16 @@
-
- #define TU_TO_USEC(_tu) ((_tu) << 10)
-
- +#define ATH9K_HW_RX_HP_QDEPTH 16
- +#define ATH9K_HW_RX_LP_QDEPTH 128
- +
- +enum ath_ini_subsys {
- + ATH_INI_PRE = 0,
- + ATH_INI_CORE,
- + ATH_INI_POST,
- + ATH_INI_NUM_SPLIT,
- +};
- +
- enum wireless_mode {
- ATH9K_MODE_11A = 0,
- ATH9K_MODE_11G,
- @@ -165,13 +178,15 @@ enum ath9k_hw_caps {
- ATH9K_HW_CAP_ENHANCEDPM = BIT(14),
- ATH9K_HW_CAP_AUTOSLEEP = BIT(15),
- ATH9K_HW_CAP_4KB_SPLITTRANS = BIT(16),
- + ATH9K_HW_CAP_EDMA = BIT(17),
- + ATH9K_HW_CAP_RAC_SUPPORTED = BIT(18),
- + ATH9K_HW_CAP_LDPC = BIT(19),
- };
-
- enum ath9k_capability_type {
- ATH9K_CAP_CIPHER = 0,
- ATH9K_CAP_TKIP_MIC,
- ATH9K_CAP_TKIP_SPLIT,
- - ATH9K_CAP_DIVERSITY,
- ATH9K_CAP_TXPOW,
- ATH9K_CAP_MCAST_KEYSRCH,
- ATH9K_CAP_DS
- @@ -192,6 +207,11 @@ struct ath9k_hw_capabilities {
- u8 num_gpio_pins;
- u8 num_antcfg_2ghz;
- u8 num_antcfg_5ghz;
- + u8 rx_hp_qdepth;
- + u8 rx_lp_qdepth;
- + u8 rx_status_len;
- + u8 tx_desc_len;
- + u8 txs_len;
- };
-
- struct ath9k_ops_config {
- @@ -212,6 +232,7 @@ struct ath9k_ops_config {
- u32 enable_ani;
- int serialize_regmode;
- bool rx_intr_mitigation;
- + bool tx_intr_mitigation;
- #define SPUR_DISABLE 0
- #define SPUR_ENABLE_IOCTL 1
- #define SPUR_ENABLE_EEPROM 2
- @@ -231,6 +252,8 @@ struct ath9k_ops_config {
- enum ath9k_int {
- ATH9K_INT_RX = 0x00000001,
- ATH9K_INT_RXDESC = 0x00000002,
- + ATH9K_INT_RXHP = 0x00000001,
- + ATH9K_INT_RXLP = 0x00000002,
- ATH9K_INT_RXNOFRM = 0x00000008,
- ATH9K_INT_RXEOL = 0x00000010,
- ATH9K_INT_RXORN = 0x00000020,
- @@ -440,6 +463,124 @@ struct ath_gen_timer_table {
- } timer_mask;
- };
-
- +/**
- + * struct ath_hw_private_ops - callbacks used internally by hardware code
- + *
- + * This structure contains private callbacks designed to only be used internally
- + * by the hardware core.
- + *
- + * @init_cal_settings: setup types of calibrations supported
- + * @init_cal: starts actual calibration
- + *
- + * @init_mode_regs: Initializes mode registers
- + * @init_mode_gain_regs: Initialize TX/RX gain registers
- + * @macversion_supported: If this specific mac revision is supported
- + *
- + * @rf_set_freq: change frequency
- + * @spur_mitigate_freq: spur mitigation
- + * @rf_alloc_ext_banks:
- + * @rf_free_ext_banks:
- + * @set_rf_regs:
- + * @compute_pll_control: compute the PLL control value to use for
- + * AR_RTC_PLL_CONTROL for a given channel
- + * @setup_calibration: set up calibration
- + * @iscal_supported: used to query if a type of calibration is supported
- + * @loadnf: load noise floor read from each chain on the CCA registers
- + */
- +struct ath_hw_private_ops {
- + /* Calibration ops */
- + void (*init_cal_settings)(struct ath_hw *ah);
- + bool (*init_cal)(struct ath_hw *ah, struct ath9k_channel *chan);
- +
- + void (*init_mode_regs)(struct ath_hw *ah);
- + void (*init_mode_gain_regs)(struct ath_hw *ah);
- + bool (*macversion_supported)(u32 macversion);
- + void (*setup_calibration)(struct ath_hw *ah,
- + struct ath9k_cal_list *currCal);
- + bool (*iscal_supported)(struct ath_hw *ah,
- + enum ath9k_cal_types calType);
- +
- + /* PHY ops */
- + int (*rf_set_freq)(struct ath_hw *ah,
- + struct ath9k_channel *chan);
- + void (*spur_mitigate_freq)(struct ath_hw *ah,
- + struct ath9k_channel *chan);
- + int (*rf_alloc_ext_banks)(struct ath_hw *ah);
- + void (*rf_free_ext_banks)(struct ath_hw *ah);
- + bool (*set_rf_regs)(struct ath_hw *ah,
- + struct ath9k_channel *chan,
- + u16 modesIndex);
- + void (*set_channel_regs)(struct ath_hw *ah, struct ath9k_channel *chan);
- + void (*init_bb)(struct ath_hw *ah,
- + struct ath9k_channel *chan);
- + int (*process_ini)(struct ath_hw *ah, struct ath9k_channel *chan);
- + void (*olc_init)(struct ath_hw *ah);
- + void (*set_rfmode)(struct ath_hw *ah, struct ath9k_channel *chan);
- + void (*mark_phy_inactive)(struct ath_hw *ah);
- + void (*set_delta_slope)(struct ath_hw *ah, struct ath9k_channel *chan);
- + bool (*rfbus_req)(struct ath_hw *ah);
- + void (*rfbus_done)(struct ath_hw *ah);
- + void (*enable_rfkill)(struct ath_hw *ah);
- + void (*restore_chainmask)(struct ath_hw *ah);
- + void (*set_diversity)(struct ath_hw *ah, bool value);
- + u32 (*compute_pll_control)(struct ath_hw *ah,
- + struct ath9k_channel *chan);
- + bool (*ani_control)(struct ath_hw *ah, enum ath9k_ani_cmd cmd,
- + int param);
- + void (*do_getnf)(struct ath_hw *ah, int16_t nfarray[NUM_NF_READINGS]);
- + void (*loadnf)(struct ath_hw *ah, struct ath9k_channel *chan);
- +};
- +
- +/**
- + * struct ath_hw_ops - callbacks used by hardware code and driver code
- + *
- + * This structure contains callbacks designed to to be used internally by
- + * hardware code and also by the lower level driver.
- + *
- + * @config_pci_powersave:
- + * @calibrate: periodic calibration for NF, ANI, IQ, ADC gain, ADC-DC
- + */
- +struct ath_hw_ops {
- + void (*config_pci_powersave)(struct ath_hw *ah,
- + int restore,
- + int power_off);
- + void (*rx_enable)(struct ath_hw *ah);
- + void (*set_desc_link)(void *ds, u32 link);
- + void (*get_desc_link)(void *ds, u32 **link);
- + bool (*calibrate)(struct ath_hw *ah,
- + struct ath9k_channel *chan,
- + u8 rxchainmask,
- + bool longcal);
- + bool (*get_isr)(struct ath_hw *ah, enum ath9k_int *masked);
- + void (*fill_txdesc)(struct ath_hw *ah, void *ds, u32 seglen,
- + bool is_firstseg, bool is_is_lastseg,
- + const void *ds0, dma_addr_t buf_addr,
- + unsigned int qcu);
- + int (*proc_txdesc)(struct ath_hw *ah, void *ds,
- + struct ath_tx_status *ts);
- + void (*set11n_txdesc)(struct ath_hw *ah, void *ds,
- + u32 pktLen, enum ath9k_pkt_type type,
- + u32 txPower, u32 keyIx,
- + enum ath9k_key_type keyType,
- + u32 flags);
- + void (*set11n_ratescenario)(struct ath_hw *ah, void *ds,
- + void *lastds,
- + u32 durUpdateEn, u32 rtsctsRate,
- + u32 rtsctsDuration,
- + struct ath9k_11n_rate_series series[],
- + u32 nseries, u32 flags);
- + void (*set11n_aggr_first)(struct ath_hw *ah, void *ds,
- + u32 aggrLen);
- + void (*set11n_aggr_middle)(struct ath_hw *ah, void *ds,
- + u32 numDelims);
- + void (*set11n_aggr_last)(struct ath_hw *ah, void *ds);
- + void (*clr11n_aggr)(struct ath_hw *ah, void *ds);
- + void (*set11n_burstduration)(struct ath_hw *ah, void *ds,
- + u32 burstDuration);
- + void (*set11n_virtualmorefrag)(struct ath_hw *ah, void *ds,
- + u32 vmf);
- +};
- +
- struct ath_hw {
- struct ieee80211_hw *hw;
- struct ath_common common;
- @@ -453,14 +594,18 @@ struct ath_hw {
- struct ar5416_eeprom_def def;
- struct ar5416_eeprom_4k map4k;
- struct ar9287_eeprom map9287;
- + struct ar9300_eeprom ar9300_eep;
- } eeprom;
- const struct eeprom_ops *eep_ops;
- - enum ath9k_eep_map eep_map;
-
- bool sw_mgmt_crypto;
- bool is_pciexpress;
- bool need_an_top2_fixup;
- u16 tx_trig_level;
- + s16 nf_2g_max;
- + s16 nf_2g_min;
- + s16 nf_5g_max;
- + s16 nf_5g_min;
- u16 rfsilent;
- u32 rfkill_gpio;
- u32 rfkill_polarity;
- @@ -493,6 +638,7 @@ struct ath_hw {
- struct ath9k_cal_list adcgain_caldata;
- struct ath9k_cal_list adcdc_calinitdata;
- struct ath9k_cal_list adcdc_caldata;
- + struct ath9k_cal_list tempCompCalData;
- struct ath9k_cal_list *cal_list;
- struct ath9k_cal_list *cal_list_last;
- struct ath9k_cal_list *cal_list_curr;
- @@ -533,12 +679,10 @@ struct ath_hw {
- DONT_USE_32KHZ,
- } enable_32kHz_clock;
-
- - /* Callback for radio frequency change */
- - int (*ath9k_hw_rf_set_freq)(struct ath_hw *ah, struct ath9k_channel *chan);
- -
- - /* Callback for baseband spur frequency */
- - void (*ath9k_hw_spur_mitigate_freq)(struct ath_hw *ah,
- - struct ath9k_channel *chan);
- + /* Private to hardware code */
- + struct ath_hw_private_ops private_ops;
- + /* Accessed by the lower level driver */
- + struct ath_hw_ops ops;
-
- /* Used to program the radio on non single-chip devices */
- u32 *analogBank0Data;
- @@ -592,6 +736,7 @@ struct ath_hw {
- struct ar5416IniArray iniBank7;
- struct ar5416IniArray iniAddac;
- struct ar5416IniArray iniPcieSerdes;
- + struct ar5416IniArray iniPcieSerdesLowPower;
- struct ar5416IniArray iniModesAdditional;
- struct ar5416IniArray iniModesRxGain;
- struct ar5416IniArray iniModesTxGain;
- @@ -604,9 +749,21 @@ struct ath_hw {
- struct ar5416IniArray iniModes_high_power_tx_gain_9271;
- struct ar5416IniArray iniModes_normal_power_tx_gain_9271;
-
- + struct ar5416IniArray iniMac[ATH_INI_NUM_SPLIT];
- + struct ar5416IniArray iniBB[ATH_INI_NUM_SPLIT];
- + struct ar5416IniArray iniRadio[ATH_INI_NUM_SPLIT];
- + struct ar5416IniArray iniSOC[ATH_INI_NUM_SPLIT];
- +
- u32 intr_gen_timer_trigger;
- u32 intr_gen_timer_thresh;
- struct ath_gen_timer_table hw_gen_timers;
- +
- + struct ar9003_txs *ts_ring;
- + void *ts_start;
- + u32 ts_paddr_start;
- + u32 ts_paddr_end;
- + u16 ts_tail;
- + u8 ts_size;
- };
-
- static inline struct ath_common *ath9k_hw_common(struct ath_hw *ah)
- @@ -619,6 +776,16 @@ static inline struct ath_regulatory *ath
- return &(ath9k_hw_common(ah)->regulatory);
- }
-
- +static inline struct ath_hw_private_ops *ath9k_hw_private_ops(struct ath_hw *ah)
- +{
- + return &ah->private_ops;
- +}
- +
- +static inline struct ath_hw_ops *ath9k_hw_ops(struct ath_hw *ah)
- +{
- + return &ah->ops;
- +}
- +
- /* Initialization, Detach, Reset */
- const char *ath9k_hw_probe(u16 vendorid, u16 devid);
- void ath9k_hw_deinit(struct ath_hw *ah);
- @@ -630,6 +797,7 @@ bool ath9k_hw_getcapability(struct ath_h
- u32 capability, u32 *result);
- bool ath9k_hw_setcapability(struct ath_hw *ah, enum ath9k_capability_type type,
- u32 capability, u32 setting, int *status);
- +u32 ath9k_regd_get_ctl(struct ath_regulatory *reg, struct ath9k_channel *chan);
-
- /* Key Cache Management */
- bool ath9k_hw_keyreset(struct ath_hw *ah, u16 entry);
- @@ -681,13 +849,6 @@ void ath9k_hw_set_sta_beacon_timers(stru
-
- bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode);
-
- -void ath9k_hw_configpcipowersave(struct ath_hw *ah, int restore, int power_off);
- -
- -/* Interrupt Handling */
- -bool ath9k_hw_intrpend(struct ath_hw *ah);
- -bool ath9k_hw_getisr(struct ath_hw *ah, enum ath9k_int *masked);
- -enum ath9k_int ath9k_hw_set_interrupts(struct ath_hw *ah, enum ath9k_int ints);
- -
- /* Generic hw timer primitives */
- struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
- void (*trigger)(void *),
- @@ -709,6 +870,36 @@ void ath9k_hw_name(struct ath_hw *ah, ch
- /* HTC */
- void ath9k_hw_htc_resetinit(struct ath_hw *ah);
-
- +/* PHY */
- +void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah, u32 coef_scaled,
- + u32 *coef_mantissa, u32 *coef_exponent);
- +
- +/*
- + * Code Specific to AR5008, AR9001 or AR9002,
- + * we stuff these here to avoid callbacks for AR9003.
- + */
- +void ar9002_hw_cck_chan14_spread(struct ath_hw *ah);
- +int ar9002_hw_rf_claim(struct ath_hw *ah);
- +void ar9002_hw_enable_async_fifo(struct ath_hw *ah);
- +void ar9002_hw_enable_wep_aggregation(struct ath_hw *ah);
- +
- +/*
- + * Code specifric to AR9003, we stuff these here to avoid callbacks
- + * for older families
- + */
- +void ar9003_hw_set_nf_limits(struct ath_hw *ah);
- +
- +/* Hardware family op attach helpers */
- +void ar5008_hw_attach_phy_ops(struct ath_hw *ah);
- +void ar9002_hw_attach_phy_ops(struct ath_hw *ah);
- +void ar9003_hw_attach_phy_ops(struct ath_hw *ah);
- +
- +void ar9002_hw_attach_calib_ops(struct ath_hw *ah);
- +void ar9003_hw_attach_calib_ops(struct ath_hw *ah);
- +
- +void ar9002_hw_attach_ops(struct ath_hw *ah);
- +void ar9003_hw_attach_ops(struct ath_hw *ah);
- +
- #define ATH_PCIE_CAP_LINK_CTRL 0x70
- #define ATH_PCIE_CAP_LINK_L0S 1
- #define ATH_PCIE_CAP_LINK_L1 2
- --- a/drivers/net/wireless/ath/ath9k/init.c
- +++ b/drivers/net/wireless/ath/ath9k/init.c
- @@ -191,6 +191,9 @@ static void setup_ht_cap(struct ath_soft
- IEEE80211_HT_CAP_SGI_40 |
- IEEE80211_HT_CAP_DSSSCCK40;
-
- + if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_LDPC)
- + ht_info->cap |= IEEE80211_HT_CAP_LDPC_CODING;
- +
- ht_info->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
- ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
-
- @@ -235,31 +238,37 @@ static int ath9k_reg_notifier(struct wip
- */
- int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
- struct list_head *head, const char *name,
- - int nbuf, int ndesc)
- + int nbuf, int ndesc, bool is_tx)
- {
- #define DS2PHYS(_dd, _ds) \
- ((_dd)->dd_desc_paddr + ((caddr_t)(_ds) - (caddr_t)(_dd)->dd_desc))
- #define ATH_DESC_4KB_BOUND_CHECK(_daddr) ((((_daddr) & 0xFFF) > 0xF7F) ? 1 : 0)
- #define ATH_DESC_4KB_BOUND_NUM_SKIPPED(_len) ((_len) / 4096)
- struct ath_common *common = ath9k_hw_common(sc->sc_ah);
- - struct ath_desc *ds;
- + u8 *ds;
- struct ath_buf *bf;
- - int i, bsize, error;
- + int i, bsize, error, desc_len;
-
- ath_print(common, ATH_DBG_CONFIG, "%s DMA: %u buffers %u desc/buf\n",
- name, nbuf, ndesc);
-
- INIT_LIST_HEAD(head);
- +
- + if (is_tx)
- + desc_len = sc->sc_ah->caps.tx_desc_len;
- + else
- + desc_len = sizeof(struct ath_desc);
- +
- /* ath_desc must be a multiple of DWORDs */
- - if ((sizeof(struct ath_desc) % 4) != 0) {
- + if ((desc_len % 4) != 0) {
- ath_print(common, ATH_DBG_FATAL,
- "ath_desc not DWORD aligned\n");
- - BUG_ON((sizeof(struct ath_desc) % 4) != 0);
- + BUG_ON((desc_len % 4) != 0);
- error = -ENOMEM;
- goto fail;
- }
-
- - dd->dd_desc_len = sizeof(struct ath_desc) * nbuf * ndesc;
- + dd->dd_desc_len = desc_len * nbuf * ndesc;
-
- /*
- * Need additional DMA memory because we can't use
- @@ -272,7 +281,7 @@ int ath_descdma_setup(struct ath_softc *
- u32 dma_len;
-
- while (ndesc_skipped) {
- - dma_len = ndesc_skipped * sizeof(struct ath_desc);
- + dma_len = ndesc_skipped * desc_len;
- dd->dd_desc_len += dma_len;
-
- ndesc_skipped = ATH_DESC_4KB_BOUND_NUM_SKIPPED(dma_len);
- @@ -286,7 +295,7 @@ int ath_descdma_setup(struct ath_softc *
- error = -ENOMEM;
- goto fail;
- }
- - ds = dd->dd_desc;
- + ds = (u8 *) dd->dd_desc;
- ath_print(common, ATH_DBG_CONFIG, "%s DMA map: %p (%u) -> %llx (%u)\n",
- name, ds, (u32) dd->dd_desc_len,
- ito64(dd->dd_desc_paddr), /*XXX*/(u32) dd->dd_desc_len);
- @@ -300,7 +309,7 @@ int ath_descdma_setup(struct ath_softc *
- }
- dd->dd_bufptr = bf;
-
- - for (i = 0; i < nbuf; i++, bf++, ds += ndesc) {
- + for (i = 0; i < nbuf; i++, bf++, ds += (desc_len * ndesc)) {
- bf->bf_desc = ds;
- bf->bf_daddr = DS2PHYS(dd, ds);
-
- @@ -316,7 +325,7 @@ int ath_descdma_setup(struct ath_softc *
- ((caddr_t) dd->dd_desc +
- dd->dd_desc_len));
-
- - ds += ndesc;
- + ds += (desc_len * ndesc);
- bf->bf_desc = ds;
- bf->bf_daddr = DS2PHYS(dd, ds);
- }
- @@ -514,7 +523,7 @@ static void ath9k_init_misc(struct ath_s
- common->tx_chainmask = sc->sc_ah->caps.tx_chainmask;
- common->rx_chainmask = sc->sc_ah->caps.rx_chainmask;
-
- - ath9k_hw_setcapability(sc->sc_ah, ATH9K_CAP_DIVERSITY, 1, true, NULL);
- + ath9k_hw_set_diversity(sc->sc_ah, true);
- sc->rx.defant = ath9k_hw_getdefantenna(sc->sc_ah);
-
- if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_BSSIDMASK)
- @@ -568,13 +577,10 @@ static int ath9k_init_softc(u16 devid, s
- ath_read_cachesize(common, &csz);
- common->cachelsz = csz << 2; /* convert to bytes */
-
- + /* Initializes the hardware for all supported chipsets */
- ret = ath9k_hw_init(ah);
- - if (ret) {
- - ath_print(common, ATH_DBG_FATAL,
- - "Unable to initialize hardware; "
- - "initialization status: %d\n", ret);
- + if (ret)
- goto err_hw;
- - }
-
- ret = ath9k_init_debug(ah);
- if (ret) {
- --- a/drivers/net/wireless/ath/ath9k/initvals.h
- +++ /dev/null
- @@ -1,7200 +0,0 @@
- -/*
- - * Copyright (c) 2008-2009 Atheros Communications Inc.
- - *
- - * Permission to use, copy, modify, and/or distribute this software for any
- - * purpose with or without fee is hereby granted, provided that the above
- - * copyright notice and this permission notice appear in all copies.
- - *
- - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- - */
- -
- -static const u32 ar5416Modes[][6] = {
- - { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
- - { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
- - { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
- - { 0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000, 0x00014008 },
- - { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
- - { 0x0000801c, 0x128d93a7, 0x128d93cf, 0x12e013d7, 0x12e013ab, 0x098813cf },
- - { 0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810 },
- - { 0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a, 0x0000320a },
- - { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
- - { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
- - { 0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- - { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
- - { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- - { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
- - { 0x00009844, 0x1372161e, 0x1372161e, 0x137216a0, 0x137216a0, 0x137216a0 },
- - { 0x00009848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- - { 0x0000a848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- - { 0x0000b848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- - { 0x00009850, 0x6c48b4e0, 0x6d48b4e0, 0x6d48b0de, 0x6c48b0de, 0x6c48b0de },
- - { 0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e },
- - { 0x0000985c, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e, 0x31395d5e },
- - { 0x00009860, 0x00049d18, 0x00049d18, 0x00049d18, 0x00049d18, 0x00049d18 },
- - { 0x00009864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- - { 0x00009868, 0x409a4190, 0x409a4190, 0x409a4190, 0x409a4190, 0x409a4190 },
- - { 0x0000986c, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081 },
- - { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
- - { 0x00009918, 0x000001b8, 0x00000370, 0x00000268, 0x00000134, 0x00000134 },
- - { 0x00009924, 0xd0058a0b, 0xd0058a0b, 0xd0058a0b, 0xd0058a0b, 0xd0058a0b },
- - { 0x00009944, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020 },
- - { 0x00009960, 0x00000900, 0x00000900, 0x00012d80, 0x00012d80, 0x00012d80 },
- - { 0x0000a960, 0x00000900, 0x00000900, 0x00012d80, 0x00012d80, 0x00012d80 },
- - { 0x0000b960, 0x00000900, 0x00000900, 0x00012d80, 0x00012d80, 0x00012d80 },
- - { 0x00009964, 0x00000000, 0x00000000, 0x00001120, 0x00001120, 0x00001120 },
- - { 0x000099bc, 0x001a0a00, 0x001a0a00, 0x001a0a00, 0x001a0a00, 0x001a0a00 },
- - { 0x000099c0, 0x038919be, 0x038919be, 0x038919be, 0x038919be, 0x038919be },
- - { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
- - { 0x000099c8, 0x6af6532c, 0x6af6532c, 0x6af6532c, 0x6af6532c, 0x6af6532c },
- - { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
- - { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
- - { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a204, 0x00000880, 0x00000880, 0x00000880, 0x00000880, 0x00000880 },
- - { 0x0000a208, 0xd6be4788, 0xd6be4788, 0xd03e4788, 0xd03e4788, 0xd03e4788 },
- - { 0x0000a20c, 0x002ec1e0, 0x002ec1e0, 0x002ac120, 0x002ac120, 0x002ac120 },
- - { 0x0000b20c, 0x002ec1e0, 0x002ec1e0, 0x002ac120, 0x002ac120, 0x002ac120 },
- - { 0x0000c20c, 0x002ec1e0, 0x002ec1e0, 0x002ac120, 0x002ac120, 0x002ac120 },
- - { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
- - { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- - { 0x0000a274, 0x0a1a9caa, 0x0a1a9caa, 0x0a1a7caa, 0x0a1a7caa, 0x0a1a7caa },
- - { 0x0000a300, 0x18010000, 0x18010000, 0x18010000, 0x18010000, 0x18010000 },
- - { 0x0000a304, 0x30032602, 0x30032602, 0x2e032402, 0x2e032402, 0x2e032402 },
- - { 0x0000a308, 0x48073e06, 0x48073e06, 0x4a0a3c06, 0x4a0a3c06, 0x4a0a3c06 },
- - { 0x0000a30c, 0x560b4c0a, 0x560b4c0a, 0x621a540b, 0x621a540b, 0x621a540b },
- - { 0x0000a310, 0x641a600f, 0x641a600f, 0x764f6c1b, 0x764f6c1b, 0x764f6c1b },
- - { 0x0000a314, 0x7a4f6e1b, 0x7a4f6e1b, 0x845b7a5a, 0x845b7a5a, 0x845b7a5a },
- - { 0x0000a318, 0x8c5b7e5a, 0x8c5b7e5a, 0x950f8ccf, 0x950f8ccf, 0x950f8ccf },
- - { 0x0000a31c, 0x9d0f96cf, 0x9d0f96cf, 0xa5cf9b4f, 0xa5cf9b4f, 0xa5cf9b4f },
- - { 0x0000a320, 0xb51fa69f, 0xb51fa69f, 0xbddfaf1f, 0xbddfaf1f, 0xbddfaf1f },
- - { 0x0000a324, 0xcb3fbd07, 0xcb3fbcbf, 0xd1ffc93f, 0xd1ffc93f, 0xd1ffc93f },
- - { 0x0000a328, 0x0000d7bf, 0x0000d7bf, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a32c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a330, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- -};
- -
- -static const u32 ar5416Common[][2] = {
- - { 0x0000000c, 0x00000000 },
- - { 0x00000030, 0x00020015 },
- - { 0x00000034, 0x00000005 },
- - { 0x00000040, 0x00000000 },
- - { 0x00000044, 0x00000008 },
- - { 0x00000048, 0x00000008 },
- - { 0x0000004c, 0x00000010 },
- - { 0x00000050, 0x00000000 },
- - { 0x00000054, 0x0000001f },
- - { 0x00000800, 0x00000000 },
- - { 0x00000804, 0x00000000 },
- - { 0x00000808, 0x00000000 },
- - { 0x0000080c, 0x00000000 },
- - { 0x00000810, 0x00000000 },
- - { 0x00000814, 0x00000000 },
- - { 0x00000818, 0x00000000 },
- - { 0x0000081c, 0x00000000 },
- - { 0x00000820, 0x00000000 },
- - { 0x00000824, 0x00000000 },
- - { 0x00001040, 0x002ffc0f },
- - { 0x00001044, 0x002ffc0f },
- - { 0x00001048, 0x002ffc0f },
- - { 0x0000104c, 0x002ffc0f },
- - { 0x00001050, 0x002ffc0f },
- - { 0x00001054, 0x002ffc0f },
- - { 0x00001058, 0x002ffc0f },
- - { 0x0000105c, 0x002ffc0f },
- - { 0x00001060, 0x002ffc0f },
- - { 0x00001064, 0x002ffc0f },
- - { 0x00001230, 0x00000000 },
- - { 0x00001270, 0x00000000 },
- - { 0x00001038, 0x00000000 },
- - { 0x00001078, 0x00000000 },
- - { 0x000010b8, 0x00000000 },
- - { 0x000010f8, 0x00000000 },
- - { 0x00001138, 0x00000000 },
- - { 0x00001178, 0x00000000 },
- - { 0x000011b8, 0x00000000 },
- - { 0x000011f8, 0x00000000 },
- - { 0x00001238, 0x00000000 },
- - { 0x00001278, 0x00000000 },
- - { 0x000012b8, 0x00000000 },
- - { 0x000012f8, 0x00000000 },
- - { 0x00001338, 0x00000000 },
- - { 0x00001378, 0x00000000 },
- - { 0x000013b8, 0x00000000 },
- - { 0x000013f8, 0x00000000 },
- - { 0x00001438, 0x00000000 },
- - { 0x00001478, 0x00000000 },
- - { 0x000014b8, 0x00000000 },
- - { 0x000014f8, 0x00000000 },
- - { 0x00001538, 0x00000000 },
- - { 0x00001578, 0x00000000 },
- - { 0x000015b8, 0x00000000 },
- - { 0x000015f8, 0x00000000 },
- - { 0x00001638, 0x00000000 },
- - { 0x00001678, 0x00000000 },
- - { 0x000016b8, 0x00000000 },
- - { 0x000016f8, 0x00000000 },
- - { 0x00001738, 0x00000000 },
- - { 0x00001778, 0x00000000 },
- - { 0x000017b8, 0x00000000 },
- - { 0x000017f8, 0x00000000 },
- - { 0x0000103c, 0x00000000 },
- - { 0x0000107c, 0x00000000 },
- - { 0x000010bc, 0x00000000 },
- - { 0x000010fc, 0x00000000 },
- - { 0x0000113c, 0x00000000 },
- - { 0x0000117c, 0x00000000 },
- - { 0x000011bc, 0x00000000 },
- - { 0x000011fc, 0x00000000 },
- - { 0x0000123c, 0x00000000 },
- - { 0x0000127c, 0x00000000 },
- - { 0x000012bc, 0x00000000 },
- - { 0x000012fc, 0x00000000 },
- - { 0x0000133c, 0x00000000 },
- - { 0x0000137c, 0x00000000 },
- - { 0x000013bc, 0x00000000 },
- - { 0x000013fc, 0x00000000 },
- - { 0x0000143c, 0x00000000 },
- - { 0x0000147c, 0x00000000 },
- - { 0x00004030, 0x00000002 },
- - { 0x0000403c, 0x00000002 },
- - { 0x00007010, 0x00000000 },
- - { 0x00007038, 0x000004c2 },
- - { 0x00008004, 0x00000000 },
- - { 0x00008008, 0x00000000 },
- - { 0x0000800c, 0x00000000 },
- - { 0x00008018, 0x00000700 },
- - { 0x00008020, 0x00000000 },
- - { 0x00008038, 0x00000000 },
- - { 0x0000803c, 0x00000000 },
- - { 0x00008048, 0x40000000 },
- - { 0x00008054, 0x00000000 },
- - { 0x00008058, 0x00000000 },
- - { 0x0000805c, 0x000fc78f },
- - { 0x00008060, 0x0000000f },
- - { 0x00008064, 0x00000000 },
- - { 0x000080c0, 0x2a82301a },
- - { 0x000080c4, 0x05dc01e0 },
- - { 0x000080c8, 0x1f402710 },
- - { 0x000080cc, 0x01f40000 },
- - { 0x000080d0, 0x00001e00 },
- - { 0x000080d4, 0x00000000 },
- - { 0x000080d8, 0x00400000 },
- - { 0x000080e0, 0xffffffff },
- - { 0x000080e4, 0x0000ffff },
- - { 0x000080e8, 0x003f3f3f },
- - { 0x000080ec, 0x00000000 },
- - { 0x000080f0, 0x00000000 },
- - { 0x000080f4, 0x00000000 },
- - { 0x000080f8, 0x00000000 },
- - { 0x000080fc, 0x00020000 },
- - { 0x00008100, 0x00020000 },
- - { 0x00008104, 0x00000001 },
- - { 0x00008108, 0x00000052 },
- - { 0x0000810c, 0x00000000 },
- - { 0x00008110, 0x00000168 },
- - { 0x00008118, 0x000100aa },
- - { 0x0000811c, 0x00003210 },
- - { 0x00008124, 0x00000000 },
- - { 0x00008128, 0x00000000 },
- - { 0x0000812c, 0x00000000 },
- - { 0x00008130, 0x00000000 },
- - { 0x00008134, 0x00000000 },
- - { 0x00008138, 0x00000000 },
- - { 0x0000813c, 0x00000000 },
- - { 0x00008144, 0xffffffff },
- - { 0x00008168, 0x00000000 },
- - { 0x0000816c, 0x00000000 },
- - { 0x00008170, 0x32143320 },
- - { 0x00008174, 0xfaa4fa50 },
- - { 0x00008178, 0x00000100 },
- - { 0x0000817c, 0x00000000 },
- - { 0x000081c4, 0x00000000 },
- - { 0x000081ec, 0x00000000 },
- - { 0x000081f0, 0x00000000 },
- - { 0x000081f4, 0x00000000 },
- - { 0x000081f8, 0x00000000 },
- - { 0x000081fc, 0x00000000 },
- - { 0x00008200, 0x00000000 },
- - { 0x00008204, 0x00000000 },
- - { 0x00008208, 0x00000000 },
- - { 0x0000820c, 0x00000000 },
- - { 0x00008210, 0x00000000 },
- - { 0x00008214, 0x00000000 },
- - { 0x00008218, 0x00000000 },
- - { 0x0000821c, 0x00000000 },
- - { 0x00008220, 0x00000000 },
- - { 0x00008224, 0x00000000 },
- - { 0x00008228, 0x00000000 },
- - { 0x0000822c, 0x00000000 },
- - { 0x00008230, 0x00000000 },
- - { 0x00008234, 0x00000000 },
- - { 0x00008238, 0x00000000 },
- - { 0x0000823c, 0x00000000 },
- - { 0x00008240, 0x00100000 },
- - { 0x00008244, 0x0010f400 },
- - { 0x00008248, 0x00000100 },
- - { 0x0000824c, 0x0001e800 },
- - { 0x00008250, 0x00000000 },
- - { 0x00008254, 0x00000000 },
- - { 0x00008258, 0x00000000 },
- - { 0x0000825c, 0x400000ff },
- - { 0x00008260, 0x00080922 },
- - { 0x00008264, 0xa8000010 },
- - { 0x00008270, 0x00000000 },
- - { 0x00008274, 0x40000000 },
- - { 0x00008278, 0x003e4180 },
- - { 0x0000827c, 0x00000000 },
- - { 0x00008284, 0x0000002c },
- - { 0x00008288, 0x0000002c },
- - { 0x0000828c, 0x00000000 },
- - { 0x00008294, 0x00000000 },
- - { 0x00008298, 0x00000000 },
- - { 0x00008300, 0x00000000 },
- - { 0x00008304, 0x00000000 },
- - { 0x00008308, 0x00000000 },
- - { 0x0000830c, 0x00000000 },
- - { 0x00008310, 0x00000000 },
- - { 0x00008314, 0x00000000 },
- - { 0x00008318, 0x00000000 },
- - { 0x00008328, 0x00000000 },
- - { 0x0000832c, 0x00000007 },
- - { 0x00008330, 0x00000302 },
- - { 0x00008334, 0x00000e00 },
- - { 0x00008338, 0x00070000 },
- - { 0x0000833c, 0x00000000 },
- - { 0x00008340, 0x000107ff },
- - { 0x00009808, 0x00000000 },
- - { 0x0000980c, 0xad848e19 },
- - { 0x00009810, 0x7d14e000 },
- - { 0x00009814, 0x9c0a9f6b },
- - { 0x0000981c, 0x00000000 },
- - { 0x0000982c, 0x0000a000 },
- - { 0x00009830, 0x00000000 },
- - { 0x0000983c, 0x00200400 },
- - { 0x00009840, 0x206a002e },
- - { 0x0000984c, 0x1284233c },
- - { 0x00009854, 0x00000859 },
- - { 0x00009900, 0x00000000 },
- - { 0x00009904, 0x00000000 },
- - { 0x00009908, 0x00000000 },
- - { 0x0000990c, 0x00000000 },
- - { 0x0000991c, 0x10000fff },
- - { 0x00009920, 0x05100000 },
- - { 0x0000a920, 0x05100000 },
- - { 0x0000b920, 0x05100000 },
- - { 0x00009928, 0x00000001 },
- - { 0x0000992c, 0x00000004 },
- - { 0x00009934, 0x1e1f2022 },
- - { 0x00009938, 0x0a0b0c0d },
- - { 0x0000993c, 0x00000000 },
- - { 0x00009948, 0x9280b212 },
- - { 0x0000994c, 0x00020028 },
- - { 0x00009954, 0x5d50e188 },
- - { 0x00009958, 0x00081fff },
- - { 0x0000c95c, 0x004b6a8e },
- - { 0x0000c968, 0x000003ce },
- - { 0x00009970, 0x190fb515 },
- - { 0x00009974, 0x00000000 },
- - { 0x00009978, 0x00000001 },
- - { 0x0000997c, 0x00000000 },
- - { 0x00009980, 0x00000000 },
- - { 0x00009984, 0x00000000 },
- - { 0x00009988, 0x00000000 },
- - { 0x0000998c, 0x00000000 },
- - { 0x00009990, 0x00000000 },
- - { 0x00009994, 0x00000000 },
- - { 0x00009998, 0x00000000 },
- - { 0x0000999c, 0x00000000 },
- - { 0x000099a0, 0x00000000 },
- - { 0x000099a4, 0x00000001 },
- - { 0x000099a8, 0x001fff00 },
- - { 0x000099ac, 0x00000000 },
- - { 0x000099b0, 0x03051000 },
- - { 0x000099dc, 0x00000000 },
- - { 0x000099e0, 0x00000200 },
- - { 0x000099e4, 0xaaaaaaaa },
- - { 0x000099e8, 0x3c466478 },
- - { 0x000099ec, 0x000000aa },
- - { 0x000099fc, 0x00001042 },
- - { 0x00009b00, 0x00000000 },
- - { 0x00009b04, 0x00000001 },
- - { 0x00009b08, 0x00000002 },
- - { 0x00009b0c, 0x00000003 },
- - { 0x00009b10, 0x00000004 },
- - { 0x00009b14, 0x00000005 },
- - { 0x00009b18, 0x00000008 },
- - { 0x00009b1c, 0x00000009 },
- - { 0x00009b20, 0x0000000a },
- - { 0x00009b24, 0x0000000b },
- - { 0x00009b28, 0x0000000c },
- - { 0x00009b2c, 0x0000000d },
- - { 0x00009b30, 0x00000010 },
- - { 0x00009b34, 0x00000011 },
- - { 0x00009b38, 0x00000012 },
- - { 0x00009b3c, 0x00000013 },
- - { 0x00009b40, 0x00000014 },
- - { 0x00009b44, 0x00000015 },
- - { 0x00009b48, 0x00000018 },
- - { 0x00009b4c, 0x00000019 },
- - { 0x00009b50, 0x0000001a },
- - { 0x00009b54, 0x0000001b },
- - { 0x00009b58, 0x0000001c },
- - { 0x00009b5c, 0x0000001d },
- - { 0x00009b60, 0x00000020 },
- - { 0x00009b64, 0x00000021 },
- - { 0x00009b68, 0x00000022 },
- - { 0x00009b6c, 0x00000023 },
- - { 0x00009b70, 0x00000024 },
- - { 0x00009b74, 0x00000025 },
- - { 0x00009b78, 0x00000028 },
- - { 0x00009b7c, 0x00000029 },
- - { 0x00009b80, 0x0000002a },
- - { 0x00009b84, 0x0000002b },
- - { 0x00009b88, 0x0000002c },
- - { 0x00009b8c, 0x0000002d },
- - { 0x00009b90, 0x00000030 },
- - { 0x00009b94, 0x00000031 },
- - { 0x00009b98, 0x00000032 },
- - { 0x00009b9c, 0x00000033 },
- - { 0x00009ba0, 0x00000034 },
- - { 0x00009ba4, 0x00000035 },
- - { 0x00009ba8, 0x00000035 },
- - { 0x00009bac, 0x00000035 },
- - { 0x00009bb0, 0x00000035 },
- - { 0x00009bb4, 0x00000035 },
- - { 0x00009bb8, 0x00000035 },
- - { 0x00009bbc, 0x00000035 },
- - { 0x00009bc0, 0x00000035 },
- - { 0x00009bc4, 0x00000035 },
- - { 0x00009bc8, 0x00000035 },
- - { 0x00009bcc, 0x00000035 },
- - { 0x00009bd0, 0x00000035 },
- - { 0x00009bd4, 0x00000035 },
- - { 0x00009bd8, 0x00000035 },
- - { 0x00009bdc, 0x00000035 },
- - { 0x00009be0, 0x00000035 },
- - { 0x00009be4, 0x00000035 },
- - { 0x00009be8, 0x00000035 },
- - { 0x00009bec, 0x00000035 },
- - { 0x00009bf0, 0x00000035 },
- - { 0x00009bf4, 0x00000035 },
- - { 0x00009bf8, 0x00000010 },
- - { 0x00009bfc, 0x0000001a },
- - { 0x0000a210, 0x40806333 },
- - { 0x0000a214, 0x00106c10 },
- - { 0x0000a218, 0x009c4060 },
- - { 0x0000a220, 0x018830c6 },
- - { 0x0000a224, 0x00000400 },
- - { 0x0000a228, 0x00000bb5 },
- - { 0x0000a22c, 0x00000011 },
- - { 0x0000a234, 0x20202020 },
- - { 0x0000a238, 0x20202020 },
- - { 0x0000a23c, 0x13c889af },
- - { 0x0000a240, 0x38490a20 },
- - { 0x0000a244, 0x00007bb6 },
- - { 0x0000a248, 0x0fff3ffc },
- - { 0x0000a24c, 0x00000001 },
- - { 0x0000a250, 0x0000a000 },
- - { 0x0000a254, 0x00000000 },
- - { 0x0000a258, 0x0cc75380 },
- - { 0x0000a25c, 0x0f0f0f01 },
- - { 0x0000a260, 0xdfa91f01 },
- - { 0x0000a268, 0x00000000 },
- - { 0x0000a26c, 0x0e79e5c6 },
- - { 0x0000b26c, 0x0e79e5c6 },
- - { 0x0000c26c, 0x0e79e5c6 },
- - { 0x0000d270, 0x00820820 },
- - { 0x0000a278, 0x1ce739ce },
- - { 0x0000a27c, 0x051701ce },
- - { 0x0000a338, 0x00000000 },
- - { 0x0000a33c, 0x00000000 },
- - { 0x0000a340, 0x00000000 },
- - { 0x0000a344, 0x00000000 },
- - { 0x0000a348, 0x3fffffff },
- - { 0x0000a34c, 0x3fffffff },
- - { 0x0000a350, 0x3fffffff },
- - { 0x0000a354, 0x0003ffff },
- - { 0x0000a358, 0x79a8aa1f },
- - { 0x0000d35c, 0x07ffffef },
- - { 0x0000d360, 0x0fffffe7 },
- - { 0x0000d364, 0x17ffffe5 },
- - { 0x0000d368, 0x1fffffe4 },
- - { 0x0000d36c, 0x37ffffe3 },
- - { 0x0000d370, 0x3fffffe3 },
- - { 0x0000d374, 0x57ffffe3 },
- - { 0x0000d378, 0x5fffffe2 },
- - { 0x0000d37c, 0x7fffffe2 },
- - { 0x0000d380, 0x7f3c7bba },
- - { 0x0000d384, 0xf3307ff0 },
- - { 0x0000a388, 0x08000000 },
- - { 0x0000a38c, 0x20202020 },
- - { 0x0000a390, 0x20202020 },
- - { 0x0000a394, 0x1ce739ce },
- - { 0x0000a398, 0x000001ce },
- - { 0x0000a39c, 0x00000001 },
- - { 0x0000a3a0, 0x00000000 },
- - { 0x0000a3a4, 0x00000000 },
- - { 0x0000a3a8, 0x00000000 },
- - { 0x0000a3ac, 0x00000000 },
- - { 0x0000a3b0, 0x00000000 },
- - { 0x0000a3b4, 0x00000000 },
- - { 0x0000a3b8, 0x00000000 },
- - { 0x0000a3bc, 0x00000000 },
- - { 0x0000a3c0, 0x00000000 },
- - { 0x0000a3c4, 0x00000000 },
- - { 0x0000a3c8, 0x00000246 },
- - { 0x0000a3cc, 0x20202020 },
- - { 0x0000a3d0, 0x20202020 },
- - { 0x0000a3d4, 0x20202020 },
- - { 0x0000a3dc, 0x1ce739ce },
- - { 0x0000a3e0, 0x000001ce },
- -};
- -
- -static const u32 ar5416Bank0[][2] = {
- - { 0x000098b0, 0x1e5795e5 },
- - { 0x000098e0, 0x02008020 },
- -};
- -
- -static const u32 ar5416BB_RfGain[][3] = {
- - { 0x00009a00, 0x00000000, 0x00000000 },
- - { 0x00009a04, 0x00000040, 0x00000040 },
- - { 0x00009a08, 0x00000080, 0x00000080 },
- - { 0x00009a0c, 0x000001a1, 0x00000141 },
- - { 0x00009a10, 0x000001e1, 0x00000181 },
- - { 0x00009a14, 0x00000021, 0x000001c1 },
- - { 0x00009a18, 0x00000061, 0x00000001 },
- - { 0x00009a1c, 0x00000168, 0x00000041 },
- - { 0x00009a20, 0x000001a8, 0x000001a8 },
- - { 0x00009a24, 0x000001e8, 0x000001e8 },
- - { 0x00009a28, 0x00000028, 0x00000028 },
- - { 0x00009a2c, 0x00000068, 0x00000068 },
- - { 0x00009a30, 0x00000189, 0x000000a8 },
- - { 0x00009a34, 0x000001c9, 0x00000169 },
- - { 0x00009a38, 0x00000009, 0x000001a9 },
- - { 0x00009a3c, 0x00000049, 0x000001e9 },
- - { 0x00009a40, 0x00000089, 0x00000029 },
- - { 0x00009a44, 0x00000170, 0x00000069 },
- - { 0x00009a48, 0x000001b0, 0x00000190 },
- - { 0x00009a4c, 0x000001f0, 0x000001d0 },
- - { 0x00009a50, 0x00000030, 0x00000010 },
- - { 0x00009a54, 0x00000070, 0x00000050 },
- - { 0x00009a58, 0x00000191, 0x00000090 },
- - { 0x00009a5c, 0x000001d1, 0x00000151 },
- - { 0x00009a60, 0x00000011, 0x00000191 },
- - { 0x00009a64, 0x00000051, 0x000001d1 },
- - { 0x00009a68, 0x00000091, 0x00000011 },
- - { 0x00009a6c, 0x000001b8, 0x00000051 },
- - { 0x00009a70, 0x000001f8, 0x00000198 },
- - { 0x00009a74, 0x00000038, 0x000001d8 },
- - { 0x00009a78, 0x00000078, 0x00000018 },
- - { 0x00009a7c, 0x00000199, 0x00000058 },
- - { 0x00009a80, 0x000001d9, 0x00000098 },
- - { 0x00009a84, 0x00000019, 0x00000159 },
- - { 0x00009a88, 0x00000059, 0x00000199 },
- - { 0x00009a8c, 0x00000099, 0x000001d9 },
- - { 0x00009a90, 0x000000d9, 0x00000019 },
- - { 0x00009a94, 0x000000f9, 0x00000059 },
- - { 0x00009a98, 0x000000f9, 0x00000099 },
- - { 0x00009a9c, 0x000000f9, 0x000000d9 },
- - { 0x00009aa0, 0x000000f9, 0x000000f9 },
- - { 0x00009aa4, 0x000000f9, 0x000000f9 },
- - { 0x00009aa8, 0x000000f9, 0x000000f9 },
- - { 0x00009aac, 0x000000f9, 0x000000f9 },
- - { 0x00009ab0, 0x000000f9, 0x000000f9 },
- - { 0x00009ab4, 0x000000f9, 0x000000f9 },
- - { 0x00009ab8, 0x000000f9, 0x000000f9 },
- - { 0x00009abc, 0x000000f9, 0x000000f9 },
- - { 0x00009ac0, 0x000000f9, 0x000000f9 },
- - { 0x00009ac4, 0x000000f9, 0x000000f9 },
- - { 0x00009ac8, 0x000000f9, 0x000000f9 },
- - { 0x00009acc, 0x000000f9, 0x000000f9 },
- - { 0x00009ad0, 0x000000f9, 0x000000f9 },
- - { 0x00009ad4, 0x000000f9, 0x000000f9 },
- - { 0x00009ad8, 0x000000f9, 0x000000f9 },
- - { 0x00009adc, 0x000000f9, 0x000000f9 },
- - { 0x00009ae0, 0x000000f9, 0x000000f9 },
- - { 0x00009ae4, 0x000000f9, 0x000000f9 },
- - { 0x00009ae8, 0x000000f9, 0x000000f9 },
- - { 0x00009aec, 0x000000f9, 0x000000f9 },
- - { 0x00009af0, 0x000000f9, 0x000000f9 },
- - { 0x00009af4, 0x000000f9, 0x000000f9 },
- - { 0x00009af8, 0x000000f9, 0x000000f9 },
- - { 0x00009afc, 0x000000f9, 0x000000f9 },
- -};
- -
- -static const u32 ar5416Bank1[][2] = {
- - { 0x000098b0, 0x02108421 },
- - { 0x000098ec, 0x00000008 },
- -};
- -
- -static const u32 ar5416Bank2[][2] = {
- - { 0x000098b0, 0x0e73ff17 },
- - { 0x000098e0, 0x00000420 },
- -};
- -
- -static const u32 ar5416Bank3[][3] = {
- - { 0x000098f0, 0x01400018, 0x01c00018 },
- -};
- -
- -static const u32 ar5416Bank6[][3] = {
- -
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00e00000, 0x00e00000 },
- - { 0x0000989c, 0x005e0000, 0x005e0000 },
- - { 0x0000989c, 0x00120000, 0x00120000 },
- - { 0x0000989c, 0x00620000, 0x00620000 },
- - { 0x0000989c, 0x00020000, 0x00020000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x40ff0000, 0x40ff0000 },
- - { 0x0000989c, 0x005f0000, 0x005f0000 },
- - { 0x0000989c, 0x00870000, 0x00870000 },
- - { 0x0000989c, 0x00f90000, 0x00f90000 },
- - { 0x0000989c, 0x007b0000, 0x007b0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00f50000, 0x00f50000 },
- - { 0x0000989c, 0x00dc0000, 0x00dc0000 },
- - { 0x0000989c, 0x00110000, 0x00110000 },
- - { 0x0000989c, 0x006100a8, 0x006100a8 },
- - { 0x0000989c, 0x004210a2, 0x004210a2 },
- - { 0x0000989c, 0x0014008f, 0x0014008f },
- - { 0x0000989c, 0x00c40003, 0x00c40003 },
- - { 0x0000989c, 0x003000f2, 0x003000f2 },
- - { 0x0000989c, 0x00440016, 0x00440016 },
- - { 0x0000989c, 0x00410040, 0x00410040 },
- - { 0x0000989c, 0x0001805e, 0x0001805e },
- - { 0x0000989c, 0x0000c0ab, 0x0000c0ab },
- - { 0x0000989c, 0x000000f1, 0x000000f1 },
- - { 0x0000989c, 0x00002081, 0x00002081 },
- - { 0x0000989c, 0x000000d4, 0x000000d4 },
- - { 0x000098d0, 0x0000000f, 0x0010000f },
- -};
- -
- -static const u32 ar5416Bank6TPC[][3] = {
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00e00000, 0x00e00000 },
- - { 0x0000989c, 0x005e0000, 0x005e0000 },
- - { 0x0000989c, 0x00120000, 0x00120000 },
- - { 0x0000989c, 0x00620000, 0x00620000 },
- - { 0x0000989c, 0x00020000, 0x00020000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x40ff0000, 0x40ff0000 },
- - { 0x0000989c, 0x005f0000, 0x005f0000 },
- - { 0x0000989c, 0x00870000, 0x00870000 },
- - { 0x0000989c, 0x00f90000, 0x00f90000 },
- - { 0x0000989c, 0x007b0000, 0x007b0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00f50000, 0x00f50000 },
- - { 0x0000989c, 0x00dc0000, 0x00dc0000 },
- - { 0x0000989c, 0x00110000, 0x00110000 },
- - { 0x0000989c, 0x006100a8, 0x006100a8 },
- - { 0x0000989c, 0x00423022, 0x00423022 },
- - { 0x0000989c, 0x201400df, 0x201400df },
- - { 0x0000989c, 0x00c40002, 0x00c40002 },
- - { 0x0000989c, 0x003000f2, 0x003000f2 },
- - { 0x0000989c, 0x00440016, 0x00440016 },
- - { 0x0000989c, 0x00410040, 0x00410040 },
- - { 0x0000989c, 0x0001805e, 0x0001805e },
- - { 0x0000989c, 0x0000c0ab, 0x0000c0ab },
- - { 0x0000989c, 0x000000e1, 0x000000e1 },
- - { 0x0000989c, 0x00007081, 0x00007081 },
- - { 0x0000989c, 0x000000d4, 0x000000d4 },
- - { 0x000098d0, 0x0000000f, 0x0010000f },
- -};
- -
- -static const u32 ar5416Bank7[][2] = {
- - { 0x0000989c, 0x00000500 },
- - { 0x0000989c, 0x00000800 },
- - { 0x000098cc, 0x0000000e },
- -};
- -
- -static const u32 ar5416Addac[][2] = {
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000003 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x0000000c },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000030 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000060 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000058 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x000098cc, 0x00000000 },
- -};
- -
- -static const u32 ar5416Modes_9100[][6] = {
- - { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
- - { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
- - { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
- - { 0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000, 0x00014008 },
- - { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
- - { 0x0000801c, 0x128d93a7, 0x128d93cf, 0x12e013d7, 0x12e013ab, 0x098813cf },
- - { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
- - { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
- - { 0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- - { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
- - { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- - { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
- - { 0x00009844, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0, 0x037216a0 },
- - { 0x00009848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- - { 0x0000a848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- - { 0x0000b848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- - { 0x00009850, 0x6d48b4e2, 0x6d48b4e2, 0x6d48b0e2, 0x6d48b0e2, 0x6d48b0e2 },
- - { 0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec86d2e, 0x7ec84d2e, 0x7ec82d2e },
- - { 0x0000985c, 0x3139605e, 0x3139605e, 0x3139605e, 0x3139605e, 0x3139605e },
- - { 0x00009860, 0x00048d18, 0x00048d18, 0x00048d20, 0x00048d20, 0x00048d18 },
- - { 0x0000c864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- - { 0x00009868, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0 },
- - { 0x0000986c, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081 },
- - { 0x00009914, 0x000007d0, 0x000007d0, 0x00000898, 0x00000898, 0x000007d0 },
- - { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
- - { 0x00009924, 0xd00a8a07, 0xd00a8a07, 0xd00a8a11, 0xd00a8a0d, 0xd00a8a0d },
- - { 0x00009940, 0x00754604, 0x00754604, 0xfff81204, 0xfff81204, 0xfff81204 },
- - { 0x00009944, 0xdfb81020, 0xdfb81020, 0xdfb81020, 0xdfb81020, 0xdfb81020 },
- - { 0x00009954, 0x5f3ca3de, 0x5f3ca3de, 0xe250a51e, 0xe250a51e, 0xe250a51e },
- - { 0x00009958, 0x2108ecff, 0x2108ecff, 0x3388ffff, 0x3388ffff, 0x3388ffff },
- -#ifdef TB243
- - { 0x00009960, 0x00000900, 0x00000900, 0x00009b40, 0x00009b40, 0x00012d80 },
- - { 0x0000a960, 0x00000900, 0x00000900, 0x00009b40, 0x00009b40, 0x00012d80 },
- - { 0x0000b960, 0x00000900, 0x00000900, 0x00009b40, 0x00009b40, 0x00012d80 },
- - { 0x00009964, 0x00000000, 0x00000000, 0x00002210, 0x00002210, 0x00001120 },
- -#else
- - { 0x00009960, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0 },
- - { 0x0000a960, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0 },
- - { 0x0000b960, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0 },
- - { 0x00009964, 0x00001120, 0x00001120, 0x00001120, 0x00001120, 0x00001120 },
- -#endif
- - { 0x0000c9bc, 0x001a0600, 0x001a0600, 0x001a1000, 0x001a0c00, 0x001a0c00 },
- - { 0x000099c0, 0x038919be, 0x038919be, 0x038919be, 0x038919be, 0x038919be },
- - { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
- - { 0x000099c8, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329 },
- - { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
- - { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
- - { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a204, 0x00000880, 0x00000880, 0x00000880, 0x00000880, 0x00000880 },
- - { 0x0000a208, 0xd6be4788, 0xd6be4788, 0xd03e4788, 0xd03e4788, 0xd03e4788 },
- - { 0x0000a20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
- - { 0x0000b20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
- - { 0x0000c20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
- - { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
- - { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- - { 0x0000a274, 0x0a1a9caa, 0x0a1a9caa, 0x0a1a7caa, 0x0a1a7caa, 0x0a1a7caa },
- - { 0x0000a300, 0x18010000, 0x18010000, 0x18010000, 0x18010000, 0x18010000 },
- - { 0x0000a304, 0x30032602, 0x30032602, 0x2e032402, 0x2e032402, 0x2e032402 },
- - { 0x0000a308, 0x48073e06, 0x48073e06, 0x4a0a3c06, 0x4a0a3c06, 0x4a0a3c06 },
- - { 0x0000a30c, 0x560b4c0a, 0x560b4c0a, 0x621a540b, 0x621a540b, 0x621a540b },
- - { 0x0000a310, 0x641a600f, 0x641a600f, 0x764f6c1b, 0x764f6c1b, 0x764f6c1b },
- - { 0x0000a314, 0x7a4f6e1b, 0x7a4f6e1b, 0x845b7a5a, 0x845b7a5a, 0x845b7a5a },
- - { 0x0000a318, 0x8c5b7e5a, 0x8c5b7e5a, 0x950f8ccf, 0x950f8ccf, 0x950f8ccf },
- - { 0x0000a31c, 0x9d0f96cf, 0x9d0f96cf, 0xa5cf9b4f, 0xa5cf9b4f, 0xa5cf9b4f },
- - { 0x0000a320, 0xb51fa69f, 0xb51fa69f, 0xbddfaf1f, 0xbddfaf1f, 0xbddfaf1f },
- - { 0x0000a324, 0xcb3fbd07, 0xcb3fbcbf, 0xd1ffc93f, 0xd1ffc93f, 0xd1ffc93f },
- - { 0x0000a328, 0x0000d7bf, 0x0000d7bf, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a32c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a330, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- -};
- -
- -static const u32 ar5416Common_9100[][2] = {
- - { 0x0000000c, 0x00000000 },
- - { 0x00000030, 0x00020015 },
- - { 0x00000034, 0x00000005 },
- - { 0x00000040, 0x00000000 },
- - { 0x00000044, 0x00000008 },
- - { 0x00000048, 0x00000008 },
- - { 0x0000004c, 0x00000010 },
- - { 0x00000050, 0x00000000 },
- - { 0x00000054, 0x0000001f },
- - { 0x00000800, 0x00000000 },
- - { 0x00000804, 0x00000000 },
- - { 0x00000808, 0x00000000 },
- - { 0x0000080c, 0x00000000 },
- - { 0x00000810, 0x00000000 },
- - { 0x00000814, 0x00000000 },
- - { 0x00000818, 0x00000000 },
- - { 0x0000081c, 0x00000000 },
- - { 0x00000820, 0x00000000 },
- - { 0x00000824, 0x00000000 },
- - { 0x00001040, 0x002ffc0f },
- - { 0x00001044, 0x002ffc0f },
- - { 0x00001048, 0x002ffc0f },
- - { 0x0000104c, 0x002ffc0f },
- - { 0x00001050, 0x002ffc0f },
- - { 0x00001054, 0x002ffc0f },
- - { 0x00001058, 0x002ffc0f },
- - { 0x0000105c, 0x002ffc0f },
- - { 0x00001060, 0x002ffc0f },
- - { 0x00001064, 0x002ffc0f },
- - { 0x00001230, 0x00000000 },
- - { 0x00001270, 0x00000000 },
- - { 0x00001038, 0x00000000 },
- - { 0x00001078, 0x00000000 },
- - { 0x000010b8, 0x00000000 },
- - { 0x000010f8, 0x00000000 },
- - { 0x00001138, 0x00000000 },
- - { 0x00001178, 0x00000000 },
- - { 0x000011b8, 0x00000000 },
- - { 0x000011f8, 0x00000000 },
- - { 0x00001238, 0x00000000 },
- - { 0x00001278, 0x00000000 },
- - { 0x000012b8, 0x00000000 },
- - { 0x000012f8, 0x00000000 },
- - { 0x00001338, 0x00000000 },
- - { 0x00001378, 0x00000000 },
- - { 0x000013b8, 0x00000000 },
- - { 0x000013f8, 0x00000000 },
- - { 0x00001438, 0x00000000 },
- - { 0x00001478, 0x00000000 },
- - { 0x000014b8, 0x00000000 },
- - { 0x000014f8, 0x00000000 },
- - { 0x00001538, 0x00000000 },
- - { 0x00001578, 0x00000000 },
- - { 0x000015b8, 0x00000000 },
- - { 0x000015f8, 0x00000000 },
- - { 0x00001638, 0x00000000 },
- - { 0x00001678, 0x00000000 },
- - { 0x000016b8, 0x00000000 },
- - { 0x000016f8, 0x00000000 },
- - { 0x00001738, 0x00000000 },
- - { 0x00001778, 0x00000000 },
- - { 0x000017b8, 0x00000000 },
- - { 0x000017f8, 0x00000000 },
- - { 0x0000103c, 0x00000000 },
- - { 0x0000107c, 0x00000000 },
- - { 0x000010bc, 0x00000000 },
- - { 0x000010fc, 0x00000000 },
- - { 0x0000113c, 0x00000000 },
- - { 0x0000117c, 0x00000000 },
- - { 0x000011bc, 0x00000000 },
- - { 0x000011fc, 0x00000000 },
- - { 0x0000123c, 0x00000000 },
- - { 0x0000127c, 0x00000000 },
- - { 0x000012bc, 0x00000000 },
- - { 0x000012fc, 0x00000000 },
- - { 0x0000133c, 0x00000000 },
- - { 0x0000137c, 0x00000000 },
- - { 0x000013bc, 0x00000000 },
- - { 0x000013fc, 0x00000000 },
- - { 0x0000143c, 0x00000000 },
- - { 0x0000147c, 0x00000000 },
- - { 0x00020010, 0x00000003 },
- - { 0x00020038, 0x000004c2 },
- - { 0x00008004, 0x00000000 },
- - { 0x00008008, 0x00000000 },
- - { 0x0000800c, 0x00000000 },
- - { 0x00008018, 0x00000700 },
- - { 0x00008020, 0x00000000 },
- - { 0x00008038, 0x00000000 },
- - { 0x0000803c, 0x00000000 },
- - { 0x00008048, 0x40000000 },
- - { 0x00008054, 0x00004000 },
- - { 0x00008058, 0x00000000 },
- - { 0x0000805c, 0x000fc78f },
- - { 0x00008060, 0x0000000f },
- - { 0x00008064, 0x00000000 },
- - { 0x000080c0, 0x2a82301a },
- - { 0x000080c4, 0x05dc01e0 },
- - { 0x000080c8, 0x1f402710 },
- - { 0x000080cc, 0x01f40000 },
- - { 0x000080d0, 0x00001e00 },
- - { 0x000080d4, 0x00000000 },
- - { 0x000080d8, 0x00400000 },
- - { 0x000080e0, 0xffffffff },
- - { 0x000080e4, 0x0000ffff },
- - { 0x000080e8, 0x003f3f3f },
- - { 0x000080ec, 0x00000000 },
- - { 0x000080f0, 0x00000000 },
- - { 0x000080f4, 0x00000000 },
- - { 0x000080f8, 0x00000000 },
- - { 0x000080fc, 0x00020000 },
- - { 0x00008100, 0x00020000 },
- - { 0x00008104, 0x00000001 },
- - { 0x00008108, 0x00000052 },
- - { 0x0000810c, 0x00000000 },
- - { 0x00008110, 0x00000168 },
- - { 0x00008118, 0x000100aa },
- - { 0x0000811c, 0x00003210 },
- - { 0x00008120, 0x08f04800 },
- - { 0x00008124, 0x00000000 },
- - { 0x00008128, 0x00000000 },
- - { 0x0000812c, 0x00000000 },
- - { 0x00008130, 0x00000000 },
- - { 0x00008134, 0x00000000 },
- - { 0x00008138, 0x00000000 },
- - { 0x0000813c, 0x00000000 },
- - { 0x00008144, 0x00000000 },
- - { 0x00008168, 0x00000000 },
- - { 0x0000816c, 0x00000000 },
- - { 0x00008170, 0x32143320 },
- - { 0x00008174, 0xfaa4fa50 },
- - { 0x00008178, 0x00000100 },
- - { 0x0000817c, 0x00000000 },
- - { 0x000081c4, 0x00000000 },
- - { 0x000081d0, 0x00003210 },
- - { 0x000081ec, 0x00000000 },
- - { 0x000081f0, 0x00000000 },
- - { 0x000081f4, 0x00000000 },
- - { 0x000081f8, 0x00000000 },
- - { 0x000081fc, 0x00000000 },
- - { 0x00008200, 0x00000000 },
- - { 0x00008204, 0x00000000 },
- - { 0x00008208, 0x00000000 },
- - { 0x0000820c, 0x00000000 },
- - { 0x00008210, 0x00000000 },
- - { 0x00008214, 0x00000000 },
- - { 0x00008218, 0x00000000 },
- - { 0x0000821c, 0x00000000 },
- - { 0x00008220, 0x00000000 },
- - { 0x00008224, 0x00000000 },
- - { 0x00008228, 0x00000000 },
- - { 0x0000822c, 0x00000000 },
- - { 0x00008230, 0x00000000 },
- - { 0x00008234, 0x00000000 },
- - { 0x00008238, 0x00000000 },
- - { 0x0000823c, 0x00000000 },
- - { 0x00008240, 0x00100000 },
- - { 0x00008244, 0x0010f400 },
- - { 0x00008248, 0x00000100 },
- - { 0x0000824c, 0x0001e800 },
- - { 0x00008250, 0x00000000 },
- - { 0x00008254, 0x00000000 },
- - { 0x00008258, 0x00000000 },
- - { 0x0000825c, 0x400000ff },
- - { 0x00008260, 0x00080922 },
- - { 0x00008270, 0x00000000 },
- - { 0x00008274, 0x40000000 },
- - { 0x00008278, 0x003e4180 },
- - { 0x0000827c, 0x00000000 },
- - { 0x00008284, 0x0000002c },
- - { 0x00008288, 0x0000002c },
- - { 0x0000828c, 0x00000000 },
- - { 0x00008294, 0x00000000 },
- - { 0x00008298, 0x00000000 },
- - { 0x00008300, 0x00000000 },
- - { 0x00008304, 0x00000000 },
- - { 0x00008308, 0x00000000 },
- - { 0x0000830c, 0x00000000 },
- - { 0x00008310, 0x00000000 },
- - { 0x00008314, 0x00000000 },
- - { 0x00008318, 0x00000000 },
- - { 0x00008328, 0x00000000 },
- - { 0x0000832c, 0x00000007 },
- - { 0x00008330, 0x00000302 },
- - { 0x00008334, 0x00000e00 },
- - { 0x00008338, 0x00000000 },
- - { 0x0000833c, 0x00000000 },
- - { 0x00008340, 0x000107ff },
- - { 0x00009808, 0x00000000 },
- - { 0x0000980c, 0xad848e19 },
- - { 0x00009810, 0x7d14e000 },
- - { 0x00009814, 0x9c0a9f6b },
- - { 0x0000981c, 0x00000000 },
- - { 0x0000982c, 0x0000a000 },
- - { 0x00009830, 0x00000000 },
- - { 0x0000983c, 0x00200400 },
- - { 0x00009840, 0x206a01ae },
- - { 0x0000984c, 0x1284233c },
- - { 0x00009854, 0x00000859 },
- - { 0x00009900, 0x00000000 },
- - { 0x00009904, 0x00000000 },
- - { 0x00009908, 0x00000000 },
- - { 0x0000990c, 0x00000000 },
- - { 0x0000991c, 0x10000fff },
- - { 0x00009920, 0x05100000 },
- - { 0x0000a920, 0x05100000 },
- - { 0x0000b920, 0x05100000 },
- - { 0x00009928, 0x00000001 },
- - { 0x0000992c, 0x00000004 },
- - { 0x00009934, 0x1e1f2022 },
- - { 0x00009938, 0x0a0b0c0d },
- - { 0x0000993c, 0x00000000 },
- - { 0x00009948, 0x9280b212 },
- - { 0x0000994c, 0x00020028 },
- - { 0x0000c95c, 0x004b6a8e },
- - { 0x0000c968, 0x000003ce },
- - { 0x00009970, 0x190fb515 },
- - { 0x00009974, 0x00000000 },
- - { 0x00009978, 0x00000001 },
- - { 0x0000997c, 0x00000000 },
- - { 0x00009980, 0x00000000 },
- - { 0x00009984, 0x00000000 },
- - { 0x00009988, 0x00000000 },
- - { 0x0000998c, 0x00000000 },
- - { 0x00009990, 0x00000000 },
- - { 0x00009994, 0x00000000 },
- - { 0x00009998, 0x00000000 },
- - { 0x0000999c, 0x00000000 },
- - { 0x000099a0, 0x00000000 },
- - { 0x000099a4, 0x00000001 },
- - { 0x000099a8, 0x201fff00 },
- - { 0x000099ac, 0x006f0000 },
- - { 0x000099b0, 0x03051000 },
- - { 0x000099dc, 0x00000000 },
- - { 0x000099e0, 0x00000200 },
- - { 0x000099e4, 0xaaaaaaaa },
- - { 0x000099e8, 0x3c466478 },
- - { 0x000099ec, 0x0cc80caa },
- - { 0x000099fc, 0x00001042 },
- - { 0x00009b00, 0x00000000 },
- - { 0x00009b04, 0x00000001 },
- - { 0x00009b08, 0x00000002 },
- - { 0x00009b0c, 0x00000003 },
- - { 0x00009b10, 0x00000004 },
- - { 0x00009b14, 0x00000005 },
- - { 0x00009b18, 0x00000008 },
- - { 0x00009b1c, 0x00000009 },
- - { 0x00009b20, 0x0000000a },
- - { 0x00009b24, 0x0000000b },
- - { 0x00009b28, 0x0000000c },
- - { 0x00009b2c, 0x0000000d },
- - { 0x00009b30, 0x00000010 },
- - { 0x00009b34, 0x00000011 },
- - { 0x00009b38, 0x00000012 },
- - { 0x00009b3c, 0x00000013 },
- - { 0x00009b40, 0x00000014 },
- - { 0x00009b44, 0x00000015 },
- - { 0x00009b48, 0x00000018 },
- - { 0x00009b4c, 0x00000019 },
- - { 0x00009b50, 0x0000001a },
- - { 0x00009b54, 0x0000001b },
- - { 0x00009b58, 0x0000001c },
- - { 0x00009b5c, 0x0000001d },
- - { 0x00009b60, 0x00000020 },
- - { 0x00009b64, 0x00000021 },
- - { 0x00009b68, 0x00000022 },
- - { 0x00009b6c, 0x00000023 },
- - { 0x00009b70, 0x00000024 },
- - { 0x00009b74, 0x00000025 },
- - { 0x00009b78, 0x00000028 },
- - { 0x00009b7c, 0x00000029 },
- - { 0x00009b80, 0x0000002a },
- - { 0x00009b84, 0x0000002b },
- - { 0x00009b88, 0x0000002c },
- - { 0x00009b8c, 0x0000002d },
- - { 0x00009b90, 0x00000030 },
- - { 0x00009b94, 0x00000031 },
- - { 0x00009b98, 0x00000032 },
- - { 0x00009b9c, 0x00000033 },
- - { 0x00009ba0, 0x00000034 },
- - { 0x00009ba4, 0x00000035 },
- - { 0x00009ba8, 0x00000035 },
- - { 0x00009bac, 0x00000035 },
- - { 0x00009bb0, 0x00000035 },
- - { 0x00009bb4, 0x00000035 },
- - { 0x00009bb8, 0x00000035 },
- - { 0x00009bbc, 0x00000035 },
- - { 0x00009bc0, 0x00000035 },
- - { 0x00009bc4, 0x00000035 },
- - { 0x00009bc8, 0x00000035 },
- - { 0x00009bcc, 0x00000035 },
- - { 0x00009bd0, 0x00000035 },
- - { 0x00009bd4, 0x00000035 },
- - { 0x00009bd8, 0x00000035 },
- - { 0x00009bdc, 0x00000035 },
- - { 0x00009be0, 0x00000035 },
- - { 0x00009be4, 0x00000035 },
- - { 0x00009be8, 0x00000035 },
- - { 0x00009bec, 0x00000035 },
- - { 0x00009bf0, 0x00000035 },
- - { 0x00009bf4, 0x00000035 },
- - { 0x00009bf8, 0x00000010 },
- - { 0x00009bfc, 0x0000001a },
- - { 0x0000a210, 0x40806333 },
- - { 0x0000a214, 0x00106c10 },
- - { 0x0000a218, 0x009c4060 },
- - { 0x0000a220, 0x018830c6 },
- - { 0x0000a224, 0x00000400 },
- - { 0x0000a228, 0x001a0bb5 },
- - { 0x0000a22c, 0x00000000 },
- - { 0x0000a234, 0x20202020 },
- - { 0x0000a238, 0x20202020 },
- - { 0x0000a23c, 0x13c889ae },
- - { 0x0000a240, 0x38490a20 },
- - { 0x0000a244, 0x00007bb6 },
- - { 0x0000a248, 0x0fff3ffc },
- - { 0x0000a24c, 0x00000001 },
- - { 0x0000a250, 0x0000a000 },
- - { 0x0000a254, 0x00000000 },
- - { 0x0000a258, 0x0cc75380 },
- - { 0x0000a25c, 0x0f0f0f01 },
- - { 0x0000a260, 0xdfa91f01 },
- - { 0x0000a268, 0x00000001 },
- - { 0x0000a26c, 0x0ebae9c6 },
- - { 0x0000b26c, 0x0ebae9c6 },
- - { 0x0000c26c, 0x0ebae9c6 },
- - { 0x0000d270, 0x00820820 },
- - { 0x0000a278, 0x1ce739ce },
- - { 0x0000a27c, 0x050701ce },
- - { 0x0000a338, 0x00000000 },
- - { 0x0000a33c, 0x00000000 },
- - { 0x0000a340, 0x00000000 },
- - { 0x0000a344, 0x00000000 },
- - { 0x0000a348, 0x3fffffff },
- - { 0x0000a34c, 0x3fffffff },
- - { 0x0000a350, 0x3fffffff },
- - { 0x0000a354, 0x0003ffff },
- - { 0x0000a358, 0x79a8aa33 },
- - { 0x0000d35c, 0x07ffffef },
- - { 0x0000d360, 0x0fffffe7 },
- - { 0x0000d364, 0x17ffffe5 },
- - { 0x0000d368, 0x1fffffe4 },
- - { 0x0000d36c, 0x37ffffe3 },
- - { 0x0000d370, 0x3fffffe3 },
- - { 0x0000d374, 0x57ffffe3 },
- - { 0x0000d378, 0x5fffffe2 },
- - { 0x0000d37c, 0x7fffffe2 },
- - { 0x0000d380, 0x7f3c7bba },
- - { 0x0000d384, 0xf3307ff0 },
- - { 0x0000a388, 0x0c000000 },
- - { 0x0000a38c, 0x20202020 },
- - { 0x0000a390, 0x20202020 },
- - { 0x0000a394, 0x1ce739ce },
- - { 0x0000a398, 0x000001ce },
- - { 0x0000a39c, 0x00000001 },
- - { 0x0000a3a0, 0x00000000 },
- - { 0x0000a3a4, 0x00000000 },
- - { 0x0000a3a8, 0x00000000 },
- - { 0x0000a3ac, 0x00000000 },
- - { 0x0000a3b0, 0x00000000 },
- - { 0x0000a3b4, 0x00000000 },
- - { 0x0000a3b8, 0x00000000 },
- - { 0x0000a3bc, 0x00000000 },
- - { 0x0000a3c0, 0x00000000 },
- - { 0x0000a3c4, 0x00000000 },
- - { 0x0000a3c8, 0x00000246 },
- - { 0x0000a3cc, 0x20202020 },
- - { 0x0000a3d0, 0x20202020 },
- - { 0x0000a3d4, 0x20202020 },
- - { 0x0000a3dc, 0x1ce739ce },
- - { 0x0000a3e0, 0x000001ce },
- -};
- -
- -static const u32 ar5416Bank0_9100[][2] = {
- - { 0x000098b0, 0x1e5795e5 },
- - { 0x000098e0, 0x02008020 },
- -};
- -
- -static const u32 ar5416BB_RfGain_9100[][3] = {
- - { 0x00009a00, 0x00000000, 0x00000000 },
- - { 0x00009a04, 0x00000040, 0x00000040 },
- - { 0x00009a08, 0x00000080, 0x00000080 },
- - { 0x00009a0c, 0x000001a1, 0x00000141 },
- - { 0x00009a10, 0x000001e1, 0x00000181 },
- - { 0x00009a14, 0x00000021, 0x000001c1 },
- - { 0x00009a18, 0x00000061, 0x00000001 },
- - { 0x00009a1c, 0x00000168, 0x00000041 },
- - { 0x00009a20, 0x000001a8, 0x000001a8 },
- - { 0x00009a24, 0x000001e8, 0x000001e8 },
- - { 0x00009a28, 0x00000028, 0x00000028 },
- - { 0x00009a2c, 0x00000068, 0x00000068 },
- - { 0x00009a30, 0x00000189, 0x000000a8 },
- - { 0x00009a34, 0x000001c9, 0x00000169 },
- - { 0x00009a38, 0x00000009, 0x000001a9 },
- - { 0x00009a3c, 0x00000049, 0x000001e9 },
- - { 0x00009a40, 0x00000089, 0x00000029 },
- - { 0x00009a44, 0x00000170, 0x00000069 },
- - { 0x00009a48, 0x000001b0, 0x00000190 },
- - { 0x00009a4c, 0x000001f0, 0x000001d0 },
- - { 0x00009a50, 0x00000030, 0x00000010 },
- - { 0x00009a54, 0x00000070, 0x00000050 },
- - { 0x00009a58, 0x00000191, 0x00000090 },
- - { 0x00009a5c, 0x000001d1, 0x00000151 },
- - { 0x00009a60, 0x00000011, 0x00000191 },
- - { 0x00009a64, 0x00000051, 0x000001d1 },
- - { 0x00009a68, 0x00000091, 0x00000011 },
- - { 0x00009a6c, 0x000001b8, 0x00000051 },
- - { 0x00009a70, 0x000001f8, 0x00000198 },
- - { 0x00009a74, 0x00000038, 0x000001d8 },
- - { 0x00009a78, 0x00000078, 0x00000018 },
- - { 0x00009a7c, 0x00000199, 0x00000058 },
- - { 0x00009a80, 0x000001d9, 0x00000098 },
- - { 0x00009a84, 0x00000019, 0x00000159 },
- - { 0x00009a88, 0x00000059, 0x00000199 },
- - { 0x00009a8c, 0x00000099, 0x000001d9 },
- - { 0x00009a90, 0x000000d9, 0x00000019 },
- - { 0x00009a94, 0x000000f9, 0x00000059 },
- - { 0x00009a98, 0x000000f9, 0x00000099 },
- - { 0x00009a9c, 0x000000f9, 0x000000d9 },
- - { 0x00009aa0, 0x000000f9, 0x000000f9 },
- - { 0x00009aa4, 0x000000f9, 0x000000f9 },
- - { 0x00009aa8, 0x000000f9, 0x000000f9 },
- - { 0x00009aac, 0x000000f9, 0x000000f9 },
- - { 0x00009ab0, 0x000000f9, 0x000000f9 },
- - { 0x00009ab4, 0x000000f9, 0x000000f9 },
- - { 0x00009ab8, 0x000000f9, 0x000000f9 },
- - { 0x00009abc, 0x000000f9, 0x000000f9 },
- - { 0x00009ac0, 0x000000f9, 0x000000f9 },
- - { 0x00009ac4, 0x000000f9, 0x000000f9 },
- - { 0x00009ac8, 0x000000f9, 0x000000f9 },
- - { 0x00009acc, 0x000000f9, 0x000000f9 },
- - { 0x00009ad0, 0x000000f9, 0x000000f9 },
- - { 0x00009ad4, 0x000000f9, 0x000000f9 },
- - { 0x00009ad8, 0x000000f9, 0x000000f9 },
- - { 0x00009adc, 0x000000f9, 0x000000f9 },
- - { 0x00009ae0, 0x000000f9, 0x000000f9 },
- - { 0x00009ae4, 0x000000f9, 0x000000f9 },
- - { 0x00009ae8, 0x000000f9, 0x000000f9 },
- - { 0x00009aec, 0x000000f9, 0x000000f9 },
- - { 0x00009af0, 0x000000f9, 0x000000f9 },
- - { 0x00009af4, 0x000000f9, 0x000000f9 },
- - { 0x00009af8, 0x000000f9, 0x000000f9 },
- - { 0x00009afc, 0x000000f9, 0x000000f9 },
- -};
- -
- -static const u32 ar5416Bank1_9100[][2] = {
- - { 0x000098b0, 0x02108421},
- - { 0x000098ec, 0x00000008},
- -};
- -
- -static const u32 ar5416Bank2_9100[][2] = {
- - { 0x000098b0, 0x0e73ff17},
- - { 0x000098e0, 0x00000420},
- -};
- -
- -static const u32 ar5416Bank3_9100[][3] = {
- - { 0x000098f0, 0x01400018, 0x01c00018 },
- -};
- -
- -static const u32 ar5416Bank6_9100[][3] = {
- -
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00e00000, 0x00e00000 },
- - { 0x0000989c, 0x005e0000, 0x005e0000 },
- - { 0x0000989c, 0x00120000, 0x00120000 },
- - { 0x0000989c, 0x00620000, 0x00620000 },
- - { 0x0000989c, 0x00020000, 0x00020000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x005f0000, 0x005f0000 },
- - { 0x0000989c, 0x00870000, 0x00870000 },
- - { 0x0000989c, 0x00f90000, 0x00f90000 },
- - { 0x0000989c, 0x007b0000, 0x007b0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00f50000, 0x00f50000 },
- - { 0x0000989c, 0x00dc0000, 0x00dc0000 },
- - { 0x0000989c, 0x00110000, 0x00110000 },
- - { 0x0000989c, 0x006100a8, 0x006100a8 },
- - { 0x0000989c, 0x004210a2, 0x004210a2 },
- - { 0x0000989c, 0x0014000f, 0x0014000f },
- - { 0x0000989c, 0x00c40002, 0x00c40002 },
- - { 0x0000989c, 0x003000f2, 0x003000f2 },
- - { 0x0000989c, 0x00440016, 0x00440016 },
- - { 0x0000989c, 0x00410040, 0x00410040 },
- - { 0x0000989c, 0x000180d6, 0x000180d6 },
- - { 0x0000989c, 0x0000c0aa, 0x0000c0aa },
- - { 0x0000989c, 0x000000b1, 0x000000b1 },
- - { 0x0000989c, 0x00002000, 0x00002000 },
- - { 0x0000989c, 0x000000d4, 0x000000d4 },
- - { 0x000098d0, 0x0000000f, 0x0010000f },
- -};
- -
- -
- -static const u32 ar5416Bank6TPC_9100[][3] = {
- -
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00e00000, 0x00e00000 },
- - { 0x0000989c, 0x005e0000, 0x005e0000 },
- - { 0x0000989c, 0x00120000, 0x00120000 },
- - { 0x0000989c, 0x00620000, 0x00620000 },
- - { 0x0000989c, 0x00020000, 0x00020000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x40ff0000, 0x40ff0000 },
- - { 0x0000989c, 0x005f0000, 0x005f0000 },
- - { 0x0000989c, 0x00870000, 0x00870000 },
- - { 0x0000989c, 0x00f90000, 0x00f90000 },
- - { 0x0000989c, 0x007b0000, 0x007b0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00f50000, 0x00f50000 },
- - { 0x0000989c, 0x00dc0000, 0x00dc0000 },
- - { 0x0000989c, 0x00110000, 0x00110000 },
- - { 0x0000989c, 0x006100a8, 0x006100a8 },
- - { 0x0000989c, 0x00423022, 0x00423022 },
- - { 0x0000989c, 0x2014008f, 0x2014008f },
- - { 0x0000989c, 0x00c40002, 0x00c40002 },
- - { 0x0000989c, 0x003000f2, 0x003000f2 },
- - { 0x0000989c, 0x00440016, 0x00440016 },
- - { 0x0000989c, 0x00410040, 0x00410040 },
- - { 0x0000989c, 0x0001805e, 0x0001805e },
- - { 0x0000989c, 0x0000c0ab, 0x0000c0ab },
- - { 0x0000989c, 0x000000e1, 0x000000e1 },
- - { 0x0000989c, 0x00007080, 0x00007080 },
- - { 0x0000989c, 0x000000d4, 0x000000d4 },
- - { 0x000098d0, 0x0000000f, 0x0010000f },
- -};
- -
- -static const u32 ar5416Bank7_9100[][2] = {
- - { 0x0000989c, 0x00000500 },
- - { 0x0000989c, 0x00000800 },
- - { 0x000098cc, 0x0000000e },
- -};
- -
- -static const u32 ar5416Addac_9100[][2] = {
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000010 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x000000c0 },
- - {0x0000989c, 0x00000015 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x000098cc, 0x00000000 },
- -};
- -
- -static const u32 ar5416Modes_9160[][6] = {
- - { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
- - { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
- - { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
- - { 0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000, 0x00014008 },
- - { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
- - { 0x0000801c, 0x128d93a7, 0x128d93cf, 0x12e013d7, 0x12e013ab, 0x098813cf },
- - { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
- - { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
- - { 0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- - { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
- - { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- - { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
- - { 0x00009844, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0, 0x037216a0 },
- - { 0x00009848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- - { 0x0000a848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- - { 0x0000b848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
- - { 0x00009850, 0x6c48b4e2, 0x6c48b4e2, 0x6c48b0e2, 0x6c48b0e2, 0x6c48b0e2 },
- - { 0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e },
- - { 0x0000985c, 0x31395d5e, 0x31395d5e, 0x31395d5e, 0x31395d5e, 0x31395d5e },
- - { 0x00009860, 0x00048d18, 0x00048d18, 0x00048d20, 0x00048d20, 0x00048d18 },
- - { 0x0000c864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- - { 0x00009868, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0 },
- - { 0x0000986c, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081 },
- - { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
- - { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
- - { 0x00009924, 0xd00a8a07, 0xd00a8a07, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d },
- - { 0x00009944, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020 },
- - { 0x00009960, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40 },
- - { 0x0000a960, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40 },
- - { 0x0000b960, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40 },
- - { 0x00009964, 0x00001120, 0x00001120, 0x00001120, 0x00001120, 0x00001120 },
- - { 0x0000c968, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce, 0x000003ce },
- - { 0x0000c9bc, 0x001a0600, 0x001a0600, 0x001a0c00, 0x001a0c00, 0x001a0c00 },
- - { 0x000099c0, 0x038919be, 0x038919be, 0x038919be, 0x038919be, 0x038919be },
- - { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
- - { 0x000099c8, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329 },
- - { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
- - { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
- - { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a204, 0x00000880, 0x00000880, 0x00000880, 0x00000880, 0x00000880 },
- - { 0x0000a208, 0xd6be4788, 0xd6be4788, 0xd03e4788, 0xd03e4788, 0xd03e4788 },
- - { 0x0000a20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
- - { 0x0000b20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
- - { 0x0000c20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
- - { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
- - { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- - { 0x0000a274, 0x0a1a9caa, 0x0a1a9caa, 0x0a1a7caa, 0x0a1a7caa, 0x0a1a7caa },
- - { 0x0000a300, 0x18010000, 0x18010000, 0x18010000, 0x18010000, 0x18010000 },
- - { 0x0000a304, 0x30032602, 0x30032602, 0x2e032402, 0x2e032402, 0x2e032402 },
- - { 0x0000a308, 0x48073e06, 0x48073e06, 0x4a0a3c06, 0x4a0a3c06, 0x4a0a3c06 },
- - { 0x0000a30c, 0x560b4c0a, 0x560b4c0a, 0x621a540b, 0x621a540b, 0x621a540b },
- - { 0x0000a310, 0x641a600f, 0x641a600f, 0x764f6c1b, 0x764f6c1b, 0x764f6c1b },
- - { 0x0000a314, 0x7a4f6e1b, 0x7a4f6e1b, 0x845b7a5a, 0x845b7a5a, 0x845b7a5a },
- - { 0x0000a318, 0x8c5b7e5a, 0x8c5b7e5a, 0x950f8ccf, 0x950f8ccf, 0x950f8ccf },
- - { 0x0000a31c, 0x9d0f96cf, 0x9d0f96cf, 0xa5cf9b4f, 0xa5cf9b4f, 0xa5cf9b4f },
- - { 0x0000a320, 0xb51fa69f, 0xb51fa69f, 0xbddfaf1f, 0xbddfaf1f, 0xbddfaf1f },
- - { 0x0000a324, 0xcb3fbd07, 0xcb3fbcbf, 0xd1ffc93f, 0xd1ffc93f, 0xd1ffc93f },
- - { 0x0000a328, 0x0000d7bf, 0x0000d7bf, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a32c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a330, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- -};
- -
- -static const u32 ar5416Common_9160[][2] = {
- - { 0x0000000c, 0x00000000 },
- - { 0x00000030, 0x00020015 },
- - { 0x00000034, 0x00000005 },
- - { 0x00000040, 0x00000000 },
- - { 0x00000044, 0x00000008 },
- - { 0x00000048, 0x00000008 },
- - { 0x0000004c, 0x00000010 },
- - { 0x00000050, 0x00000000 },
- - { 0x00000054, 0x0000001f },
- - { 0x00000800, 0x00000000 },
- - { 0x00000804, 0x00000000 },
- - { 0x00000808, 0x00000000 },
- - { 0x0000080c, 0x00000000 },
- - { 0x00000810, 0x00000000 },
- - { 0x00000814, 0x00000000 },
- - { 0x00000818, 0x00000000 },
- - { 0x0000081c, 0x00000000 },
- - { 0x00000820, 0x00000000 },
- - { 0x00000824, 0x00000000 },
- - { 0x00001040, 0x002ffc0f },
- - { 0x00001044, 0x002ffc0f },
- - { 0x00001048, 0x002ffc0f },
- - { 0x0000104c, 0x002ffc0f },
- - { 0x00001050, 0x002ffc0f },
- - { 0x00001054, 0x002ffc0f },
- - { 0x00001058, 0x002ffc0f },
- - { 0x0000105c, 0x002ffc0f },
- - { 0x00001060, 0x002ffc0f },
- - { 0x00001064, 0x002ffc0f },
- - { 0x00001230, 0x00000000 },
- - { 0x00001270, 0x00000000 },
- - { 0x00001038, 0x00000000 },
- - { 0x00001078, 0x00000000 },
- - { 0x000010b8, 0x00000000 },
- - { 0x000010f8, 0x00000000 },
- - { 0x00001138, 0x00000000 },
- - { 0x00001178, 0x00000000 },
- - { 0x000011b8, 0x00000000 },
- - { 0x000011f8, 0x00000000 },
- - { 0x00001238, 0x00000000 },
- - { 0x00001278, 0x00000000 },
- - { 0x000012b8, 0x00000000 },
- - { 0x000012f8, 0x00000000 },
- - { 0x00001338, 0x00000000 },
- - { 0x00001378, 0x00000000 },
- - { 0x000013b8, 0x00000000 },
- - { 0x000013f8, 0x00000000 },
- - { 0x00001438, 0x00000000 },
- - { 0x00001478, 0x00000000 },
- - { 0x000014b8, 0x00000000 },
- - { 0x000014f8, 0x00000000 },
- - { 0x00001538, 0x00000000 },
- - { 0x00001578, 0x00000000 },
- - { 0x000015b8, 0x00000000 },
- - { 0x000015f8, 0x00000000 },
- - { 0x00001638, 0x00000000 },
- - { 0x00001678, 0x00000000 },
- - { 0x000016b8, 0x00000000 },
- - { 0x000016f8, 0x00000000 },
- - { 0x00001738, 0x00000000 },
- - { 0x00001778, 0x00000000 },
- - { 0x000017b8, 0x00000000 },
- - { 0x000017f8, 0x00000000 },
- - { 0x0000103c, 0x00000000 },
- - { 0x0000107c, 0x00000000 },
- - { 0x000010bc, 0x00000000 },
- - { 0x000010fc, 0x00000000 },
- - { 0x0000113c, 0x00000000 },
- - { 0x0000117c, 0x00000000 },
- - { 0x000011bc, 0x00000000 },
- - { 0x000011fc, 0x00000000 },
- - { 0x0000123c, 0x00000000 },
- - { 0x0000127c, 0x00000000 },
- - { 0x000012bc, 0x00000000 },
- - { 0x000012fc, 0x00000000 },
- - { 0x0000133c, 0x00000000 },
- - { 0x0000137c, 0x00000000 },
- - { 0x000013bc, 0x00000000 },
- - { 0x000013fc, 0x00000000 },
- - { 0x0000143c, 0x00000000 },
- - { 0x0000147c, 0x00000000 },
- - { 0x00004030, 0x00000002 },
- - { 0x0000403c, 0x00000002 },
- - { 0x00007010, 0x00000020 },
- - { 0x00007038, 0x000004c2 },
- - { 0x00008004, 0x00000000 },
- - { 0x00008008, 0x00000000 },
- - { 0x0000800c, 0x00000000 },
- - { 0x00008018, 0x00000700 },
- - { 0x00008020, 0x00000000 },
- - { 0x00008038, 0x00000000 },
- - { 0x0000803c, 0x00000000 },
- - { 0x00008048, 0x40000000 },
- - { 0x00008054, 0x00000000 },
- - { 0x00008058, 0x00000000 },
- - { 0x0000805c, 0x000fc78f },
- - { 0x00008060, 0x0000000f },
- - { 0x00008064, 0x00000000 },
- - { 0x000080c0, 0x2a82301a },
- - { 0x000080c4, 0x05dc01e0 },
- - { 0x000080c8, 0x1f402710 },
- - { 0x000080cc, 0x01f40000 },
- - { 0x000080d0, 0x00001e00 },
- - { 0x000080d4, 0x00000000 },
- - { 0x000080d8, 0x00400000 },
- - { 0x000080e0, 0xffffffff },
- - { 0x000080e4, 0x0000ffff },
- - { 0x000080e8, 0x003f3f3f },
- - { 0x000080ec, 0x00000000 },
- - { 0x000080f0, 0x00000000 },
- - { 0x000080f4, 0x00000000 },
- - { 0x000080f8, 0x00000000 },
- - { 0x000080fc, 0x00020000 },
- - { 0x00008100, 0x00020000 },
- - { 0x00008104, 0x00000001 },
- - { 0x00008108, 0x00000052 },
- - { 0x0000810c, 0x00000000 },
- - { 0x00008110, 0x00000168 },
- - { 0x00008118, 0x000100aa },
- - { 0x0000811c, 0x00003210 },
- - { 0x00008120, 0x08f04800 },
- - { 0x00008124, 0x00000000 },
- - { 0x00008128, 0x00000000 },
- - { 0x0000812c, 0x00000000 },
- - { 0x00008130, 0x00000000 },
- - { 0x00008134, 0x00000000 },
- - { 0x00008138, 0x00000000 },
- - { 0x0000813c, 0x00000000 },
- - { 0x00008144, 0xffffffff },
- - { 0x00008168, 0x00000000 },
- - { 0x0000816c, 0x00000000 },
- - { 0x00008170, 0x32143320 },
- - { 0x00008174, 0xfaa4fa50 },
- - { 0x00008178, 0x00000100 },
- - { 0x0000817c, 0x00000000 },
- - { 0x000081c4, 0x00000000 },
- - { 0x000081d0, 0x00003210 },
- - { 0x000081ec, 0x00000000 },
- - { 0x000081f0, 0x00000000 },
- - { 0x000081f4, 0x00000000 },
- - { 0x000081f8, 0x00000000 },
- - { 0x000081fc, 0x00000000 },
- - { 0x00008200, 0x00000000 },
- - { 0x00008204, 0x00000000 },
- - { 0x00008208, 0x00000000 },
- - { 0x0000820c, 0x00000000 },
- - { 0x00008210, 0x00000000 },
- - { 0x00008214, 0x00000000 },
- - { 0x00008218, 0x00000000 },
- - { 0x0000821c, 0x00000000 },
- - { 0x00008220, 0x00000000 },
- - { 0x00008224, 0x00000000 },
- - { 0x00008228, 0x00000000 },
- - { 0x0000822c, 0x00000000 },
- - { 0x00008230, 0x00000000 },
- - { 0x00008234, 0x00000000 },
- - { 0x00008238, 0x00000000 },
- - { 0x0000823c, 0x00000000 },
- - { 0x00008240, 0x00100000 },
- - { 0x00008244, 0x0010f400 },
- - { 0x00008248, 0x00000100 },
- - { 0x0000824c, 0x0001e800 },
- - { 0x00008250, 0x00000000 },
- - { 0x00008254, 0x00000000 },
- - { 0x00008258, 0x00000000 },
- - { 0x0000825c, 0x400000ff },
- - { 0x00008260, 0x00080922 },
- - { 0x00008270, 0x00000000 },
- - { 0x00008274, 0x40000000 },
- - { 0x00008278, 0x003e4180 },
- - { 0x0000827c, 0x00000000 },
- - { 0x00008284, 0x0000002c },
- - { 0x00008288, 0x0000002c },
- - { 0x0000828c, 0x00000000 },
- - { 0x00008294, 0x00000000 },
- - { 0x00008298, 0x00000000 },
- - { 0x00008300, 0x00000000 },
- - { 0x00008304, 0x00000000 },
- - { 0x00008308, 0x00000000 },
- - { 0x0000830c, 0x00000000 },
- - { 0x00008310, 0x00000000 },
- - { 0x00008314, 0x00000000 },
- - { 0x00008318, 0x00000000 },
- - { 0x00008328, 0x00000000 },
- - { 0x0000832c, 0x00000007 },
- - { 0x00008330, 0x00000302 },
- - { 0x00008334, 0x00000e00 },
- - { 0x00008338, 0x00ff0000 },
- - { 0x0000833c, 0x00000000 },
- - { 0x00008340, 0x000107ff },
- - { 0x00009808, 0x00000000 },
- - { 0x0000980c, 0xad848e19 },
- - { 0x00009810, 0x7d14e000 },
- - { 0x00009814, 0x9c0a9f6b },
- - { 0x0000981c, 0x00000000 },
- - { 0x0000982c, 0x0000a000 },
- - { 0x00009830, 0x00000000 },
- - { 0x0000983c, 0x00200400 },
- - { 0x00009840, 0x206a01ae },
- - { 0x0000984c, 0x1284233c },
- - { 0x00009854, 0x00000859 },
- - { 0x00009900, 0x00000000 },
- - { 0x00009904, 0x00000000 },
- - { 0x00009908, 0x00000000 },
- - { 0x0000990c, 0x00000000 },
- - { 0x0000991c, 0x10000fff },
- - { 0x00009920, 0x05100000 },
- - { 0x0000a920, 0x05100000 },
- - { 0x0000b920, 0x05100000 },
- - { 0x00009928, 0x00000001 },
- - { 0x0000992c, 0x00000004 },
- - { 0x00009934, 0x1e1f2022 },
- - { 0x00009938, 0x0a0b0c0d },
- - { 0x0000993c, 0x00000000 },
- - { 0x00009948, 0x9280b212 },
- - { 0x0000994c, 0x00020028 },
- - { 0x00009954, 0x5f3ca3de },
- - { 0x00009958, 0x2108ecff },
- - { 0x00009940, 0x00750604 },
- - { 0x0000c95c, 0x004b6a8e },
- - { 0x00009970, 0x190fb515 },
- - { 0x00009974, 0x00000000 },
- - { 0x00009978, 0x00000001 },
- - { 0x0000997c, 0x00000000 },
- - { 0x00009980, 0x00000000 },
- - { 0x00009984, 0x00000000 },
- - { 0x00009988, 0x00000000 },
- - { 0x0000998c, 0x00000000 },
- - { 0x00009990, 0x00000000 },
- - { 0x00009994, 0x00000000 },
- - { 0x00009998, 0x00000000 },
- - { 0x0000999c, 0x00000000 },
- - { 0x000099a0, 0x00000000 },
- - { 0x000099a4, 0x00000001 },
- - { 0x000099a8, 0x201fff00 },
- - { 0x000099ac, 0x006f0000 },
- - { 0x000099b0, 0x03051000 },
- - { 0x000099dc, 0x00000000 },
- - { 0x000099e0, 0x00000200 },
- - { 0x000099e4, 0xaaaaaaaa },
- - { 0x000099e8, 0x3c466478 },
- - { 0x000099ec, 0x0cc80caa },
- - { 0x000099fc, 0x00001042 },
- - { 0x00009b00, 0x00000000 },
- - { 0x00009b04, 0x00000001 },
- - { 0x00009b08, 0x00000002 },
- - { 0x00009b0c, 0x00000003 },
- - { 0x00009b10, 0x00000004 },
- - { 0x00009b14, 0x00000005 },
- - { 0x00009b18, 0x00000008 },
- - { 0x00009b1c, 0x00000009 },
- - { 0x00009b20, 0x0000000a },
- - { 0x00009b24, 0x0000000b },
- - { 0x00009b28, 0x0000000c },
- - { 0x00009b2c, 0x0000000d },
- - { 0x00009b30, 0x00000010 },
- - { 0x00009b34, 0x00000011 },
- - { 0x00009b38, 0x00000012 },
- - { 0x00009b3c, 0x00000013 },
- - { 0x00009b40, 0x00000014 },
- - { 0x00009b44, 0x00000015 },
- - { 0x00009b48, 0x00000018 },
- - { 0x00009b4c, 0x00000019 },
- - { 0x00009b50, 0x0000001a },
- - { 0x00009b54, 0x0000001b },
- - { 0x00009b58, 0x0000001c },
- - { 0x00009b5c, 0x0000001d },
- - { 0x00009b60, 0x00000020 },
- - { 0x00009b64, 0x00000021 },
- - { 0x00009b68, 0x00000022 },
- - { 0x00009b6c, 0x00000023 },
- - { 0x00009b70, 0x00000024 },
- - { 0x00009b74, 0x00000025 },
- - { 0x00009b78, 0x00000028 },
- - { 0x00009b7c, 0x00000029 },
- - { 0x00009b80, 0x0000002a },
- - { 0x00009b84, 0x0000002b },
- - { 0x00009b88, 0x0000002c },
- - { 0x00009b8c, 0x0000002d },
- - { 0x00009b90, 0x00000030 },
- - { 0x00009b94, 0x00000031 },
- - { 0x00009b98, 0x00000032 },
- - { 0x00009b9c, 0x00000033 },
- - { 0x00009ba0, 0x00000034 },
- - { 0x00009ba4, 0x00000035 },
- - { 0x00009ba8, 0x00000035 },
- - { 0x00009bac, 0x00000035 },
- - { 0x00009bb0, 0x00000035 },
- - { 0x00009bb4, 0x00000035 },
- - { 0x00009bb8, 0x00000035 },
- - { 0x00009bbc, 0x00000035 },
- - { 0x00009bc0, 0x00000035 },
- - { 0x00009bc4, 0x00000035 },
- - { 0x00009bc8, 0x00000035 },
- - { 0x00009bcc, 0x00000035 },
- - { 0x00009bd0, 0x00000035 },
- - { 0x00009bd4, 0x00000035 },
- - { 0x00009bd8, 0x00000035 },
- - { 0x00009bdc, 0x00000035 },
- - { 0x00009be0, 0x00000035 },
- - { 0x00009be4, 0x00000035 },
- - { 0x00009be8, 0x00000035 },
- - { 0x00009bec, 0x00000035 },
- - { 0x00009bf0, 0x00000035 },
- - { 0x00009bf4, 0x00000035 },
- - { 0x00009bf8, 0x00000010 },
- - { 0x00009bfc, 0x0000001a },
- - { 0x0000a210, 0x40806333 },
- - { 0x0000a214, 0x00106c10 },
- - { 0x0000a218, 0x009c4060 },
- - { 0x0000a220, 0x018830c6 },
- - { 0x0000a224, 0x00000400 },
- - { 0x0000a228, 0x001a0bb5 },
- - { 0x0000a22c, 0x00000000 },
- - { 0x0000a234, 0x20202020 },
- - { 0x0000a238, 0x20202020 },
- - { 0x0000a23c, 0x13c889af },
- - { 0x0000a240, 0x38490a20 },
- - { 0x0000a244, 0x00007bb6 },
- - { 0x0000a248, 0x0fff3ffc },
- - { 0x0000a24c, 0x00000001 },
- - { 0x0000a250, 0x0000e000 },
- - { 0x0000a254, 0x00000000 },
- - { 0x0000a258, 0x0cc75380 },
- - { 0x0000a25c, 0x0f0f0f01 },
- - { 0x0000a260, 0xdfa91f01 },
- - { 0x0000a268, 0x00000001 },
- - { 0x0000a26c, 0x0ebae9c6 },
- - { 0x0000b26c, 0x0ebae9c6 },
- - { 0x0000c26c, 0x0ebae9c6 },
- - { 0x0000d270, 0x00820820 },
- - { 0x0000a278, 0x1ce739ce },
- - { 0x0000a27c, 0x050701ce },
- - { 0x0000a338, 0x00000000 },
- - { 0x0000a33c, 0x00000000 },
- - { 0x0000a340, 0x00000000 },
- - { 0x0000a344, 0x00000000 },
- - { 0x0000a348, 0x3fffffff },
- - { 0x0000a34c, 0x3fffffff },
- - { 0x0000a350, 0x3fffffff },
- - { 0x0000a354, 0x0003ffff },
- - { 0x0000a358, 0x79bfaa03 },
- - { 0x0000d35c, 0x07ffffef },
- - { 0x0000d360, 0x0fffffe7 },
- - { 0x0000d364, 0x17ffffe5 },
- - { 0x0000d368, 0x1fffffe4 },
- - { 0x0000d36c, 0x37ffffe3 },
- - { 0x0000d370, 0x3fffffe3 },
- - { 0x0000d374, 0x57ffffe3 },
- - { 0x0000d378, 0x5fffffe2 },
- - { 0x0000d37c, 0x7fffffe2 },
- - { 0x0000d380, 0x7f3c7bba },
- - { 0x0000d384, 0xf3307ff0 },
- - { 0x0000a388, 0x0c000000 },
- - { 0x0000a38c, 0x20202020 },
- - { 0x0000a390, 0x20202020 },
- - { 0x0000a394, 0x1ce739ce },
- - { 0x0000a398, 0x000001ce },
- - { 0x0000a39c, 0x00000001 },
- - { 0x0000a3a0, 0x00000000 },
- - { 0x0000a3a4, 0x00000000 },
- - { 0x0000a3a8, 0x00000000 },
- - { 0x0000a3ac, 0x00000000 },
- - { 0x0000a3b0, 0x00000000 },
- - { 0x0000a3b4, 0x00000000 },
- - { 0x0000a3b8, 0x00000000 },
- - { 0x0000a3bc, 0x00000000 },
- - { 0x0000a3c0, 0x00000000 },
- - { 0x0000a3c4, 0x00000000 },
- - { 0x0000a3c8, 0x00000246 },
- - { 0x0000a3cc, 0x20202020 },
- - { 0x0000a3d0, 0x20202020 },
- - { 0x0000a3d4, 0x20202020 },
- - { 0x0000a3dc, 0x1ce739ce },
- - { 0x0000a3e0, 0x000001ce },
- -};
- -
- -static const u32 ar5416Bank0_9160[][2] = {
- - { 0x000098b0, 0x1e5795e5 },
- - { 0x000098e0, 0x02008020 },
- -};
- -
- -static const u32 ar5416BB_RfGain_9160[][3] = {
- - { 0x00009a00, 0x00000000, 0x00000000 },
- - { 0x00009a04, 0x00000040, 0x00000040 },
- - { 0x00009a08, 0x00000080, 0x00000080 },
- - { 0x00009a0c, 0x000001a1, 0x00000141 },
- - { 0x00009a10, 0x000001e1, 0x00000181 },
- - { 0x00009a14, 0x00000021, 0x000001c1 },
- - { 0x00009a18, 0x00000061, 0x00000001 },
- - { 0x00009a1c, 0x00000168, 0x00000041 },
- - { 0x00009a20, 0x000001a8, 0x000001a8 },
- - { 0x00009a24, 0x000001e8, 0x000001e8 },
- - { 0x00009a28, 0x00000028, 0x00000028 },
- - { 0x00009a2c, 0x00000068, 0x00000068 },
- - { 0x00009a30, 0x00000189, 0x000000a8 },
- - { 0x00009a34, 0x000001c9, 0x00000169 },
- - { 0x00009a38, 0x00000009, 0x000001a9 },
- - { 0x00009a3c, 0x00000049, 0x000001e9 },
- - { 0x00009a40, 0x00000089, 0x00000029 },
- - { 0x00009a44, 0x00000170, 0x00000069 },
- - { 0x00009a48, 0x000001b0, 0x00000190 },
- - { 0x00009a4c, 0x000001f0, 0x000001d0 },
- - { 0x00009a50, 0x00000030, 0x00000010 },
- - { 0x00009a54, 0x00000070, 0x00000050 },
- - { 0x00009a58, 0x00000191, 0x00000090 },
- - { 0x00009a5c, 0x000001d1, 0x00000151 },
- - { 0x00009a60, 0x00000011, 0x00000191 },
- - { 0x00009a64, 0x00000051, 0x000001d1 },
- - { 0x00009a68, 0x00000091, 0x00000011 },
- - { 0x00009a6c, 0x000001b8, 0x00000051 },
- - { 0x00009a70, 0x000001f8, 0x00000198 },
- - { 0x00009a74, 0x00000038, 0x000001d8 },
- - { 0x00009a78, 0x00000078, 0x00000018 },
- - { 0x00009a7c, 0x00000199, 0x00000058 },
- - { 0x00009a80, 0x000001d9, 0x00000098 },
- - { 0x00009a84, 0x00000019, 0x00000159 },
- - { 0x00009a88, 0x00000059, 0x00000199 },
- - { 0x00009a8c, 0x00000099, 0x000001d9 },
- - { 0x00009a90, 0x000000d9, 0x00000019 },
- - { 0x00009a94, 0x000000f9, 0x00000059 },
- - { 0x00009a98, 0x000000f9, 0x00000099 },
- - { 0x00009a9c, 0x000000f9, 0x000000d9 },
- - { 0x00009aa0, 0x000000f9, 0x000000f9 },
- - { 0x00009aa4, 0x000000f9, 0x000000f9 },
- - { 0x00009aa8, 0x000000f9, 0x000000f9 },
- - { 0x00009aac, 0x000000f9, 0x000000f9 },
- - { 0x00009ab0, 0x000000f9, 0x000000f9 },
- - { 0x00009ab4, 0x000000f9, 0x000000f9 },
- - { 0x00009ab8, 0x000000f9, 0x000000f9 },
- - { 0x00009abc, 0x000000f9, 0x000000f9 },
- - { 0x00009ac0, 0x000000f9, 0x000000f9 },
- - { 0x00009ac4, 0x000000f9, 0x000000f9 },
- - { 0x00009ac8, 0x000000f9, 0x000000f9 },
- - { 0x00009acc, 0x000000f9, 0x000000f9 },
- - { 0x00009ad0, 0x000000f9, 0x000000f9 },
- - { 0x00009ad4, 0x000000f9, 0x000000f9 },
- - { 0x00009ad8, 0x000000f9, 0x000000f9 },
- - { 0x00009adc, 0x000000f9, 0x000000f9 },
- - { 0x00009ae0, 0x000000f9, 0x000000f9 },
- - { 0x00009ae4, 0x000000f9, 0x000000f9 },
- - { 0x00009ae8, 0x000000f9, 0x000000f9 },
- - { 0x00009aec, 0x000000f9, 0x000000f9 },
- - { 0x00009af0, 0x000000f9, 0x000000f9 },
- - { 0x00009af4, 0x000000f9, 0x000000f9 },
- - { 0x00009af8, 0x000000f9, 0x000000f9 },
- - { 0x00009afc, 0x000000f9, 0x000000f9 },
- -};
- -
- -static const u32 ar5416Bank1_9160[][2] = {
- - { 0x000098b0, 0x02108421 },
- - { 0x000098ec, 0x00000008 },
- -};
- -
- -static const u32 ar5416Bank2_9160[][2] = {
- - { 0x000098b0, 0x0e73ff17 },
- - { 0x000098e0, 0x00000420 },
- -};
- -
- -static const u32 ar5416Bank3_9160[][3] = {
- - { 0x000098f0, 0x01400018, 0x01c00018 },
- -};
- -
- -static const u32 ar5416Bank6_9160[][3] = {
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00e00000, 0x00e00000 },
- - { 0x0000989c, 0x005e0000, 0x005e0000 },
- - { 0x0000989c, 0x00120000, 0x00120000 },
- - { 0x0000989c, 0x00620000, 0x00620000 },
- - { 0x0000989c, 0x00020000, 0x00020000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x40ff0000, 0x40ff0000 },
- - { 0x0000989c, 0x005f0000, 0x005f0000 },
- - { 0x0000989c, 0x00870000, 0x00870000 },
- - { 0x0000989c, 0x00f90000, 0x00f90000 },
- - { 0x0000989c, 0x007b0000, 0x007b0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00f50000, 0x00f50000 },
- - { 0x0000989c, 0x00dc0000, 0x00dc0000 },
- - { 0x0000989c, 0x00110000, 0x00110000 },
- - { 0x0000989c, 0x006100a8, 0x006100a8 },
- - { 0x0000989c, 0x004210a2, 0x004210a2 },
- - { 0x0000989c, 0x0014008f, 0x0014008f },
- - { 0x0000989c, 0x00c40003, 0x00c40003 },
- - { 0x0000989c, 0x003000f2, 0x003000f2 },
- - { 0x0000989c, 0x00440016, 0x00440016 },
- - { 0x0000989c, 0x00410040, 0x00410040 },
- - { 0x0000989c, 0x0001805e, 0x0001805e },
- - { 0x0000989c, 0x0000c0ab, 0x0000c0ab },
- - { 0x0000989c, 0x000000f1, 0x000000f1 },
- - { 0x0000989c, 0x00002081, 0x00002081 },
- - { 0x0000989c, 0x000000d4, 0x000000d4 },
- - { 0x000098d0, 0x0000000f, 0x0010000f },
- -};
- -
- -static const u32 ar5416Bank6TPC_9160[][3] = {
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00000000, 0x00000000 },
- - { 0x0000989c, 0x00e00000, 0x00e00000 },
- - { 0x0000989c, 0x005e0000, 0x005e0000 },
- - { 0x0000989c, 0x00120000, 0x00120000 },
- - { 0x0000989c, 0x00620000, 0x00620000 },
- - { 0x0000989c, 0x00020000, 0x00020000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x40ff0000, 0x40ff0000 },
- - { 0x0000989c, 0x005f0000, 0x005f0000 },
- - { 0x0000989c, 0x00870000, 0x00870000 },
- - { 0x0000989c, 0x00f90000, 0x00f90000 },
- - { 0x0000989c, 0x007b0000, 0x007b0000 },
- - { 0x0000989c, 0x00ff0000, 0x00ff0000 },
- - { 0x0000989c, 0x00f50000, 0x00f50000 },
- - { 0x0000989c, 0x00dc0000, 0x00dc0000 },
- - { 0x0000989c, 0x00110000, 0x00110000 },
- - { 0x0000989c, 0x006100a8, 0x006100a8 },
- - { 0x0000989c, 0x00423022, 0x00423022 },
- - { 0x0000989c, 0x2014008f, 0x2014008f },
- - { 0x0000989c, 0x00c40002, 0x00c40002 },
- - { 0x0000989c, 0x003000f2, 0x003000f2 },
- - { 0x0000989c, 0x00440016, 0x00440016 },
- - { 0x0000989c, 0x00410040, 0x00410040 },
- - { 0x0000989c, 0x0001805e, 0x0001805e },
- - { 0x0000989c, 0x0000c0ab, 0x0000c0ab },
- - { 0x0000989c, 0x000000e1, 0x000000e1 },
- - { 0x0000989c, 0x00007080, 0x00007080 },
- - { 0x0000989c, 0x000000d4, 0x000000d4 },
- - { 0x000098d0, 0x0000000f, 0x0010000f },
- -};
- -
- -static const u32 ar5416Bank7_9160[][2] = {
- - { 0x0000989c, 0x00000500 },
- - { 0x0000989c, 0x00000800 },
- - { 0x000098cc, 0x0000000e },
- -};
- -
- -static u32 ar5416Addac_9160[][2] = {
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x000000c0 },
- - {0x0000989c, 0x00000018 },
- - {0x0000989c, 0x00000004 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x000000c0 },
- - {0x0000989c, 0x00000019 },
- - {0x0000989c, 0x00000004 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000004 },
- - {0x0000989c, 0x00000003 },
- - {0x0000989c, 0x00000008 },
- - {0x0000989c, 0x00000000 },
- - {0x000098cc, 0x00000000 },
- -};
- -
- -static u32 ar5416Addac_91601_1[][2] = {
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x000000c0 },
- - {0x0000989c, 0x00000018 },
- - {0x0000989c, 0x00000004 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x000000c0 },
- - {0x0000989c, 0x00000019 },
- - {0x0000989c, 0x00000004 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x0000989c, 0x00000000 },
- - {0x000098cc, 0x00000000 },
- -};
- -
- -/* XXX 9280 1 */
- -static const u32 ar9280Modes_9280[][6] = {
- - { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
- - { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
- - { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
- - { 0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000, 0x00014008 },
- - { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801080, 0x08400840, 0x06e006e0 },
- - { 0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f },
- - { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
- - { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
- - { 0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- - { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
- - { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- - { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
- - { 0x00009844, 0x1372161e, 0x1372161e, 0x137216a0, 0x137216a0, 0x137216a0 },
- - { 0x00009848, 0x00028566, 0x00028566, 0x00028563, 0x00028563, 0x00028563 },
- - { 0x0000a848, 0x00028566, 0x00028566, 0x00028563, 0x00028563, 0x00028563 },
- - { 0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2 },
- - { 0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e },
- - { 0x0000985c, 0x3139605e, 0x3139605e, 0x3139605e, 0x3139605e, 0x3139605e },
- - { 0x00009860, 0x00049d18, 0x00049d18, 0x00049d20, 0x00049d20, 0x00049d18 },
- - { 0x0000c864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- - { 0x00009868, 0x5ac64190, 0x5ac64190, 0x5ac64190, 0x5ac64190, 0x5ac64190 },
- - { 0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881 },
- - { 0x00009914, 0x000007d0, 0x000007d0, 0x00000898, 0x00000898, 0x000007d0 },
- - { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
- - { 0x00009924, 0xd00a8a07, 0xd00a8a07, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d },
- - { 0x00009944, 0xdfbc1010, 0xdfbc1010, 0xdfbc1010, 0xdfbc1010, 0xdfbc1010 },
- - { 0x00009960, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010 },
- - { 0x0000a960, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010 },
- - { 0x00009964, 0x00000210, 0x00000210, 0x00000210, 0x00000210, 0x00000210 },
- - { 0x0000c9b8, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a },
- - { 0x0000c9bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00, 0x00000c00 },
- - { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
- - { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
- - { 0x000099c8, 0x60f6532c, 0x60f6532c, 0x60f6532c, 0x60f6532c, 0x60f6532c },
- - { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
- - { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
- - { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x00009a00, 0x00008184, 0x00008184, 0x00000214, 0x00000214, 0x00000214 },
- - { 0x00009a04, 0x00008188, 0x00008188, 0x00000218, 0x00000218, 0x00000218 },
- - { 0x00009a08, 0x0000818c, 0x0000818c, 0x00000224, 0x00000224, 0x00000224 },
- - { 0x00009a0c, 0x00008190, 0x00008190, 0x00000228, 0x00000228, 0x00000228 },
- - { 0x00009a10, 0x00008194, 0x00008194, 0x0000022c, 0x0000022c, 0x0000022c },
- - { 0x00009a14, 0x00008200, 0x00008200, 0x00000230, 0x00000230, 0x00000230 },
- - { 0x00009a18, 0x00008204, 0x00008204, 0x000002a4, 0x000002a4, 0x000002a4 },
- - { 0x00009a1c, 0x00008208, 0x00008208, 0x000002a8, 0x000002a8, 0x000002a8 },
- - { 0x00009a20, 0x0000820c, 0x0000820c, 0x000002ac, 0x000002ac, 0x000002ac },
- - { 0x00009a24, 0x00008210, 0x00008210, 0x000002b0, 0x000002b0, 0x000002b0 },
- - { 0x00009a28, 0x00008214, 0x00008214, 0x000002b4, 0x000002b4, 0x000002b4 },
- - { 0x00009a2c, 0x00008280, 0x00008280, 0x000002b8, 0x000002b8, 0x000002b8 },
- - { 0x00009a30, 0x00008284, 0x00008284, 0x00000390, 0x00000390, 0x00000390 },
- - { 0x00009a34, 0x00008288, 0x00008288, 0x00000394, 0x00000394, 0x00000394 },
- - { 0x00009a38, 0x0000828c, 0x0000828c, 0x00000398, 0x00000398, 0x00000398 },
- - { 0x00009a3c, 0x00008290, 0x00008290, 0x00000334, 0x00000334, 0x00000334 },
- - { 0x00009a40, 0x00008300, 0x00008300, 0x00000338, 0x00000338, 0x00000338 },
- - { 0x00009a44, 0x00008304, 0x00008304, 0x000003ac, 0x000003ac, 0x000003ac },
- - { 0x00009a48, 0x00008308, 0x00008308, 0x000003b0, 0x000003b0, 0x000003b0 },
- - { 0x00009a4c, 0x0000830c, 0x0000830c, 0x000003b4, 0x000003b4, 0x000003b4 },
- - { 0x00009a50, 0x00008310, 0x00008310, 0x000003b8, 0x000003b8, 0x000003b8 },
- - { 0x00009a54, 0x00008314, 0x00008314, 0x000003a5, 0x000003a5, 0x000003a5 },
- - { 0x00009a58, 0x00008380, 0x00008380, 0x000003a9, 0x000003a9, 0x000003a9 },
- - { 0x00009a5c, 0x00008384, 0x00008384, 0x000003ad, 0x000003ad, 0x000003ad },
- - { 0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194, 0x00008194 },
- - { 0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0, 0x000081a0 },
- - { 0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c, 0x0000820c },
- - { 0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8, 0x000081a8 },
- - { 0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284, 0x00008284 },
- - { 0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288, 0x00008288 },
- - { 0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224, 0x00008224 },
- - { 0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290, 0x00008290 },
- - { 0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300, 0x00008300 },
- - { 0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304, 0x00008304 },
- - { 0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308, 0x00008308 },
- - { 0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c, 0x0000830c },
- - { 0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380, 0x00008380 },
- - { 0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384, 0x00008384 },
- - { 0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700, 0x00008700 },
- - { 0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704, 0x00008704 },
- - { 0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708, 0x00008708 },
- - { 0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c, 0x0000870c },
- - { 0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780, 0x00008780 },
- - { 0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784, 0x00008784 },
- - { 0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00, 0x00008b00 },
- - { 0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04, 0x00008b04 },
- - { 0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08, 0x00008b08 },
- - { 0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c, 0x00008b0c },
- - { 0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b80, 0x00008b80, 0x00008b80 },
- - { 0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b84, 0x00008b84, 0x00008b84 },
- - { 0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b88, 0x00008b88, 0x00008b88 },
- - { 0x00009acc, 0x0000b380, 0x0000b380, 0x00008b8c, 0x00008b8c, 0x00008b8c },
- - { 0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b90, 0x00008b90, 0x00008b90 },
- - { 0x00009ad4, 0x0000b388, 0x0000b388, 0x00008f80, 0x00008f80, 0x00008f80 },
- - { 0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008f84, 0x00008f84, 0x00008f84 },
- - { 0x00009adc, 0x0000b390, 0x0000b390, 0x00008f88, 0x00008f88, 0x00008f88 },
- - { 0x00009ae0, 0x0000b394, 0x0000b394, 0x00008f8c, 0x00008f8c, 0x00008f8c },
- - { 0x00009ae4, 0x0000b398, 0x0000b398, 0x00008f90, 0x00008f90, 0x00008f90 },
- - { 0x00009ae8, 0x0000b780, 0x0000b780, 0x0000930c, 0x0000930c, 0x0000930c },
- - { 0x00009aec, 0x0000b784, 0x0000b784, 0x00009310, 0x00009310, 0x00009310 },
- - { 0x00009af0, 0x0000b788, 0x0000b788, 0x00009384, 0x00009384, 0x00009384 },
- - { 0x00009af4, 0x0000b78c, 0x0000b78c, 0x00009388, 0x00009388, 0x00009388 },
- - { 0x00009af8, 0x0000b790, 0x0000b790, 0x00009324, 0x00009324, 0x00009324 },
- - { 0x00009afc, 0x0000b794, 0x0000b794, 0x00009704, 0x00009704, 0x00009704 },
- - { 0x00009b00, 0x0000b798, 0x0000b798, 0x000096a4, 0x000096a4, 0x000096a4 },
- - { 0x00009b04, 0x0000d784, 0x0000d784, 0x000096a8, 0x000096a8, 0x000096a8 },
- - { 0x00009b08, 0x0000d788, 0x0000d788, 0x00009710, 0x00009710, 0x00009710 },
- - { 0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00009714, 0x00009714, 0x00009714 },
- - { 0x00009b10, 0x0000d790, 0x0000d790, 0x00009720, 0x00009720, 0x00009720 },
- - { 0x00009b14, 0x0000f780, 0x0000f780, 0x00009724, 0x00009724, 0x00009724 },
- - { 0x00009b18, 0x0000f784, 0x0000f784, 0x00009728, 0x00009728, 0x00009728 },
- - { 0x00009b1c, 0x0000f788, 0x0000f788, 0x0000972c, 0x0000972c, 0x0000972c },
- - { 0x00009b20, 0x0000f78c, 0x0000f78c, 0x000097a0, 0x000097a0, 0x000097a0 },
- - { 0x00009b24, 0x0000f790, 0x0000f790, 0x000097a4, 0x000097a4, 0x000097a4 },
- - { 0x00009b28, 0x0000f794, 0x0000f794, 0x000097a8, 0x000097a8, 0x000097a8 },
- - { 0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x000097b0, 0x000097b0, 0x000097b0 },
- - { 0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x000097b4, 0x000097b4, 0x000097b4 },
- - { 0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x000097b8, 0x000097b8, 0x000097b8 },
- - { 0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x000097a5, 0x000097a5, 0x000097a5 },
- - { 0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x000097a9, 0x000097a9, 0x000097a9 },
- - { 0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x000097ad, 0x000097ad, 0x000097ad },
- - { 0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x000097b1, 0x000097b1, 0x000097b1 },
- - { 0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x000097b5, 0x000097b5, 0x000097b5 },
- - { 0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x000097b9, 0x000097b9, 0x000097b9 },
- - { 0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x000097c5, 0x000097c5, 0x000097c5 },
- - { 0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x000097c9, 0x000097c9, 0x000097c9 },
- - { 0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x000097d1, 0x000097d1, 0x000097d1 },
- - { 0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x000097d5, 0x000097d5, 0x000097d5 },
- - { 0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x000097d9, 0x000097d9, 0x000097d9 },
- - { 0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x000097c6, 0x000097c6, 0x000097c6 },
- - { 0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x000097ca, 0x000097ca, 0x000097ca },
- - { 0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x000097ce, 0x000097ce, 0x000097ce },
- - { 0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x000097d2, 0x000097d2, 0x000097d2 },
- - { 0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x000097d6, 0x000097d6, 0x000097d6 },
- - { 0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x000097c3, 0x000097c3, 0x000097c3 },
- - { 0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x000097c7, 0x000097c7, 0x000097c7 },
- - { 0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x000097cb, 0x000097cb, 0x000097cb },
- - { 0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x000097cf, 0x000097cf, 0x000097cf },
- - { 0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x000097d7, 0x000097d7, 0x000097d7 },
- - { 0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009b98, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009b9c, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009ba0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009ba4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009ba8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bac, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bb0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bb4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bb8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bbc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bc0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bc4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bc8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bcc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bd0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bd4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bd8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bdc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009be0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009be4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009be8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bec, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bf0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bf4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bf8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bfc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x0000a204, 0x00000444, 0x00000444, 0x00000444, 0x00000444, 0x00000444 },
- - { 0x0000a208, 0x803e4788, 0x803e4788, 0x803e4788, 0x803e4788, 0x803e4788 },
- - { 0x0000a20c, 0x000c6019, 0x000c6019, 0x000c6019, 0x000c6019, 0x000c6019 },
- - { 0x0000b20c, 0x000c6019, 0x000c6019, 0x000c6019, 0x000c6019, 0x000c6019 },
- - { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
- - { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- - { 0x0000a274, 0x0a19c652, 0x0a19c652, 0x0a1aa652, 0x0a1aa652, 0x0a1aa652 },
- - { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a304, 0x00003002, 0x00003002, 0x00003002, 0x00003002, 0x00003002 },
- - { 0x0000a308, 0x00006004, 0x00006004, 0x00008009, 0x00008009, 0x00008009 },
- - { 0x0000a30c, 0x0000a006, 0x0000a006, 0x0000b00b, 0x0000b00b, 0x0000b00b },
- - { 0x0000a310, 0x0000e012, 0x0000e012, 0x0000e012, 0x0000e012, 0x0000e012 },
- - { 0x0000a314, 0x00011014, 0x00011014, 0x00012048, 0x00012048, 0x00012048 },
- - { 0x0000a318, 0x0001504a, 0x0001504a, 0x0001604a, 0x0001604a, 0x0001604a },
- - { 0x0000a31c, 0x0001904c, 0x0001904c, 0x0001a211, 0x0001a211, 0x0001a211 },
- - { 0x0000a320, 0x0001c04e, 0x0001c04e, 0x0001e213, 0x0001e213, 0x0001e213 },
- - { 0x0000a324, 0x00020092, 0x00020092, 0x0002121b, 0x0002121b, 0x0002121b },
- - { 0x0000a328, 0x0002410a, 0x0002410a, 0x00024412, 0x00024412, 0x00024412 },
- - { 0x0000a32c, 0x0002710c, 0x0002710c, 0x00028414, 0x00028414, 0x00028414 },
- - { 0x0000a330, 0x0002b18b, 0x0002b18b, 0x0002b44a, 0x0002b44a, 0x0002b44a },
- - { 0x0000a334, 0x0002e1cc, 0x0002e1cc, 0x00030649, 0x00030649, 0x00030649 },
- - { 0x0000a338, 0x000321ec, 0x000321ec, 0x0003364b, 0x0003364b, 0x0003364b },
- - { 0x0000a33c, 0x000321ec, 0x000321ec, 0x00038a49, 0x00038a49, 0x00038a49 },
- - { 0x0000a340, 0x000321ec, 0x000321ec, 0x0003be48, 0x0003be48, 0x0003be48 },
- - { 0x0000a344, 0x000321ec, 0x000321ec, 0x0003ee4a, 0x0003ee4a, 0x0003ee4a },
- - { 0x0000a348, 0x000321ec, 0x000321ec, 0x00042e88, 0x00042e88, 0x00042e88 },
- - { 0x0000a34c, 0x000321ec, 0x000321ec, 0x00046e8a, 0x00046e8a, 0x00046e8a },
- - { 0x0000a350, 0x000321ec, 0x000321ec, 0x00049ec9, 0x00049ec9, 0x00049ec9 },
- - { 0x0000a354, 0x000321ec, 0x000321ec, 0x0004bf42, 0x0004bf42, 0x0004bf42 },
- - { 0x0000784c, 0x0e4f048c, 0x0e4f048c, 0x0e4d048c, 0x0e4d048c, 0x0e4d048c },
- - { 0x00007854, 0x12031828, 0x12031828, 0x12035828, 0x12035828, 0x12035828 },
- - { 0x00007870, 0x807ec400, 0x807ec400, 0x807ec000, 0x807ec000, 0x807ec000 },
- - { 0x0000788c, 0x00010000, 0x00010000, 0x00110000, 0x00110000, 0x00110000 },
- -};
- -
- -static const u32 ar9280Common_9280[][2] = {
- - { 0x0000000c, 0x00000000 },
- - { 0x00000030, 0x00020015 },
- - { 0x00000034, 0x00000005 },
- - { 0x00000040, 0x00000000 },
- - { 0x00000044, 0x00000008 },
- - { 0x00000048, 0x00000008 },
- - { 0x0000004c, 0x00000010 },
- - { 0x00000050, 0x00000000 },
- - { 0x00000054, 0x0000001f },
- - { 0x00000800, 0x00000000 },
- - { 0x00000804, 0x00000000 },
- - { 0x00000808, 0x00000000 },
- - { 0x0000080c, 0x00000000 },
- - { 0x00000810, 0x00000000 },
- - { 0x00000814, 0x00000000 },
- - { 0x00000818, 0x00000000 },
- - { 0x0000081c, 0x00000000 },
- - { 0x00000820, 0x00000000 },
- - { 0x00000824, 0x00000000 },
- - { 0x00001040, 0x002ffc0f },
- - { 0x00001044, 0x002ffc0f },
- - { 0x00001048, 0x002ffc0f },
- - { 0x0000104c, 0x002ffc0f },
- - { 0x00001050, 0x002ffc0f },
- - { 0x00001054, 0x002ffc0f },
- - { 0x00001058, 0x002ffc0f },
- - { 0x0000105c, 0x002ffc0f },
- - { 0x00001060, 0x002ffc0f },
- - { 0x00001064, 0x002ffc0f },
- - { 0x00001230, 0x00000000 },
- - { 0x00001270, 0x00000000 },
- - { 0x00001038, 0x00000000 },
- - { 0x00001078, 0x00000000 },
- - { 0x000010b8, 0x00000000 },
- - { 0x000010f8, 0x00000000 },
- - { 0x00001138, 0x00000000 },
- - { 0x00001178, 0x00000000 },
- - { 0x000011b8, 0x00000000 },
- - { 0x000011f8, 0x00000000 },
- - { 0x00001238, 0x00000000 },
- - { 0x00001278, 0x00000000 },
- - { 0x000012b8, 0x00000000 },
- - { 0x000012f8, 0x00000000 },
- - { 0x00001338, 0x00000000 },
- - { 0x00001378, 0x00000000 },
- - { 0x000013b8, 0x00000000 },
- - { 0x000013f8, 0x00000000 },
- - { 0x00001438, 0x00000000 },
- - { 0x00001478, 0x00000000 },
- - { 0x000014b8, 0x00000000 },
- - { 0x000014f8, 0x00000000 },
- - { 0x00001538, 0x00000000 },
- - { 0x00001578, 0x00000000 },
- - { 0x000015b8, 0x00000000 },
- - { 0x000015f8, 0x00000000 },
- - { 0x00001638, 0x00000000 },
- - { 0x00001678, 0x00000000 },
- - { 0x000016b8, 0x00000000 },
- - { 0x000016f8, 0x00000000 },
- - { 0x00001738, 0x00000000 },
- - { 0x00001778, 0x00000000 },
- - { 0x000017b8, 0x00000000 },
- - { 0x000017f8, 0x00000000 },
- - { 0x0000103c, 0x00000000 },
- - { 0x0000107c, 0x00000000 },
- - { 0x000010bc, 0x00000000 },
- - { 0x000010fc, 0x00000000 },
- - { 0x0000113c, 0x00000000 },
- - { 0x0000117c, 0x00000000 },
- - { 0x000011bc, 0x00000000 },
- - { 0x000011fc, 0x00000000 },
- - { 0x0000123c, 0x00000000 },
- - { 0x0000127c, 0x00000000 },
- - { 0x000012bc, 0x00000000 },
- - { 0x000012fc, 0x00000000 },
- - { 0x0000133c, 0x00000000 },
- - { 0x0000137c, 0x00000000 },
- - { 0x000013bc, 0x00000000 },
- - { 0x000013fc, 0x00000000 },
- - { 0x0000143c, 0x00000000 },
- - { 0x0000147c, 0x00000000 },
- - { 0x00004030, 0x00000002 },
- - { 0x0000403c, 0x00000002 },
- - { 0x00004024, 0x0000001f },
- - { 0x00007010, 0x00000033 },
- - { 0x00007038, 0x000004c2 },
- - { 0x00008004, 0x00000000 },
- - { 0x00008008, 0x00000000 },
- - { 0x0000800c, 0x00000000 },
- - { 0x00008018, 0x00000700 },
- - { 0x00008020, 0x00000000 },
- - { 0x00008038, 0x00000000 },
- - { 0x0000803c, 0x00000000 },
- - { 0x00008048, 0x40000000 },
- - { 0x00008054, 0x00000000 },
- - { 0x00008058, 0x00000000 },
- - { 0x0000805c, 0x000fc78f },
- - { 0x00008060, 0x0000000f },
- - { 0x00008064, 0x00000000 },
- - { 0x00008070, 0x00000000 },
- - { 0x000080c0, 0x2a82301a },
- - { 0x000080c4, 0x05dc01e0 },
- - { 0x000080c8, 0x1f402710 },
- - { 0x000080cc, 0x01f40000 },
- - { 0x000080d0, 0x00001e00 },
- - { 0x000080d4, 0x00000000 },
- - { 0x000080d8, 0x00400000 },
- - { 0x000080e0, 0xffffffff },
- - { 0x000080e4, 0x0000ffff },
- - { 0x000080e8, 0x003f3f3f },
- - { 0x000080ec, 0x00000000 },
- - { 0x000080f0, 0x00000000 },
- - { 0x000080f4, 0x00000000 },
- - { 0x000080f8, 0x00000000 },
- - { 0x000080fc, 0x00020000 },
- - { 0x00008100, 0x00020000 },
- - { 0x00008104, 0x00000001 },
- - { 0x00008108, 0x00000052 },
- - { 0x0000810c, 0x00000000 },
- - { 0x00008110, 0x00000168 },
- - { 0x00008118, 0x000100aa },
- - { 0x0000811c, 0x00003210 },
- - { 0x00008120, 0x08f04800 },
- - { 0x00008124, 0x00000000 },
- - { 0x00008128, 0x00000000 },
- - { 0x0000812c, 0x00000000 },
- - { 0x00008130, 0x00000000 },
- - { 0x00008134, 0x00000000 },
- - { 0x00008138, 0x00000000 },
- - { 0x0000813c, 0x00000000 },
- - { 0x00008144, 0x00000000 },
- - { 0x00008168, 0x00000000 },
- - { 0x0000816c, 0x00000000 },
- - { 0x00008170, 0x32143320 },
- - { 0x00008174, 0xfaa4fa50 },
- - { 0x00008178, 0x00000100 },
- - { 0x0000817c, 0x00000000 },
- - { 0x000081c4, 0x00000000 },
- - { 0x000081d0, 0x00003210 },
- - { 0x000081ec, 0x00000000 },
- - { 0x000081f0, 0x00000000 },
- - { 0x000081f4, 0x00000000 },
- - { 0x000081f8, 0x00000000 },
- - { 0x000081fc, 0x00000000 },
- - { 0x00008200, 0x00000000 },
- - { 0x00008204, 0x00000000 },
- - { 0x00008208, 0x00000000 },
- - { 0x0000820c, 0x00000000 },
- - { 0x00008210, 0x00000000 },
- - { 0x00008214, 0x00000000 },
- - { 0x00008218, 0x00000000 },
- - { 0x0000821c, 0x00000000 },
- - { 0x00008220, 0x00000000 },
- - { 0x00008224, 0x00000000 },
- - { 0x00008228, 0x00000000 },
- - { 0x0000822c, 0x00000000 },
- - { 0x00008230, 0x00000000 },
- - { 0x00008234, 0x00000000 },
- - { 0x00008238, 0x00000000 },
- - { 0x0000823c, 0x00000000 },
- - { 0x00008240, 0x00100000 },
- - { 0x00008244, 0x0010f400 },
- - { 0x00008248, 0x00000100 },
- - { 0x0000824c, 0x0001e800 },
- - { 0x00008250, 0x00000000 },
- - { 0x00008254, 0x00000000 },
- - { 0x00008258, 0x00000000 },
- - { 0x0000825c, 0x400000ff },
- - { 0x00008260, 0x00080922 },
- - { 0x00008270, 0x00000000 },
- - { 0x00008274, 0x40000000 },
- - { 0x00008278, 0x003e4180 },
- - { 0x0000827c, 0x00000000 },
- - { 0x00008284, 0x0000002c },
- - { 0x00008288, 0x0000002c },
- - { 0x0000828c, 0x00000000 },
- - { 0x00008294, 0x00000000 },
- - { 0x00008298, 0x00000000 },
- - { 0x00008300, 0x00000000 },
- - { 0x00008304, 0x00000000 },
- - { 0x00008308, 0x00000000 },
- - { 0x0000830c, 0x00000000 },
- - { 0x00008310, 0x00000000 },
- - { 0x00008314, 0x00000000 },
- - { 0x00008318, 0x00000000 },
- - { 0x00008328, 0x00000000 },
- - { 0x0000832c, 0x00000007 },
- - { 0x00008330, 0x00000302 },
- - { 0x00008334, 0x00000e00 },
- - { 0x00008338, 0x00000000 },
- - { 0x0000833c, 0x00000000 },
- - { 0x00008340, 0x000107ff },
- - { 0x00008344, 0x00000000 },
- - { 0x00009808, 0x00000000 },
- - { 0x0000980c, 0xaf268e30 },
- - { 0x00009810, 0xfd14e000 },
- - { 0x00009814, 0x9c0a9f6b },
- - { 0x0000981c, 0x00000000 },
- - { 0x0000982c, 0x0000a000 },
- - { 0x00009830, 0x00000000 },
- - { 0x0000983c, 0x00200400 },
- - { 0x00009840, 0x206a01ae },
- - { 0x0000984c, 0x0040233c },
- - { 0x0000a84c, 0x0040233c },
- - { 0x00009854, 0x00000044 },
- - { 0x00009900, 0x00000000 },
- - { 0x00009904, 0x00000000 },
- - { 0x00009908, 0x00000000 },
- - { 0x0000990c, 0x00000000 },
- - { 0x0000991c, 0x10000fff },
- - { 0x00009920, 0x04900000 },
- - { 0x0000a920, 0x04900000 },
- - { 0x00009928, 0x00000001 },
- - { 0x0000992c, 0x00000004 },
- - { 0x00009934, 0x1e1f2022 },
- - { 0x00009938, 0x0a0b0c0d },
- - { 0x0000993c, 0x00000000 },
- - { 0x00009948, 0x9280c00a },
- - { 0x0000994c, 0x00020028 },
- - { 0x00009954, 0xe250a51e },
- - { 0x00009958, 0x3388ffff },
- - { 0x00009940, 0x00781204 },
- - { 0x0000c95c, 0x004b6a8e },
- - { 0x0000c968, 0x000003ce },
- - { 0x00009970, 0x190fb514 },
- - { 0x00009974, 0x00000000 },
- - { 0x00009978, 0x00000001 },
- - { 0x0000997c, 0x00000000 },
- - { 0x00009980, 0x00000000 },
- - { 0x00009984, 0x00000000 },
- - { 0x00009988, 0x00000000 },
- - { 0x0000998c, 0x00000000 },
- - { 0x00009990, 0x00000000 },
- - { 0x00009994, 0x00000000 },
- - { 0x00009998, 0x00000000 },
- - { 0x0000999c, 0x00000000 },
- - { 0x000099a0, 0x00000000 },
- - { 0x000099a4, 0x00000001 },
- - { 0x000099a8, 0x201fff00 },
- - { 0x000099ac, 0x006f00c4 },
- - { 0x000099b0, 0x03051000 },
- - { 0x000099b4, 0x00000820 },
- - { 0x000099dc, 0x00000000 },
- - { 0x000099e0, 0x00000000 },
- - { 0x000099e4, 0xaaaaaaaa },
- - { 0x000099e8, 0x3c466478 },
- - { 0x000099ec, 0x0cc80caa },
- - { 0x000099fc, 0x00001042 },
- - { 0x0000a210, 0x4080a333 },
- - { 0x0000a214, 0x40206c10 },
- - { 0x0000a218, 0x009c4060 },
- - { 0x0000a220, 0x01834061 },
- - { 0x0000a224, 0x00000400 },
- - { 0x0000a228, 0x000003b5 },
- - { 0x0000a22c, 0x23277200 },
- - { 0x0000a234, 0x20202020 },
- - { 0x0000a238, 0x20202020 },
- - { 0x0000a23c, 0x13c889af },
- - { 0x0000a240, 0x38490a20 },
- - { 0x0000a244, 0x00007bb6 },
- - { 0x0000a248, 0x0fff3ffc },
- - { 0x0000a24c, 0x00000001 },
- - { 0x0000a250, 0x001da000 },
- - { 0x0000a254, 0x00000000 },
- - { 0x0000a258, 0x0cdbd380 },
- - { 0x0000a25c, 0x0f0f0f01 },
- - { 0x0000a260, 0xdfa91f01 },
- - { 0x0000a268, 0x00000000 },
- - { 0x0000a26c, 0x0ebae9c6 },
- - { 0x0000b26c, 0x0ebae9c6 },
- - { 0x0000d270, 0x00820820 },
- - { 0x0000a278, 0x1ce739ce },
- - { 0x0000a27c, 0x050701ce },
- - { 0x0000a358, 0x7999aa0f },
- - { 0x0000d35c, 0x07ffffef },
- - { 0x0000d360, 0x0fffffe7 },
- - { 0x0000d364, 0x17ffffe5 },
- - { 0x0000d368, 0x1fffffe4 },
- - { 0x0000d36c, 0x37ffffe3 },
- - { 0x0000d370, 0x3fffffe3 },
- - { 0x0000d374, 0x57ffffe3 },
- - { 0x0000d378, 0x5fffffe2 },
- - { 0x0000d37c, 0x7fffffe2 },
- - { 0x0000d380, 0x7f3c7bba },
- - { 0x0000d384, 0xf3307ff0 },
- - { 0x0000a388, 0x0c000000 },
- - { 0x0000a38c, 0x20202020 },
- - { 0x0000a390, 0x20202020 },
- - { 0x0000a394, 0x1ce739ce },
- - { 0x0000a398, 0x000001ce },
- - { 0x0000a39c, 0x00000001 },
- - { 0x0000a3a0, 0x00000000 },
- - { 0x0000a3a4, 0x00000000 },
- - { 0x0000a3a8, 0x00000000 },
- - { 0x0000a3ac, 0x00000000 },
- - { 0x0000a3b0, 0x00000000 },
- - { 0x0000a3b4, 0x00000000 },
- - { 0x0000a3b8, 0x00000000 },
- - { 0x0000a3bc, 0x00000000 },
- - { 0x0000a3c0, 0x00000000 },
- - { 0x0000a3c4, 0x00000000 },
- - { 0x0000a3c8, 0x00000246 },
- - { 0x0000a3cc, 0x20202020 },
- - { 0x0000a3d0, 0x20202020 },
- - { 0x0000a3d4, 0x20202020 },
- - { 0x0000a3dc, 0x1ce739ce },
- - { 0x0000a3e0, 0x000001ce },
- - { 0x0000a3e4, 0x00000000 },
- - { 0x0000a3e8, 0x18c43433 },
- - { 0x0000a3ec, 0x00f38081 },
- - { 0x00007800, 0x00040000 },
- - { 0x00007804, 0xdb005012 },
- - { 0x00007808, 0x04924914 },
- - { 0x0000780c, 0x21084210 },
- - { 0x00007810, 0x6d801300 },
- - { 0x00007814, 0x0019beff },
- - { 0x00007818, 0x07e40000 },
- - { 0x0000781c, 0x00492000 },
- - { 0x00007820, 0x92492480 },
- - { 0x00007824, 0x00040000 },
- - { 0x00007828, 0xdb005012 },
- - { 0x0000782c, 0x04924914 },
- - { 0x00007830, 0x21084210 },
- - { 0x00007834, 0x6d801300 },
- - { 0x00007838, 0x0019beff },
- - { 0x0000783c, 0x07e40000 },
- - { 0x00007840, 0x00492000 },
- - { 0x00007844, 0x92492480 },
- - { 0x00007848, 0x00120000 },
- - { 0x00007850, 0x54214514 },
- - { 0x00007858, 0x92592692 },
- - { 0x00007860, 0x52802000 },
- - { 0x00007864, 0x0a8e370e },
- - { 0x00007868, 0xc0102850 },
- - { 0x0000786c, 0x812d4000 },
- - { 0x00007874, 0x001b6db0 },
- - { 0x00007878, 0x00376b63 },
- - { 0x0000787c, 0x06db6db6 },
- - { 0x00007880, 0x006d8000 },
- - { 0x00007884, 0xffeffffe },
- - { 0x00007888, 0xffeffffe },
- - { 0x00007890, 0x00060aeb },
- - { 0x00007894, 0x5a108000 },
- - { 0x00007898, 0x2a850160 },
- -};
- -
- -/* XXX 9280 2 */
- -static const u32 ar9280Modes_9280_2[][6] = {
- - { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
- - { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
- - { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
- - { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
- - { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
- - { 0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f },
- - { 0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810 },
- - { 0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a, 0x0000320a },
- - { 0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440, 0x00006880 },
- - { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
- - { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
- - { 0x00009824, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e },
- - { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
- - { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- - { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
- - { 0x00009840, 0x206a022e, 0x206a022e, 0x206a012e, 0x206a012e, 0x206a012e },
- - { 0x00009844, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0, 0x037216a0 },
- - { 0x00009850, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2, 0x6c4000e2 },
- - { 0x00009858, 0x7ec88d2e, 0x7ec88d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
- - { 0x0000985c, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e, 0x31395d5e },
- - { 0x00009860, 0x00048d18, 0x00048d18, 0x00048d20, 0x00048d20, 0x00048d18 },
- - { 0x00009864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- - { 0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
- - { 0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881 },
- - { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
- - { 0x00009918, 0x0000000a, 0x00000014, 0x00000268, 0x0000000b, 0x00000016 },
- - { 0x00009924, 0xd00a8a0b, 0xd00a8a0b, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d },
- - { 0x00009944, 0xffbc1010, 0xffbc1010, 0xffbc1010, 0xffbc1010, 0xffbc1010 },
- - { 0x00009960, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010 },
- - { 0x0000a960, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010 },
- - { 0x00009964, 0x00000210, 0x00000210, 0x00000210, 0x00000210, 0x00000210 },
- - { 0x0000c968, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce, 0x000003ce },
- - { 0x000099b8, 0x0000001c, 0x0000001c, 0x0000001c, 0x0000001c, 0x0000001c },
- - { 0x000099bc, 0x00000a00, 0x00000a00, 0x00000c00, 0x00000c00, 0x00000c00 },
- - { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
- - { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
- - { 0x000099c8, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329 },
- - { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
- - { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
- - { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a204, 0x00000444, 0x00000444, 0x00000444, 0x00000444, 0x00000444 },
- - { 0x0000a20c, 0x00000014, 0x00000014, 0x0001f019, 0x0001f019, 0x0001f019 },
- - { 0x0000b20c, 0x00000014, 0x00000014, 0x0001f019, 0x0001f019, 0x0001f019 },
- - { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
- - { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- - { 0x0000a23c, 0x13c88000, 0x13c88000, 0x13c88001, 0x13c88000, 0x13c88000 },
- - { 0x0000a250, 0x001ff000, 0x001ff000, 0x0004a000, 0x0004a000, 0x0004a000 },
- - { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
- - { 0x0000a388, 0x0c000000, 0x0c000000, 0x08000000, 0x0c000000, 0x0c000000 },
- - { 0x0000a3d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x00007894, 0x5a508000, 0x5a508000, 0x5a508000, 0x5a508000, 0x5a508000 },
- -};
- -
- -static const u32 ar9280Common_9280_2[][2] = {
- - { 0x0000000c, 0x00000000 },
- - { 0x00000030, 0x00020015 },
- - { 0x00000034, 0x00000005 },
- - { 0x00000040, 0x00000000 },
- - { 0x00000044, 0x00000008 },
- - { 0x00000048, 0x00000008 },
- - { 0x0000004c, 0x00000010 },
- - { 0x00000050, 0x00000000 },
- - { 0x00000054, 0x0000001f },
- - { 0x00000800, 0x00000000 },
- - { 0x00000804, 0x00000000 },
- - { 0x00000808, 0x00000000 },
- - { 0x0000080c, 0x00000000 },
- - { 0x00000810, 0x00000000 },
- - { 0x00000814, 0x00000000 },
- - { 0x00000818, 0x00000000 },
- - { 0x0000081c, 0x00000000 },
- - { 0x00000820, 0x00000000 },
- - { 0x00000824, 0x00000000 },
- - { 0x00001040, 0x002ffc0f },
- - { 0x00001044, 0x002ffc0f },
- - { 0x00001048, 0x002ffc0f },
- - { 0x0000104c, 0x002ffc0f },
- - { 0x00001050, 0x002ffc0f },
- - { 0x00001054, 0x002ffc0f },
- - { 0x00001058, 0x002ffc0f },
- - { 0x0000105c, 0x002ffc0f },
- - { 0x00001060, 0x002ffc0f },
- - { 0x00001064, 0x002ffc0f },
- - { 0x00001230, 0x00000000 },
- - { 0x00001270, 0x00000000 },
- - { 0x00001038, 0x00000000 },
- - { 0x00001078, 0x00000000 },
- - { 0x000010b8, 0x00000000 },
- - { 0x000010f8, 0x00000000 },
- - { 0x00001138, 0x00000000 },
- - { 0x00001178, 0x00000000 },
- - { 0x000011b8, 0x00000000 },
- - { 0x000011f8, 0x00000000 },
- - { 0x00001238, 0x00000000 },
- - { 0x00001278, 0x00000000 },
- - { 0x000012b8, 0x00000000 },
- - { 0x000012f8, 0x00000000 },
- - { 0x00001338, 0x00000000 },
- - { 0x00001378, 0x00000000 },
- - { 0x000013b8, 0x00000000 },
- - { 0x000013f8, 0x00000000 },
- - { 0x00001438, 0x00000000 },
- - { 0x00001478, 0x00000000 },
- - { 0x000014b8, 0x00000000 },
- - { 0x000014f8, 0x00000000 },
- - { 0x00001538, 0x00000000 },
- - { 0x00001578, 0x00000000 },
- - { 0x000015b8, 0x00000000 },
- - { 0x000015f8, 0x00000000 },
- - { 0x00001638, 0x00000000 },
- - { 0x00001678, 0x00000000 },
- - { 0x000016b8, 0x00000000 },
- - { 0x000016f8, 0x00000000 },
- - { 0x00001738, 0x00000000 },
- - { 0x00001778, 0x00000000 },
- - { 0x000017b8, 0x00000000 },
- - { 0x000017f8, 0x00000000 },
- - { 0x0000103c, 0x00000000 },
- - { 0x0000107c, 0x00000000 },
- - { 0x000010bc, 0x00000000 },
- - { 0x000010fc, 0x00000000 },
- - { 0x0000113c, 0x00000000 },
- - { 0x0000117c, 0x00000000 },
- - { 0x000011bc, 0x00000000 },
- - { 0x000011fc, 0x00000000 },
- - { 0x0000123c, 0x00000000 },
- - { 0x0000127c, 0x00000000 },
- - { 0x000012bc, 0x00000000 },
- - { 0x000012fc, 0x00000000 },
- - { 0x0000133c, 0x00000000 },
- - { 0x0000137c, 0x00000000 },
- - { 0x000013bc, 0x00000000 },
- - { 0x000013fc, 0x00000000 },
- - { 0x0000143c, 0x00000000 },
- - { 0x0000147c, 0x00000000 },
- - { 0x00004030, 0x00000002 },
- - { 0x0000403c, 0x00000002 },
- - { 0x00004024, 0x0000001f },
- - { 0x00004060, 0x00000000 },
- - { 0x00004064, 0x00000000 },
- - { 0x00007010, 0x00000033 },
- - { 0x00007034, 0x00000002 },
- - { 0x00007038, 0x000004c2 },
- - { 0x00008004, 0x00000000 },
- - { 0x00008008, 0x00000000 },
- - { 0x0000800c, 0x00000000 },
- - { 0x00008018, 0x00000700 },
- - { 0x00008020, 0x00000000 },
- - { 0x00008038, 0x00000000 },
- - { 0x0000803c, 0x00000000 },
- - { 0x00008048, 0x40000000 },
- - { 0x00008054, 0x00000000 },
- - { 0x00008058, 0x00000000 },
- - { 0x0000805c, 0x000fc78f },
- - { 0x00008060, 0x0000000f },
- - { 0x00008064, 0x00000000 },
- - { 0x00008070, 0x00000000 },
- - { 0x000080c0, 0x2a80001a },
- - { 0x000080c4, 0x05dc01e0 },
- - { 0x000080c8, 0x1f402710 },
- - { 0x000080cc, 0x01f40000 },
- - { 0x000080d0, 0x00001e00 },
- - { 0x000080d4, 0x00000000 },
- - { 0x000080d8, 0x00400000 },
- - { 0x000080e0, 0xffffffff },
- - { 0x000080e4, 0x0000ffff },
- - { 0x000080e8, 0x003f3f3f },
- - { 0x000080ec, 0x00000000 },
- - { 0x000080f0, 0x00000000 },
- - { 0x000080f4, 0x00000000 },
- - { 0x000080f8, 0x00000000 },
- - { 0x000080fc, 0x00020000 },
- - { 0x00008100, 0x00020000 },
- - { 0x00008104, 0x00000001 },
- - { 0x00008108, 0x00000052 },
- - { 0x0000810c, 0x00000000 },
- - { 0x00008110, 0x00000168 },
- - { 0x00008118, 0x000100aa },
- - { 0x0000811c, 0x00003210 },
- - { 0x00008124, 0x00000000 },
- - { 0x00008128, 0x00000000 },
- - { 0x0000812c, 0x00000000 },
- - { 0x00008130, 0x00000000 },
- - { 0x00008134, 0x00000000 },
- - { 0x00008138, 0x00000000 },
- - { 0x0000813c, 0x00000000 },
- - { 0x00008144, 0xffffffff },
- - { 0x00008168, 0x00000000 },
- - { 0x0000816c, 0x00000000 },
- - { 0x00008170, 0x32143320 },
- - { 0x00008174, 0xfaa4fa50 },
- - { 0x00008178, 0x00000100 },
- - { 0x0000817c, 0x00000000 },
- - { 0x000081c0, 0x00000000 },
- - { 0x000081ec, 0x00000000 },
- - { 0x000081f0, 0x00000000 },
- - { 0x000081f4, 0x00000000 },
- - { 0x000081f8, 0x00000000 },
- - { 0x000081fc, 0x00000000 },
- - { 0x00008200, 0x00000000 },
- - { 0x00008204, 0x00000000 },
- - { 0x00008208, 0x00000000 },
- - { 0x0000820c, 0x00000000 },
- - { 0x00008210, 0x00000000 },
- - { 0x00008214, 0x00000000 },
- - { 0x00008218, 0x00000000 },
- - { 0x0000821c, 0x00000000 },
- - { 0x00008220, 0x00000000 },
- - { 0x00008224, 0x00000000 },
- - { 0x00008228, 0x00000000 },
- - { 0x0000822c, 0x00000000 },
- - { 0x00008230, 0x00000000 },
- - { 0x00008234, 0x00000000 },
- - { 0x00008238, 0x00000000 },
- - { 0x0000823c, 0x00000000 },
- - { 0x00008240, 0x00100000 },
- - { 0x00008244, 0x0010f400 },
- - { 0x00008248, 0x00000100 },
- - { 0x0000824c, 0x0001e800 },
- - { 0x00008250, 0x00000000 },
- - { 0x00008254, 0x00000000 },
- - { 0x00008258, 0x00000000 },
- - { 0x0000825c, 0x400000ff },
- - { 0x00008260, 0x00080922 },
- - { 0x00008264, 0xa8a00010 },
- - { 0x00008270, 0x00000000 },
- - { 0x00008274, 0x40000000 },
- - { 0x00008278, 0x003e4180 },
- - { 0x0000827c, 0x00000000 },
- - { 0x00008284, 0x0000002c },
- - { 0x00008288, 0x0000002c },
- - { 0x0000828c, 0x00000000 },
- - { 0x00008294, 0x00000000 },
- - { 0x00008298, 0x00000000 },
- - { 0x0000829c, 0x00000000 },
- - { 0x00008300, 0x00000040 },
- - { 0x00008314, 0x00000000 },
- - { 0x00008328, 0x00000000 },
- - { 0x0000832c, 0x00000007 },
- - { 0x00008330, 0x00000302 },
- - { 0x00008334, 0x00000e00 },
- - { 0x00008338, 0x00ff0000 },
- - { 0x0000833c, 0x00000000 },
- - { 0x00008340, 0x000107ff },
- - { 0x00008344, 0x00481043 },
- - { 0x00009808, 0x00000000 },
- - { 0x0000980c, 0xafa68e30 },
- - { 0x00009810, 0xfd14e000 },
- - { 0x00009814, 0x9c0a9f6b },
- - { 0x0000981c, 0x00000000 },
- - { 0x0000982c, 0x0000a000 },
- - { 0x00009830, 0x00000000 },
- - { 0x0000983c, 0x00200400 },
- - { 0x0000984c, 0x0040233c },
- - { 0x0000a84c, 0x0040233c },
- - { 0x00009854, 0x00000044 },
- - { 0x00009900, 0x00000000 },
- - { 0x00009904, 0x00000000 },
- - { 0x00009908, 0x00000000 },
- - { 0x0000990c, 0x00000000 },
- - { 0x00009910, 0x01002310 },
- - { 0x0000991c, 0x10000fff },
- - { 0x00009920, 0x04900000 },
- - { 0x0000a920, 0x04900000 },
- - { 0x00009928, 0x00000001 },
- - { 0x0000992c, 0x00000004 },
- - { 0x00009934, 0x1e1f2022 },
- - { 0x00009938, 0x0a0b0c0d },
- - { 0x0000993c, 0x00000000 },
- - { 0x00009948, 0x9280c00a },
- - { 0x0000994c, 0x00020028 },
- - { 0x00009954, 0x5f3ca3de },
- - { 0x00009958, 0x2108ecff },
- - { 0x00009940, 0x14750604 },
- - { 0x0000c95c, 0x004b6a8e },
- - { 0x00009970, 0x190fb515 },
- - { 0x00009974, 0x00000000 },
- - { 0x00009978, 0x00000001 },
- - { 0x0000997c, 0x00000000 },
- - { 0x00009980, 0x00000000 },
- - { 0x00009984, 0x00000000 },
- - { 0x00009988, 0x00000000 },
- - { 0x0000998c, 0x00000000 },
- - { 0x00009990, 0x00000000 },
- - { 0x00009994, 0x00000000 },
- - { 0x00009998, 0x00000000 },
- - { 0x0000999c, 0x00000000 },
- - { 0x000099a0, 0x00000000 },
- - { 0x000099a4, 0x00000001 },
- - { 0x000099a8, 0x201fff00 },
- - { 0x000099ac, 0x006f0000 },
- - { 0x000099b0, 0x03051000 },
- - { 0x000099b4, 0x00000820 },
- - { 0x000099dc, 0x00000000 },
- - { 0x000099e0, 0x00000000 },
- - { 0x000099e4, 0xaaaaaaaa },
- - { 0x000099e8, 0x3c466478 },
- - { 0x000099ec, 0x0cc80caa },
- - { 0x000099f0, 0x00000000 },
- - { 0x000099fc, 0x00001042 },
- - { 0x0000a208, 0x803e4788 },
- - { 0x0000a210, 0x4080a333 },
- - { 0x0000a214, 0x40206c10 },
- - { 0x0000a218, 0x009c4060 },
- - { 0x0000a220, 0x01834061 },
- - { 0x0000a224, 0x00000400 },
- - { 0x0000a228, 0x000003b5 },
- - { 0x0000a22c, 0x233f7180 },
- - { 0x0000a234, 0x20202020 },
- - { 0x0000a238, 0x20202020 },
- - { 0x0000a240, 0x38490a20 },
- - { 0x0000a244, 0x00007bb6 },
- - { 0x0000a248, 0x0fff3ffc },
- - { 0x0000a24c, 0x00000000 },
- - { 0x0000a254, 0x00000000 },
- - { 0x0000a258, 0x0cdbd380 },
- - { 0x0000a25c, 0x0f0f0f01 },
- - { 0x0000a260, 0xdfa91f01 },
- - { 0x0000a268, 0x00000000 },
- - { 0x0000a26c, 0x0e79e5c6 },
- - { 0x0000b26c, 0x0e79e5c6 },
- - { 0x0000d270, 0x00820820 },
- - { 0x0000a278, 0x1ce739ce },
- - { 0x0000d35c, 0x07ffffef },
- - { 0x0000d360, 0x0fffffe7 },
- - { 0x0000d364, 0x17ffffe5 },
- - { 0x0000d368, 0x1fffffe4 },
- - { 0x0000d36c, 0x37ffffe3 },
- - { 0x0000d370, 0x3fffffe3 },
- - { 0x0000d374, 0x57ffffe3 },
- - { 0x0000d378, 0x5fffffe2 },
- - { 0x0000d37c, 0x7fffffe2 },
- - { 0x0000d380, 0x7f3c7bba },
- - { 0x0000d384, 0xf3307ff0 },
- - { 0x0000a38c, 0x20202020 },
- - { 0x0000a390, 0x20202020 },
- - { 0x0000a394, 0x1ce739ce },
- - { 0x0000a398, 0x000001ce },
- - { 0x0000a39c, 0x00000001 },
- - { 0x0000a3a0, 0x00000000 },
- - { 0x0000a3a4, 0x00000000 },
- - { 0x0000a3a8, 0x00000000 },
- - { 0x0000a3ac, 0x00000000 },
- - { 0x0000a3b0, 0x00000000 },
- - { 0x0000a3b4, 0x00000000 },
- - { 0x0000a3b8, 0x00000000 },
- - { 0x0000a3bc, 0x00000000 },
- - { 0x0000a3c0, 0x00000000 },
- - { 0x0000a3c4, 0x00000000 },
- - { 0x0000a3c8, 0x00000246 },
- - { 0x0000a3cc, 0x20202020 },
- - { 0x0000a3d0, 0x20202020 },
- - { 0x0000a3d4, 0x20202020 },
- - { 0x0000a3dc, 0x1ce739ce },
- - { 0x0000a3e0, 0x000001ce },
- - { 0x0000a3e4, 0x00000000 },
- - { 0x0000a3e8, 0x18c43433 },
- - { 0x0000a3ec, 0x00f70081 },
- - { 0x00007800, 0x00040000 },
- - { 0x00007804, 0xdb005012 },
- - { 0x00007808, 0x04924914 },
- - { 0x0000780c, 0x21084210 },
- - { 0x00007810, 0x6d801300 },
- - { 0x00007818, 0x07e41000 },
- - { 0x00007824, 0x00040000 },
- - { 0x00007828, 0xdb005012 },
- - { 0x0000782c, 0x04924914 },
- - { 0x00007830, 0x21084210 },
- - { 0x00007834, 0x6d801300 },
- - { 0x0000783c, 0x07e40000 },
- - { 0x00007848, 0x00100000 },
- - { 0x0000784c, 0x773f0567 },
- - { 0x00007850, 0x54214514 },
- - { 0x00007854, 0x12035828 },
- - { 0x00007858, 0x9259269a },
- - { 0x00007860, 0x52802000 },
- - { 0x00007864, 0x0a8e370e },
- - { 0x00007868, 0xc0102850 },
- - { 0x0000786c, 0x812d4000 },
- - { 0x00007870, 0x807ec400 },
- - { 0x00007874, 0x001b6db0 },
- - { 0x00007878, 0x00376b63 },
- - { 0x0000787c, 0x06db6db6 },
- - { 0x00007880, 0x006d8000 },
- - { 0x00007884, 0xffeffffe },
- - { 0x00007888, 0xffeffffe },
- - { 0x0000788c, 0x00010000 },
- - { 0x00007890, 0x02060aeb },
- - { 0x00007898, 0x2a850160 },
- -};
- -
- -static const u32 ar9280Modes_fast_clock_9280_2[][3] = {
- - { 0x00001030, 0x00000268, 0x000004d0 },
- - { 0x00001070, 0x0000018c, 0x00000318 },
- - { 0x000010b0, 0x00000fd0, 0x00001fa0 },
- - { 0x00008014, 0x044c044c, 0x08980898 },
- - { 0x0000801c, 0x148ec02b, 0x148ec057 },
- - { 0x00008318, 0x000044c0, 0x00008980 },
- - { 0x00009820, 0x02020200, 0x02020200 },
- - { 0x00009824, 0x01000f0f, 0x01000f0f },
- - { 0x00009828, 0x0b020001, 0x0b020001 },
- - { 0x00009834, 0x00000f0f, 0x00000f0f },
- - { 0x00009844, 0x03721821, 0x03721821 },
- - { 0x00009914, 0x00000898, 0x00001130 },
- - { 0x00009918, 0x0000000b, 0x00000016 },
- -};
- -
- -static const u32 ar9280Modes_backoff_23db_rxgain_9280_2[][6] = {
- - { 0x00009a00, 0x00008184, 0x00008184, 0x00000290, 0x00000290, 0x00000290 },
- - { 0x00009a04, 0x00008188, 0x00008188, 0x00000300, 0x00000300, 0x00000300 },
- - { 0x00009a08, 0x0000818c, 0x0000818c, 0x00000304, 0x00000304, 0x00000304 },
- - { 0x00009a0c, 0x00008190, 0x00008190, 0x00000308, 0x00000308, 0x00000308 },
- - { 0x00009a10, 0x00008194, 0x00008194, 0x0000030c, 0x0000030c, 0x0000030c },
- - { 0x00009a14, 0x00008200, 0x00008200, 0x00008000, 0x00008000, 0x00008000 },
- - { 0x00009a18, 0x00008204, 0x00008204, 0x00008004, 0x00008004, 0x00008004 },
- - { 0x00009a1c, 0x00008208, 0x00008208, 0x00008008, 0x00008008, 0x00008008 },
- - { 0x00009a20, 0x0000820c, 0x0000820c, 0x0000800c, 0x0000800c, 0x0000800c },
- - { 0x00009a24, 0x00008210, 0x00008210, 0x00008080, 0x00008080, 0x00008080 },
- - { 0x00009a28, 0x00008214, 0x00008214, 0x00008084, 0x00008084, 0x00008084 },
- - { 0x00009a2c, 0x00008280, 0x00008280, 0x00008088, 0x00008088, 0x00008088 },
- - { 0x00009a30, 0x00008284, 0x00008284, 0x0000808c, 0x0000808c, 0x0000808c },
- - { 0x00009a34, 0x00008288, 0x00008288, 0x00008100, 0x00008100, 0x00008100 },
- - { 0x00009a38, 0x0000828c, 0x0000828c, 0x00008104, 0x00008104, 0x00008104 },
- - { 0x00009a3c, 0x00008290, 0x00008290, 0x00008108, 0x00008108, 0x00008108 },
- - { 0x00009a40, 0x00008300, 0x00008300, 0x0000810c, 0x0000810c, 0x0000810c },
- - { 0x00009a44, 0x00008304, 0x00008304, 0x00008110, 0x00008110, 0x00008110 },
- - { 0x00009a48, 0x00008308, 0x00008308, 0x00008114, 0x00008114, 0x00008114 },
- - { 0x00009a4c, 0x0000830c, 0x0000830c, 0x00008180, 0x00008180, 0x00008180 },
- - { 0x00009a50, 0x00008310, 0x00008310, 0x00008184, 0x00008184, 0x00008184 },
- - { 0x00009a54, 0x00008314, 0x00008314, 0x00008188, 0x00008188, 0x00008188 },
- - { 0x00009a58, 0x00008380, 0x00008380, 0x0000818c, 0x0000818c, 0x0000818c },
- - { 0x00009a5c, 0x00008384, 0x00008384, 0x00008190, 0x00008190, 0x00008190 },
- - { 0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194, 0x00008194 },
- - { 0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0, 0x000081a0 },
- - { 0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c, 0x0000820c },
- - { 0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8, 0x000081a8 },
- - { 0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284, 0x00008284 },
- - { 0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288, 0x00008288 },
- - { 0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224, 0x00008224 },
- - { 0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290, 0x00008290 },
- - { 0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300, 0x00008300 },
- - { 0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304, 0x00008304 },
- - { 0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308, 0x00008308 },
- - { 0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c, 0x0000830c },
- - { 0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380, 0x00008380 },
- - { 0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384, 0x00008384 },
- - { 0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700, 0x00008700 },
- - { 0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704, 0x00008704 },
- - { 0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708, 0x00008708 },
- - { 0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c, 0x0000870c },
- - { 0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780, 0x00008780 },
- - { 0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784, 0x00008784 },
- - { 0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00, 0x00008b00 },
- - { 0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04, 0x00008b04 },
- - { 0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08, 0x00008b08 },
- - { 0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c, 0x00008b0c },
- - { 0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b10, 0x00008b10, 0x00008b10 },
- - { 0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b14, 0x00008b14, 0x00008b14 },
- - { 0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b01, 0x00008b01, 0x00008b01 },
- - { 0x00009acc, 0x0000b380, 0x0000b380, 0x00008b05, 0x00008b05, 0x00008b05 },
- - { 0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b09, 0x00008b09, 0x00008b09 },
- - { 0x00009ad4, 0x0000b388, 0x0000b388, 0x00008b0d, 0x00008b0d, 0x00008b0d },
- - { 0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008b11, 0x00008b11, 0x00008b11 },
- - { 0x00009adc, 0x0000b390, 0x0000b390, 0x00008b15, 0x00008b15, 0x00008b15 },
- - { 0x00009ae0, 0x0000b394, 0x0000b394, 0x00008b02, 0x00008b02, 0x00008b02 },
- - { 0x00009ae4, 0x0000b398, 0x0000b398, 0x00008b06, 0x00008b06, 0x00008b06 },
- - { 0x00009ae8, 0x0000b780, 0x0000b780, 0x00008b0a, 0x00008b0a, 0x00008b0a },
- - { 0x00009aec, 0x0000b784, 0x0000b784, 0x00008b0e, 0x00008b0e, 0x00008b0e },
- - { 0x00009af0, 0x0000b788, 0x0000b788, 0x00008b12, 0x00008b12, 0x00008b12 },
- - { 0x00009af4, 0x0000b78c, 0x0000b78c, 0x00008b16, 0x00008b16, 0x00008b16 },
- - { 0x00009af8, 0x0000b790, 0x0000b790, 0x00008b03, 0x00008b03, 0x00008b03 },
- - { 0x00009afc, 0x0000b794, 0x0000b794, 0x00008b07, 0x00008b07, 0x00008b07 },
- - { 0x00009b00, 0x0000b798, 0x0000b798, 0x00008b0b, 0x00008b0b, 0x00008b0b },
- - { 0x00009b04, 0x0000d784, 0x0000d784, 0x00008b0f, 0x00008b0f, 0x00008b0f },
- - { 0x00009b08, 0x0000d788, 0x0000d788, 0x00008b13, 0x00008b13, 0x00008b13 },
- - { 0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00008b17, 0x00008b17, 0x00008b17 },
- - { 0x00009b10, 0x0000d790, 0x0000d790, 0x00008b23, 0x00008b23, 0x00008b23 },
- - { 0x00009b14, 0x0000f780, 0x0000f780, 0x00008b27, 0x00008b27, 0x00008b27 },
- - { 0x00009b18, 0x0000f784, 0x0000f784, 0x00008b2b, 0x00008b2b, 0x00008b2b },
- - { 0x00009b1c, 0x0000f788, 0x0000f788, 0x00008b2f, 0x00008b2f, 0x00008b2f },
- - { 0x00009b20, 0x0000f78c, 0x0000f78c, 0x00008b33, 0x00008b33, 0x00008b33 },
- - { 0x00009b24, 0x0000f790, 0x0000f790, 0x00008b37, 0x00008b37, 0x00008b37 },
- - { 0x00009b28, 0x0000f794, 0x0000f794, 0x00008b43, 0x00008b43, 0x00008b43 },
- - { 0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x00008b47, 0x00008b47, 0x00008b47 },
- - { 0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x00008b4b, 0x00008b4b, 0x00008b4b },
- - { 0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x00008b4f, 0x00008b4f, 0x00008b4f },
- - { 0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x00008b53, 0x00008b53, 0x00008b53 },
- - { 0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x00008b57, 0x00008b57, 0x00008b57 },
- - { 0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b98, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009b9c, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009ba0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009ba4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009ba8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bac, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bb0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bb4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bb8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bbc, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bc0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bc4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bc8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bcc, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bd0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bd4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bd8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bdc, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009be0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009be4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009be8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bec, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bf0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bf4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bf8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009bfc, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
- - { 0x00009848, 0x00001066, 0x00001066, 0x00001050, 0x00001050, 0x00001050 },
- - { 0x0000a848, 0x00001066, 0x00001066, 0x00001050, 0x00001050, 0x00001050 },
- -};
- -
- -static const u32 ar9280Modes_original_rxgain_9280_2[][6] = {
- - { 0x00009a00, 0x00008184, 0x00008184, 0x00000290, 0x00000290, 0x00000290 },
- - { 0x00009a04, 0x00008188, 0x00008188, 0x00000300, 0x00000300, 0x00000300 },
- - { 0x00009a08, 0x0000818c, 0x0000818c, 0x00000304, 0x00000304, 0x00000304 },
- - { 0x00009a0c, 0x00008190, 0x00008190, 0x00000308, 0x00000308, 0x00000308 },
- - { 0x00009a10, 0x00008194, 0x00008194, 0x0000030c, 0x0000030c, 0x0000030c },
- - { 0x00009a14, 0x00008200, 0x00008200, 0x00008000, 0x00008000, 0x00008000 },
- - { 0x00009a18, 0x00008204, 0x00008204, 0x00008004, 0x00008004, 0x00008004 },
- - { 0x00009a1c, 0x00008208, 0x00008208, 0x00008008, 0x00008008, 0x00008008 },
- - { 0x00009a20, 0x0000820c, 0x0000820c, 0x0000800c, 0x0000800c, 0x0000800c },
- - { 0x00009a24, 0x00008210, 0x00008210, 0x00008080, 0x00008080, 0x00008080 },
- - { 0x00009a28, 0x00008214, 0x00008214, 0x00008084, 0x00008084, 0x00008084 },
- - { 0x00009a2c, 0x00008280, 0x00008280, 0x00008088, 0x00008088, 0x00008088 },
- - { 0x00009a30, 0x00008284, 0x00008284, 0x0000808c, 0x0000808c, 0x0000808c },
- - { 0x00009a34, 0x00008288, 0x00008288, 0x00008100, 0x00008100, 0x00008100 },
- - { 0x00009a38, 0x0000828c, 0x0000828c, 0x00008104, 0x00008104, 0x00008104 },
- - { 0x00009a3c, 0x00008290, 0x00008290, 0x00008108, 0x00008108, 0x00008108 },
- - { 0x00009a40, 0x00008300, 0x00008300, 0x0000810c, 0x0000810c, 0x0000810c },
- - { 0x00009a44, 0x00008304, 0x00008304, 0x00008110, 0x00008110, 0x00008110 },
- - { 0x00009a48, 0x00008308, 0x00008308, 0x00008114, 0x00008114, 0x00008114 },
- - { 0x00009a4c, 0x0000830c, 0x0000830c, 0x00008180, 0x00008180, 0x00008180 },
- - { 0x00009a50, 0x00008310, 0x00008310, 0x00008184, 0x00008184, 0x00008184 },
- - { 0x00009a54, 0x00008314, 0x00008314, 0x00008188, 0x00008188, 0x00008188 },
- - { 0x00009a58, 0x00008380, 0x00008380, 0x0000818c, 0x0000818c, 0x0000818c },
- - { 0x00009a5c, 0x00008384, 0x00008384, 0x00008190, 0x00008190, 0x00008190 },
- - { 0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194, 0x00008194 },
- - { 0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0, 0x000081a0 },
- - { 0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c, 0x0000820c },
- - { 0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8, 0x000081a8 },
- - { 0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284, 0x00008284 },
- - { 0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288, 0x00008288 },
- - { 0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224, 0x00008224 },
- - { 0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290, 0x00008290 },
- - { 0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300, 0x00008300 },
- - { 0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304, 0x00008304 },
- - { 0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308, 0x00008308 },
- - { 0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c, 0x0000830c },
- - { 0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380, 0x00008380 },
- - { 0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384, 0x00008384 },
- - { 0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700, 0x00008700 },
- - { 0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704, 0x00008704 },
- - { 0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708, 0x00008708 },
- - { 0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c, 0x0000870c },
- - { 0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780, 0x00008780 },
- - { 0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784, 0x00008784 },
- - { 0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00, 0x00008b00 },
- - { 0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04, 0x00008b04 },
- - { 0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08, 0x00008b08 },
- - { 0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c, 0x00008b0c },
- - { 0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b80, 0x00008b80, 0x00008b80 },
- - { 0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b84, 0x00008b84, 0x00008b84 },
- - { 0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b88, 0x00008b88, 0x00008b88 },
- - { 0x00009acc, 0x0000b380, 0x0000b380, 0x00008b8c, 0x00008b8c, 0x00008b8c },
- - { 0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b90, 0x00008b90, 0x00008b90 },
- - { 0x00009ad4, 0x0000b388, 0x0000b388, 0x00008f80, 0x00008f80, 0x00008f80 },
- - { 0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008f84, 0x00008f84, 0x00008f84 },
- - { 0x00009adc, 0x0000b390, 0x0000b390, 0x00008f88, 0x00008f88, 0x00008f88 },
- - { 0x00009ae0, 0x0000b394, 0x0000b394, 0x00008f8c, 0x00008f8c, 0x00008f8c },
- - { 0x00009ae4, 0x0000b398, 0x0000b398, 0x00008f90, 0x00008f90, 0x00008f90 },
- - { 0x00009ae8, 0x0000b780, 0x0000b780, 0x0000930c, 0x0000930c, 0x0000930c },
- - { 0x00009aec, 0x0000b784, 0x0000b784, 0x00009310, 0x00009310, 0x00009310 },
- - { 0x00009af0, 0x0000b788, 0x0000b788, 0x00009384, 0x00009384, 0x00009384 },
- - { 0x00009af4, 0x0000b78c, 0x0000b78c, 0x00009388, 0x00009388, 0x00009388 },
- - { 0x00009af8, 0x0000b790, 0x0000b790, 0x00009324, 0x00009324, 0x00009324 },
- - { 0x00009afc, 0x0000b794, 0x0000b794, 0x00009704, 0x00009704, 0x00009704 },
- - { 0x00009b00, 0x0000b798, 0x0000b798, 0x000096a4, 0x000096a4, 0x000096a4 },
- - { 0x00009b04, 0x0000d784, 0x0000d784, 0x000096a8, 0x000096a8, 0x000096a8 },
- - { 0x00009b08, 0x0000d788, 0x0000d788, 0x00009710, 0x00009710, 0x00009710 },
- - { 0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00009714, 0x00009714, 0x00009714 },
- - { 0x00009b10, 0x0000d790, 0x0000d790, 0x00009720, 0x00009720, 0x00009720 },
- - { 0x00009b14, 0x0000f780, 0x0000f780, 0x00009724, 0x00009724, 0x00009724 },
- - { 0x00009b18, 0x0000f784, 0x0000f784, 0x00009728, 0x00009728, 0x00009728 },
- - { 0x00009b1c, 0x0000f788, 0x0000f788, 0x0000972c, 0x0000972c, 0x0000972c },
- - { 0x00009b20, 0x0000f78c, 0x0000f78c, 0x000097a0, 0x000097a0, 0x000097a0 },
- - { 0x00009b24, 0x0000f790, 0x0000f790, 0x000097a4, 0x000097a4, 0x000097a4 },
- - { 0x00009b28, 0x0000f794, 0x0000f794, 0x000097a8, 0x000097a8, 0x000097a8 },
- - { 0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x000097b0, 0x000097b0, 0x000097b0 },
- - { 0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x000097b4, 0x000097b4, 0x000097b4 },
- - { 0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x000097b8, 0x000097b8, 0x000097b8 },
- - { 0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x000097a5, 0x000097a5, 0x000097a5 },
- - { 0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x000097a9, 0x000097a9, 0x000097a9 },
- - { 0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x000097ad, 0x000097ad, 0x000097ad },
- - { 0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x000097b1, 0x000097b1, 0x000097b1 },
- - { 0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x000097b5, 0x000097b5, 0x000097b5 },
- - { 0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x000097b9, 0x000097b9, 0x000097b9 },
- - { 0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x000097c5, 0x000097c5, 0x000097c5 },
- - { 0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x000097c9, 0x000097c9, 0x000097c9 },
- - { 0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x000097d1, 0x000097d1, 0x000097d1 },
- - { 0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x000097d5, 0x000097d5, 0x000097d5 },
- - { 0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x000097d9, 0x000097d9, 0x000097d9 },
- - { 0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x000097c6, 0x000097c6, 0x000097c6 },
- - { 0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x000097ca, 0x000097ca, 0x000097ca },
- - { 0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x000097ce, 0x000097ce, 0x000097ce },
- - { 0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x000097d2, 0x000097d2, 0x000097d2 },
- - { 0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x000097d6, 0x000097d6, 0x000097d6 },
- - { 0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x000097c3, 0x000097c3, 0x000097c3 },
- - { 0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x000097c7, 0x000097c7, 0x000097c7 },
- - { 0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x000097cb, 0x000097cb, 0x000097cb },
- - { 0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x000097cf, 0x000097cf, 0x000097cf },
- - { 0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x000097d7, 0x000097d7, 0x000097d7 },
- - { 0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009b98, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009b9c, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009ba0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009ba4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009ba8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bac, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bb0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bb4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bb8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bbc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bc0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bc4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bc8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bcc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bd0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bd4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bd8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bdc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009be0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009be4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009be8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bec, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bf0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bf4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bf8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009bfc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
- - { 0x00009848, 0x00001066, 0x00001066, 0x00001063, 0x00001063, 0x00001063 },
- - { 0x0000a848, 0x00001066, 0x00001066, 0x00001063, 0x00001063, 0x00001063 },
- -};
- -
- -static const u32 ar9280Modes_backoff_13db_rxgain_9280_2[][6] = {
- - { 0x00009a00, 0x00008184, 0x00008184, 0x00000290, 0x00000290, 0x00000290 },
- - { 0x00009a04, 0x00008188, 0x00008188, 0x00000300, 0x00000300, 0x00000300 },
- - { 0x00009a08, 0x0000818c, 0x0000818c, 0x00000304, 0x00000304, 0x00000304 },
- - { 0x00009a0c, 0x00008190, 0x00008190, 0x00000308, 0x00000308, 0x00000308 },
- - { 0x00009a10, 0x00008194, 0x00008194, 0x0000030c, 0x0000030c, 0x0000030c },
- - { 0x00009a14, 0x00008200, 0x00008200, 0x00008000, 0x00008000, 0x00008000 },
- - { 0x00009a18, 0x00008204, 0x00008204, 0x00008004, 0x00008004, 0x00008004 },
- - { 0x00009a1c, 0x00008208, 0x00008208, 0x00008008, 0x00008008, 0x00008008 },
- - { 0x00009a20, 0x0000820c, 0x0000820c, 0x0000800c, 0x0000800c, 0x0000800c },
- - { 0x00009a24, 0x00008210, 0x00008210, 0x00008080, 0x00008080, 0x00008080 },
- - { 0x00009a28, 0x00008214, 0x00008214, 0x00008084, 0x00008084, 0x00008084 },
- - { 0x00009a2c, 0x00008280, 0x00008280, 0x00008088, 0x00008088, 0x00008088 },
- - { 0x00009a30, 0x00008284, 0x00008284, 0x0000808c, 0x0000808c, 0x0000808c },
- - { 0x00009a34, 0x00008288, 0x00008288, 0x00008100, 0x00008100, 0x00008100 },
- - { 0x00009a38, 0x0000828c, 0x0000828c, 0x00008104, 0x00008104, 0x00008104 },
- - { 0x00009a3c, 0x00008290, 0x00008290, 0x00008108, 0x00008108, 0x00008108 },
- - { 0x00009a40, 0x00008300, 0x00008300, 0x0000810c, 0x0000810c, 0x0000810c },
- - { 0x00009a44, 0x00008304, 0x00008304, 0x00008110, 0x00008110, 0x00008110 },
- - { 0x00009a48, 0x00008308, 0x00008308, 0x00008114, 0x00008114, 0x00008114 },
- - { 0x00009a4c, 0x0000830c, 0x0000830c, 0x00008180, 0x00008180, 0x00008180 },
- - { 0x00009a50, 0x00008310, 0x00008310, 0x00008184, 0x00008184, 0x00008184 },
- - { 0x00009a54, 0x00008314, 0x00008314, 0x00008188, 0x00008188, 0x00008188 },
- - { 0x00009a58, 0x00008380, 0x00008380, 0x0000818c, 0x0000818c, 0x0000818c },
- - { 0x00009a5c, 0x00008384, 0x00008384, 0x00008190, 0x00008190, 0x00008190 },
- - { 0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194, 0x00008194 },
- - { 0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0, 0x000081a0 },
- - { 0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c, 0x0000820c },
- - { 0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8, 0x000081a8 },
- - { 0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284, 0x00008284 },
- - { 0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288, 0x00008288 },
- - { 0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224, 0x00008224 },
- - { 0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290, 0x00008290 },
- - { 0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300, 0x00008300 },
- - { 0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304, 0x00008304 },
- - { 0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308, 0x00008308 },
- - { 0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c, 0x0000830c },
- - { 0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380, 0x00008380 },
- - { 0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384, 0x00008384 },
- - { 0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700, 0x00008700 },
- - { 0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704, 0x00008704 },
- - { 0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708, 0x00008708 },
- - { 0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c, 0x0000870c },
- - { 0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780, 0x00008780 },
- - { 0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784, 0x00008784 },
- - { 0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00, 0x00008b00 },
- - { 0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04, 0x00008b04 },
- - { 0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08, 0x00008b08 },
- - { 0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c, 0x00008b0c },
- - { 0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b80, 0x00008b80, 0x00008b80 },
- - { 0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b84, 0x00008b84, 0x00008b84 },
- - { 0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b88, 0x00008b88, 0x00008b88 },
- - { 0x00009acc, 0x0000b380, 0x0000b380, 0x00008b8c, 0x00008b8c, 0x00008b8c },
- - { 0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b90, 0x00008b90, 0x00008b90 },
- - { 0x00009ad4, 0x0000b388, 0x0000b388, 0x00008f80, 0x00008f80, 0x00008f80 },
- - { 0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008f84, 0x00008f84, 0x00008f84 },
- - { 0x00009adc, 0x0000b390, 0x0000b390, 0x00008f88, 0x00008f88, 0x00008f88 },
- - { 0x00009ae0, 0x0000b394, 0x0000b394, 0x00008f8c, 0x00008f8c, 0x00008f8c },
- - { 0x00009ae4, 0x0000b398, 0x0000b398, 0x00008f90, 0x00008f90, 0x00008f90 },
- - { 0x00009ae8, 0x0000b780, 0x0000b780, 0x00009310, 0x00009310, 0x00009310 },
- - { 0x00009aec, 0x0000b784, 0x0000b784, 0x00009314, 0x00009314, 0x00009314 },
- - { 0x00009af0, 0x0000b788, 0x0000b788, 0x00009320, 0x00009320, 0x00009320 },
- - { 0x00009af4, 0x0000b78c, 0x0000b78c, 0x00009324, 0x00009324, 0x00009324 },
- - { 0x00009af8, 0x0000b790, 0x0000b790, 0x00009328, 0x00009328, 0x00009328 },
- - { 0x00009afc, 0x0000b794, 0x0000b794, 0x0000932c, 0x0000932c, 0x0000932c },
- - { 0x00009b00, 0x0000b798, 0x0000b798, 0x00009330, 0x00009330, 0x00009330 },
- - { 0x00009b04, 0x0000d784, 0x0000d784, 0x00009334, 0x00009334, 0x00009334 },
- - { 0x00009b08, 0x0000d788, 0x0000d788, 0x00009321, 0x00009321, 0x00009321 },
- - { 0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00009325, 0x00009325, 0x00009325 },
- - { 0x00009b10, 0x0000d790, 0x0000d790, 0x00009329, 0x00009329, 0x00009329 },
- - { 0x00009b14, 0x0000f780, 0x0000f780, 0x0000932d, 0x0000932d, 0x0000932d },
- - { 0x00009b18, 0x0000f784, 0x0000f784, 0x00009331, 0x00009331, 0x00009331 },
- - { 0x00009b1c, 0x0000f788, 0x0000f788, 0x00009335, 0x00009335, 0x00009335 },
- - { 0x00009b20, 0x0000f78c, 0x0000f78c, 0x00009322, 0x00009322, 0x00009322 },
- - { 0x00009b24, 0x0000f790, 0x0000f790, 0x00009326, 0x00009326, 0x00009326 },
- - { 0x00009b28, 0x0000f794, 0x0000f794, 0x0000932a, 0x0000932a, 0x0000932a },
- - { 0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x0000932e, 0x0000932e, 0x0000932e },
- - { 0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x00009332, 0x00009332, 0x00009332 },
- - { 0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x00009336, 0x00009336, 0x00009336 },
- - { 0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x00009323, 0x00009323, 0x00009323 },
- - { 0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x00009327, 0x00009327, 0x00009327 },
- - { 0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x0000932b, 0x0000932b, 0x0000932b },
- - { 0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x0000932f, 0x0000932f, 0x0000932f },
- - { 0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x00009333, 0x00009333, 0x00009333 },
- - { 0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x00009337, 0x00009337, 0x00009337 },
- - { 0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x00009343, 0x00009343, 0x00009343 },
- - { 0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x00009347, 0x00009347, 0x00009347 },
- - { 0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x0000934b, 0x0000934b, 0x0000934b },
- - { 0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x0000934f, 0x0000934f, 0x0000934f },
- - { 0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x00009353, 0x00009353, 0x00009353 },
- - { 0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x00009357, 0x00009357, 0x00009357 },
- - { 0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009b98, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009b9c, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009ba0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009ba4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009ba8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bac, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bb0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bb4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bb8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bbc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bc0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bc4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bc8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bcc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bd0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bd4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bd8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bdc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009be0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009be4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009be8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bec, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bf0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bf4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bf8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009bfc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
- - { 0x00009848, 0x00001066, 0x00001066, 0x0000105a, 0x0000105a, 0x0000105a },
- - { 0x0000a848, 0x00001066, 0x00001066, 0x0000105a, 0x0000105a, 0x0000105a },
- -};
- -
- -static const u32 ar9280Modes_high_power_tx_gain_9280_2[][6] = {
- - { 0x0000a274, 0x0a19e652, 0x0a19e652, 0x0a1aa652, 0x0a1aa652, 0x0a1aa652 },
- - { 0x0000a27c, 0x050739ce, 0x050739ce, 0x050739ce, 0x050739ce, 0x050739ce },
- - { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a304, 0x00003002, 0x00003002, 0x00004002, 0x00004002, 0x00004002 },
- - { 0x0000a308, 0x00006004, 0x00006004, 0x00007008, 0x00007008, 0x00007008 },
- - { 0x0000a30c, 0x0000a006, 0x0000a006, 0x0000c010, 0x0000c010, 0x0000c010 },
- - { 0x0000a310, 0x0000e012, 0x0000e012, 0x00010012, 0x00010012, 0x00010012 },
- - { 0x0000a314, 0x00011014, 0x00011014, 0x00013014, 0x00013014, 0x00013014 },
- - { 0x0000a318, 0x0001504a, 0x0001504a, 0x0001820a, 0x0001820a, 0x0001820a },
- - { 0x0000a31c, 0x0001904c, 0x0001904c, 0x0001b211, 0x0001b211, 0x0001b211 },
- - { 0x0000a320, 0x0001c04e, 0x0001c04e, 0x0001e213, 0x0001e213, 0x0001e213 },
- - { 0x0000a324, 0x00021092, 0x00021092, 0x00022411, 0x00022411, 0x00022411 },
- - { 0x0000a328, 0x0002510a, 0x0002510a, 0x00025413, 0x00025413, 0x00025413 },
- - { 0x0000a32c, 0x0002910c, 0x0002910c, 0x00029811, 0x00029811, 0x00029811 },
- - { 0x0000a330, 0x0002c18b, 0x0002c18b, 0x0002c813, 0x0002c813, 0x0002c813 },
- - { 0x0000a334, 0x0002f1cc, 0x0002f1cc, 0x00030a14, 0x00030a14, 0x00030a14 },
- - { 0x0000a338, 0x000321eb, 0x000321eb, 0x00035a50, 0x00035a50, 0x00035a50 },
- - { 0x0000a33c, 0x000341ec, 0x000341ec, 0x00039c4c, 0x00039c4c, 0x00039c4c },
- - { 0x0000a340, 0x000341ec, 0x000341ec, 0x0003de8a, 0x0003de8a, 0x0003de8a },
- - { 0x0000a344, 0x000341ec, 0x000341ec, 0x00042e92, 0x00042e92, 0x00042e92 },
- - { 0x0000a348, 0x000341ec, 0x000341ec, 0x00046ed2, 0x00046ed2, 0x00046ed2 },
- - { 0x0000a34c, 0x000341ec, 0x000341ec, 0x0004bed5, 0x0004bed5, 0x0004bed5 },
- - { 0x0000a350, 0x000341ec, 0x000341ec, 0x0004ff54, 0x0004ff54, 0x0004ff54 },
- - { 0x0000a354, 0x000341ec, 0x000341ec, 0x00055fd5, 0x00055fd5, 0x00055fd5 },
- - { 0x00007814, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff },
- - { 0x00007838, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff },
- - { 0x0000781c, 0x00172000, 0x00172000, 0x00172000, 0x00172000, 0x00172000 },
- - { 0x00007840, 0x00172000, 0x00172000, 0x00172000, 0x00172000, 0x00172000 },
- - { 0x00007820, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480 },
- - { 0x00007844, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480 },
- -};
- -
- -static const u32 ar9280Modes_original_tx_gain_9280_2[][6] = {
- - { 0x0000a274, 0x0a19c652, 0x0a19c652, 0x0a1aa652, 0x0a1aa652, 0x0a1aa652 },
- - { 0x0000a27c, 0x050701ce, 0x050701ce, 0x050701ce, 0x050701ce, 0x050701ce },
- - { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a304, 0x00003002, 0x00003002, 0x00003002, 0x00003002, 0x00003002 },
- - { 0x0000a308, 0x00006004, 0x00006004, 0x00008009, 0x00008009, 0x00008009 },
- - { 0x0000a30c, 0x0000a006, 0x0000a006, 0x0000b00b, 0x0000b00b, 0x0000b00b },
- - { 0x0000a310, 0x0000e012, 0x0000e012, 0x0000e012, 0x0000e012, 0x0000e012 },
- - { 0x0000a314, 0x00011014, 0x00011014, 0x00012048, 0x00012048, 0x00012048 },
- - { 0x0000a318, 0x0001504a, 0x0001504a, 0x0001604a, 0x0001604a, 0x0001604a },
- - { 0x0000a31c, 0x0001904c, 0x0001904c, 0x0001a211, 0x0001a211, 0x0001a211 },
- - { 0x0000a320, 0x0001c04e, 0x0001c04e, 0x0001e213, 0x0001e213, 0x0001e213 },
- - { 0x0000a324, 0x00020092, 0x00020092, 0x0002121b, 0x0002121b, 0x0002121b },
- - { 0x0000a328, 0x0002410a, 0x0002410a, 0x00024412, 0x00024412, 0x00024412 },
- - { 0x0000a32c, 0x0002710c, 0x0002710c, 0x00028414, 0x00028414, 0x00028414 },
- - { 0x0000a330, 0x0002b18b, 0x0002b18b, 0x0002b44a, 0x0002b44a, 0x0002b44a },
- - { 0x0000a334, 0x0002e1cc, 0x0002e1cc, 0x00030649, 0x00030649, 0x00030649 },
- - { 0x0000a338, 0x000321ec, 0x000321ec, 0x0003364b, 0x0003364b, 0x0003364b },
- - { 0x0000a33c, 0x000321ec, 0x000321ec, 0x00038a49, 0x00038a49, 0x00038a49 },
- - { 0x0000a340, 0x000321ec, 0x000321ec, 0x0003be48, 0x0003be48, 0x0003be48 },
- - { 0x0000a344, 0x000321ec, 0x000321ec, 0x0003ee4a, 0x0003ee4a, 0x0003ee4a },
- - { 0x0000a348, 0x000321ec, 0x000321ec, 0x00042e88, 0x00042e88, 0x00042e88 },
- - { 0x0000a34c, 0x000321ec, 0x000321ec, 0x00046e8a, 0x00046e8a, 0x00046e8a },
- - { 0x0000a350, 0x000321ec, 0x000321ec, 0x00049ec9, 0x00049ec9, 0x00049ec9 },
- - { 0x0000a354, 0x000321ec, 0x000321ec, 0x0004bf42, 0x0004bf42, 0x0004bf42 },
- - { 0x00007814, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff },
- - { 0x00007838, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff },
- - { 0x0000781c, 0x00392000, 0x00392000, 0x00392000, 0x00392000, 0x00392000 },
- - { 0x00007840, 0x00392000, 0x00392000, 0x00392000, 0x00392000, 0x00392000 },
- - { 0x00007820, 0x92592480, 0x92592480, 0x92592480, 0x92592480, 0x92592480 },
- - { 0x00007844, 0x92592480, 0x92592480, 0x92592480, 0x92592480, 0x92592480 },
- -};
- -
- -static const u32 ar9280PciePhy_clkreq_off_L1_9280[][2] = {
- - {0x00004040, 0x9248fd00 },
- - {0x00004040, 0x24924924 },
- - {0x00004040, 0xa8000019 },
- - {0x00004040, 0x13160820 },
- - {0x00004040, 0xe5980560 },
- - {0x00004040, 0xc01dcffc },
- - {0x00004040, 0x1aaabe41 },
- - {0x00004040, 0xbe105554 },
- - {0x00004040, 0x00043007 },
- - {0x00004044, 0x00000000 },
- -};
- -
- -static const u32 ar9280PciePhy_clkreq_always_on_L1_9280[][2] = {
- - {0x00004040, 0x9248fd00 },
- - {0x00004040, 0x24924924 },
- - {0x00004040, 0xa8000019 },
- - {0x00004040, 0x13160820 },
- - {0x00004040, 0xe5980560 },
- - {0x00004040, 0xc01dcffd },
- - {0x00004040, 0x1aaabe41 },
- - {0x00004040, 0xbe105554 },
- - {0x00004040, 0x00043007 },
- - {0x00004044, 0x00000000 },
- -};
- -
- -/* AR9285 Revsion 10*/
- -static const u_int32_t ar9285Modes_9285[][6] = {
- - { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
- - { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
- - { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
- - { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
- - { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
- - { 0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f },
- - { 0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440, 0x00006880 },
- - { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
- - { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
- - { 0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- - { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
- - { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- - { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
- - { 0x00009840, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e },
- - { 0x00009844, 0x0372161e, 0x0372161e, 0x03720020, 0x03720020, 0x037216a0 },
- - { 0x00009848, 0x00001066, 0x00001066, 0x0000004e, 0x0000004e, 0x00001059 },
- - { 0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2 },
- - { 0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
- - { 0x0000985c, 0x3139605e, 0x3139605e, 0x3136605e, 0x3136605e, 0x3139605e },
- - { 0x00009860, 0x00058d18, 0x00058d18, 0x00058d20, 0x00058d20, 0x00058d18 },
- - { 0x00009864, 0x0000fe00, 0x0000fe00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- - { 0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
- - { 0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881 },
- - { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
- - { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
- - { 0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d, 0xd00a800d },
- - { 0x00009944, 0xdfbc1010, 0xdfbc1010, 0xdfbc1020, 0xdfbc1020, 0xdfbc1010 },
- - { 0x00009960, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x00009964, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x000099b8, 0x00cf4d1c, 0x00cf4d1c, 0x00cf4d1c, 0x00cf4d1c, 0x00cf4d1c },
- - { 0x000099bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00, 0x00000c00 },
- - { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
- - { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
- - { 0x000099c8, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329 },
- - { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
- - { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
- - { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x00009a00, 0x00000000, 0x00000000, 0x00068084, 0x00068084, 0x00000000 },
- - { 0x00009a04, 0x00000000, 0x00000000, 0x00068088, 0x00068088, 0x00000000 },
- - { 0x00009a08, 0x00000000, 0x00000000, 0x0006808c, 0x0006808c, 0x00000000 },
- - { 0x00009a0c, 0x00000000, 0x00000000, 0x00068100, 0x00068100, 0x00000000 },
- - { 0x00009a10, 0x00000000, 0x00000000, 0x00068104, 0x00068104, 0x00000000 },
- - { 0x00009a14, 0x00000000, 0x00000000, 0x00068108, 0x00068108, 0x00000000 },
- - { 0x00009a18, 0x00000000, 0x00000000, 0x0006810c, 0x0006810c, 0x00000000 },
- - { 0x00009a1c, 0x00000000, 0x00000000, 0x00068110, 0x00068110, 0x00000000 },
- - { 0x00009a20, 0x00000000, 0x00000000, 0x00068114, 0x00068114, 0x00000000 },
- - { 0x00009a24, 0x00000000, 0x00000000, 0x00068180, 0x00068180, 0x00000000 },
- - { 0x00009a28, 0x00000000, 0x00000000, 0x00068184, 0x00068184, 0x00000000 },
- - { 0x00009a2c, 0x00000000, 0x00000000, 0x00068188, 0x00068188, 0x00000000 },
- - { 0x00009a30, 0x00000000, 0x00000000, 0x0006818c, 0x0006818c, 0x00000000 },
- - { 0x00009a34, 0x00000000, 0x00000000, 0x00068190, 0x00068190, 0x00000000 },
- - { 0x00009a38, 0x00000000, 0x00000000, 0x00068194, 0x00068194, 0x00000000 },
- - { 0x00009a3c, 0x00000000, 0x00000000, 0x000681a0, 0x000681a0, 0x00000000 },
- - { 0x00009a40, 0x00000000, 0x00000000, 0x0006820c, 0x0006820c, 0x00000000 },
- - { 0x00009a44, 0x00000000, 0x00000000, 0x000681a8, 0x000681a8, 0x00000000 },
- - { 0x00009a48, 0x00000000, 0x00000000, 0x00068284, 0x00068284, 0x00000000 },
- - { 0x00009a4c, 0x00000000, 0x00000000, 0x00068288, 0x00068288, 0x00000000 },
- - { 0x00009a50, 0x00000000, 0x00000000, 0x00068220, 0x00068220, 0x00000000 },
- - { 0x00009a54, 0x00000000, 0x00000000, 0x00068290, 0x00068290, 0x00000000 },
- - { 0x00009a58, 0x00000000, 0x00000000, 0x00068300, 0x00068300, 0x00000000 },
- - { 0x00009a5c, 0x00000000, 0x00000000, 0x00068304, 0x00068304, 0x00000000 },
- - { 0x00009a60, 0x00000000, 0x00000000, 0x00068308, 0x00068308, 0x00000000 },
- - { 0x00009a64, 0x00000000, 0x00000000, 0x0006830c, 0x0006830c, 0x00000000 },
- - { 0x00009a68, 0x00000000, 0x00000000, 0x00068380, 0x00068380, 0x00000000 },
- - { 0x00009a6c, 0x00000000, 0x00000000, 0x00068384, 0x00068384, 0x00000000 },
- - { 0x00009a70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000 },
- - { 0x00009a74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000 },
- - { 0x00009a78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000 },
- - { 0x00009a7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000 },
- - { 0x00009a80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000 },
- - { 0x00009a84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000 },
- - { 0x00009a88, 0x00000000, 0x00000000, 0x00068b04, 0x00068b04, 0x00000000 },
- - { 0x00009a8c, 0x00000000, 0x00000000, 0x00068b08, 0x00068b08, 0x00000000 },
- - { 0x00009a90, 0x00000000, 0x00000000, 0x00068b08, 0x00068b08, 0x00000000 },
- - { 0x00009a94, 0x00000000, 0x00000000, 0x00068b0c, 0x00068b0c, 0x00000000 },
- - { 0x00009a98, 0x00000000, 0x00000000, 0x00068b80, 0x00068b80, 0x00000000 },
- - { 0x00009a9c, 0x00000000, 0x00000000, 0x00068b84, 0x00068b84, 0x00000000 },
- - { 0x00009aa0, 0x00000000, 0x00000000, 0x00068b88, 0x00068b88, 0x00000000 },
- - { 0x00009aa4, 0x00000000, 0x00000000, 0x00068b8c, 0x00068b8c, 0x00000000 },
- - { 0x00009aa8, 0x00000000, 0x00000000, 0x000b8b90, 0x000b8b90, 0x00000000 },
- - { 0x00009aac, 0x00000000, 0x00000000, 0x000b8f80, 0x000b8f80, 0x00000000 },
- - { 0x00009ab0, 0x00000000, 0x00000000, 0x000b8f84, 0x000b8f84, 0x00000000 },
- - { 0x00009ab4, 0x00000000, 0x00000000, 0x000b8f88, 0x000b8f88, 0x00000000 },
- - { 0x00009ab8, 0x00000000, 0x00000000, 0x000b8f8c, 0x000b8f8c, 0x00000000 },
- - { 0x00009abc, 0x00000000, 0x00000000, 0x000b8f90, 0x000b8f90, 0x00000000 },
- - { 0x00009ac0, 0x00000000, 0x00000000, 0x000bb30c, 0x000bb30c, 0x00000000 },
- - { 0x00009ac4, 0x00000000, 0x00000000, 0x000bb310, 0x000bb310, 0x00000000 },
- - { 0x00009ac8, 0x00000000, 0x00000000, 0x000bb384, 0x000bb384, 0x00000000 },
- - { 0x00009acc, 0x00000000, 0x00000000, 0x000bb388, 0x000bb388, 0x00000000 },
- - { 0x00009ad0, 0x00000000, 0x00000000, 0x000bb324, 0x000bb324, 0x00000000 },
- - { 0x00009ad4, 0x00000000, 0x00000000, 0x000bb704, 0x000bb704, 0x00000000 },
- - { 0x00009ad8, 0x00000000, 0x00000000, 0x000f96a4, 0x000f96a4, 0x00000000 },
- - { 0x00009adc, 0x00000000, 0x00000000, 0x000f96a8, 0x000f96a8, 0x00000000 },
- - { 0x00009ae0, 0x00000000, 0x00000000, 0x000f9710, 0x000f9710, 0x00000000 },
- - { 0x00009ae4, 0x00000000, 0x00000000, 0x000f9714, 0x000f9714, 0x00000000 },
- - { 0x00009ae8, 0x00000000, 0x00000000, 0x000f9720, 0x000f9720, 0x00000000 },
- - { 0x00009aec, 0x00000000, 0x00000000, 0x000f9724, 0x000f9724, 0x00000000 },
- - { 0x00009af0, 0x00000000, 0x00000000, 0x000f9728, 0x000f9728, 0x00000000 },
- - { 0x00009af4, 0x00000000, 0x00000000, 0x000f972c, 0x000f972c, 0x00000000 },
- - { 0x00009af8, 0x00000000, 0x00000000, 0x000f97a0, 0x000f97a0, 0x00000000 },
- - { 0x00009afc, 0x00000000, 0x00000000, 0x000f97a4, 0x000f97a4, 0x00000000 },
- - { 0x00009b00, 0x00000000, 0x00000000, 0x000fb7a8, 0x000fb7a8, 0x00000000 },
- - { 0x00009b04, 0x00000000, 0x00000000, 0x000fb7b0, 0x000fb7b0, 0x00000000 },
- - { 0x00009b08, 0x00000000, 0x00000000, 0x000fb7b4, 0x000fb7b4, 0x00000000 },
- - { 0x00009b0c, 0x00000000, 0x00000000, 0x000fb7b8, 0x000fb7b8, 0x00000000 },
- - { 0x00009b10, 0x00000000, 0x00000000, 0x000fb7a5, 0x000fb7a5, 0x00000000 },
- - { 0x00009b14, 0x00000000, 0x00000000, 0x000fb7a9, 0x000fb7a9, 0x00000000 },
- - { 0x00009b18, 0x00000000, 0x00000000, 0x000fb7ad, 0x000fb7ad, 0x00000000 },
- - { 0x00009b1c, 0x00000000, 0x00000000, 0x000fb7b1, 0x000fb7b1, 0x00000000 },
- - { 0x00009b20, 0x00000000, 0x00000000, 0x000fb7b5, 0x000fb7b5, 0x00000000 },
- - { 0x00009b24, 0x00000000, 0x00000000, 0x000fb7b9, 0x000fb7b9, 0x00000000 },
- - { 0x00009b28, 0x00000000, 0x00000000, 0x000fb7c5, 0x000fb7c5, 0x00000000 },
- - { 0x00009b2c, 0x00000000, 0x00000000, 0x000fb7c9, 0x000fb7c9, 0x00000000 },
- - { 0x00009b30, 0x00000000, 0x00000000, 0x000fb7d1, 0x000fb7d1, 0x00000000 },
- - { 0x00009b34, 0x00000000, 0x00000000, 0x000fb7d5, 0x000fb7d5, 0x00000000 },
- - { 0x00009b38, 0x00000000, 0x00000000, 0x000fb7d9, 0x000fb7d9, 0x00000000 },
- - { 0x00009b3c, 0x00000000, 0x00000000, 0x000fb7c6, 0x000fb7c6, 0x00000000 },
- - { 0x00009b40, 0x00000000, 0x00000000, 0x000fb7ca, 0x000fb7ca, 0x00000000 },
- - { 0x00009b44, 0x00000000, 0x00000000, 0x000fb7ce, 0x000fb7ce, 0x00000000 },
- - { 0x00009b48, 0x00000000, 0x00000000, 0x000fb7d2, 0x000fb7d2, 0x00000000 },
- - { 0x00009b4c, 0x00000000, 0x00000000, 0x000fb7d6, 0x000fb7d6, 0x00000000 },
- - { 0x00009b50, 0x00000000, 0x00000000, 0x000fb7c3, 0x000fb7c3, 0x00000000 },
- - { 0x00009b54, 0x00000000, 0x00000000, 0x000fb7c7, 0x000fb7c7, 0x00000000 },
- - { 0x00009b58, 0x00000000, 0x00000000, 0x000fb7cb, 0x000fb7cb, 0x00000000 },
- - { 0x00009b5c, 0x00000000, 0x00000000, 0x000fb7cf, 0x000fb7cf, 0x00000000 },
- - { 0x00009b60, 0x00000000, 0x00000000, 0x000fb7d7, 0x000fb7d7, 0x00000000 },
- - { 0x00009b64, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009b68, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009b6c, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009b70, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009b74, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009b78, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009b7c, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009b80, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009b84, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009b88, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009b8c, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009b90, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009b94, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009b98, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009b9c, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009ba0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009ba4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009ba8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bac, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bb0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bb4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bb8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bbc, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bc0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bc4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bc8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bcc, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bd0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bd4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bd8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bdc, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009be0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009be4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009be8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bec, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bf0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bf4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bf8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x00009bfc, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
- - { 0x0000aa00, 0x00000000, 0x00000000, 0x0006801c, 0x0006801c, 0x00000000 },
- - { 0x0000aa04, 0x00000000, 0x00000000, 0x00068080, 0x00068080, 0x00000000 },
- - { 0x0000aa08, 0x00000000, 0x00000000, 0x00068084, 0x00068084, 0x00000000 },
- - { 0x0000aa0c, 0x00000000, 0x00000000, 0x00068088, 0x00068088, 0x00000000 },
- - { 0x0000aa10, 0x00000000, 0x00000000, 0x0006808c, 0x0006808c, 0x00000000 },
- - { 0x0000aa14, 0x00000000, 0x00000000, 0x00068100, 0x00068100, 0x00000000 },
- - { 0x0000aa18, 0x00000000, 0x00000000, 0x00068104, 0x00068104, 0x00000000 },
- - { 0x0000aa1c, 0x00000000, 0x00000000, 0x00068108, 0x00068108, 0x00000000 },
- - { 0x0000aa20, 0x00000000, 0x00000000, 0x0006810c, 0x0006810c, 0x00000000 },
- - { 0x0000aa24, 0x00000000, 0x00000000, 0x00068110, 0x00068110, 0x00000000 },
- - { 0x0000aa28, 0x00000000, 0x00000000, 0x00068110, 0x00068110, 0x00000000 },
- - { 0x0000aa2c, 0x00000000, 0x00000000, 0x00068180, 0x00068180, 0x00000000 },
- - { 0x0000aa30, 0x00000000, 0x00000000, 0x00068184, 0x00068184, 0x00000000 },
- - { 0x0000aa34, 0x00000000, 0x00000000, 0x00068188, 0x00068188, 0x00000000 },
- - { 0x0000aa38, 0x00000000, 0x00000000, 0x0006818c, 0x0006818c, 0x00000000 },
- - { 0x0000aa3c, 0x00000000, 0x00000000, 0x00068190, 0x00068190, 0x00000000 },
- - { 0x0000aa40, 0x00000000, 0x00000000, 0x00068194, 0x00068194, 0x00000000 },
- - { 0x0000aa44, 0x00000000, 0x00000000, 0x000681a0, 0x000681a0, 0x00000000 },
- - { 0x0000aa48, 0x00000000, 0x00000000, 0x0006820c, 0x0006820c, 0x00000000 },
- - { 0x0000aa4c, 0x00000000, 0x00000000, 0x000681a8, 0x000681a8, 0x00000000 },
- - { 0x0000aa50, 0x00000000, 0x00000000, 0x000681ac, 0x000681ac, 0x00000000 },
- - { 0x0000aa54, 0x00000000, 0x00000000, 0x0006821c, 0x0006821c, 0x00000000 },
- - { 0x0000aa58, 0x00000000, 0x00000000, 0x00068224, 0x00068224, 0x00000000 },
- - { 0x0000aa5c, 0x00000000, 0x00000000, 0x00068290, 0x00068290, 0x00000000 },
- - { 0x0000aa60, 0x00000000, 0x00000000, 0x00068300, 0x00068300, 0x00000000 },
- - { 0x0000aa64, 0x00000000, 0x00000000, 0x00068308, 0x00068308, 0x00000000 },
- - { 0x0000aa68, 0x00000000, 0x00000000, 0x0006830c, 0x0006830c, 0x00000000 },
- - { 0x0000aa6c, 0x00000000, 0x00000000, 0x00068310, 0x00068310, 0x00000000 },
- - { 0x0000aa70, 0x00000000, 0x00000000, 0x00068788, 0x00068788, 0x00000000 },
- - { 0x0000aa74, 0x00000000, 0x00000000, 0x0006878c, 0x0006878c, 0x00000000 },
- - { 0x0000aa78, 0x00000000, 0x00000000, 0x00068790, 0x00068790, 0x00000000 },
- - { 0x0000aa7c, 0x00000000, 0x00000000, 0x00068794, 0x00068794, 0x00000000 },
- - { 0x0000aa80, 0x00000000, 0x00000000, 0x00068798, 0x00068798, 0x00000000 },
- - { 0x0000aa84, 0x00000000, 0x00000000, 0x0006879c, 0x0006879c, 0x00000000 },
- - { 0x0000aa88, 0x00000000, 0x00000000, 0x00068b89, 0x00068b89, 0x00000000 },
- - { 0x0000aa8c, 0x00000000, 0x00000000, 0x00068b8d, 0x00068b8d, 0x00000000 },
- - { 0x0000aa90, 0x00000000, 0x00000000, 0x00068b91, 0x00068b91, 0x00000000 },
- - { 0x0000aa94, 0x00000000, 0x00000000, 0x00068b95, 0x00068b95, 0x00000000 },
- - { 0x0000aa98, 0x00000000, 0x00000000, 0x00068b99, 0x00068b99, 0x00000000 },
- - { 0x0000aa9c, 0x00000000, 0x00000000, 0x00068ba5, 0x00068ba5, 0x00000000 },
- - { 0x0000aaa0, 0x00000000, 0x00000000, 0x00068ba9, 0x00068ba9, 0x00000000 },
- - { 0x0000aaa4, 0x00000000, 0x00000000, 0x00068bad, 0x00068bad, 0x00000000 },
- - { 0x0000aaa8, 0x00000000, 0x00000000, 0x000b8b0c, 0x000b8b0c, 0x00000000 },
- - { 0x0000aaac, 0x00000000, 0x00000000, 0x000b8f10, 0x000b8f10, 0x00000000 },
- - { 0x0000aab0, 0x00000000, 0x00000000, 0x000b8f14, 0x000b8f14, 0x00000000 },
- - { 0x0000aab4, 0x00000000, 0x00000000, 0x000b8f84, 0x000b8f84, 0x00000000 },
- - { 0x0000aab8, 0x00000000, 0x00000000, 0x000b8f84, 0x000b8f84, 0x00000000 },
- - { 0x0000aabc, 0x00000000, 0x00000000, 0x000b8f88, 0x000b8f88, 0x00000000 },
- - { 0x0000aac0, 0x00000000, 0x00000000, 0x000bb380, 0x000bb380, 0x00000000 },
- - { 0x0000aac4, 0x00000000, 0x00000000, 0x000bb384, 0x000bb384, 0x00000000 },
- - { 0x0000aac8, 0x00000000, 0x00000000, 0x000bb388, 0x000bb388, 0x00000000 },
- - { 0x0000aacc, 0x00000000, 0x00000000, 0x000bb38c, 0x000bb38c, 0x00000000 },
- - { 0x0000aad0, 0x00000000, 0x00000000, 0x000bb394, 0x000bb394, 0x00000000 },
- - { 0x0000aad4, 0x00000000, 0x00000000, 0x000bb798, 0x000bb798, 0x00000000 },
- - { 0x0000aad8, 0x00000000, 0x00000000, 0x000f970c, 0x000f970c, 0x00000000 },
- - { 0x0000aadc, 0x00000000, 0x00000000, 0x000f9710, 0x000f9710, 0x00000000 },
- - { 0x0000aae0, 0x00000000, 0x00000000, 0x000f9714, 0x000f9714, 0x00000000 },
- - { 0x0000aae4, 0x00000000, 0x00000000, 0x000f9718, 0x000f9718, 0x00000000 },
- - { 0x0000aae8, 0x00000000, 0x00000000, 0x000f9705, 0x000f9705, 0x00000000 },
- - { 0x0000aaec, 0x00000000, 0x00000000, 0x000f9709, 0x000f9709, 0x00000000 },
- - { 0x0000aaf0, 0x00000000, 0x00000000, 0x000f970d, 0x000f970d, 0x00000000 },
- - { 0x0000aaf4, 0x00000000, 0x00000000, 0x000f9711, 0x000f9711, 0x00000000 },
- - { 0x0000aaf8, 0x00000000, 0x00000000, 0x000f9715, 0x000f9715, 0x00000000 },
- - { 0x0000aafc, 0x00000000, 0x00000000, 0x000f9719, 0x000f9719, 0x00000000 },
- - { 0x0000ab00, 0x00000000, 0x00000000, 0x000fb7a4, 0x000fb7a4, 0x00000000 },
- - { 0x0000ab04, 0x00000000, 0x00000000, 0x000fb7a8, 0x000fb7a8, 0x00000000 },
- - { 0x0000ab08, 0x00000000, 0x00000000, 0x000fb7ac, 0x000fb7ac, 0x00000000 },
- - { 0x0000ab0c, 0x00000000, 0x00000000, 0x000fb7ac, 0x000fb7ac, 0x00000000 },
- - { 0x0000ab10, 0x00000000, 0x00000000, 0x000fb7b0, 0x000fb7b0, 0x00000000 },
- - { 0x0000ab14, 0x00000000, 0x00000000, 0x000fb7b8, 0x000fb7b8, 0x00000000 },
- - { 0x0000ab18, 0x00000000, 0x00000000, 0x000fb7bc, 0x000fb7bc, 0x00000000 },
- - { 0x0000ab1c, 0x00000000, 0x00000000, 0x000fb7a1, 0x000fb7a1, 0x00000000 },
- - { 0x0000ab20, 0x00000000, 0x00000000, 0x000fb7a5, 0x000fb7a5, 0x00000000 },
- - { 0x0000ab24, 0x00000000, 0x00000000, 0x000fb7a9, 0x000fb7a9, 0x00000000 },
- - { 0x0000ab28, 0x00000000, 0x00000000, 0x000fb7b1, 0x000fb7b1, 0x00000000 },
- - { 0x0000ab2c, 0x00000000, 0x00000000, 0x000fb7b5, 0x000fb7b5, 0x00000000 },
- - { 0x0000ab30, 0x00000000, 0x00000000, 0x000fb7bd, 0x000fb7bd, 0x00000000 },
- - { 0x0000ab34, 0x00000000, 0x00000000, 0x000fb7c9, 0x000fb7c9, 0x00000000 },
- - { 0x0000ab38, 0x00000000, 0x00000000, 0x000fb7cd, 0x000fb7cd, 0x00000000 },
- - { 0x0000ab3c, 0x00000000, 0x00000000, 0x000fb7d1, 0x000fb7d1, 0x00000000 },
- - { 0x0000ab40, 0x00000000, 0x00000000, 0x000fb7d9, 0x000fb7d9, 0x00000000 },
- - { 0x0000ab44, 0x00000000, 0x00000000, 0x000fb7c2, 0x000fb7c2, 0x00000000 },
- - { 0x0000ab48, 0x00000000, 0x00000000, 0x000fb7c6, 0x000fb7c6, 0x00000000 },
- - { 0x0000ab4c, 0x00000000, 0x00000000, 0x000fb7ca, 0x000fb7ca, 0x00000000 },
- - { 0x0000ab50, 0x00000000, 0x00000000, 0x000fb7ce, 0x000fb7ce, 0x00000000 },
- - { 0x0000ab54, 0x00000000, 0x00000000, 0x000fb7d2, 0x000fb7d2, 0x00000000 },
- - { 0x0000ab58, 0x00000000, 0x00000000, 0x000fb7d6, 0x000fb7d6, 0x00000000 },
- - { 0x0000ab5c, 0x00000000, 0x00000000, 0x000fb7c3, 0x000fb7c3, 0x00000000 },
- - { 0x0000ab60, 0x00000000, 0x00000000, 0x000fb7cb, 0x000fb7cb, 0x00000000 },
- - { 0x0000ab64, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000ab68, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000ab6c, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000ab70, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000ab74, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000ab78, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000ab7c, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000ab80, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000ab84, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000ab88, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000ab8c, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000ab90, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000ab94, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000ab98, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000ab9c, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000aba0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000aba4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000aba8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abac, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abb0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abb4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abb8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abbc, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abc0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abc4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abc8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abcc, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abd0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abd4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abd8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abdc, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abe0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abe4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abe8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abec, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abf0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abf4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abf8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000abfc, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
- - { 0x0000a204, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004 },
- - { 0x0000a20c, 0x00000014, 0x00000014, 0x00000000, 0x00000000, 0x0001f000 },
- - { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
- - { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- - { 0x0000a250, 0x001ff000, 0x001ff000, 0x001ca000, 0x001ca000, 0x001da000 },
- - { 0x0000a274, 0x0a81c652, 0x0a81c652, 0x0a820652, 0x0a820652, 0x0a82a652 },
- - { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a304, 0x00000000, 0x00000000, 0x00007201, 0x00007201, 0x00000000 },
- - { 0x0000a308, 0x00000000, 0x00000000, 0x00010408, 0x00010408, 0x00000000 },
- - { 0x0000a30c, 0x00000000, 0x00000000, 0x0001860a, 0x0001860a, 0x00000000 },
- - { 0x0000a310, 0x00000000, 0x00000000, 0x00020818, 0x00020818, 0x00000000 },
- - { 0x0000a314, 0x00000000, 0x00000000, 0x00024858, 0x00024858, 0x00000000 },
- - { 0x0000a318, 0x00000000, 0x00000000, 0x00026859, 0x00026859, 0x00000000 },
- - { 0x0000a31c, 0x00000000, 0x00000000, 0x0002985b, 0x0002985b, 0x00000000 },
- - { 0x0000a320, 0x00000000, 0x00000000, 0x0002c89a, 0x0002c89a, 0x00000000 },
- - { 0x0000a324, 0x00000000, 0x00000000, 0x0002e89b, 0x0002e89b, 0x00000000 },
- - { 0x0000a328, 0x00000000, 0x00000000, 0x0003089c, 0x0003089c, 0x00000000 },
- - { 0x0000a32c, 0x00000000, 0x00000000, 0x0003289d, 0x0003289d, 0x00000000 },
- - { 0x0000a330, 0x00000000, 0x00000000, 0x0003489e, 0x0003489e, 0x00000000 },
- - { 0x0000a334, 0x00000000, 0x00000000, 0x000388de, 0x000388de, 0x00000000 },
- - { 0x0000a338, 0x00000000, 0x00000000, 0x0003b91e, 0x0003b91e, 0x00000000 },
- - { 0x0000a33c, 0x00000000, 0x00000000, 0x0003d95e, 0x0003d95e, 0x00000000 },
- - { 0x0000a340, 0x00000000, 0x00000000, 0x000419df, 0x000419df, 0x00000000 },
- - { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
- -};
- -
- -static const u_int32_t ar9285Common_9285[][2] = {
- - { 0x0000000c, 0x00000000 },
- - { 0x00000030, 0x00020045 },
- - { 0x00000034, 0x00000005 },
- - { 0x00000040, 0x00000000 },
- - { 0x00000044, 0x00000008 },
- - { 0x00000048, 0x00000008 },
- - { 0x0000004c, 0x00000010 },
- - { 0x00000050, 0x00000000 },
- - { 0x00000054, 0x0000001f },
- - { 0x00000800, 0x00000000 },
- - { 0x00000804, 0x00000000 },
- - { 0x00000808, 0x00000000 },
- - { 0x0000080c, 0x00000000 },
- - { 0x00000810, 0x00000000 },
- - { 0x00000814, 0x00000000 },
- - { 0x00000818, 0x00000000 },
- - { 0x0000081c, 0x00000000 },
- - { 0x00000820, 0x00000000 },
- - { 0x00000824, 0x00000000 },
- - { 0x00001040, 0x002ffc0f },
- - { 0x00001044, 0x002ffc0f },
- - { 0x00001048, 0x002ffc0f },
- - { 0x0000104c, 0x002ffc0f },
- - { 0x00001050, 0x002ffc0f },
- - { 0x00001054, 0x002ffc0f },
- - { 0x00001058, 0x002ffc0f },
- - { 0x0000105c, 0x002ffc0f },
- - { 0x00001060, 0x002ffc0f },
- - { 0x00001064, 0x002ffc0f },
- - { 0x00001230, 0x00000000 },
- - { 0x00001270, 0x00000000 },
- - { 0x00001038, 0x00000000 },
- - { 0x00001078, 0x00000000 },
- - { 0x000010b8, 0x00000000 },
- - { 0x000010f8, 0x00000000 },
- - { 0x00001138, 0x00000000 },
- - { 0x00001178, 0x00000000 },
- - { 0x000011b8, 0x00000000 },
- - { 0x000011f8, 0x00000000 },
- - { 0x00001238, 0x00000000 },
- - { 0x00001278, 0x00000000 },
- - { 0x000012b8, 0x00000000 },
- - { 0x000012f8, 0x00000000 },
- - { 0x00001338, 0x00000000 },
- - { 0x00001378, 0x00000000 },
- - { 0x000013b8, 0x00000000 },
- - { 0x000013f8, 0x00000000 },
- - { 0x00001438, 0x00000000 },
- - { 0x00001478, 0x00000000 },
- - { 0x000014b8, 0x00000000 },
- - { 0x000014f8, 0x00000000 },
- - { 0x00001538, 0x00000000 },
- - { 0x00001578, 0x00000000 },
- - { 0x000015b8, 0x00000000 },
- - { 0x000015f8, 0x00000000 },
- - { 0x00001638, 0x00000000 },
- - { 0x00001678, 0x00000000 },
- - { 0x000016b8, 0x00000000 },
- - { 0x000016f8, 0x00000000 },
- - { 0x00001738, 0x00000000 },
- - { 0x00001778, 0x00000000 },
- - { 0x000017b8, 0x00000000 },
- - { 0x000017f8, 0x00000000 },
- - { 0x0000103c, 0x00000000 },
- - { 0x0000107c, 0x00000000 },
- - { 0x000010bc, 0x00000000 },
- - { 0x000010fc, 0x00000000 },
- - { 0x0000113c, 0x00000000 },
- - { 0x0000117c, 0x00000000 },
- - { 0x000011bc, 0x00000000 },
- - { 0x000011fc, 0x00000000 },
- - { 0x0000123c, 0x00000000 },
- - { 0x0000127c, 0x00000000 },
- - { 0x000012bc, 0x00000000 },
- - { 0x000012fc, 0x00000000 },
- - { 0x0000133c, 0x00000000 },
- - { 0x0000137c, 0x00000000 },
- - { 0x000013bc, 0x00000000 },
- - { 0x000013fc, 0x00000000 },
- - { 0x0000143c, 0x00000000 },
- - { 0x0000147c, 0x00000000 },
- - { 0x00004030, 0x00000002 },
- - { 0x0000403c, 0x00000002 },
- - { 0x00004024, 0x0000001f },
- - { 0x00004060, 0x00000000 },
- - { 0x00004064, 0x00000000 },
- - { 0x00007010, 0x00000031 },
- - { 0x00007034, 0x00000002 },
- - { 0x00007038, 0x000004c2 },
- - { 0x00008004, 0x00000000 },
- - { 0x00008008, 0x00000000 },
- - { 0x0000800c, 0x00000000 },
- - { 0x00008018, 0x00000700 },
- - { 0x00008020, 0x00000000 },
- - { 0x00008038, 0x00000000 },
- - { 0x0000803c, 0x00000000 },
- - { 0x00008048, 0x00000000 },
- - { 0x00008054, 0x00000000 },
- - { 0x00008058, 0x00000000 },
- - { 0x0000805c, 0x000fc78f },
- - { 0x00008060, 0x0000000f },
- - { 0x00008064, 0x00000000 },
- - { 0x00008070, 0x00000000 },
- - { 0x000080c0, 0x2a80001a },
- - { 0x000080c4, 0x05dc01e0 },
- - { 0x000080c8, 0x1f402710 },
- - { 0x000080cc, 0x01f40000 },
- - { 0x000080d0, 0x00001e00 },
- - { 0x000080d4, 0x00000000 },
- - { 0x000080d8, 0x00400000 },
- - { 0x000080e0, 0xffffffff },
- - { 0x000080e4, 0x0000ffff },
- - { 0x000080e8, 0x003f3f3f },
- - { 0x000080ec, 0x00000000 },
- - { 0x000080f0, 0x00000000 },
- - { 0x000080f4, 0x00000000 },
- - { 0x000080f8, 0x00000000 },
- - { 0x000080fc, 0x00020000 },
- - { 0x00008100, 0x00020000 },
- - { 0x00008104, 0x00000001 },
- - { 0x00008108, 0x00000052 },
- - { 0x0000810c, 0x00000000 },
- - { 0x00008110, 0x00000168 },
- - { 0x00008118, 0x000100aa },
- - { 0x0000811c, 0x00003210 },
- - { 0x00008120, 0x08f04800 },
- - { 0x00008124, 0x00000000 },
- - { 0x00008128, 0x00000000 },
- - { 0x0000812c, 0x00000000 },
- - { 0x00008130, 0x00000000 },
- - { 0x00008134, 0x00000000 },
- - { 0x00008138, 0x00000000 },
- - { 0x0000813c, 0x00000000 },
- - { 0x00008144, 0x00000000 },
- - { 0x00008168, 0x00000000 },
- - { 0x0000816c, 0x00000000 },
- - { 0x00008170, 0x32143320 },
- - { 0x00008174, 0xfaa4fa50 },
- - { 0x00008178, 0x00000100 },
- - { 0x0000817c, 0x00000000 },
- - { 0x000081c0, 0x00000000 },
- - { 0x000081d0, 0x00003210 },
- - { 0x000081ec, 0x00000000 },
- - { 0x000081f0, 0x00000000 },
- - { 0x000081f4, 0x00000000 },
- - { 0x000081f8, 0x00000000 },
- - { 0x000081fc, 0x00000000 },
- - { 0x00008200, 0x00000000 },
- - { 0x00008204, 0x00000000 },
- - { 0x00008208, 0x00000000 },
- - { 0x0000820c, 0x00000000 },
- - { 0x00008210, 0x00000000 },
- - { 0x00008214, 0x00000000 },
- - { 0x00008218, 0x00000000 },
- - { 0x0000821c, 0x00000000 },
- - { 0x00008220, 0x00000000 },
- - { 0x00008224, 0x00000000 },
- - { 0x00008228, 0x00000000 },
- - { 0x0000822c, 0x00000000 },
- - { 0x00008230, 0x00000000 },
- - { 0x00008234, 0x00000000 },
- - { 0x00008238, 0x00000000 },
- - { 0x0000823c, 0x00000000 },
- - { 0x00008240, 0x00100000 },
- - { 0x00008244, 0x0010f400 },
- - { 0x00008248, 0x00000100 },
- - { 0x0000824c, 0x0001e800 },
- - { 0x00008250, 0x00000000 },
- - { 0x00008254, 0x00000000 },
- - { 0x00008258, 0x00000000 },
- - { 0x0000825c, 0x400000ff },
- - { 0x00008260, 0x00080922 },
- - { 0x00008264, 0xa8a00010 },
- - { 0x00008270, 0x00000000 },
- - { 0x00008274, 0x40000000 },
- - { 0x00008278, 0x003e4180 },
- - { 0x0000827c, 0x00000000 },
- - { 0x00008284, 0x0000002c },
- - { 0x00008288, 0x0000002c },
- - { 0x0000828c, 0x00000000 },
- - { 0x00008294, 0x00000000 },
- - { 0x00008298, 0x00000000 },
- - { 0x0000829c, 0x00000000 },
- - { 0x00008300, 0x00000040 },
- - { 0x00008314, 0x00000000 },
- - { 0x00008328, 0x00000000 },
- - { 0x0000832c, 0x00000001 },
- - { 0x00008330, 0x00000302 },
- - { 0x00008334, 0x00000e00 },
- - { 0x00008338, 0x00000000 },
- - { 0x0000833c, 0x00000000 },
- - { 0x00008340, 0x00010380 },
- - { 0x00008344, 0x00481043 },
- - { 0x00009808, 0x00000000 },
- - { 0x0000980c, 0xafe68e30 },
- - { 0x00009810, 0xfd14e000 },
- - { 0x00009814, 0x9c0a9f6b },
- - { 0x0000981c, 0x00000000 },
- - { 0x0000982c, 0x0000a000 },
- - { 0x00009830, 0x00000000 },
- - { 0x0000983c, 0x00200400 },
- - { 0x0000984c, 0x0040233c },
- - { 0x00009854, 0x00000044 },
- - { 0x00009900, 0x00000000 },
- - { 0x00009904, 0x00000000 },
- - { 0x00009908, 0x00000000 },
- - { 0x0000990c, 0x00000000 },
- - { 0x00009910, 0x01002310 },
- - { 0x0000991c, 0x10000fff },
- - { 0x00009920, 0x04900000 },
- - { 0x00009928, 0x00000001 },
- - { 0x0000992c, 0x00000004 },
- - { 0x00009934, 0x1e1f2022 },
- - { 0x00009938, 0x0a0b0c0d },
- - { 0x0000993c, 0x00000000 },
- - { 0x00009940, 0x14750604 },
- - { 0x00009948, 0x9280c00a },
- - { 0x0000994c, 0x00020028 },
- - { 0x00009954, 0x5f3ca3de },
- - { 0x00009958, 0x2108ecff },
- - { 0x00009968, 0x000003ce },
- - { 0x00009970, 0x1927b515 },
- - { 0x00009974, 0x00000000 },
- - { 0x00009978, 0x00000001 },
- - { 0x0000997c, 0x00000000 },
- - { 0x00009980, 0x00000000 },
- - { 0x00009984, 0x00000000 },
- - { 0x00009988, 0x00000000 },
- - { 0x0000998c, 0x00000000 },
- - { 0x00009990, 0x00000000 },
- - { 0x00009994, 0x00000000 },
- - { 0x00009998, 0x00000000 },
- - { 0x0000999c, 0x00000000 },
- - { 0x000099a0, 0x00000000 },
- - { 0x000099a4, 0x00000001 },
- - { 0x000099a8, 0x201fff00 },
- - { 0x000099ac, 0x2def0a00 },
- - { 0x000099b0, 0x03051000 },
- - { 0x000099b4, 0x00000820 },
- - { 0x000099dc, 0x00000000 },
- - { 0x000099e0, 0x00000000 },
- - { 0x000099e4, 0xaaaaaaaa },
- - { 0x000099e8, 0x3c466478 },
- - { 0x000099ec, 0x0cc80caa },
- - { 0x000099f0, 0x00000000 },
- - { 0x0000a208, 0x803e6788 },
- - { 0x0000a210, 0x4080a333 },
- - { 0x0000a214, 0x00206c10 },
- - { 0x0000a218, 0x009c4060 },
- - { 0x0000a220, 0x01834061 },
- - { 0x0000a224, 0x00000400 },
- - { 0x0000a228, 0x000003b5 },
- - { 0x0000a22c, 0x00000000 },
- - { 0x0000a234, 0x20202020 },
- - { 0x0000a238, 0x20202020 },
- - { 0x0000a244, 0x00000000 },
- - { 0x0000a248, 0xfffffffc },
- - { 0x0000a24c, 0x00000000 },
- - { 0x0000a254, 0x00000000 },
- - { 0x0000a258, 0x0ccb5380 },
- - { 0x0000a25c, 0x15151501 },
- - { 0x0000a260, 0xdfa90f01 },
- - { 0x0000a268, 0x00000000 },
- - { 0x0000a26c, 0x0ebae9e6 },
- - { 0x0000d270, 0x0d820820 },
- - { 0x0000a278, 0x39ce739c },
- - { 0x0000a27c, 0x050e039c },
- - { 0x0000d35c, 0x07ffffef },
- - { 0x0000d360, 0x0fffffe7 },
- - { 0x0000d364, 0x17ffffe5 },
- - { 0x0000d368, 0x1fffffe4 },
- - { 0x0000d36c, 0x37ffffe3 },
- - { 0x0000d370, 0x3fffffe3 },
- - { 0x0000d374, 0x57ffffe3 },
- - { 0x0000d378, 0x5fffffe2 },
- - { 0x0000d37c, 0x7fffffe2 },
- - { 0x0000d380, 0x7f3c7bba },
- - { 0x0000d384, 0xf3307ff0 },
- - { 0x0000a388, 0x0c000000 },
- - { 0x0000a38c, 0x20202020 },
- - { 0x0000a390, 0x20202020 },
- - { 0x0000a394, 0x39ce739c },
- - { 0x0000a398, 0x0000039c },
- - { 0x0000a39c, 0x00000001 },
- - { 0x0000a3a0, 0x00000000 },
- - { 0x0000a3a4, 0x00000000 },
- - { 0x0000a3a8, 0x00000000 },
- - { 0x0000a3ac, 0x00000000 },
- - { 0x0000a3b0, 0x00000000 },
- - { 0x0000a3b4, 0x00000000 },
- - { 0x0000a3b8, 0x00000000 },
- - { 0x0000a3bc, 0x00000000 },
- - { 0x0000a3c0, 0x00000000 },
- - { 0x0000a3c4, 0x00000000 },
- - { 0x0000a3cc, 0x20202020 },
- - { 0x0000a3d0, 0x20202020 },
- - { 0x0000a3d4, 0x20202020 },
- - { 0x0000a3dc, 0x39ce739c },
- - { 0x0000a3e0, 0x0000039c },
- - { 0x0000a3e4, 0x00000000 },
- - { 0x0000a3e8, 0x18c43433 },
- - { 0x0000a3ec, 0x00f70081 },
- - { 0x00007800, 0x00140000 },
- - { 0x00007804, 0x0e4548d8 },
- - { 0x00007808, 0x54214514 },
- - { 0x0000780c, 0x02025820 },
- - { 0x00007810, 0x71c0d388 },
- - { 0x00007814, 0x924934a8 },
- - { 0x0000781c, 0x00000000 },
- - { 0x00007820, 0x00000c04 },
- - { 0x00007824, 0x00d86fff },
- - { 0x00007828, 0x26d2491b },
- - { 0x0000782c, 0x6e36d97b },
- - { 0x00007830, 0xedb6d96c },
- - { 0x00007834, 0x71400086 },
- - { 0x00007838, 0xfac68800 },
- - { 0x0000783c, 0x0001fffe },
- - { 0x00007840, 0xffeb1a20 },
- - { 0x00007844, 0x000c0db6 },
- - { 0x00007848, 0x6db61b6f },
- - { 0x0000784c, 0x6d9b66db },
- - { 0x00007850, 0x6d8c6dba },
- - { 0x00007854, 0x00040000 },
- - { 0x00007858, 0xdb003012 },
- - { 0x0000785c, 0x04924914 },
- - { 0x00007860, 0x21084210 },
- - { 0x00007864, 0xf7d7ffde },
- - { 0x00007868, 0xc2034080 },
- - { 0x0000786c, 0x48609eb4 },
- - { 0x00007870, 0x10142c00 },
- -};
- -
- -static const u_int32_t ar9285PciePhy_clkreq_always_on_L1_9285[][2] = {
- - {0x00004040, 0x9248fd00 },
- - {0x00004040, 0x24924924 },
- - {0x00004040, 0xa8000019 },
- - {0x00004040, 0x13160820 },
- - {0x00004040, 0xe5980560 },
- - {0x00004040, 0xc01dcffd },
- - {0x00004040, 0x1aaabe41 },
- - {0x00004040, 0xbe105554 },
- - {0x00004040, 0x00043007 },
- - {0x00004044, 0x00000000 },
- -};
- -
- -static const u_int32_t ar9285PciePhy_clkreq_off_L1_9285[][2] = {
- - {0x00004040, 0x9248fd00 },
- - {0x00004040, 0x24924924 },
- - {0x00004040, 0xa8000019 },
- - {0x00004040, 0x13160820 },
- - {0x00004040, 0xe5980560 },
- - {0x00004040, 0xc01dcffc },
- - {0x00004040, 0x1aaabe41 },
- - {0x00004040, 0xbe105554 },
- - {0x00004040, 0x00043007 },
- - {0x00004044, 0x00000000 },
- -};
- -
- -/* AR9285 v1_2 PCI Register Writes. Created: 04/13/09 */
- -static const u_int32_t ar9285Modes_9285_1_2[][6] = {
- - /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- - { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
- - { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
- - { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
- - { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
- - { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
- - { 0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f },
- - { 0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440, 0x00006880 },
- - { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
- - { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
- - { 0x00009824, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e },
- - { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
- - { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- - { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
- - { 0x00009840, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e },
- - { 0x00009844, 0x0372161e, 0x0372161e, 0x03721620, 0x03721620, 0x037216a0 },
- - { 0x00009848, 0x00001066, 0x00001066, 0x00001053, 0x00001053, 0x00001059 },
- - { 0x0000a848, 0x00001066, 0x00001066, 0x00001053, 0x00001053, 0x00001059 },
- - { 0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2 },
- - { 0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
- - { 0x0000985c, 0x3139605e, 0x3139605e, 0x3137605e, 0x3137605e, 0x3139605e },
- - { 0x00009860, 0x00058d18, 0x00058d18, 0x00058d20, 0x00058d20, 0x00058d18 },
- - { 0x00009864, 0x0000fe00, 0x0000fe00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- - { 0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
- - { 0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881 },
- - { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
- - { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
- - { 0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d, 0xd00a800d },
- - { 0x00009944, 0xffbc1010, 0xffbc1010, 0xffbc1020, 0xffbc1020, 0xffbc1010 },
- - { 0x00009960, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x00009964, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x000099b8, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c },
- - { 0x000099bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00, 0x00000c00 },
- - { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
- - { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
- - { 0x000099c8, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f },
- - { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
- - { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
- - { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x00009a00, 0x00000000, 0x00000000, 0x00058084, 0x00058084, 0x00000000 },
- - { 0x00009a04, 0x00000000, 0x00000000, 0x00058088, 0x00058088, 0x00000000 },
- - { 0x00009a08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c, 0x00000000 },
- - { 0x00009a0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100, 0x00000000 },
- - { 0x00009a10, 0x00000000, 0x00000000, 0x00058104, 0x00058104, 0x00000000 },
- - { 0x00009a14, 0x00000000, 0x00000000, 0x00058108, 0x00058108, 0x00000000 },
- - { 0x00009a18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c, 0x00000000 },
- - { 0x00009a1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110, 0x00000000 },
- - { 0x00009a20, 0x00000000, 0x00000000, 0x00058114, 0x00058114, 0x00000000 },
- - { 0x00009a24, 0x00000000, 0x00000000, 0x00058180, 0x00058180, 0x00000000 },
- - { 0x00009a28, 0x00000000, 0x00000000, 0x00058184, 0x00058184, 0x00000000 },
- - { 0x00009a2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188, 0x00000000 },
- - { 0x00009a30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c, 0x00000000 },
- - { 0x00009a34, 0x00000000, 0x00000000, 0x00058190, 0x00058190, 0x00000000 },
- - { 0x00009a38, 0x00000000, 0x00000000, 0x00058194, 0x00058194, 0x00000000 },
- - { 0x00009a3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0, 0x00000000 },
- - { 0x00009a40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c, 0x00000000 },
- - { 0x00009a44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8, 0x00000000 },
- - { 0x00009a48, 0x00000000, 0x00000000, 0x00058284, 0x00058284, 0x00000000 },
- - { 0x00009a4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288, 0x00000000 },
- - { 0x00009a50, 0x00000000, 0x00000000, 0x00058224, 0x00058224, 0x00000000 },
- - { 0x00009a54, 0x00000000, 0x00000000, 0x00058290, 0x00058290, 0x00000000 },
- - { 0x00009a58, 0x00000000, 0x00000000, 0x00058300, 0x00058300, 0x00000000 },
- - { 0x00009a5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304, 0x00000000 },
- - { 0x00009a60, 0x00000000, 0x00000000, 0x00058308, 0x00058308, 0x00000000 },
- - { 0x00009a64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c, 0x00000000 },
- - { 0x00009a68, 0x00000000, 0x00000000, 0x00058380, 0x00058380, 0x00000000 },
- - { 0x00009a6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384, 0x00000000 },
- - { 0x00009a70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000 },
- - { 0x00009a74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000 },
- - { 0x00009a78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000 },
- - { 0x00009a7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000 },
- - { 0x00009a80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000 },
- - { 0x00009a84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000 },
- - { 0x00009a88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00, 0x00000000 },
- - { 0x00009a8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04, 0x00000000 },
- - { 0x00009a90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08, 0x00000000 },
- - { 0x00009a94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c, 0x00000000 },
- - { 0x00009a98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80, 0x00000000 },
- - { 0x00009a9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84, 0x00000000 },
- - { 0x00009aa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88, 0x00000000 },
- - { 0x00009aa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c, 0x00000000 },
- - { 0x00009aa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90, 0x00000000 },
- - { 0x00009aac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80, 0x00000000 },
- - { 0x00009ab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84, 0x00000000 },
- - { 0x00009ab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88, 0x00000000 },
- - { 0x00009ab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c, 0x00000000 },
- - { 0x00009abc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90, 0x00000000 },
- - { 0x00009ac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c, 0x00000000 },
- - { 0x00009ac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310, 0x00000000 },
- - { 0x00009ac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384, 0x00000000 },
- - { 0x00009acc, 0x00000000, 0x00000000, 0x000db388, 0x000db388, 0x00000000 },
- - { 0x00009ad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324, 0x00000000 },
- - { 0x00009ad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704, 0x00000000 },
- - { 0x00009ad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4, 0x00000000 },
- - { 0x00009adc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8, 0x00000000 },
- - { 0x00009ae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710, 0x00000000 },
- - { 0x00009ae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714, 0x00000000 },
- - { 0x00009ae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720, 0x00000000 },
- - { 0x00009aec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724, 0x00000000 },
- - { 0x00009af0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728, 0x00000000 },
- - { 0x00009af4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c, 0x00000000 },
- - { 0x00009af8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0, 0x00000000 },
- - { 0x00009afc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4, 0x00000000 },
- - { 0x00009b00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8, 0x00000000 },
- - { 0x00009b04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0, 0x00000000 },
- - { 0x00009b08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4, 0x00000000 },
- - { 0x00009b0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8, 0x00000000 },
- - { 0x00009b10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5, 0x00000000 },
- - { 0x00009b14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9, 0x00000000 },
- - { 0x00009b18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad, 0x00000000 },
- - { 0x00009b1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1, 0x00000000 },
- - { 0x00009b20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5, 0x00000000 },
- - { 0x00009b24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9, 0x00000000 },
- - { 0x00009b28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5, 0x00000000 },
- - { 0x00009b2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9, 0x00000000 },
- - { 0x00009b30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1, 0x00000000 },
- - { 0x00009b34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5, 0x00000000 },
- - { 0x00009b38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9, 0x00000000 },
- - { 0x00009b3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6, 0x00000000 },
- - { 0x00009b40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca, 0x00000000 },
- - { 0x00009b44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce, 0x00000000 },
- - { 0x00009b48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2, 0x00000000 },
- - { 0x00009b4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6, 0x00000000 },
- - { 0x00009b50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3, 0x00000000 },
- - { 0x00009b54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7, 0x00000000 },
- - { 0x00009b58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb, 0x00000000 },
- - { 0x00009b5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf, 0x00000000 },
- - { 0x00009b60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7, 0x00000000 },
- - { 0x00009b64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009ba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009ba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009ba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009be0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009be4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009be8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000aa00, 0x00000000, 0x00000000, 0x00058084, 0x00058084, 0x00000000 },
- - { 0x0000aa04, 0x00000000, 0x00000000, 0x00058088, 0x00058088, 0x00000000 },
- - { 0x0000aa08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c, 0x00000000 },
- - { 0x0000aa0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100, 0x00000000 },
- - { 0x0000aa10, 0x00000000, 0x00000000, 0x00058104, 0x00058104, 0x00000000 },
- - { 0x0000aa14, 0x00000000, 0x00000000, 0x00058108, 0x00058108, 0x00000000 },
- - { 0x0000aa18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c, 0x00000000 },
- - { 0x0000aa1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110, 0x00000000 },
- - { 0x0000aa20, 0x00000000, 0x00000000, 0x00058114, 0x00058114, 0x00000000 },
- - { 0x0000aa24, 0x00000000, 0x00000000, 0x00058180, 0x00058180, 0x00000000 },
- - { 0x0000aa28, 0x00000000, 0x00000000, 0x00058184, 0x00058184, 0x00000000 },
- - { 0x0000aa2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188, 0x00000000 },
- - { 0x0000aa30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c, 0x00000000 },
- - { 0x0000aa34, 0x00000000, 0x00000000, 0x00058190, 0x00058190, 0x00000000 },
- - { 0x0000aa38, 0x00000000, 0x00000000, 0x00058194, 0x00058194, 0x00000000 },
- - { 0x0000aa3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0, 0x00000000 },
- - { 0x0000aa40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c, 0x00000000 },
- - { 0x0000aa44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8, 0x00000000 },
- - { 0x0000aa48, 0x00000000, 0x00000000, 0x00058284, 0x00058284, 0x00000000 },
- - { 0x0000aa4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288, 0x00000000 },
- - { 0x0000aa50, 0x00000000, 0x00000000, 0x00058224, 0x00058224, 0x00000000 },
- - { 0x0000aa54, 0x00000000, 0x00000000, 0x00058290, 0x00058290, 0x00000000 },
- - { 0x0000aa58, 0x00000000, 0x00000000, 0x00058300, 0x00058300, 0x00000000 },
- - { 0x0000aa5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304, 0x00000000 },
- - { 0x0000aa60, 0x00000000, 0x00000000, 0x00058308, 0x00058308, 0x00000000 },
- - { 0x0000aa64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c, 0x00000000 },
- - { 0x0000aa68, 0x00000000, 0x00000000, 0x00058380, 0x00058380, 0x00000000 },
- - { 0x0000aa6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384, 0x00000000 },
- - { 0x0000aa70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000 },
- - { 0x0000aa74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000 },
- - { 0x0000aa78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000 },
- - { 0x0000aa7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000 },
- - { 0x0000aa80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000 },
- - { 0x0000aa84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000 },
- - { 0x0000aa88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00, 0x00000000 },
- - { 0x0000aa8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04, 0x00000000 },
- - { 0x0000aa90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08, 0x00000000 },
- - { 0x0000aa94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c, 0x00000000 },
- - { 0x0000aa98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80, 0x00000000 },
- - { 0x0000aa9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84, 0x00000000 },
- - { 0x0000aaa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88, 0x00000000 },
- - { 0x0000aaa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c, 0x00000000 },
- - { 0x0000aaa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90, 0x00000000 },
- - { 0x0000aaac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80, 0x00000000 },
- - { 0x0000aab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84, 0x00000000 },
- - { 0x0000aab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88, 0x00000000 },
- - { 0x0000aab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c, 0x00000000 },
- - { 0x0000aabc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90, 0x00000000 },
- - { 0x0000aac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c, 0x00000000 },
- - { 0x0000aac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310, 0x00000000 },
- - { 0x0000aac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384, 0x00000000 },
- - { 0x0000aacc, 0x00000000, 0x00000000, 0x000db388, 0x000db388, 0x00000000 },
- - { 0x0000aad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324, 0x00000000 },
- - { 0x0000aad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704, 0x00000000 },
- - { 0x0000aad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4, 0x00000000 },
- - { 0x0000aadc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8, 0x00000000 },
- - { 0x0000aae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710, 0x00000000 },
- - { 0x0000aae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714, 0x00000000 },
- - { 0x0000aae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720, 0x00000000 },
- - { 0x0000aaec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724, 0x00000000 },
- - { 0x0000aaf0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728, 0x00000000 },
- - { 0x0000aaf4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c, 0x00000000 },
- - { 0x0000aaf8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0, 0x00000000 },
- - { 0x0000aafc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4, 0x00000000 },
- - { 0x0000ab00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8, 0x00000000 },
- - { 0x0000ab04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0, 0x00000000 },
- - { 0x0000ab08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4, 0x00000000 },
- - { 0x0000ab0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8, 0x00000000 },
- - { 0x0000ab10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5, 0x00000000 },
- - { 0x0000ab14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9, 0x00000000 },
- - { 0x0000ab18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad, 0x00000000 },
- - { 0x0000ab1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1, 0x00000000 },
- - { 0x0000ab20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5, 0x00000000 },
- - { 0x0000ab24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9, 0x00000000 },
- - { 0x0000ab28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5, 0x00000000 },
- - { 0x0000ab2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9, 0x00000000 },
- - { 0x0000ab30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1, 0x00000000 },
- - { 0x0000ab34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5, 0x00000000 },
- - { 0x0000ab38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9, 0x00000000 },
- - { 0x0000ab3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6, 0x00000000 },
- - { 0x0000ab40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca, 0x00000000 },
- - { 0x0000ab44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce, 0x00000000 },
- - { 0x0000ab48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2, 0x00000000 },
- - { 0x0000ab4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6, 0x00000000 },
- - { 0x0000ab50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3, 0x00000000 },
- - { 0x0000ab54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7, 0x00000000 },
- - { 0x0000ab58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb, 0x00000000 },
- - { 0x0000ab5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf, 0x00000000 },
- - { 0x0000ab60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7, 0x00000000 },
- - { 0x0000ab64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000aba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000aba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000aba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abe0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abe4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abe8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000a204, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004 },
- - { 0x0000a20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000, 0x0001f000 },
- - { 0x0000b20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000, 0x0001f000 },
- - { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
- - { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- - { 0x0000a250, 0x0004f000, 0x0004f000, 0x0004a000, 0x0004a000, 0x0004a000 },
- - { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
- -};
- -
- -static const u_int32_t ar9285Common_9285_1_2[][2] = {
- - { 0x0000000c, 0x00000000 },
- - { 0x00000030, 0x00020045 },
- - { 0x00000034, 0x00000005 },
- - { 0x00000040, 0x00000000 },
- - { 0x00000044, 0x00000008 },
- - { 0x00000048, 0x00000008 },
- - { 0x0000004c, 0x00000010 },
- - { 0x00000050, 0x00000000 },
- - { 0x00000054, 0x0000001f },
- - { 0x00000800, 0x00000000 },
- - { 0x00000804, 0x00000000 },
- - { 0x00000808, 0x00000000 },
- - { 0x0000080c, 0x00000000 },
- - { 0x00000810, 0x00000000 },
- - { 0x00000814, 0x00000000 },
- - { 0x00000818, 0x00000000 },
- - { 0x0000081c, 0x00000000 },
- - { 0x00000820, 0x00000000 },
- - { 0x00000824, 0x00000000 },
- - { 0x00001040, 0x002ffc0f },
- - { 0x00001044, 0x002ffc0f },
- - { 0x00001048, 0x002ffc0f },
- - { 0x0000104c, 0x002ffc0f },
- - { 0x00001050, 0x002ffc0f },
- - { 0x00001054, 0x002ffc0f },
- - { 0x00001058, 0x002ffc0f },
- - { 0x0000105c, 0x002ffc0f },
- - { 0x00001060, 0x002ffc0f },
- - { 0x00001064, 0x002ffc0f },
- - { 0x00001230, 0x00000000 },
- - { 0x00001270, 0x00000000 },
- - { 0x00001038, 0x00000000 },
- - { 0x00001078, 0x00000000 },
- - { 0x000010b8, 0x00000000 },
- - { 0x000010f8, 0x00000000 },
- - { 0x00001138, 0x00000000 },
- - { 0x00001178, 0x00000000 },
- - { 0x000011b8, 0x00000000 },
- - { 0x000011f8, 0x00000000 },
- - { 0x00001238, 0x00000000 },
- - { 0x00001278, 0x00000000 },
- - { 0x000012b8, 0x00000000 },
- - { 0x000012f8, 0x00000000 },
- - { 0x00001338, 0x00000000 },
- - { 0x00001378, 0x00000000 },
- - { 0x000013b8, 0x00000000 },
- - { 0x000013f8, 0x00000000 },
- - { 0x00001438, 0x00000000 },
- - { 0x00001478, 0x00000000 },
- - { 0x000014b8, 0x00000000 },
- - { 0x000014f8, 0x00000000 },
- - { 0x00001538, 0x00000000 },
- - { 0x00001578, 0x00000000 },
- - { 0x000015b8, 0x00000000 },
- - { 0x000015f8, 0x00000000 },
- - { 0x00001638, 0x00000000 },
- - { 0x00001678, 0x00000000 },
- - { 0x000016b8, 0x00000000 },
- - { 0x000016f8, 0x00000000 },
- - { 0x00001738, 0x00000000 },
- - { 0x00001778, 0x00000000 },
- - { 0x000017b8, 0x00000000 },
- - { 0x000017f8, 0x00000000 },
- - { 0x0000103c, 0x00000000 },
- - { 0x0000107c, 0x00000000 },
- - { 0x000010bc, 0x00000000 },
- - { 0x000010fc, 0x00000000 },
- - { 0x0000113c, 0x00000000 },
- - { 0x0000117c, 0x00000000 },
- - { 0x000011bc, 0x00000000 },
- - { 0x000011fc, 0x00000000 },
- - { 0x0000123c, 0x00000000 },
- - { 0x0000127c, 0x00000000 },
- - { 0x000012bc, 0x00000000 },
- - { 0x000012fc, 0x00000000 },
- - { 0x0000133c, 0x00000000 },
- - { 0x0000137c, 0x00000000 },
- - { 0x000013bc, 0x00000000 },
- - { 0x000013fc, 0x00000000 },
- - { 0x0000143c, 0x00000000 },
- - { 0x0000147c, 0x00000000 },
- - { 0x00004030, 0x00000002 },
- - { 0x0000403c, 0x00000002 },
- - { 0x00004024, 0x0000001f },
- - { 0x00004060, 0x00000000 },
- - { 0x00004064, 0x00000000 },
- - { 0x00007010, 0x00000031 },
- - { 0x00007034, 0x00000002 },
- - { 0x00007038, 0x000004c2 },
- - { 0x00008004, 0x00000000 },
- - { 0x00008008, 0x00000000 },
- - { 0x0000800c, 0x00000000 },
- - { 0x00008018, 0x00000700 },
- - { 0x00008020, 0x00000000 },
- - { 0x00008038, 0x00000000 },
- - { 0x0000803c, 0x00000000 },
- - { 0x00008048, 0x00000000 },
- - { 0x00008054, 0x00000000 },
- - { 0x00008058, 0x00000000 },
- - { 0x0000805c, 0x000fc78f },
- - { 0x00008060, 0x0000000f },
- - { 0x00008064, 0x00000000 },
- - { 0x00008070, 0x00000000 },
- - { 0x000080c0, 0x2a80001a },
- - { 0x000080c4, 0x05dc01e0 },
- - { 0x000080c8, 0x1f402710 },
- - { 0x000080cc, 0x01f40000 },
- - { 0x000080d0, 0x00001e00 },
- - { 0x000080d4, 0x00000000 },
- - { 0x000080d8, 0x00400000 },
- - { 0x000080e0, 0xffffffff },
- - { 0x000080e4, 0x0000ffff },
- - { 0x000080e8, 0x003f3f3f },
- - { 0x000080ec, 0x00000000 },
- - { 0x000080f0, 0x00000000 },
- - { 0x000080f4, 0x00000000 },
- - { 0x000080f8, 0x00000000 },
- - { 0x000080fc, 0x00020000 },
- - { 0x00008100, 0x00020000 },
- - { 0x00008104, 0x00000001 },
- - { 0x00008108, 0x00000052 },
- - { 0x0000810c, 0x00000000 },
- - { 0x00008110, 0x00000168 },
- - { 0x00008118, 0x000100aa },
- - { 0x0000811c, 0x00003210 },
- - { 0x00008120, 0x08f04810 },
- - { 0x00008124, 0x00000000 },
- - { 0x00008128, 0x00000000 },
- - { 0x0000812c, 0x00000000 },
- - { 0x00008130, 0x00000000 },
- - { 0x00008134, 0x00000000 },
- - { 0x00008138, 0x00000000 },
- - { 0x0000813c, 0x00000000 },
- - { 0x00008144, 0xffffffff },
- - { 0x00008168, 0x00000000 },
- - { 0x0000816c, 0x00000000 },
- - { 0x00008170, 0x32143320 },
- - { 0x00008174, 0xfaa4fa50 },
- - { 0x00008178, 0x00000100 },
- - { 0x0000817c, 0x00000000 },
- - { 0x000081c0, 0x00000000 },
- - { 0x000081d0, 0x0000320a },
- - { 0x000081ec, 0x00000000 },
- - { 0x000081f0, 0x00000000 },
- - { 0x000081f4, 0x00000000 },
- - { 0x000081f8, 0x00000000 },
- - { 0x000081fc, 0x00000000 },
- - { 0x00008200, 0x00000000 },
- - { 0x00008204, 0x00000000 },
- - { 0x00008208, 0x00000000 },
- - { 0x0000820c, 0x00000000 },
- - { 0x00008210, 0x00000000 },
- - { 0x00008214, 0x00000000 },
- - { 0x00008218, 0x00000000 },
- - { 0x0000821c, 0x00000000 },
- - { 0x00008220, 0x00000000 },
- - { 0x00008224, 0x00000000 },
- - { 0x00008228, 0x00000000 },
- - { 0x0000822c, 0x00000000 },
- - { 0x00008230, 0x00000000 },
- - { 0x00008234, 0x00000000 },
- - { 0x00008238, 0x00000000 },
- - { 0x0000823c, 0x00000000 },
- - { 0x00008240, 0x00100000 },
- - { 0x00008244, 0x0010f400 },
- - { 0x00008248, 0x00000100 },
- - { 0x0000824c, 0x0001e800 },
- - { 0x00008250, 0x00000000 },
- - { 0x00008254, 0x00000000 },
- - { 0x00008258, 0x00000000 },
- - { 0x0000825c, 0x400000ff },
- - { 0x00008260, 0x00080922 },
- - { 0x00008264, 0x88a00010 },
- - { 0x00008270, 0x00000000 },
- - { 0x00008274, 0x40000000 },
- - { 0x00008278, 0x003e4180 },
- - { 0x0000827c, 0x00000000 },
- - { 0x00008284, 0x0000002c },
- - { 0x00008288, 0x0000002c },
- - { 0x0000828c, 0x00000000 },
- - { 0x00008294, 0x00000000 },
- - { 0x00008298, 0x00000000 },
- - { 0x0000829c, 0x00000000 },
- - { 0x00008300, 0x00000040 },
- - { 0x00008314, 0x00000000 },
- - { 0x00008328, 0x00000000 },
- - { 0x0000832c, 0x00000001 },
- - { 0x00008330, 0x00000302 },
- - { 0x00008334, 0x00000e00 },
- - { 0x00008338, 0x00ff0000 },
- - { 0x0000833c, 0x00000000 },
- - { 0x00008340, 0x00010380 },
- - { 0x00008344, 0x00481043 },
- - { 0x00009808, 0x00000000 },
- - { 0x0000980c, 0xafe68e30 },
- - { 0x00009810, 0xfd14e000 },
- - { 0x00009814, 0x9c0a9f6b },
- - { 0x0000981c, 0x00000000 },
- - { 0x0000982c, 0x0000a000 },
- - { 0x00009830, 0x00000000 },
- - { 0x0000983c, 0x00200400 },
- - { 0x0000984c, 0x0040233c },
- - { 0x00009854, 0x00000044 },
- - { 0x00009900, 0x00000000 },
- - { 0x00009904, 0x00000000 },
- - { 0x00009908, 0x00000000 },
- - { 0x0000990c, 0x00000000 },
- - { 0x00009910, 0x01002310 },
- - { 0x0000991c, 0x10000fff },
- - { 0x00009920, 0x04900000 },
- - { 0x00009928, 0x00000001 },
- - { 0x0000992c, 0x00000004 },
- - { 0x00009934, 0x1e1f2022 },
- - { 0x00009938, 0x0a0b0c0d },
- - { 0x0000993c, 0x00000000 },
- - { 0x00009940, 0x14750604 },
- - { 0x00009948, 0x9280c00a },
- - { 0x0000994c, 0x00020028 },
- - { 0x00009954, 0x5f3ca3de },
- - { 0x00009958, 0x2108ecff },
- - { 0x00009968, 0x000003ce },
- - { 0x00009970, 0x192bb514 },
- - { 0x00009974, 0x00000000 },
- - { 0x00009978, 0x00000001 },
- - { 0x0000997c, 0x00000000 },
- - { 0x00009980, 0x00000000 },
- - { 0x00009984, 0x00000000 },
- - { 0x00009988, 0x00000000 },
- - { 0x0000998c, 0x00000000 },
- - { 0x00009990, 0x00000000 },
- - { 0x00009994, 0x00000000 },
- - { 0x00009998, 0x00000000 },
- - { 0x0000999c, 0x00000000 },
- - { 0x000099a0, 0x00000000 },
- - { 0x000099a4, 0x00000001 },
- - { 0x000099a8, 0x201fff00 },
- - { 0x000099ac, 0x2def0400 },
- - { 0x000099b0, 0x03051000 },
- - { 0x000099b4, 0x00000820 },
- - { 0x000099dc, 0x00000000 },
- - { 0x000099e0, 0x00000000 },
- - { 0x000099e4, 0xaaaaaaaa },
- - { 0x000099e8, 0x3c466478 },
- - { 0x000099ec, 0x0cc80caa },
- - { 0x000099f0, 0x00000000 },
- - { 0x0000a208, 0x803e68c8 },
- - { 0x0000a210, 0x4080a333 },
- - { 0x0000a214, 0x00206c10 },
- - { 0x0000a218, 0x009c4060 },
- - { 0x0000a220, 0x01834061 },
- - { 0x0000a224, 0x00000400 },
- - { 0x0000a228, 0x000003b5 },
- - { 0x0000a22c, 0x00000000 },
- - { 0x0000a234, 0x20202020 },
- - { 0x0000a238, 0x20202020 },
- - { 0x0000a244, 0x00000000 },
- - { 0x0000a248, 0xfffffffc },
- - { 0x0000a24c, 0x00000000 },
- - { 0x0000a254, 0x00000000 },
- - { 0x0000a258, 0x0ccb5380 },
- - { 0x0000a25c, 0x15151501 },
- - { 0x0000a260, 0xdfa90f01 },
- - { 0x0000a268, 0x00000000 },
- - { 0x0000a26c, 0x0ebae9e6 },
- - { 0x0000d270, 0x0d820820 },
- - { 0x0000d35c, 0x07ffffef },
- - { 0x0000d360, 0x0fffffe7 },
- - { 0x0000d364, 0x17ffffe5 },
- - { 0x0000d368, 0x1fffffe4 },
- - { 0x0000d36c, 0x37ffffe3 },
- - { 0x0000d370, 0x3fffffe3 },
- - { 0x0000d374, 0x57ffffe3 },
- - { 0x0000d378, 0x5fffffe2 },
- - { 0x0000d37c, 0x7fffffe2 },
- - { 0x0000d380, 0x7f3c7bba },
- - { 0x0000d384, 0xf3307ff0 },
- - { 0x0000a388, 0x0c000000 },
- - { 0x0000a38c, 0x20202020 },
- - { 0x0000a390, 0x20202020 },
- - { 0x0000a39c, 0x00000001 },
- - { 0x0000a3a0, 0x00000000 },
- - { 0x0000a3a4, 0x00000000 },
- - { 0x0000a3a8, 0x00000000 },
- - { 0x0000a3ac, 0x00000000 },
- - { 0x0000a3b0, 0x00000000 },
- - { 0x0000a3b4, 0x00000000 },
- - { 0x0000a3b8, 0x00000000 },
- - { 0x0000a3bc, 0x00000000 },
- - { 0x0000a3c0, 0x00000000 },
- - { 0x0000a3c4, 0x00000000 },
- - { 0x0000a3cc, 0x20202020 },
- - { 0x0000a3d0, 0x20202020 },
- - { 0x0000a3d4, 0x20202020 },
- - { 0x0000a3e4, 0x00000000 },
- - { 0x0000a3e8, 0x18c43433 },
- - { 0x0000a3ec, 0x00f70081 },
- - { 0x00007800, 0x00140000 },
- - { 0x00007804, 0x0e4548d8 },
- - { 0x00007808, 0x54214514 },
- - { 0x0000780c, 0x02025830 },
- - { 0x00007810, 0x71c0d388 },
- - { 0x0000781c, 0x00000000 },
- - { 0x00007824, 0x00d86fff },
- - { 0x0000782c, 0x6e36d97b },
- - { 0x00007834, 0x71400087 },
- - { 0x00007844, 0x000c0db6 },
- - { 0x00007848, 0x6db6246f },
- - { 0x0000784c, 0x6d9b66db },
- - { 0x00007850, 0x6d8c6dba },
- - { 0x00007854, 0x00040000 },
- - { 0x00007858, 0xdb003012 },
- - { 0x0000785c, 0x04924914 },
- - { 0x00007860, 0x21084210 },
- - { 0x00007864, 0xf7d7ffde },
- - { 0x00007868, 0xc2034080 },
- - { 0x00007870, 0x10142c00 },
- -};
- -
- -static const u_int32_t ar9285Modes_high_power_tx_gain_9285_1_2[][6] = {
- - /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- - { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a304, 0x00000000, 0x00000000, 0x00006200, 0x00006200, 0x00000000 },
- - { 0x0000a308, 0x00000000, 0x00000000, 0x00008201, 0x00008201, 0x00000000 },
- - { 0x0000a30c, 0x00000000, 0x00000000, 0x0000b240, 0x0000b240, 0x00000000 },
- - { 0x0000a310, 0x00000000, 0x00000000, 0x0000d241, 0x0000d241, 0x00000000 },
- - { 0x0000a314, 0x00000000, 0x00000000, 0x0000f600, 0x0000f600, 0x00000000 },
- - { 0x0000a318, 0x00000000, 0x00000000, 0x00012800, 0x00012800, 0x00000000 },
- - { 0x0000a31c, 0x00000000, 0x00000000, 0x00016802, 0x00016802, 0x00000000 },
- - { 0x0000a320, 0x00000000, 0x00000000, 0x0001b805, 0x0001b805, 0x00000000 },
- - { 0x0000a324, 0x00000000, 0x00000000, 0x00021a80, 0x00021a80, 0x00000000 },
- - { 0x0000a328, 0x00000000, 0x00000000, 0x00028b00, 0x00028b00, 0x00000000 },
- - { 0x0000a32c, 0x00000000, 0x00000000, 0x0002ab40, 0x0002ab40, 0x00000000 },
- - { 0x0000a330, 0x00000000, 0x00000000, 0x0002cd80, 0x0002cd80, 0x00000000 },
- - { 0x0000a334, 0x00000000, 0x00000000, 0x00033d82, 0x00033d82, 0x00000000 },
- - { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
- - { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
- - { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x00007814, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8 },
- - { 0x00007828, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b },
- - { 0x00007830, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e },
- - { 0x00007838, 0xfac68803, 0xfac68803, 0xfac68803, 0xfac68803, 0xfac68803 },
- - { 0x0000783c, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe },
- - { 0x00007840, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20 },
- - { 0x0000786c, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe },
- - { 0x00007820, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00 },
- - { 0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a216652, 0x0a216652, 0x0a22a652 },
- - { 0x0000a278, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
- - { 0x0000a27c, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7 },
- - { 0x0000a394, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
- - { 0x0000a398, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7 },
- - { 0x0000a3dc, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
- - { 0x0000a3e0, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7 },
- -};
- -
- -static const u_int32_t ar9285Modes_original_tx_gain_9285_1_2[][6] = {
- - /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- - { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a304, 0x00000000, 0x00000000, 0x00009200, 0x00009200, 0x00000000 },
- - { 0x0000a308, 0x00000000, 0x00000000, 0x00010208, 0x00010208, 0x00000000 },
- - { 0x0000a30c, 0x00000000, 0x00000000, 0x00019608, 0x00019608, 0x00000000 },
- - { 0x0000a310, 0x00000000, 0x00000000, 0x00022618, 0x00022618, 0x00000000 },
- - { 0x0000a314, 0x00000000, 0x00000000, 0x0002a6c9, 0x0002a6c9, 0x00000000 },
- - { 0x0000a318, 0x00000000, 0x00000000, 0x00031710, 0x00031710, 0x00000000 },
- - { 0x0000a31c, 0x00000000, 0x00000000, 0x00035718, 0x00035718, 0x00000000 },
- - { 0x0000a320, 0x00000000, 0x00000000, 0x00038758, 0x00038758, 0x00000000 },
- - { 0x0000a324, 0x00000000, 0x00000000, 0x0003c75a, 0x0003c75a, 0x00000000 },
- - { 0x0000a328, 0x00000000, 0x00000000, 0x0004075c, 0x0004075c, 0x00000000 },
- - { 0x0000a32c, 0x00000000, 0x00000000, 0x0004475e, 0x0004475e, 0x00000000 },
- - { 0x0000a330, 0x00000000, 0x00000000, 0x0004679f, 0x0004679f, 0x00000000 },
- - { 0x0000a334, 0x00000000, 0x00000000, 0x000487df, 0x000487df, 0x00000000 },
- - { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
- - { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
- - { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x00007814, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8 },
- - { 0x00007828, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b },
- - { 0x00007830, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e },
- - { 0x00007838, 0xfac68801, 0xfac68801, 0xfac68801, 0xfac68801, 0xfac68801 },
- - { 0x0000783c, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe },
- - { 0x00007840, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20 },
- - { 0x0000786c, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4 },
- - { 0x00007820, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04 },
- - { 0x0000a274, 0x0a21c652, 0x0a21c652, 0x0a21a652, 0x0a21a652, 0x0a22a652 },
- - { 0x0000a278, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
- - { 0x0000a27c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c },
- - { 0x0000a394, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
- - { 0x0000a398, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c },
- - { 0x0000a3dc, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
- - { 0x0000a3e0, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c },
- -};
- -
- -static const u_int32_t ar9285Modes_XE2_0_normal_power[][6] = {
- - { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a304, 0x00000000, 0x00000000, 0x00009200, 0x00009200, 0x00000000 },
- - { 0x0000a308, 0x00000000, 0x00000000, 0x00010208, 0x00010208, 0x00000000 },
- - { 0x0000a30c, 0x00000000, 0x00000000, 0x00019608, 0x00019608, 0x00000000 },
- - { 0x0000a310, 0x00000000, 0x00000000, 0x00022618, 0x00022618, 0x00000000 },
- - { 0x0000a314, 0x00000000, 0x00000000, 0x0002a6c9, 0x0002a6c9, 0x00000000 },
- - { 0x0000a318, 0x00000000, 0x00000000, 0x00031710, 0x00031710, 0x00000000 },
- - { 0x0000a31c, 0x00000000, 0x00000000, 0x00035718, 0x00035718, 0x00000000 },
- - { 0x0000a320, 0x00000000, 0x00000000, 0x00038758, 0x00038758, 0x00000000 },
- - { 0x0000a324, 0x00000000, 0x00000000, 0x0003c75a, 0x0003c75a, 0x00000000 },
- - { 0x0000a328, 0x00000000, 0x00000000, 0x0004075c, 0x0004075c, 0x00000000 },
- - { 0x0000a32c, 0x00000000, 0x00000000, 0x0004475e, 0x0004475e, 0x00000000 },
- - { 0x0000a330, 0x00000000, 0x00000000, 0x0004679f, 0x0004679f, 0x00000000 },
- - { 0x0000a334, 0x00000000, 0x00000000, 0x000487df, 0x000487df, 0x00000000 },
- - { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
- - { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
- - { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x00007814, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8 },
- - { 0x00007828, 0x4ad2491b, 0x4ad2491b, 0x2ad2491b, 0x4ad2491b, 0x4ad2491b },
- - { 0x00007830, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6dbae },
- - { 0x00007838, 0xdac71441, 0xdac71441, 0xdac71441, 0xdac71441, 0xdac71441 },
- - { 0x0000783c, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe },
- - { 0x00007840, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c },
- - { 0x0000786c, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4 },
- - { 0x00007820, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04 },
- - { 0x0000a274, 0x0a21c652, 0x0a21c652, 0x0a21a652, 0x0a21a652, 0x0a22a652 },
- - { 0x0000a278, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
- - { 0x0000a27c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c },
- - { 0x0000a394, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
- - { 0x0000a398, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c },
- - { 0x0000a3dc, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
- - { 0x0000a3e0, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c },
- -};
- -
- -static const u_int32_t ar9285Modes_XE2_0_high_power[][6] = {
- - { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a304, 0x00000000, 0x00000000, 0x00006200, 0x00006200, 0x00000000 },
- - { 0x0000a308, 0x00000000, 0x00000000, 0x00008201, 0x00008201, 0x00000000 },
- - { 0x0000a30c, 0x00000000, 0x00000000, 0x0000b240, 0x0000b240, 0x00000000 },
- - { 0x0000a310, 0x00000000, 0x00000000, 0x0000d241, 0x0000d241, 0x00000000 },
- - { 0x0000a314, 0x00000000, 0x00000000, 0x0000f600, 0x0000f600, 0x00000000 },
- - { 0x0000a318, 0x00000000, 0x00000000, 0x00012800, 0x00012800, 0x00000000 },
- - { 0x0000a31c, 0x00000000, 0x00000000, 0x00016802, 0x00016802, 0x00000000 },
- - { 0x0000a320, 0x00000000, 0x00000000, 0x0001b805, 0x0001b805, 0x00000000 },
- - { 0x0000a324, 0x00000000, 0x00000000, 0x00021a80, 0x00021a80, 0x00000000 },
- - { 0x0000a328, 0x00000000, 0x00000000, 0x00028b00, 0x00028b00, 0x00000000 },
- - { 0x0000a32c, 0x00000000, 0x00000000, 0x0002ab40, 0x0002ab40, 0x00000000 },
- - { 0x0000a330, 0x00000000, 0x00000000, 0x0002cd80, 0x0002cd80, 0x00000000 },
- - { 0x0000a334, 0x00000000, 0x00000000, 0x00033d82, 0x00033d82, 0x00000000 },
- - { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
- - { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
- - { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x00007814, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8 },
- - { 0x00007828, 0x4ad2491b, 0x4ad2491b, 0x2ad2491b, 0x4ad2491b, 0x4ad2491b },
- - { 0x00007830, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e },
- - { 0x00007838, 0xdac71443, 0xdac71443, 0xdac71443, 0xdac71443, 0xdac71443 },
- - { 0x0000783c, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe },
- - { 0x00007840, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c },
- - { 0x0000786c, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe },
- - { 0x00007820, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00 },
- - { 0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a216652, 0x0a216652, 0x0a22a652 },
- - { 0x0000a278, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
- - { 0x0000a27c, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7 },
- - { 0x0000a394, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
- - { 0x0000a398, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7 },
- - { 0x0000a3dc, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
- - { 0x0000a3e0, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7 },
- -};
- -
- -static const u_int32_t ar9285PciePhy_clkreq_always_on_L1_9285_1_2[][2] = {
- - {0x00004040, 0x9248fd00 },
- - {0x00004040, 0x24924924 },
- - {0x00004040, 0xa8000019 },
- - {0x00004040, 0x13160820 },
- - {0x00004040, 0xe5980560 },
- - {0x00004040, 0xc01dcffd },
- - {0x00004040, 0x1aaabe41 },
- - {0x00004040, 0xbe105554 },
- - {0x00004040, 0x00043007 },
- - {0x00004044, 0x00000000 },
- -};
- -
- -static const u_int32_t ar9285PciePhy_clkreq_off_L1_9285_1_2[][2] = {
- - {0x00004040, 0x9248fd00 },
- - {0x00004040, 0x24924924 },
- - {0x00004040, 0xa8000019 },
- - {0x00004040, 0x13160820 },
- - {0x00004040, 0xe5980560 },
- - {0x00004040, 0xc01dcffc },
- - {0x00004040, 0x1aaabe41 },
- - {0x00004040, 0xbe105554 },
- - {0x00004040, 0x00043007 },
- - {0x00004044, 0x00000000 },
- -};
- -
- -/* AR9287 Revision 10 */
- -static const u_int32_t ar9287Modes_9287_1_0[][6] = {
- - /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- - { 0x00001030, 0x00000000, 0x00000000, 0x000002c0, 0x00000160, 0x000001e0 },
- - { 0x00001070, 0x00000000, 0x00000000, 0x00000318, 0x0000018c, 0x000001e0 },
- - { 0x000010b0, 0x00000000, 0x00000000, 0x00007c70, 0x00003e38, 0x00001180 },
- - { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
- - { 0x00008014, 0x00000000, 0x00000000, 0x10801600, 0x08400b00, 0x06e006e0 },
- - { 0x0000801c, 0x00000000, 0x00000000, 0x12e00057, 0x12e0002b, 0x0988004f },
- - { 0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810 },
- - { 0x000081d0, 0x00003200, 0x00003200, 0x0000320a, 0x0000320a, 0x0000320a },
- - { 0x00008318, 0x00000000, 0x00000000, 0x00006880, 0x00003440, 0x00006880 },
- - { 0x00009804, 0x00000000, 0x00000000, 0x000003c4, 0x00000300, 0x00000303 },
- - { 0x00009820, 0x00000000, 0x00000000, 0x02020200, 0x02020200, 0x02020200 },
- - { 0x00009824, 0x00000000, 0x00000000, 0x01000e0e, 0x01000e0e, 0x01000e0e },
- - { 0x00009828, 0x00000000, 0x00000000, 0x0a020001, 0x0a020001, 0x0a020001 },
- - { 0x00009834, 0x00000000, 0x00000000, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- - { 0x00009838, 0x00000003, 0x00000003, 0x00000007, 0x00000007, 0x00000007 },
- - { 0x00009840, 0x206a002e, 0x206a002e, 0x206a012e, 0x206a012e, 0x206a012e },
- - { 0x00009844, 0x03720000, 0x03720000, 0x037216a0, 0x037216a0, 0x037216a0 },
- - { 0x00009850, 0x60000000, 0x60000000, 0x6d4000e2, 0x6c4000e2, 0x6c4000e2 },
- - { 0x00009858, 0x7c000d00, 0x7c000d00, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
- - { 0x0000985c, 0x3100005e, 0x3100005e, 0x3139605e, 0x31395d5e, 0x31395d5e },
- - { 0x00009860, 0x00058d00, 0x00058d00, 0x00058d20, 0x00058d20, 0x00058d18 },
- - { 0x00009864, 0x00000e00, 0x00000e00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- - { 0x00009868, 0x000040c0, 0x000040c0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
- - { 0x0000986c, 0x00000080, 0x00000080, 0x06903881, 0x06903881, 0x06903881 },
- - { 0x00009914, 0x00000000, 0x00000000, 0x00001130, 0x00000898, 0x000007d0 },
- - { 0x00009918, 0x00000000, 0x00000000, 0x00000016, 0x0000000b, 0x00000016 },
- - { 0x00009924, 0xd00a8a01, 0xd00a8a01, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d },
- - { 0x00009944, 0xefbc0000, 0xefbc0000, 0xefbc1010, 0xefbc1010, 0xefbc1010 },
- - { 0x00009960, 0x00000000, 0x00000000, 0x00000010, 0x00000010, 0x00000010 },
- - { 0x0000a960, 0x00000000, 0x00000000, 0x00000010, 0x00000010, 0x00000010 },
- - { 0x00009964, 0x00000000, 0x00000000, 0x00000210, 0x00000210, 0x00000210 },
- - { 0x0000c968, 0x00000200, 0x00000200, 0x000003ce, 0x000003ce, 0x000003ce },
- - { 0x000099b8, 0x00000000, 0x00000000, 0x0000001c, 0x0000001c, 0x0000001c },
- - { 0x000099bc, 0x00000000, 0x00000000, 0x00000c00, 0x00000c00, 0x00000c00 },
- - { 0x000099c0, 0x00000000, 0x00000000, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
- - { 0x0000a204, 0x00000440, 0x00000440, 0x00000444, 0x00000444, 0x00000444 },
- - { 0x0000a20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000b20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a21c, 0x1803800a, 0x1803800a, 0x1883800a, 0x1883800a, 0x1883800a },
- - { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- - { 0x0000a250, 0x00000000, 0x00000000, 0x0004a000, 0x0004a000, 0x0004a000 },
- - { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
- - { 0x0000a3d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- -};
- -
- -static const u_int32_t ar9287Common_9287_1_0[][2] = {
- - { 0x0000000c, 0x00000000 },
- - { 0x00000030, 0x00020015 },
- - { 0x00000034, 0x00000005 },
- - { 0x00000040, 0x00000000 },
- - { 0x00000044, 0x00000008 },
- - { 0x00000048, 0x00000008 },
- - { 0x0000004c, 0x00000010 },
- - { 0x00000050, 0x00000000 },
- - { 0x00000054, 0x0000001f },
- - { 0x00000800, 0x00000000 },
- - { 0x00000804, 0x00000000 },
- - { 0x00000808, 0x00000000 },
- - { 0x0000080c, 0x00000000 },
- - { 0x00000810, 0x00000000 },
- - { 0x00000814, 0x00000000 },
- - { 0x00000818, 0x00000000 },
- - { 0x0000081c, 0x00000000 },
- - { 0x00000820, 0x00000000 },
- - { 0x00000824, 0x00000000 },
- - { 0x00001040, 0x002ffc0f },
- - { 0x00001044, 0x002ffc0f },
- - { 0x00001048, 0x002ffc0f },
- - { 0x0000104c, 0x002ffc0f },
- - { 0x00001050, 0x002ffc0f },
- - { 0x00001054, 0x002ffc0f },
- - { 0x00001058, 0x002ffc0f },
- - { 0x0000105c, 0x002ffc0f },
- - { 0x00001060, 0x002ffc0f },
- - { 0x00001064, 0x002ffc0f },
- - { 0x00001230, 0x00000000 },
- - { 0x00001270, 0x00000000 },
- - { 0x00001038, 0x00000000 },
- - { 0x00001078, 0x00000000 },
- - { 0x000010b8, 0x00000000 },
- - { 0x000010f8, 0x00000000 },
- - { 0x00001138, 0x00000000 },
- - { 0x00001178, 0x00000000 },
- - { 0x000011b8, 0x00000000 },
- - { 0x000011f8, 0x00000000 },
- - { 0x00001238, 0x00000000 },
- - { 0x00001278, 0x00000000 },
- - { 0x000012b8, 0x00000000 },
- - { 0x000012f8, 0x00000000 },
- - { 0x00001338, 0x00000000 },
- - { 0x00001378, 0x00000000 },
- - { 0x000013b8, 0x00000000 },
- - { 0x000013f8, 0x00000000 },
- - { 0x00001438, 0x00000000 },
- - { 0x00001478, 0x00000000 },
- - { 0x000014b8, 0x00000000 },
- - { 0x000014f8, 0x00000000 },
- - { 0x00001538, 0x00000000 },
- - { 0x00001578, 0x00000000 },
- - { 0x000015b8, 0x00000000 },
- - { 0x000015f8, 0x00000000 },
- - { 0x00001638, 0x00000000 },
- - { 0x00001678, 0x00000000 },
- - { 0x000016b8, 0x00000000 },
- - { 0x000016f8, 0x00000000 },
- - { 0x00001738, 0x00000000 },
- - { 0x00001778, 0x00000000 },
- - { 0x000017b8, 0x00000000 },
- - { 0x000017f8, 0x00000000 },
- - { 0x0000103c, 0x00000000 },
- - { 0x0000107c, 0x00000000 },
- - { 0x000010bc, 0x00000000 },
- - { 0x000010fc, 0x00000000 },
- - { 0x0000113c, 0x00000000 },
- - { 0x0000117c, 0x00000000 },
- - { 0x000011bc, 0x00000000 },
- - { 0x000011fc, 0x00000000 },
- - { 0x0000123c, 0x00000000 },
- - { 0x0000127c, 0x00000000 },
- - { 0x000012bc, 0x00000000 },
- - { 0x000012fc, 0x00000000 },
- - { 0x0000133c, 0x00000000 },
- - { 0x0000137c, 0x00000000 },
- - { 0x000013bc, 0x00000000 },
- - { 0x000013fc, 0x00000000 },
- - { 0x0000143c, 0x00000000 },
- - { 0x0000147c, 0x00000000 },
- - { 0x00004030, 0x00000002 },
- - { 0x0000403c, 0x00000002 },
- - { 0x00004024, 0x0000001f },
- - { 0x00004060, 0x00000000 },
- - { 0x00004064, 0x00000000 },
- - { 0x00007010, 0x00000033 },
- - { 0x00007020, 0x00000000 },
- - { 0x00007034, 0x00000002 },
- - { 0x00007038, 0x000004c2 },
- - { 0x00008004, 0x00000000 },
- - { 0x00008008, 0x00000000 },
- - { 0x0000800c, 0x00000000 },
- - { 0x00008018, 0x00000700 },
- - { 0x00008020, 0x00000000 },
- - { 0x00008038, 0x00000000 },
- - { 0x0000803c, 0x00000000 },
- - { 0x00008048, 0x40000000 },
- - { 0x00008054, 0x00000000 },
- - { 0x00008058, 0x00000000 },
- - { 0x0000805c, 0x000fc78f },
- - { 0x00008060, 0x0000000f },
- - { 0x00008064, 0x00000000 },
- - { 0x00008070, 0x00000000 },
- - { 0x000080c0, 0x2a80001a },
- - { 0x000080c4, 0x05dc01e0 },
- - { 0x000080c8, 0x1f402710 },
- - { 0x000080cc, 0x01f40000 },
- - { 0x000080d0, 0x00001e00 },
- - { 0x000080d4, 0x00000000 },
- - { 0x000080d8, 0x00400000 },
- - { 0x000080e0, 0xffffffff },
- - { 0x000080e4, 0x0000ffff },
- - { 0x000080e8, 0x003f3f3f },
- - { 0x000080ec, 0x00000000 },
- - { 0x000080f0, 0x00000000 },
- - { 0x000080f4, 0x00000000 },
- - { 0x000080f8, 0x00000000 },
- - { 0x000080fc, 0x00020000 },
- - { 0x00008100, 0x00020000 },
- - { 0x00008104, 0x00000001 },
- - { 0x00008108, 0x00000052 },
- - { 0x0000810c, 0x00000000 },
- - { 0x00008110, 0x00000168 },
- - { 0x00008118, 0x000100aa },
- - { 0x0000811c, 0x00003210 },
- - { 0x00008124, 0x00000000 },
- - { 0x00008128, 0x00000000 },
- - { 0x0000812c, 0x00000000 },
- - { 0x00008130, 0x00000000 },
- - { 0x00008134, 0x00000000 },
- - { 0x00008138, 0x00000000 },
- - { 0x0000813c, 0x00000000 },
- - { 0x00008144, 0xffffffff },
- - { 0x00008168, 0x00000000 },
- - { 0x0000816c, 0x00000000 },
- - { 0x00008170, 0x18487320 },
- - { 0x00008174, 0xfaa4fa50 },
- - { 0x00008178, 0x00000100 },
- - { 0x0000817c, 0x00000000 },
- - { 0x000081c0, 0x00000000 },
- - { 0x000081c4, 0x00000000 },
- - { 0x000081d4, 0x00000000 },
- - { 0x000081ec, 0x00000000 },
- - { 0x000081f0, 0x00000000 },
- - { 0x000081f4, 0x00000000 },
- - { 0x000081f8, 0x00000000 },
- - { 0x000081fc, 0x00000000 },
- - { 0x00008200, 0x00000000 },
- - { 0x00008204, 0x00000000 },
- - { 0x00008208, 0x00000000 },
- - { 0x0000820c, 0x00000000 },
- - { 0x00008210, 0x00000000 },
- - { 0x00008214, 0x00000000 },
- - { 0x00008218, 0x00000000 },
- - { 0x0000821c, 0x00000000 },
- - { 0x00008220, 0x00000000 },
- - { 0x00008224, 0x00000000 },
- - { 0x00008228, 0x00000000 },
- - { 0x0000822c, 0x00000000 },
- - { 0x00008230, 0x00000000 },
- - { 0x00008234, 0x00000000 },
- - { 0x00008238, 0x00000000 },
- - { 0x0000823c, 0x00000000 },
- - { 0x00008240, 0x00100000 },
- - { 0x00008244, 0x0010f400 },
- - { 0x00008248, 0x00000100 },
- - { 0x0000824c, 0x0001e800 },
- - { 0x00008250, 0x00000000 },
- - { 0x00008254, 0x00000000 },
- - { 0x00008258, 0x00000000 },
- - { 0x0000825c, 0x400000ff },
- - { 0x00008260, 0x00080922 },
- - { 0x00008264, 0xa8a00010 },
- - { 0x00008270, 0x00000000 },
- - { 0x00008274, 0x40000000 },
- - { 0x00008278, 0x003e4180 },
- - { 0x0000827c, 0x00000000 },
- - { 0x00008284, 0x0000002c },
- - { 0x00008288, 0x0000002c },
- - { 0x0000828c, 0x000000ff },
- - { 0x00008294, 0x00000000 },
- - { 0x00008298, 0x00000000 },
- - { 0x0000829c, 0x00000000 },
- - { 0x00008300, 0x00000040 },
- - { 0x00008314, 0x00000000 },
- - { 0x00008328, 0x00000000 },
- - { 0x0000832c, 0x00000007 },
- - { 0x00008330, 0x00000302 },
- - { 0x00008334, 0x00000e00 },
- - { 0x00008338, 0x00ff0000 },
- - { 0x0000833c, 0x00000000 },
- - { 0x00008340, 0x000107ff },
- - { 0x00008344, 0x01c81043 },
- - { 0x00008360, 0xffffffff },
- - { 0x00008364, 0xffffffff },
- - { 0x00008368, 0x00000000 },
- - { 0x00008370, 0x00000000 },
- - { 0x00008374, 0x000000ff },
- - { 0x00008378, 0x00000000 },
- - { 0x0000837c, 0x00000000 },
- - { 0x00008380, 0xffffffff },
- - { 0x00008384, 0xffffffff },
- - { 0x00008390, 0x0fffffff },
- - { 0x00008394, 0x0fffffff },
- - { 0x00008398, 0x00000000 },
- - { 0x0000839c, 0x00000000 },
- - { 0x000083a0, 0x00000000 },
- - { 0x00009808, 0x00000000 },
- - { 0x0000980c, 0xafe68e30 },
- - { 0x00009810, 0xfd14e000 },
- - { 0x00009814, 0x9c0a9f6b },
- - { 0x0000981c, 0x00000000 },
- - { 0x0000982c, 0x0000a000 },
- - { 0x00009830, 0x00000000 },
- - { 0x0000983c, 0x00200400 },
- - { 0x0000984c, 0x0040233c },
- - { 0x0000a84c, 0x0040233c },
- - { 0x00009854, 0x00000044 },
- - { 0x00009900, 0x00000000 },
- - { 0x00009904, 0x00000000 },
- - { 0x00009908, 0x00000000 },
- - { 0x0000990c, 0x00000000 },
- - { 0x00009910, 0x10002310 },
- - { 0x0000991c, 0x10000fff },
- - { 0x00009920, 0x04900000 },
- - { 0x0000a920, 0x04900000 },
- - { 0x00009928, 0x00000001 },
- - { 0x0000992c, 0x00000004 },
- - { 0x00009930, 0x00000000 },
- - { 0x0000a930, 0x00000000 },
- - { 0x00009934, 0x1e1f2022 },
- - { 0x00009938, 0x0a0b0c0d },
- - { 0x0000993c, 0x00000000 },
- - { 0x00009948, 0x9280c00a },
- - { 0x0000994c, 0x00020028 },
- - { 0x00009954, 0x5f3ca3de },
- - { 0x00009958, 0x0108ecff },
- - { 0x00009940, 0x14750604 },
- - { 0x0000c95c, 0x004b6a8e },
- - { 0x00009970, 0x990bb515 },
- - { 0x00009974, 0x00000000 },
- - { 0x00009978, 0x00000001 },
- - { 0x0000997c, 0x00000000 },
- - { 0x000099a0, 0x00000000 },
- - { 0x000099a4, 0x00000001 },
- - { 0x000099a8, 0x201fff00 },
- - { 0x000099ac, 0x0c6f0000 },
- - { 0x000099b0, 0x03051000 },
- - { 0x000099b4, 0x00000820 },
- - { 0x000099c4, 0x06336f77 },
- - { 0x000099c8, 0x6af65329 },
- - { 0x000099cc, 0x08f186c8 },
- - { 0x000099d0, 0x00046384 },
- - { 0x000099dc, 0x00000000 },
- - { 0x000099e0, 0x00000000 },
- - { 0x000099e4, 0xaaaaaaaa },
- - { 0x000099e8, 0x3c466478 },
- - { 0x000099ec, 0x0cc80caa },
- - { 0x000099f0, 0x00000000 },
- - { 0x000099fc, 0x00001042 },
- - { 0x0000a1f4, 0x00fffeff },
- - { 0x0000a1f8, 0x00f5f9ff },
- - { 0x0000a1fc, 0xb79f6427 },
- - { 0x0000a208, 0x803e4788 },
- - { 0x0000a210, 0x4080a333 },
- - { 0x0000a214, 0x40206c10 },
- - { 0x0000a218, 0x009c4060 },
- - { 0x0000a220, 0x01834061 },
- - { 0x0000a224, 0x00000400 },
- - { 0x0000a228, 0x000003b5 },
- - { 0x0000a22c, 0x233f7180 },
- - { 0x0000a234, 0x20202020 },
- - { 0x0000a238, 0x20202020 },
- - { 0x0000a23c, 0x13c889af },
- - { 0x0000a240, 0x38490a20 },
- - { 0x0000a244, 0x00000000 },
- - { 0x0000a248, 0xfffffffc },
- - { 0x0000a24c, 0x00000000 },
- - { 0x0000a254, 0x00000000 },
- - { 0x0000a258, 0x0cdbd380 },
- - { 0x0000a25c, 0x0f0f0f01 },
- - { 0x0000a260, 0xdfa91f01 },
- - { 0x0000a264, 0x00418a11 },
- - { 0x0000b264, 0x00418a11 },
- - { 0x0000a268, 0x00000000 },
- - { 0x0000a26c, 0x0e79e5c6 },
- - { 0x0000b26c, 0x0e79e5c6 },
- - { 0x0000d270, 0x00820820 },
- - { 0x0000a278, 0x1ce739ce },
- - { 0x0000a27c, 0x050701ce },
- - { 0x0000d35c, 0x07ffffef },
- - { 0x0000d360, 0x0fffffe7 },
- - { 0x0000d364, 0x17ffffe5 },
- - { 0x0000d368, 0x1fffffe4 },
- - { 0x0000d36c, 0x37ffffe3 },
- - { 0x0000d370, 0x3fffffe3 },
- - { 0x0000d374, 0x57ffffe3 },
- - { 0x0000d378, 0x5fffffe2 },
- - { 0x0000d37c, 0x7fffffe2 },
- - { 0x0000d380, 0x7f3c7bba },
- - { 0x0000d384, 0xf3307ff0 },
- - { 0x0000a388, 0x0c000000 },
- - { 0x0000a38c, 0x20202020 },
- - { 0x0000a390, 0x20202020 },
- - { 0x0000a394, 0x1ce739ce },
- - { 0x0000a398, 0x000001ce },
- - { 0x0000b398, 0x000001ce },
- - { 0x0000a39c, 0x00000001 },
- - { 0x0000a3c8, 0x00000246 },
- - { 0x0000a3cc, 0x20202020 },
- - { 0x0000a3d0, 0x20202020 },
- - { 0x0000a3d4, 0x20202020 },
- - { 0x0000a3dc, 0x1ce739ce },
- - { 0x0000a3e0, 0x000001ce },
- - { 0x0000a3e4, 0x00000000 },
- - { 0x0000a3e8, 0x18c43433 },
- - { 0x0000a3ec, 0x00f70081 },
- - { 0x0000a3f0, 0x01036a1e },
- - { 0x0000a3f4, 0x00000000 },
- - { 0x0000b3f4, 0x00000000 },
- - { 0x0000a7d8, 0x00000001 },
- - { 0x00007800, 0x00000800 },
- - { 0x00007804, 0x6c35ffb0 },
- - { 0x00007808, 0x6db6c000 },
- - { 0x0000780c, 0x6db6cb30 },
- - { 0x00007810, 0x6db6cb6c },
- - { 0x00007814, 0x0501e200 },
- - { 0x00007818, 0x0094128d },
- - { 0x0000781c, 0x976ee392 },
- - { 0x00007820, 0xf75ff6fc },
- - { 0x00007824, 0x00040000 },
- - { 0x00007828, 0xdb003012 },
- - { 0x0000782c, 0x04924914 },
- - { 0x00007830, 0x21084210 },
- - { 0x00007834, 0x00140000 },
- - { 0x00007838, 0x0e4548d8 },
- - { 0x0000783c, 0x54214514 },
- - { 0x00007840, 0x02025820 },
- - { 0x00007844, 0x71c0d388 },
- - { 0x00007848, 0x934934a8 },
- - { 0x00007850, 0x00000000 },
- - { 0x00007854, 0x00000800 },
- - { 0x00007858, 0x6c35ffb0 },
- - { 0x0000785c, 0x6db6c000 },
- - { 0x00007860, 0x6db6cb2c },
- - { 0x00007864, 0x6db6cb6c },
- - { 0x00007868, 0x0501e200 },
- - { 0x0000786c, 0x0094128d },
- - { 0x00007870, 0x976ee392 },
- - { 0x00007874, 0xf75ff6fc },
- - { 0x00007878, 0x00040000 },
- - { 0x0000787c, 0xdb003012 },
- - { 0x00007880, 0x04924914 },
- - { 0x00007884, 0x21084210 },
- - { 0x00007888, 0x001b6db0 },
- - { 0x0000788c, 0x00376b63 },
- - { 0x00007890, 0x06db6db6 },
- - { 0x00007894, 0x006d8000 },
- - { 0x00007898, 0x48100000 },
- - { 0x0000789c, 0x00000000 },
- - { 0x000078a0, 0x08000000 },
- - { 0x000078a4, 0x0007ffd8 },
- - { 0x000078a8, 0x0007ffd8 },
- - { 0x000078ac, 0x001c0020 },
- - { 0x000078b0, 0x000611eb },
- - { 0x000078b4, 0x40008080 },
- - { 0x000078b8, 0x2a850160 },
- -};
- -
- -static const u_int32_t ar9287Modes_tx_gain_9287_1_0[][6] = {
- - /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- - { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a304, 0x00000000, 0x00000000, 0x00004002, 0x00004002, 0x00004002 },
- - { 0x0000a308, 0x00000000, 0x00000000, 0x00008004, 0x00008004, 0x00008004 },
- - { 0x0000a30c, 0x00000000, 0x00000000, 0x0000c00a, 0x0000c00a, 0x0000c00a },
- - { 0x0000a310, 0x00000000, 0x00000000, 0x0001000c, 0x0001000c, 0x0001000c },
- - { 0x0000a314, 0x00000000, 0x00000000, 0x0001420b, 0x0001420b, 0x0001420b },
- - { 0x0000a318, 0x00000000, 0x00000000, 0x0001824a, 0x0001824a, 0x0001824a },
- - { 0x0000a31c, 0x00000000, 0x00000000, 0x0001c44a, 0x0001c44a, 0x0001c44a },
- - { 0x0000a320, 0x00000000, 0x00000000, 0x0002064a, 0x0002064a, 0x0002064a },
- - { 0x0000a324, 0x00000000, 0x00000000, 0x0002484a, 0x0002484a, 0x0002484a },
- - { 0x0000a328, 0x00000000, 0x00000000, 0x00028a4a, 0x00028a4a, 0x00028a4a },
- - { 0x0000a32c, 0x00000000, 0x00000000, 0x0002cc4a, 0x0002cc4a, 0x0002cc4a },
- - { 0x0000a330, 0x00000000, 0x00000000, 0x00030e4a, 0x00030e4a, 0x00030e4a },
- - { 0x0000a334, 0x00000000, 0x00000000, 0x00034e8a, 0x00034e8a, 0x00034e8a },
- - { 0x0000a338, 0x00000000, 0x00000000, 0x00038e8c, 0x00038e8c, 0x00038e8c },
- - { 0x0000a33c, 0x00000000, 0x00000000, 0x0003cecc, 0x0003cecc, 0x0003cecc },
- - { 0x0000a340, 0x00000000, 0x00000000, 0x00040ed4, 0x00040ed4, 0x00040ed4 },
- - { 0x0000a344, 0x00000000, 0x00000000, 0x00044edc, 0x00044edc, 0x00044edc },
- - { 0x0000a348, 0x00000000, 0x00000000, 0x00048ede, 0x00048ede, 0x00048ede },
- - { 0x0000a34c, 0x00000000, 0x00000000, 0x0004cf1e, 0x0004cf1e, 0x0004cf1e },
- - { 0x0000a350, 0x00000000, 0x00000000, 0x00050f5e, 0x00050f5e, 0x00050f5e },
- - { 0x0000a354, 0x00000000, 0x00000000, 0x00054f9e, 0x00054f9e, 0x00054f9e },
- - { 0x0000a780, 0x00000000, 0x00000000, 0x00000060, 0x00000060, 0x00000060 },
- - { 0x0000a784, 0x00000000, 0x00000000, 0x00004062, 0x00004062, 0x00004062 },
- - { 0x0000a788, 0x00000000, 0x00000000, 0x00008064, 0x00008064, 0x00008064 },
- - { 0x0000a78c, 0x00000000, 0x00000000, 0x0000c0a4, 0x0000c0a4, 0x0000c0a4 },
- - { 0x0000a790, 0x00000000, 0x00000000, 0x000100b0, 0x000100b0, 0x000100b0 },
- - { 0x0000a794, 0x00000000, 0x00000000, 0x000140b2, 0x000140b2, 0x000140b2 },
- - { 0x0000a798, 0x00000000, 0x00000000, 0x000180b4, 0x000180b4, 0x000180b4 },
- - { 0x0000a79c, 0x00000000, 0x00000000, 0x0001c0f4, 0x0001c0f4, 0x0001c0f4 },
- - { 0x0000a7a0, 0x00000000, 0x00000000, 0x00020134, 0x00020134, 0x00020134 },
- - { 0x0000a7a4, 0x00000000, 0x00000000, 0x000240fe, 0x000240fe, 0x000240fe },
- - { 0x0000a7a8, 0x00000000, 0x00000000, 0x0002813e, 0x0002813e, 0x0002813e },
- - { 0x0000a7ac, 0x00000000, 0x00000000, 0x0002c17e, 0x0002c17e, 0x0002c17e },
- - { 0x0000a7b0, 0x00000000, 0x00000000, 0x000301be, 0x000301be, 0x000301be },
- - { 0x0000a7b4, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- - { 0x0000a7b8, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- - { 0x0000a7bc, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- - { 0x0000a7c0, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- - { 0x0000a7c4, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- - { 0x0000a7c8, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- - { 0x0000a7cc, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- - { 0x0000a7d0, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- - { 0x0000a7d4, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
- - { 0x0000a274, 0x0a180000, 0x0a180000, 0x0a1aa000, 0x0a1aa000, 0x0a1aa000 },
- -};
- -
- -
- -static const u_int32_t ar9287Modes_rx_gain_9287_1_0[][6] = {
- - /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- - { 0x00009a00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120, 0x0000a120 },
- - { 0x00009a04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124, 0x0000a124 },
- - { 0x00009a08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128, 0x0000a128 },
- - { 0x00009a0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c, 0x0000a12c },
- - { 0x00009a10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130, 0x0000a130 },
- - { 0x00009a14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194, 0x0000a194 },
- - { 0x00009a18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198, 0x0000a198 },
- - { 0x00009a1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c, 0x0000a20c },
- - { 0x00009a20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210, 0x0000a210 },
- - { 0x00009a24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284, 0x0000a284 },
- - { 0x00009a28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288, 0x0000a288 },
- - { 0x00009a2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c, 0x0000a28c },
- - { 0x00009a30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290, 0x0000a290 },
- - { 0x00009a34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294, 0x0000a294 },
- - { 0x00009a38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0, 0x0000a2a0 },
- - { 0x00009a3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4, 0x0000a2a4 },
- - { 0x00009a40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8, 0x0000a2a8 },
- - { 0x00009a44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac, 0x0000a2ac },
- - { 0x00009a48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0, 0x0000a2b0 },
- - { 0x00009a4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4, 0x0000a2b4 },
- - { 0x00009a50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8, 0x0000a2b8 },
- - { 0x00009a54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4, 0x0000a2c4 },
- - { 0x00009a58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708, 0x0000a708 },
- - { 0x00009a5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c, 0x0000a70c },
- - { 0x00009a60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710, 0x0000a710 },
- - { 0x00009a64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04, 0x0000ab04 },
- - { 0x00009a68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08, 0x0000ab08 },
- - { 0x00009a6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c, 0x0000ab0c },
- - { 0x00009a70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10, 0x0000ab10 },
- - { 0x00009a74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14, 0x0000ab14 },
- - { 0x00009a78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18, 0x0000ab18 },
- - { 0x00009a7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c, 0x0000ab8c },
- - { 0x00009a80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90, 0x0000ab90 },
- - { 0x00009a84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94, 0x0000ab94 },
- - { 0x00009a88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98, 0x0000ab98 },
- - { 0x00009a8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4, 0x0000aba4 },
- - { 0x00009a90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8, 0x0000aba8 },
- - { 0x00009a94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04, 0x0000cb04 },
- - { 0x00009a98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08, 0x0000cb08 },
- - { 0x00009a9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c, 0x0000cb0c },
- - { 0x00009aa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10, 0x0000cb10 },
- - { 0x00009aa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14, 0x0000cb14 },
- - { 0x00009aa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18, 0x0000cb18 },
- - { 0x00009aac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c, 0x0000cb8c },
- - { 0x00009ab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90, 0x0000cb90 },
- - { 0x00009ab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18, 0x0000cf18 },
- - { 0x00009ab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24, 0x0000cf24 },
- - { 0x00009abc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28, 0x0000cf28 },
- - { 0x00009ac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314, 0x0000d314 },
- - { 0x00009ac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318, 0x0000d318 },
- - { 0x00009ac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c, 0x0000d38c },
- - { 0x00009acc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390, 0x0000d390 },
- - { 0x00009ad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394, 0x0000d394 },
- - { 0x00009ad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398, 0x0000d398 },
- - { 0x00009ad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4, 0x0000d3a4 },
- - { 0x00009adc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8, 0x0000d3a8 },
- - { 0x00009ae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac, 0x0000d3ac },
- - { 0x00009ae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0, 0x0000d3b0 },
- - { 0x00009ae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380, 0x0000f380 },
- - { 0x00009aec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384, 0x0000f384 },
- - { 0x00009af0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388, 0x0000f388 },
- - { 0x00009af4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710, 0x0000f710 },
- - { 0x00009af8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714, 0x0000f714 },
- - { 0x00009afc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718, 0x0000f718 },
- - { 0x00009b00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10, 0x0000fb10 },
- - { 0x00009b04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14, 0x0000fb14 },
- - { 0x00009b08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18, 0x0000fb18 },
- - { 0x00009b0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c, 0x0000fb8c },
- - { 0x00009b10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90, 0x0000fb90 },
- - { 0x00009b14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94, 0x0000fb94 },
- - { 0x00009b18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c, 0x0000ff8c },
- - { 0x00009b1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90, 0x0000ff90 },
- - { 0x00009b20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94, 0x0000ff94 },
- - { 0x00009b24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0, 0x0000ffa0 },
- - { 0x00009b28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4, 0x0000ffa4 },
- - { 0x00009b2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8, 0x0000ffa8 },
- - { 0x00009b30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac, 0x0000ffac },
- - { 0x00009b34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0, 0x0000ffb0 },
- - { 0x00009b38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4, 0x0000ffb4 },
- - { 0x00009b3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1, 0x0000ffa1 },
- - { 0x00009b40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5, 0x0000ffa5 },
- - { 0x00009b44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9, 0x0000ffa9 },
- - { 0x00009b48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad, 0x0000ffad },
- - { 0x00009b4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1, 0x0000ffb1 },
- - { 0x00009b50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5, 0x0000ffb5 },
- - { 0x00009b54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9, 0x0000ffb9 },
- - { 0x00009b58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5, 0x0000ffc5 },
- - { 0x00009b5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9, 0x0000ffc9 },
- - { 0x00009b60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd, 0x0000ffcd },
- - { 0x00009b64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1, 0x0000ffd1 },
- - { 0x00009b68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5, 0x0000ffd5 },
- - { 0x00009b6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2, 0x0000ffc2 },
- - { 0x00009b70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6, 0x0000ffc6 },
- - { 0x00009b74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca, 0x0000ffca },
- - { 0x00009b78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce, 0x0000ffce },
- - { 0x00009b7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2, 0x0000ffd2 },
- - { 0x00009b80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6, 0x0000ffd6 },
- - { 0x00009b84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda, 0x0000ffda },
- - { 0x00009b88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7, 0x0000ffc7 },
- - { 0x00009b8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb, 0x0000ffcb },
- - { 0x00009b90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf, 0x0000ffcf },
- - { 0x00009b94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3, 0x0000ffd3 },
- - { 0x00009b98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7, 0x0000ffd7 },
- - { 0x00009b9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009ba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009ba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009ba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009be0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009be4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009be8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000aa00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120, 0x0000a120 },
- - { 0x0000aa04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124, 0x0000a124 },
- - { 0x0000aa08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128, 0x0000a128 },
- - { 0x0000aa0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c, 0x0000a12c },
- - { 0x0000aa10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130, 0x0000a130 },
- - { 0x0000aa14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194, 0x0000a194 },
- - { 0x0000aa18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198, 0x0000a198 },
- - { 0x0000aa1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c, 0x0000a20c },
- - { 0x0000aa20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210, 0x0000a210 },
- - { 0x0000aa24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284, 0x0000a284 },
- - { 0x0000aa28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288, 0x0000a288 },
- - { 0x0000aa2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c, 0x0000a28c },
- - { 0x0000aa30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290, 0x0000a290 },
- - { 0x0000aa34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294, 0x0000a294 },
- - { 0x0000aa38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0, 0x0000a2a0 },
- - { 0x0000aa3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4, 0x0000a2a4 },
- - { 0x0000aa40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8, 0x0000a2a8 },
- - { 0x0000aa44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac, 0x0000a2ac },
- - { 0x0000aa48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0, 0x0000a2b0 },
- - { 0x0000aa4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4, 0x0000a2b4 },
- - { 0x0000aa50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8, 0x0000a2b8 },
- - { 0x0000aa54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4, 0x0000a2c4 },
- - { 0x0000aa58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708, 0x0000a708 },
- - { 0x0000aa5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c, 0x0000a70c },
- - { 0x0000aa60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710, 0x0000a710 },
- - { 0x0000aa64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04, 0x0000ab04 },
- - { 0x0000aa68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08, 0x0000ab08 },
- - { 0x0000aa6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c, 0x0000ab0c },
- - { 0x0000aa70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10, 0x0000ab10 },
- - { 0x0000aa74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14, 0x0000ab14 },
- - { 0x0000aa78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18, 0x0000ab18 },
- - { 0x0000aa7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c, 0x0000ab8c },
- - { 0x0000aa80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90, 0x0000ab90 },
- - { 0x0000aa84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94, 0x0000ab94 },
- - { 0x0000aa88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98, 0x0000ab98 },
- - { 0x0000aa8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4, 0x0000aba4 },
- - { 0x0000aa90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8, 0x0000aba8 },
- - { 0x0000aa94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04, 0x0000cb04 },
- - { 0x0000aa98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08, 0x0000cb08 },
- - { 0x0000aa9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c, 0x0000cb0c },
- - { 0x0000aaa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10, 0x0000cb10 },
- - { 0x0000aaa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14, 0x0000cb14 },
- - { 0x0000aaa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18, 0x0000cb18 },
- - { 0x0000aaac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c, 0x0000cb8c },
- - { 0x0000aab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90, 0x0000cb90 },
- - { 0x0000aab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18, 0x0000cf18 },
- - { 0x0000aab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24, 0x0000cf24 },
- - { 0x0000aabc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28, 0x0000cf28 },
- - { 0x0000aac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314, 0x0000d314 },
- - { 0x0000aac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318, 0x0000d318 },
- - { 0x0000aac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c, 0x0000d38c },
- - { 0x0000aacc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390, 0x0000d390 },
- - { 0x0000aad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394, 0x0000d394 },
- - { 0x0000aad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398, 0x0000d398 },
- - { 0x0000aad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4, 0x0000d3a4 },
- - { 0x0000aadc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8, 0x0000d3a8 },
- - { 0x0000aae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac, 0x0000d3ac },
- - { 0x0000aae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0, 0x0000d3b0 },
- - { 0x0000aae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380, 0x0000f380 },
- - { 0x0000aaec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384, 0x0000f384 },
- - { 0x0000aaf0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388, 0x0000f388 },
- - { 0x0000aaf4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710, 0x0000f710 },
- - { 0x0000aaf8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714, 0x0000f714 },
- - { 0x0000aafc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718, 0x0000f718 },
- - { 0x0000ab00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10, 0x0000fb10 },
- - { 0x0000ab04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14, 0x0000fb14 },
- - { 0x0000ab08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18, 0x0000fb18 },
- - { 0x0000ab0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c, 0x0000fb8c },
- - { 0x0000ab10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90, 0x0000fb90 },
- - { 0x0000ab14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94, 0x0000fb94 },
- - { 0x0000ab18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c, 0x0000ff8c },
- - { 0x0000ab1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90, 0x0000ff90 },
- - { 0x0000ab20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94, 0x0000ff94 },
- - { 0x0000ab24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0, 0x0000ffa0 },
- - { 0x0000ab28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4, 0x0000ffa4 },
- - { 0x0000ab2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8, 0x0000ffa8 },
- - { 0x0000ab30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac, 0x0000ffac },
- - { 0x0000ab34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0, 0x0000ffb0 },
- - { 0x0000ab38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4, 0x0000ffb4 },
- - { 0x0000ab3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1, 0x0000ffa1 },
- - { 0x0000ab40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5, 0x0000ffa5 },
- - { 0x0000ab44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9, 0x0000ffa9 },
- - { 0x0000ab48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad, 0x0000ffad },
- - { 0x0000ab4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1, 0x0000ffb1 },
- - { 0x0000ab50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5, 0x0000ffb5 },
- - { 0x0000ab54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9, 0x0000ffb9 },
- - { 0x0000ab58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5, 0x0000ffc5 },
- - { 0x0000ab5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9, 0x0000ffc9 },
- - { 0x0000ab60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd, 0x0000ffcd },
- - { 0x0000ab64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1, 0x0000ffd1 },
- - { 0x0000ab68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5, 0x0000ffd5 },
- - { 0x0000ab6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2, 0x0000ffc2 },
- - { 0x0000ab70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6, 0x0000ffc6 },
- - { 0x0000ab74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca, 0x0000ffca },
- - { 0x0000ab78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce, 0x0000ffce },
- - { 0x0000ab7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2, 0x0000ffd2 },
- - { 0x0000ab80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6, 0x0000ffd6 },
- - { 0x0000ab84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda, 0x0000ffda },
- - { 0x0000ab88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7, 0x0000ffc7 },
- - { 0x0000ab8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb, 0x0000ffcb },
- - { 0x0000ab90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf, 0x0000ffcf },
- - { 0x0000ab94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3, 0x0000ffd3 },
- - { 0x0000ab98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7, 0x0000ffd7 },
- - { 0x0000ab9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000aba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000aba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000aba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abe0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abe4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abe8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009848, 0x00000000, 0x00000000, 0x00001067, 0x00001067, 0x00001067 },
- - { 0x0000a848, 0x00000000, 0x00000000, 0x00001067, 0x00001067, 0x00001067 },
- -};
- -
- -static const u_int32_t ar9287PciePhy_clkreq_always_on_L1_9287_1_0[][2] = {
- - {0x00004040, 0x9248fd00 },
- - {0x00004040, 0x24924924 },
- - {0x00004040, 0xa8000019 },
- - {0x00004040, 0x13160820 },
- - {0x00004040, 0xe5980560 },
- - {0x00004040, 0xc01dcffd },
- - {0x00004040, 0x1aaabe41 },
- - {0x00004040, 0xbe105554 },
- - {0x00004040, 0x00043007 },
- - {0x00004044, 0x00000000 },
- -};
- -
- -static const u_int32_t ar9287PciePhy_clkreq_off_L1_9287_1_0[][2] = {
- - {0x00004040, 0x9248fd00 },
- - {0x00004040, 0x24924924 },
- - {0x00004040, 0xa8000019 },
- - {0x00004040, 0x13160820 },
- - {0x00004040, 0xe5980560 },
- - {0x00004040, 0xc01dcffc },
- - {0x00004040, 0x1aaabe41 },
- - {0x00004040, 0xbe105554 },
- - {0x00004040, 0x00043007 },
- - {0x00004044, 0x00000000 },
- -};
- -
- -/* AR9287 Revision 11 */
- -
- -static const u_int32_t ar9287Modes_9287_1_1[][6] = {
- - /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- - { 0x00001030, 0x00000000, 0x00000000, 0x000002c0, 0x00000160, 0x000001e0 },
- - { 0x00001070, 0x00000000, 0x00000000, 0x00000318, 0x0000018c, 0x000001e0 },
- - { 0x000010b0, 0x00000000, 0x00000000, 0x00007c70, 0x00003e38, 0x00001180 },
- - { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
- - { 0x00008014, 0x00000000, 0x00000000, 0x10801600, 0x08400b00, 0x06e006e0 },
- - { 0x0000801c, 0x00000000, 0x00000000, 0x12e00057, 0x12e0002b, 0x0988004f },
- - { 0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810 },
- - { 0x000081d0, 0x00003200, 0x00003200, 0x0000320a, 0x0000320a, 0x0000320a },
- - { 0x00008318, 0x00000000, 0x00000000, 0x00006880, 0x00003440, 0x00006880 },
- - { 0x00009804, 0x00000000, 0x00000000, 0x000003c4, 0x00000300, 0x00000303 },
- - { 0x00009820, 0x00000000, 0x00000000, 0x02020200, 0x02020200, 0x02020200 },
- - { 0x00009824, 0x00000000, 0x00000000, 0x01000e0e, 0x01000e0e, 0x01000e0e },
- - { 0x00009828, 0x00000000, 0x00000000, 0x3a020001, 0x3a020001, 0x3a020001 },
- - { 0x00009834, 0x00000000, 0x00000000, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- - { 0x00009838, 0x00000003, 0x00000003, 0x00000007, 0x00000007, 0x00000007 },
- - { 0x00009840, 0x206a002e, 0x206a002e, 0x206a012e, 0x206a012e, 0x206a012e },
- - { 0x00009844, 0x03720000, 0x03720000, 0x037216a0, 0x037216a0, 0x037216a0 },
- - { 0x00009850, 0x60000000, 0x60000000, 0x6d4000e2, 0x6c4000e2, 0x6c4000e2 },
- - { 0x00009858, 0x7c000d00, 0x7c000d00, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
- - { 0x0000985c, 0x3100005e, 0x3100005e, 0x3139605e, 0x31395d5e, 0x31395d5e },
- - { 0x00009860, 0x00058d00, 0x00058d00, 0x00058d20, 0x00058d20, 0x00058d18 },
- - { 0x00009864, 0x00000e00, 0x00000e00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- - { 0x00009868, 0x000040c0, 0x000040c0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
- - { 0x0000986c, 0x00000080, 0x00000080, 0x06903881, 0x06903881, 0x06903881 },
- - { 0x00009914, 0x00000000, 0x00000000, 0x00001130, 0x00000898, 0x000007d0 },
- - { 0x00009918, 0x00000000, 0x00000000, 0x00000016, 0x0000000b, 0x00000016 },
- - { 0x00009924, 0xd00a8a01, 0xd00a8a01, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d },
- - { 0x00009944, 0xefbc0000, 0xefbc0000, 0xefbc1010, 0xefbc1010, 0xefbc1010 },
- - { 0x00009960, 0x00000000, 0x00000000, 0x00000010, 0x00000010, 0x00000010 },
- - { 0x0000a960, 0x00000000, 0x00000000, 0x00000010, 0x00000010, 0x00000010 },
- - { 0x00009964, 0x00000000, 0x00000000, 0x00000210, 0x00000210, 0x00000210 },
- - { 0x0000c968, 0x00000200, 0x00000200, 0x000003ce, 0x000003ce, 0x000003ce },
- - { 0x000099b8, 0x00000000, 0x00000000, 0x0000001c, 0x0000001c, 0x0000001c },
- - { 0x000099bc, 0x00000000, 0x00000000, 0x00000c00, 0x00000c00, 0x00000c00 },
- - { 0x000099c0, 0x00000000, 0x00000000, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
- - { 0x0000a204, 0x00000440, 0x00000440, 0x00000444, 0x00000444, 0x00000444 },
- - { 0x0000a20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000b20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a21c, 0x1803800a, 0x1803800a, 0x1883800a, 0x1883800a, 0x1883800a },
- - { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- - { 0x0000a250, 0x00000000, 0x00000000, 0x0004a000, 0x0004a000, 0x0004a000 },
- - { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
- - { 0x0000a3d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- -};
- -
- -static const u_int32_t ar9287Common_9287_1_1[][2] = {
- - { 0x0000000c, 0x00000000 },
- - { 0x00000030, 0x00020015 },
- - { 0x00000034, 0x00000005 },
- - { 0x00000040, 0x00000000 },
- - { 0x00000044, 0x00000008 },
- - { 0x00000048, 0x00000008 },
- - { 0x0000004c, 0x00000010 },
- - { 0x00000050, 0x00000000 },
- - { 0x00000054, 0x0000001f },
- - { 0x00000800, 0x00000000 },
- - { 0x00000804, 0x00000000 },
- - { 0x00000808, 0x00000000 },
- - { 0x0000080c, 0x00000000 },
- - { 0x00000810, 0x00000000 },
- - { 0x00000814, 0x00000000 },
- - { 0x00000818, 0x00000000 },
- - { 0x0000081c, 0x00000000 },
- - { 0x00000820, 0x00000000 },
- - { 0x00000824, 0x00000000 },
- - { 0x00001040, 0x002ffc0f },
- - { 0x00001044, 0x002ffc0f },
- - { 0x00001048, 0x002ffc0f },
- - { 0x0000104c, 0x002ffc0f },
- - { 0x00001050, 0x002ffc0f },
- - { 0x00001054, 0x002ffc0f },
- - { 0x00001058, 0x002ffc0f },
- - { 0x0000105c, 0x002ffc0f },
- - { 0x00001060, 0x002ffc0f },
- - { 0x00001064, 0x002ffc0f },
- - { 0x00001230, 0x00000000 },
- - { 0x00001270, 0x00000000 },
- - { 0x00001038, 0x00000000 },
- - { 0x00001078, 0x00000000 },
- - { 0x000010b8, 0x00000000 },
- - { 0x000010f8, 0x00000000 },
- - { 0x00001138, 0x00000000 },
- - { 0x00001178, 0x00000000 },
- - { 0x000011b8, 0x00000000 },
- - { 0x000011f8, 0x00000000 },
- - { 0x00001238, 0x00000000 },
- - { 0x00001278, 0x00000000 },
- - { 0x000012b8, 0x00000000 },
- - { 0x000012f8, 0x00000000 },
- - { 0x00001338, 0x00000000 },
- - { 0x00001378, 0x00000000 },
- - { 0x000013b8, 0x00000000 },
- - { 0x000013f8, 0x00000000 },
- - { 0x00001438, 0x00000000 },
- - { 0x00001478, 0x00000000 },
- - { 0x000014b8, 0x00000000 },
- - { 0x000014f8, 0x00000000 },
- - { 0x00001538, 0x00000000 },
- - { 0x00001578, 0x00000000 },
- - { 0x000015b8, 0x00000000 },
- - { 0x000015f8, 0x00000000 },
- - { 0x00001638, 0x00000000 },
- - { 0x00001678, 0x00000000 },
- - { 0x000016b8, 0x00000000 },
- - { 0x000016f8, 0x00000000 },
- - { 0x00001738, 0x00000000 },
- - { 0x00001778, 0x00000000 },
- - { 0x000017b8, 0x00000000 },
- - { 0x000017f8, 0x00000000 },
- - { 0x0000103c, 0x00000000 },
- - { 0x0000107c, 0x00000000 },
- - { 0x000010bc, 0x00000000 },
- - { 0x000010fc, 0x00000000 },
- - { 0x0000113c, 0x00000000 },
- - { 0x0000117c, 0x00000000 },
- - { 0x000011bc, 0x00000000 },
- - { 0x000011fc, 0x00000000 },
- - { 0x0000123c, 0x00000000 },
- - { 0x0000127c, 0x00000000 },
- - { 0x000012bc, 0x00000000 },
- - { 0x000012fc, 0x00000000 },
- - { 0x0000133c, 0x00000000 },
- - { 0x0000137c, 0x00000000 },
- - { 0x000013bc, 0x00000000 },
- - { 0x000013fc, 0x00000000 },
- - { 0x0000143c, 0x00000000 },
- - { 0x0000147c, 0x00000000 },
- - { 0x00004030, 0x00000002 },
- - { 0x0000403c, 0x00000002 },
- - { 0x00004024, 0x0000001f },
- - { 0x00004060, 0x00000000 },
- - { 0x00004064, 0x00000000 },
- - { 0x00007010, 0x00000033 },
- - { 0x00007020, 0x00000000 },
- - { 0x00007034, 0x00000002 },
- - { 0x00007038, 0x000004c2 },
- - { 0x00008004, 0x00000000 },
- - { 0x00008008, 0x00000000 },
- - { 0x0000800c, 0x00000000 },
- - { 0x00008018, 0x00000700 },
- - { 0x00008020, 0x00000000 },
- - { 0x00008038, 0x00000000 },
- - { 0x0000803c, 0x00000000 },
- - { 0x00008048, 0x40000000 },
- - { 0x00008054, 0x00000000 },
- - { 0x00008058, 0x00000000 },
- - { 0x0000805c, 0x000fc78f },
- - { 0x00008060, 0x0000000f },
- - { 0x00008064, 0x00000000 },
- - { 0x00008070, 0x00000000 },
- - { 0x000080c0, 0x2a80001a },
- - { 0x000080c4, 0x05dc01e0 },
- - { 0x000080c8, 0x1f402710 },
- - { 0x000080cc, 0x01f40000 },
- - { 0x000080d0, 0x00001e00 },
- - { 0x000080d4, 0x00000000 },
- - { 0x000080d8, 0x00400000 },
- - { 0x000080e0, 0xffffffff },
- - { 0x000080e4, 0x0000ffff },
- - { 0x000080e8, 0x003f3f3f },
- - { 0x000080ec, 0x00000000 },
- - { 0x000080f0, 0x00000000 },
- - { 0x000080f4, 0x00000000 },
- - { 0x000080f8, 0x00000000 },
- - { 0x000080fc, 0x00020000 },
- - { 0x00008100, 0x00020000 },
- - { 0x00008104, 0x00000001 },
- - { 0x00008108, 0x00000052 },
- - { 0x0000810c, 0x00000000 },
- - { 0x00008110, 0x00000168 },
- - { 0x00008118, 0x000100aa },
- - { 0x0000811c, 0x00003210 },
- - { 0x00008124, 0x00000000 },
- - { 0x00008128, 0x00000000 },
- - { 0x0000812c, 0x00000000 },
- - { 0x00008130, 0x00000000 },
- - { 0x00008134, 0x00000000 },
- - { 0x00008138, 0x00000000 },
- - { 0x0000813c, 0x00000000 },
- - { 0x00008144, 0xffffffff },
- - { 0x00008168, 0x00000000 },
- - { 0x0000816c, 0x00000000 },
- - { 0x00008170, 0x18487320 },
- - { 0x00008174, 0xfaa4fa50 },
- - { 0x00008178, 0x00000100 },
- - { 0x0000817c, 0x00000000 },
- - { 0x000081c0, 0x00000000 },
- - { 0x000081c4, 0x00000000 },
- - { 0x000081d4, 0x00000000 },
- - { 0x000081ec, 0x00000000 },
- - { 0x000081f0, 0x00000000 },
- - { 0x000081f4, 0x00000000 },
- - { 0x000081f8, 0x00000000 },
- - { 0x000081fc, 0x00000000 },
- - { 0x00008200, 0x00000000 },
- - { 0x00008204, 0x00000000 },
- - { 0x00008208, 0x00000000 },
- - { 0x0000820c, 0x00000000 },
- - { 0x00008210, 0x00000000 },
- - { 0x00008214, 0x00000000 },
- - { 0x00008218, 0x00000000 },
- - { 0x0000821c, 0x00000000 },
- - { 0x00008220, 0x00000000 },
- - { 0x00008224, 0x00000000 },
- - { 0x00008228, 0x00000000 },
- - { 0x0000822c, 0x00000000 },
- - { 0x00008230, 0x00000000 },
- - { 0x00008234, 0x00000000 },
- - { 0x00008238, 0x00000000 },
- - { 0x0000823c, 0x00000000 },
- - { 0x00008240, 0x00100000 },
- - { 0x00008244, 0x0010f400 },
- - { 0x00008248, 0x00000100 },
- - { 0x0000824c, 0x0001e800 },
- - { 0x00008250, 0x00000000 },
- - { 0x00008254, 0x00000000 },
- - { 0x00008258, 0x00000000 },
- - { 0x0000825c, 0x400000ff },
- - { 0x00008260, 0x00080922 },
- - { 0x00008264, 0x88a00010 },
- - { 0x00008270, 0x00000000 },
- - { 0x00008274, 0x40000000 },
- - { 0x00008278, 0x003e4180 },
- - { 0x0000827c, 0x00000000 },
- - { 0x00008284, 0x0000002c },
- - { 0x00008288, 0x0000002c },
- - { 0x0000828c, 0x000000ff },
- - { 0x00008294, 0x00000000 },
- - { 0x00008298, 0x00000000 },
- - { 0x0000829c, 0x00000000 },
- - { 0x00008300, 0x00000040 },
- - { 0x00008314, 0x00000000 },
- - { 0x00008328, 0x00000000 },
- - { 0x0000832c, 0x00000007 },
- - { 0x00008330, 0x00000302 },
- - { 0x00008334, 0x00000e00 },
- - { 0x00008338, 0x00ff0000 },
- - { 0x0000833c, 0x00000000 },
- - { 0x00008340, 0x000107ff },
- - { 0x00008344, 0x01c81043 },
- - { 0x00008360, 0xffffffff },
- - { 0x00008364, 0xffffffff },
- - { 0x00008368, 0x00000000 },
- - { 0x00008370, 0x00000000 },
- - { 0x00008374, 0x000000ff },
- - { 0x00008378, 0x00000000 },
- - { 0x0000837c, 0x00000000 },
- - { 0x00008380, 0xffffffff },
- - { 0x00008384, 0xffffffff },
- - { 0x00008390, 0x0fffffff },
- - { 0x00008394, 0x0fffffff },
- - { 0x00008398, 0x00000000 },
- - { 0x0000839c, 0x00000000 },
- - { 0x000083a0, 0x00000000 },
- - { 0x00009808, 0x00000000 },
- - { 0x0000980c, 0xafe68e30 },
- - { 0x00009810, 0xfd14e000 },
- - { 0x00009814, 0x9c0a9f6b },
- - { 0x0000981c, 0x00000000 },
- - { 0x0000982c, 0x0000a000 },
- - { 0x00009830, 0x00000000 },
- - { 0x0000983c, 0x00200400 },
- - { 0x0000984c, 0x0040233c },
- - { 0x0000a84c, 0x0040233c },
- - { 0x00009854, 0x00000044 },
- - { 0x00009900, 0x00000000 },
- - { 0x00009904, 0x00000000 },
- - { 0x00009908, 0x00000000 },
- - { 0x0000990c, 0x00000000 },
- - { 0x00009910, 0x10002310 },
- - { 0x0000991c, 0x10000fff },
- - { 0x00009920, 0x04900000 },
- - { 0x0000a920, 0x04900000 },
- - { 0x00009928, 0x00000001 },
- - { 0x0000992c, 0x00000004 },
- - { 0x00009930, 0x00000000 },
- - { 0x0000a930, 0x00000000 },
- - { 0x00009934, 0x1e1f2022 },
- - { 0x00009938, 0x0a0b0c0d },
- - { 0x0000993c, 0x00000000 },
- - { 0x00009948, 0x9280c00a },
- - { 0x0000994c, 0x00020028 },
- - { 0x00009954, 0x5f3ca3de },
- - { 0x00009958, 0x0108ecff },
- - { 0x00009940, 0x14750604 },
- - { 0x0000c95c, 0x004b6a8e },
- - { 0x00009970, 0x990bb514 },
- - { 0x00009974, 0x00000000 },
- - { 0x00009978, 0x00000001 },
- - { 0x0000997c, 0x00000000 },
- - { 0x000099a0, 0x00000000 },
- - { 0x000099a4, 0x00000001 },
- - { 0x000099a8, 0x201fff00 },
- - { 0x000099ac, 0x0c6f0000 },
- - { 0x000099b0, 0x03051000 },
- - { 0x000099b4, 0x00000820 },
- - { 0x000099c4, 0x06336f77 },
- - { 0x000099c8, 0x6af6532f },
- - { 0x000099cc, 0x08f186c8 },
- - { 0x000099d0, 0x00046384 },
- - { 0x000099dc, 0x00000000 },
- - { 0x000099e0, 0x00000000 },
- - { 0x000099e4, 0xaaaaaaaa },
- - { 0x000099e8, 0x3c466478 },
- - { 0x000099ec, 0x0cc80caa },
- - { 0x000099f0, 0x00000000 },
- - { 0x000099fc, 0x00001042 },
- - { 0x0000a208, 0x803e4788 },
- - { 0x0000a210, 0x4080a333 },
- - { 0x0000a214, 0x40206c10 },
- - { 0x0000a218, 0x009c4060 },
- - { 0x0000a220, 0x01834061 },
- - { 0x0000a224, 0x00000400 },
- - { 0x0000a228, 0x000003b5 },
- - { 0x0000a22c, 0x233f7180 },
- - { 0x0000a234, 0x20202020 },
- - { 0x0000a238, 0x20202020 },
- - { 0x0000a23c, 0x13c889af },
- - { 0x0000a240, 0x38490a20 },
- - { 0x0000a244, 0x00000000 },
- - { 0x0000a248, 0xfffffffc },
- - { 0x0000a24c, 0x00000000 },
- - { 0x0000a254, 0x00000000 },
- - { 0x0000a258, 0x0cdbd380 },
- - { 0x0000a25c, 0x0f0f0f01 },
- - { 0x0000a260, 0xdfa91f01 },
- - { 0x0000a264, 0x00418a11 },
- - { 0x0000b264, 0x00418a11 },
- - { 0x0000a268, 0x00000000 },
- - { 0x0000a26c, 0x0e79e5c6 },
- - { 0x0000b26c, 0x0e79e5c6 },
- - { 0x0000d270, 0x00820820 },
- - { 0x0000a278, 0x1ce739ce },
- - { 0x0000a27c, 0x050701ce },
- - { 0x0000d35c, 0x07ffffef },
- - { 0x0000d360, 0x0fffffe7 },
- - { 0x0000d364, 0x17ffffe5 },
- - { 0x0000d368, 0x1fffffe4 },
- - { 0x0000d36c, 0x37ffffe3 },
- - { 0x0000d370, 0x3fffffe3 },
- - { 0x0000d374, 0x57ffffe3 },
- - { 0x0000d378, 0x5fffffe2 },
- - { 0x0000d37c, 0x7fffffe2 },
- - { 0x0000d380, 0x7f3c7bba },
- - { 0x0000d384, 0xf3307ff0 },
- - { 0x0000a388, 0x0c000000 },
- - { 0x0000a38c, 0x20202020 },
- - { 0x0000a390, 0x20202020 },
- - { 0x0000a394, 0x1ce739ce },
- - { 0x0000a398, 0x000001ce },
- - { 0x0000b398, 0x000001ce },
- - { 0x0000a39c, 0x00000001 },
- - { 0x0000a3c8, 0x00000246 },
- - { 0x0000a3cc, 0x20202020 },
- - { 0x0000a3d0, 0x20202020 },
- - { 0x0000a3d4, 0x20202020 },
- - { 0x0000a3dc, 0x1ce739ce },
- - { 0x0000a3e0, 0x000001ce },
- - { 0x0000a3e4, 0x00000000 },
- - { 0x0000a3e8, 0x18c43433 },
- - { 0x0000a3ec, 0x00f70081 },
- - { 0x0000a3f0, 0x01036a1e },
- - { 0x0000a3f4, 0x00000000 },
- - { 0x0000b3f4, 0x00000000 },
- - { 0x0000a7d8, 0x000003f1 },
- - { 0x00007800, 0x00000800 },
- - { 0x00007804, 0x6c35ffd2 },
- - { 0x00007808, 0x6db6c000 },
- - { 0x0000780c, 0x6db6cb30 },
- - { 0x00007810, 0x6db6cb6c },
- - { 0x00007814, 0x0501e200 },
- - { 0x00007818, 0x0094128d },
- - { 0x0000781c, 0x976ee392 },
- - { 0x00007820, 0xf75ff6fc },
- - { 0x00007824, 0x00040000 },
- - { 0x00007828, 0xdb003012 },
- - { 0x0000782c, 0x04924914 },
- - { 0x00007830, 0x21084210 },
- - { 0x00007834, 0x00140000 },
- - { 0x00007838, 0x0e4548d8 },
- - { 0x0000783c, 0x54214514 },
- - { 0x00007840, 0x02025830 },
- - { 0x00007844, 0x71c0d388 },
- - { 0x00007848, 0x934934a8 },
- - { 0x00007850, 0x00000000 },
- - { 0x00007854, 0x00000800 },
- - { 0x00007858, 0x6c35ffd2 },
- - { 0x0000785c, 0x6db6c000 },
- - { 0x00007860, 0x6db6cb30 },
- - { 0x00007864, 0x6db6cb6c },
- - { 0x00007868, 0x0501e200 },
- - { 0x0000786c, 0x0094128d },
- - { 0x00007870, 0x976ee392 },
- - { 0x00007874, 0xf75ff6fc },
- - { 0x00007878, 0x00040000 },
- - { 0x0000787c, 0xdb003012 },
- - { 0x00007880, 0x04924914 },
- - { 0x00007884, 0x21084210 },
- - { 0x00007888, 0x001b6db0 },
- - { 0x0000788c, 0x00376b63 },
- - { 0x00007890, 0x06db6db6 },
- - { 0x00007894, 0x006d8000 },
- - { 0x00007898, 0x48100000 },
- - { 0x0000789c, 0x00000000 },
- - { 0x000078a0, 0x08000000 },
- - { 0x000078a4, 0x0007ffd8 },
- - { 0x000078a8, 0x0007ffd8 },
- - { 0x000078ac, 0x001c0020 },
- - { 0x000078b0, 0x00060aeb },
- - { 0x000078b4, 0x40008080 },
- - { 0x000078b8, 0x2a850160 },
- -};
- -
- -/*
- - * For Japanese regulatory requirements, 2484 MHz requires the following three
- - * registers be programmed differently from the channel between 2412 and 2472 MHz.
- - */
- -static const u_int32_t ar9287Common_normal_cck_fir_coeff_92871_1[][2] = {
- - { 0x0000a1f4, 0x00fffeff },
- - { 0x0000a1f8, 0x00f5f9ff },
- - { 0x0000a1fc, 0xb79f6427 },
- -};
- -
- -static const u_int32_t ar9287Common_japan_2484_cck_fir_coeff_92871_1[][2] = {
- - { 0x0000a1f4, 0x00000000 },
- - { 0x0000a1f8, 0xefff0301 },
- - { 0x0000a1fc, 0xca9228ee },
- -};
- -
- -static const u_int32_t ar9287Modes_tx_gain_9287_1_1[][6] = {
- - /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- - { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a304, 0x00000000, 0x00000000, 0x00004002, 0x00004002, 0x00004002 },
- - { 0x0000a308, 0x00000000, 0x00000000, 0x00008004, 0x00008004, 0x00008004 },
- - { 0x0000a30c, 0x00000000, 0x00000000, 0x0000c00a, 0x0000c00a, 0x0000c00a },
- - { 0x0000a310, 0x00000000, 0x00000000, 0x0001000c, 0x0001000c, 0x0001000c },
- - { 0x0000a314, 0x00000000, 0x00000000, 0x0001420b, 0x0001420b, 0x0001420b },
- - { 0x0000a318, 0x00000000, 0x00000000, 0x0001824a, 0x0001824a, 0x0001824a },
- - { 0x0000a31c, 0x00000000, 0x00000000, 0x0001c44a, 0x0001c44a, 0x0001c44a },
- - { 0x0000a320, 0x00000000, 0x00000000, 0x0002064a, 0x0002064a, 0x0002064a },
- - { 0x0000a324, 0x00000000, 0x00000000, 0x0002484a, 0x0002484a, 0x0002484a },
- - { 0x0000a328, 0x00000000, 0x00000000, 0x00028a4a, 0x00028a4a, 0x00028a4a },
- - { 0x0000a32c, 0x00000000, 0x00000000, 0x0002cc4a, 0x0002cc4a, 0x0002cc4a },
- - { 0x0000a330, 0x00000000, 0x00000000, 0x00030e4a, 0x00030e4a, 0x00030e4a },
- - { 0x0000a334, 0x00000000, 0x00000000, 0x00034e8a, 0x00034e8a, 0x00034e8a },
- - { 0x0000a338, 0x00000000, 0x00000000, 0x00038e8c, 0x00038e8c, 0x00038e8c },
- - { 0x0000a33c, 0x00000000, 0x00000000, 0x0003cecc, 0x0003cecc, 0x0003cecc },
- - { 0x0000a340, 0x00000000, 0x00000000, 0x00040ed4, 0x00040ed4, 0x00040ed4 },
- - { 0x0000a344, 0x00000000, 0x00000000, 0x00044edc, 0x00044edc, 0x00044edc },
- - { 0x0000a348, 0x00000000, 0x00000000, 0x00048ede, 0x00048ede, 0x00048ede },
- - { 0x0000a34c, 0x00000000, 0x00000000, 0x0004cf1e, 0x0004cf1e, 0x0004cf1e },
- - { 0x0000a350, 0x00000000, 0x00000000, 0x00050f5e, 0x00050f5e, 0x00050f5e },
- - { 0x0000a354, 0x00000000, 0x00000000, 0x00054f9e, 0x00054f9e, 0x00054f9e },
- - { 0x0000a780, 0x00000000, 0x00000000, 0x00000062, 0x00000062, 0x00000062 },
- - { 0x0000a784, 0x00000000, 0x00000000, 0x00004064, 0x00004064, 0x00004064 },
- - { 0x0000a788, 0x00000000, 0x00000000, 0x000080a4, 0x000080a4, 0x000080a4 },
- - { 0x0000a78c, 0x00000000, 0x00000000, 0x0000c0aa, 0x0000c0aa, 0x0000c0aa },
- - { 0x0000a790, 0x00000000, 0x00000000, 0x000100ac, 0x000100ac, 0x000100ac },
- - { 0x0000a794, 0x00000000, 0x00000000, 0x000140b4, 0x000140b4, 0x000140b4 },
- - { 0x0000a798, 0x00000000, 0x00000000, 0x000180f4, 0x000180f4, 0x000180f4 },
- - { 0x0000a79c, 0x00000000, 0x00000000, 0x0001c134, 0x0001c134, 0x0001c134 },
- - { 0x0000a7a0, 0x00000000, 0x00000000, 0x00020174, 0x00020174, 0x00020174 },
- - { 0x0000a7a4, 0x00000000, 0x00000000, 0x0002417c, 0x0002417c, 0x0002417c },
- - { 0x0000a7a8, 0x00000000, 0x00000000, 0x0002817e, 0x0002817e, 0x0002817e },
- - { 0x0000a7ac, 0x00000000, 0x00000000, 0x0002c1be, 0x0002c1be, 0x0002c1be },
- - { 0x0000a7b0, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- - { 0x0000a7b4, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- - { 0x0000a7b8, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- - { 0x0000a7bc, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- - { 0x0000a7c0, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- - { 0x0000a7c4, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- - { 0x0000a7c8, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- - { 0x0000a7cc, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- - { 0x0000a7d0, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- - { 0x0000a7d4, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
- - { 0x0000a274, 0x0a180000, 0x0a180000, 0x0a1aa000, 0x0a1aa000, 0x0a1aa000 },
- -};
- -
- -static const u_int32_t ar9287Modes_rx_gain_9287_1_1[][6] = {
- - /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
- - { 0x00009a00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120, 0x0000a120 },
- - { 0x00009a04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124, 0x0000a124 },
- - { 0x00009a08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128, 0x0000a128 },
- - { 0x00009a0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c, 0x0000a12c },
- - { 0x00009a10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130, 0x0000a130 },
- - { 0x00009a14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194, 0x0000a194 },
- - { 0x00009a18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198, 0x0000a198 },
- - { 0x00009a1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c, 0x0000a20c },
- - { 0x00009a20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210, 0x0000a210 },
- - { 0x00009a24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284, 0x0000a284 },
- - { 0x00009a28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288, 0x0000a288 },
- - { 0x00009a2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c, 0x0000a28c },
- - { 0x00009a30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290, 0x0000a290 },
- - { 0x00009a34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294, 0x0000a294 },
- - { 0x00009a38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0, 0x0000a2a0 },
- - { 0x00009a3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4, 0x0000a2a4 },
- - { 0x00009a40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8, 0x0000a2a8 },
- - { 0x00009a44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac, 0x0000a2ac },
- - { 0x00009a48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0, 0x0000a2b0 },
- - { 0x00009a4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4, 0x0000a2b4 },
- - { 0x00009a50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8, 0x0000a2b8 },
- - { 0x00009a54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4, 0x0000a2c4 },
- - { 0x00009a58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708, 0x0000a708 },
- - { 0x00009a5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c, 0x0000a70c },
- - { 0x00009a60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710, 0x0000a710 },
- - { 0x00009a64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04, 0x0000ab04 },
- - { 0x00009a68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08, 0x0000ab08 },
- - { 0x00009a6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c, 0x0000ab0c },
- - { 0x00009a70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10, 0x0000ab10 },
- - { 0x00009a74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14, 0x0000ab14 },
- - { 0x00009a78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18, 0x0000ab18 },
- - { 0x00009a7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c, 0x0000ab8c },
- - { 0x00009a80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90, 0x0000ab90 },
- - { 0x00009a84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94, 0x0000ab94 },
- - { 0x00009a88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98, 0x0000ab98 },
- - { 0x00009a8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4, 0x0000aba4 },
- - { 0x00009a90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8, 0x0000aba8 },
- - { 0x00009a94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04, 0x0000cb04 },
- - { 0x00009a98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08, 0x0000cb08 },
- - { 0x00009a9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c, 0x0000cb0c },
- - { 0x00009aa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10, 0x0000cb10 },
- - { 0x00009aa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14, 0x0000cb14 },
- - { 0x00009aa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18, 0x0000cb18 },
- - { 0x00009aac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c, 0x0000cb8c },
- - { 0x00009ab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90, 0x0000cb90 },
- - { 0x00009ab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18, 0x0000cf18 },
- - { 0x00009ab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24, 0x0000cf24 },
- - { 0x00009abc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28, 0x0000cf28 },
- - { 0x00009ac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314, 0x0000d314 },
- - { 0x00009ac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318, 0x0000d318 },
- - { 0x00009ac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c, 0x0000d38c },
- - { 0x00009acc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390, 0x0000d390 },
- - { 0x00009ad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394, 0x0000d394 },
- - { 0x00009ad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398, 0x0000d398 },
- - { 0x00009ad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4, 0x0000d3a4 },
- - { 0x00009adc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8, 0x0000d3a8 },
- - { 0x00009ae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac, 0x0000d3ac },
- - { 0x00009ae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0, 0x0000d3b0 },
- - { 0x00009ae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380, 0x0000f380 },
- - { 0x00009aec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384, 0x0000f384 },
- - { 0x00009af0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388, 0x0000f388 },
- - { 0x00009af4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710, 0x0000f710 },
- - { 0x00009af8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714, 0x0000f714 },
- - { 0x00009afc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718, 0x0000f718 },
- - { 0x00009b00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10, 0x0000fb10 },
- - { 0x00009b04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14, 0x0000fb14 },
- - { 0x00009b08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18, 0x0000fb18 },
- - { 0x00009b0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c, 0x0000fb8c },
- - { 0x00009b10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90, 0x0000fb90 },
- - { 0x00009b14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94, 0x0000fb94 },
- - { 0x00009b18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c, 0x0000ff8c },
- - { 0x00009b1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90, 0x0000ff90 },
- - { 0x00009b20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94, 0x0000ff94 },
- - { 0x00009b24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0, 0x0000ffa0 },
- - { 0x00009b28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4, 0x0000ffa4 },
- - { 0x00009b2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8, 0x0000ffa8 },
- - { 0x00009b30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac, 0x0000ffac },
- - { 0x00009b34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0, 0x0000ffb0 },
- - { 0x00009b38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4, 0x0000ffb4 },
- - { 0x00009b3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1, 0x0000ffa1 },
- - { 0x00009b40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5, 0x0000ffa5 },
- - { 0x00009b44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9, 0x0000ffa9 },
- - { 0x00009b48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad, 0x0000ffad },
- - { 0x00009b4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1, 0x0000ffb1 },
- - { 0x00009b50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5, 0x0000ffb5 },
- - { 0x00009b54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9, 0x0000ffb9 },
- - { 0x00009b58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5, 0x0000ffc5 },
- - { 0x00009b5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9, 0x0000ffc9 },
- - { 0x00009b60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd, 0x0000ffcd },
- - { 0x00009b64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1, 0x0000ffd1 },
- - { 0x00009b68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5, 0x0000ffd5 },
- - { 0x00009b6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2, 0x0000ffc2 },
- - { 0x00009b70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6, 0x0000ffc6 },
- - { 0x00009b74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca, 0x0000ffca },
- - { 0x00009b78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce, 0x0000ffce },
- - { 0x00009b7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2, 0x0000ffd2 },
- - { 0x00009b80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6, 0x0000ffd6 },
- - { 0x00009b84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda, 0x0000ffda },
- - { 0x00009b88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7, 0x0000ffc7 },
- - { 0x00009b8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb, 0x0000ffcb },
- - { 0x00009b90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf, 0x0000ffcf },
- - { 0x00009b94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3, 0x0000ffd3 },
- - { 0x00009b98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7, 0x0000ffd7 },
- - { 0x00009b9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009ba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009ba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009ba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009be0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009be4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009be8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009bfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000aa00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120, 0x0000a120 },
- - { 0x0000aa04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124, 0x0000a124 },
- - { 0x0000aa08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128, 0x0000a128 },
- - { 0x0000aa0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c, 0x0000a12c },
- - { 0x0000aa10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130, 0x0000a130 },
- - { 0x0000aa14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194, 0x0000a194 },
- - { 0x0000aa18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198, 0x0000a198 },
- - { 0x0000aa1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c, 0x0000a20c },
- - { 0x0000aa20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210, 0x0000a210 },
- - { 0x0000aa24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284, 0x0000a284 },
- - { 0x0000aa28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288, 0x0000a288 },
- - { 0x0000aa2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c, 0x0000a28c },
- - { 0x0000aa30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290, 0x0000a290 },
- - { 0x0000aa34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294, 0x0000a294 },
- - { 0x0000aa38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0, 0x0000a2a0 },
- - { 0x0000aa3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4, 0x0000a2a4 },
- - { 0x0000aa40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8, 0x0000a2a8 },
- - { 0x0000aa44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac, 0x0000a2ac },
- - { 0x0000aa48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0, 0x0000a2b0 },
- - { 0x0000aa4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4, 0x0000a2b4 },
- - { 0x0000aa50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8, 0x0000a2b8 },
- - { 0x0000aa54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4, 0x0000a2c4 },
- - { 0x0000aa58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708, 0x0000a708 },
- - { 0x0000aa5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c, 0x0000a70c },
- - { 0x0000aa60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710, 0x0000a710 },
- - { 0x0000aa64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04, 0x0000ab04 },
- - { 0x0000aa68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08, 0x0000ab08 },
- - { 0x0000aa6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c, 0x0000ab0c },
- - { 0x0000aa70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10, 0x0000ab10 },
- - { 0x0000aa74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14, 0x0000ab14 },
- - { 0x0000aa78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18, 0x0000ab18 },
- - { 0x0000aa7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c, 0x0000ab8c },
- - { 0x0000aa80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90, 0x0000ab90 },
- - { 0x0000aa84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94, 0x0000ab94 },
- - { 0x0000aa88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98, 0x0000ab98 },
- - { 0x0000aa8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4, 0x0000aba4 },
- - { 0x0000aa90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8, 0x0000aba8 },
- - { 0x0000aa94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04, 0x0000cb04 },
- - { 0x0000aa98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08, 0x0000cb08 },
- - { 0x0000aa9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c, 0x0000cb0c },
- - { 0x0000aaa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10, 0x0000cb10 },
- - { 0x0000aaa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14, 0x0000cb14 },
- - { 0x0000aaa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18, 0x0000cb18 },
- - { 0x0000aaac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c, 0x0000cb8c },
- - { 0x0000aab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90, 0x0000cb90 },
- - { 0x0000aab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18, 0x0000cf18 },
- - { 0x0000aab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24, 0x0000cf24 },
- - { 0x0000aabc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28, 0x0000cf28 },
- - { 0x0000aac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314, 0x0000d314 },
- - { 0x0000aac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318, 0x0000d318 },
- - { 0x0000aac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c, 0x0000d38c },
- - { 0x0000aacc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390, 0x0000d390 },
- - { 0x0000aad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394, 0x0000d394 },
- - { 0x0000aad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398, 0x0000d398 },
- - { 0x0000aad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4, 0x0000d3a4 },
- - { 0x0000aadc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8, 0x0000d3a8 },
- - { 0x0000aae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac, 0x0000d3ac },
- - { 0x0000aae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0, 0x0000d3b0 },
- - { 0x0000aae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380, 0x0000f380 },
- - { 0x0000aaec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384, 0x0000f384 },
- - { 0x0000aaf0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388, 0x0000f388 },
- - { 0x0000aaf4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710, 0x0000f710 },
- - { 0x0000aaf8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714, 0x0000f714 },
- - { 0x0000aafc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718, 0x0000f718 },
- - { 0x0000ab00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10, 0x0000fb10 },
- - { 0x0000ab04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14, 0x0000fb14 },
- - { 0x0000ab08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18, 0x0000fb18 },
- - { 0x0000ab0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c, 0x0000fb8c },
- - { 0x0000ab10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90, 0x0000fb90 },
- - { 0x0000ab14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94, 0x0000fb94 },
- - { 0x0000ab18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c, 0x0000ff8c },
- - { 0x0000ab1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90, 0x0000ff90 },
- - { 0x0000ab20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94, 0x0000ff94 },
- - { 0x0000ab24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0, 0x0000ffa0 },
- - { 0x0000ab28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4, 0x0000ffa4 },
- - { 0x0000ab2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8, 0x0000ffa8 },
- - { 0x0000ab30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac, 0x0000ffac },
- - { 0x0000ab34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0, 0x0000ffb0 },
- - { 0x0000ab38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4, 0x0000ffb4 },
- - { 0x0000ab3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1, 0x0000ffa1 },
- - { 0x0000ab40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5, 0x0000ffa5 },
- - { 0x0000ab44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9, 0x0000ffa9 },
- - { 0x0000ab48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad, 0x0000ffad },
- - { 0x0000ab4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1, 0x0000ffb1 },
- - { 0x0000ab50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5, 0x0000ffb5 },
- - { 0x0000ab54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9, 0x0000ffb9 },
- - { 0x0000ab58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5, 0x0000ffc5 },
- - { 0x0000ab5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9, 0x0000ffc9 },
- - { 0x0000ab60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd, 0x0000ffcd },
- - { 0x0000ab64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1, 0x0000ffd1 },
- - { 0x0000ab68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5, 0x0000ffd5 },
- - { 0x0000ab6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2, 0x0000ffc2 },
- - { 0x0000ab70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6, 0x0000ffc6 },
- - { 0x0000ab74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca, 0x0000ffca },
- - { 0x0000ab78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce, 0x0000ffce },
- - { 0x0000ab7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2, 0x0000ffd2 },
- - { 0x0000ab80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6, 0x0000ffd6 },
- - { 0x0000ab84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda, 0x0000ffda },
- - { 0x0000ab88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7, 0x0000ffc7 },
- - { 0x0000ab8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb, 0x0000ffcb },
- - { 0x0000ab90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf, 0x0000ffcf },
- - { 0x0000ab94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3, 0x0000ffd3 },
- - { 0x0000ab98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7, 0x0000ffd7 },
- - { 0x0000ab9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000aba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000aba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000aba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abe0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abe4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abe8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x0000abfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
- - { 0x00009848, 0x00000000, 0x00000000, 0x00001067, 0x00001067, 0x00001067 },
- - { 0x0000a848, 0x00000000, 0x00000000, 0x00001067, 0x00001067, 0x00001067 },
- -};
- -
- -static const u_int32_t ar9287PciePhy_clkreq_always_on_L1_9287_1_1[][2] = {
- - {0x00004040, 0x9248fd00 },
- - {0x00004040, 0x24924924 },
- - {0x00004040, 0xa8000019 },
- - {0x00004040, 0x13160820 },
- - {0x00004040, 0xe5980560 },
- - {0x00004040, 0xc01dcffd },
- - {0x00004040, 0x1aaabe41 },
- - {0x00004040, 0xbe105554 },
- - {0x00004040, 0x00043007 },
- - {0x00004044, 0x00000000 },
- -};
- -
- -static const u_int32_t ar9287PciePhy_clkreq_off_L1_9287_1_1[][2] = {
- - {0x00004040, 0x9248fd00 },
- - {0x00004040, 0x24924924 },
- - {0x00004040, 0xa8000019 },
- - {0x00004040, 0x13160820 },
- - {0x00004040, 0xe5980560 },
- - {0x00004040, 0xc01dcffc },
- - {0x00004040, 0x1aaabe41 },
- - {0x00004040, 0xbe105554 },
- - {0x00004040, 0x00043007 },
- - {0x00004044, 0x00000000 },
- -};
- -
- -
- -/* AR9271 initialization values automaticaly created: 06/04/09 */
- -static const u_int32_t ar9271Modes_9271[][6] = {
- - { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
- - { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
- - { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
- - { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
- - { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
- - { 0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f },
- - { 0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440, 0x00006880 },
- - { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
- - { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
- - { 0x00009824, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e },
- - { 0x00009828, 0x3a020001, 0x3a020001, 0x3a020001, 0x3a020001, 0x3a020001 },
- - { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
- - { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
- - { 0x00009840, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e },
- - { 0x00009844, 0x0372161e, 0x0372161e, 0x03721620, 0x03721620, 0x037216a0 },
- - { 0x00009848, 0x00001066, 0x00001066, 0x00001053, 0x00001053, 0x00001059 },
- - { 0x0000a848, 0x00001066, 0x00001066, 0x00001053, 0x00001053, 0x00001059 },
- - { 0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2 },
- - { 0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
- - { 0x0000985c, 0x3139605e, 0x3139605e, 0x3137605e, 0x3137605e, 0x3139605e },
- - { 0x00009860, 0x00058d18, 0x00058d18, 0x00058d18, 0x00058d18, 0x00058d18 },
- - { 0x00009864, 0x0000fe00, 0x0000fe00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
- - { 0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
- - { 0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881 },
- - { 0x00009910, 0x30002310, 0x30002310, 0x30002310, 0x30002310, 0x30002310 },
- - { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
- - { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
- - { 0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d, 0xd00a800d },
- - { 0x00009944, 0xffbc1010, 0xffbc1010, 0xffbc1020, 0xffbc1020, 0xffbc1010 },
- - { 0x00009960, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x00009964, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x000099b8, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c },
- - { 0x000099bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00, 0x00000c00 },
- - { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
- - { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
- - { 0x000099c8, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f },
- - { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
- - { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
- - { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x00009a00, 0x00000000, 0x00000000, 0x00058084, 0x00058084, 0x00000000 },
- - { 0x00009a04, 0x00000000, 0x00000000, 0x00058088, 0x00058088, 0x00000000 },
- - { 0x00009a08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c, 0x00000000 },
- - { 0x00009a0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100, 0x00000000 },
- - { 0x00009a10, 0x00000000, 0x00000000, 0x00058104, 0x00058104, 0x00000000 },
- - { 0x00009a14, 0x00000000, 0x00000000, 0x00058108, 0x00058108, 0x00000000 },
- - { 0x00009a18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c, 0x00000000 },
- - { 0x00009a1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110, 0x00000000 },
- - { 0x00009a20, 0x00000000, 0x00000000, 0x00058114, 0x00058114, 0x00000000 },
- - { 0x00009a24, 0x00000000, 0x00000000, 0x00058180, 0x00058180, 0x00000000 },
- - { 0x00009a28, 0x00000000, 0x00000000, 0x00058184, 0x00058184, 0x00000000 },
- - { 0x00009a2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188, 0x00000000 },
- - { 0x00009a30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c, 0x00000000 },
- - { 0x00009a34, 0x00000000, 0x00000000, 0x00058190, 0x00058190, 0x00000000 },
- - { 0x00009a38, 0x00000000, 0x00000000, 0x00058194, 0x00058194, 0x00000000 },
- - { 0x00009a3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0, 0x00000000 },
- - { 0x00009a40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c, 0x00000000 },
- - { 0x00009a44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8, 0x00000000 },
- - { 0x00009a48, 0x00000000, 0x00000000, 0x00058284, 0x00058284, 0x00000000 },
- - { 0x00009a4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288, 0x00000000 },
- - { 0x00009a50, 0x00000000, 0x00000000, 0x00058224, 0x00058224, 0x00000000 },
- - { 0x00009a54, 0x00000000, 0x00000000, 0x00058290, 0x00058290, 0x00000000 },
- - { 0x00009a58, 0x00000000, 0x00000000, 0x00058300, 0x00058300, 0x00000000 },
- - { 0x00009a5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304, 0x00000000 },
- - { 0x00009a60, 0x00000000, 0x00000000, 0x00058308, 0x00058308, 0x00000000 },
- - { 0x00009a64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c, 0x00000000 },
- - { 0x00009a68, 0x00000000, 0x00000000, 0x00058380, 0x00058380, 0x00000000 },
- - { 0x00009a6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384, 0x00000000 },
- - { 0x00009a70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000 },
- - { 0x00009a74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000 },
- - { 0x00009a78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000 },
- - { 0x00009a7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000 },
- - { 0x00009a80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000 },
- - { 0x00009a84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000 },
- - { 0x00009a88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00, 0x00000000 },
- - { 0x00009a8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04, 0x00000000 },
- - { 0x00009a90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08, 0x00000000 },
- - { 0x00009a94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c, 0x00000000 },
- - { 0x00009a98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80, 0x00000000 },
- - { 0x00009a9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84, 0x00000000 },
- - { 0x00009aa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88, 0x00000000 },
- - { 0x00009aa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c, 0x00000000 },
- - { 0x00009aa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90, 0x00000000 },
- - { 0x00009aac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80, 0x00000000 },
- - { 0x00009ab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84, 0x00000000 },
- - { 0x00009ab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88, 0x00000000 },
- - { 0x00009ab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c, 0x00000000 },
- - { 0x00009abc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90, 0x00000000 },
- - { 0x00009ac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c, 0x00000000 },
- - { 0x00009ac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310, 0x00000000 },
- - { 0x00009ac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384, 0x00000000 },
- - { 0x00009acc, 0x00000000, 0x00000000, 0x000db388, 0x000db388, 0x00000000 },
- - { 0x00009ad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324, 0x00000000 },
- - { 0x00009ad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704, 0x00000000 },
- - { 0x00009ad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4, 0x00000000 },
- - { 0x00009adc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8, 0x00000000 },
- - { 0x00009ae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710, 0x00000000 },
- - { 0x00009ae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714, 0x00000000 },
- - { 0x00009ae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720, 0x00000000 },
- - { 0x00009aec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724, 0x00000000 },
- - { 0x00009af0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728, 0x00000000 },
- - { 0x00009af4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c, 0x00000000 },
- - { 0x00009af8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0, 0x00000000 },
- - { 0x00009afc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4, 0x00000000 },
- - { 0x00009b00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8, 0x00000000 },
- - { 0x00009b04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0, 0x00000000 },
- - { 0x00009b08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4, 0x00000000 },
- - { 0x00009b0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8, 0x00000000 },
- - { 0x00009b10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5, 0x00000000 },
- - { 0x00009b14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9, 0x00000000 },
- - { 0x00009b18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad, 0x00000000 },
- - { 0x00009b1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1, 0x00000000 },
- - { 0x00009b20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5, 0x00000000 },
- - { 0x00009b24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9, 0x00000000 },
- - { 0x00009b28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5, 0x00000000 },
- - { 0x00009b2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9, 0x00000000 },
- - { 0x00009b30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1, 0x00000000 },
- - { 0x00009b34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5, 0x00000000 },
- - { 0x00009b38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9, 0x00000000 },
- - { 0x00009b3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6, 0x00000000 },
- - { 0x00009b40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca, 0x00000000 },
- - { 0x00009b44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce, 0x00000000 },
- - { 0x00009b48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2, 0x00000000 },
- - { 0x00009b4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6, 0x00000000 },
- - { 0x00009b50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3, 0x00000000 },
- - { 0x00009b54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7, 0x00000000 },
- - { 0x00009b58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb, 0x00000000 },
- - { 0x00009b5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf, 0x00000000 },
- - { 0x00009b60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7, 0x00000000 },
- - { 0x00009b64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009b9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009ba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009ba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009ba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009be0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009be4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009be8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x00009bfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000aa00, 0x00000000, 0x00000000, 0x00058084, 0x00058084, 0x00000000 },
- - { 0x0000aa04, 0x00000000, 0x00000000, 0x00058088, 0x00058088, 0x00000000 },
- - { 0x0000aa08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c, 0x00000000 },
- - { 0x0000aa0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100, 0x00000000 },
- - { 0x0000aa10, 0x00000000, 0x00000000, 0x00058104, 0x00058104, 0x00000000 },
- - { 0x0000aa14, 0x00000000, 0x00000000, 0x00058108, 0x00058108, 0x00000000 },
- - { 0x0000aa18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c, 0x00000000 },
- - { 0x0000aa1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110, 0x00000000 },
- - { 0x0000aa20, 0x00000000, 0x00000000, 0x00058114, 0x00058114, 0x00000000 },
- - { 0x0000aa24, 0x00000000, 0x00000000, 0x00058180, 0x00058180, 0x00000000 },
- - { 0x0000aa28, 0x00000000, 0x00000000, 0x00058184, 0x00058184, 0x00000000 },
- - { 0x0000aa2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188, 0x00000000 },
- - { 0x0000aa30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c, 0x00000000 },
- - { 0x0000aa34, 0x00000000, 0x00000000, 0x00058190, 0x00058190, 0x00000000 },
- - { 0x0000aa38, 0x00000000, 0x00000000, 0x00058194, 0x00058194, 0x00000000 },
- - { 0x0000aa3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0, 0x00000000 },
- - { 0x0000aa40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c, 0x00000000 },
- - { 0x0000aa44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8, 0x00000000 },
- - { 0x0000aa48, 0x00000000, 0x00000000, 0x00058284, 0x00058284, 0x00000000 },
- - { 0x0000aa4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288, 0x00000000 },
- - { 0x0000aa50, 0x00000000, 0x00000000, 0x00058224, 0x00058224, 0x00000000 },
- - { 0x0000aa54, 0x00000000, 0x00000000, 0x00058290, 0x00058290, 0x00000000 },
- - { 0x0000aa58, 0x00000000, 0x00000000, 0x00058300, 0x00058300, 0x00000000 },
- - { 0x0000aa5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304, 0x00000000 },
- - { 0x0000aa60, 0x00000000, 0x00000000, 0x00058308, 0x00058308, 0x00000000 },
- - { 0x0000aa64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c, 0x00000000 },
- - { 0x0000aa68, 0x00000000, 0x00000000, 0x00058380, 0x00058380, 0x00000000 },
- - { 0x0000aa6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384, 0x00000000 },
- - { 0x0000aa70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000 },
- - { 0x0000aa74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000 },
- - { 0x0000aa78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000 },
- - { 0x0000aa7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000 },
- - { 0x0000aa80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000 },
- - { 0x0000aa84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000 },
- - { 0x0000aa88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00, 0x00000000 },
- - { 0x0000aa8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04, 0x00000000 },
- - { 0x0000aa90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08, 0x00000000 },
- - { 0x0000aa94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c, 0x00000000 },
- - { 0x0000aa98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80, 0x00000000 },
- - { 0x0000aa9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84, 0x00000000 },
- - { 0x0000aaa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88, 0x00000000 },
- - { 0x0000aaa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c, 0x00000000 },
- - { 0x0000aaa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90, 0x00000000 },
- - { 0x0000aaac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80, 0x00000000 },
- - { 0x0000aab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84, 0x00000000 },
- - { 0x0000aab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88, 0x00000000 },
- - { 0x0000aab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c, 0x00000000 },
- - { 0x0000aabc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90, 0x00000000 },
- - { 0x0000aac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c, 0x00000000 },
- - { 0x0000aac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310, 0x00000000 },
- - { 0x0000aac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384, 0x00000000 },
- - { 0x0000aacc, 0x00000000, 0x00000000, 0x000db388, 0x000db388, 0x00000000 },
- - { 0x0000aad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324, 0x00000000 },
- - { 0x0000aad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704, 0x00000000 },
- - { 0x0000aad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4, 0x00000000 },
- - { 0x0000aadc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8, 0x00000000 },
- - { 0x0000aae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710, 0x00000000 },
- - { 0x0000aae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714, 0x00000000 },
- - { 0x0000aae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720, 0x00000000 },
- - { 0x0000aaec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724, 0x00000000 },
- - { 0x0000aaf0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728, 0x00000000 },
- - { 0x0000aaf4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c, 0x00000000 },
- - { 0x0000aaf8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0, 0x00000000 },
- - { 0x0000aafc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4, 0x00000000 },
- - { 0x0000ab00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8, 0x00000000 },
- - { 0x0000ab04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0, 0x00000000 },
- - { 0x0000ab08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4, 0x00000000 },
- - { 0x0000ab0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8, 0x00000000 },
- - { 0x0000ab10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5, 0x00000000 },
- - { 0x0000ab14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9, 0x00000000 },
- - { 0x0000ab18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad, 0x00000000 },
- - { 0x0000ab1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1, 0x00000000 },
- - { 0x0000ab20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5, 0x00000000 },
- - { 0x0000ab24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9, 0x00000000 },
- - { 0x0000ab28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5, 0x00000000 },
- - { 0x0000ab2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9, 0x00000000 },
- - { 0x0000ab30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1, 0x00000000 },
- - { 0x0000ab34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5, 0x00000000 },
- - { 0x0000ab38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9, 0x00000000 },
- - { 0x0000ab3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6, 0x00000000 },
- - { 0x0000ab40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca, 0x00000000 },
- - { 0x0000ab44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce, 0x00000000 },
- - { 0x0000ab48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2, 0x00000000 },
- - { 0x0000ab4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6, 0x00000000 },
- - { 0x0000ab50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3, 0x00000000 },
- - { 0x0000ab54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7, 0x00000000 },
- - { 0x0000ab58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb, 0x00000000 },
- - { 0x0000ab5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf, 0x00000000 },
- - { 0x0000ab60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7, 0x00000000 },
- - { 0x0000ab64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000ab9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000aba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000aba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000aba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abe0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abe4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abe8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000abfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
- - { 0x0000a204, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004 },
- - { 0x0000a20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000, 0x0001f000 },
- - { 0x0000b20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000, 0x0001f000 },
- - { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
- - { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
- - { 0x0000a250, 0x0004f000, 0x0004f000, 0x0004a000, 0x0004a000, 0x0004a000 },
- - { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
- -};
- -
- -static const u_int32_t ar9271Common_9271[][2] = {
- - { 0x0000000c, 0x00000000 },
- - { 0x00000030, 0x00020045 },
- - { 0x00000034, 0x00000005 },
- - { 0x00000040, 0x00000000 },
- - { 0x00000044, 0x00000008 },
- - { 0x00000048, 0x00000008 },
- - { 0x0000004c, 0x00000010 },
- - { 0x00000050, 0x00000000 },
- - { 0x00000054, 0x0000001f },
- - { 0x00000800, 0x00000000 },
- - { 0x00000804, 0x00000000 },
- - { 0x00000808, 0x00000000 },
- - { 0x0000080c, 0x00000000 },
- - { 0x00000810, 0x00000000 },
- - { 0x00000814, 0x00000000 },
- - { 0x00000818, 0x00000000 },
- - { 0x0000081c, 0x00000000 },
- - { 0x00000820, 0x00000000 },
- - { 0x00000824, 0x00000000 },
- - { 0x00001040, 0x002ffc0f },
- - { 0x00001044, 0x002ffc0f },
- - { 0x00001048, 0x002ffc0f },
- - { 0x0000104c, 0x002ffc0f },
- - { 0x00001050, 0x002ffc0f },
- - { 0x00001054, 0x002ffc0f },
- - { 0x00001058, 0x002ffc0f },
- - { 0x0000105c, 0x002ffc0f },
- - { 0x00001060, 0x002ffc0f },
- - { 0x00001064, 0x002ffc0f },
- - { 0x00001230, 0x00000000 },
- - { 0x00001270, 0x00000000 },
- - { 0x00001038, 0x00000000 },
- - { 0x00001078, 0x00000000 },
- - { 0x000010b8, 0x00000000 },
- - { 0x000010f8, 0x00000000 },
- - { 0x00001138, 0x00000000 },
- - { 0x00001178, 0x00000000 },
- - { 0x000011b8, 0x00000000 },
- - { 0x000011f8, 0x00000000 },
- - { 0x00001238, 0x00000000 },
- - { 0x00001278, 0x00000000 },
- - { 0x000012b8, 0x00000000 },
- - { 0x000012f8, 0x00000000 },
- - { 0x00001338, 0x00000000 },
- - { 0x00001378, 0x00000000 },
- - { 0x000013b8, 0x00000000 },
- - { 0x000013f8, 0x00000000 },
- - { 0x00001438, 0x00000000 },
- - { 0x00001478, 0x00000000 },
- - { 0x000014b8, 0x00000000 },
- - { 0x000014f8, 0x00000000 },
- - { 0x00001538, 0x00000000 },
- - { 0x00001578, 0x00000000 },
- - { 0x000015b8, 0x00000000 },
- - { 0x000015f8, 0x00000000 },
- - { 0x00001638, 0x00000000 },
- - { 0x00001678, 0x00000000 },
- - { 0x000016b8, 0x00000000 },
- - { 0x000016f8, 0x00000000 },
- - { 0x00001738, 0x00000000 },
- - { 0x00001778, 0x00000000 },
- - { 0x000017b8, 0x00000000 },
- - { 0x000017f8, 0x00000000 },
- - { 0x0000103c, 0x00000000 },
- - { 0x0000107c, 0x00000000 },
- - { 0x000010bc, 0x00000000 },
- - { 0x000010fc, 0x00000000 },
- - { 0x0000113c, 0x00000000 },
- - { 0x0000117c, 0x00000000 },
- - { 0x000011bc, 0x00000000 },
- - { 0x000011fc, 0x00000000 },
- - { 0x0000123c, 0x00000000 },
- - { 0x0000127c, 0x00000000 },
- - { 0x000012bc, 0x00000000 },
- - { 0x000012fc, 0x00000000 },
- - { 0x0000133c, 0x00000000 },
- - { 0x0000137c, 0x00000000 },
- - { 0x000013bc, 0x00000000 },
- - { 0x000013fc, 0x00000000 },
- - { 0x0000143c, 0x00000000 },
- - { 0x0000147c, 0x00000000 },
- - { 0x00004030, 0x00000002 },
- - { 0x0000403c, 0x00000002 },
- - { 0x00004024, 0x0000001f },
- - { 0x00004060, 0x00000000 },
- - { 0x00004064, 0x00000000 },
- - { 0x00008004, 0x00000000 },
- - { 0x00008008, 0x00000000 },
- - { 0x0000800c, 0x00000000 },
- - { 0x00008018, 0x00000700 },
- - { 0x00008020, 0x00000000 },
- - { 0x00008038, 0x00000000 },
- - { 0x0000803c, 0x00000000 },
- - { 0x00008048, 0x00000000 },
- - { 0x00008054, 0x00000000 },
- - { 0x00008058, 0x00000000 },
- - { 0x0000805c, 0x000fc78f },
- - { 0x00008060, 0x0000000f },
- - { 0x00008064, 0x00000000 },
- - { 0x00008070, 0x00000000 },
- - { 0x000080b0, 0x00000000 },
- - { 0x000080b4, 0x00000000 },
- - { 0x000080b8, 0x00000000 },
- - { 0x000080bc, 0x00000000 },
- - { 0x000080c0, 0x2a80001a },
- - { 0x000080c4, 0x05dc01e0 },
- - { 0x000080c8, 0x1f402710 },
- - { 0x000080cc, 0x01f40000 },
- - { 0x000080d0, 0x00001e00 },
- - { 0x000080d4, 0x00000000 },
- - { 0x000080d8, 0x00400000 },
- - { 0x000080e0, 0xffffffff },
- - { 0x000080e4, 0x0000ffff },
- - { 0x000080e8, 0x003f3f3f },
- - { 0x000080ec, 0x00000000 },
- - { 0x000080f0, 0x00000000 },
- - { 0x000080f4, 0x00000000 },
- - { 0x000080f8, 0x00000000 },
- - { 0x000080fc, 0x00020000 },
- - { 0x00008100, 0x00020000 },
- - { 0x00008104, 0x00000001 },
- - { 0x00008108, 0x00000052 },
- - { 0x0000810c, 0x00000000 },
- - { 0x00008110, 0x00000168 },
- - { 0x00008118, 0x000100aa },
- - { 0x0000811c, 0x00003210 },
- - { 0x00008120, 0x08f04810 },
- - { 0x00008124, 0x00000000 },
- - { 0x00008128, 0x00000000 },
- - { 0x0000812c, 0x00000000 },
- - { 0x00008130, 0x00000000 },
- - { 0x00008134, 0x00000000 },
- - { 0x00008138, 0x00000000 },
- - { 0x0000813c, 0x00000000 },
- - { 0x00008144, 0xffffffff },
- - { 0x00008168, 0x00000000 },
- - { 0x0000816c, 0x00000000 },
- - { 0x00008170, 0x32143320 },
- - { 0x00008174, 0xfaa4fa50 },
- - { 0x00008178, 0x00000100 },
- - { 0x0000817c, 0x00000000 },
- - { 0x000081c0, 0x00000000 },
- - { 0x000081d0, 0x0000320a },
- - { 0x000081ec, 0x00000000 },
- - { 0x000081f0, 0x00000000 },
- - { 0x000081f4, 0x00000000 },
- - { 0x000081f8, 0x00000000 },
- - { 0x000081fc, 0x00000000 },
- - { 0x00008200, 0x00000000 },
- - { 0x00008204, 0x00000000 },
- - { 0x00008208, 0x00000000 },
- - { 0x0000820c, 0x00000000 },
- - { 0x00008210, 0x00000000 },
- - { 0x00008214, 0x00000000 },
- - { 0x00008218, 0x00000000 },
- - { 0x0000821c, 0x00000000 },
- - { 0x00008220, 0x00000000 },
- - { 0x00008224, 0x00000000 },
- - { 0x00008228, 0x00000000 },
- - { 0x0000822c, 0x00000000 },
- - { 0x00008230, 0x00000000 },
- - { 0x00008234, 0x00000000 },
- - { 0x00008238, 0x00000000 },
- - { 0x0000823c, 0x00000000 },
- - { 0x00008240, 0x00100000 },
- - { 0x00008244, 0x0010f400 },
- - { 0x00008248, 0x00000100 },
- - { 0x0000824c, 0x0001e800 },
- - { 0x00008250, 0x00000000 },
- - { 0x00008254, 0x00000000 },
- - { 0x00008258, 0x00000000 },
- - { 0x0000825c, 0x400000ff },
- - { 0x00008260, 0x00080922 },
- - { 0x00008264, 0xa8a00010 },
- - { 0x00008270, 0x00000000 },
- - { 0x00008274, 0x40000000 },
- - { 0x00008278, 0x003e4180 },
- - { 0x0000827c, 0x00000000 },
- - { 0x00008284, 0x0000002c },
- - { 0x00008288, 0x0000002c },
- - { 0x0000828c, 0x00000000 },
- - { 0x00008294, 0x00000000 },
- - { 0x00008298, 0x00000000 },
- - { 0x0000829c, 0x00000000 },
- - { 0x00008300, 0x00000040 },
- - { 0x00008314, 0x00000000 },
- - { 0x00008328, 0x00000000 },
- - { 0x0000832c, 0x00000001 },
- - { 0x00008330, 0x00000302 },
- - { 0x00008334, 0x00000e00 },
- - { 0x00008338, 0x00ff0000 },
- - { 0x0000833c, 0x00000000 },
- - { 0x00008340, 0x00010380 },
- - { 0x00008344, 0x00581043 },
- - { 0x00007010, 0x00000030 },
- - { 0x00007034, 0x00000002 },
- - { 0x00007038, 0x000004c2 },
- - { 0x00007800, 0x00140000 },
- - { 0x00007804, 0x0e4548d8 },
- - { 0x00007808, 0x54214514 },
- - { 0x0000780c, 0x02025820 },
- - { 0x00007810, 0x71c0d388 },
- - { 0x00007814, 0x924934a8 },
- - { 0x0000781c, 0x00000000 },
- - { 0x00007828, 0x66964300 },
- - { 0x0000782c, 0x8db6d961 },
- - { 0x00007830, 0x8db6d96c },
- - { 0x00007834, 0x6140008b },
- - { 0x0000783c, 0x72ee0a72 },
- - { 0x00007840, 0xbbfffffc },
- - { 0x00007844, 0x000c0db6 },
- - { 0x00007848, 0x6db61b6f },
- - { 0x0000784c, 0x6d9b66db },
- - { 0x00007850, 0x6d8c6dba },
- - { 0x00007854, 0x00040000 },
- - { 0x00007858, 0xdb003012 },
- - { 0x0000785c, 0x04924914 },
- - { 0x00007860, 0x21084210 },
- - { 0x00007864, 0xf7d7ffde },
- - { 0x00007868, 0xc2034080 },
- - { 0x00007870, 0x10142c00 },
- - { 0x00009808, 0x00000000 },
- - { 0x0000980c, 0xafe68e30 },
- - { 0x00009810, 0xfd14e000 },
- - { 0x00009814, 0x9c0a9f6b },
- - { 0x0000981c, 0x00000000 },
- - { 0x0000982c, 0x0000a000 },
- - { 0x00009830, 0x00000000 },
- - { 0x0000983c, 0x00200400 },
- - { 0x0000984c, 0x0040233c },
- - { 0x00009854, 0x00000044 },
- - { 0x00009900, 0x00000000 },
- - { 0x00009904, 0x00000000 },
- - { 0x00009908, 0x00000000 },
- - { 0x0000990c, 0x00000000 },
- - { 0x0000991c, 0x10000fff },
- - { 0x00009920, 0x04900000 },
- - { 0x00009928, 0x00000001 },
- - { 0x0000992c, 0x00000004 },
- - { 0x00009934, 0x1e1f2022 },
- - { 0x00009938, 0x0a0b0c0d },
- - { 0x0000993c, 0x00000000 },
- - { 0x00009940, 0x14750604 },
- - { 0x00009948, 0x9280c00a },
- - { 0x0000994c, 0x00020028 },
- - { 0x00009954, 0x5f3ca3de },
- - { 0x00009958, 0x0108ecff },
- - { 0x00009968, 0x000003ce },
- - { 0x00009970, 0x192bb514 },
- - { 0x00009974, 0x00000000 },
- - { 0x00009978, 0x00000001 },
- - { 0x0000997c, 0x00000000 },
- - { 0x00009980, 0x00000000 },
- - { 0x00009984, 0x00000000 },
- - { 0x00009988, 0x00000000 },
- - { 0x0000998c, 0x00000000 },
- - { 0x00009990, 0x00000000 },
- - { 0x00009994, 0x00000000 },
- - { 0x00009998, 0x00000000 },
- - { 0x0000999c, 0x00000000 },
- - { 0x000099a0, 0x00000000 },
- - { 0x000099a4, 0x00000001 },
- - { 0x000099a8, 0x201fff00 },
- - { 0x000099ac, 0x2def0400 },
- - { 0x000099b0, 0x03051000 },
- - { 0x000099b4, 0x00000820 },
- - { 0x000099dc, 0x00000000 },
- - { 0x000099e0, 0x00000000 },
- - { 0x000099e4, 0xaaaaaaaa },
- - { 0x000099e8, 0x3c466478 },
- - { 0x000099ec, 0x0cc80caa },
- - { 0x000099f0, 0x00000000 },
- - { 0x0000a208, 0x803e68c8 },
- - { 0x0000a210, 0x4080a333 },
- - { 0x0000a214, 0x00206c10 },
- - { 0x0000a218, 0x009c4060 },
- - { 0x0000a220, 0x01834061 },
- - { 0x0000a224, 0x00000400 },
- - { 0x0000a228, 0x000003b5 },
- - { 0x0000a22c, 0x00000000 },
- - { 0x0000a234, 0x20202020 },
- - { 0x0000a238, 0x20202020 },
- - { 0x0000a244, 0x00000000 },
- - { 0x0000a248, 0xfffffffc },
- - { 0x0000a24c, 0x00000000 },
- - { 0x0000a254, 0x00000000 },
- - { 0x0000a258, 0x0ccb5380 },
- - { 0x0000a25c, 0x15151501 },
- - { 0x0000a260, 0xdfa90f01 },
- - { 0x0000a268, 0x00000000 },
- - { 0x0000a26c, 0x0ebae9e6 },
- - { 0x0000a388, 0x0c000000 },
- - { 0x0000a38c, 0x20202020 },
- - { 0x0000a390, 0x20202020 },
- - { 0x0000a39c, 0x00000001 },
- - { 0x0000a3a0, 0x00000000 },
- - { 0x0000a3a4, 0x00000000 },
- - { 0x0000a3a8, 0x00000000 },
- - { 0x0000a3ac, 0x00000000 },
- - { 0x0000a3b0, 0x00000000 },
- - { 0x0000a3b4, 0x00000000 },
- - { 0x0000a3b8, 0x00000000 },
- - { 0x0000a3bc, 0x00000000 },
- - { 0x0000a3c0, 0x00000000 },
- - { 0x0000a3c4, 0x00000000 },
- - { 0x0000a3cc, 0x20202020 },
- - { 0x0000a3d0, 0x20202020 },
- - { 0x0000a3d4, 0x20202020 },
- - { 0x0000a3e4, 0x00000000 },
- - { 0x0000a3e8, 0x18c43433 },
- - { 0x0000a3ec, 0x00f70081 },
- - { 0x0000a3f0, 0x01036a2f },
- - { 0x0000a3f4, 0x00000000 },
- - { 0x0000d270, 0x0d820820 },
- - { 0x0000d35c, 0x07ffffef },
- - { 0x0000d360, 0x0fffffe7 },
- - { 0x0000d364, 0x17ffffe5 },
- - { 0x0000d368, 0x1fffffe4 },
- - { 0x0000d36c, 0x37ffffe3 },
- - { 0x0000d370, 0x3fffffe3 },
- - { 0x0000d374, 0x57ffffe3 },
- - { 0x0000d378, 0x5fffffe2 },
- - { 0x0000d37c, 0x7fffffe2 },
- - { 0x0000d380, 0x7f3c7bba },
- - { 0x0000d384, 0xf3307ff0 },
- -};
- -
- -static const u_int32_t ar9271Common_normal_cck_fir_coeff_9271[][2] = {
- - { 0x0000a1f4, 0x00fffeff },
- - { 0x0000a1f8, 0x00f5f9ff },
- - { 0x0000a1fc, 0xb79f6427 },
- -};
- -
- -static const u_int32_t ar9271Common_japan_2484_cck_fir_coeff_9271[][2] = {
- - { 0x0000a1f4, 0x00000000 },
- - { 0x0000a1f8, 0xefff0301 },
- - { 0x0000a1fc, 0xca9228ee },
- -};
- -
- -static const u_int32_t ar9271Modes_9271_1_0_only[][6] = {
- - { 0x00009910, 0x30002311, 0x30002311, 0x30002311, 0x30002311, 0x30002311 },
- - { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
- -};
- -
- -static const u_int32_t ar9271Modes_9271_ANI_reg[][6] = {
- - { 0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2 },
- - { 0x0000985c, 0x3139605e, 0x3139605e, 0x3137605e, 0x3137605e, 0x3139605e },
- - { 0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
- - { 0x0000986c, 0x06903881, 0x06903881, 0x06903881, 0x06903881, 0x06903881 },
- - { 0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
- - { 0x0000a208, 0x803e68c8, 0x803e68c8, 0x803e68c8, 0x803e68c8, 0x803e68c8 },
- - { 0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d, 0xd00a800d },
- - { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
- -};
- -
- -static const u_int32_t ar9271Modes_normal_power_tx_gain_9271[][6] = {
- - { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- - { 0x0000a304, 0x00000000, 0x00000000, 0x00009200, 0x00009200, 0x00000000 },
- - { 0x0000a308, 0x00000000, 0x00000000, 0x00010208, 0x00010208, 0x00000000 },
- - { 0x0000a30c, 0x00000000, 0x00000000, 0x00019608, 0x00019608, 0x00000000 },
- - { 0x0000a310, 0x00000000, 0x00000000, 0x0001e610, 0x0001e610, 0x00000000 },
- - { 0x0000a314, 0x00000000, 0x00000000, 0x0002d6d0, 0x0002d6d0, 0x00000000 },
- - { 0x0000a318, 0x00000000, 0x00000000, 0x00039758, 0x00039758, 0x00000000 },
- - { 0x0000a31c, 0x00000000, 0x00000000, 0x0003b759, 0x0003b759, 0x00000000 },
- - { 0x0000a320, 0x00000000, 0x00000000, 0x0003d75a, 0x0003d75a, 0x00000000 },
- - { 0x0000a324, 0x00000000, 0x00000000, 0x0004175c, 0x0004175c, 0x00000000 },
- - { 0x0000a328, 0x00000000, 0x00000000, 0x0004575e, 0x0004575e, 0x00000000 },
- - { 0x0000a32c, 0x00000000, 0x00000000, 0x0004979f, 0x0004979f, 0x00000000 },
- - { 0x0000a330, 0x00000000, 0x00000000, 0x0004d7df, 0x0004d7df, 0x00000000 },
- - { 0x0000a334, 0x000368de, 0x000368de, 0x000368de, 0x000368de, 0x00000000 },
- - { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
- - { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
- - { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x00007838, 0x00000029, 0x00000029, 0x00000029, 0x00000029, 0x00000029 },
- - { 0x00007824, 0x00d8abff, 0x00d8abff, 0x00d8abff, 0x00d8abff, 0x00d8abff },
- - { 0x0000786c, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4 },
- - { 0x00007820, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04 },
- - { 0x0000a274, 0x0a21c652, 0x0a21c652, 0x0a218652, 0x0a218652, 0x0a22a652 },
- - { 0x0000a278, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd },
- - { 0x0000a27c, 0x050e83bd, 0x050e83bd, 0x050e83bd, 0x050e83bd, 0x050e83bd },
- - { 0x0000a394, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd },
- - { 0x0000a398, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd },
- - { 0x0000a3dc, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd },
- - { 0x0000a3e0, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd },
- -};
- -
- -static const u_int32_t ar9271Modes_high_power_tx_gain_9271[][6] = {
- - { 0x0000a300, 0x00000000, 0x00000000, 0x00010000, 0x00010000, 0x00000000 },
- - { 0x0000a304, 0x00000000, 0x00000000, 0x00016200, 0x00016200, 0x00000000 },
- - { 0x0000a308, 0x00000000, 0x00000000, 0x00018201, 0x00018201, 0x00000000 },
- - { 0x0000a30c, 0x00000000, 0x00000000, 0x0001b240, 0x0001b240, 0x00000000 },
- - { 0x0000a310, 0x00000000, 0x00000000, 0x0001d241, 0x0001d241, 0x00000000 },
- - { 0x0000a314, 0x00000000, 0x00000000, 0x0001f600, 0x0001f600, 0x00000000 },
- - { 0x0000a318, 0x00000000, 0x00000000, 0x00022800, 0x00022800, 0x00000000 },
- - { 0x0000a31c, 0x00000000, 0x00000000, 0x00026802, 0x00026802, 0x00000000 },
- - { 0x0000a320, 0x00000000, 0x00000000, 0x0002b805, 0x0002b805, 0x00000000 },
- - { 0x0000a324, 0x00000000, 0x00000000, 0x0002ea41, 0x0002ea41, 0x00000000 },
- - { 0x0000a328, 0x00000000, 0x00000000, 0x00038b00, 0x00038b00, 0x00000000 },
- - { 0x0000a32c, 0x00000000, 0x00000000, 0x0003ab40, 0x0003ab40, 0x00000000 },
- - { 0x0000a330, 0x00000000, 0x00000000, 0x0003cd80, 0x0003cd80, 0x00000000 },
- - { 0x0000a334, 0x000368de, 0x000368de, 0x000368de, 0x000368de, 0x00000000 },
- - { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
- - { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
- - { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
- - { 0x00007838, 0x0000002b, 0x0000002b, 0x0000002b, 0x0000002b, 0x0000002b },
- - { 0x00007824, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff },
- - { 0x0000786c, 0x08609eb6, 0x08609eb6, 0x08609eba, 0x08609eba, 0x08609eb6 },
- - { 0x00007820, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00 },
- - { 0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a212652, 0x0a212652, 0x0a22a652 },
- - { 0x0000a278, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
- - { 0x0000a27c, 0x05018063, 0x05038063, 0x05018063, 0x05018063, 0x05018063 },
- - { 0x0000a394, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63 },
- - { 0x0000a398, 0x00000063, 0x00000063, 0x00000063, 0x00000063, 0x00000063 },
- - { 0x0000a3dc, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63 },
- - { 0x0000a3e0, 0x00000063, 0x00000063, 0x00000063, 0x00000063, 0x00000063 },
- -};
- --- a/drivers/net/wireless/ath/ath9k/mac.c
- +++ b/drivers/net/wireless/ath/ath9k/mac.c
- @@ -57,6 +57,18 @@ void ath9k_hw_txstart(struct ath_hw *ah,
- }
- EXPORT_SYMBOL(ath9k_hw_txstart);
-
- +void ath9k_hw_cleartxdesc(struct ath_hw *ah, void *ds)
- +{
- + struct ar5416_desc *ads = AR5416DESC(ds);
- +
- + ads->ds_txstatus0 = ads->ds_txstatus1 = 0;
- + ads->ds_txstatus2 = ads->ds_txstatus3 = 0;
- + ads->ds_txstatus4 = ads->ds_txstatus5 = 0;
- + ads->ds_txstatus6 = ads->ds_txstatus7 = 0;
- + ads->ds_txstatus8 = ads->ds_txstatus9 = 0;
- +}
- +EXPORT_SYMBOL(ath9k_hw_cleartxdesc);
- +
- u32 ath9k_hw_numtxpending(struct ath_hw *ah, u32 q)
- {
- u32 npend;
- @@ -207,281 +219,6 @@ bool ath9k_hw_stoptxdma(struct ath_hw *a
- }
- EXPORT_SYMBOL(ath9k_hw_stoptxdma);
-
- -void ath9k_hw_filltxdesc(struct ath_hw *ah, struct ath_desc *ds,
- - u32 segLen, bool firstSeg,
- - bool lastSeg, const struct ath_desc *ds0)
- -{
- - struct ar5416_desc *ads = AR5416DESC(ds);
- -
- - if (firstSeg) {
- - ads->ds_ctl1 |= segLen | (lastSeg ? 0 : AR_TxMore);
- - } else if (lastSeg) {
- - ads->ds_ctl0 = 0;
- - ads->ds_ctl1 = segLen;
- - ads->ds_ctl2 = AR5416DESC_CONST(ds0)->ds_ctl2;
- - ads->ds_ctl3 = AR5416DESC_CONST(ds0)->ds_ctl3;
- - } else {
- - ads->ds_ctl0 = 0;
- - ads->ds_ctl1 = segLen | AR_TxMore;
- - ads->ds_ctl2 = 0;
- - ads->ds_ctl3 = 0;
- - }
- - ads->ds_txstatus0 = ads->ds_txstatus1 = 0;
- - ads->ds_txstatus2 = ads->ds_txstatus3 = 0;
- - ads->ds_txstatus4 = ads->ds_txstatus5 = 0;
- - ads->ds_txstatus6 = ads->ds_txstatus7 = 0;
- - ads->ds_txstatus8 = ads->ds_txstatus9 = 0;
- -}
- -EXPORT_SYMBOL(ath9k_hw_filltxdesc);
- -
- -void ath9k_hw_cleartxdesc(struct ath_hw *ah, struct ath_desc *ds)
- -{
- - struct ar5416_desc *ads = AR5416DESC(ds);
- -
- - ads->ds_txstatus0 = ads->ds_txstatus1 = 0;
- - ads->ds_txstatus2 = ads->ds_txstatus3 = 0;
- - ads->ds_txstatus4 = ads->ds_txstatus5 = 0;
- - ads->ds_txstatus6 = ads->ds_txstatus7 = 0;
- - ads->ds_txstatus8 = ads->ds_txstatus9 = 0;
- -}
- -EXPORT_SYMBOL(ath9k_hw_cleartxdesc);
- -
- -int ath9k_hw_txprocdesc(struct ath_hw *ah, struct ath_desc *ds,
- - struct ath_tx_status *ts)
- -{
- - struct ar5416_desc *ads = AR5416DESC(ds);
- -
- - if ((ads->ds_txstatus9 & AR_TxDone) == 0)
- - return -EINPROGRESS;
- -
- - ts->ts_seqnum = MS(ads->ds_txstatus9, AR_SeqNum);
- - ts->ts_tstamp = ads->AR_SendTimestamp;
- - ts->ts_status = 0;
- - ts->ts_flags = 0;
- -
- - if (ads->ds_txstatus1 & AR_FrmXmitOK)
- - ts->ts_status |= ATH9K_TX_ACKED;
- - if (ads->ds_txstatus1 & AR_ExcessiveRetries)
- - ts->ts_status |= ATH9K_TXERR_XRETRY;
- - if (ads->ds_txstatus1 & AR_Filtered)
- - ts->ts_status |= ATH9K_TXERR_FILT;
- - if (ads->ds_txstatus1 & AR_FIFOUnderrun) {
- - ts->ts_status |= ATH9K_TXERR_FIFO;
- - ath9k_hw_updatetxtriglevel(ah, true);
- - }
- - if (ads->ds_txstatus9 & AR_TxOpExceeded)
- - ts->ts_status |= ATH9K_TXERR_XTXOP;
- - if (ads->ds_txstatus1 & AR_TxTimerExpired)
- - ts->ts_status |= ATH9K_TXERR_TIMER_EXPIRED;
- -
- - if (ads->ds_txstatus1 & AR_DescCfgErr)
- - ts->ts_flags |= ATH9K_TX_DESC_CFG_ERR;
- - if (ads->ds_txstatus1 & AR_TxDataUnderrun) {
- - ts->ts_flags |= ATH9K_TX_DATA_UNDERRUN;
- - ath9k_hw_updatetxtriglevel(ah, true);
- - }
- - if (ads->ds_txstatus1 & AR_TxDelimUnderrun) {
- - ts->ts_flags |= ATH9K_TX_DELIM_UNDERRUN;
- - ath9k_hw_updatetxtriglevel(ah, true);
- - }
- - if (ads->ds_txstatus0 & AR_TxBaStatus) {
- - ts->ts_flags |= ATH9K_TX_BA;
- - ts->ba_low = ads->AR_BaBitmapLow;
- - ts->ba_high = ads->AR_BaBitmapHigh;
- - }
- -
- - ts->ts_rateindex = MS(ads->ds_txstatus9, AR_FinalTxIdx);
- - switch (ts->ts_rateindex) {
- - case 0:
- - ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate0);
- - break;
- - case 1:
- - ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate1);
- - break;
- - case 2:
- - ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate2);
- - break;
- - case 3:
- - ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate3);
- - break;
- - }
- -
- - ts->ts_rssi = MS(ads->ds_txstatus5, AR_TxRSSICombined);
- - ts->ts_rssi_ctl0 = MS(ads->ds_txstatus0, AR_TxRSSIAnt00);
- - ts->ts_rssi_ctl1 = MS(ads->ds_txstatus0, AR_TxRSSIAnt01);
- - ts->ts_rssi_ctl2 = MS(ads->ds_txstatus0, AR_TxRSSIAnt02);
- - ts->ts_rssi_ext0 = MS(ads->ds_txstatus5, AR_TxRSSIAnt10);
- - ts->ts_rssi_ext1 = MS(ads->ds_txstatus5, AR_TxRSSIAnt11);
- - ts->ts_rssi_ext2 = MS(ads->ds_txstatus5, AR_TxRSSIAnt12);
- - ts->evm0 = ads->AR_TxEVM0;
- - ts->evm1 = ads->AR_TxEVM1;
- - ts->evm2 = ads->AR_TxEVM2;
- - ts->ts_shortretry = MS(ads->ds_txstatus1, AR_RTSFailCnt);
- - ts->ts_longretry = MS(ads->ds_txstatus1, AR_DataFailCnt);
- - ts->ts_virtcol = MS(ads->ds_txstatus1, AR_VirtRetryCnt);
- - ts->ts_antenna = 0;
- -
- - return 0;
- -}
- -EXPORT_SYMBOL(ath9k_hw_txprocdesc);
- -
- -void ath9k_hw_set11n_txdesc(struct ath_hw *ah, struct ath_desc *ds,
- - u32 pktLen, enum ath9k_pkt_type type, u32 txPower,
- - u32 keyIx, enum ath9k_key_type keyType, u32 flags)
- -{
- - struct ar5416_desc *ads = AR5416DESC(ds);
- -
- - txPower += ah->txpower_indexoffset;
- - if (txPower > 63)
- - txPower = 63;
- -
- - ads->ds_ctl0 = (pktLen & AR_FrameLen)
- - | (flags & ATH9K_TXDESC_VMF ? AR_VirtMoreFrag : 0)
- - | SM(txPower, AR_XmitPower)
- - | (flags & ATH9K_TXDESC_VEOL ? AR_VEOL : 0)
- - | (flags & ATH9K_TXDESC_CLRDMASK ? AR_ClrDestMask : 0)
- - | (flags & ATH9K_TXDESC_INTREQ ? AR_TxIntrReq : 0)
- - | (keyIx != ATH9K_TXKEYIX_INVALID ? AR_DestIdxValid : 0);
- -
- - ads->ds_ctl1 =
- - (keyIx != ATH9K_TXKEYIX_INVALID ? SM(keyIx, AR_DestIdx) : 0)
- - | SM(type, AR_FrameType)
- - | (flags & ATH9K_TXDESC_NOACK ? AR_NoAck : 0)
- - | (flags & ATH9K_TXDESC_EXT_ONLY ? AR_ExtOnly : 0)
- - | (flags & ATH9K_TXDESC_EXT_AND_CTL ? AR_ExtAndCtl : 0);
- -
- - ads->ds_ctl6 = SM(keyType, AR_EncrType);
- -
- - if (AR_SREV_9285(ah) || AR_SREV_9271(ah)) {
- - ads->ds_ctl8 = 0;
- - ads->ds_ctl9 = 0;
- - ads->ds_ctl10 = 0;
- - ads->ds_ctl11 = 0;
- - }
- -}
- -EXPORT_SYMBOL(ath9k_hw_set11n_txdesc);
- -
- -void ath9k_hw_set11n_ratescenario(struct ath_hw *ah, struct ath_desc *ds,
- - struct ath_desc *lastds,
- - u32 durUpdateEn, u32 rtsctsRate,
- - u32 rtsctsDuration,
- - struct ath9k_11n_rate_series series[],
- - u32 nseries, u32 flags)
- -{
- - struct ar5416_desc *ads = AR5416DESC(ds);
- - struct ar5416_desc *last_ads = AR5416DESC(lastds);
- - u32 ds_ctl0;
- -
- - if (flags & (ATH9K_TXDESC_RTSENA | ATH9K_TXDESC_CTSENA)) {
- - ds_ctl0 = ads->ds_ctl0;
- -
- - if (flags & ATH9K_TXDESC_RTSENA) {
- - ds_ctl0 &= ~AR_CTSEnable;
- - ds_ctl0 |= AR_RTSEnable;
- - } else {
- - ds_ctl0 &= ~AR_RTSEnable;
- - ds_ctl0 |= AR_CTSEnable;
- - }
- -
- - ads->ds_ctl0 = ds_ctl0;
- - } else {
- - ads->ds_ctl0 =
- - (ads->ds_ctl0 & ~(AR_RTSEnable | AR_CTSEnable));
- - }
- -
- - ads->ds_ctl2 = set11nTries(series, 0)
- - | set11nTries(series, 1)
- - | set11nTries(series, 2)
- - | set11nTries(series, 3)
- - | (durUpdateEn ? AR_DurUpdateEna : 0)
- - | SM(0, AR_BurstDur);
- -
- - ads->ds_ctl3 = set11nRate(series, 0)
- - | set11nRate(series, 1)
- - | set11nRate(series, 2)
- - | set11nRate(series, 3);
- -
- - ads->ds_ctl4 = set11nPktDurRTSCTS(series, 0)
- - | set11nPktDurRTSCTS(series, 1);
- -
- - ads->ds_ctl5 = set11nPktDurRTSCTS(series, 2)
- - | set11nPktDurRTSCTS(series, 3);
- -
- - ads->ds_ctl7 = set11nRateFlags(series, 0)
- - | set11nRateFlags(series, 1)
- - | set11nRateFlags(series, 2)
- - | set11nRateFlags(series, 3)
- - | SM(rtsctsRate, AR_RTSCTSRate);
- - last_ads->ds_ctl2 = ads->ds_ctl2;
- - last_ads->ds_ctl3 = ads->ds_ctl3;
- -}
- -EXPORT_SYMBOL(ath9k_hw_set11n_ratescenario);
- -
- -void ath9k_hw_set11n_aggr_first(struct ath_hw *ah, struct ath_desc *ds,
- - u32 aggrLen)
- -{
- - struct ar5416_desc *ads = AR5416DESC(ds);
- -
- - ads->ds_ctl1 |= (AR_IsAggr | AR_MoreAggr);
- - ads->ds_ctl6 &= ~AR_AggrLen;
- - ads->ds_ctl6 |= SM(aggrLen, AR_AggrLen);
- -}
- -EXPORT_SYMBOL(ath9k_hw_set11n_aggr_first);
- -
- -void ath9k_hw_set11n_aggr_middle(struct ath_hw *ah, struct ath_desc *ds,
- - u32 numDelims)
- -{
- - struct ar5416_desc *ads = AR5416DESC(ds);
- - unsigned int ctl6;
- -
- - ads->ds_ctl1 |= (AR_IsAggr | AR_MoreAggr);
- -
- - ctl6 = ads->ds_ctl6;
- - ctl6 &= ~AR_PadDelim;
- - ctl6 |= SM(numDelims, AR_PadDelim);
- - ads->ds_ctl6 = ctl6;
- -}
- -EXPORT_SYMBOL(ath9k_hw_set11n_aggr_middle);
- -
- -void ath9k_hw_set11n_aggr_last(struct ath_hw *ah, struct ath_desc *ds)
- -{
- - struct ar5416_desc *ads = AR5416DESC(ds);
- -
- - ads->ds_ctl1 |= AR_IsAggr;
- - ads->ds_ctl1 &= ~AR_MoreAggr;
- - ads->ds_ctl6 &= ~AR_PadDelim;
- -}
- -EXPORT_SYMBOL(ath9k_hw_set11n_aggr_last);
- -
- -void ath9k_hw_clr11n_aggr(struct ath_hw *ah, struct ath_desc *ds)
- -{
- - struct ar5416_desc *ads = AR5416DESC(ds);
- -
- - ads->ds_ctl1 &= (~AR_IsAggr & ~AR_MoreAggr);
- -}
- -EXPORT_SYMBOL(ath9k_hw_clr11n_aggr);
- -
- -void ath9k_hw_set11n_burstduration(struct ath_hw *ah, struct ath_desc *ds,
- - u32 burstDuration)
- -{
- - struct ar5416_desc *ads = AR5416DESC(ds);
- -
- - ads->ds_ctl2 &= ~AR_BurstDur;
- - ads->ds_ctl2 |= SM(burstDuration, AR_BurstDur);
- -}
- -EXPORT_SYMBOL(ath9k_hw_set11n_burstduration);
- -
- -void ath9k_hw_set11n_virtualmorefrag(struct ath_hw *ah, struct ath_desc *ds,
- - u32 vmf)
- -{
- - struct ar5416_desc *ads = AR5416DESC(ds);
- -
- - if (vmf)
- - ads->ds_ctl0 |= AR_VirtMoreFrag;
- - else
- - ads->ds_ctl0 &= ~AR_VirtMoreFrag;
- -}
- -
- void ath9k_hw_gettxintrtxqs(struct ath_hw *ah, u32 *txqs)
- {
- *txqs &= ah->intr_txqs;
- @@ -796,6 +533,12 @@ bool ath9k_hw_resettxqueue(struct ath_hw
- AR_D_MISC_ARB_LOCKOUT_CNTRL_S)
- | AR_D_MISC_BEACON_USE
- | AR_D_MISC_POST_FR_BKOFF_DIS);
- + /* cwmin and cwmax should be 0 for beacon queue */
- + if (AR_SREV_9300_20_OR_LATER(ah)) {
- + REG_WRITE(ah, AR_DLCL_IFS(q), SM(0, AR_D_LCL_IFS_CWMIN)
- + | SM(0, AR_D_LCL_IFS_CWMAX)
- + | SM(qi->tqi_aifs, AR_D_LCL_IFS_AIFS));
- + }
- break;
- case ATH9K_TX_QUEUE_CAB:
- REG_WRITE(ah, AR_QMISC(q), REG_READ(ah, AR_QMISC(q))
- @@ -832,6 +575,9 @@ bool ath9k_hw_resettxqueue(struct ath_hw
- AR_D_MISC_POST_FR_BKOFF_DIS);
- }
-
- + if (AR_SREV_9300_20_OR_LATER(ah))
- + REG_WRITE(ah, AR_Q_DESC_CRCCHK, AR_Q_DESC_CRCCHK_EN);
- +
- if (qi->tqi_qflags & TXQ_FLAG_TXOKINT_ENABLE)
- ah->txok_interrupt_mask |= 1 << q;
- else
- @@ -999,12 +745,6 @@ void ath9k_hw_putrxbuf(struct ath_hw *ah
- }
- EXPORT_SYMBOL(ath9k_hw_putrxbuf);
-
- -void ath9k_hw_rxena(struct ath_hw *ah)
- -{
- - REG_WRITE(ah, AR_CR, AR_CR_RXE);
- -}
- -EXPORT_SYMBOL(ath9k_hw_rxena);
- -
- void ath9k_hw_startpcureceive(struct ath_hw *ah)
- {
- ath9k_enable_mib_counters(ah);
- @@ -1023,6 +763,14 @@ void ath9k_hw_stoppcurecv(struct ath_hw
- }
- EXPORT_SYMBOL(ath9k_hw_stoppcurecv);
-
- +void ath9k_hw_abortpcurecv(struct ath_hw *ah)
- +{
- + REG_SET_BIT(ah, AR_DIAG_SW, AR_DIAG_RX_ABORT | AR_DIAG_RX_DIS);
- +
- + ath9k_hw_disable_mib_counters(ah);
- +}
- +EXPORT_SYMBOL(ath9k_hw_abortpcurecv);
- +
- bool ath9k_hw_stopdmarecv(struct ath_hw *ah)
- {
- #define AH_RX_STOP_DMA_TIMEOUT 10000 /* usec */
- @@ -1068,3 +816,140 @@ int ath9k_hw_beaconq_setup(struct ath_hw
- return ath9k_hw_setuptxqueue(ah, ATH9K_TX_QUEUE_BEACON, &qi);
- }
- EXPORT_SYMBOL(ath9k_hw_beaconq_setup);
- +
- +bool ath9k_hw_intrpend(struct ath_hw *ah)
- +{
- + u32 host_isr;
- +
- + if (AR_SREV_9100(ah))
- + return true;
- +
- + host_isr = REG_READ(ah, AR_INTR_ASYNC_CAUSE);
- + if ((host_isr & AR_INTR_MAC_IRQ) && (host_isr != AR_INTR_SPURIOUS))
- + return true;
- +
- + host_isr = REG_READ(ah, AR_INTR_SYNC_CAUSE);
- + if ((host_isr & AR_INTR_SYNC_DEFAULT)
- + && (host_isr != AR_INTR_SPURIOUS))
- + return true;
- +
- + return false;
- +}
- +EXPORT_SYMBOL(ath9k_hw_intrpend);
- +
- +enum ath9k_int ath9k_hw_set_interrupts(struct ath_hw *ah,
- + enum ath9k_int ints)
- +{
- + enum ath9k_int omask = ah->imask;
- + u32 mask, mask2;
- + struct ath9k_hw_capabilities *pCap = &ah->caps;
- + struct ath_common *common = ath9k_hw_common(ah);
- +
- + ath_print(common, ATH_DBG_INTERRUPT, "0x%x => 0x%x\n", omask, ints);
- +
- + if (omask & ATH9K_INT_GLOBAL) {
- + ath_print(common, ATH_DBG_INTERRUPT, "disable IER\n");
- + REG_WRITE(ah, AR_IER, AR_IER_DISABLE);
- + (void) REG_READ(ah, AR_IER);
- + if (!AR_SREV_9100(ah)) {
- + REG_WRITE(ah, AR_INTR_ASYNC_ENABLE, 0);
- + (void) REG_READ(ah, AR_INTR_ASYNC_ENABLE);
- +
- + REG_WRITE(ah, AR_INTR_SYNC_ENABLE, 0);
- + (void) REG_READ(ah, AR_INTR_SYNC_ENABLE);
- + }
- + }
- +
- + /* TODO: global int Ref count */
- + mask = ints & ATH9K_INT_COMMON;
- + mask2 = 0;
- +
- + if (ints & ATH9K_INT_TX) {
- + if (ah->config.tx_intr_mitigation)
- + mask |= AR_IMR_TXMINTR | AR_IMR_TXINTM;
- + if (ah->txok_interrupt_mask)
- + mask |= AR_IMR_TXOK;
- + if (ah->txdesc_interrupt_mask)
- + mask |= AR_IMR_TXDESC;
- + if (ah->txerr_interrupt_mask)
- + mask |= AR_IMR_TXERR;
- + if (ah->txeol_interrupt_mask)
- + mask |= AR_IMR_TXEOL;
- + }
- + if (ints & ATH9K_INT_RX) {
- + if (AR_SREV_9300_20_OR_LATER(ah)) {
- + mask |= AR_IMR_RXERR | AR_IMR_RXOK_HP;
- + if (ah->config.rx_intr_mitigation) {
- + mask &= ~AR_IMR_RXOK_LP;
- + mask |= AR_IMR_RXMINTR | AR_IMR_RXINTM;
- + } else {
- + mask |= AR_IMR_RXOK_LP;
- + }
- + } else {
- + if (ah->config.rx_intr_mitigation)
- + mask |= AR_IMR_RXMINTR | AR_IMR_RXINTM;
- + else
- + mask |= AR_IMR_RXOK | AR_IMR_RXDESC;
- + }
- + if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
- + mask |= AR_IMR_GENTMR;
- + }
- +
- + if (ints & (ATH9K_INT_BMISC)) {
- + mask |= AR_IMR_BCNMISC;
- + if (ints & ATH9K_INT_TIM)
- + mask2 |= AR_IMR_S2_TIM;
- + if (ints & ATH9K_INT_DTIM)
- + mask2 |= AR_IMR_S2_DTIM;
- + if (ints & ATH9K_INT_DTIMSYNC)
- + mask2 |= AR_IMR_S2_DTIMSYNC;
- + if (ints & ATH9K_INT_CABEND)
- + mask2 |= AR_IMR_S2_CABEND;
- + if (ints & ATH9K_INT_TSFOOR)
- + mask2 |= AR_IMR_S2_TSFOOR;
- + }
- +
- + if (ints & (ATH9K_INT_GTT | ATH9K_INT_CST)) {
- + mask |= AR_IMR_BCNMISC;
- + if (ints & ATH9K_INT_GTT)
- + mask2 |= AR_IMR_S2_GTT;
- + if (ints & ATH9K_INT_CST)
- + mask2 |= AR_IMR_S2_CST;
- + }
- +
- + ath_print(common, ATH_DBG_INTERRUPT, "new IMR 0x%x\n", mask);
- + REG_WRITE(ah, AR_IMR, mask);
- + ah->imrs2_reg &= ~(AR_IMR_S2_TIM | AR_IMR_S2_DTIM | AR_IMR_S2_DTIMSYNC |
- + AR_IMR_S2_CABEND | AR_IMR_S2_CABTO |
- + AR_IMR_S2_TSFOOR | AR_IMR_S2_GTT | AR_IMR_S2_CST);
- + ah->imrs2_reg |= mask2;
- + REG_WRITE(ah, AR_IMR_S2, ah->imrs2_reg);
- +
- + if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
- + if (ints & ATH9K_INT_TIM_TIMER)
- + REG_SET_BIT(ah, AR_IMR_S5, AR_IMR_S5_TIM_TIMER);
- + else
- + REG_CLR_BIT(ah, AR_IMR_S5, AR_IMR_S5_TIM_TIMER);
- + }
- +
- + if (ints & ATH9K_INT_GLOBAL) {
- + ath_print(common, ATH_DBG_INTERRUPT, "enable IER\n");
- + REG_WRITE(ah, AR_IER, AR_IER_ENABLE);
- + if (!AR_SREV_9100(ah)) {
- + REG_WRITE(ah, AR_INTR_ASYNC_ENABLE,
- + AR_INTR_MAC_IRQ);
- + REG_WRITE(ah, AR_INTR_ASYNC_MASK, AR_INTR_MAC_IRQ);
- +
- +
- + REG_WRITE(ah, AR_INTR_SYNC_ENABLE,
- + AR_INTR_SYNC_DEFAULT);
- + REG_WRITE(ah, AR_INTR_SYNC_MASK,
- + AR_INTR_SYNC_DEFAULT);
- + }
- + ath_print(common, ATH_DBG_INTERRUPT, "AR_IMR 0x%x IER 0x%x\n",
- + REG_READ(ah, AR_IMR), REG_READ(ah, AR_IER));
- + }
- +
- + return omask;
- +}
- +EXPORT_SYMBOL(ath9k_hw_set_interrupts);
- --- a/drivers/net/wireless/ath/ath9k/mac.h
- +++ b/drivers/net/wireless/ath/ath9k/mac.h
- @@ -86,7 +86,6 @@
- #define ATH9K_TX_DESC_CFG_ERR 0x04
- #define ATH9K_TX_DATA_UNDERRUN 0x08
- #define ATH9K_TX_DELIM_UNDERRUN 0x10
- -#define ATH9K_TX_SW_ABORTED 0x40
- #define ATH9K_TX_SW_FILTERED 0x80
-
- /* 64 bytes */
- @@ -117,7 +116,10 @@ struct ath_tx_status {
- int8_t ts_rssi_ext0;
- int8_t ts_rssi_ext1;
- int8_t ts_rssi_ext2;
- - u8 pad[3];
- + u8 qid;
- + u16 desc_id;
- + u8 tid;
- + u8 pad[2];
- u32 ba_low;
- u32 ba_high;
- u32 evm0;
- @@ -148,6 +150,8 @@ struct ath_rx_status {
- u32 evm0;
- u32 evm1;
- u32 evm2;
- + u32 evm3;
- + u32 evm4;
- };
-
- struct ath_htc_rx_status {
- @@ -259,7 +263,8 @@ struct ath_desc {
- #define ATH9K_TXDESC_EXT_AND_CTL 0x0080
- #define ATH9K_TXDESC_VMF 0x0100
- #define ATH9K_TXDESC_FRAG_IS_ON 0x0200
- -#define ATH9K_TXDESC_CAB 0x0400
- +#define ATH9K_TXDESC_LOWRXCHAIN 0x0400
- +#define ATH9K_TXDESC_LDPC 0x00010000
-
- #define ATH9K_RXDESC_INTREQ 0x0020
-
- @@ -353,7 +358,8 @@ struct ar5416_desc {
- #define AR_DestIdxValid 0x40000000
- #define AR_CTSEnable 0x80000000
-
- -#define AR_BufLen 0x00000fff
- +#define AR_BufLen AR_SREV_9300_20_OR_LATER(ah) ? 0x0fff0000 : \
- + 0x00000fff
- #define AR_TxMore 0x00001000
- #define AR_DestIdx 0x000fe000
- #define AR_DestIdx_S 13
- @@ -410,6 +416,7 @@ struct ar5416_desc {
- #define AR_EncrType 0x0c000000
- #define AR_EncrType_S 26
- #define AR_TxCtlRsvd61 0xf0000000
- +#define AR_LDPC 0x80000000
-
- #define AR_2040_0 0x00000001
- #define AR_GI0 0x00000002
- @@ -493,7 +500,6 @@ struct ar5416_desc {
-
- #define AR_RxCTLRsvd00 0xffffffff
-
- -#define AR_BufLen 0x00000fff
- #define AR_RxCtlRsvd00 0x00001000
- #define AR_RxIntrReq 0x00002000
- #define AR_RxCtlRsvd01 0xffffc000
- @@ -686,34 +692,10 @@ struct ath9k_channel;
- u32 ath9k_hw_gettxbuf(struct ath_hw *ah, u32 q);
- void ath9k_hw_puttxbuf(struct ath_hw *ah, u32 q, u32 txdp);
- void ath9k_hw_txstart(struct ath_hw *ah, u32 q);
- +void ath9k_hw_cleartxdesc(struct ath_hw *ah, void *ds);
- u32 ath9k_hw_numtxpending(struct ath_hw *ah, u32 q);
- bool ath9k_hw_updatetxtriglevel(struct ath_hw *ah, bool bIncTrigLevel);
- bool ath9k_hw_stoptxdma(struct ath_hw *ah, u32 q);
- -void ath9k_hw_filltxdesc(struct ath_hw *ah, struct ath_desc *ds,
- - u32 segLen, bool firstSeg,
- - bool lastSeg, const struct ath_desc *ds0);
- -void ath9k_hw_cleartxdesc(struct ath_hw *ah, struct ath_desc *ds);
- -int ath9k_hw_txprocdesc(struct ath_hw *ah, struct ath_desc *ds,
- - struct ath_tx_status *ts);
- -void ath9k_hw_set11n_txdesc(struct ath_hw *ah, struct ath_desc *ds,
- - u32 pktLen, enum ath9k_pkt_type type, u32 txPower,
- - u32 keyIx, enum ath9k_key_type keyType, u32 flags);
- -void ath9k_hw_set11n_ratescenario(struct ath_hw *ah, struct ath_desc *ds,
- - struct ath_desc *lastds,
- - u32 durUpdateEn, u32 rtsctsRate,
- - u32 rtsctsDuration,
- - struct ath9k_11n_rate_series series[],
- - u32 nseries, u32 flags);
- -void ath9k_hw_set11n_aggr_first(struct ath_hw *ah, struct ath_desc *ds,
- - u32 aggrLen);
- -void ath9k_hw_set11n_aggr_middle(struct ath_hw *ah, struct ath_desc *ds,
- - u32 numDelims);
- -void ath9k_hw_set11n_aggr_last(struct ath_hw *ah, struct ath_desc *ds);
- -void ath9k_hw_clr11n_aggr(struct ath_hw *ah, struct ath_desc *ds);
- -void ath9k_hw_set11n_burstduration(struct ath_hw *ah, struct ath_desc *ds,
- - u32 burstDuration);
- -void ath9k_hw_set11n_virtualmorefrag(struct ath_hw *ah, struct ath_desc *ds,
- - u32 vmf);
- void ath9k_hw_gettxintrtxqs(struct ath_hw *ah, u32 *txqs);
- bool ath9k_hw_set_txq_props(struct ath_hw *ah, int q,
- const struct ath9k_tx_queue_info *qinfo);
- @@ -729,10 +711,17 @@ void ath9k_hw_setuprxdesc(struct ath_hw
- u32 size, u32 flags);
- bool ath9k_hw_setrxabort(struct ath_hw *ah, bool set);
- void ath9k_hw_putrxbuf(struct ath_hw *ah, u32 rxdp);
- -void ath9k_hw_rxena(struct ath_hw *ah);
- void ath9k_hw_startpcureceive(struct ath_hw *ah);
- void ath9k_hw_stoppcurecv(struct ath_hw *ah);
- +void ath9k_hw_abortpcurecv(struct ath_hw *ah);
- bool ath9k_hw_stopdmarecv(struct ath_hw *ah);
- int ath9k_hw_beaconq_setup(struct ath_hw *ah);
-
- +/* Interrupt Handling */
- +bool ath9k_hw_intrpend(struct ath_hw *ah);
- +enum ath9k_int ath9k_hw_set_interrupts(struct ath_hw *ah,
- + enum ath9k_int ints);
- +
- +void ar9002_hw_attach_mac_ops(struct ath_hw *ah);
- +
- #endif /* MAC_H */
- --- a/drivers/net/wireless/ath/ath9k/main.c
- +++ b/drivers/net/wireless/ath/ath9k/main.c
- @@ -401,6 +401,7 @@ void ath9k_tasklet(unsigned long data)
- struct ath_common *common = ath9k_hw_common(ah);
-
- u32 status = sc->intrstatus;
- + u32 rxmask;
-
- ath9k_ps_wakeup(sc);
-
- @@ -410,14 +411,30 @@ void ath9k_tasklet(unsigned long data)
- return;
- }
-
- - if (status & (ATH9K_INT_RX | ATH9K_INT_RXEOL | ATH9K_INT_RXORN)) {
- + if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
- + rxmask = (ATH9K_INT_RXHP | ATH9K_INT_RXLP | ATH9K_INT_RXEOL |
- + ATH9K_INT_RXORN);
- + else
- + rxmask = (ATH9K_INT_RX | ATH9K_INT_RXEOL | ATH9K_INT_RXORN);
- +
- + if (status & rxmask) {
- spin_lock_bh(&sc->rx.rxflushlock);
- - ath_rx_tasklet(sc, 0);
- +
- + /* Check for high priority Rx first */
- + if ((ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) &&
- + (status & ATH9K_INT_RXHP))
- + ath_rx_tasklet(sc, 0, true);
- +
- + ath_rx_tasklet(sc, 0, false);
- spin_unlock_bh(&sc->rx.rxflushlock);
- }
-
- - if (status & ATH9K_INT_TX)
- - ath_tx_tasklet(sc);
- + if (status & ATH9K_INT_TX) {
- + if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
- + ath_tx_edma_tasklet(sc);
- + else
- + ath_tx_tasklet(sc);
- + }
-
- if ((status & ATH9K_INT_TSFOOR) && sc->ps_enabled) {
- /*
- @@ -445,6 +462,8 @@ irqreturn_t ath_isr(int irq, void *dev)
- ATH9K_INT_RXORN | \
- ATH9K_INT_RXEOL | \
- ATH9K_INT_RX | \
- + ATH9K_INT_RXLP | \
- + ATH9K_INT_RXHP | \
- ATH9K_INT_TX | \
- ATH9K_INT_BMISS | \
- ATH9K_INT_CST | \
- @@ -496,7 +515,8 @@ irqreturn_t ath_isr(int irq, void *dev)
- * If a FATAL or RXORN interrupt is received, we have to reset the
- * chip immediately.
- */
- - if (status & (ATH9K_INT_FATAL | ATH9K_INT_RXORN))
- + if ((status & ATH9K_INT_FATAL) || ((status & ATH9K_INT_RXORN) &&
- + !(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)))
- goto chip_reset;
-
- if (status & ATH9K_INT_SWBA)
- @@ -505,6 +525,13 @@ irqreturn_t ath_isr(int irq, void *dev)
- if (status & ATH9K_INT_TXURN)
- ath9k_hw_updatetxtriglevel(ah, true);
-
- + if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
- + if (status & ATH9K_INT_RXEOL) {
- + ah->imask &= ~(ATH9K_INT_RXEOL | ATH9K_INT_RXORN);
- + ath9k_hw_set_interrupts(ah, ah->imask);
- + }
- + }
- +
- if (status & ATH9K_INT_MIB) {
- /*
- * Disable interrupts until we service the MIB
- @@ -1162,9 +1189,14 @@ static int ath9k_start(struct ieee80211_
- }
-
- /* Setup our intr mask. */
- - ah->imask = ATH9K_INT_RX | ATH9K_INT_TX
- - | ATH9K_INT_RXEOL | ATH9K_INT_RXORN
- - | ATH9K_INT_FATAL | ATH9K_INT_GLOBAL;
- + ah->imask = ATH9K_INT_TX | ATH9K_INT_RXEOL |
- + ATH9K_INT_RXORN | ATH9K_INT_FATAL |
- + ATH9K_INT_GLOBAL;
- +
- + if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
- + ah->imask |= ATH9K_INT_RXHP | ATH9K_INT_RXLP;
- + else
- + ah->imask |= ATH9K_INT_RX;
-
- if (ah->caps.hw_caps & ATH9K_HW_CAP_GTT)
- ah->imask |= ATH9K_INT_GTT;
- --- a/drivers/net/wireless/ath/ath9k/pci.c
- +++ b/drivers/net/wireless/ath/ath9k/pci.c
- @@ -28,6 +28,7 @@ static DEFINE_PCI_DEVICE_TABLE(ath_pci_i
- { PCI_VDEVICE(ATHEROS, 0x002C) }, /* PCI-E 802.11n bonded out */
- { PCI_VDEVICE(ATHEROS, 0x002D) }, /* PCI */
- { PCI_VDEVICE(ATHEROS, 0x002E) }, /* PCI-E */
- + { PCI_VDEVICE(ATHEROS, 0x0030) }, /* PCI-E AR9300 */
- { 0 }
- };
-
- --- a/drivers/net/wireless/ath/ath9k/phy.c
- +++ /dev/null
- @@ -1,978 +0,0 @@
- -/*
- - * Copyright (c) 2008-2009 Atheros Communications Inc.
- - *
- - * Permission to use, copy, modify, and/or distribute this software for any
- - * purpose with or without fee is hereby granted, provided that the above
- - * copyright notice and this permission notice appear in all copies.
- - *
- - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- - */
- -
- -/**
- - * DOC: Programming Atheros 802.11n analog front end radios
- - *
- - * AR5416 MAC based PCI devices and AR518 MAC based PCI-Express
- - * devices have either an external AR2133 analog front end radio for single
- - * band 2.4 GHz communication or an AR5133 analog front end radio for dual
- - * band 2.4 GHz / 5 GHz communication.
- - *
- - * All devices after the AR5416 and AR5418 family starting with the AR9280
- - * have their analog front radios, MAC/BB and host PCIe/USB interface embedded
- - * into a single-chip and require less programming.
- - *
- - * The following single-chips exist with a respective embedded radio:
- - *
- - * AR9280 - 11n dual-band 2x2 MIMO for PCIe
- - * AR9281 - 11n single-band 1x2 MIMO for PCIe
- - * AR9285 - 11n single-band 1x1 for PCIe
- - * AR9287 - 11n single-band 2x2 MIMO for PCIe
- - *
- - * AR9220 - 11n dual-band 2x2 MIMO for PCI
- - * AR9223 - 11n single-band 2x2 MIMO for PCI
- - *
- - * AR9287 - 11n single-band 1x1 MIMO for USB
- - */
- -
- -#include <linux/slab.h>
- -
- -#include "hw.h"
- -
- -/**
- - * ath9k_hw_write_regs - ??
- - *
- - * @ah: atheros hardware structure
- - * @freqIndex:
- - * @regWrites:
- - *
- - * Used for both the chipsets with an external AR2133/AR5133 radios and
- - * single-chip devices.
- - */
- -void ath9k_hw_write_regs(struct ath_hw *ah, u32 freqIndex, int regWrites)
- -{
- - REG_WRITE_ARRAY(&ah->iniBB_RfGain, freqIndex, regWrites);
- -}
- -
- -/**
- - * ath9k_hw_ar9280_set_channel - set channel on single-chip device
- - * @ah: atheros hardware structure
- - * @chan:
- - *
- - * This is the function to change channel on single-chip devices, that is
- - * all devices after ar9280.
- - *
- - * This function takes the channel value in MHz and sets
- - * hardware channel value. Assumes writes have been enabled to analog bus.
- - *
- - * Actual Expression,
- - *
- - * For 2GHz channel,
- - * Channel Frequency = (3/4) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^17)
- - * (freq_ref = 40MHz)
- - *
- - * For 5GHz channel,
- - * Channel Frequency = (3/2) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^10)
- - * (freq_ref = 40MHz/(24>>amodeRefSel))
- - */
- -int ath9k_hw_ar9280_set_channel(struct ath_hw *ah, struct ath9k_channel *chan)
- -{
- - u16 bMode, fracMode, aModeRefSel = 0;
- - u32 freq, ndiv, channelSel = 0, channelFrac = 0, reg32 = 0;
- - struct chan_centers centers;
- - u32 refDivA = 24;
- -
- - ath9k_hw_get_channel_centers(ah, chan, ¢ers);
- - freq = centers.synth_center;
- -
- - reg32 = REG_READ(ah, AR_PHY_SYNTH_CONTROL);
- - reg32 &= 0xc0000000;
- -
- - if (freq < 4800) { /* 2 GHz, fractional mode */
- - u32 txctl;
- - int regWrites = 0;
- -
- - bMode = 1;
- - fracMode = 1;
- - aModeRefSel = 0;
- - channelSel = (freq * 0x10000) / 15;
- -
- - if (AR_SREV_9287_11_OR_LATER(ah)) {
- - if (freq == 2484) {
- - /* Enable channel spreading for channel 14 */
- - REG_WRITE_ARRAY(&ah->iniCckfirJapan2484,
- - 1, regWrites);
- - } else {
- - REG_WRITE_ARRAY(&ah->iniCckfirNormal,
- - 1, regWrites);
- - }
- - } else {
- - txctl = REG_READ(ah, AR_PHY_CCK_TX_CTRL);
- - if (freq == 2484) {
- - /* Enable channel spreading for channel 14 */
- - REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
- - txctl | AR_PHY_CCK_TX_CTRL_JAPAN);
- - } else {
- - REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
- - txctl &~ AR_PHY_CCK_TX_CTRL_JAPAN);
- - }
- - }
- - } else {
- - bMode = 0;
- - fracMode = 0;
- -
- - switch(ah->eep_ops->get_eeprom(ah, EEP_FRAC_N_5G)) {
- - case 0:
- - if ((freq % 20) == 0) {
- - aModeRefSel = 3;
- - } else if ((freq % 10) == 0) {
- - aModeRefSel = 2;
- - }
- - if (aModeRefSel)
- - break;
- - case 1:
- - default:
- - aModeRefSel = 0;
- - /*
- - * Enable 2G (fractional) mode for channels
- - * which are 5MHz spaced.
- - */
- - fracMode = 1;
- - refDivA = 1;
- - channelSel = (freq * 0x8000) / 15;
- -
- - /* RefDivA setting */
- - REG_RMW_FIELD(ah, AR_AN_SYNTH9,
- - AR_AN_SYNTH9_REFDIVA, refDivA);
- -
- - }
- -
- - if (!fracMode) {
- - ndiv = (freq * (refDivA >> aModeRefSel)) / 60;
- - channelSel = ndiv & 0x1ff;
- - channelFrac = (ndiv & 0xfffffe00) * 2;
- - channelSel = (channelSel << 17) | channelFrac;
- - }
- - }
- -
- - reg32 = reg32 |
- - (bMode << 29) |
- - (fracMode << 28) | (aModeRefSel << 26) | (channelSel);
- -
- - REG_WRITE(ah, AR_PHY_SYNTH_CONTROL, reg32);
- -
- - ah->curchan = chan;
- - ah->curchan_rad_index = -1;
- -
- - return 0;
- -}
- -
- -/**
- - * ath9k_hw_9280_spur_mitigate - convert baseband spur frequency
- - * @ah: atheros hardware structure
- - * @chan:
- - *
- - * For single-chip solutions. Converts to baseband spur frequency given the
- - * input channel frequency and compute register settings below.
- - */
- -void ath9k_hw_9280_spur_mitigate(struct ath_hw *ah, struct ath9k_channel *chan)
- -{
- - int bb_spur = AR_NO_SPUR;
- - int freq;
- - int bin, cur_bin;
- - int bb_spur_off, spur_subchannel_sd;
- - int spur_freq_sd;
- - int spur_delta_phase;
- - int denominator;
- - int upper, lower, cur_vit_mask;
- - int tmp, newVal;
- - int i;
- - int pilot_mask_reg[4] = { AR_PHY_TIMING7, AR_PHY_TIMING8,
- - AR_PHY_PILOT_MASK_01_30, AR_PHY_PILOT_MASK_31_60
- - };
- - int chan_mask_reg[4] = { AR_PHY_TIMING9, AR_PHY_TIMING10,
- - AR_PHY_CHANNEL_MASK_01_30, AR_PHY_CHANNEL_MASK_31_60
- - };
- - int inc[4] = { 0, 100, 0, 0 };
- - struct chan_centers centers;
- -
- - int8_t mask_m[123];
- - int8_t mask_p[123];
- - int8_t mask_amt;
- - int tmp_mask;
- - int cur_bb_spur;
- - bool is2GHz = IS_CHAN_2GHZ(chan);
- -
- - memset(&mask_m, 0, sizeof(int8_t) * 123);
- - memset(&mask_p, 0, sizeof(int8_t) * 123);
- -
- - ath9k_hw_get_channel_centers(ah, chan, ¢ers);
- - freq = centers.synth_center;
- -
- - ah->config.spurmode = SPUR_ENABLE_EEPROM;
- - for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
- - cur_bb_spur = ah->eep_ops->get_spur_channel(ah, i, is2GHz);
- -
- - if (is2GHz)
- - cur_bb_spur = (cur_bb_spur / 10) + AR_BASE_FREQ_2GHZ;
- - else
- - cur_bb_spur = (cur_bb_spur / 10) + AR_BASE_FREQ_5GHZ;
- -
- - if (AR_NO_SPUR == cur_bb_spur)
- - break;
- - cur_bb_spur = cur_bb_spur - freq;
- -
- - if (IS_CHAN_HT40(chan)) {
- - if ((cur_bb_spur > -AR_SPUR_FEEQ_BOUND_HT40) &&
- - (cur_bb_spur < AR_SPUR_FEEQ_BOUND_HT40)) {
- - bb_spur = cur_bb_spur;
- - break;
- - }
- - } else if ((cur_bb_spur > -AR_SPUR_FEEQ_BOUND_HT20) &&
- - (cur_bb_spur < AR_SPUR_FEEQ_BOUND_HT20)) {
- - bb_spur = cur_bb_spur;
- - break;
- - }
- - }
- -
- - if (AR_NO_SPUR == bb_spur) {
- - REG_CLR_BIT(ah, AR_PHY_FORCE_CLKEN_CCK,
- - AR_PHY_FORCE_CLKEN_CCK_MRC_MUX);
- - return;
- - } else {
- - REG_CLR_BIT(ah, AR_PHY_FORCE_CLKEN_CCK,
- - AR_PHY_FORCE_CLKEN_CCK_MRC_MUX);
- - }
- -
- - bin = bb_spur * 320;
- -
- - tmp = REG_READ(ah, AR_PHY_TIMING_CTRL4(0));
- -
- - newVal = tmp | (AR_PHY_TIMING_CTRL4_ENABLE_SPUR_RSSI |
- - AR_PHY_TIMING_CTRL4_ENABLE_SPUR_FILTER |
- - AR_PHY_TIMING_CTRL4_ENABLE_CHAN_MASK |
- - AR_PHY_TIMING_CTRL4_ENABLE_PILOT_MASK);
- - REG_WRITE(ah, AR_PHY_TIMING_CTRL4(0), newVal);
- -
- - newVal = (AR_PHY_SPUR_REG_MASK_RATE_CNTL |
- - AR_PHY_SPUR_REG_ENABLE_MASK_PPM |
- - AR_PHY_SPUR_REG_MASK_RATE_SELECT |
- - AR_PHY_SPUR_REG_ENABLE_VIT_SPUR_RSSI |
- - SM(SPUR_RSSI_THRESH, AR_PHY_SPUR_REG_SPUR_RSSI_THRESH));
- - REG_WRITE(ah, AR_PHY_SPUR_REG, newVal);
- -
- - if (IS_CHAN_HT40(chan)) {
- - if (bb_spur < 0) {
- - spur_subchannel_sd = 1;
- - bb_spur_off = bb_spur + 10;
- - } else {
- - spur_subchannel_sd = 0;
- - bb_spur_off = bb_spur - 10;
- - }
- - } else {
- - spur_subchannel_sd = 0;
- - bb_spur_off = bb_spur;
- - }
- -
- - if (IS_CHAN_HT40(chan))
- - spur_delta_phase =
- - ((bb_spur * 262144) /
- - 10) & AR_PHY_TIMING11_SPUR_DELTA_PHASE;
- - else
- - spur_delta_phase =
- - ((bb_spur * 524288) /
- - 10) & AR_PHY_TIMING11_SPUR_DELTA_PHASE;
- -
- - denominator = IS_CHAN_2GHZ(chan) ? 44 : 40;
- - spur_freq_sd = ((bb_spur_off * 2048) / denominator) & 0x3ff;
- -
- - newVal = (AR_PHY_TIMING11_USE_SPUR_IN_AGC |
- - SM(spur_freq_sd, AR_PHY_TIMING11_SPUR_FREQ_SD) |
- - SM(spur_delta_phase, AR_PHY_TIMING11_SPUR_DELTA_PHASE));
- - REG_WRITE(ah, AR_PHY_TIMING11, newVal);
- -
- - newVal = spur_subchannel_sd << AR_PHY_SFCORR_SPUR_SUBCHNL_SD_S;
- - REG_WRITE(ah, AR_PHY_SFCORR_EXT, newVal);
- -
- - cur_bin = -6000;
- - upper = bin + 100;
- - lower = bin - 100;
- -
- - for (i = 0; i < 4; i++) {
- - int pilot_mask = 0;
- - int chan_mask = 0;
- - int bp = 0;
- - for (bp = 0; bp < 30; bp++) {
- - if ((cur_bin > lower) && (cur_bin < upper)) {
- - pilot_mask = pilot_mask | 0x1 << bp;
- - chan_mask = chan_mask | 0x1 << bp;
- - }
- - cur_bin += 100;
- - }
- - cur_bin += inc[i];
- - REG_WRITE(ah, pilot_mask_reg[i], pilot_mask);
- - REG_WRITE(ah, chan_mask_reg[i], chan_mask);
- - }
- -
- - cur_vit_mask = 6100;
- - upper = bin + 120;
- - lower = bin - 120;
- -
- - for (i = 0; i < 123; i++) {
- - if ((cur_vit_mask > lower) && (cur_vit_mask < upper)) {
- -
- - /* workaround for gcc bug #37014 */
- - volatile int tmp_v = abs(cur_vit_mask - bin);
- -
- - if (tmp_v < 75)
- - mask_amt = 1;
- - else
- - mask_amt = 0;
- - if (cur_vit_mask < 0)
- - mask_m[abs(cur_vit_mask / 100)] = mask_amt;
- - else
- - mask_p[cur_vit_mask / 100] = mask_amt;
- - }
- - cur_vit_mask -= 100;
- - }
- -
- - tmp_mask = (mask_m[46] << 30) | (mask_m[47] << 28)
- - | (mask_m[48] << 26) | (mask_m[49] << 24)
- - | (mask_m[50] << 22) | (mask_m[51] << 20)
- - | (mask_m[52] << 18) | (mask_m[53] << 16)
- - | (mask_m[54] << 14) | (mask_m[55] << 12)
- - | (mask_m[56] << 10) | (mask_m[57] << 8)
- - | (mask_m[58] << 6) | (mask_m[59] << 4)
- - | (mask_m[60] << 2) | (mask_m[61] << 0);
- - REG_WRITE(ah, AR_PHY_BIN_MASK_1, tmp_mask);
- - REG_WRITE(ah, AR_PHY_VIT_MASK2_M_46_61, tmp_mask);
- -
- - tmp_mask = (mask_m[31] << 28)
- - | (mask_m[32] << 26) | (mask_m[33] << 24)
- - | (mask_m[34] << 22) | (mask_m[35] << 20)
- - | (mask_m[36] << 18) | (mask_m[37] << 16)
- - | (mask_m[48] << 14) | (mask_m[39] << 12)
- - | (mask_m[40] << 10) | (mask_m[41] << 8)
- - | (mask_m[42] << 6) | (mask_m[43] << 4)
- - | (mask_m[44] << 2) | (mask_m[45] << 0);
- - REG_WRITE(ah, AR_PHY_BIN_MASK_2, tmp_mask);
- - REG_WRITE(ah, AR_PHY_MASK2_M_31_45, tmp_mask);
- -
- - tmp_mask = (mask_m[16] << 30) | (mask_m[16] << 28)
- - | (mask_m[18] << 26) | (mask_m[18] << 24)
- - | (mask_m[20] << 22) | (mask_m[20] << 20)
- - | (mask_m[22] << 18) | (mask_m[22] << 16)
- - | (mask_m[24] << 14) | (mask_m[24] << 12)
- - | (mask_m[25] << 10) | (mask_m[26] << 8)
- - | (mask_m[27] << 6) | (mask_m[28] << 4)
- - | (mask_m[29] << 2) | (mask_m[30] << 0);
- - REG_WRITE(ah, AR_PHY_BIN_MASK_3, tmp_mask);
- - REG_WRITE(ah, AR_PHY_MASK2_M_16_30, tmp_mask);
- -
- - tmp_mask = (mask_m[0] << 30) | (mask_m[1] << 28)
- - | (mask_m[2] << 26) | (mask_m[3] << 24)
- - | (mask_m[4] << 22) | (mask_m[5] << 20)
- - | (mask_m[6] << 18) | (mask_m[7] << 16)
- - | (mask_m[8] << 14) | (mask_m[9] << 12)
- - | (mask_m[10] << 10) | (mask_m[11] << 8)
- - | (mask_m[12] << 6) | (mask_m[13] << 4)
- - | (mask_m[14] << 2) | (mask_m[15] << 0);
- - REG_WRITE(ah, AR_PHY_MASK_CTL, tmp_mask);
- - REG_WRITE(ah, AR_PHY_MASK2_M_00_15, tmp_mask);
- -
- - tmp_mask = (mask_p[15] << 28)
- - | (mask_p[14] << 26) | (mask_p[13] << 24)
- - | (mask_p[12] << 22) | (mask_p[11] << 20)
- - | (mask_p[10] << 18) | (mask_p[9] << 16)
- - | (mask_p[8] << 14) | (mask_p[7] << 12)
- - | (mask_p[6] << 10) | (mask_p[5] << 8)
- - | (mask_p[4] << 6) | (mask_p[3] << 4)
- - | (mask_p[2] << 2) | (mask_p[1] << 0);
- - REG_WRITE(ah, AR_PHY_BIN_MASK2_1, tmp_mask);
- - REG_WRITE(ah, AR_PHY_MASK2_P_15_01, tmp_mask);
- -
- - tmp_mask = (mask_p[30] << 28)
- - | (mask_p[29] << 26) | (mask_p[28] << 24)
- - | (mask_p[27] << 22) | (mask_p[26] << 20)
- - | (mask_p[25] << 18) | (mask_p[24] << 16)
- - | (mask_p[23] << 14) | (mask_p[22] << 12)
- - | (mask_p[21] << 10) | (mask_p[20] << 8)
- - | (mask_p[19] << 6) | (mask_p[18] << 4)
- - | (mask_p[17] << 2) | (mask_p[16] << 0);
- - REG_WRITE(ah, AR_PHY_BIN_MASK2_2, tmp_mask);
- - REG_WRITE(ah, AR_PHY_MASK2_P_30_16, tmp_mask);
- -
- - tmp_mask = (mask_p[45] << 28)
- - | (mask_p[44] << 26) | (mask_p[43] << 24)
- - | (mask_p[42] << 22) | (mask_p[41] << 20)
- - | (mask_p[40] << 18) | (mask_p[39] << 16)
- - | (mask_p[38] << 14) | (mask_p[37] << 12)
- - | (mask_p[36] << 10) | (mask_p[35] << 8)
- - | (mask_p[34] << 6) | (mask_p[33] << 4)
- - | (mask_p[32] << 2) | (mask_p[31] << 0);
- - REG_WRITE(ah, AR_PHY_BIN_MASK2_3, tmp_mask);
- - REG_WRITE(ah, AR_PHY_MASK2_P_45_31, tmp_mask);
- -
- - tmp_mask = (mask_p[61] << 30) | (mask_p[60] << 28)
- - | (mask_p[59] << 26) | (mask_p[58] << 24)
- - | (mask_p[57] << 22) | (mask_p[56] << 20)
- - | (mask_p[55] << 18) | (mask_p[54] << 16)
- - | (mask_p[53] << 14) | (mask_p[52] << 12)
- - | (mask_p[51] << 10) | (mask_p[50] << 8)
- - | (mask_p[49] << 6) | (mask_p[48] << 4)
- - | (mask_p[47] << 2) | (mask_p[46] << 0);
- - REG_WRITE(ah, AR_PHY_BIN_MASK2_4, tmp_mask);
- - REG_WRITE(ah, AR_PHY_MASK2_P_61_45, tmp_mask);
- -}
- -
- -/* All code below is for non single-chip solutions */
- -
- -/**
- - * ath9k_phy_modify_rx_buffer() - perform analog swizzling of parameters
- - * @rfbuf:
- - * @reg32:
- - * @numBits:
- - * @firstBit:
- - * @column:
- - *
- - * Performs analog "swizzling" of parameters into their location.
- - * Used on external AR2133/AR5133 radios.
- - */
- -static void ath9k_phy_modify_rx_buffer(u32 *rfBuf, u32 reg32,
- - u32 numBits, u32 firstBit,
- - u32 column)
- -{
- - u32 tmp32, mask, arrayEntry, lastBit;
- - int32_t bitPosition, bitsLeft;
- -
- - tmp32 = ath9k_hw_reverse_bits(reg32, numBits);
- - arrayEntry = (firstBit - 1) / 8;
- - bitPosition = (firstBit - 1) % 8;
- - bitsLeft = numBits;
- - while (bitsLeft > 0) {
- - lastBit = (bitPosition + bitsLeft > 8) ?
- - 8 : bitPosition + bitsLeft;
- - mask = (((1 << lastBit) - 1) ^ ((1 << bitPosition) - 1)) <<
- - (column * 8);
- - rfBuf[arrayEntry] &= ~mask;
- - rfBuf[arrayEntry] |= ((tmp32 << bitPosition) <<
- - (column * 8)) & mask;
- - bitsLeft -= 8 - bitPosition;
- - tmp32 = tmp32 >> (8 - bitPosition);
- - bitPosition = 0;
- - arrayEntry++;
- - }
- -}
- -
- -/*
- - * Fix on 2.4 GHz band for orientation sensitivity issue by increasing
- - * rf_pwd_icsyndiv.
- - *
- - * Theoretical Rules:
- - * if 2 GHz band
- - * if forceBiasAuto
- - * if synth_freq < 2412
- - * bias = 0
- - * else if 2412 <= synth_freq <= 2422
- - * bias = 1
- - * else // synth_freq > 2422
- - * bias = 2
- - * else if forceBias > 0
- - * bias = forceBias & 7
- - * else
- - * no change, use value from ini file
- - * else
- - * no change, invalid band
- - *
- - * 1st Mod:
- - * 2422 also uses value of 2
- - * <approved>
- - *
- - * 2nd Mod:
- - * Less than 2412 uses value of 0, 2412 and above uses value of 2
- - */
- -static void ath9k_hw_force_bias(struct ath_hw *ah, u16 synth_freq)
- -{
- - struct ath_common *common = ath9k_hw_common(ah);
- - u32 tmp_reg;
- - int reg_writes = 0;
- - u32 new_bias = 0;
- -
- - if (!AR_SREV_5416(ah) || synth_freq >= 3000) {
- - return;
- - }
- -
- - BUG_ON(AR_SREV_9280_10_OR_LATER(ah));
- -
- - if (synth_freq < 2412)
- - new_bias = 0;
- - else if (synth_freq < 2422)
- - new_bias = 1;
- - else
- - new_bias = 2;
- -
- - /* pre-reverse this field */
- - tmp_reg = ath9k_hw_reverse_bits(new_bias, 3);
- -
- - ath_print(common, ATH_DBG_CONFIG,
- - "Force rf_pwd_icsyndiv to %1d on %4d\n",
- - new_bias, synth_freq);
- -
- - /* swizzle rf_pwd_icsyndiv */
- - ath9k_phy_modify_rx_buffer(ah->analogBank6Data, tmp_reg, 3, 181, 3);
- -
- - /* write Bank 6 with new params */
- - REG_WRITE_RF_ARRAY(&ah->iniBank6, ah->analogBank6Data, reg_writes);
- -}
- -
- -/**
- - * ath9k_hw_set_channel - tune to a channel on the external AR2133/AR5133 radios
- - * @ah: atheros hardware stucture
- - * @chan:
- - *
- - * For the external AR2133/AR5133 radios, takes the MHz channel value and set
- - * the channel value. Assumes writes enabled to analog bus and bank6 register
- - * cache in ah->analogBank6Data.
- - */
- -int ath9k_hw_set_channel(struct ath_hw *ah, struct ath9k_channel *chan)
- -{
- - struct ath_common *common = ath9k_hw_common(ah);
- - u32 channelSel = 0;
- - u32 bModeSynth = 0;
- - u32 aModeRefSel = 0;
- - u32 reg32 = 0;
- - u16 freq;
- - struct chan_centers centers;
- -
- - ath9k_hw_get_channel_centers(ah, chan, ¢ers);
- - freq = centers.synth_center;
- -
- - if (freq < 4800) {
- - u32 txctl;
- -
- - if (((freq - 2192) % 5) == 0) {
- - channelSel = ((freq - 672) * 2 - 3040) / 10;
- - bModeSynth = 0;
- - } else if (((freq - 2224) % 5) == 0) {
- - channelSel = ((freq - 704) * 2 - 3040) / 10;
- - bModeSynth = 1;
- - } else {
- - ath_print(common, ATH_DBG_FATAL,
- - "Invalid channel %u MHz\n", freq);
- - return -EINVAL;
- - }
- -
- - channelSel = (channelSel << 2) & 0xff;
- - channelSel = ath9k_hw_reverse_bits(channelSel, 8);
- -
- - txctl = REG_READ(ah, AR_PHY_CCK_TX_CTRL);
- - if (freq == 2484) {
- -
- - REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
- - txctl | AR_PHY_CCK_TX_CTRL_JAPAN);
- - } else {
- - REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
- - txctl & ~AR_PHY_CCK_TX_CTRL_JAPAN);
- - }
- -
- - } else if ((freq % 20) == 0 && freq >= 5120) {
- - channelSel =
- - ath9k_hw_reverse_bits(((freq - 4800) / 20 << 2), 8);
- - aModeRefSel = ath9k_hw_reverse_bits(1, 2);
- - } else if ((freq % 10) == 0) {
- - channelSel =
- - ath9k_hw_reverse_bits(((freq - 4800) / 10 << 1), 8);
- - if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah))
- - aModeRefSel = ath9k_hw_reverse_bits(2, 2);
- - else
- - aModeRefSel = ath9k_hw_reverse_bits(1, 2);
- - } else if ((freq % 5) == 0) {
- - channelSel = ath9k_hw_reverse_bits((freq - 4800) / 5, 8);
- - aModeRefSel = ath9k_hw_reverse_bits(1, 2);
- - } else {
- - ath_print(common, ATH_DBG_FATAL,
- - "Invalid channel %u MHz\n", freq);
- - return -EINVAL;
- - }
- -
- - ath9k_hw_force_bias(ah, freq);
- -
- - reg32 =
- - (channelSel << 8) | (aModeRefSel << 2) | (bModeSynth << 1) |
- - (1 << 5) | 0x1;
- -
- - REG_WRITE(ah, AR_PHY(0x37), reg32);
- -
- - ah->curchan = chan;
- - ah->curchan_rad_index = -1;
- -
- - return 0;
- -}
- -
- -/**
- - * ath9k_hw_spur_mitigate - convert baseband spur frequency for external radios
- - * @ah: atheros hardware structure
- - * @chan:
- - *
- - * For non single-chip solutions. Converts to baseband spur frequency given the
- - * input channel frequency and compute register settings below.
- - */
- -void ath9k_hw_spur_mitigate(struct ath_hw *ah, struct ath9k_channel *chan)
- -{
- - int bb_spur = AR_NO_SPUR;
- - int bin, cur_bin;
- - int spur_freq_sd;
- - int spur_delta_phase;
- - int denominator;
- - int upper, lower, cur_vit_mask;
- - int tmp, new;
- - int i;
- - int pilot_mask_reg[4] = { AR_PHY_TIMING7, AR_PHY_TIMING8,
- - AR_PHY_PILOT_MASK_01_30, AR_PHY_PILOT_MASK_31_60
- - };
- - int chan_mask_reg[4] = { AR_PHY_TIMING9, AR_PHY_TIMING10,
- - AR_PHY_CHANNEL_MASK_01_30, AR_PHY_CHANNEL_MASK_31_60
- - };
- - int inc[4] = { 0, 100, 0, 0 };
- -
- - int8_t mask_m[123];
- - int8_t mask_p[123];
- - int8_t mask_amt;
- - int tmp_mask;
- - int cur_bb_spur;
- - bool is2GHz = IS_CHAN_2GHZ(chan);
- -
- - memset(&mask_m, 0, sizeof(int8_t) * 123);
- - memset(&mask_p, 0, sizeof(int8_t) * 123);
- -
- - for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
- - cur_bb_spur = ah->eep_ops->get_spur_channel(ah, i, is2GHz);
- - if (AR_NO_SPUR == cur_bb_spur)
- - break;
- - cur_bb_spur = cur_bb_spur - (chan->channel * 10);
- - if ((cur_bb_spur > -95) && (cur_bb_spur < 95)) {
- - bb_spur = cur_bb_spur;
- - break;
- - }
- - }
- -
- - if (AR_NO_SPUR == bb_spur)
- - return;
- -
- - bin = bb_spur * 32;
- -
- - tmp = REG_READ(ah, AR_PHY_TIMING_CTRL4(0));
- - new = tmp | (AR_PHY_TIMING_CTRL4_ENABLE_SPUR_RSSI |
- - AR_PHY_TIMING_CTRL4_ENABLE_SPUR_FILTER |
- - AR_PHY_TIMING_CTRL4_ENABLE_CHAN_MASK |
- - AR_PHY_TIMING_CTRL4_ENABLE_PILOT_MASK);
- -
- - REG_WRITE(ah, AR_PHY_TIMING_CTRL4(0), new);
- -
- - new = (AR_PHY_SPUR_REG_MASK_RATE_CNTL |
- - AR_PHY_SPUR_REG_ENABLE_MASK_PPM |
- - AR_PHY_SPUR_REG_MASK_RATE_SELECT |
- - AR_PHY_SPUR_REG_ENABLE_VIT_SPUR_RSSI |
- - SM(SPUR_RSSI_THRESH, AR_PHY_SPUR_REG_SPUR_RSSI_THRESH));
- - REG_WRITE(ah, AR_PHY_SPUR_REG, new);
- -
- - spur_delta_phase = ((bb_spur * 524288) / 100) &
- - AR_PHY_TIMING11_SPUR_DELTA_PHASE;
- -
- - denominator = IS_CHAN_2GHZ(chan) ? 440 : 400;
- - spur_freq_sd = ((bb_spur * 2048) / denominator) & 0x3ff;
- -
- - new = (AR_PHY_TIMING11_USE_SPUR_IN_AGC |
- - SM(spur_freq_sd, AR_PHY_TIMING11_SPUR_FREQ_SD) |
- - SM(spur_delta_phase, AR_PHY_TIMING11_SPUR_DELTA_PHASE));
- - REG_WRITE(ah, AR_PHY_TIMING11, new);
- -
- - cur_bin = -6000;
- - upper = bin + 100;
- - lower = bin - 100;
- -
- - for (i = 0; i < 4; i++) {
- - int pilot_mask = 0;
- - int chan_mask = 0;
- - int bp = 0;
- - for (bp = 0; bp < 30; bp++) {
- - if ((cur_bin > lower) && (cur_bin < upper)) {
- - pilot_mask = pilot_mask | 0x1 << bp;
- - chan_mask = chan_mask | 0x1 << bp;
- - }
- - cur_bin += 100;
- - }
- - cur_bin += inc[i];
- - REG_WRITE(ah, pilot_mask_reg[i], pilot_mask);
- - REG_WRITE(ah, chan_mask_reg[i], chan_mask);
- - }
- -
- - cur_vit_mask = 6100;
- - upper = bin + 120;
- - lower = bin - 120;
- -
- - for (i = 0; i < 123; i++) {
- - if ((cur_vit_mask > lower) && (cur_vit_mask < upper)) {
- -
- - /* workaround for gcc bug #37014 */
- - volatile int tmp_v = abs(cur_vit_mask - bin);
- -
- - if (tmp_v < 75)
- - mask_amt = 1;
- - else
- - mask_amt = 0;
- - if (cur_vit_mask < 0)
- - mask_m[abs(cur_vit_mask / 100)] = mask_amt;
- - else
- - mask_p[cur_vit_mask / 100] = mask_amt;
- - }
- - cur_vit_mask -= 100;
- - }
- -
- - tmp_mask = (mask_m[46] << 30) | (mask_m[47] << 28)
- - | (mask_m[48] << 26) | (mask_m[49] << 24)
- - | (mask_m[50] << 22) | (mask_m[51] << 20)
- - | (mask_m[52] << 18) | (mask_m[53] << 16)
- - | (mask_m[54] << 14) | (mask_m[55] << 12)
- - | (mask_m[56] << 10) | (mask_m[57] << 8)
- - | (mask_m[58] << 6) | (mask_m[59] << 4)
- - | (mask_m[60] << 2) | (mask_m[61] << 0);
- - REG_WRITE(ah, AR_PHY_BIN_MASK_1, tmp_mask);
- - REG_WRITE(ah, AR_PHY_VIT_MASK2_M_46_61, tmp_mask);
- -
- - tmp_mask = (mask_m[31] << 28)
- - | (mask_m[32] << 26) | (mask_m[33] << 24)
- - | (mask_m[34] << 22) | (mask_m[35] << 20)
- - | (mask_m[36] << 18) | (mask_m[37] << 16)
- - | (mask_m[48] << 14) | (mask_m[39] << 12)
- - | (mask_m[40] << 10) | (mask_m[41] << 8)
- - | (mask_m[42] << 6) | (mask_m[43] << 4)
- - | (mask_m[44] << 2) | (mask_m[45] << 0);
- - REG_WRITE(ah, AR_PHY_BIN_MASK_2, tmp_mask);
- - REG_WRITE(ah, AR_PHY_MASK2_M_31_45, tmp_mask);
- -
- - tmp_mask = (mask_m[16] << 30) | (mask_m[16] << 28)
- - | (mask_m[18] << 26) | (mask_m[18] << 24)
- - | (mask_m[20] << 22) | (mask_m[20] << 20)
- - | (mask_m[22] << 18) | (mask_m[22] << 16)
- - | (mask_m[24] << 14) | (mask_m[24] << 12)
- - | (mask_m[25] << 10) | (mask_m[26] << 8)
- - | (mask_m[27] << 6) | (mask_m[28] << 4)
- - | (mask_m[29] << 2) | (mask_m[30] << 0);
- - REG_WRITE(ah, AR_PHY_BIN_MASK_3, tmp_mask);
- - REG_WRITE(ah, AR_PHY_MASK2_M_16_30, tmp_mask);
- -
- - tmp_mask = (mask_m[0] << 30) | (mask_m[1] << 28)
- - | (mask_m[2] << 26) | (mask_m[3] << 24)
- - | (mask_m[4] << 22) | (mask_m[5] << 20)
- - | (mask_m[6] << 18) | (mask_m[7] << 16)
- - | (mask_m[8] << 14) | (mask_m[9] << 12)
- - | (mask_m[10] << 10) | (mask_m[11] << 8)
- - | (mask_m[12] << 6) | (mask_m[13] << 4)
- - | (mask_m[14] << 2) | (mask_m[15] << 0);
- - REG_WRITE(ah, AR_PHY_MASK_CTL, tmp_mask);
- - REG_WRITE(ah, AR_PHY_MASK2_M_00_15, tmp_mask);
- -
- - tmp_mask = (mask_p[15] << 28)
- - | (mask_p[14] << 26) | (mask_p[13] << 24)
- - | (mask_p[12] << 22) | (mask_p[11] << 20)
- - | (mask_p[10] << 18) | (mask_p[9] << 16)
- - | (mask_p[8] << 14) | (mask_p[7] << 12)
- - | (mask_p[6] << 10) | (mask_p[5] << 8)
- - | (mask_p[4] << 6) | (mask_p[3] << 4)
- - | (mask_p[2] << 2) | (mask_p[1] << 0);
- - REG_WRITE(ah, AR_PHY_BIN_MASK2_1, tmp_mask);
- - REG_WRITE(ah, AR_PHY_MASK2_P_15_01, tmp_mask);
- -
- - tmp_mask = (mask_p[30] << 28)
- - | (mask_p[29] << 26) | (mask_p[28] << 24)
- - | (mask_p[27] << 22) | (mask_p[26] << 20)
- - | (mask_p[25] << 18) | (mask_p[24] << 16)
- - | (mask_p[23] << 14) | (mask_p[22] << 12)
- - | (mask_p[21] << 10) | (mask_p[20] << 8)
- - | (mask_p[19] << 6) | (mask_p[18] << 4)
- - | (mask_p[17] << 2) | (mask_p[16] << 0);
- - REG_WRITE(ah, AR_PHY_BIN_MASK2_2, tmp_mask);
- - REG_WRITE(ah, AR_PHY_MASK2_P_30_16, tmp_mask);
- -
- - tmp_mask = (mask_p[45] << 28)
- - | (mask_p[44] << 26) | (mask_p[43] << 24)
- - | (mask_p[42] << 22) | (mask_p[41] << 20)
- - | (mask_p[40] << 18) | (mask_p[39] << 16)
- - | (mask_p[38] << 14) | (mask_p[37] << 12)
- - | (mask_p[36] << 10) | (mask_p[35] << 8)
- - | (mask_p[34] << 6) | (mask_p[33] << 4)
- - | (mask_p[32] << 2) | (mask_p[31] << 0);
- - REG_WRITE(ah, AR_PHY_BIN_MASK2_3, tmp_mask);
- - REG_WRITE(ah, AR_PHY_MASK2_P_45_31, tmp_mask);
- -
- - tmp_mask = (mask_p[61] << 30) | (mask_p[60] << 28)
- - | (mask_p[59] << 26) | (mask_p[58] << 24)
- - | (mask_p[57] << 22) | (mask_p[56] << 20)
- - | (mask_p[55] << 18) | (mask_p[54] << 16)
- - | (mask_p[53] << 14) | (mask_p[52] << 12)
- - | (mask_p[51] << 10) | (mask_p[50] << 8)
- - | (mask_p[49] << 6) | (mask_p[48] << 4)
- - | (mask_p[47] << 2) | (mask_p[46] << 0);
- - REG_WRITE(ah, AR_PHY_BIN_MASK2_4, tmp_mask);
- - REG_WRITE(ah, AR_PHY_MASK2_P_61_45, tmp_mask);
- -}
- -
- -/**
- - * ath9k_hw_rf_alloc_ext_banks - allocates banks for external radio programming
- - * @ah: atheros hardware structure
- - *
- - * Only required for older devices with external AR2133/AR5133 radios.
- - */
- -int ath9k_hw_rf_alloc_ext_banks(struct ath_hw *ah)
- -{
- -#define ATH_ALLOC_BANK(bank, size) do { \
- - bank = kzalloc((sizeof(u32) * size), GFP_KERNEL); \
- - if (!bank) { \
- - ath_print(common, ATH_DBG_FATAL, \
- - "Cannot allocate RF banks\n"); \
- - return -ENOMEM; \
- - } \
- - } while (0);
- -
- - struct ath_common *common = ath9k_hw_common(ah);
- -
- - BUG_ON(AR_SREV_9280_10_OR_LATER(ah));
- -
- - ATH_ALLOC_BANK(ah->analogBank0Data, ah->iniBank0.ia_rows);
- - ATH_ALLOC_BANK(ah->analogBank1Data, ah->iniBank1.ia_rows);
- - ATH_ALLOC_BANK(ah->analogBank2Data, ah->iniBank2.ia_rows);
- - ATH_ALLOC_BANK(ah->analogBank3Data, ah->iniBank3.ia_rows);
- - ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows);
- - ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows);
- - ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows);
- - ATH_ALLOC_BANK(ah->addac5416_21,
- - ah->iniAddac.ia_rows * ah->iniAddac.ia_columns);
- - ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows);
- -
- - return 0;
- -#undef ATH_ALLOC_BANK
- -}
- -
- -
- -/**
- - * ath9k_hw_rf_free_ext_banks - Free memory for analog bank scratch buffers
- - * @ah: atheros hardware struture
- - * For the external AR2133/AR5133 radios banks.
- - */
- -void
- -ath9k_hw_rf_free_ext_banks(struct ath_hw *ah)
- -{
- -#define ATH_FREE_BANK(bank) do { \
- - kfree(bank); \
- - bank = NULL; \
- - } while (0);
- -
- - BUG_ON(AR_SREV_9280_10_OR_LATER(ah));
- -
- - ATH_FREE_BANK(ah->analogBank0Data);
- - ATH_FREE_BANK(ah->analogBank1Data);
- - ATH_FREE_BANK(ah->analogBank2Data);
- - ATH_FREE_BANK(ah->analogBank3Data);
- - ATH_FREE_BANK(ah->analogBank6Data);
- - ATH_FREE_BANK(ah->analogBank6TPCData);
- - ATH_FREE_BANK(ah->analogBank7Data);
- - ATH_FREE_BANK(ah->addac5416_21);
- - ATH_FREE_BANK(ah->bank6Temp);
- -
- -#undef ATH_FREE_BANK
- -}
- -
- -/* *
- - * ath9k_hw_set_rf_regs - programs rf registers based on EEPROM
- - * @ah: atheros hardware structure
- - * @chan:
- - * @modesIndex:
- - *
- - * Used for the external AR2133/AR5133 radios.
- - *
- - * Reads the EEPROM header info from the device structure and programs
- - * all rf registers. This routine requires access to the analog
- - * rf device. This is not required for single-chip devices.
- - */
- -bool ath9k_hw_set_rf_regs(struct ath_hw *ah, struct ath9k_channel *chan,
- - u16 modesIndex)
- -{
- - u32 eepMinorRev;
- - u32 ob5GHz = 0, db5GHz = 0;
- - u32 ob2GHz = 0, db2GHz = 0;
- - int regWrites = 0;
- -
- - /*
- - * Software does not need to program bank data
- - * for single chip devices, that is AR9280 or anything
- - * after that.
- - */
- - if (AR_SREV_9280_10_OR_LATER(ah))
- - return true;
- -
- - /* Setup rf parameters */
- - eepMinorRev = ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV);
- -
- - /* Setup Bank 0 Write */
- - RF_BANK_SETUP(ah->analogBank0Data, &ah->iniBank0, 1);
- -
- - /* Setup Bank 1 Write */
- - RF_BANK_SETUP(ah->analogBank1Data, &ah->iniBank1, 1);
- -
- - /* Setup Bank 2 Write */
- - RF_BANK_SETUP(ah->analogBank2Data, &ah->iniBank2, 1);
- -
- - /* Setup Bank 6 Write */
- - RF_BANK_SETUP(ah->analogBank3Data, &ah->iniBank3,
- - modesIndex);
- - {
- - int i;
- - for (i = 0; i < ah->iniBank6TPC.ia_rows; i++) {
- - ah->analogBank6Data[i] =
- - INI_RA(&ah->iniBank6TPC, i, modesIndex);
- - }
- - }
- -
- - /* Only the 5 or 2 GHz OB/DB need to be set for a mode */
- - if (eepMinorRev >= 2) {
- - if (IS_CHAN_2GHZ(chan)) {
- - ob2GHz = ah->eep_ops->get_eeprom(ah, EEP_OB_2);
- - db2GHz = ah->eep_ops->get_eeprom(ah, EEP_DB_2);
- - ath9k_phy_modify_rx_buffer(ah->analogBank6Data,
- - ob2GHz, 3, 197, 0);
- - ath9k_phy_modify_rx_buffer(ah->analogBank6Data,
- - db2GHz, 3, 194, 0);
- - } else {
- - ob5GHz = ah->eep_ops->get_eeprom(ah, EEP_OB_5);
- - db5GHz = ah->eep_ops->get_eeprom(ah, EEP_DB_5);
- - ath9k_phy_modify_rx_buffer(ah->analogBank6Data,
- - ob5GHz, 3, 203, 0);
- - ath9k_phy_modify_rx_buffer(ah->analogBank6Data,
- - db5GHz, 3, 200, 0);
- - }
- - }
- -
- - /* Setup Bank 7 Setup */
- - RF_BANK_SETUP(ah->analogBank7Data, &ah->iniBank7, 1);
- -
- - /* Write Analog registers */
- - REG_WRITE_RF_ARRAY(&ah->iniBank0, ah->analogBank0Data,
- - regWrites);
- - REG_WRITE_RF_ARRAY(&ah->iniBank1, ah->analogBank1Data,
- - regWrites);
- - REG_WRITE_RF_ARRAY(&ah->iniBank2, ah->analogBank2Data,
- - regWrites);
- - REG_WRITE_RF_ARRAY(&ah->iniBank3, ah->analogBank3Data,
- - regWrites);
- - REG_WRITE_RF_ARRAY(&ah->iniBank6TPC, ah->analogBank6Data,
- - regWrites);
- - REG_WRITE_RF_ARRAY(&ah->iniBank7, ah->analogBank7Data,
- - regWrites);
- -
- - return true;
- -}
- --- a/drivers/net/wireless/ath/ath9k/phy.h
- +++ b/drivers/net/wireless/ath/ath9k/phy.h
- @@ -17,504 +17,15 @@
- #ifndef PHY_H
- #define PHY_H
-
- -/* Common between single chip and non single-chip solutions */
- -void ath9k_hw_write_regs(struct ath_hw *ah, u32 freqIndex, int regWrites);
- -
- -/* Single chip radio settings */
- -int ath9k_hw_ar9280_set_channel(struct ath_hw *ah, struct ath9k_channel *chan);
- -void ath9k_hw_9280_spur_mitigate(struct ath_hw *ah, struct ath9k_channel *chan);
- -
- -/* Routines below are for non single-chip solutions */
- -int ath9k_hw_set_channel(struct ath_hw *ah, struct ath9k_channel *chan);
- -void ath9k_hw_spur_mitigate(struct ath_hw *ah, struct ath9k_channel *chan);
- -
- -int ath9k_hw_rf_alloc_ext_banks(struct ath_hw *ah);
- -void ath9k_hw_rf_free_ext_banks(struct ath_hw *ah);
- -
- -bool ath9k_hw_set_rf_regs(struct ath_hw *ah,
- - struct ath9k_channel *chan,
- - u16 modesIndex);
- +#define CHANSEL_DIV 15
- +#define CHANSEL_2G(_freq) (((_freq) * 0x10000) / CHANSEL_DIV)
- +#define CHANSEL_5G(_freq) (((_freq) * 0x8000) / CHANSEL_DIV)
-
- #define AR_PHY_BASE 0x9800
- #define AR_PHY(_n) (AR_PHY_BASE + ((_n)<<2))
-
- -#define AR_PHY_TEST 0x9800
- -#define PHY_AGC_CLR 0x10000000
- -#define RFSILENT_BB 0x00002000
- -
- -#define AR_PHY_TURBO 0x9804
- -#define AR_PHY_FC_TURBO_MODE 0x00000001
- -#define AR_PHY_FC_TURBO_SHORT 0x00000002
- -#define AR_PHY_FC_DYN2040_EN 0x00000004
- -#define AR_PHY_FC_DYN2040_PRI_ONLY 0x00000008
- -#define AR_PHY_FC_DYN2040_PRI_CH 0x00000010
- -/* For 25 MHz channel spacing -- not used but supported by hw */
- -#define AR_PHY_FC_DYN2040_EXT_CH 0x00000020
- -#define AR_PHY_FC_HT_EN 0x00000040
- -#define AR_PHY_FC_SHORT_GI_40 0x00000080
- -#define AR_PHY_FC_WALSH 0x00000100
- -#define AR_PHY_FC_SINGLE_HT_LTF1 0x00000200
- -#define AR_PHY_FC_ENABLE_DAC_FIFO 0x00000800
- -
- -#define AR_PHY_TEST2 0x9808
- -
- -#define AR_PHY_TIMING2 0x9810
- -#define AR_PHY_TIMING3 0x9814
- -#define AR_PHY_TIMING3_DSC_MAN 0xFFFE0000
- -#define AR_PHY_TIMING3_DSC_MAN_S 17
- -#define AR_PHY_TIMING3_DSC_EXP 0x0001E000
- -#define AR_PHY_TIMING3_DSC_EXP_S 13
- -
- -#define AR_PHY_CHIP_ID 0x9818
- -#define AR_PHY_CHIP_ID_REV_0 0x80
- -#define AR_PHY_CHIP_ID_REV_1 0x81
- -#define AR_PHY_CHIP_ID_9160_REV_0 0xb0
- -
- -#define AR_PHY_ACTIVE 0x981C
- -#define AR_PHY_ACTIVE_EN 0x00000001
- -#define AR_PHY_ACTIVE_DIS 0x00000000
- -
- -#define AR_PHY_RF_CTL2 0x9824
- -#define AR_PHY_TX_END_DATA_START 0x000000FF
- -#define AR_PHY_TX_END_DATA_START_S 0
- -#define AR_PHY_TX_END_PA_ON 0x0000FF00
- -#define AR_PHY_TX_END_PA_ON_S 8
- -
- -#define AR_PHY_RF_CTL3 0x9828
- -#define AR_PHY_TX_END_TO_A2_RX_ON 0x00FF0000
- -#define AR_PHY_TX_END_TO_A2_RX_ON_S 16
- -
- -#define AR_PHY_ADC_CTL 0x982C
- -#define AR_PHY_ADC_CTL_OFF_INBUFGAIN 0x00000003
- -#define AR_PHY_ADC_CTL_OFF_INBUFGAIN_S 0
- -#define AR_PHY_ADC_CTL_OFF_PWDDAC 0x00002000
- -#define AR_PHY_ADC_CTL_OFF_PWDBANDGAP 0x00004000
- -#define AR_PHY_ADC_CTL_OFF_PWDADC 0x00008000
- -#define AR_PHY_ADC_CTL_ON_INBUFGAIN 0x00030000
- -#define AR_PHY_ADC_CTL_ON_INBUFGAIN_S 16
- -
- -#define AR_PHY_ADC_SERIAL_CTL 0x9830
- -#define AR_PHY_SEL_INTERNAL_ADDAC 0x00000000
- -#define AR_PHY_SEL_EXTERNAL_RADIO 0x00000001
- -
- -#define AR_PHY_RF_CTL4 0x9834
- -#define AR_PHY_RF_CTL4_TX_END_XPAB_OFF 0xFF000000
- -#define AR_PHY_RF_CTL4_TX_END_XPAB_OFF_S 24
- -#define AR_PHY_RF_CTL4_TX_END_XPAA_OFF 0x00FF0000
- -#define AR_PHY_RF_CTL4_TX_END_XPAA_OFF_S 16
- -#define AR_PHY_RF_CTL4_FRAME_XPAB_ON 0x0000FF00
- -#define AR_PHY_RF_CTL4_FRAME_XPAB_ON_S 8
- -#define AR_PHY_RF_CTL4_FRAME_XPAA_ON 0x000000FF
- -#define AR_PHY_RF_CTL4_FRAME_XPAA_ON_S 0
- -
- -#define AR_PHY_TSTDAC_CONST 0x983c
- -
- -#define AR_PHY_SETTLING 0x9844
- -#define AR_PHY_SETTLING_SWITCH 0x00003F80
- -#define AR_PHY_SETTLING_SWITCH_S 7
- -
- -#define AR_PHY_RXGAIN 0x9848
- -#define AR_PHY_RXGAIN_TXRX_ATTEN 0x0003F000
- -#define AR_PHY_RXGAIN_TXRX_ATTEN_S 12
- -#define AR_PHY_RXGAIN_TXRX_RF_MAX 0x007C0000
- -#define AR_PHY_RXGAIN_TXRX_RF_MAX_S 18
- -#define AR9280_PHY_RXGAIN_TXRX_ATTEN 0x00003F80
- -#define AR9280_PHY_RXGAIN_TXRX_ATTEN_S 7
- -#define AR9280_PHY_RXGAIN_TXRX_MARGIN 0x001FC000
- -#define AR9280_PHY_RXGAIN_TXRX_MARGIN_S 14
- -
- -#define AR_PHY_DESIRED_SZ 0x9850
- -#define AR_PHY_DESIRED_SZ_ADC 0x000000FF
- -#define AR_PHY_DESIRED_SZ_ADC_S 0
- -#define AR_PHY_DESIRED_SZ_PGA 0x0000FF00
- -#define AR_PHY_DESIRED_SZ_PGA_S 8
- -#define AR_PHY_DESIRED_SZ_TOT_DES 0x0FF00000
- -#define AR_PHY_DESIRED_SZ_TOT_DES_S 20
- -
- -#define AR_PHY_FIND_SIG 0x9858
- -#define AR_PHY_FIND_SIG_FIRSTEP 0x0003F000
- -#define AR_PHY_FIND_SIG_FIRSTEP_S 12
- -#define AR_PHY_FIND_SIG_FIRPWR 0x03FC0000
- -#define AR_PHY_FIND_SIG_FIRPWR_S 18
- -
- -#define AR_PHY_AGC_CTL1 0x985C
- -#define AR_PHY_AGC_CTL1_COARSE_LOW 0x00007F80
- -#define AR_PHY_AGC_CTL1_COARSE_LOW_S 7
- -#define AR_PHY_AGC_CTL1_COARSE_HIGH 0x003F8000
- -#define AR_PHY_AGC_CTL1_COARSE_HIGH_S 15
- -
- -#define AR_PHY_AGC_CONTROL 0x9860
- -#define AR_PHY_AGC_CONTROL_CAL 0x00000001
- -#define AR_PHY_AGC_CONTROL_NF 0x00000002
- -#define AR_PHY_AGC_CONTROL_ENABLE_NF 0x00008000
- -#define AR_PHY_AGC_CONTROL_FLTR_CAL 0x00010000
- -#define AR_PHY_AGC_CONTROL_NO_UPDATE_NF 0x00020000
- -
- -#define AR_PHY_CCA 0x9864
- -#define AR_PHY_MINCCA_PWR 0x0FF80000
- -#define AR_PHY_MINCCA_PWR_S 19
- -#define AR_PHY_CCA_THRESH62 0x0007F000
- -#define AR_PHY_CCA_THRESH62_S 12
- -#define AR9280_PHY_MINCCA_PWR 0x1FF00000
- -#define AR9280_PHY_MINCCA_PWR_S 20
- -#define AR9280_PHY_CCA_THRESH62 0x000FF000
- -#define AR9280_PHY_CCA_THRESH62_S 12
- -
- -#define AR_PHY_SFCORR_LOW 0x986C
- -#define AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW 0x00000001
- -#define AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW 0x00003F00
- -#define AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW_S 8
- -#define AR_PHY_SFCORR_LOW_M1_THRESH_LOW 0x001FC000
- -#define AR_PHY_SFCORR_LOW_M1_THRESH_LOW_S 14
- -#define AR_PHY_SFCORR_LOW_M2_THRESH_LOW 0x0FE00000
- -#define AR_PHY_SFCORR_LOW_M2_THRESH_LOW_S 21
- -
- -#define AR_PHY_SFCORR 0x9868
- -#define AR_PHY_SFCORR_M2COUNT_THR 0x0000001F
- -#define AR_PHY_SFCORR_M2COUNT_THR_S 0
- -#define AR_PHY_SFCORR_M1_THRESH 0x00FE0000
- -#define AR_PHY_SFCORR_M1_THRESH_S 17
- -#define AR_PHY_SFCORR_M2_THRESH 0x7F000000
- -#define AR_PHY_SFCORR_M2_THRESH_S 24
- -
- -#define AR_PHY_SLEEP_CTR_CONTROL 0x9870
- -#define AR_PHY_SLEEP_CTR_LIMIT 0x9874
- -#define AR_PHY_SYNTH_CONTROL 0x9874
- -#define AR_PHY_SLEEP_SCAL 0x9878
- -
- -#define AR_PHY_PLL_CTL 0x987c
- -#define AR_PHY_PLL_CTL_40 0xaa
- -#define AR_PHY_PLL_CTL_40_5413 0x04
- -#define AR_PHY_PLL_CTL_44 0xab
- -#define AR_PHY_PLL_CTL_44_2133 0xeb
- -#define AR_PHY_PLL_CTL_40_2133 0xea
- -
- -#define AR_PHY_SPECTRAL_SCAN 0x9910 /* AR9280 spectral scan configuration register */
- -#define AR_PHY_SPECTRAL_SCAN_ENABLE 0x1
- -#define AR_PHY_SPECTRAL_SCAN_ENA 0x00000001 /* Enable spectral scan, reg 68, bit 0 */
- -#define AR_PHY_SPECTRAL_SCAN_ENA_S 0 /* Enable spectral scan, reg 68, bit 0 */
- -#define AR_PHY_SPECTRAL_SCAN_ACTIVE 0x00000002 /* Activate spectral scan reg 68, bit 1*/
- -#define AR_PHY_SPECTRAL_SCAN_ACTIVE_S 1 /* Activate spectral scan reg 68, bit 1*/
- -#define AR_PHY_SPECTRAL_SCAN_FFT_PERIOD 0x000000F0 /* Interval for FFT reports, reg 68, bits 4-7*/
- -#define AR_PHY_SPECTRAL_SCAN_FFT_PERIOD_S 4
- -#define AR_PHY_SPECTRAL_SCAN_PERIOD 0x0000FF00 /* Interval for FFT reports, reg 68, bits 8-15*/
- -#define AR_PHY_SPECTRAL_SCAN_PERIOD_S 8
- -#define AR_PHY_SPECTRAL_SCAN_COUNT 0x00FF0000 /* Number of reports, reg 68, bits 16-23*/
- -#define AR_PHY_SPECTRAL_SCAN_COUNT_S 16
- -#define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT 0x01000000 /* Short repeat, reg 68, bit 24*/
- -#define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT_S 24 /* Short repeat, reg 68, bit 24*/
- -
- -#define AR_PHY_RX_DELAY 0x9914
- -#define AR_PHY_SEARCH_START_DELAY 0x9918
- -#define AR_PHY_RX_DELAY_DELAY 0x00003FFF
- -
- -#define AR_PHY_TIMING_CTRL4(_i) (0x9920 + ((_i) << 12))
- -#define AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF 0x01F
- -#define AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF_S 0
- -#define AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF 0x7E0
- -#define AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF_S 5
- -#define AR_PHY_TIMING_CTRL4_IQCORR_ENABLE 0x800
- -#define AR_PHY_TIMING_CTRL4_IQCAL_LOG_COUNT_MAX 0xF000
- -#define AR_PHY_TIMING_CTRL4_IQCAL_LOG_COUNT_MAX_S 12
- -#define AR_PHY_TIMING_CTRL4_DO_CAL 0x10000
- -
- -#define AR_PHY_TIMING_CTRL4_ENABLE_SPUR_RSSI 0x80000000
- -#define AR_PHY_TIMING_CTRL4_ENABLE_SPUR_FILTER 0x40000000
- -#define AR_PHY_TIMING_CTRL4_ENABLE_CHAN_MASK 0x20000000
- -#define AR_PHY_TIMING_CTRL4_ENABLE_PILOT_MASK 0x10000000
- -
- -#define AR_PHY_TIMING5 0x9924
- -#define AR_PHY_TIMING5_CYCPWR_THR1 0x000000FE
- -#define AR_PHY_TIMING5_CYCPWR_THR1_S 1
- -
- -#define AR_PHY_POWER_TX_RATE1 0x9934
- -#define AR_PHY_POWER_TX_RATE2 0x9938
- -#define AR_PHY_POWER_TX_RATE_MAX 0x993c
- -#define AR_PHY_POWER_TX_RATE_MAX_TPC_ENABLE 0x00000040
- -
- -#define AR_PHY_FRAME_CTL 0x9944
- -#define AR_PHY_FRAME_CTL_TX_CLIP 0x00000038
- -#define AR_PHY_FRAME_CTL_TX_CLIP_S 3
- -
- -#define AR_PHY_TXPWRADJ 0x994C
- -#define AR_PHY_TXPWRADJ_CCK_GAIN_DELTA 0x00000FC0
- -#define AR_PHY_TXPWRADJ_CCK_GAIN_DELTA_S 6
- -#define AR_PHY_TXPWRADJ_CCK_PCDAC_INDEX 0x00FC0000
- -#define AR_PHY_TXPWRADJ_CCK_PCDAC_INDEX_S 18
- -
- -#define AR_PHY_RADAR_EXT 0x9940
- -#define AR_PHY_RADAR_EXT_ENA 0x00004000
- -
- -#define AR_PHY_RADAR_0 0x9954
- -#define AR_PHY_RADAR_0_ENA 0x00000001
- -#define AR_PHY_RADAR_0_FFT_ENA 0x80000000
- -#define AR_PHY_RADAR_0_INBAND 0x0000003e
- -#define AR_PHY_RADAR_0_INBAND_S 1
- -#define AR_PHY_RADAR_0_PRSSI 0x00000FC0
- -#define AR_PHY_RADAR_0_PRSSI_S 6
- -#define AR_PHY_RADAR_0_HEIGHT 0x0003F000
- -#define AR_PHY_RADAR_0_HEIGHT_S 12
- -#define AR_PHY_RADAR_0_RRSSI 0x00FC0000
- -#define AR_PHY_RADAR_0_RRSSI_S 18
- -#define AR_PHY_RADAR_0_FIRPWR 0x7F000000
- -#define AR_PHY_RADAR_0_FIRPWR_S 24
- -
- -#define AR_PHY_RADAR_1 0x9958
- -#define AR_PHY_RADAR_1_RELPWR_ENA 0x00800000
- -#define AR_PHY_RADAR_1_USE_FIR128 0x00400000
- -#define AR_PHY_RADAR_1_RELPWR_THRESH 0x003F0000
- -#define AR_PHY_RADAR_1_RELPWR_THRESH_S 16
- -#define AR_PHY_RADAR_1_BLOCK_CHECK 0x00008000
- -#define AR_PHY_RADAR_1_MAX_RRSSI 0x00004000
- -#define AR_PHY_RADAR_1_RELSTEP_CHECK 0x00002000
- -#define AR_PHY_RADAR_1_RELSTEP_THRESH 0x00001F00
- -#define AR_PHY_RADAR_1_RELSTEP_THRESH_S 8
- -#define AR_PHY_RADAR_1_MAXLEN 0x000000FF
- -#define AR_PHY_RADAR_1_MAXLEN_S 0
- -
- -#define AR_PHY_SWITCH_CHAIN_0 0x9960
- -#define AR_PHY_SWITCH_COM 0x9964
- -
- -#define AR_PHY_SIGMA_DELTA 0x996C
- -#define AR_PHY_SIGMA_DELTA_ADC_SEL 0x00000003
- -#define AR_PHY_SIGMA_DELTA_ADC_SEL_S 0
- -#define AR_PHY_SIGMA_DELTA_FILT2 0x000000F8
- -#define AR_PHY_SIGMA_DELTA_FILT2_S 3
- -#define AR_PHY_SIGMA_DELTA_FILT1 0x00001F00
- -#define AR_PHY_SIGMA_DELTA_FILT1_S 8
- -#define AR_PHY_SIGMA_DELTA_ADC_CLIP 0x01FFE000
- -#define AR_PHY_SIGMA_DELTA_ADC_CLIP_S 13
- -
- -#define AR_PHY_RESTART 0x9970
- -#define AR_PHY_RESTART_DIV_GC 0x001C0000
- -#define AR_PHY_RESTART_DIV_GC_S 18
- -
- -#define AR_PHY_RFBUS_REQ 0x997C
- -#define AR_PHY_RFBUS_REQ_EN 0x00000001
- -
- -#define AR_PHY_TIMING7 0x9980
- -#define AR_PHY_TIMING8 0x9984
- -#define AR_PHY_TIMING8_PILOT_MASK_2 0x000FFFFF
- -#define AR_PHY_TIMING8_PILOT_MASK_2_S 0
- -
- -#define AR_PHY_BIN_MASK2_1 0x9988
- -#define AR_PHY_BIN_MASK2_2 0x998c
- -#define AR_PHY_BIN_MASK2_3 0x9990
- -#define AR_PHY_BIN_MASK2_4 0x9994
- -
- -#define AR_PHY_BIN_MASK_1 0x9900
- -#define AR_PHY_BIN_MASK_2 0x9904
- -#define AR_PHY_BIN_MASK_3 0x9908
- -
- -#define AR_PHY_MASK_CTL 0x990c
- -
- -#define AR_PHY_BIN_MASK2_4_MASK_4 0x00003FFF
- -#define AR_PHY_BIN_MASK2_4_MASK_4_S 0
- -
- -#define AR_PHY_TIMING9 0x9998
- -#define AR_PHY_TIMING10 0x999c
- -#define AR_PHY_TIMING10_PILOT_MASK_2 0x000FFFFF
- -#define AR_PHY_TIMING10_PILOT_MASK_2_S 0
- -
- -#define AR_PHY_TIMING11 0x99a0
- -#define AR_PHY_TIMING11_SPUR_DELTA_PHASE 0x000FFFFF
- -#define AR_PHY_TIMING11_SPUR_DELTA_PHASE_S 0
- -#define AR_PHY_TIMING11_SPUR_FREQ_SD 0x3FF00000
- -#define AR_PHY_TIMING11_SPUR_FREQ_SD_S 20
- -#define AR_PHY_TIMING11_USE_SPUR_IN_AGC 0x40000000
- -#define AR_PHY_TIMING11_USE_SPUR_IN_SELFCOR 0x80000000
- -
- -#define AR_PHY_RX_CHAINMASK 0x99a4
- -#define AR_PHY_NEW_ADC_DC_GAIN_CORR(_i) (0x99b4 + ((_i) << 12))
- -#define AR_PHY_NEW_ADC_GAIN_CORR_ENABLE 0x40000000
- -#define AR_PHY_NEW_ADC_DC_OFFSET_CORR_ENABLE 0x80000000
- -
- -#define AR_PHY_MULTICHAIN_GAIN_CTL 0x99ac
- -#define AR_PHY_9285_ANT_DIV_CTL_ALL 0x7f000000
- -#define AR_PHY_9285_ANT_DIV_CTL 0x01000000
- -#define AR_PHY_9285_ANT_DIV_CTL_S 24
- -#define AR_PHY_9285_ANT_DIV_ALT_LNACONF 0x06000000
- -#define AR_PHY_9285_ANT_DIV_ALT_LNACONF_S 25
- -#define AR_PHY_9285_ANT_DIV_MAIN_LNACONF 0x18000000
- -#define AR_PHY_9285_ANT_DIV_MAIN_LNACONF_S 27
- -#define AR_PHY_9285_ANT_DIV_ALT_GAINTB 0x20000000
- -#define AR_PHY_9285_ANT_DIV_ALT_GAINTB_S 29
- -#define AR_PHY_9285_ANT_DIV_MAIN_GAINTB 0x40000000
- -#define AR_PHY_9285_ANT_DIV_MAIN_GAINTB_S 30
- -#define AR_PHY_9285_ANT_DIV_LNA1 2
- -#define AR_PHY_9285_ANT_DIV_LNA2 1
- -#define AR_PHY_9285_ANT_DIV_LNA1_PLUS_LNA2 3
- -#define AR_PHY_9285_ANT_DIV_LNA1_MINUS_LNA2 0
- -#define AR_PHY_9285_ANT_DIV_GAINTB_0 0
- -#define AR_PHY_9285_ANT_DIV_GAINTB_1 1
- -
- -#define AR_PHY_EXT_CCA0 0x99b8
- -#define AR_PHY_EXT_CCA0_THRESH62 0x000000FF
- -#define AR_PHY_EXT_CCA0_THRESH62_S 0
- -
- -#define AR_PHY_EXT_CCA 0x99bc
- -#define AR_PHY_EXT_CCA_CYCPWR_THR1 0x0000FE00
- -#define AR_PHY_EXT_CCA_CYCPWR_THR1_S 9
- -#define AR_PHY_EXT_CCA_THRESH62 0x007F0000
- -#define AR_PHY_EXT_CCA_THRESH62_S 16
- -#define AR_PHY_EXT_MINCCA_PWR 0xFF800000
- -#define AR_PHY_EXT_MINCCA_PWR_S 23
- -#define AR9280_PHY_EXT_MINCCA_PWR 0x01FF0000
- -#define AR9280_PHY_EXT_MINCCA_PWR_S 16
- -
- -#define AR_PHY_SFCORR_EXT 0x99c0
- -#define AR_PHY_SFCORR_EXT_M1_THRESH 0x0000007F
- -#define AR_PHY_SFCORR_EXT_M1_THRESH_S 0
- -#define AR_PHY_SFCORR_EXT_M2_THRESH 0x00003F80
- -#define AR_PHY_SFCORR_EXT_M2_THRESH_S 7
- -#define AR_PHY_SFCORR_EXT_M1_THRESH_LOW 0x001FC000
- -#define AR_PHY_SFCORR_EXT_M1_THRESH_LOW_S 14
- -#define AR_PHY_SFCORR_EXT_M2_THRESH_LOW 0x0FE00000
- -#define AR_PHY_SFCORR_EXT_M2_THRESH_LOW_S 21
- -#define AR_PHY_SFCORR_SPUR_SUBCHNL_SD_S 28
- -
- -#define AR_PHY_HALFGI 0x99D0
- -#define AR_PHY_HALFGI_DSC_MAN 0x0007FFF0
- -#define AR_PHY_HALFGI_DSC_MAN_S 4
- -#define AR_PHY_HALFGI_DSC_EXP 0x0000000F
- -#define AR_PHY_HALFGI_DSC_EXP_S 0
- -
- -#define AR_PHY_CHAN_INFO_MEMORY 0x99DC
- -#define AR_PHY_CHAN_INFO_MEMORY_CAPTURE_MASK 0x0001
- -
- -#define AR_PHY_HEAVY_CLIP_ENABLE 0x99E0
- -
- -#define AR_PHY_HEAVY_CLIP_FACTOR_RIFS 0x99EC
- -#define AR_PHY_RIFS_INIT_DELAY 0x03ff0000
- -
- -#define AR_PHY_M_SLEEP 0x99f0
- -#define AR_PHY_REFCLKDLY 0x99f4
- -#define AR_PHY_REFCLKPD 0x99f8
- -
- -#define AR_PHY_CALMODE 0x99f0
- -
- -#define AR_PHY_CALMODE_IQ 0x00000000
- -#define AR_PHY_CALMODE_ADC_GAIN 0x00000001
- -#define AR_PHY_CALMODE_ADC_DC_PER 0x00000002
- -#define AR_PHY_CALMODE_ADC_DC_INIT 0x00000003
- -
- -#define AR_PHY_CAL_MEAS_0(_i) (0x9c10 + ((_i) << 12))
- -#define AR_PHY_CAL_MEAS_1(_i) (0x9c14 + ((_i) << 12))
- -#define AR_PHY_CAL_MEAS_2(_i) (0x9c18 + ((_i) << 12))
- -#define AR_PHY_CAL_MEAS_3(_i) (0x9c1c + ((_i) << 12))
- -
- -#define AR_PHY_CURRENT_RSSI 0x9c1c
- -#define AR9280_PHY_CURRENT_RSSI 0x9c3c
- -
- -#define AR_PHY_RFBUS_GRANT 0x9C20
- -#define AR_PHY_RFBUS_GRANT_EN 0x00000001
- -
- -#define AR_PHY_CHAN_INFO_GAIN_DIFF 0x9CF4
- -#define AR_PHY_CHAN_INFO_GAIN_DIFF_UPPER_LIMIT 320
- -
- -#define AR_PHY_CHAN_INFO_GAIN 0x9CFC
- -
- -#define AR_PHY_MODE 0xA200
- -#define AR_PHY_MODE_ASYNCFIFO 0x80
- -#define AR_PHY_MODE_AR2133 0x08
- -#define AR_PHY_MODE_AR5111 0x00
- -#define AR_PHY_MODE_AR5112 0x08
- -#define AR_PHY_MODE_DYNAMIC 0x04
- -#define AR_PHY_MODE_RF2GHZ 0x02
- -#define AR_PHY_MODE_RF5GHZ 0x00
- -#define AR_PHY_MODE_CCK 0x01
- -#define AR_PHY_MODE_OFDM 0x00
- -#define AR_PHY_MODE_DYN_CCK_DISABLE 0x100
- -
- -#define AR_PHY_CCK_TX_CTRL 0xA204
- -#define AR_PHY_CCK_TX_CTRL_JAPAN 0x00000010
- -#define AR_PHY_CCK_TX_CTRL_TX_DAC_SCALE_CCK 0x0000000C
- -#define AR_PHY_CCK_TX_CTRL_TX_DAC_SCALE_CCK_S 2
- -
- -#define AR_PHY_CCK_DETECT 0xA208
- -#define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK 0x0000003F
- -#define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK_S 0
- -/* [12:6] settling time for antenna switch */
- -#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME 0x00001FC0
- -#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME_S 6
- -#define AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV 0x2000
- -#define AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV_S 13
- -
- -#define AR_PHY_GAIN_2GHZ 0xA20C
- -#define AR_PHY_GAIN_2GHZ_RXTX_MARGIN 0x00FC0000
- -#define AR_PHY_GAIN_2GHZ_RXTX_MARGIN_S 18
- -#define AR_PHY_GAIN_2GHZ_BSW_MARGIN 0x00003C00
- -#define AR_PHY_GAIN_2GHZ_BSW_MARGIN_S 10
- -#define AR_PHY_GAIN_2GHZ_BSW_ATTEN 0x0000001F
- -#define AR_PHY_GAIN_2GHZ_BSW_ATTEN_S 0
- -
- -#define AR_PHY_GAIN_2GHZ_XATTEN2_MARGIN 0x003E0000
- -#define AR_PHY_GAIN_2GHZ_XATTEN2_MARGIN_S 17
- -#define AR_PHY_GAIN_2GHZ_XATTEN1_MARGIN 0x0001F000
- -#define AR_PHY_GAIN_2GHZ_XATTEN1_MARGIN_S 12
- -#define AR_PHY_GAIN_2GHZ_XATTEN2_DB 0x00000FC0
- -#define AR_PHY_GAIN_2GHZ_XATTEN2_DB_S 6
- -#define AR_PHY_GAIN_2GHZ_XATTEN1_DB 0x0000003F
- -#define AR_PHY_GAIN_2GHZ_XATTEN1_DB_S 0
- -
- -#define AR_PHY_CCK_RXCTRL4 0xA21C
- -#define AR_PHY_CCK_RXCTRL4_FREQ_EST_SHORT 0x01F80000
- -#define AR_PHY_CCK_RXCTRL4_FREQ_EST_SHORT_S 19
- -
- -#define AR_PHY_DAG_CTRLCCK 0xA228
- -#define AR_PHY_DAG_CTRLCCK_EN_RSSI_THR 0x00000200
- -#define AR_PHY_DAG_CTRLCCK_RSSI_THR 0x0001FC00
- -#define AR_PHY_DAG_CTRLCCK_RSSI_THR_S 10
- -
- -#define AR_PHY_FORCE_CLKEN_CCK 0xA22C
- -#define AR_PHY_FORCE_CLKEN_CCK_MRC_MUX 0x00000040
- -
- -#define AR_PHY_POWER_TX_RATE3 0xA234
- -#define AR_PHY_POWER_TX_RATE4 0xA238
- -
- -#define AR_PHY_SCRM_SEQ_XR 0xA23C
- -#define AR_PHY_HEADER_DETECT_XR 0xA240
- -#define AR_PHY_CHIRP_DETECTED_XR 0xA244
- -#define AR_PHY_BLUETOOTH 0xA254
- -
- -#define AR_PHY_TPCRG1 0xA258
- -#define AR_PHY_TPCRG1_NUM_PD_GAIN 0x0000c000
- -#define AR_PHY_TPCRG1_NUM_PD_GAIN_S 14
- -
- -#define AR_PHY_TPCRG1_PD_GAIN_1 0x00030000
- -#define AR_PHY_TPCRG1_PD_GAIN_1_S 16
- -#define AR_PHY_TPCRG1_PD_GAIN_2 0x000C0000
- -#define AR_PHY_TPCRG1_PD_GAIN_2_S 18
- -#define AR_PHY_TPCRG1_PD_GAIN_3 0x00300000
- -#define AR_PHY_TPCRG1_PD_GAIN_3_S 20
- -
- -#define AR_PHY_TPCRG1_PD_CAL_ENABLE 0x00400000
- -#define AR_PHY_TPCRG1_PD_CAL_ENABLE_S 22
- -
- -#define AR_PHY_TX_PWRCTRL4 0xa264
- -#define AR_PHY_TX_PWRCTRL_PD_AVG_VALID 0x00000001
- -#define AR_PHY_TX_PWRCTRL_PD_AVG_VALID_S 0
- -#define AR_PHY_TX_PWRCTRL_PD_AVG_OUT 0x000001FE
- -#define AR_PHY_TX_PWRCTRL_PD_AVG_OUT_S 1
- -
- -#define AR_PHY_TX_PWRCTRL6_0 0xa270
- -#define AR_PHY_TX_PWRCTRL6_1 0xb270
- -#define AR_PHY_TX_PWRCTRL_ERR_EST_MODE 0x03000000
- -#define AR_PHY_TX_PWRCTRL_ERR_EST_MODE_S 24
- -
- -#define AR_PHY_TX_PWRCTRL7 0xa274
- #define AR_PHY_TX_PWRCTRL_TX_GAIN_TAB_MAX 0x0007E000
- #define AR_PHY_TX_PWRCTRL_TX_GAIN_TAB_MAX_S 13
- -#define AR_PHY_TX_PWRCTRL_INIT_TX_GAIN 0x01F80000
- -#define AR_PHY_TX_PWRCTRL_INIT_TX_GAIN_S 19
- -
- -#define AR_PHY_TX_PWRCTRL9 0xa27C
- -#define AR_PHY_TX_DESIRED_SCALE_CCK 0x00007C00
- -#define AR_PHY_TX_DESIRED_SCALE_CCK_S 10
- -#define AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL 0x80000000
- -#define AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL_S 31
- -
- -#define AR_PHY_TX_GAIN_TBL1 0xa300
- #define AR_PHY_TX_GAIN_CLC 0x0000001E
- #define AR_PHY_TX_GAIN_CLC_S 1
- #define AR_PHY_TX_GAIN 0x0007F000
- @@ -526,91 +37,6 @@ bool ath9k_hw_set_rf_regs(struct ath_hw
- #define AR_PHY_CLC_Q0 0x0000ffd0
- #define AR_PHY_CLC_Q0_S 5
-
- -#define AR_PHY_CH0_TX_PWRCTRL11 0xa398
- -#define AR_PHY_CH1_TX_PWRCTRL11 0xb398
- -#define AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP 0x0000FC00
- -#define AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP_S 10
- -
- -#define AR_PHY_VIT_MASK2_M_46_61 0xa3a0
- -#define AR_PHY_MASK2_M_31_45 0xa3a4
- -#define AR_PHY_MASK2_M_16_30 0xa3a8
- -#define AR_PHY_MASK2_M_00_15 0xa3ac
- -#define AR_PHY_MASK2_P_15_01 0xa3b8
- -#define AR_PHY_MASK2_P_30_16 0xa3bc
- -#define AR_PHY_MASK2_P_45_31 0xa3c0
- -#define AR_PHY_MASK2_P_61_45 0xa3c4
- -#define AR_PHY_SPUR_REG 0x994c
- -
- -#define AR_PHY_SPUR_REG_MASK_RATE_CNTL (0xFF << 18)
- -#define AR_PHY_SPUR_REG_MASK_RATE_CNTL_S 18
- -
- -#define AR_PHY_SPUR_REG_ENABLE_MASK_PPM 0x20000
- -#define AR_PHY_SPUR_REG_MASK_RATE_SELECT (0xFF << 9)
- -#define AR_PHY_SPUR_REG_MASK_RATE_SELECT_S 9
- -#define AR_PHY_SPUR_REG_ENABLE_VIT_SPUR_RSSI 0x100
- -#define AR_PHY_SPUR_REG_SPUR_RSSI_THRESH 0x7F
- -#define AR_PHY_SPUR_REG_SPUR_RSSI_THRESH_S 0
- -
- -#define AR_PHY_PILOT_MASK_01_30 0xa3b0
- -#define AR_PHY_PILOT_MASK_31_60 0xa3b4
- -
- -#define AR_PHY_CHANNEL_MASK_01_30 0x99d4
- -#define AR_PHY_CHANNEL_MASK_31_60 0x99d8
- -
- -#define AR_PHY_ANALOG_SWAP 0xa268
- -#define AR_PHY_SWAP_ALT_CHAIN 0x00000040
- -
- -#define AR_PHY_TPCRG5 0xA26C
- -#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP 0x0000000F
- -#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP_S 0
- -#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1 0x000003F0
- -#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1_S 4
- -#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2 0x0000FC00
- -#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2_S 10
- -#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3 0x003F0000
- -#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3_S 16
- -#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4 0x0FC00000
- -#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4_S 22
- -
- -/* Carrier leak calibration control, do it after AGC calibration */
- -#define AR_PHY_CL_CAL_CTL 0xA358
- -#define AR_PHY_CL_CAL_ENABLE 0x00000002
- -#define AR_PHY_PARALLEL_CAL_ENABLE 0x00000001
- -
- -#define AR_PHY_POWER_TX_RATE5 0xA38C
- -#define AR_PHY_POWER_TX_RATE6 0xA390
- -
- -#define AR_PHY_CAL_CHAINMASK 0xA39C
- -
- -#define AR_PHY_POWER_TX_SUB 0xA3C8
- -#define AR_PHY_POWER_TX_RATE7 0xA3CC
- -#define AR_PHY_POWER_TX_RATE8 0xA3D0
- -#define AR_PHY_POWER_TX_RATE9 0xA3D4
- -
- -#define AR_PHY_XPA_CFG 0xA3D8
- -#define AR_PHY_FORCE_XPA_CFG 0x000000001
- -#define AR_PHY_FORCE_XPA_CFG_S 0
- -
- -#define AR_PHY_CH1_CCA 0xa864
- -#define AR_PHY_CH1_MINCCA_PWR 0x0FF80000
- -#define AR_PHY_CH1_MINCCA_PWR_S 19
- -#define AR9280_PHY_CH1_MINCCA_PWR 0x1FF00000
- -#define AR9280_PHY_CH1_MINCCA_PWR_S 20
- -
- -#define AR_PHY_CH2_CCA 0xb864
- -#define AR_PHY_CH2_MINCCA_PWR 0x0FF80000
- -#define AR_PHY_CH2_MINCCA_PWR_S 19
- -
- -#define AR_PHY_CH1_EXT_CCA 0xa9bc
- -#define AR_PHY_CH1_EXT_MINCCA_PWR 0xFF800000
- -#define AR_PHY_CH1_EXT_MINCCA_PWR_S 23
- -#define AR9280_PHY_CH1_EXT_MINCCA_PWR 0x01FF0000
- -#define AR9280_PHY_CH1_EXT_MINCCA_PWR_S 16
- -
- -#define AR_PHY_CH2_EXT_CCA 0xb9bc
- -#define AR_PHY_CH2_EXT_MINCCA_PWR 0xFF800000
- -#define AR_PHY_CH2_EXT_MINCCA_PWR_S 23
- -
- #define REG_WRITE_RF_ARRAY(iniarray, regData, regWr) do { \
- int r; \
- for (r = 0; r < ((iniarray)->ia_rows); r++) { \
- @@ -625,6 +51,7 @@ bool ath9k_hw_set_rf_regs(struct ath_hw
- #define ANTSWAP_AB 0x0001
- #define REDUCE_CHAIN_0 0x00000050
- #define REDUCE_CHAIN_1 0x00000051
- +#define AR_PHY_CHIP_ID 0x9818
-
- #define RF_BANK_SETUP(_bank, _iniarray, _col) do { \
- int i; \
- @@ -632,4 +59,7 @@ bool ath9k_hw_set_rf_regs(struct ath_hw
- (_bank)[i] = INI_RA((_iniarray), i, _col);; \
- } while (0)
-
- +#define AR_PHY_TIMING11_SPUR_FREQ_SD 0x3FF00000
- +#define AR_PHY_TIMING11_SPUR_FREQ_SD_S 20
- +
- #endif
- --- a/drivers/net/wireless/ath/ath9k/rc.c
- +++ b/drivers/net/wireless/ath/ath9k/rc.c
- @@ -691,6 +691,15 @@ static void ath_get_rate(void *priv, str
- rate_table = sc->cur_rate_table;
- rix = ath_rc_get_highest_rix(sc, ath_rc_priv, rate_table, &is_probe);
-
- + /*
- + * If we're in HT mode and both us and our peer supports LDPC.
- + * We don't need to check our own device's capabilities as our own
- + * ht capabilities would have already been intersected with our peer's.
- + */
- + if (conf_is_ht(&sc->hw->conf) &&
- + (sta->ht_cap.cap & IEEE80211_HT_CAP_LDPC_CODING))
- + tx_info->flags |= IEEE80211_TX_CTL_LDPC;
- +
- if (is_probe) {
- /* set one try for probe rates. For the
- * probes don't enable rts */
- --- a/drivers/net/wireless/ath/ath9k/recv.c
- +++ b/drivers/net/wireless/ath/ath9k/recv.c
- @@ -16,6 +16,8 @@
-
- #include "ath9k.h"
-
- +#define SKB_CB_ATHBUF(__skb) (*((struct ath_buf **)__skb->cb))
- +
- static struct ieee80211_hw * ath_get_virt_hw(struct ath_softc *sc,
- struct ieee80211_hdr *hdr)
- {
- @@ -115,56 +117,246 @@ static void ath_opmode_init(struct ath_s
- ath9k_hw_setmcastfilter(ah, mfilt[0], mfilt[1]);
- }
-
- -int ath_rx_init(struct ath_softc *sc, int nbufs)
- +static bool ath_rx_edma_buf_link(struct ath_softc *sc,
- + enum ath9k_rx_qtype qtype)
- {
- - struct ath_common *common = ath9k_hw_common(sc->sc_ah);
- + struct ath_hw *ah = sc->sc_ah;
- + struct ath_rx_edma *rx_edma;
- struct sk_buff *skb;
- struct ath_buf *bf;
- - int error = 0;
-
- - spin_lock_init(&sc->rx.rxflushlock);
- - sc->sc_flags &= ~SC_OP_RXFLUSH;
- - spin_lock_init(&sc->rx.rxbuflock);
- + rx_edma = &sc->rx.rx_edma[qtype];
- + if (skb_queue_len(&rx_edma->rx_fifo) >= rx_edma->rx_fifo_hwsize)
- + return false;
-
- - common->rx_bufsize = roundup(IEEE80211_MAX_MPDU_LEN,
- - min(common->cachelsz, (u16)64));
- + bf = list_first_entry(&sc->rx.rxbuf, struct ath_buf, list);
- + list_del_init(&bf->list);
- +
- + skb = bf->bf_mpdu;
-
- - ath_print(common, ATH_DBG_CONFIG, "cachelsz %u rxbufsize %u\n",
- - common->cachelsz, common->rx_bufsize);
- + ATH_RXBUF_RESET(bf);
- + memset(skb->data, 0, ah->caps.rx_status_len);
- + dma_sync_single_for_device(sc->dev, bf->bf_buf_addr,
- + ah->caps.rx_status_len, DMA_TO_DEVICE);
- +
- + SKB_CB_ATHBUF(skb) = bf;
- + ath9k_hw_addrxbuf_edma(ah, bf->bf_buf_addr, qtype);
- + skb_queue_tail(&rx_edma->rx_fifo, skb);
- +
- + return true;
- +}
-
- - /* Initialize rx descriptors */
- +static void ath_rx_addbuffer_edma(struct ath_softc *sc,
- + enum ath9k_rx_qtype qtype, int size)
- +{
- + struct ath_rx_edma *rx_edma;
- + struct ath_common *common = ath9k_hw_common(sc->sc_ah);
- + u32 nbuf = 0;
-
- - error = ath_descdma_setup(sc, &sc->rx.rxdma, &sc->rx.rxbuf,
- - "rx", nbufs, 1);
- - if (error != 0) {
- - ath_print(common, ATH_DBG_FATAL,
- - "failed to allocate rx descriptors: %d\n", error);
- - goto err;
- + rx_edma = &sc->rx.rx_edma[qtype];
- + if (list_empty(&sc->rx.rxbuf)) {
- + ath_print(common, ATH_DBG_QUEUE, "No free rx buf available\n");
- + return;
- }
-
- + while (!list_empty(&sc->rx.rxbuf)) {
- + nbuf++;
- +
- + if (!ath_rx_edma_buf_link(sc, qtype))
- + break;
- +
- + if (nbuf >= size)
- + break;
- + }
- +}
- +
- +static void ath_rx_remove_buffer(struct ath_softc *sc,
- + enum ath9k_rx_qtype qtype)
- +{
- + struct ath_buf *bf;
- + struct ath_rx_edma *rx_edma;
- + struct sk_buff *skb;
- +
- + rx_edma = &sc->rx.rx_edma[qtype];
- +
- + while ((skb = skb_dequeue(&rx_edma->rx_fifo)) != NULL) {
- + bf = SKB_CB_ATHBUF(skb);
- + BUG_ON(!bf);
- + list_add_tail(&bf->list, &sc->rx.rxbuf);
- + }
- +}
- +
- +static void ath_rx_edma_cleanup(struct ath_softc *sc)
- +{
- + struct ath_buf *bf;
- +
- + ath_rx_remove_buffer(sc, ATH9K_RX_QUEUE_LP);
- + ath_rx_remove_buffer(sc, ATH9K_RX_QUEUE_HP);
- +
- list_for_each_entry(bf, &sc->rx.rxbuf, list) {
- + if (bf->bf_mpdu)
- + dev_kfree_skb_any(bf->bf_mpdu);
- + }
- +
- + INIT_LIST_HEAD(&sc->rx.rxbuf);
- +
- + kfree(sc->rx.rx_bufptr);
- + sc->rx.rx_bufptr = NULL;
- +}
- +
- +static void ath_rx_edma_init_queue(struct ath_rx_edma *rx_edma, int size)
- +{
- + skb_queue_head_init(&rx_edma->rx_fifo);
- + skb_queue_head_init(&rx_edma->rx_buffers);
- + rx_edma->rx_fifo_hwsize = size;
- +}
- +
- +static int ath_rx_edma_init(struct ath_softc *sc, int nbufs)
- +{
- + struct ath_common *common = ath9k_hw_common(sc->sc_ah);
- + struct ath_hw *ah = sc->sc_ah;
- + struct sk_buff *skb;
- + struct ath_buf *bf;
- + int error = 0, i;
- + u32 size;
- +
- +
- + common->rx_bufsize = roundup(IEEE80211_MAX_MPDU_LEN +
- + ah->caps.rx_status_len,
- + min(common->cachelsz, (u16)64));
- +
- + ath9k_hw_set_rx_bufsize(ah, common->rx_bufsize -
- + ah->caps.rx_status_len);
- +
- + ath_rx_edma_init_queue(&sc->rx.rx_edma[ATH9K_RX_QUEUE_LP],
- + ah->caps.rx_lp_qdepth);
- + ath_rx_edma_init_queue(&sc->rx.rx_edma[ATH9K_RX_QUEUE_HP],
- + ah->caps.rx_hp_qdepth);
- +
- + size = sizeof(struct ath_buf) * nbufs;
- + bf = kzalloc(size, GFP_KERNEL);
- + if (!bf)
- + return -ENOMEM;
- +
- + INIT_LIST_HEAD(&sc->rx.rxbuf);
- + sc->rx.rx_bufptr = bf;
- +
- + for (i = 0; i < nbufs; i++, bf++) {
- skb = ath_rxbuf_alloc(common, common->rx_bufsize, GFP_KERNEL);
- - if (skb == NULL) {
- + if (!skb) {
- error = -ENOMEM;
- - goto err;
- + goto rx_init_fail;
- }
-
- + memset(skb->data, 0, common->rx_bufsize);
- bf->bf_mpdu = skb;
- +
- bf->bf_buf_addr = dma_map_single(sc->dev, skb->data,
- common->rx_bufsize,
- - DMA_FROM_DEVICE);
- + DMA_BIDIRECTIONAL);
- if (unlikely(dma_mapping_error(sc->dev,
- - bf->bf_buf_addr))) {
- - dev_kfree_skb_any(skb);
- - bf->bf_mpdu = NULL;
- + bf->bf_buf_addr))) {
- + dev_kfree_skb_any(skb);
- + bf->bf_mpdu = NULL;
- + ath_print(common, ATH_DBG_FATAL,
- + "dma_mapping_error() on RX init\n");
- + error = -ENOMEM;
- + goto rx_init_fail;
- + }
- +
- + list_add_tail(&bf->list, &sc->rx.rxbuf);
- + }
- +
- + return 0;
- +
- +rx_init_fail:
- + ath_rx_edma_cleanup(sc);
- + return error;
- +}
- +
- +static void ath_edma_start_recv(struct ath_softc *sc)
- +{
- + spin_lock_bh(&sc->rx.rxbuflock);
- +
- + ath9k_hw_rxena(sc->sc_ah);
- +
- + ath_rx_addbuffer_edma(sc, ATH9K_RX_QUEUE_HP,
- + sc->rx.rx_edma[ATH9K_RX_QUEUE_HP].rx_fifo_hwsize);
- +
- + ath_rx_addbuffer_edma(sc, ATH9K_RX_QUEUE_LP,
- + sc->rx.rx_edma[ATH9K_RX_QUEUE_LP].rx_fifo_hwsize);
- +
- + spin_unlock_bh(&sc->rx.rxbuflock);
- +
- + ath_opmode_init(sc);
- +
- + ath9k_hw_startpcureceive(sc->sc_ah);
- +}
- +
- +static void ath_edma_stop_recv(struct ath_softc *sc)
- +{
- + spin_lock_bh(&sc->rx.rxbuflock);
- + ath_rx_remove_buffer(sc, ATH9K_RX_QUEUE_HP);
- + ath_rx_remove_buffer(sc, ATH9K_RX_QUEUE_LP);
- + spin_unlock_bh(&sc->rx.rxbuflock);
- +}
- +
- +int ath_rx_init(struct ath_softc *sc, int nbufs)
- +{
- + struct ath_common *common = ath9k_hw_common(sc->sc_ah);
- + struct sk_buff *skb;
- + struct ath_buf *bf;
- + int error = 0;
- +
- + spin_lock_init(&sc->rx.rxflushlock);
- + sc->sc_flags &= ~SC_OP_RXFLUSH;
- + spin_lock_init(&sc->rx.rxbuflock);
- +
- + if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
- + return ath_rx_edma_init(sc, nbufs);
- + } else {
- + common->rx_bufsize = roundup(IEEE80211_MAX_MPDU_LEN,
- + min(common->cachelsz, (u16)64));
- +
- + ath_print(common, ATH_DBG_CONFIG, "cachelsz %u rxbufsize %u\n",
- + common->cachelsz, common->rx_bufsize);
- +
- + /* Initialize rx descriptors */
- +
- + error = ath_descdma_setup(sc, &sc->rx.rxdma, &sc->rx.rxbuf,
- + "rx", nbufs, 1, 0);
- + if (error != 0) {
- ath_print(common, ATH_DBG_FATAL,
- - "dma_mapping_error() on RX init\n");
- - error = -ENOMEM;
- + "failed to allocate rx descriptors: %d\n",
- + error);
- goto err;
- }
- - bf->bf_dmacontext = bf->bf_buf_addr;
- +
- + list_for_each_entry(bf, &sc->rx.rxbuf, list) {
- + skb = ath_rxbuf_alloc(common, common->rx_bufsize,
- + GFP_KERNEL);
- + if (skb == NULL) {
- + error = -ENOMEM;
- + goto err;
- + }
- +
- + bf->bf_mpdu = skb;
- + bf->bf_buf_addr = dma_map_single(sc->dev, skb->data,
- + common->rx_bufsize,
- + DMA_FROM_DEVICE);
- + if (unlikely(dma_mapping_error(sc->dev,
- + bf->bf_buf_addr))) {
- + dev_kfree_skb_any(skb);
- + bf->bf_mpdu = NULL;
- + ath_print(common, ATH_DBG_FATAL,
- + "dma_mapping_error() on RX init\n");
- + error = -ENOMEM;
- + goto err;
- + }
- + bf->bf_dmacontext = bf->bf_buf_addr;
- + }
- + sc->rx.rxlink = NULL;
- }
- - sc->rx.rxlink = NULL;
-
- err:
- if (error)
- @@ -180,17 +372,23 @@ void ath_rx_cleanup(struct ath_softc *sc
- struct sk_buff *skb;
- struct ath_buf *bf;
-
- - list_for_each_entry(bf, &sc->rx.rxbuf, list) {
- - skb = bf->bf_mpdu;
- - if (skb) {
- - dma_unmap_single(sc->dev, bf->bf_buf_addr,
- - common->rx_bufsize, DMA_FROM_DEVICE);
- - dev_kfree_skb(skb);
- + if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
- + ath_rx_edma_cleanup(sc);
- + return;
- + } else {
- + list_for_each_entry(bf, &sc->rx.rxbuf, list) {
- + skb = bf->bf_mpdu;
- + if (skb) {
- + dma_unmap_single(sc->dev, bf->bf_buf_addr,
- + common->rx_bufsize,
- + DMA_FROM_DEVICE);
- + dev_kfree_skb(skb);
- + }
- }
- - }
-
- - if (sc->rx.rxdma.dd_desc_len != 0)
- - ath_descdma_cleanup(sc, &sc->rx.rxdma, &sc->rx.rxbuf);
- + if (sc->rx.rxdma.dd_desc_len != 0)
- + ath_descdma_cleanup(sc, &sc->rx.rxdma, &sc->rx.rxbuf);
- + }
- }
-
- /*
- @@ -273,6 +471,11 @@ int ath_startrecv(struct ath_softc *sc)
- struct ath_hw *ah = sc->sc_ah;
- struct ath_buf *bf, *tbf;
-
- + if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
- + ath_edma_start_recv(sc);
- + return 0;
- + }
- +
- spin_lock_bh(&sc->rx.rxbuflock);
- if (list_empty(&sc->rx.rxbuf))
- goto start_recv;
- @@ -306,7 +509,12 @@ bool ath_stoprecv(struct ath_softc *sc)
- ath9k_hw_stoppcurecv(ah);
- ath9k_hw_setrxfilter(ah, 0);
- stopped = ath9k_hw_stopdmarecv(ah);
- - sc->rx.rxlink = NULL;
- +
- + if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
- + ath_edma_stop_recv(sc);
- + } else {
- + sc->rx.rxlink = NULL;
- + }
-
- return stopped;
- }
- @@ -315,7 +523,9 @@ void ath_flushrecv(struct ath_softc *sc)
- {
- spin_lock_bh(&sc->rx.rxflushlock);
- sc->sc_flags |= SC_OP_RXFLUSH;
- - ath_rx_tasklet(sc, 1);
- + if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
- + ath_rx_tasklet(sc, 1, true);
- + ath_rx_tasklet(sc, 1, false);
- sc->sc_flags &= ~SC_OP_RXFLUSH;
- spin_unlock_bh(&sc->rx.rxflushlock);
- }
- @@ -469,14 +679,147 @@ static void ath_rx_send_to_mac80211(stru
- ieee80211_rx(hw, skb);
- }
-
- -int ath_rx_tasklet(struct ath_softc *sc, int flush)
- +static bool ath_edma_get_buffers(struct ath_softc *sc,
- + enum ath9k_rx_qtype qtype)
- {
- -#define PA2DESC(_sc, _pa) \
- - ((struct ath_desc *)((caddr_t)(_sc)->rx.rxdma.dd_desc + \
- - ((_pa) - (_sc)->rx.rxdma.dd_desc_paddr)))
- + struct ath_rx_edma *rx_edma = &sc->rx.rx_edma[qtype];
- + struct ath_hw *ah = sc->sc_ah;
- + struct ath_common *common = ath9k_hw_common(ah);
- + struct sk_buff *skb;
- + struct ath_buf *bf;
- + int ret;
- +
- + skb = skb_peek(&rx_edma->rx_fifo);
- + if (!skb)
- + return false;
- +
- + bf = SKB_CB_ATHBUF(skb);
- + BUG_ON(!bf);
- +
- + dma_sync_single_for_device(sc->dev, bf->bf_buf_addr,
- + common->rx_bufsize, DMA_FROM_DEVICE);
- +
- + ret = ath9k_hw_process_rxdesc_edma(ah, NULL, skb->data);
- + if (ret == -EINPROGRESS)
- + return false;
- +
- + __skb_unlink(skb, &rx_edma->rx_fifo);
- + if (ret == -EINVAL) {
- + /* corrupt descriptor, skip this one and the following one */
- + list_add_tail(&bf->list, &sc->rx.rxbuf);
- + ath_rx_edma_buf_link(sc, qtype);
- + skb = skb_peek(&rx_edma->rx_fifo);
- + if (!skb)
- + return true;
-
- + bf = SKB_CB_ATHBUF(skb);
- + BUG_ON(!bf);
- +
- + __skb_unlink(skb, &rx_edma->rx_fifo);
- + list_add_tail(&bf->list, &sc->rx.rxbuf);
- + ath_rx_edma_buf_link(sc, qtype);
- + }
- + skb_queue_tail(&rx_edma->rx_buffers, skb);
- +
- + return true;
- +}
- +
- +static struct ath_buf *ath_edma_get_next_rx_buf(struct ath_softc *sc,
- + struct ath_rx_status *rs,
- + enum ath9k_rx_qtype qtype)
- +{
- + struct ath_rx_edma *rx_edma = &sc->rx.rx_edma[qtype];
- + struct sk_buff *skb;
- struct ath_buf *bf;
- +
- + while (ath_edma_get_buffers(sc, qtype));
- + skb = __skb_dequeue(&rx_edma->rx_buffers);
- + if (!skb)
- + return NULL;
- +
- + bf = SKB_CB_ATHBUF(skb);
- + ath9k_hw_process_rxdesc_edma(sc->sc_ah, rs, skb->data);
- + return bf;
- +}
- +
- +static struct ath_buf *ath_get_next_rx_buf(struct ath_softc *sc,
- + struct ath_rx_status *rs)
- +{
- + struct ath_hw *ah = sc->sc_ah;
- + struct ath_common *common = ath9k_hw_common(ah);
- struct ath_desc *ds;
- + struct ath_buf *bf;
- + int ret;
- +
- + if (list_empty(&sc->rx.rxbuf)) {
- + sc->rx.rxlink = NULL;
- + return NULL;
- + }
- +
- + bf = list_first_entry(&sc->rx.rxbuf, struct ath_buf, list);
- + ds = bf->bf_desc;
- +
- + /*
- + * Must provide the virtual address of the current
- + * descriptor, the physical address, and the virtual
- + * address of the next descriptor in the h/w chain.
- + * This allows the HAL to look ahead to see if the
- + * hardware is done with a descriptor by checking the
- + * done bit in the following descriptor and the address
- + * of the current descriptor the DMA engine is working
- + * on. All this is necessary because of our use of
- + * a self-linked list to avoid rx overruns.
- + */
- + ret = ath9k_hw_rxprocdesc(ah, ds, rs, 0);
- + if (ret == -EINPROGRESS) {
- + struct ath_rx_status trs;
- + struct ath_buf *tbf;
- + struct ath_desc *tds;
- +
- + memset(&trs, 0, sizeof(trs));
- + if (list_is_last(&bf->list, &sc->rx.rxbuf)) {
- + sc->rx.rxlink = NULL;
- + return NULL;
- + }
- +
- + tbf = list_entry(bf->list.next, struct ath_buf, list);
- +
- + /*
- + * On some hardware the descriptor status words could
- + * get corrupted, including the done bit. Because of
- + * this, check if the next descriptor's done bit is
- + * set or not.
- + *
- + * If the next descriptor's done bit is set, the current
- + * descriptor has been corrupted. Force s/w to discard
- + * this descriptor and continue...
- + */
- +
- + tds = tbf->bf_desc;
- + ret = ath9k_hw_rxprocdesc(ah, tds, &trs, 0);
- + if (ret == -EINPROGRESS)
- + return NULL;
- + }
- +
- + if (!bf->bf_mpdu)
- + return bf;
- +
- + /*
- + * Synchronize the DMA transfer with CPU before
- + * 1. accessing the frame
- + * 2. requeueing the same buffer to h/w
- + */
- + dma_sync_single_for_device(sc->dev, bf->bf_buf_addr,
- + common->rx_bufsize,
- + DMA_FROM_DEVICE);
- +
- + return bf;
- +}
- +
- +
- +int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
- +{
- + struct ath_buf *bf;
- struct sk_buff *skb = NULL, *requeue_skb;
- struct ieee80211_rx_status *rxs;
- struct ath_hw *ah = sc->sc_ah;
- @@ -491,7 +834,16 @@ int ath_rx_tasklet(struct ath_softc *sc,
- int retval;
- bool decrypt_error = false;
- struct ath_rx_status rs;
- + enum ath9k_rx_qtype qtype;
- + bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
- + int dma_type;
- +
- + if (edma)
- + dma_type = DMA_FROM_DEVICE;
- + else
- + dma_type = DMA_BIDIRECTIONAL;
-
- + qtype = hp ? ATH9K_RX_QUEUE_HP : ATH9K_RX_QUEUE_LP;
- spin_lock_bh(&sc->rx.rxbuflock);
-
- do {
- @@ -499,71 +851,19 @@ int ath_rx_tasklet(struct ath_softc *sc,
- if ((sc->sc_flags & SC_OP_RXFLUSH) && (flush == 0))
- break;
-
- - if (list_empty(&sc->rx.rxbuf)) {
- - sc->rx.rxlink = NULL;
- - break;
- - }
- -
- - bf = list_first_entry(&sc->rx.rxbuf, struct ath_buf, list);
- - ds = bf->bf_desc;
- -
- - /*
- - * Must provide the virtual address of the current
- - * descriptor, the physical address, and the virtual
- - * address of the next descriptor in the h/w chain.
- - * This allows the HAL to look ahead to see if the
- - * hardware is done with a descriptor by checking the
- - * done bit in the following descriptor and the address
- - * of the current descriptor the DMA engine is working
- - * on. All this is necessary because of our use of
- - * a self-linked list to avoid rx overruns.
- - */
- memset(&rs, 0, sizeof(rs));
- - retval = ath9k_hw_rxprocdesc(ah, ds, &rs, 0);
- - if (retval == -EINPROGRESS) {
- - struct ath_rx_status trs;
- - struct ath_buf *tbf;
- - struct ath_desc *tds;
- -
- - memset(&trs, 0, sizeof(trs));
- - if (list_is_last(&bf->list, &sc->rx.rxbuf)) {
- - sc->rx.rxlink = NULL;
- - break;
- - }
- + if (edma)
- + bf = ath_edma_get_next_rx_buf(sc, &rs, qtype);
- + else
- + bf = ath_get_next_rx_buf(sc, &rs);
-
- - tbf = list_entry(bf->list.next, struct ath_buf, list);
- -
- - /*
- - * On some hardware the descriptor status words could
- - * get corrupted, including the done bit. Because of
- - * this, check if the next descriptor's done bit is
- - * set or not.
- - *
- - * If the next descriptor's done bit is set, the current
- - * descriptor has been corrupted. Force s/w to discard
- - * this descriptor and continue...
- - */
- -
- - tds = tbf->bf_desc;
- - retval = ath9k_hw_rxprocdesc(ah, tds, &trs, 0);
- - if (retval == -EINPROGRESS) {
- - break;
- - }
- - }
- + if (!bf)
- + break;
-
- skb = bf->bf_mpdu;
- if (!skb)
- continue;
-
- - /*
- - * Synchronize the DMA transfer with CPU before
- - * 1. accessing the frame
- - * 2. requeueing the same buffer to h/w
- - */
- - dma_sync_single_for_cpu(sc->dev, bf->bf_buf_addr,
- - common->rx_bufsize,
- - DMA_FROM_DEVICE);
- -
- hdr = (struct ieee80211_hdr *) skb->data;
- rxs = IEEE80211_SKB_RXCB(skb);
-
- @@ -597,9 +897,11 @@ int ath_rx_tasklet(struct ath_softc *sc,
- /* Unmap the frame */
- dma_unmap_single(sc->dev, bf->bf_buf_addr,
- common->rx_bufsize,
- - DMA_FROM_DEVICE);
- + dma_type);
-
- - skb_put(skb, rs.rs_datalen);
- + skb_put(skb, rs.rs_datalen + ah->caps.rx_status_len);
- + if (ah->caps.rx_status_len)
- + skb_pull(skb, ah->caps.rx_status_len);
-
- ath9k_cmn_rx_skb_postprocess(common, skb, &rs,
- rxs, decrypt_error);
- @@ -608,7 +910,7 @@ int ath_rx_tasklet(struct ath_softc *sc,
- bf->bf_mpdu = requeue_skb;
- bf->bf_buf_addr = dma_map_single(sc->dev, requeue_skb->data,
- common->rx_bufsize,
- - DMA_FROM_DEVICE);
- + dma_type);
- if (unlikely(dma_mapping_error(sc->dev,
- bf->bf_buf_addr))) {
- dev_kfree_skb_any(requeue_skb);
- @@ -639,12 +941,16 @@ int ath_rx_tasklet(struct ath_softc *sc,
- ath_rx_send_to_mac80211(hw, sc, skb, rxs);
-
- requeue:
- - list_move_tail(&bf->list, &sc->rx.rxbuf);
- - ath_rx_buf_link(sc, bf);
- + if (edma) {
- + list_add_tail(&bf->list, &sc->rx.rxbuf);
- + ath_rx_edma_buf_link(sc, qtype);
- + } else {
- + list_move_tail(&bf->list, &sc->rx.rxbuf);
- + ath_rx_buf_link(sc, bf);
- + }
- } while (1);
-
- spin_unlock_bh(&sc->rx.rxbuflock);
-
- return 0;
- -#undef PA2DESC
- }
- --- a/drivers/net/wireless/ath/ath9k/reg.h
- +++ b/drivers/net/wireless/ath/ath9k/reg.h
- @@ -20,7 +20,7 @@
- #include "../reg.h"
-
- #define AR_CR 0x0008
- -#define AR_CR_RXE 0x00000004
- +#define AR_CR_RXE (AR_SREV_9300_20_OR_LATER(ah) ? 0x0000000c : 0x00000004)
- #define AR_CR_RXD 0x00000020
- #define AR_CR_SWI 0x00000040
-
- @@ -39,6 +39,12 @@
- #define AR_CFG_PCI_MASTER_REQ_Q_THRESH 0x00060000
- #define AR_CFG_PCI_MASTER_REQ_Q_THRESH_S 17
-
- +#define AR_RXBP_THRESH 0x0018
- +#define AR_RXBP_THRESH_HP 0x0000000f
- +#define AR_RXBP_THRESH_HP_S 0
- +#define AR_RXBP_THRESH_LP 0x00003f00
- +#define AR_RXBP_THRESH_LP_S 8
- +
- #define AR_MIRT 0x0020
- #define AR_MIRT_VAL 0x0000ffff
- #define AR_MIRT_VAL_S 16
- @@ -144,6 +150,9 @@
- #define AR_MACMISC_MISC_OBS_BUS_MSB_S 15
- #define AR_MACMISC_MISC_OBS_BUS_1 1
-
- +#define AR_DATABUF_SIZE 0x0060
- +#define AR_DATABUF_SIZE_MASK 0x00000FFF
- +
- #define AR_GTXTO 0x0064
- #define AR_GTXTO_TIMEOUT_COUNTER 0x0000FFFF
- #define AR_GTXTO_TIMEOUT_LIMIT 0xFFFF0000
- @@ -160,9 +169,14 @@
- #define AR_CST_TIMEOUT_LIMIT 0xFFFF0000
- #define AR_CST_TIMEOUT_LIMIT_S 16
-
- +#define AR_HP_RXDP 0x0074
- +#define AR_LP_RXDP 0x0078
- +
- #define AR_ISR 0x0080
- #define AR_ISR_RXOK 0x00000001
- #define AR_ISR_RXDESC 0x00000002
- +#define AR_ISR_HP_RXOK 0x00000001
- +#define AR_ISR_LP_RXOK 0x00000002
- #define AR_ISR_RXERR 0x00000004
- #define AR_ISR_RXNOPKT 0x00000008
- #define AR_ISR_RXEOL 0x00000010
- @@ -232,7 +246,6 @@
- #define AR_ISR_S5_TIMER_THRESH 0x0007FE00
- #define AR_ISR_S5_TIM_TIMER 0x00000010
- #define AR_ISR_S5_DTIM_TIMER 0x00000020
- -#define AR_ISR_S5_S 0x00d8
- #define AR_IMR_S5 0x00b8
- #define AR_IMR_S5_TIM_TIMER 0x00000010
- #define AR_IMR_S5_DTIM_TIMER 0x00000020
- @@ -240,7 +253,6 @@
- #define AR_ISR_S5_GENTIMER_TRIG_S 0
- #define AR_ISR_S5_GENTIMER_THRESH 0xFF800000
- #define AR_ISR_S5_GENTIMER_THRESH_S 16
- -#define AR_ISR_S5_S 0x00d8
- #define AR_IMR_S5_GENTIMER_TRIG 0x0000FF80
- #define AR_IMR_S5_GENTIMER_TRIG_S 0
- #define AR_IMR_S5_GENTIMER_THRESH 0xFF800000
- @@ -249,6 +261,8 @@
- #define AR_IMR 0x00a0
- #define AR_IMR_RXOK 0x00000001
- #define AR_IMR_RXDESC 0x00000002
- +#define AR_IMR_RXOK_HP 0x00000001
- +#define AR_IMR_RXOK_LP 0x00000002
- #define AR_IMR_RXERR 0x00000004
- #define AR_IMR_RXNOPKT 0x00000008
- #define AR_IMR_RXEOL 0x00000010
- @@ -332,10 +346,10 @@
- #define AR_ISR_S1_QCU_TXEOL 0x03FF0000
- #define AR_ISR_S1_QCU_TXEOL_S 16
-
- -#define AR_ISR_S2_S 0x00cc
- -#define AR_ISR_S3_S 0x00d0
- -#define AR_ISR_S4_S 0x00d4
- -#define AR_ISR_S5_S 0x00d8
- +#define AR_ISR_S2_S (AR_SREV_9300_20_OR_LATER(ah) ? 0x00d0 : 0x00cc)
- +#define AR_ISR_S3_S (AR_SREV_9300_20_OR_LATER(ah) ? 0x00d4 : 0x00d0)
- +#define AR_ISR_S4_S (AR_SREV_9300_20_OR_LATER(ah) ? 0x00d8 : 0x00d4)
- +#define AR_ISR_S5_S (AR_SREV_9300_20_OR_LATER(ah) ? 0x00dc : 0x00d8)
- #define AR_DMADBG_0 0x00e0
- #define AR_DMADBG_1 0x00e4
- #define AR_DMADBG_2 0x00e8
- @@ -369,6 +383,9 @@
- #define AR_Q9_TXDP 0x0824
- #define AR_QTXDP(_i) (AR_Q0_TXDP + ((_i)<<2))
-
- +#define AR_Q_STATUS_RING_START 0x830
- +#define AR_Q_STATUS_RING_END 0x834
- +
- #define AR_Q_TXE 0x0840
- #define AR_Q_TXE_M 0x000003FF
-
- @@ -461,6 +478,9 @@
- #define AR_Q_RDYTIMESHDN 0x0a40
- #define AR_Q_RDYTIMESHDN_M 0x000003FF
-
- +/* MAC Descriptor CRC check */
- +#define AR_Q_DESC_CRCCHK 0xa44
- +#define AR_Q_DESC_CRCCHK_EN 1 /* Enable CRC check on the descriptor fetched from host */
-
- #define AR_NUM_DCU 10
- #define AR_DCU_0 0x0001
- @@ -759,6 +779,8 @@
- #define AR_SREV_VERSION_9271 0x140
- #define AR_SREV_REVISION_9271_10 0
- #define AR_SREV_REVISION_9271_11 1
- +#define AR_SREV_VERSION_9300 0x1c0
- +#define AR_SREV_REVISION_9300_20 2 /* 2.0 and 2.1 */
-
- #define AR_SREV_5416(_ah) \
- (((_ah)->hw_version.macVersion == AR_SREV_VERSION_5416_PCI) || \
- @@ -844,6 +866,15 @@
- #define AR_SREV_9271_11(_ah) \
- (AR_SREV_9271(_ah) && \
- ((_ah)->hw_version.macRev == AR_SREV_REVISION_9271_11))
- +#define AR_SREV_9300(_ah) \
- + (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9300))
- +#define AR_SREV_9300_20(_ah) \
- + (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9300) && \
- + ((_ah)->hw_version.macRev == AR_SREV_REVISION_9300_20))
- +#define AR_SREV_9300_20_OR_LATER(_ah) \
- + (((_ah)->hw_version.macVersion > AR_SREV_VERSION_9300) || \
- + (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9300) && \
- + ((_ah)->hw_version.macRev >= AR_SREV_REVISION_9300_20)))
-
- #define AR_SREV_9285E_20(_ah) \
- (AR_SREV_9285_12_OR_LATER(_ah) && \
- @@ -945,6 +976,7 @@ enum {
- #define AR9285_NUM_GPIO 12
- #define AR9287_NUM_GPIO 11
- #define AR9271_NUM_GPIO 16
- +#define AR9300_NUM_GPIO 17
-
- #define AR_GPIO_IN_OUT 0x4048
- #define AR_GPIO_IN_VAL 0x0FFFC000
- @@ -957,19 +989,21 @@ enum {
- #define AR9287_GPIO_IN_VAL_S 11
- #define AR9271_GPIO_IN_VAL 0xFFFF0000
- #define AR9271_GPIO_IN_VAL_S 16
- +#define AR9300_GPIO_IN_VAL 0x0001FFFF
- +#define AR9300_GPIO_IN_VAL_S 0
-
- -#define AR_GPIO_OE_OUT 0x404c
- +#define AR_GPIO_OE_OUT (AR_SREV_9300_20_OR_LATER(ah) ? 0x4050 : 0x404c)
- #define AR_GPIO_OE_OUT_DRV 0x3
- #define AR_GPIO_OE_OUT_DRV_NO 0x0
- #define AR_GPIO_OE_OUT_DRV_LOW 0x1
- #define AR_GPIO_OE_OUT_DRV_HI 0x2
- #define AR_GPIO_OE_OUT_DRV_ALL 0x3
-
- -#define AR_GPIO_INTR_POL 0x4050
- -#define AR_GPIO_INTR_POL_VAL 0x00001FFF
- +#define AR_GPIO_INTR_POL (AR_SREV_9300_20_OR_LATER(ah) ? 0x4058 : 0x4050)
- +#define AR_GPIO_INTR_POL_VAL 0x0001FFFF
- #define AR_GPIO_INTR_POL_VAL_S 0
-
- -#define AR_GPIO_INPUT_EN_VAL 0x4054
- +#define AR_GPIO_INPUT_EN_VAL (AR_SREV_9300_20_OR_LATER(ah) ? 0x405c : 0x4054)
- #define AR_GPIO_INPUT_EN_VAL_BT_PRIORITY_DEF 0x00000004
- #define AR_GPIO_INPUT_EN_VAL_BT_PRIORITY_S 2
- #define AR_GPIO_INPUT_EN_VAL_BT_FREQUENCY_DEF 0x00000008
- @@ -987,13 +1021,13 @@ enum {
- #define AR_GPIO_RTC_RESET_OVERRIDE_ENABLE 0x00010000
- #define AR_GPIO_JTAG_DISABLE 0x00020000
-
- -#define AR_GPIO_INPUT_MUX1 0x4058
- +#define AR_GPIO_INPUT_MUX1 (AR_SREV_9300_20_OR_LATER(ah) ? 0x4060 : 0x4058)
- #define AR_GPIO_INPUT_MUX1_BT_ACTIVE 0x000f0000
- #define AR_GPIO_INPUT_MUX1_BT_ACTIVE_S 16
- #define AR_GPIO_INPUT_MUX1_BT_PRIORITY 0x00000f00
- #define AR_GPIO_INPUT_MUX1_BT_PRIORITY_S 8
-
- -#define AR_GPIO_INPUT_MUX2 0x405c
- +#define AR_GPIO_INPUT_MUX2 (AR_SREV_9300_20_OR_LATER(ah) ? 0x4064 : 0x405c)
- #define AR_GPIO_INPUT_MUX2_CLK25 0x0000000f
- #define AR_GPIO_INPUT_MUX2_CLK25_S 0
- #define AR_GPIO_INPUT_MUX2_RFSILENT 0x000000f0
- @@ -1001,13 +1035,13 @@ enum {
- #define AR_GPIO_INPUT_MUX2_RTC_RESET 0x00000f00
- #define AR_GPIO_INPUT_MUX2_RTC_RESET_S 8
-
- -#define AR_GPIO_OUTPUT_MUX1 0x4060
- -#define AR_GPIO_OUTPUT_MUX2 0x4064
- -#define AR_GPIO_OUTPUT_MUX3 0x4068
- +#define AR_GPIO_OUTPUT_MUX1 (AR_SREV_9300_20_OR_LATER(ah) ? 0x4068 : 0x4060)
- +#define AR_GPIO_OUTPUT_MUX2 (AR_SREV_9300_20_OR_LATER(ah) ? 0x406c : 0x4064)
- +#define AR_GPIO_OUTPUT_MUX3 (AR_SREV_9300_20_OR_LATER(ah) ? 0x4070 : 0x4068)
-
- -#define AR_INPUT_STATE 0x406c
- +#define AR_INPUT_STATE (AR_SREV_9300_20_OR_LATER(ah) ? 0x4074 : 0x406c)
-
- -#define AR_EEPROM_STATUS_DATA 0x407c
- +#define AR_EEPROM_STATUS_DATA (AR_SREV_9300_20_OR_LATER(ah) ? 0x4084 : 0x407c)
- #define AR_EEPROM_STATUS_DATA_VAL 0x0000ffff
- #define AR_EEPROM_STATUS_DATA_VAL_S 0
- #define AR_EEPROM_STATUS_DATA_BUSY 0x00010000
- @@ -1015,13 +1049,24 @@ enum {
- #define AR_EEPROM_STATUS_DATA_PROT_ACCESS 0x00040000
- #define AR_EEPROM_STATUS_DATA_ABSENT_ACCESS 0x00080000
-
- -#define AR_OBS 0x4080
- +#define AR_OBS (AR_SREV_9300_20_OR_LATER(ah) ? 0x4088 : 0x4080)
-
- -#define AR_GPIO_PDPU 0x4088
- +#define AR_GPIO_PDPU (AR_SREV_9300_20_OR_LATER(ah) ? 0x4090 : 0x4088)
-
- -#define AR_PCIE_MSI 0x4094
- +#define AR_PCIE_MSI (AR_SREV_9300_20_OR_LATER(ah) ? 0x40a4 : 0x4094)
- #define AR_PCIE_MSI_ENABLE 0x00000001
-
- +#define AR_INTR_PRIO_SYNC_ENABLE 0x40c4
- +#define AR_INTR_PRIO_ASYNC_MASK 0x40c8
- +#define AR_INTR_PRIO_SYNC_MASK 0x40cc
- +#define AR_INTR_PRIO_ASYNC_ENABLE 0x40d4
- +
- +#define AR_RTC_9300_PLL_DIV 0x000003ff
- +#define AR_RTC_9300_PLL_DIV_S 0
- +#define AR_RTC_9300_PLL_REFDIV 0x00003C00
- +#define AR_RTC_9300_PLL_REFDIV_S 10
- +#define AR_RTC_9300_PLL_CLKSEL 0x0000C000
- +#define AR_RTC_9300_PLL_CLKSEL_S 14
-
- #define AR_RTC_9160_PLL_DIV 0x000003ff
- #define AR_RTC_9160_PLL_DIV_S 0
- @@ -1039,6 +1084,16 @@ enum {
- #define AR_RTC_RC_COLD_RESET 0x00000004
- #define AR_RTC_RC_WARM_RESET 0x00000008
-
- +/* Crystal Control */
- +#define AR_RTC_XTAL_CONTROL 0x7004
- +
- +/* Reg Control 0 */
- +#define AR_RTC_REG_CONTROL0 0x7008
- +
- +/* Reg Control 1 */
- +#define AR_RTC_REG_CONTROL1 0x700c
- +#define AR_RTC_REG_CONTROL1_SWREG_PROGRAM 0x00000001
- +
- #define AR_RTC_PLL_CONTROL \
- ((AR_SREV_9100(ah)) ? (AR_RTC_BASE + 0x0014) : 0x7014)
-
- @@ -1069,6 +1124,7 @@ enum {
- #define AR_RTC_SLEEP_CLK \
- ((AR_SREV_9100(ah)) ? (AR_RTC_BASE + 0x0048) : 0x7048)
- #define AR_RTC_FORCE_DERIVED_CLK 0x2
- +#define AR_RTC_FORCE_SWREG_PRD 0x00000004
-
- #define AR_RTC_FORCE_WAKE \
- ((AR_SREV_9100(ah)) ? (AR_RTC_BASE + 0x004c) : 0x704c)
- @@ -1533,7 +1589,7 @@ enum {
- #define AR_TSFOOR_THRESHOLD 0x813c
- #define AR_TSFOOR_THRESHOLD_VAL 0x0000FFFF
-
- -#define AR_PHY_ERR_EIFS_MASK 8144
- +#define AR_PHY_ERR_EIFS_MASK 0x8144
-
- #define AR_PHY_ERR_3 0x8168
- #define AR_PHY_ERR_3_COUNT 0x00FFFFFF
- @@ -1599,24 +1655,26 @@ enum {
- #define AR_FIRST_NDP_TIMER 7
- #define AR_NDP2_PERIOD 0x81a0
- #define AR_NDP2_TIMER_MODE 0x81c0
- -#define AR_NEXT_TBTT_TIMER 0x8200
- -#define AR_NEXT_DMA_BEACON_ALERT 0x8204
- -#define AR_NEXT_SWBA 0x8208
- -#define AR_NEXT_CFP 0x8208
- -#define AR_NEXT_HCF 0x820C
- -#define AR_NEXT_TIM 0x8210
- -#define AR_NEXT_DTIM 0x8214
- -#define AR_NEXT_QUIET_TIMER 0x8218
- -#define AR_NEXT_NDP_TIMER 0x821C
- -
- -#define AR_BEACON_PERIOD 0x8220
- -#define AR_DMA_BEACON_PERIOD 0x8224
- -#define AR_SWBA_PERIOD 0x8228
- -#define AR_HCF_PERIOD 0x822C
- -#define AR_TIM_PERIOD 0x8230
- -#define AR_DTIM_PERIOD 0x8234
- -#define AR_QUIET_PERIOD 0x8238
- -#define AR_NDP_PERIOD 0x823C
- +
- +#define AR_GEN_TIMERS(_i) (0x8200 + ((_i) << 2))
- +#define AR_NEXT_TBTT_TIMER AR_GEN_TIMERS(0)
- +#define AR_NEXT_DMA_BEACON_ALERT AR_GEN_TIMERS(1)
- +#define AR_NEXT_SWBA AR_GEN_TIMERS(2)
- +#define AR_NEXT_CFP AR_GEN_TIMERS(2)
- +#define AR_NEXT_HCF AR_GEN_TIMERS(3)
- +#define AR_NEXT_TIM AR_GEN_TIMERS(4)
- +#define AR_NEXT_DTIM AR_GEN_TIMERS(5)
- +#define AR_NEXT_QUIET_TIMER AR_GEN_TIMERS(6)
- +#define AR_NEXT_NDP_TIMER AR_GEN_TIMERS(7)
- +
- +#define AR_BEACON_PERIOD AR_GEN_TIMERS(8)
- +#define AR_DMA_BEACON_PERIOD AR_GEN_TIMERS(9)
- +#define AR_SWBA_PERIOD AR_GEN_TIMERS(10)
- +#define AR_HCF_PERIOD AR_GEN_TIMERS(11)
- +#define AR_TIM_PERIOD AR_GEN_TIMERS(12)
- +#define AR_DTIM_PERIOD AR_GEN_TIMERS(13)
- +#define AR_QUIET_PERIOD AR_GEN_TIMERS(14)
- +#define AR_NDP_PERIOD AR_GEN_TIMERS(15)
-
- #define AR_TIMER_MODE 0x8240
- #define AR_TBTT_TIMER_EN 0x00000001
- @@ -1730,4 +1788,32 @@ enum {
- #define AR9271_CORE_CLOCK 117 /* clock to 117Mhz */
- #define AR9271_TARGET_BAUD_RATE 19200 /* 115200 */
-
- +#define AR_AGG_WEP_ENABLE_FIX 0x00000008 /* This allows the use of AR_AGG_WEP_ENABLE */
- +#define AR_ADHOC_MCAST_KEYID_ENABLE 0x00000040 /* This bit enables the Multicast search
- + * based on both MAC Address and Key ID.
- + * If bit is 0, then Multicast search is
- + * based on MAC address only.
- + * For Merlin and above only.
- + */
- +#define AR_AGG_WEP_ENABLE 0x00020000 /* This field enables AGG_WEP feature,
- + * when it is enable, AGG_WEP would takes
- + * charge of the encryption interface of
- + * pcu_txsm.
- + */
- +
- +#define AR9300_SM_BASE 0xa200
- +#define AR9002_PHY_AGC_CONTROL 0x9860
- +#define AR9003_PHY_AGC_CONTROL AR9300_SM_BASE + 0xc4
- +#define AR_PHY_AGC_CONTROL (AR_SREV_9300_20_OR_LATER(ah) ? AR9003_PHY_AGC_CONTROL : AR9002_PHY_AGC_CONTROL)
- +#define AR_PHY_AGC_CONTROL_CAL 0x00000001 /* do internal calibration */
- +#define AR_PHY_AGC_CONTROL_NF 0x00000002 /* do noise-floor calibration */
- +#define AR_PHY_AGC_CONTROL_OFFSET_CAL 0x00000800 /* allow offset calibration */
- +#define AR_PHY_AGC_CONTROL_ENABLE_NF 0x00008000 /* enable noise floor calibration to happen */
- +#define AR_PHY_AGC_CONTROL_FLTR_CAL 0x00010000 /* allow tx filter calibration */
- +#define AR_PHY_AGC_CONTROL_NO_UPDATE_NF 0x00020000 /* don't update noise floor automatically */
- +#define AR_PHY_AGC_CONTROL_EXT_NF_PWR_MEAS 0x00040000 /* extend noise floor power measurement */
- +#define AR_PHY_AGC_CONTROL_CLC_SUCCESS 0x00080000 /* carrier leak calibration done */
- +#define AR_PHY_AGC_CONTROL_YCOK_MAX 0x000003c0
- +#define AR_PHY_AGC_CONTROL_YCOK_MAX_S 6
- +
- #endif
- --- a/drivers/net/wireless/ath/ath9k/xmit.c
- +++ b/drivers/net/wireless/ath/ath9k/xmit.c
- @@ -91,7 +91,6 @@ static int ath_max_4ms_framelen[3][16] =
- }
- };
-
- -
- /*********************/
- /* Aggregation logic */
- /*********************/
- @@ -279,7 +278,7 @@ static struct ath_buf* ath_clone_txbuf(s
- tbf->aphy = bf->aphy;
- tbf->bf_mpdu = bf->bf_mpdu;
- tbf->bf_buf_addr = bf->bf_buf_addr;
- - *(tbf->bf_desc) = *(bf->bf_desc);
- + memcpy(tbf->bf_desc, bf->bf_desc, sc->sc_ah->caps.tx_desc_len);
- tbf->bf_state = bf->bf_state;
- tbf->bf_dmacontext = bf->bf_dmacontext;
-
- @@ -358,8 +357,7 @@ static void ath_tx_complete_aggr(struct
- /* transmit completion */
- acked_cnt++;
- } else {
- - if (!(tid->state & AGGR_CLEANUP) &&
- - ts->ts_flags != ATH9K_TX_SW_ABORTED) {
- + if (!(tid->state & AGGR_CLEANUP) && !bf_last->bf_tx_aborted) {
- if (bf->bf_retries < ATH_MAX_SW_RETRIES) {
- ath_tx_set_retry(sc, txq, bf);
- txpending = 1;
- @@ -378,7 +376,8 @@ static void ath_tx_complete_aggr(struct
- }
- }
-
- - if (bf_next == NULL) {
- + if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) &&
- + bf_next == NULL) {
- /*
- * Make sure the last desc is reclaimed if it
- * not a holding desc.
- @@ -412,36 +411,38 @@ static void ath_tx_complete_aggr(struct
- !txfail, sendbar);
- } else {
- /* retry the un-acked ones */
- - if (bf->bf_next == NULL && bf_last->bf_stale) {
- - struct ath_buf *tbf;
- -
- - tbf = ath_clone_txbuf(sc, bf_last);
- - /*
- - * Update tx baw and complete the frame with
- - * failed status if we run out of tx buf
- - */
- - if (!tbf) {
- - spin_lock_bh(&txq->axq_lock);
- - ath_tx_update_baw(sc, tid,
- - bf->bf_seqno);
- - spin_unlock_bh(&txq->axq_lock);
- + if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)) {
- + if (bf->bf_next == NULL && bf_last->bf_stale) {
- + struct ath_buf *tbf;
- +
- + tbf = ath_clone_txbuf(sc, bf_last);
- + /*
- + * Update tx baw and complete the frame with
- + * failed status if we run out of tx buf
- + */
- + if (!tbf) {
- + spin_lock_bh(&txq->axq_lock);
- + ath_tx_update_baw(sc, tid,
- + bf->bf_seqno);
- + spin_unlock_bh(&txq->axq_lock);
- +
- + bf->bf_state.bf_type |= BUF_XRETRY;
- + ath_tx_rc_status(bf, ts, nbad,
- + 0, false);
- + ath_tx_complete_buf(sc, bf, txq,
- + &bf_head, ts, 0, 0);
- + break;
- + }
-
- - bf->bf_state.bf_type |= BUF_XRETRY;
- - ath_tx_rc_status(bf, ts, nbad,
- - 0, false);
- - ath_tx_complete_buf(sc, bf, txq,
- - &bf_head, ts, 0, 0);
- - break;
- + ath9k_hw_cleartxdesc(sc->sc_ah, tbf->bf_desc);
- + list_add_tail(&tbf->list, &bf_head);
- + } else {
- + /*
- + * Clear descriptor status words for
- + * software retry
- + */
- + ath9k_hw_cleartxdesc(sc->sc_ah, bf->bf_desc);
- }
- -
- - ath9k_hw_cleartxdesc(sc->sc_ah, tbf->bf_desc);
- - list_add_tail(&tbf->list, &bf_head);
- - } else {
- - /*
- - * Clear descriptor status words for
- - * software retry
- - */
- - ath9k_hw_cleartxdesc(sc->sc_ah, bf->bf_desc);
- }
-
- /*
- @@ -665,7 +666,7 @@ static enum ATH_AGGR_STATUS ath_tx_form_
- bpad = PADBYTES(al_delta) + (ndelim << 2);
-
- bf->bf_next = NULL;
- - bf->bf_desc->ds_link = 0;
- + ath9k_hw_set_desc_link(sc->sc_ah, bf->bf_desc, 0);
-
- /* link buffers of this frame to the aggregate */
- ath_tx_addto_baw(sc, tid, bf);
- @@ -673,7 +674,8 @@ static enum ATH_AGGR_STATUS ath_tx_form_
- list_move_tail(&bf->list, bf_q);
- if (bf_prev) {
- bf_prev->bf_next = bf;
- - bf_prev->bf_desc->ds_link = bf->bf_daddr;
- + ath9k_hw_set_desc_link(sc->sc_ah, bf_prev->bf_desc,
- + bf->bf_daddr);
- }
- bf_prev = bf;
-
- @@ -853,7 +855,7 @@ struct ath_txq *ath_txq_setup(struct ath
- struct ath_hw *ah = sc->sc_ah;
- struct ath_common *common = ath9k_hw_common(ah);
- struct ath9k_tx_queue_info qi;
- - int qnum;
- + int qnum, i;
-
- memset(&qi, 0, sizeof(qi));
- qi.tqi_subtype = subtype;
- @@ -877,11 +879,16 @@ struct ath_txq *ath_txq_setup(struct ath
- * The UAPSD queue is an exception, since we take a desc-
- * based intr on the EOSP frames.
- */
- - if (qtype == ATH9K_TX_QUEUE_UAPSD)
- - qi.tqi_qflags = TXQ_FLAG_TXDESCINT_ENABLE;
- - else
- - qi.tqi_qflags = TXQ_FLAG_TXEOLINT_ENABLE |
- - TXQ_FLAG_TXDESCINT_ENABLE;
- + if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
- + qi.tqi_qflags = TXQ_FLAG_TXOKINT_ENABLE |
- + TXQ_FLAG_TXERRINT_ENABLE;
- + } else {
- + if (qtype == ATH9K_TX_QUEUE_UAPSD)
- + qi.tqi_qflags = TXQ_FLAG_TXDESCINT_ENABLE;
- + else
- + qi.tqi_qflags = TXQ_FLAG_TXEOLINT_ENABLE |
- + TXQ_FLAG_TXDESCINT_ENABLE;
- + }
- qnum = ath9k_hw_setuptxqueue(ah, qtype, &qi);
- if (qnum == -1) {
- /*
- @@ -908,6 +915,11 @@ struct ath_txq *ath_txq_setup(struct ath
- txq->axq_depth = 0;
- txq->axq_tx_inprogress = false;
- sc->tx.txqsetup |= 1<<qnum;
- +
- + txq->txq_headidx = txq->txq_tailidx = 0;
- + for (i = 0; i < ATH_TXFIFO_DEPTH; i++)
- + INIT_LIST_HEAD(&txq->txq_fifo[i]);
- + INIT_LIST_HEAD(&txq->txq_fifo_pending);
- }
- return &sc->tx.txq[qnum];
- }
- @@ -1035,36 +1047,64 @@ void ath_draintxq(struct ath_softc *sc,
- struct ath_tx_status ts;
-
- memset(&ts, 0, sizeof(ts));
- - if (!retry_tx)
- - ts.ts_flags = ATH9K_TX_SW_ABORTED;
- -
- INIT_LIST_HEAD(&bf_head);
-
- for (;;) {
- spin_lock_bh(&txq->axq_lock);
-
- - if (list_empty(&txq->axq_q)) {
- - txq->axq_link = NULL;
- - spin_unlock_bh(&txq->axq_lock);
- - break;
- - }
- + if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
- + if (list_empty(&txq->txq_fifo[txq->txq_tailidx])) {
- + if (list_empty(&txq->txq_fifo_pending)) {
- + txq->txq_headidx = txq->txq_tailidx = 0;
- + spin_unlock_bh(&txq->axq_lock);
- + break;
- + }
-
- - bf = list_first_entry(&txq->axq_q, struct ath_buf, list);
- + bf = list_first_entry(&txq->txq_fifo_pending,
- + struct ath_buf, list);
-
- - if (bf->bf_stale) {
- - list_del(&bf->list);
- - spin_unlock_bh(&txq->axq_lock);
- + list_cut_position(
- + &txq->txq_fifo[txq->txq_tailidx],
- + &txq->txq_fifo_pending,
- + &bf->bf_lastbf->list);
- + } else {
- + bf = list_first_entry(&txq->txq_fifo[txq->txq_tailidx],
- + struct ath_buf, list);
- + }
- + } else {
- + if (list_empty(&txq->axq_q)) {
- + txq->axq_link = NULL;
- + spin_unlock_bh(&txq->axq_lock);
- + break;
- + }
- + bf = list_first_entry(&txq->axq_q, struct ath_buf,
- + list);
-
- - spin_lock_bh(&sc->tx.txbuflock);
- - list_add_tail(&bf->list, &sc->tx.txbuf);
- - spin_unlock_bh(&sc->tx.txbuflock);
- - continue;
- + if (bf->bf_stale) {
- + list_del(&bf->list);
- + spin_unlock_bh(&txq->axq_lock);
- +
- + spin_lock_bh(&sc->tx.txbuflock);
- + list_add_tail(&bf->list, &sc->tx.txbuf);
- + spin_unlock_bh(&sc->tx.txbuflock);
- + continue;
- + }
- }
-
- lastbf = bf->bf_lastbf;
- + if (!retry_tx)
- + lastbf->bf_tx_aborted = true;
- +
- + if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
- + list_cut_position(&bf_head,
- + &txq->txq_fifo[txq->txq_tailidx],
- + &lastbf->list);
- + INCR(txq->txq_tailidx, ATH_TXFIFO_DEPTH);
- + } else {
- + /* remove ath_buf's of the same mpdu from txq */
- + list_cut_position(&bf_head, &txq->axq_q, &lastbf->list);
- + }
-
- - /* remove ath_buf's of the same mpdu from txq */
- - list_cut_position(&bf_head, &txq->axq_q, &lastbf->list);
- txq->axq_depth--;
-
- spin_unlock_bh(&txq->axq_lock);
- @@ -1224,25 +1264,46 @@ static void ath_tx_txqaddbuf(struct ath_
-
- bf = list_first_entry(head, struct ath_buf, list);
-
- - list_splice_tail_init(head, &txq->axq_q);
- - txq->axq_depth++;
- -
- ath_print(common, ATH_DBG_QUEUE,
- "qnum: %d, txq depth: %d\n", txq->axq_qnum, txq->axq_depth);
-
- - if (txq->axq_link == NULL) {
- + if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
- + if (txq->axq_depth >= ATH_TXFIFO_DEPTH) {
- + list_splice_tail_init(head, &txq->txq_fifo_pending);
- + return;
- + }
- + if (!list_empty(&txq->txq_fifo[txq->txq_headidx]))
- + ath_print(common, ATH_DBG_XMIT,
- + "Initializing tx fifo %d which is non-empty\n",
- + txq->txq_headidx);
- + INIT_LIST_HEAD(&txq->txq_fifo[txq->txq_headidx]);
- + list_splice_init(head, &txq->txq_fifo[txq->txq_headidx]);
- + INCR(txq->txq_headidx, ATH_TXFIFO_DEPTH);
- ath9k_hw_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr);
- ath_print(common, ATH_DBG_XMIT,
- "TXDP[%u] = %llx (%p)\n",
- txq->axq_qnum, ito64(bf->bf_daddr), bf->bf_desc);
- } else {
- - *txq->axq_link = bf->bf_daddr;
- - ath_print(common, ATH_DBG_XMIT, "link[%u] (%p)=%llx (%p)\n",
- - txq->axq_qnum, txq->axq_link,
- - ito64(bf->bf_daddr), bf->bf_desc);
- + list_splice_tail_init(head, &txq->axq_q);
- +
- + if (txq->axq_link == NULL) {
- + ath9k_hw_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr);
- + ath_print(common, ATH_DBG_XMIT,
- + "TXDP[%u] = %llx (%p)\n",
- + txq->axq_qnum, ito64(bf->bf_daddr),
- + bf->bf_desc);
- + } else {
- + *txq->axq_link = bf->bf_daddr;
- + ath_print(common, ATH_DBG_XMIT,
- + "link[%u] (%p)=%llx (%p)\n",
- + txq->axq_qnum, txq->axq_link,
- + ito64(bf->bf_daddr), bf->bf_desc);
- + }
- + ath9k_hw_get_desc_link(ah, bf->bf_lastbf->bf_desc,
- + &txq->axq_link);
- + ath9k_hw_txstart(ah, txq->axq_qnum);
- }
- - txq->axq_link = &(bf->bf_lastbf->bf_desc->ds_link);
- - ath9k_hw_txstart(ah, txq->axq_qnum);
- + txq->axq_depth++;
- }
-
- static struct ath_buf *ath_tx_get_buffer(struct ath_softc *sc)
- @@ -1408,8 +1469,7 @@ static void assign_aggr_tid_seqno(struct
- INCR(tid->seq_next, IEEE80211_SEQ_MAX);
- }
-
- -static int setup_tx_flags(struct ath_softc *sc, struct sk_buff *skb,
- - struct ath_txq *txq)
- +static int setup_tx_flags(struct sk_buff *skb, bool use_ldpc)
- {
- struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
- int flags = 0;
- @@ -1420,6 +1480,9 @@ static int setup_tx_flags(struct ath_sof
- if (tx_info->flags & IEEE80211_TX_CTL_NO_ACK)
- flags |= ATH9K_TXDESC_NOACK;
-
- + if (use_ldpc)
- + flags |= ATH9K_TXDESC_LDPC;
- +
- return flags;
- }
-
- @@ -1571,6 +1634,7 @@ static int ath_tx_setup_buffer(struct ie
- int hdrlen;
- __le16 fc;
- int padpos, padsize;
- + bool use_ldpc = false;
-
- tx_info->pad[0] = 0;
- switch (txctl->frame_type) {
- @@ -1597,10 +1661,13 @@ static int ath_tx_setup_buffer(struct ie
- bf->bf_frmlen -= padsize;
- }
-
- - if (conf_is_ht(&hw->conf))
- + if (conf_is_ht(&hw->conf)) {
- bf->bf_state.bf_type |= BUF_HT;
- + if (tx_info->flags & IEEE80211_TX_CTL_LDPC)
- + use_ldpc = true;
- + }
-
- - bf->bf_flags = setup_tx_flags(sc, skb, txctl->txq);
- + bf->bf_flags = setup_tx_flags(skb, use_ldpc);
-
- bf->bf_keytype = get_hw_crypto_keytype(skb);
- if (bf->bf_keytype != ATH9K_KEY_TYPE_CLEAR) {
- @@ -1659,8 +1726,7 @@ static void ath_tx_start_dma(struct ath_
- list_add_tail(&bf->list, &bf_head);
-
- ds = bf->bf_desc;
- - ds->ds_link = 0;
- - ds->ds_data = bf->bf_buf_addr;
- + ath9k_hw_set_desc_link(ah, ds, 0);
-
- ath9k_hw_set11n_txdesc(ah, ds, bf->bf_frmlen, frm_type, MAX_RATE_POWER,
- bf->bf_keyix, bf->bf_keytype, bf->bf_flags);
- @@ -1669,7 +1735,9 @@ static void ath_tx_start_dma(struct ath_
- skb->len, /* segment length */
- true, /* first segment */
- true, /* last segment */
- - ds); /* first descriptor */
- + ds, /* first descriptor */
- + bf->bf_buf_addr,
- + txctl->txq->axq_qnum);
-
- spin_lock_bh(&txctl->txq->axq_lock);
-
- @@ -1896,7 +1964,7 @@ static int ath_tx_num_badfrms(struct ath
- int nbad = 0;
- int isaggr = 0;
-
- - if (ts->ts_flags == ATH9K_TX_SW_ABORTED)
- + if (bf->bf_tx_aborted)
- return 0;
-
- isaggr = bf_isaggr(bf);
- @@ -2138,10 +2206,119 @@ void ath_tx_tasklet(struct ath_softc *sc
- }
- }
-
- +void ath_tx_edma_tasklet(struct ath_softc *sc)
- +{
- + struct ath_tx_status txs;
- + struct ath_common *common = ath9k_hw_common(sc->sc_ah);
- + struct ath_hw *ah = sc->sc_ah;
- + struct ath_txq *txq;
- + struct ath_buf *bf, *lastbf;
- + struct list_head bf_head;
- + int status;
- + int txok;
- +
- + for (;;) {
- + status = ath9k_hw_txprocdesc(ah, NULL, (void *)&txs);
- + if (status == -EINPROGRESS)
- + break;
- + if (status == -EIO) {
- + ath_print(common, ATH_DBG_XMIT,
- + "Error processing tx status\n");
- + break;
- + }
- +
- + /* Skip beacon completions */
- + if (txs.qid == sc->beacon.beaconq)
- + continue;
- +
- + txq = &sc->tx.txq[txs.qid];
- +
- + spin_lock_bh(&txq->axq_lock);
- + if (list_empty(&txq->txq_fifo[txq->txq_tailidx])) {
- + spin_unlock_bh(&txq->axq_lock);
- + return;
- + }
- +
- + bf = list_first_entry(&txq->txq_fifo[txq->txq_tailidx],
- + struct ath_buf, list);
- + lastbf = bf->bf_lastbf;
- +
- + INIT_LIST_HEAD(&bf_head);
- + list_cut_position(&bf_head, &txq->txq_fifo[txq->txq_tailidx],
- + &lastbf->list);
- + INCR(txq->txq_tailidx, ATH_TXFIFO_DEPTH);
- + txq->axq_depth--;
- + txq->axq_tx_inprogress = false;
- + spin_unlock_bh(&txq->axq_lock);
- +
- + txok = !(txs.ts_status & ATH9K_TXERR_MASK);
- +
- + if (!bf_isampdu(bf)) {
- + bf->bf_retries = txs.ts_longretry;
- + if (txs.ts_status & ATH9K_TXERR_XRETRY)
- + bf->bf_state.bf_type |= BUF_XRETRY;
- + ath_tx_rc_status(bf, &txs, 0, txok, true);
- + }
- +
- + if (bf_isampdu(bf))
- + ath_tx_complete_aggr(sc, txq, bf, &bf_head, &txs, txok);
- + else
- + ath_tx_complete_buf(sc, bf, txq, &bf_head,
- + &txs, txok, 0);
- +
- + spin_lock_bh(&txq->axq_lock);
- + if (!list_empty(&txq->txq_fifo_pending)) {
- + INIT_LIST_HEAD(&bf_head);
- + bf = list_first_entry(&txq->txq_fifo_pending,
- + struct ath_buf, list);
- + list_cut_position(&bf_head, &txq->txq_fifo_pending,
- + &bf->bf_lastbf->list);
- + ath_tx_txqaddbuf(sc, txq, &bf_head);
- + } else if (sc->sc_flags & SC_OP_TXAGGR)
- + ath_txq_schedule(sc, txq);
- + spin_unlock_bh(&txq->axq_lock);
- + }
- +}
- +
- /*****************/
- /* Init, Cleanup */
- /*****************/
-
- +static int ath_txstatus_setup(struct ath_softc *sc, int size)
- +{
- + struct ath_descdma *dd = &sc->txsdma;
- + u8 txs_len = sc->sc_ah->caps.txs_len;
- +
- + dd->dd_desc_len = size * txs_len;
- + dd->dd_desc = dma_alloc_coherent(sc->dev, dd->dd_desc_len,
- + &dd->dd_desc_paddr, GFP_KERNEL);
- + if (!dd->dd_desc)
- + return -ENOMEM;
- +
- + return 0;
- +}
- +
- +static int ath_tx_edma_init(struct ath_softc *sc)
- +{
- + int err;
- +
- + err = ath_txstatus_setup(sc, ATH_TXSTATUS_RING_SIZE);
- + if (!err)
- + ath9k_hw_setup_statusring(sc->sc_ah, sc->txsdma.dd_desc,
- + sc->txsdma.dd_desc_paddr,
- + ATH_TXSTATUS_RING_SIZE);
- +
- + return err;
- +}
- +
- +static void ath_tx_edma_cleanup(struct ath_softc *sc)
- +{
- + struct ath_descdma *dd = &sc->txsdma;
- +
- + dma_free_coherent(sc->dev, dd->dd_desc_len, dd->dd_desc,
- + dd->dd_desc_paddr);
- +}
- +
- int ath_tx_init(struct ath_softc *sc, int nbufs)
- {
- struct ath_common *common = ath9k_hw_common(sc->sc_ah);
- @@ -2150,7 +2327,7 @@ int ath_tx_init(struct ath_softc *sc, in
- spin_lock_init(&sc->tx.txbuflock);
-
- error = ath_descdma_setup(sc, &sc->tx.txdma, &sc->tx.txbuf,
- - "tx", nbufs, 1);
- + "tx", nbufs, 1, 1);
- if (error != 0) {
- ath_print(common, ATH_DBG_FATAL,
- "Failed to allocate tx descriptors: %d\n", error);
- @@ -2158,7 +2335,7 @@ int ath_tx_init(struct ath_softc *sc, in
- }
-
- error = ath_descdma_setup(sc, &sc->beacon.bdma, &sc->beacon.bbuf,
- - "beacon", ATH_BCBUF, 1);
- + "beacon", ATH_BCBUF, 1, 1);
- if (error != 0) {
- ath_print(common, ATH_DBG_FATAL,
- "Failed to allocate beacon descriptors: %d\n", error);
- @@ -2167,6 +2344,12 @@ int ath_tx_init(struct ath_softc *sc, in
-
- INIT_DELAYED_WORK(&sc->tx_complete_work, ath_tx_complete_poll_work);
-
- + if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
- + error = ath_tx_edma_init(sc);
- + if (error)
- + goto err;
- + }
- +
- err:
- if (error != 0)
- ath_tx_cleanup(sc);
- @@ -2181,6 +2364,9 @@ void ath_tx_cleanup(struct ath_softc *sc
-
- if (sc->tx.txdma.dd_desc_len != 0)
- ath_descdma_cleanup(sc, &sc->tx.txdma, &sc->tx.txbuf);
- +
- + if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
- + ath_tx_edma_cleanup(sc);
- }
-
- void ath_tx_node_init(struct ath_softc *sc, struct ath_node *an)
- --- a/include/net/mac80211.h
- +++ b/include/net/mac80211.h
- @@ -274,6 +274,7 @@ struct ieee80211_bss_conf {
- * @IEEE80211_TX_INTFL_NL80211_FRAME_TX: Frame was requested through nl80211
- * MLME command (internal to mac80211 to figure out whether to send TX
- * status to user space)
- + * @IEEE80211_TX_CTL_LDPC: tells the driver to use LDPC for this frame
- */
- enum mac80211_tx_control_flags {
- IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0),
- @@ -297,6 +298,7 @@ enum mac80211_tx_control_flags {
- IEEE80211_TX_INTFL_RETRANSMISSION = BIT(19),
- IEEE80211_TX_INTFL_HAS_RADIOTAP = BIT(20),
- IEEE80211_TX_INTFL_NL80211_FRAME_TX = BIT(21),
- + IEEE80211_TX_CTL_LDPC = BIT(22),
- };
-
- /**
|