1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546 |
- #define _RTL8812A_PHYCFG_C_
- #include <rtl8812a_hal.h>
- const char *const GLBwSrc[]={
- "CHANNEL_WIDTH_20",
- "CHANNEL_WIDTH_40",
- "CHANNEL_WIDTH_80",
- "CHANNEL_WIDTH_160",
- "CHANNEL_WIDTH_80_80"
- };
- #define ENABLE_POWER_BY_RATE 1
- #define POWERINDEX_ARRAY_SIZE 48
- u32
- PHY_QueryBBReg8812(
- IN PADAPTER Adapter,
- IN u32 RegAddr,
- IN u32 BitMask
- )
- {
- u32 ReturnValue = 0, OriginalValue, BitShift;
- #if (DISABLE_BB_RF == 1)
- return 0;
- #endif
-
-
- OriginalValue = rtw_read32(Adapter, RegAddr);
- BitShift = PHY_CalculateBitShift(BitMask);
- ReturnValue = (OriginalValue & BitMask) >> BitShift;
-
- return (ReturnValue);
- }
- VOID
- PHY_SetBBReg8812(
- IN PADAPTER Adapter,
- IN u4Byte RegAddr,
- IN u4Byte BitMask,
- IN u4Byte Data
- )
- {
- u4Byte OriginalValue, BitShift;
- #if (DISABLE_BB_RF == 1)
- return;
- #endif
- if(BitMask!= bMaskDWord)
- {
- OriginalValue = rtw_read32(Adapter, RegAddr);
- BitShift = PHY_CalculateBitShift(BitMask);
- Data = ((OriginalValue) & (~BitMask)) |( ((Data << BitShift)) & BitMask);
- }
- rtw_write32(Adapter, RegAddr, Data);
-
-
- }
- static u32
- phy_RFSerialRead(
- IN PADAPTER Adapter,
- IN u8 eRFPath,
- IN u32 Offset
- )
- {
- u32 retValue = 0;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- BB_REGISTER_DEFINITION_T *pPhyReg = &pHalData->PHYRegDef[eRFPath];
- BOOLEAN bIsPIMode = _FALSE;
-
-
-
-
-
-
-
-
- if (Offset != 0x0 && ! (IS_VENDOR_8812A_C_CUT(Adapter) || IS_HARDWARE_TYPE_8821(Adapter)))
- PHY_SetBBReg(Adapter, rCCAonSec_Jaguar, 0x8, 1);
- Offset &= 0xff;
- if (eRFPath == RF_PATH_A)
- bIsPIMode = (BOOLEAN)PHY_QueryBBReg(Adapter, 0xC00, 0x4);
- else if (eRFPath == RF_PATH_B)
- bIsPIMode = (BOOLEAN)PHY_QueryBBReg(Adapter, 0xE00, 0x4);
- if(IS_VENDOR_8812A_TEST_CHIP(Adapter))
- PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, bMaskDWord, 0);
- PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, bHSSIRead_addr_Jaguar, Offset);
-
- if (IS_VENDOR_8812A_TEST_CHIP(Adapter) )
- PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, bMaskDWord, Offset|BIT8);
- if (IS_VENDOR_8812A_C_CUT(Adapter) || IS_HARDWARE_TYPE_8821(Adapter))
- rtw_udelay_os(20);
- if (bIsPIMode)
- {
- retValue = PHY_QueryBBReg(Adapter, pPhyReg->rfLSSIReadBackPi, rRead_data_Jaguar);
-
- }
- else
- {
- retValue = PHY_QueryBBReg(Adapter, pPhyReg->rfLSSIReadBack, rRead_data_Jaguar);
-
- }
-
-
- if (Offset != 0x0 && ! (IS_VENDOR_8812A_C_CUT(Adapter) || IS_HARDWARE_TYPE_8821(Adapter)))
- PHY_SetBBReg(Adapter, rCCAonSec_Jaguar, 0x8, 0);
- return retValue;
- }
- static VOID
- phy_RFSerialWrite(
- IN PADAPTER Adapter,
- IN u8 eRFPath,
- IN u32 Offset,
- IN u32 Data
- )
- {
- u32 DataAndAddr = 0;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- BB_REGISTER_DEFINITION_T *pPhyReg = &pHalData->PHYRegDef[eRFPath];
-
-
-
-
-
-
-
- Offset &= 0xff;
-
-
-
- DataAndAddr = ((Offset<<20) | (Data&0x000fffff)) & 0x0fffffff;
-
- #ifdef CONFIG_USB_HCI
-
-
-
-
-
-
- if ((!pHalData->bSupportUSB3) && (IS_TEST_CHIP(pHalData->VersionID)))
- {
-
- {
- rtw_write32(Adapter, 0x1EC, DataAndAddr);
- if (eRFPath == RF_PATH_A)
- rtw_write32(Adapter, 0x1E8, 0x4000F000|0xC90);
- else
- rtw_write32(Adapter, 0x1E8, 0x4000F000|0xE90);
- }
- }
- else
- #endif
- {
-
-
- PHY_SetBBReg(Adapter, pPhyReg->rf3wireOffset, bMaskDWord, DataAndAddr);
-
- }
- }
- u32
- PHY_QueryRFReg8812(
- IN PADAPTER Adapter,
- IN u8 eRFPath,
- IN u32 RegAddr,
- IN u32 BitMask
- )
- {
- u32 Original_Value, Readback_Value, BitShift;
- #if (DISABLE_BB_RF == 1)
- return 0;
- #endif
- Original_Value = phy_RFSerialRead(Adapter, eRFPath, RegAddr);
-
- BitShift = PHY_CalculateBitShift(BitMask);
- Readback_Value = (Original_Value & BitMask) >> BitShift;
- return (Readback_Value);
- }
- VOID
- PHY_SetRFReg8812(
- IN PADAPTER Adapter,
- IN u8 eRFPath,
- IN u32 RegAddr,
- IN u32 BitMask,
- IN u32 Data
- )
- {
- #if (DISABLE_BB_RF == 1)
- return;
- #endif
- if(BitMask == 0)
- return;
-
- if (BitMask != bLSSIWrite_data_Jaguar) {
- u32 Original_Value, BitShift;
- Original_Value = phy_RFSerialRead(Adapter, eRFPath, RegAddr);
- BitShift = PHY_CalculateBitShift(BitMask);
- Data = ((Original_Value) & (~BitMask)) | (Data<< BitShift);
- }
-
- phy_RFSerialWrite(Adapter, eRFPath, RegAddr, Data);
- }
- s32 PHY_MACConfig8812(PADAPTER Adapter)
- {
- int rtStatus = _SUCCESS;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- s8 *pszMACRegFile;
- s8 sz8812MACRegFile[] = RTL8812_PHY_MACREG;
- pszMACRegFile = sz8812MACRegFile;
-
-
-
- #ifdef CONFIG_EMBEDDED_FWIMG
- if(HAL_STATUS_SUCCESS != ODM_ConfigMACWithHeaderFile(&pHalData->odmpriv))
- rtStatus = _FAIL;
- #else
-
- DBG_871X("Read MACREG.txt\n");
- rtStatus = phy_ConfigMACWithParaFile(Adapter, pszMACRegFile);
- #endif
- return rtStatus;
- }
- static VOID
- phy_InitBBRFRegisterDefinition(
- IN PADAPTER Adapter
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
- pHalData->PHYRegDef[RF_PATH_A].rfintfs = rFPGA0_XAB_RFInterfaceSW;
- pHalData->PHYRegDef[RF_PATH_B].rfintfs = rFPGA0_XAB_RFInterfaceSW;
-
- pHalData->PHYRegDef[RF_PATH_A].rfintfo = rFPGA0_XA_RFInterfaceOE;
- pHalData->PHYRegDef[RF_PATH_B].rfintfo = rFPGA0_XB_RFInterfaceOE;
-
- pHalData->PHYRegDef[RF_PATH_A].rfintfe = rFPGA0_XA_RFInterfaceOE;
- pHalData->PHYRegDef[RF_PATH_B].rfintfe = rFPGA0_XB_RFInterfaceOE;
- pHalData->PHYRegDef[RF_PATH_A].rf3wireOffset = rA_LSSIWrite_Jaguar;
- pHalData->PHYRegDef[RF_PATH_B].rf3wireOffset = rB_LSSIWrite_Jaguar;
- pHalData->PHYRegDef[RF_PATH_A].rfHSSIPara2 = rHSSIRead_Jaguar;
- pHalData->PHYRegDef[RF_PATH_B].rfHSSIPara2 = rHSSIRead_Jaguar;
-
- pHalData->PHYRegDef[RF_PATH_A].rfLSSIReadBack = rA_SIRead_Jaguar;
- pHalData->PHYRegDef[RF_PATH_B].rfLSSIReadBack = rB_SIRead_Jaguar;
- pHalData->PHYRegDef[RF_PATH_A].rfLSSIReadBackPi = rA_PIRead_Jaguar;
- pHalData->PHYRegDef[RF_PATH_B].rfLSSIReadBackPi = rB_PIRead_Jaguar;
-
- }
- VOID
- PHY_BB8812_Config_1T(
- IN PADAPTER Adapter
- )
- {
-
- PHY_SetBBReg(Adapter, rRxPath_Jaguar, bRxPath_Jaguar, 0x11);
-
- PHY_SetBBReg(Adapter, rTxPath_Jaguar, bMaskLWord, 0x1111);
-
- PHY_SetBBReg(Adapter, rCCK_RX_Jaguar, bCCK_RX_Jaguar, 0x0);
-
- PHY_SetBBReg(Adapter, 0x8bc, 0xc0000060, 0x4);
-
- PHY_SetBBReg(Adapter, 0xe00, 0xf, 0x4);
-
- PHY_SetBBReg(Adapter, 0xe90, bMaskDWord, 0);
-
- PHY_SetBBReg(Adapter, 0xe60, bMaskDWord, 0);
- PHY_SetBBReg(Adapter, 0xe64, bMaskDWord, 0);
- }
- static int
- phy_BB8812_Config_ParaFile(
- IN PADAPTER Adapter
- )
- {
- EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(Adapter);
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- int rtStatus = _SUCCESS;
- s8 sz8812BBRegFile[] = RTL8812_PHY_REG;
- s8 sz8812AGCTableFile[] = RTL8812_AGC_TAB;
- s8 sz8812BBRegPgFile[] = RTL8812_PHY_REG_PG;
- s8 sz8812BBRegMpFile[] = RTL8812_PHY_REG_MP;
- s8 sz8812BBRegLimitFile[] = RTL8812_TXPWR_LMT;
- s8 sz8821BBRegFile[] = RTL8821_PHY_REG;
- s8 sz8821AGCTableFile[] = RTL8821_AGC_TAB;
- s8 sz8821BBRegPgFile[] = RTL8821_PHY_REG_PG;
- s8 sz8821BBRegMpFile[] = RTL8821_PHY_REG_MP;
- s8 sz8821RFTxPwrLmtFile[] = RTL8821_TXPWR_LMT;
- s8 *pszBBRegFile = NULL, *pszAGCTableFile = NULL,
- *pszBBRegPgFile = NULL, *pszBBRegMpFile=NULL,
- *pszRFTxPwrLmtFile = NULL;
-
- if(IS_HARDWARE_TYPE_8812(Adapter))
- {
- pszBBRegFile=sz8812BBRegFile ;
- pszAGCTableFile =sz8812AGCTableFile;
- pszBBRegPgFile = sz8812BBRegPgFile;
- pszBBRegMpFile = sz8812BBRegMpFile;
- pszRFTxPwrLmtFile = sz8812BBRegLimitFile;
- }
- else
- {
- pszBBRegFile=sz8821BBRegFile ;
- pszAGCTableFile =sz8821AGCTableFile;
- pszBBRegPgFile = sz8821BBRegPgFile;
- pszBBRegMpFile = sz8821BBRegMpFile;
- pszRFTxPwrLmtFile = sz8821RFTxPwrLmtFile;
- }
- DBG_871X("===> phy_BB8812_Config_ParaFile() EEPROMRegulatory %d\n", pHalData->EEPROMRegulatory );
-
-
-
- PHY_InitPowerLimitTable( &(pHalData->odmpriv) );
- if ( ( Adapter->registrypriv.RegEnableTxPowerLimit == 1 && pHalData->EEPROMRegulatory != 2 ) ||
- pHalData->EEPROMRegulatory == 1 )
- {
- #ifdef CONFIG_EMBEDDED_FWIMG
- if (HAL_STATUS_SUCCESS != ODM_ConfigRFWithHeaderFile(&pHalData->odmpriv, CONFIG_RF_TXPWR_LMT, 0))
- rtStatus = _FAIL;
- #else
- rtStatus = PHY_ConfigBBWithPowerLimitTableParaFile( Adapter, pszRFTxPwrLmtFile );
- #endif
- if(rtStatus != _SUCCESS){
- DBG_871X("phy_BB8812_Config_ParaFile():Write BB Reg Fail!!");
- goto phy_BB_Config_ParaFile_Fail;
- }
- }
-
- #ifdef CONFIG_EMBEDDED_FWIMG
- if (HAL_STATUS_SUCCESS != ODM_ConfigBBWithHeaderFile(&pHalData->odmpriv, CONFIG_BB_PHY_REG))
- rtStatus = _FAIL;
- #else
-
-
- rtStatus = phy_ConfigBBWithParaFile(Adapter,pszBBRegFile);
- #endif
- if(rtStatus != _SUCCESS){
- DBG_871X("phy_BB8812_Config_ParaFile():Write BB Reg Fail!!");
- goto phy_BB_Config_ParaFile_Fail;
- }
- #if 0
-
- #ifdef CONFIG_EMBEDDED_FWIMG
- if (HAL_STATUS_SUCCESS != ODM_ConfigBBWithHeaderFile(&pHalData->odmpriv, CONFIG_BB_PHY_REG))
- rtStatus = _FAIL;
- #else
-
-
- rtStatus = phy_ConfigBBWithMpParaFile(Adapter,pszBBRegMpFile);
- #endif
- if(rtStatus != _SUCCESS){
- DBG_871X("phy_BB8812_Config_ParaFile():Write BB Reg MP Fail!!");
- goto phy_BB_Config_ParaFile_Fail;
- }
- #endif
-
-
- if (pEEPROM->bautoload_fail_flag == _FALSE)
- {
- pHalData->pwrGroupCnt = 0;
- #ifdef CONFIG_EMBEDDED_FWIMG
- if (HAL_STATUS_SUCCESS != ODM_ConfigBBWithHeaderFile(&pHalData->odmpriv, CONFIG_BB_PHY_REG_PG))
- rtStatus = _FAIL;
- #else
- rtStatus = phy_ConfigBBWithPgParaFile(Adapter, pszBBRegPgFile);
- #endif
- if(rtStatus != _SUCCESS){
- DBG_871X("phy_BB8812_Config_ParaFile():BB_PG Reg Fail!!");
- goto phy_BB_Config_ParaFile_Fail;
- }
- if ( ( Adapter->registrypriv.RegEnableTxPowerLimit == 1 && pHalData->EEPROMRegulatory != 2 ) ||
- pHalData->EEPROMRegulatory == 1 )
- PHY_ConvertPowerLimitToPowerIndex( Adapter );
- }
-
- #ifdef CONFIG_EMBEDDED_FWIMG
- if (HAL_STATUS_SUCCESS != ODM_ConfigBBWithHeaderFile(&pHalData->odmpriv, CONFIG_BB_AGC_TAB))
- rtStatus = _FAIL;
- #else
- rtStatus = phy_ConfigBBWithParaFile(Adapter, pszAGCTableFile);
- #endif
- if(rtStatus != _SUCCESS){
- DBG_871X("phy_BB8812_Config_ParaFile():AGC Table Fail\n");
- goto phy_BB_Config_ParaFile_Fail;
- }
- phy_BB_Config_ParaFile_Fail:
- return rtStatus;
- }
- int
- PHY_BBConfig8812(
- IN PADAPTER Adapter
- )
- {
- int rtStatus = _SUCCESS;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 TmpU1B=0;
- u8 CrystalCap;
- phy_InitBBRFRegisterDefinition(Adapter);
-
-
- TmpU1B = rtw_read8(Adapter, REG_SYS_FUNC_EN);
- if(IS_HARDWARE_TYPE_8812AU(Adapter) || IS_HARDWARE_TYPE_8821U(Adapter))
- TmpU1B |= FEN_USBA;
- else if(IS_HARDWARE_TYPE_8812E(Adapter) || IS_HARDWARE_TYPE_8821E(Adapter))
- TmpU1B |= FEN_PCIEA;
- rtw_write8(Adapter, REG_SYS_FUNC_EN, TmpU1B);
- rtw_write8(Adapter, REG_SYS_FUNC_EN, (TmpU1B|FEN_BB_GLB_RSTn|FEN_BBRSTB));
-
- rtw_write8(Adapter, REG_RF_CTRL, 0x07);
-
- rtw_write8(Adapter, REG_OPT_CTRL_8812+2, 0x7);
-
-
-
-
- rtStatus = phy_BB8812_Config_ParaFile(Adapter);
- if(IS_HARDWARE_TYPE_8812(Adapter))
- {
-
- CrystalCap = pHalData->CrystalCap & 0x3F;
- PHY_SetBBReg(Adapter, REG_MAC_PHY_CTRL, 0x7FF80000, (CrystalCap | (CrystalCap << 6)));
- }
- else if ((IS_HARDWARE_TYPE_8723A(Adapter) && pHalData->EEPROMVersion >= 0x01) ||
- IS_HARDWARE_TYPE_8821(Adapter) || IS_HARDWARE_TYPE_8723B(Adapter) ||
- IS_HARDWARE_TYPE_8192E(Adapter))
- {
-
- CrystalCap = pHalData->CrystalCap & 0x3F;
- PHY_SetBBReg(Adapter, REG_MAC_PHY_CTRL, 0xFFF000, (CrystalCap | (CrystalCap << 6)));
- }
- if(IS_HARDWARE_TYPE_JAGUAR(Adapter))
- {
- pHalData->Reg837 = rtw_read8(Adapter, 0x837);
- }
- return rtStatus;
-
- }
- int
- PHY_RFConfig8812(
- IN PADAPTER Adapter
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- int rtStatus = _SUCCESS;
- if (Adapter->bSurpriseRemoved)
- return _FAIL;
- switch(pHalData->rf_chip)
- {
- case RF_PSEUDO_11N:
- DBG_871X("%s(): RF_PSEUDO_11N\n",__FUNCTION__);
- break;
- default:
- rtStatus = PHY_RF6052_Config_8812(Adapter);
- break;
- }
- return rtStatus;
- }
- BOOLEAN
- eqNByte(
- u8* str1,
- u8* str2,
- u32 num
- )
- {
- if(num==0)
- return _FALSE;
- while(num>0)
- {
- num--;
- if(str1[num]!=str2[num])
- return _FALSE;
- }
- return _TRUE;
- }
- BOOLEAN
- GetU1ByteIntegerFromStringInDecimal(
- IN s8* Str,
- IN OUT u8* pInt
- )
- {
- u16 i = 0;
- *pInt = 0;
- while ( Str[i] != '\0' )
- {
- if ( Str[i] >= '0' && Str[i] <= '9' )
- {
- *pInt *= 10;
- *pInt += ( Str[i] - '0' );
- }
- else
- {
- return _FALSE;
- }
- ++i;
- }
- return _TRUE;
- }
- static s8
- phy_GetChannelGroup(
- IN BAND_TYPE Band,
- IN u8 Channel
- )
- {
- s8 channelGroup = -1;
- if ( Channel <= 14 && Band == BAND_ON_2_4G )
- {
- if ( 1 <= Channel && Channel <= 2 ) channelGroup = 0;
- else if ( 3 <= Channel && Channel <= 5 ) channelGroup = 1;
- else if ( 6 <= Channel && Channel <= 8 ) channelGroup = 2;
- else if ( 9 <= Channel && Channel <= 11 ) channelGroup = 3;
- else if ( 12 <= Channel && Channel <= 14) channelGroup = 4;
- else
- {
- DBG_871X( "==> phy_GetChannelGroup() in 2.4 G, but Channel %d in Group not found \n", Channel );
- channelGroup = -1;
- }
- }
- else if( Band == BAND_ON_5G )
- {
- if ( 36 <= Channel && Channel <= 42 ) channelGroup = 0;
- else if ( 44 <= Channel && Channel <= 48 ) channelGroup = 1;
- else if ( 50 <= Channel && Channel <= 58 ) channelGroup = 2;
- else if ( 60 <= Channel && Channel <= 64 ) channelGroup = 3;
- else if ( 100 <= Channel && Channel <= 106 ) channelGroup = 4;
- else if ( 108 <= Channel && Channel <= 114 ) channelGroup = 5;
- else if ( 116 <= Channel && Channel <= 122 ) channelGroup = 6;
- else if ( 124 <= Channel && Channel <= 130 ) channelGroup = 7;
- else if ( 132 <= Channel && Channel <= 138 ) channelGroup = 8;
- else if ( 140 <= Channel && Channel <= 144 ) channelGroup = 9;
- else if ( 149 <= Channel && Channel <= 155 ) channelGroup = 10;
- else if ( 157 <= Channel && Channel <= 161 ) channelGroup = 11;
- else if ( 165 <= Channel && Channel <= 171 ) channelGroup = 12;
- else if ( 173 <= Channel && Channel <= 177 ) channelGroup = 13;
- else
- {
- DBG_871X("==>phy_GetChannelGroup() in 5G, but Channel %d in Group not found \n", Channel );
- channelGroup = -1;
- }
- }
- else
- {
- DBG_871X("==>phy_GetChannelGroup() in unsupported band %d\n", Band );
- channelGroup = -1;
- }
- return channelGroup;
- }
- u8
- phy_getPowerByRateBaseIndex(
- IN BAND_TYPE Band,
- IN u8 Rate
- )
- {
- u8 index = 0;
- if ( Band == BAND_ON_2_4G )
- {
- switch ( Rate )
- {
- case MGN_1M: case MGN_2M: case MGN_5_5M: case MGN_11M:
- index = 0;
- break;
- case MGN_6M: case MGN_9M: case MGN_12M: case MGN_18M:
- case MGN_24M: case MGN_36M: case MGN_48M: case MGN_54M:
- index = 1;
- break;
- case MGN_MCS0: case MGN_MCS1: case MGN_MCS2: case MGN_MCS3:
- case MGN_MCS4: case MGN_MCS5: case MGN_MCS6: case MGN_MCS7:
- index = 2;
- break;
-
- case MGN_MCS8: case MGN_MCS9: case MGN_MCS10: case MGN_MCS11:
- case MGN_MCS12: case MGN_MCS13: case MGN_MCS14: case MGN_MCS15:
- index = 3;
- break;
- default:
- DBG_871X("Wrong rate 0x%x to obtain index in 2.4G in phy_getPowerByRateBaseIndex()\n", Rate );
- break;
- }
- }
- else if ( Band == BAND_ON_5G )
- {
- switch ( Rate )
- {
- case MGN_6M: case MGN_9M: case MGN_12M: case MGN_18M:
- case MGN_24M: case MGN_36M: case MGN_48M: case MGN_54M:
- index = 0;
- break;
- case MGN_MCS0: case MGN_MCS1: case MGN_MCS2: case MGN_MCS3:
- case MGN_MCS4: case MGN_MCS5: case MGN_MCS6: case MGN_MCS7:
- index = 1;
- break;
-
- case MGN_MCS8: case MGN_MCS9: case MGN_MCS10: case MGN_MCS11:
- case MGN_MCS12: case MGN_MCS13: case MGN_MCS14: case MGN_MCS15:
- index = 2;
- break;
- case MGN_VHT1SS_MCS0: case MGN_VHT1SS_MCS1: case MGN_VHT1SS_MCS2:
- case MGN_VHT1SS_MCS3: case MGN_VHT1SS_MCS4: case MGN_VHT1SS_MCS5:
- case MGN_VHT1SS_MCS6: case MGN_VHT1SS_MCS7: case MGN_VHT1SS_MCS8:
- case MGN_VHT1SS_MCS9:
- index = 3;
- break;
-
- case MGN_VHT2SS_MCS0: case MGN_VHT2SS_MCS1: case MGN_VHT2SS_MCS2:
- case MGN_VHT2SS_MCS3: case MGN_VHT2SS_MCS4: case MGN_VHT2SS_MCS5:
- case MGN_VHT2SS_MCS6: case MGN_VHT2SS_MCS7: case MGN_VHT2SS_MCS8:
- case MGN_VHT2SS_MCS9:
- index = 4;
- break;
- default:
- DBG_871X("Wrong rate 0x%x to obtain index in 5G in phy_getPowerByRateBaseIndex()\n", Rate );
- break;
- }
- }
- return index;
- }
- VOID
- PHY_InitPowerLimitTable(
- IN PDM_ODM_T pDM_Odm
- )
- {
- PADAPTER Adapter = pDM_Odm->Adapter;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 i, j, k, l, m;
-
- for ( i = 0; i < MAX_REGULATION_NUM; ++i )
- {
- for ( j = 0; j < MAX_2_4G_BANDWITH_NUM; ++j )
- for ( k = 0; k < MAX_2_4G_RATE_SECTION_NUM; ++k )
- for ( m = 0; m < MAX_2_4G_CHANNEL_NUM; ++m )
- for ( l = 0; l < GET_HAL_RFPATH_NUM(Adapter) ;++l )
- pHalData->TxPwrLimit_2_4G[i][j][k][m][l] = MAX_POWER_INDEX;
- }
- for ( i = 0; i < MAX_REGULATION_NUM; ++i )
- {
- for ( j = 0; j < MAX_5G_BANDWITH_NUM; ++j )
- for ( k = 0; k < MAX_5G_RATE_SECTION_NUM; ++k )
- for ( m = 0; m < MAX_5G_CHANNEL_NUM; ++m )
- for ( l = 0; l < GET_HAL_RFPATH_NUM(Adapter) ; ++l )
- pHalData->TxPwrLimit_5G[i][j][k][m][l] = MAX_POWER_INDEX;
- }
-
- }
- VOID
- PHY_ConvertPowerLimitToPowerIndex(
- IN PADAPTER Adapter
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 BW40PwrBasedBm2_4G, BW40PwrBasedBm5G;
- u8 regulation, bw, channel, rateSection, group;
- u8 baseIndex2_4G;
- u8 baseIndex5G;
- s8 tempValue = 0, tempPwrLmt = 0;
- u8 rfPath = 0;
- DBG_871X( "=====> PHY_ConvertPowerLimitToPowerIndex()\n" );
- for ( regulation = 0; regulation < MAX_REGULATION_NUM; ++regulation )
- {
- for ( bw = 0; bw < MAX_2_4G_BANDWITH_NUM; ++bw )
- {
- for ( group = 0; group < MAX_2_4G_CHANNEL_NUM; ++group )
- {
- if ( group == 0 )
- channel = 1;
- else if ( group == 1 )
- channel = 3;
- else if ( group == 2 )
- channel = 6;
- else if ( group == 3 )
- channel = 9;
- else if ( group == 4 )
- channel = 12;
- else
- channel = 14;
-
-
- for ( rateSection = 0; rateSection < MAX_2_4G_RATE_SECTION_NUM; ++rateSection )
- {
- if ( pHalData->odmpriv.PhyRegPgValueType == PHY_REG_PG_EXACT_VALUE ) {
-
-
- if ( rateSection == 0 ) {
- baseIndex2_4G = phy_getPowerByRateBaseIndex( BAND_ON_2_4G, MGN_11M );
- }
- else if ( rateSection == 1 ) {
- baseIndex2_4G = phy_getPowerByRateBaseIndex( BAND_ON_2_4G, MGN_54M );
- }
- else if ( rateSection == 2 ) {
- baseIndex2_4G = phy_getPowerByRateBaseIndex( BAND_ON_2_4G, MGN_MCS7 );
- }
- else if ( rateSection == 3 ) {
- baseIndex2_4G = phy_getPowerByRateBaseIndex( BAND_ON_2_4G, MGN_MCS15 );
- }
- }
-
-
-
- tempPwrLmt = pHalData->TxPwrLimit_2_4G[regulation][bw][rateSection][group][ODM_RF_PATH_A];
-
- for ( rfPath = 0; rfPath < MAX_RF_PATH_NUM; ++rfPath )
- {
- if ( pHalData->odmpriv.PhyRegPgValueType == PHY_REG_PG_EXACT_VALUE )
- BW40PwrBasedBm2_4G = pHalData->TxPwrByRateBase2_4G[rfPath][baseIndex2_4G];
- else
- BW40PwrBasedBm2_4G = Adapter->registrypriv.RegPowerBase * 2;
- if ( tempPwrLmt != MAX_POWER_INDEX ) {
- tempValue = tempPwrLmt - BW40PwrBasedBm2_4G;
- pHalData->TxPwrLimit_2_4G[regulation][bw][rateSection][group][rfPath] = tempValue;
- }
-
- DBG_871X("TxPwrLimit_2_4G[regulation %d][bw %d][rateSection %d][group %d] %d=\n\
- (TxPwrLimit in dBm %d - BW40PwrLmt2_4G[channel %d][rfPath %d] %d) \n",
- regulation, bw, rateSection, group, pHalData->TxPwrLimit_2_4G[regulation][bw][rateSection][group][rfPath],
- tempPwrLmt, channel, rfPath, BW40PwrBasedBm2_4G );
- }
- }
- }
- }
- }
-
- if ( IS_HARDWARE_TYPE_8812( Adapter ) || IS_HARDWARE_TYPE_8821( Adapter ) )
- {
- for ( regulation = 0; regulation < MAX_REGULATION_NUM; ++regulation )
- {
- for ( bw = 0; bw < MAX_5G_BANDWITH_NUM; ++bw )
- {
- for ( group = 0; group < MAX_5G_CHANNEL_NUM; ++group )
- {
-
- if ( group == 0 )
- channel = 0;
- else if ( group == 1 )
- channel = 4;
- else if ( group == 2 )
- channel = 7;
- else if ( group == 3 )
- channel = 12;
- else if ( group == 4 )
- channel = 15;
- else if ( group == 5 )
- channel = 19;
- else if ( group == 6 )
- channel = 23;
- else if ( group == 7 )
- channel = 27;
- else if ( group == 8 )
- channel = 31;
- else if ( group == 9 )
- channel = 35;
- else if ( group == 10 )
- channel = 38;
- else if ( group == 11 )
- channel = 42;
- else if ( group == 12 )
- channel = 46;
- else
- channel = 51;
-
- for ( rateSection = 1; rateSection < MAX_5G_RATE_SECTION_NUM; ++rateSection )
- {
- if ( pHalData->odmpriv.PhyRegPgValueType == PHY_REG_PG_EXACT_VALUE ) {
-
-
-
- if ( rateSection == 1 ) {
- baseIndex5G = phy_getPowerByRateBaseIndex( BAND_ON_5G, MGN_54M );
- }
- else if ( rateSection == 2 ) {
- baseIndex5G = phy_getPowerByRateBaseIndex( BAND_ON_5G, MGN_MCS7 );
- }
- else if ( rateSection == 3 ) {
- baseIndex5G = phy_getPowerByRateBaseIndex( BAND_ON_5G, MGN_MCS15 );
- }
- else if ( rateSection == 4 ) {
- baseIndex5G = phy_getPowerByRateBaseIndex( BAND_ON_5G, MGN_VHT1SS_MCS7 );
- }
- else if ( rateSection == 5 ) {
- baseIndex5G = phy_getPowerByRateBaseIndex( BAND_ON_5G, MGN_VHT2SS_MCS7 );
- }
- }
-
-
-
- tempPwrLmt = pHalData->TxPwrLimit_5G[regulation][bw][rateSection][group][ODM_RF_PATH_A];
- if ( tempPwrLmt == MAX_POWER_INDEX )
- {
- if ( bw == 0 || bw == 1 ) {
- DBG_871X( "No power limit table of the specified band %d, bandwidth %d, ratesection %d, group %d, rf path %d\n",
- 1, bw, rateSection, group, ODM_RF_PATH_A );
- if ( rateSection == 2 ) {
- pHalData->TxPwrLimit_5G[regulation][bw][2][group][ODM_RF_PATH_A] =
- pHalData->TxPwrLimit_5G[regulation][bw][4][group][ODM_RF_PATH_A];
- tempPwrLmt = pHalData->TxPwrLimit_5G[regulation]
- [bw][4][group][ODM_RF_PATH_A];
- }
- else if ( rateSection == 4 ) {
- pHalData->TxPwrLimit_5G[regulation][bw][4][group][ODM_RF_PATH_A] =
- pHalData->TxPwrLimit_5G[regulation][bw][2][group][ODM_RF_PATH_A];
- tempPwrLmt = pHalData->TxPwrLimit_5G[regulation]
- [bw][2][group][ODM_RF_PATH_A];
- }
- else if ( rateSection == 3 ) {
- pHalData->TxPwrLimit_5G[regulation][bw][3][group][ODM_RF_PATH_A] =
- pHalData->TxPwrLimit_5G[regulation][bw][5][group][ODM_RF_PATH_A];
- tempPwrLmt = pHalData->TxPwrLimit_5G[regulation]
- [bw][5][group][ODM_RF_PATH_A];
- }
- else if ( rateSection == 5 ) {
- pHalData->TxPwrLimit_5G[regulation][bw][5][group][ODM_RF_PATH_A] =
- pHalData->TxPwrLimit_5G[regulation][bw][3][group][ODM_RF_PATH_A];
- tempPwrLmt = pHalData->TxPwrLimit_5G[regulation]
- [bw][3][group][ODM_RF_PATH_A];
- }
- DBG_871X("use other value %d", tempPwrLmt);
- }
- }
-
- for ( rfPath = ODM_RF_PATH_B; rfPath < MAX_RF_PATH_NUM; ++rfPath )
- {
- if ( pHalData->odmpriv.PhyRegPgValueType == PHY_REG_PG_EXACT_VALUE )
- BW40PwrBasedBm5G = pHalData->TxPwrByRateBase5G[rfPath][baseIndex5G];
- else
- BW40PwrBasedBm5G = Adapter->registrypriv.RegPowerBase * 2;
- if ( tempPwrLmt != MAX_POWER_INDEX ) {
- tempValue = tempPwrLmt - BW40PwrBasedBm5G;
- pHalData->TxPwrLimit_5G[regulation][bw][rateSection][group][rfPath] = tempValue;
- }
-
- DBG_871X("TxPwrLimit_5G[regulation %d][bw %d][rateSection %d][group %d] %d=\n\
- (TxPwrLimit in dBm %d - BW40PwrLmt5G[channel %d][rfPath %d] %d) \n",
- regulation, bw, rateSection, group, pHalData->TxPwrLimit_5G[regulation][bw][rateSection][group][rfPath],
- tempPwrLmt, channel, rfPath, BW40PwrBasedBm5G );
- }
- }
- }
- }
- }
-
-
- for ( regulation = 0; regulation < MAX_REGULATION_NUM; ++regulation )
- {
- for ( bw = 0; bw < MAX_5G_BANDWITH_NUM; ++bw )
- {
- for ( group = 0; group < MAX_5G_CHANNEL_NUM; ++group )
- {
- if ( group == 0 )
- channel = 0;
- else if ( group == 1 )
- channel = 4;
- else if ( group == 2 )
- channel = 7;
- else if ( group == 3 )
- channel = 12;
- else if ( group == 4 )
- channel = 15;
- else if ( group == 5 )
- channel = 19;
- else if ( group == 6 )
- channel = 23;
- else if ( group == 7 )
- channel = 27;
- else if ( group == 8 )
- channel = 31;
- else if ( group == 9 )
- channel = 35;
- else if ( group == 10 )
- channel = 38;
- else if ( group == 11 )
- channel = 42;
- else if ( group == 12 )
- channel = 46;
- else
- channel = 51;
-
- for ( rateSection = 0; rateSection < MAX_5G_RATE_SECTION_NUM; ++rateSection )
- {
- if ( pHalData->odmpriv.PhyRegPgValueType == PHY_REG_PG_EXACT_VALUE ) {
-
-
-
- if ( rateSection == 1 ) {
- baseIndex5G = phy_getPowerByRateBaseIndex( BAND_ON_5G, MGN_54M );
- }
- else if ( rateSection == 2 ) {
- baseIndex5G = phy_getPowerByRateBaseIndex( BAND_ON_5G, MGN_MCS7 );
- }
- else if ( rateSection == 3 ) {
- baseIndex5G = phy_getPowerByRateBaseIndex( BAND_ON_5G, MGN_MCS15 );
- }
- else if ( rateSection == 4 ) {
- baseIndex5G = phy_getPowerByRateBaseIndex( BAND_ON_5G, MGN_VHT1SS_MCS7 );
- }
- else if ( rateSection == 5 ) {
- baseIndex5G = phy_getPowerByRateBaseIndex( BAND_ON_5G, MGN_VHT2SS_MCS7 );
- }
- }
- tempPwrLmt = pHalData->TxPwrLimit_5G[regulation][bw][rateSection][group][ODM_RF_PATH_A];
- if ( tempPwrLmt == MAX_POWER_INDEX )
- {
- if ( bw == 0 || bw == 1 ) {
- DBG_871X("No power limit table of the specified band %d, bandwidth %d, ratesection %d, group %d, rf path %d\n",
- 1, bw, rateSection, group, ODM_RF_PATH_A );
- if ( rateSection == 2 )
- tempPwrLmt = pHalData->TxPwrLimit_5G[regulation]
- [bw][4][group][ODM_RF_PATH_A];
- else if ( rateSection == 4 )
- tempPwrLmt = pHalData->TxPwrLimit_5G[regulation]
- [bw][2][group][ODM_RF_PATH_A];
- else if ( rateSection == 3 )
- tempPwrLmt = pHalData->TxPwrLimit_5G[regulation]
- [bw][5][group][ODM_RF_PATH_A];
- else if ( rateSection == 5 )
- tempPwrLmt = pHalData->TxPwrLimit_5G[regulation]
- [bw][3][group][ODM_RF_PATH_A];
- DBG_871X("use other value %d", tempPwrLmt );
- }
- }
-
- if ( pHalData->odmpriv.PhyRegPgValueType == PHY_REG_PG_EXACT_VALUE )
- BW40PwrBasedBm5G = pHalData->TxPwrByRateBase5G[ODM_RF_PATH_A][baseIndex5G];
- else
- BW40PwrBasedBm5G = Adapter->registrypriv.RegPowerBase * 2;
- if ( tempPwrLmt != MAX_POWER_INDEX ) {
- tempValue = tempPwrLmt - BW40PwrBasedBm5G;
- pHalData->TxPwrLimit_5G[regulation][bw][rateSection][group][ODM_RF_PATH_A] = tempValue;
- }
-
- DBG_871X("TxPwrLimit_5G[regulation %d][bw %d][rateSection %d][group %d] %d=\n\
- (TxPwrLimit in dBm %d - BW40PwrLmt5G[channel %d][rfPath %d] %d) \n",
- regulation, bw, rateSection, group, pHalData->TxPwrLimit_5G[regulation][bw][rateSection][group][ODM_RF_PATH_A],
- tempPwrLmt, channel, ODM_RF_PATH_A, BW40PwrBasedBm5G );
- }
- }
- }
- }
- }
- DBG_871X("<===== PHY_ConvertPowerLimitToPowerIndex()\n" );
- }
- VOID
- PHY_SetPowerLimitTableValue(
- IN PDM_ODM_T pDM_Odm,
- IN s8* Regulation,
- IN s8* Band,
- IN s8* Bandwidth,
- IN s8* RateSection,
- IN s8* RfPath,
- IN s8* Channel,
- IN s8* PowerLimit
- )
- {
- PADAPTER Adapter = pDM_Odm->Adapter;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA( Adapter );
- u8 regulation=0, bandwidth=0, rateSection=0,
- channel, powerLimit, channelGroup;
- DBG_871X( "Index of power limit table \
- [band %s][regulation %s][bw %s][rate section %s][rf path %s][chnl %s][val %s]\n",
- Band, Regulation, Bandwidth, RateSection, RfPath, Channel, PowerLimit ) ;
- if ( !GetU1ByteIntegerFromStringInDecimal( Channel, &channel ) ||
- !GetU1ByteIntegerFromStringInDecimal( PowerLimit, &powerLimit ) )
- {
- DBG_871X("Illegal index of power limit table [chnl %s][val %s]\n", Channel, PowerLimit );
- }
- powerLimit = powerLimit > MAX_POWER_INDEX ? MAX_POWER_INDEX : powerLimit;
- if ( eqNByte( Regulation, "FCC", 3 ) ) regulation = 0;
- else if ( eqNByte( Regulation, "MKK", 3 ) ) regulation = 1;
- else if ( eqNByte( Regulation, "ETSI", 4 ) ) regulation = 2;
- if ( eqNByte( RateSection, "CCK", 3 ) )
- rateSection = 0;
- else if ( eqNByte( RateSection, "OFDM", 4 ) )
- rateSection = 1;
- else if ( eqNByte( RateSection, "HT", 2 ) && eqNByte( RfPath, "1T", 2 ) )
- rateSection = 2;
- else if ( eqNByte( RateSection, "HT", 2 ) && eqNByte( RfPath, "2T", 2 ) )
- rateSection = 3;
- else if ( eqNByte( RateSection, "VHT", 3 ) && eqNByte( RfPath, "1T", 2 ) )
- rateSection = 4;
- else if ( eqNByte( RateSection, "VHT", 3 ) && eqNByte( RfPath, "2T", 2 ) )
- rateSection = 5;
-
- if ( eqNByte( Bandwidth, "20M", 3 ) ) bandwidth = 0;
- else if ( eqNByte( Bandwidth, "40M", 3 ) ) bandwidth = 1;
- else if ( eqNByte( Bandwidth, "80M", 3 ) ) bandwidth = 2;
- else if ( eqNByte( Bandwidth, "160M", 4 ) ) bandwidth = 3;
- if ( eqNByte( Band, "2.4G", 4 ) )
- {
- DBG_871X( "2.4G Band value : [regulation %d][bw %d][rate_section %d][chnl %d][val %d]\n",
- regulation, bandwidth, rateSection, channel, powerLimit );
- channelGroup = phy_GetChannelGroup( BAND_ON_2_4G, channel );
- pHalData->TxPwrLimit_2_4G[regulation][bandwidth][rateSection][channelGroup][ODM_RF_PATH_A] = powerLimit;
- }
- else if ( eqNByte( Band, "5G", 2 ) )
- {
- DBG_871X("5G Band value : [regulation %d][bw %d][rate_section %d][chnl %d][val %d]\n",
- regulation, bandwidth, rateSection, channel, powerLimit );
- channelGroup = phy_GetChannelGroup( BAND_ON_5G, channel );
- pHalData->TxPwrLimit_5G[regulation][bandwidth][rateSection][channelGroup][ODM_RF_PATH_A] = powerLimit;
- }
- else
- {
- DBG_871X("Cannot recognize the band info in %s\n", Band );
- return;
- }
- }
- u8
- PHY_GetPowerLimitValue(
- IN PADAPTER Adapter,
- IN u32 RegPwrTblSel,
- IN BAND_TYPE Band,
- IN CHANNEL_WIDTH Bandwidth,
- IN RF_PATH RfPath,
- IN u8 DataRate,
- IN u8 Channel
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- s16 band = -1, regulation = -1, bandwidth = -1,
- rfPath = -1, rateSection = -1, channelGroup = -1;
- u8 powerLimit = MAX_POWER_INDEX;
- if ( ( Adapter->registrypriv.RegEnableTxPowerLimit == 0 && pHalData->EEPROMRegulatory != 1 ) ||
- pHalData->EEPROMRegulatory == 2 )
- return MAX_POWER_INDEX;
- switch( RegPwrTblSel )
- {
- case 1:
- regulation = TXPWR_LMT_ETSI;
- break;
- case 2:
- regulation = TXPWR_LMT_MKK;
- break;
- case 3:
- regulation = TXPWR_LMT_FCC;
- break;
- default:
- regulation = TXPWR_LMT_FCC;
- break;
- }
-
- if ( Band == BAND_ON_2_4G ) band = 0;
- else if ( Band == BAND_ON_5G ) band = 1;
- if ( Bandwidth == CHANNEL_WIDTH_20 ) bandwidth = 0;
- else if ( Bandwidth == CHANNEL_WIDTH_40 ) bandwidth = 1;
- else if ( Bandwidth == CHANNEL_WIDTH_80 ) bandwidth = 2;
- else if ( Bandwidth == CHANNEL_WIDTH_160 ) bandwidth = 3;
- switch ( DataRate )
- {
- case MGN_1M: case MGN_2M: case MGN_5_5M: case MGN_11M:
- rateSection = 0;
- break;
- case MGN_6M: case MGN_9M: case MGN_12M: case MGN_18M:
- case MGN_24M: case MGN_36M: case MGN_48M: case MGN_54M:
- rateSection = 1;
- break;
- case MGN_MCS0: case MGN_MCS1: case MGN_MCS2: case MGN_MCS3:
- case MGN_MCS4: case MGN_MCS5: case MGN_MCS6: case MGN_MCS7:
- rateSection = 2;
- break;
-
- case MGN_MCS8: case MGN_MCS9: case MGN_MCS10: case MGN_MCS11:
- case MGN_MCS12: case MGN_MCS13: case MGN_MCS14: case MGN_MCS15:
- rateSection = 3;
- break;
- case MGN_VHT1SS_MCS0: case MGN_VHT1SS_MCS1: case MGN_VHT1SS_MCS2:
- case MGN_VHT1SS_MCS3: case MGN_VHT1SS_MCS4: case MGN_VHT1SS_MCS5:
- case MGN_VHT1SS_MCS6: case MGN_VHT1SS_MCS7: case MGN_VHT1SS_MCS8:
- case MGN_VHT1SS_MCS9:
- rateSection = 4;
- break;
-
- case MGN_VHT2SS_MCS0: case MGN_VHT2SS_MCS1: case MGN_VHT2SS_MCS2:
- case MGN_VHT2SS_MCS3: case MGN_VHT2SS_MCS4: case MGN_VHT2SS_MCS5:
- case MGN_VHT2SS_MCS6: case MGN_VHT2SS_MCS7: case MGN_VHT2SS_MCS8:
- case MGN_VHT2SS_MCS9:
- rateSection = 5;
- break;
- default:
- DBG_871X("Wrong rate 0x%x\n", DataRate );
- break;
- }
- if ( BAND_ON_2_4G && rateSection > 3 )
- DBG_871X("Wrong rate 0x%x: No VHT in 2.4G Band\n", DataRate );
- if ( BAND_ON_5G && rateSection == 0 )
- DBG_871X("Wrong rate 0x%x: No CCK in 5G Band\n", DataRate );
-
-
- if ( rateSection == 1 )
- bandwidth = 0;
-
-
- if ( ( rateSection == 2 || rateSection == 3 ) && Band == BAND_ON_5G && bandwidth == 2 ) {
- bandwidth = 1;
- }
- if ( Band == BAND_ON_2_4G )
- channelGroup = phy_GetChannelGroup( BAND_ON_2_4G, Channel );
- else if ( Band == BAND_ON_5G )
- channelGroup = phy_GetChannelGroup( BAND_ON_5G, Channel );
- else if ( Band == BAND_ON_BOTH )
- {
-
- }
-
- if ( band == -1 || regulation == -1 || bandwidth == -1 ||
- rateSection == -1 || channelGroup == -1 )
- {
- DBG_871X("Wrong index value to access power limit table \
- [band %d][regulation %d][bandwidth %d][rf_path %d][rate_section %d][chnlGroup %d]\n",
- band, regulation, bandwidth, RfPath, rateSection, channelGroup );
- return 0xFF;
- }
- if ( Band == BAND_ON_2_4G )
- powerLimit = pHalData->TxPwrLimit_2_4G[regulation]
- [bandwidth][rateSection][channelGroup][RfPath];
- else if ( Band == BAND_ON_5G )
- powerLimit = pHalData->TxPwrLimit_5G[regulation]
- [bandwidth][rateSection][channelGroup][RfPath];
- else
- DBG_871X("No power limit table of the specified band\n" );
-
-
-
-
-
- return powerLimit;
- }
- VOID
- PHY_StorePwrByRateIndexVhtSeries(
- IN PADAPTER Adapter,
- IN u32 RegAddr,
- IN u32 BitMask,
- IN u32 Data
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 rf_path, rate_section;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- if ((RegAddr & 0xFFF) == 0xC20)
- {
- pHalData->TxPwrByRateTable++;
- pHalData->TxPwrByRateBand = 0;
- }
- if ((RegAddr & 0xFFF) == 0xe20)
- {
- pHalData->TxPwrByRateTable++;
- }
- if ((RegAddr & 0xFFF) == 0xC24 && pHalData->TxPwrByRateTable != 1)
- {
- pHalData->TxPwrByRateTable++;
- pHalData->TxPwrByRateBand = 1;
- }
-
-
-
- if ((RegAddr & 0xF00) == 0xC00)
- {
- rf_path = 0;
- }
- else if ((RegAddr & 0xF00) == 0xE00)
- {
- rf_path = 1;
- }
-
-
-
- if (rf_path == 0)
- {
- rate_section = (u8)((RegAddr&0xFFF)-0xC20)/4;
- }
- else if (rf_path == 1)
- {
- rate_section = (u8)((RegAddr&0xFFF)-0xE20)/4;
- }
- pHalData->TxPwrByRateOffset[pHalData->TxPwrByRateBand][rf_path][rate_section] = Data;
-
-
-
- }
- VOID
- phy_ChangePGDataFromExactToRelativeValue(
- IN u32* pData,
- IN u8 Start,
- IN u8 End,
- IN u8 BaseValue
- )
- {
- s8 i = 0;
- u8 TempValue = 0;
- u32 TempData = 0;
-
-
-
- for ( i = 3; i >= 0; --i )
- {
- if ( i >= Start && i <= End )
- {
-
- TempValue = ( u8 ) ( *pData >> ( i * 8 ) ) & 0xF;
- TempValue += ( ( u8 ) ( ( *pData >> ( i * 8 + 4 ) ) & 0xF ) ) * 10;
-
- TempValue = ( TempValue > BaseValue ) ? TempValue - BaseValue : BaseValue - TempValue;
- }
- else
- {
- TempValue = ( u8 ) ( *pData >> ( i * 8 ) ) & 0xFF;
- }
-
-
-
- TempData <<= 8;
- TempData |= TempValue;
- }
- *pData = TempData;
- }
- VOID phy_PreprocessVHTPGDataFromExactToRelativeValue(
- IN PADAPTER Adapter,
- IN u32 RegAddr,
- IN u32 BitMask,
- IN u32* pData
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 rf_path, rate_section, BaseValue = 0;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- if ( ( RegAddr & 0xF00 ) == 0xC00 )
- {
- rf_path = 0;
- }
- else if ( ( RegAddr & 0xF00 ) == 0xE00 )
- {
- rf_path = 1;
- }
-
-
-
- if ( rf_path == 0 )
- {
- rate_section = ( u8) ( ( RegAddr & 0xFFF ) - 0xC20 ) / 4;
- }
- else if ( rf_path == 1 )
- {
- rate_section = ( u8 ) ( ( RegAddr & 0xFFF ) - 0xE20 ) / 4;
- }
-
- switch ( RegAddr )
- {
- case 0xC20:
- case 0xE20:
-
-
-
- BaseValue = ( ( u8 ) ( *pData >> 28 ) & 0xF ) *10 + ( ( u8 ) ( *pData >> 24 ) & 0xF );
- phy_ChangePGDataFromExactToRelativeValue( pData, 0, 3, BaseValue );
-
-
- break;
- case 0xC28:
- case 0xE28:
- case 0xC30:
- case 0xE30:
- case 0xC38:
- case 0xE38:
-
-
-
-
-
-
- BaseValue = ( ( u8 ) ( *pData >> 28 ) & 0xF ) *10 + ( ( u8 ) ( *pData >> 24 ) & 0xF );
- phy_ChangePGDataFromExactToRelativeValue( pData, 0, 3, BaseValue );
- phy_ChangePGDataFromExactToRelativeValue(
- &( pHalData->TxPwrByRateOffset[pHalData->TxPwrByRateBand][rf_path][rate_section - 1] ),
- 0, 3, BaseValue);
-
-
-
-
- break;
- case 0xC44:
- case 0xE44:
-
-
-
-
-
-
-
-
- BaseValue = ( ( u8 ) ( pHalData->TxPwrByRateOffset[pHalData->TxPwrByRateBand][rf_path][rate_section - 1] >> 28 ) & 0xF ) * 10 +
- ( ( u8 ) ( pHalData->TxPwrByRateOffset[pHalData->TxPwrByRateBand][rf_path][rate_section - 1] >> 24 ) & 0xF );
- phy_ChangePGDataFromExactToRelativeValue( pData, 0, 1, BaseValue );
- phy_ChangePGDataFromExactToRelativeValue(
- &( pHalData->TxPwrByRateOffset[pHalData->TxPwrByRateBand][rf_path][rate_section - 1] ),
- 0, 3, BaseValue);
- phy_ChangePGDataFromExactToRelativeValue(
- &( pHalData->TxPwrByRateOffset[pHalData->TxPwrByRateBand][rf_path][rate_section - 2] ),
- 0, 3, BaseValue);
-
-
-
-
-
-
- break;
-
- case 0xC4C:
- case 0xE4C:
-
-
-
-
-
-
-
- BaseValue = ( ( u8 ) ( *pData >> 12 ) & 0xF ) *10 + ( ( u8 ) ( *pData >> 8 ) & 0xF );
- phy_ChangePGDataFromExactToRelativeValue( pData, 0, 3, BaseValue );
- phy_ChangePGDataFromExactToRelativeValue(
- &( pHalData->TxPwrByRateOffset[pHalData->TxPwrByRateBand][rf_path][rate_section - 1] ),
- 0, 3, BaseValue);
- phy_ChangePGDataFromExactToRelativeValue(
- &( pHalData->TxPwrByRateOffset[pHalData->TxPwrByRateBand][rf_path][rate_section - 2] ),
- 2, 3, BaseValue);
-
-
-
-
-
-
- break;
- }
- }
- VOID
- phy_PreprocessPGDataFromExactToRelativeValue(
- IN PADAPTER Adapter,
- IN u4Byte RegAddr,
- IN u4Byte BitMask,
- IN pu4Byte pData
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u1Byte BaseValue = 0;
-
- if ( RegAddr == rTxAGC_A_Rate54_24 )
- {
-
-
-
-
-
- BaseValue = ( ( u8 ) ( *pData >> 28 ) & 0xF ) *10 + ( ( u8 ) ( *pData >> 24 ) & 0xF );
-
- phy_ChangePGDataFromExactToRelativeValue( pData, 0, 3, BaseValue );
- phy_ChangePGDataFromExactToRelativeValue(
- &( pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][0] ),
- 0, 3, BaseValue);
-
-
-
-
- }
-
- if ( RegAddr == rTxAGC_A_CCK1_Mcs32 )
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][6] = *pData;
-
-
- }
-
- if ( RegAddr == rTxAGC_B_CCK11_A_CCK2_11 && BitMask == 0xffffff00 )
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][7] = *pData;
-
-
- }
- if ( RegAddr == rTxAGC_A_Mcs07_Mcs04 )
- {
-
-
-
-
-
- BaseValue = ( ( u8 ) ( *pData >> 28 ) & 0xF ) *10 + ( ( u8 ) ( *pData >> 24 ) & 0xF );
-
- phy_ChangePGDataFromExactToRelativeValue( pData, 0, 3, BaseValue );
- phy_ChangePGDataFromExactToRelativeValue(
- &( pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][2] ),
- 0, 3, BaseValue);
-
-
-
-
- }
-
- if ( RegAddr == rTxAGC_A_Mcs11_Mcs08 )
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][4] = *pData;
-
-
- }
-
- if ( RegAddr == rTxAGC_A_Mcs15_Mcs12 )
- {
-
-
-
-
-
- BaseValue = ( ( u8 ) ( *pData >> 28 ) & 0xF ) *10 + ( ( u8 ) ( *pData >> 24 ) & 0xF );
-
- phy_ChangePGDataFromExactToRelativeValue( pData, 0, 3, BaseValue );
- phy_ChangePGDataFromExactToRelativeValue(
- &( pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][4] ),
- 0, 3, BaseValue);
-
-
-
-
- }
- if ( RegAddr == rTxAGC_B_Rate54_24 )
- {
-
-
-
-
-
- BaseValue = ( ( u8 ) ( *pData >> 28 ) & 0xF ) *10 + ( ( u8 ) ( *pData >> 24 ) & 0xF );
-
- phy_ChangePGDataFromExactToRelativeValue( pData, 0, 3, BaseValue );
- phy_ChangePGDataFromExactToRelativeValue(
- &( pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][8] ),
- 0, 3, BaseValue);
-
-
-
-
-
- }
-
- if ( RegAddr == rTxAGC_B_CCK1_55_Mcs32 )
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][14] = *pData;
-
-
- }
-
- if ( RegAddr == rTxAGC_B_CCK11_A_CCK2_11 && BitMask == 0x000000ff )
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][15] = *pData;
-
-
- }
- if ( RegAddr == rTxAGC_B_Mcs07_Mcs04 )
- {
-
-
-
-
-
- BaseValue = ( ( u8 ) ( *pData >> 28 ) & 0xF ) *10 + ( ( u8 ) ( *pData >> 24 ) & 0xF );
-
- phy_ChangePGDataFromExactToRelativeValue( pData, 0, 3, BaseValue );
- phy_ChangePGDataFromExactToRelativeValue(
- &( pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][10] ),
- 0, 3, BaseValue);
-
-
-
-
- }
- if ( RegAddr == rTxAGC_B_Mcs15_Mcs12 )
- {
-
-
-
-
-
- BaseValue = ( ( u8 ) ( *pData >> 28 ) & 0xF ) *10 + ( ( u8 ) ( *pData >> 24 ) & 0xF );
-
- phy_ChangePGDataFromExactToRelativeValue( pData, 0, 3, BaseValue );
- phy_ChangePGDataFromExactToRelativeValue(
- &( pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][12] ),
- 0, 3, BaseValue);
-
-
-
-
- }
-
-
-
-
-
-
-
- if ( IS_HARDWARE_TYPE_8812( Adapter ) ||
- IS_HARDWARE_TYPE_8821( Adapter ) )
- {
- phy_PreprocessVHTPGDataFromExactToRelativeValue( Adapter, RegAddr,
- BitMask, pData );
- }
-
- }
- VOID
- phy_StorePwrByRateIndexBase(
- IN PADAPTER Adapter,
- IN u32 RegAddr,
- IN u32 Data
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 Base = 0;
-
- if( pHalData->TxPwrByRateTable == 1 && pHalData->TxPwrByRateBand == 0 )
- {
- if ( pHalData->odmpriv.PhyRegPgValueType == PHY_REG_PG_EXACT_VALUE )
- {
- Base = ( ( ( u8 ) ( Data >> 28 ) & 0xF ) * 10 +
- ( ( u8 ) ( Data >> 24 ) & 0xF ) );
-
- switch( RegAddr ) {
- case 0xC20:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_A][0] = Base;
-
-
- break;
- case 0xC28:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_A][1] = Base;
-
-
- break;
- case 0xC30:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_A][2] = Base;
-
-
- break;
- case 0xC38:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_A][3] = Base;
-
-
- break;
- default:
- break;
- };
- }
- else
- {
- Base = ( u8 ) ( Data >> 24 );
- switch( RegAddr ) {
- case 0xC20:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_A][0] = Base;
-
-
- break;
- case 0xC28:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_A][1] = Base;
-
-
- break;
- case 0xC30:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_A][2] = Base;
-
-
- break;
- case 0xC38:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_A][3] = Base;
-
-
- break;
- default:
- break;
- };
- }
- }
- else if ( pHalData->TxPwrByRateTable == 3 && pHalData->TxPwrByRateBand == 1 )
- {
- if ( pHalData->odmpriv.PhyRegPgValueType == PHY_REG_PG_EXACT_VALUE )
- {
- Base = ( ( ( u8 ) ( Data >> 28 ) & 0xF ) * 10 +
- ( ( u8 ) ( Data >> 24 ) & 0xF ) );
-
- switch( RegAddr )
- {
- case 0xC28:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_A][0] = Base;
-
-
- break;
- case 0xC30:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_A][1] = Base;
-
-
- break;
- case 0xC38:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_A][2] = Base;
-
-
- break;
- case 0xC40:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_A][3] = Base;
-
-
- break;
- case 0xC4C:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_A][4] =
- ( u8 ) ( ( Data >> 12 ) & 0xF ) * 10 +
- ( u8 ) ( ( Data >> 8 ) & 0xF );
-
-
- break;
- case 0xE28:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_B][0] = Base;
-
-
- break;
- case 0xE30:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_B][1] = Base;
-
-
- break;
- case 0xE38:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_B][2] = Base;
-
-
- break;
- case 0xE40:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_B][3] = Base;
-
-
- break;
- case 0xE4C:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_B][4] =
- ( u8 ) ( ( Data >> 12 ) & 0xF ) * 10 +
- ( u8 ) ( ( Data >> 8 ) & 0xF );
-
-
- break;
- default:
- break;
- };
- }
- else
- {
- Base = ( u8 ) ( Data >> 24 );
- switch( RegAddr ) {
- case 0xC28:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_A][0] = Base;
-
-
- break;
- case 0xC30:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_A][1] = Base;
-
-
- break;
- case 0xC38:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_A][2] = Base;
-
-
- break;
- case 0xC40:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_A][3] = Base;
-
-
- break;
- case 0xC4C:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_A][4] = ( u8 ) ( ( Data >> 8 ) & 0xFF );
-
-
- break;
- case 0xE28:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_B][0] = Base;
-
-
- break;
- case 0xE30:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_B][1] = Base;
-
-
- break;
- case 0xE38:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_B][2] = Base;
-
-
- break;
- case 0xE40:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_B][3] = Base;
-
-
- break;
- case 0xE4C:
- pHalData->TxPwrByRateBase5G[ODM_RF_PATH_B][4] = ( u8 ) ( ( Data >> 8 ) & 0xFF );
-
-
- break;
- default:
- break;
- };
- }
- }
- else if( pHalData->TxPwrByRateTable == 2 && pHalData->TxPwrByRateBand == 0 )
- {
- if ( pHalData->odmpriv.PhyRegPgValueType == PHY_REG_PG_EXACT_VALUE )
- {
- Base = ( ( ( u8 ) ( Data >> 28 ) & 0xF ) * 10 +
- ( ( u8 ) ( Data >> 24 ) & 0xF ) );
-
- switch( RegAddr ) {
- case 0xE20:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_B][0] = Base;
-
-
- break;
- case 0xE28:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_B][1] = Base;
-
-
- break;
- case 0xE30:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_B][2] = Base;
-
-
- break;
- case 0xE38:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_B][3] = Base;
-
-
- break;
- default:
- break;
- };
-
- }
- else
- {
- Base = ( u8 ) ( Data >> 24 );
- switch( RegAddr ) {
- case 0xC20:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_B][0] = Base;
-
-
- break;
- case 0xC28:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_B][1] = Base;
-
-
- break;
- case 0xC30:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_B][2] = Base;
-
-
- break;
- case 0xC38:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_B][3] = Base;
-
-
- break;
- default:
- break;
- };
- }
- }
-
- if ( pHalData->odmpriv.PhyRegPgValueType == PHY_REG_PG_EXACT_VALUE )
- {
- Base = ( u8 ) ( ( Data >> 28 ) & 0xF ) * 10 +
- ( u8 ) ( ( Data >> 24 ) & 0xF );
- }
- else
- {
- Base = ( u8 ) ( ( Data >> 24 ) & 0xFF );
- }
-
- switch ( RegAddr )
- {
-
- case rTxAGC_A_Rate54_24:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_A][1] = Base;
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_B][1] = Base;
-
- break;
- case rTxAGC_A_Mcs07_Mcs04:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_A][2] = Base;
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_B][2] = Base;
-
- break;
- case rTxAGC_A_Mcs15_Mcs12:
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_A][3] = Base;
- pHalData->TxPwrByRateBase2_4G[ODM_RF_PATH_B][3] = Base;
-
- break;
- default:
- break;
-
- };
- }
- VOID
- storePwrIndexDiffRateOffset(
- IN PADAPTER Adapter,
- IN u32 RegAddr,
- IN u32 BitMask,
- IN u32 Data
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u32 tmpData = Data;
-
-
- if ( pHalData->odmpriv.PhyRegPgValueType == PHY_REG_PG_EXACT_VALUE )
- {
-
- phy_PreprocessPGDataFromExactToRelativeValue( Adapter, RegAddr, BitMask, &Data );
-
- }
-
-
-
-
-
-
- if (IS_HARDWARE_TYPE_8812(Adapter) ||
- IS_HARDWARE_TYPE_8821(Adapter))
- {
- PHY_StorePwrByRateIndexVhtSeries(Adapter, RegAddr, BitMask, Data);
- }
-
- phy_StorePwrByRateIndexBase(Adapter, RegAddr, tmpData );
- if(RegAddr == rTxAGC_A_Rate18_06)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][0] = Data;
-
-
- }
- if(RegAddr == rTxAGC_A_Rate54_24)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][1] = Data;
-
-
- }
- if(RegAddr == rTxAGC_A_CCK1_Mcs32)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][6] = Data;
-
-
- }
- if(RegAddr == rTxAGC_B_CCK11_A_CCK2_11 && BitMask == 0xffffff00)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][7] = Data;
-
-
- }
- if(RegAddr == rTxAGC_A_Mcs03_Mcs00)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][2] = Data;
-
-
- }
- if(RegAddr == rTxAGC_A_Mcs07_Mcs04)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][3] = Data;
-
-
- }
- if(RegAddr == rTxAGC_A_Mcs11_Mcs08)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][4] = Data;
-
-
- }
- if(RegAddr == rTxAGC_A_Mcs15_Mcs12)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][5] = Data;
-
-
- if(pHalData->rf_type== RF_1T1R)
- {
- pHalData->pwrGroupCnt++;
-
- }
- }
- if(RegAddr == rTxAGC_B_Rate18_06)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][8] = Data;
-
-
- }
- if(RegAddr == rTxAGC_B_Rate54_24)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][9] = Data;
-
-
- }
- if(RegAddr == rTxAGC_B_CCK1_55_Mcs32)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][14] = Data;
-
-
- }
- if(RegAddr == rTxAGC_B_CCK11_A_CCK2_11 && BitMask == 0x000000ff)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][15] = Data;
-
-
- }
- if(RegAddr == rTxAGC_B_Mcs03_Mcs00)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][10] = Data;
-
-
- }
- if(RegAddr == rTxAGC_B_Mcs07_Mcs04)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][11] = Data;
-
-
- }
- if(RegAddr == rTxAGC_B_Mcs11_Mcs08)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][12] = Data;
-
-
- }
- if(RegAddr == rTxAGC_B_Mcs15_Mcs12)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][13] = Data;
-
-
- if(pHalData->rf_type != RF_1T1R)
- pHalData->pwrGroupCnt++;
- }
- }
- static u8
- phy_DbmToTxPwrIdx(
- IN PADAPTER Adapter,
- IN WIRELESS_MODE WirelessMode,
- IN int PowerInDbm
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 TxPwrIdx = 0;
- s32 Offset = 0;
- #if 0
-
-
-
-
-
-
-
- switch(WirelessMode)
- {
- case WIRELESS_MODE_B:
-
- Offset = -6;
- TxPwrIdx = (u8)((pHalData->OriginalCckTxPwrIdx*( PowerInDbm-pHalData->MinCCKDbm))/(pHalData->MaxCCKDbm-pHalData->MinCCKDbm));
- break;
- case WIRELESS_MODE_G:
- case WIRELESS_MODE_N_24G:
- Offset = -8;
- TxPwrIdx = (u8)((pHalData->OriginalOfdm24GTxPwrIdx* (PowerInDbm-pHalData->MinHOFDMDbm))/(pHalData->MaxHOFDMDbm-pHalData->MinHOFDMDbm));
- break;
-
- default:
- break;
- }
- if (PowerInDbm <= pHalData->MinCCKDbm ||
- PowerInDbm <= pHalData->MinLOFDMDbm ||
- PowerInDbm <= pHalData->MinHOFDMDbm)
- {
- TxPwrIdx = 0;
- }
-
- if (PowerInDbm >= pHalData->MaxCCKDbm ||
- PowerInDbm >= pHalData->MaxLOFDMDbm ||
- PowerInDbm >= pHalData->MaxHOFDMDbm)
- {
- if (WirelessMode == WIRELESS_MODE_B)
- TxPwrIdx = pHalData->OriginalCckTxPwrIdx;
- else
- TxPwrIdx = pHalData->OriginalOfdm24GTxPwrIdx;
- }
- #endif
- return TxPwrIdx;
- }
- static int
- phy_TxPwrIdxToDbm(
- IN PADAPTER Adapter,
- IN WIRELESS_MODE WirelessMode,
- IN u8 TxPwrIdx
- )
- {
- int Offset = 0;
- int PwrOutDbm = 0;
-
-
-
-
-
-
- switch(WirelessMode)
- {
- case WIRELESS_MODE_B:
- Offset = -7;
- break;
- case WIRELESS_MODE_G:
- case WIRELESS_MODE_N_24G:
- Offset = -8;
- break;
- default:
- break;
- }
- PwrOutDbm = TxPwrIdx / 2 + Offset;
- return PwrOutDbm;
- }
- VOID
- PHY_GetTxPowerLevel8812(
- IN PADAPTER Adapter,
- OUT u32* powerlevel
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 TxPwrLevel = 0;
- int TxPwrDbm;
- #if 0
-
-
-
-
-
- TxPwrLevel = pHalData->CurrentCckTxPwrIdx;
- TxPwrDbm = phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_B, TxPwrLevel);
- pHalData->MaxCCKDbm = TxPwrDbm;
-
- TxPwrLevel = pHalData->CurrentOfdm24GTxPwrIdx + pHalData->LegacyHTTxPowerDiff;
-
- pHalData->MaxLOFDMDbm = phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_G, TxPwrLevel);
- if(phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_G, TxPwrLevel) > TxPwrDbm)
- TxPwrDbm = phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_G, TxPwrLevel);
-
- TxPwrLevel = pHalData->CurrentOfdm24GTxPwrIdx;
-
- pHalData->MaxHOFDMDbm = phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_G, TxPwrLevel);
- if(phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_N_24G, TxPwrLevel) > TxPwrDbm)
- TxPwrDbm = phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_N_24G, TxPwrLevel);
- pHalData->MaxHOFDMDbm = TxPwrDbm;
- *powerlevel = TxPwrDbm;
- #endif
- }
- void phy_PowerIndexCheck8812(
- IN PADAPTER Adapter,
- IN u8 channel,
- IN OUT u8 * cckPowerLevel,
- IN OUT u8 * ofdmPowerLevel,
- IN OUT u8 * BW20PowerLevel,
- IN OUT u8 * BW40PowerLevel
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- #if 0
- PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo);
- PRT_CCX_INFO pCcxInfo = GET_CCX_INFO(pMgntInfo);
-
-
-
-
-
-
-
-
-
-
-
- if( pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE &&
- pMgntInfo->mAssoc &&
- pCcxInfo->bUpdateCcxPwr &&
- pCcxInfo->bWithCcxCellPwr &&
- channel == pMgntInfo->dot11CurrentChannelNumber)
- {
- u1Byte CckCellPwrIdx = phy_DbmToTxPwrIdx(Adapter, WIRELESS_MODE_B, pCcxInfo->CcxCellPwr);
- u1Byte LegacyOfdmCellPwrIdx = phy_DbmToTxPwrIdx(Adapter, WIRELESS_MODE_G, pCcxInfo->CcxCellPwr);
- u1Byte OfdmCellPwrIdx = phy_DbmToTxPwrIdx(Adapter, WIRELESS_MODE_N_24G, pCcxInfo->CcxCellPwr);
- RT_TRACE(COMP_TXAGC, DBG_LOUD,
- ("CCX Cell Limit: %d dbm => CCK Tx power index : %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n",
- pCcxInfo->CcxCellPwr, CckCellPwrIdx, LegacyOfdmCellPwrIdx, OfdmCellPwrIdx));
- RT_TRACE(COMP_TXAGC, DBG_LOUD,
- ("EEPROM channel(%d) => CCK Tx power index: %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n",
- channel, cckPowerLevel[0], ofdmPowerLevel[0] + pHalData->LegacyHTTxPowerDiff, ofdmPowerLevel[0]));
-
- if(cckPowerLevel[0] > CckCellPwrIdx)
- cckPowerLevel[0] = CckCellPwrIdx;
-
- if(ofdmPowerLevel[0] + pHalData->LegacyHTTxPowerDiff > LegacyOfdmCellPwrIdx)
- {
- if((OfdmCellPwrIdx - pHalData->LegacyHTTxPowerDiff) > 0)
- {
- ofdmPowerLevel[0] = OfdmCellPwrIdx - pHalData->LegacyHTTxPowerDiff;
- }
- else
- {
- ofdmPowerLevel[0] = 0;
- }
- }
- RT_TRACE(COMP_TXAGC, DBG_LOUD,
- ("Altered CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n",
- cckPowerLevel[0], ofdmPowerLevel[0] + pHalData->LegacyHTTxPowerDiff, ofdmPowerLevel[0]));
- }
- #else
-
- #endif
- pHalData->CurrentCckTxPwrIdx = cckPowerLevel[0];
- pHalData->CurrentOfdm24GTxPwrIdx = ofdmPowerLevel[0];
- pHalData->CurrentBW2024GTxPwrIdx = BW20PowerLevel[0];
- pHalData->CurrentBW4024GTxPwrIdx = BW40PowerLevel[0];
-
-
-
- }
- BOOLEAN
- phy_GetChnlIndex8812A(
- IN u8 Channel,
- OUT u8* ChannelIdx
- )
- {
- u8 channel5G[CHANNEL_MAX_NUMBER_5G] =
- {36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,100,102,104,106,108,110,112,
- 114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,149,151,
- 153,155,157,159,161,163,165,167,168,169,171,173,175,177};
- u8 i = 0;
- BOOLEAN bIn24G=_TRUE;
- if(Channel <= 14)
- {
- bIn24G=_TRUE;
- *ChannelIdx = Channel -1;
- }
- else
- {
- bIn24G = _FALSE;
- for (i = 0; i < sizeof(channel5G)/sizeof(u8); ++i)
- {
- if ( channel5G[i] == Channel) {
- *ChannelIdx = i;
- return bIn24G;
- }
- }
- }
- return bIn24G;
-
- }
- u32
- phy_GetTxPwrByRateOffset_8812(
- IN PADAPTER pAdapter,
- IN u8 Band,
- IN u8 Rf_Path,
- IN u8 Rate_Section
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
- u8 shift = 0, original_rate = Rate_Section;
- u32 tx_pwr_diff = 0;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- switch (Rate_Section)
- {
- case MGN_1M:
- case MGN_2M:
- case MGN_5_5M:
- case MGN_11M:
- Rate_Section =0;
- break;
- case MGN_6M:
- case MGN_9M:
- case MGN_12M:
- case MGN_18M:
- Rate_Section =1;
- break;
- case MGN_24M:
- case MGN_36M:
- case MGN_48M:
- case MGN_54M:
- Rate_Section =2;
- break;
-
- case MGN_MCS0:
- case MGN_MCS1:
- case MGN_MCS2:
- case MGN_MCS3:
- Rate_Section =3;
- break;
- case MGN_MCS4:
- case MGN_MCS5:
- case MGN_MCS6:
- case MGN_MCS7:
- Rate_Section =4;
- break;
- case MGN_MCS8:
- case MGN_MCS9:
- case MGN_MCS10:
- case MGN_MCS11:
- Rate_Section =5;
- break;
- case MGN_MCS12:
- case MGN_MCS13:
- case MGN_MCS14:
- case MGN_MCS15:
- Rate_Section =6;
- break;
-
- case MGN_VHT1SS_MCS0:
- case MGN_VHT1SS_MCS1:
- case MGN_VHT1SS_MCS2:
- case MGN_VHT1SS_MCS3:
- Rate_Section =7;
- break;
- case MGN_VHT1SS_MCS4:
- case MGN_VHT1SS_MCS5:
- case MGN_VHT1SS_MCS6:
- case MGN_VHT1SS_MCS7:
- Rate_Section =8;
- break;
- case MGN_VHT1SS_MCS8:
- case MGN_VHT1SS_MCS9:
- case MGN_VHT2SS_MCS0:
- case MGN_VHT2SS_MCS1:
- Rate_Section =9;
- break;
- case MGN_VHT2SS_MCS2:
- case MGN_VHT2SS_MCS3:
- case MGN_VHT2SS_MCS4:
- case MGN_VHT2SS_MCS5:
- Rate_Section =10;
- break;
- case MGN_VHT2SS_MCS6:
- case MGN_VHT2SS_MCS7:
- case MGN_VHT2SS_MCS8:
- case MGN_VHT2SS_MCS9:
- Rate_Section =11;
- break;
-
- default:
- DBG_871X("Rate_Section is Illegal\n");
- break;
- }
-
- switch (original_rate)
- {
- case MGN_1M: shift = 0; break;
- case MGN_2M: shift = 8; break;
- case MGN_5_5M: shift = 16; break;
- case MGN_11M: shift = 24; break;
- case MGN_6M: shift = 0; break;
- case MGN_9M: shift = 8; break;
- case MGN_12M: shift = 16; break;
- case MGN_18M: shift = 24; break;
-
- case MGN_24M: shift = 0; break;
- case MGN_36M: shift = 8; break;
- case MGN_48M: shift = 16; break;
- case MGN_54M: shift = 24; break;
-
- case MGN_MCS0: shift = 0; break;
- case MGN_MCS1: shift = 8; break;
- case MGN_MCS2: shift = 16; break;
- case MGN_MCS3: shift = 24; break;
-
- case MGN_MCS4: shift = 0; break;
- case MGN_MCS5: shift = 8; break;
- case MGN_MCS6: shift = 16; break;
- case MGN_MCS7: shift = 24; break;
-
- case MGN_MCS8: shift = 0; break;
- case MGN_MCS9: shift = 8; break;
- case MGN_MCS10: shift = 16; break;
- case MGN_MCS11: shift = 24; break;
-
- case MGN_MCS12: shift = 0; break;
- case MGN_MCS13: shift = 8; break;
- case MGN_MCS14: shift = 16; break;
- case MGN_MCS15: shift = 24; break;
-
- case MGN_VHT1SS_MCS0: shift = 0; break;
- case MGN_VHT1SS_MCS1: shift = 8; break;
- case MGN_VHT1SS_MCS2: shift = 16; break;
- case MGN_VHT1SS_MCS3: shift = 24; break;
-
- case MGN_VHT1SS_MCS4: shift = 0; break;
- case MGN_VHT1SS_MCS5: shift = 8; break;
- case MGN_VHT1SS_MCS6: shift = 16; break;
- case MGN_VHT1SS_MCS7: shift = 24; break;
-
- case MGN_VHT1SS_MCS8: shift = 0; break;
- case MGN_VHT1SS_MCS9: shift = 8; break;
- case MGN_VHT2SS_MCS0: shift = 16; break;
- case MGN_VHT2SS_MCS1: shift = 24; break;
-
- case MGN_VHT2SS_MCS2: shift = 0; break;
- case MGN_VHT2SS_MCS3: shift = 8; break;
- case MGN_VHT2SS_MCS4: shift = 16; break;
- case MGN_VHT2SS_MCS5: shift = 24; break;
-
- case MGN_VHT2SS_MCS6: shift = 0; break;
- case MGN_VHT2SS_MCS7: shift = 8; break;
- case MGN_VHT2SS_MCS8: shift = 16; break;
- case MGN_VHT2SS_MCS9: shift = 24; break;
-
- default:
- DBG_871X("Rate_Section is Illegal\n");
- break;
- }
-
- if ( Band == BAND_ON_2_4G && ( Rate_Section >= 7 && Rate_Section <= 11 ) )
- Band = BAND_ON_5G;
- tx_pwr_diff = (pHalData->TxPwrByRateOffset[Band][Rf_Path][Rate_Section] >> shift) & 0xff;
-
-
- return tx_pwr_diff;
- }
- VOID
- phy_TxPwrAdjInPercentage(
- IN PADAPTER Adapter,
- OUT u8* pTxPwrIdx)
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 TxPwrInPercentage = 0;
-
- TxPwrInPercentage = pHalData->TxPwrInPercentage;
-
- if(*pTxPwrIdx > RF6052_MAX_TX_PWR)
- *pTxPwrIdx = RF6052_MAX_TX_PWR;
-
-
-
-
-
-
- if(TxPwrInPercentage & TX_PWR_PERCENTAGE_0)
- {
- *pTxPwrIdx -=18;
- }
- else if(TxPwrInPercentage & TX_PWR_PERCENTAGE_1)
- {
- *pTxPwrIdx -=12;
- }
- else if(TxPwrInPercentage & TX_PWR_PERCENTAGE_2)
- {
- *pTxPwrIdx -=6;
- }
- if(*pTxPwrIdx > RF6052_MAX_TX_PWR)
- *pTxPwrIdx = RF6052_MAX_TX_PWR;
- }
- u32
- PHY_GetTxPowerIndex_8812A(
- IN PADAPTER pAdapter,
- IN u8 RFPath,
- IN u8 Rate,
- IN CHANNEL_WIDTH BandWidth,
- IN u8 Channel
- )
- {
- PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter);
- PDM_ODM_T pDM_Odm = &pHalData->odmpriv;
- u8 i = 0;
- struct registry_priv *pregistrypriv = &pAdapter->registrypriv;
- u32 powerDiffByRate = 0;
- u32 txPower = 0;
- u8 chnlIdx = (Channel-1);
- BOOLEAN bIn24G = _FALSE;
-
-
- if (HAL_IsLegalChannel(pAdapter, Channel) == _FALSE)
- {
- chnlIdx = 0;
- DBG_871X("Illegal channel!!\n");
- }
- bIn24G = phy_GetChnlIndex8812A(Channel, &chnlIdx);
-
- if (bIn24G)
- {
- if ( IS_CCK_RATE(Rate) )
- {
- txPower = pHalData->Index24G_CCK_Base[RFPath][chnlIdx];
- }
- else if ( MGN_6M <= Rate )
- {
- txPower = pHalData->Index24G_BW40_Base[RFPath][chnlIdx];
- }
- else
- {
- DBG_871X("===> mpt_ProQueryCaltxPower_Jaguar: INVALID Rate.\n");
- }
-
-
-
- if ( MGN_6M <= Rate && Rate <= MGN_54M && ! IS_CCK_RATE(Rate) )
- {
- txPower += pHalData->OFDM_24G_Diff[RFPath][TX_1S];
-
- }
-
- if (BandWidth == CHANNEL_WIDTH_20)
- {
- if ( (MGN_MCS0 <= Rate && Rate <= MGN_MCS15) || (MGN_VHT2SS_MCS0 <= Rate && Rate <= MGN_VHT2SS_MCS9))
- txPower += pHalData->BW20_24G_Diff[RFPath][TX_1S];
- if ( (MGN_MCS8 <= Rate && Rate <= MGN_MCS15) || (MGN_VHT2SS_MCS0 <= Rate && Rate <= MGN_VHT2SS_MCS9))
- txPower += pHalData->BW20_24G_Diff[RFPath][TX_2S];
-
-
- }
-
- else if (BandWidth == CHANNEL_WIDTH_40)
- {
- if ( (MGN_MCS0 <= Rate && Rate <= MGN_MCS15) || (MGN_VHT1SS_MCS0 <= Rate && Rate <= MGN_VHT2SS_MCS9))
- txPower += pHalData->BW40_24G_Diff[RFPath][TX_1S];
- if ( (MGN_MCS8 <= Rate && Rate <= MGN_MCS15) || (MGN_VHT2SS_MCS0 <= Rate && Rate <= MGN_VHT2SS_MCS9))
- txPower += pHalData->BW40_24G_Diff[RFPath][TX_2S];
-
-
- }
-
- else if ( BandWidth == CHANNEL_WIDTH_80 )
- {
- if ( (MGN_MCS0 <= Rate && Rate <= MGN_MCS15) || (MGN_VHT1SS_MCS0 <= Rate && Rate <= MGN_VHT2SS_MCS9))
- txPower += pHalData->BW40_24G_Diff[RFPath][TX_1S];
- if ( (MGN_MCS8 <= Rate && Rate <= MGN_MCS15) || (MGN_VHT2SS_MCS0 <= Rate && Rate <= MGN_VHT2SS_MCS9))
- txPower += pHalData->BW40_24G_Diff[RFPath][TX_2S];
-
-
- }
-
-
-
-
- }
- else
- {
- if ( MGN_6M <= Rate )
- {
- txPower = pHalData->Index5G_BW40_Base[RFPath][chnlIdx];
- }
- else
- {
- DBG_871X("===> mpt_ProQueryCalTxPower_Jaguar: INVALID Rate.\n");
- }
-
-
- if ( MGN_6M <= Rate && Rate <= MGN_54M && ! IS_CCK_RATE(Rate))
- {
- txPower += pHalData->OFDM_5G_Diff[RFPath][TX_1S];
-
- }
-
-
- if (BandWidth == CHANNEL_WIDTH_20)
- {
- if ( (MGN_MCS0 <= Rate && Rate <= MGN_MCS15) || (MGN_VHT1SS_MCS0 <= Rate && Rate <= MGN_VHT2SS_MCS9))
- txPower += pHalData->BW20_5G_Diff[RFPath][TX_1S];
- if ( (MGN_MCS8 <= Rate && Rate <= MGN_MCS15) || (MGN_VHT2SS_MCS0 <= Rate && Rate <= MGN_VHT2SS_MCS9))
- txPower += pHalData->BW20_5G_Diff[RFPath][TX_2S];
-
-
- }
-
- else if (BandWidth == CHANNEL_WIDTH_40)
- {
- if ( (MGN_MCS0 <= Rate && Rate <= MGN_MCS15) || (MGN_VHT1SS_MCS0 <= Rate && Rate <= MGN_VHT2SS_MCS9))
- txPower += pHalData->BW40_5G_Diff[RFPath][TX_1S];
- if ( (MGN_MCS8 <= Rate && Rate <= MGN_MCS15) || (MGN_VHT2SS_MCS0 <= Rate && Rate <= MGN_VHT2SS_MCS9))
- txPower += pHalData->BW40_5G_Diff[RFPath][TX_2S];
-
-
- }
-
- else if (BandWidth== CHANNEL_WIDTH_80)
- {
-
- u8 channel5G_80M[CHANNEL_MAX_NUMBER_5G_80M] = {42, 58, 106, 122, 138, 155, 171};
- for (i = 0; i < sizeof(channel5G_80M)/sizeof(u8); ++i)
- if ( channel5G_80M[i] == Channel)
- chnlIdx = i;
-
- if ( (MGN_MCS0 <= Rate && Rate <= MGN_MCS15) || (MGN_VHT1SS_MCS0 <= Rate && Rate <= MGN_VHT2SS_MCS9))
- txPower = pHalData->Index5G_BW80_Base[RFPath][chnlIdx] + pHalData->BW80_5G_Diff[RFPath][TX_1S];
- if ( (MGN_MCS8 <= Rate && Rate <= MGN_MCS15) || (MGN_VHT2SS_MCS0 <= Rate && Rate <= MGN_VHT2SS_MCS9))
- txPower = pHalData->Index5G_BW80_Base[RFPath][chnlIdx] + pHalData->BW80_5G_Diff[RFPath][TX_1S] + pHalData->BW80_5G_Diff[RFPath][TX_2S];
-
-
- }
- }
-
-
-
-
-
-
-
-
- if (pregistrypriv->RegPwrByRate == _FALSE && pHalData->EEPROMRegulatory != 2)
- {
- powerDiffByRate = phy_GetTxPwrByRateOffset_8812(pAdapter, (u8)(!bIn24G), RFPath, Rate);
- if ( ( pregistrypriv->RegEnableTxPowerLimit == 1 && pHalData->EEPROMRegulatory != 2 ) ||
- pHalData->EEPROMRegulatory == 1 )
- {
- u8 limit = 0;
- limit = PHY_GetPowerLimitValue(pAdapter, pregistrypriv->RegPwrTblSel, (u8)(!bIn24G) ? BAND_ON_5G : BAND_ON_2_4G, BandWidth, (ODM_RF_RADIO_PATH_E)RFPath, Rate, Channel);
- if ( Rate == MGN_VHT1SS_MCS8 || Rate == MGN_VHT1SS_MCS9 ||
- Rate == MGN_VHT2SS_MCS8 || Rate == MGN_VHT2SS_MCS9 )
- {
- if ( limit < 0 )
- {
- if ( powerDiffByRate < -limit )
- powerDiffByRate = -limit;
- }
- }
- else
- {
- if ( limit < 0 )
- powerDiffByRate = limit;
- else
- powerDiffByRate = powerDiffByRate > limit ? limit : powerDiffByRate;
- }
-
- }
- }
-
-
- if (Rate == MGN_VHT1SS_MCS8 || Rate == MGN_VHT1SS_MCS9 ||
- Rate == MGN_VHT2SS_MCS8 || Rate == MGN_VHT2SS_MCS9)
- {
- txPower -= powerDiffByRate;
- }
- else
- {
- #ifdef CONFIG_USB_HCI
-
-
-
-
-
-
-
- if (adapter_to_dvobj(pAdapter)->usb_speed <= RTW_USB_SPEED_2 && IS_HARDWARE_TYPE_8812AU(pAdapter))
- {
- powerDiffByRate = 0;
- }
- #endif
- txPower += powerDiffByRate;
- }
-
-
- if(pDM_Odm->Modify_TxAGC_Flag_PathA || pDM_Odm->Modify_TxAGC_Flag_PathB)
- {
-
- txPower += pDM_Odm->Remnant_OFDMSwingIdx[RFPath];
-
- }
- if(txPower > MAX_POWER_INDEX)
- txPower = MAX_POWER_INDEX;
-
-
-
- phy_TxPwrAdjInPercentage(pAdapter, (u8 *)&txPower);
-
- return txPower;
- }
- VOID
- PHY_SetTxPowerIndex_8812A(
- IN PADAPTER Adapter,
- IN u4Byte PowerIndex,
- IN u1Byte RFPath,
- IN u1Byte Rate
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- BOOLEAN Direction = FALSE;
- u4Byte TxagcOffset = 0;
-
- if ( (PowerIndex % 2 == 1) && IS_HARDWARE_TYPE_JAGUAR(Adapter) && IS_TEST_CHIP(pHalData->VersionID) )
- PowerIndex -= 1;
-
- if(RFPath == RF_PATH_A)
- {
- Direction = pHalData->odmpriv.IsTxagcOffsetPositiveA;
- TxagcOffset = pHalData->odmpriv.TxagcOffsetValueA;
- }
- else if(RFPath == RF_PATH_B)
- {
- Direction = pHalData->odmpriv.IsTxagcOffsetPositiveB;
- TxagcOffset = pHalData->odmpriv.TxagcOffsetValueB;
- }
- if(Direction == FALSE)
- {
- if(PowerIndex > TxagcOffset)
- PowerIndex -= TxagcOffset;
- else
- PowerIndex = 0;
- }
- else
- {
- PowerIndex += TxagcOffset;
- if(PowerIndex > 0x3F)
- PowerIndex = 0x3F;
- }
- if (RFPath == RF_PATH_A)
- {
- switch (Rate)
- {
- case MGN_1M: PHY_SetBBReg(Adapter, rTxAGC_A_CCK11_CCK1_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_2M: PHY_SetBBReg(Adapter, rTxAGC_A_CCK11_CCK1_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_5_5M: PHY_SetBBReg(Adapter, rTxAGC_A_CCK11_CCK1_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_11M: PHY_SetBBReg(Adapter, rTxAGC_A_CCK11_CCK1_JAguar, bMaskByte3, PowerIndex); break;
- case MGN_6M: PHY_SetBBReg(Adapter, rTxAGC_A_Ofdm18_Ofdm6_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_9M: PHY_SetBBReg(Adapter, rTxAGC_A_Ofdm18_Ofdm6_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_12M: PHY_SetBBReg(Adapter, rTxAGC_A_Ofdm18_Ofdm6_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_18M: PHY_SetBBReg(Adapter, rTxAGC_A_Ofdm18_Ofdm6_JAguar, bMaskByte3, PowerIndex); break;
- case MGN_24M: PHY_SetBBReg(Adapter, rTxAGC_A_Ofdm54_Ofdm24_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_36M: PHY_SetBBReg(Adapter, rTxAGC_A_Ofdm54_Ofdm24_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_48M: PHY_SetBBReg(Adapter, rTxAGC_A_Ofdm54_Ofdm24_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_54M: PHY_SetBBReg(Adapter, rTxAGC_A_Ofdm54_Ofdm24_JAguar, bMaskByte3, PowerIndex); break;
- case MGN_MCS0: PHY_SetBBReg(Adapter, rTxAGC_A_MCS3_MCS0_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_MCS1: PHY_SetBBReg(Adapter, rTxAGC_A_MCS3_MCS0_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_MCS2: PHY_SetBBReg(Adapter, rTxAGC_A_MCS3_MCS0_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_MCS3: PHY_SetBBReg(Adapter, rTxAGC_A_MCS3_MCS0_JAguar, bMaskByte3, PowerIndex); break;
- case MGN_MCS4: PHY_SetBBReg(Adapter, rTxAGC_A_MCS7_MCS4_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_MCS5: PHY_SetBBReg(Adapter, rTxAGC_A_MCS7_MCS4_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_MCS6: PHY_SetBBReg(Adapter, rTxAGC_A_MCS7_MCS4_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_MCS7: PHY_SetBBReg(Adapter, rTxAGC_A_MCS7_MCS4_JAguar, bMaskByte3, PowerIndex); break;
- case MGN_MCS8: PHY_SetBBReg(Adapter, rTxAGC_A_MCS11_MCS8_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_MCS9: PHY_SetBBReg(Adapter, rTxAGC_A_MCS11_MCS8_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_MCS10: PHY_SetBBReg(Adapter, rTxAGC_A_MCS11_MCS8_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_MCS11: PHY_SetBBReg(Adapter, rTxAGC_A_MCS11_MCS8_JAguar, bMaskByte3, PowerIndex); break;
- case MGN_MCS12: PHY_SetBBReg(Adapter, rTxAGC_A_MCS15_MCS12_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_MCS13: PHY_SetBBReg(Adapter, rTxAGC_A_MCS15_MCS12_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_MCS14: PHY_SetBBReg(Adapter, rTxAGC_A_MCS15_MCS12_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_MCS15: PHY_SetBBReg(Adapter, rTxAGC_A_MCS15_MCS12_JAguar, bMaskByte3, PowerIndex); break;
- case MGN_VHT1SS_MCS0: PHY_SetBBReg(Adapter, rTxAGC_A_Nss1Index3_Nss1Index0_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_VHT1SS_MCS1: PHY_SetBBReg(Adapter, rTxAGC_A_Nss1Index3_Nss1Index0_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_VHT1SS_MCS2: PHY_SetBBReg(Adapter, rTxAGC_A_Nss1Index3_Nss1Index0_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_VHT1SS_MCS3: PHY_SetBBReg(Adapter, rTxAGC_A_Nss1Index3_Nss1Index0_JAguar, bMaskByte3, PowerIndex); break;
- case MGN_VHT1SS_MCS4: PHY_SetBBReg(Adapter, rTxAGC_A_Nss1Index7_Nss1Index4_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_VHT1SS_MCS5: PHY_SetBBReg(Adapter, rTxAGC_A_Nss1Index7_Nss1Index4_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_VHT1SS_MCS6: PHY_SetBBReg(Adapter, rTxAGC_A_Nss1Index7_Nss1Index4_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_VHT1SS_MCS7: PHY_SetBBReg(Adapter, rTxAGC_A_Nss1Index7_Nss1Index4_JAguar, bMaskByte3, PowerIndex); break;
- case MGN_VHT1SS_MCS8: PHY_SetBBReg(Adapter, rTxAGC_A_Nss2Index1_Nss1Index8_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_VHT1SS_MCS9: PHY_SetBBReg(Adapter, rTxAGC_A_Nss2Index1_Nss1Index8_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_VHT2SS_MCS0: PHY_SetBBReg(Adapter, rTxAGC_A_Nss2Index1_Nss1Index8_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_VHT2SS_MCS1: PHY_SetBBReg(Adapter, rTxAGC_A_Nss2Index1_Nss1Index8_JAguar, bMaskByte3, PowerIndex); break;
- case MGN_VHT2SS_MCS2: PHY_SetBBReg(Adapter, rTxAGC_A_Nss2Index5_Nss2Index2_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_VHT2SS_MCS3: PHY_SetBBReg(Adapter, rTxAGC_A_Nss2Index5_Nss2Index2_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_VHT2SS_MCS4: PHY_SetBBReg(Adapter, rTxAGC_A_Nss2Index5_Nss2Index2_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_VHT2SS_MCS5: PHY_SetBBReg(Adapter, rTxAGC_A_Nss2Index5_Nss2Index2_JAguar, bMaskByte3, PowerIndex); break;
- case MGN_VHT2SS_MCS6: PHY_SetBBReg(Adapter, rTxAGC_A_Nss2Index9_Nss2Index6_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_VHT2SS_MCS7: PHY_SetBBReg(Adapter, rTxAGC_A_Nss2Index9_Nss2Index6_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_VHT2SS_MCS8: PHY_SetBBReg(Adapter, rTxAGC_A_Nss2Index9_Nss2Index6_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_VHT2SS_MCS9: PHY_SetBBReg(Adapter, rTxAGC_A_Nss2Index9_Nss2Index6_JAguar, bMaskByte3, PowerIndex); break;
- default:
- DBG_871X("Invalid Rate!!\n");
- break;
- }
- }
- else if (RFPath == RF_PATH_B)
- {
- switch (Rate)
- {
- case MGN_1M: PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_CCK1_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_2M: PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_CCK1_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_5_5M: PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_CCK1_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_11M: PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_CCK1_JAguar, bMaskByte3, PowerIndex); break;
-
- case MGN_6M: PHY_SetBBReg(Adapter, rTxAGC_B_Ofdm18_Ofdm6_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_9M: PHY_SetBBReg(Adapter, rTxAGC_B_Ofdm18_Ofdm6_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_12M: PHY_SetBBReg(Adapter, rTxAGC_B_Ofdm18_Ofdm6_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_18M: PHY_SetBBReg(Adapter, rTxAGC_B_Ofdm18_Ofdm6_JAguar, bMaskByte3, PowerIndex); break;
-
- case MGN_24M: PHY_SetBBReg(Adapter, rTxAGC_B_Ofdm54_Ofdm24_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_36M: PHY_SetBBReg(Adapter, rTxAGC_B_Ofdm54_Ofdm24_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_48M: PHY_SetBBReg(Adapter, rTxAGC_B_Ofdm54_Ofdm24_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_54M: PHY_SetBBReg(Adapter, rTxAGC_B_Ofdm54_Ofdm24_JAguar, bMaskByte3, PowerIndex); break;
-
- case MGN_MCS0: PHY_SetBBReg(Adapter, rTxAGC_B_MCS3_MCS0_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_MCS1: PHY_SetBBReg(Adapter, rTxAGC_B_MCS3_MCS0_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_MCS2: PHY_SetBBReg(Adapter, rTxAGC_B_MCS3_MCS0_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_MCS3: PHY_SetBBReg(Adapter, rTxAGC_B_MCS3_MCS0_JAguar, bMaskByte3, PowerIndex); break;
-
- case MGN_MCS4: PHY_SetBBReg(Adapter, rTxAGC_B_MCS7_MCS4_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_MCS5: PHY_SetBBReg(Adapter, rTxAGC_B_MCS7_MCS4_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_MCS6: PHY_SetBBReg(Adapter, rTxAGC_B_MCS7_MCS4_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_MCS7: PHY_SetBBReg(Adapter, rTxAGC_B_MCS7_MCS4_JAguar, bMaskByte3, PowerIndex); break;
-
- case MGN_MCS8: PHY_SetBBReg(Adapter, rTxAGC_B_MCS11_MCS8_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_MCS9: PHY_SetBBReg(Adapter, rTxAGC_B_MCS11_MCS8_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_MCS10: PHY_SetBBReg(Adapter, rTxAGC_B_MCS11_MCS8_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_MCS11: PHY_SetBBReg(Adapter, rTxAGC_B_MCS11_MCS8_JAguar, bMaskByte3, PowerIndex); break;
-
- case MGN_MCS12: PHY_SetBBReg(Adapter, rTxAGC_B_MCS15_MCS12_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_MCS13: PHY_SetBBReg(Adapter, rTxAGC_B_MCS15_MCS12_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_MCS14: PHY_SetBBReg(Adapter, rTxAGC_B_MCS15_MCS12_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_MCS15: PHY_SetBBReg(Adapter, rTxAGC_B_MCS15_MCS12_JAguar, bMaskByte3, PowerIndex); break;
- case MGN_VHT1SS_MCS0: PHY_SetBBReg(Adapter, rTxAGC_B_Nss1Index3_Nss1Index0_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_VHT1SS_MCS1: PHY_SetBBReg(Adapter, rTxAGC_B_Nss1Index3_Nss1Index0_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_VHT1SS_MCS2: PHY_SetBBReg(Adapter, rTxAGC_B_Nss1Index3_Nss1Index0_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_VHT1SS_MCS3: PHY_SetBBReg(Adapter, rTxAGC_B_Nss1Index3_Nss1Index0_JAguar, bMaskByte3, PowerIndex); break;
-
- case MGN_VHT1SS_MCS4: PHY_SetBBReg(Adapter, rTxAGC_B_Nss1Index7_Nss1Index4_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_VHT1SS_MCS5: PHY_SetBBReg(Adapter, rTxAGC_B_Nss1Index7_Nss1Index4_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_VHT1SS_MCS6: PHY_SetBBReg(Adapter, rTxAGC_B_Nss1Index7_Nss1Index4_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_VHT1SS_MCS7: PHY_SetBBReg(Adapter, rTxAGC_B_Nss1Index7_Nss1Index4_JAguar, bMaskByte3, PowerIndex); break;
-
- case MGN_VHT1SS_MCS8: PHY_SetBBReg(Adapter, rTxAGC_B_Nss2Index1_Nss1Index8_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_VHT1SS_MCS9: PHY_SetBBReg(Adapter, rTxAGC_B_Nss2Index1_Nss1Index8_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_VHT2SS_MCS0: PHY_SetBBReg(Adapter, rTxAGC_B_Nss2Index1_Nss1Index8_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_VHT2SS_MCS1: PHY_SetBBReg(Adapter, rTxAGC_B_Nss2Index1_Nss1Index8_JAguar, bMaskByte3, PowerIndex); break;
-
- case MGN_VHT2SS_MCS2: PHY_SetBBReg(Adapter, rTxAGC_B_Nss2Index5_Nss2Index2_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_VHT2SS_MCS3: PHY_SetBBReg(Adapter, rTxAGC_B_Nss2Index5_Nss2Index2_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_VHT2SS_MCS4: PHY_SetBBReg(Adapter, rTxAGC_B_Nss2Index5_Nss2Index2_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_VHT2SS_MCS5: PHY_SetBBReg(Adapter, rTxAGC_B_Nss2Index5_Nss2Index2_JAguar, bMaskByte3, PowerIndex); break;
-
- case MGN_VHT2SS_MCS6: PHY_SetBBReg(Adapter, rTxAGC_B_Nss2Index9_Nss2Index6_JAguar, bMaskByte0, PowerIndex); break;
- case MGN_VHT2SS_MCS7: PHY_SetBBReg(Adapter, rTxAGC_B_Nss2Index9_Nss2Index6_JAguar, bMaskByte1, PowerIndex); break;
- case MGN_VHT2SS_MCS8: PHY_SetBBReg(Adapter, rTxAGC_B_Nss2Index9_Nss2Index6_JAguar, bMaskByte2, PowerIndex); break;
- case MGN_VHT2SS_MCS9: PHY_SetBBReg(Adapter, rTxAGC_B_Nss2Index9_Nss2Index6_JAguar, bMaskByte3, PowerIndex); break;
- default:
- DBG_871X("Invalid Rate!!\n");
- break;
- }
- }
- else
- {
- DBG_871X("Invalid RFPath!!\n");
- }
- }
- VOID
- phy_SetTxPowerIndexByRateArray(
- IN PADAPTER pAdapter,
- IN u8 RFPath,
- IN CHANNEL_WIDTH BandWidth,
- IN u8 Channel,
- IN u8* Rates,
- IN u8 RateArraySize
- )
- {
- u32 powerIndex = 0;
- int i = 0;
- for (i = 0; i < RateArraySize; ++i)
- {
- powerIndex = PHY_GetTxPowerIndex_8812A(pAdapter, RFPath, Rates[i], BandWidth, Channel);
- PHY_SetTxPowerIndex_8812A(pAdapter, powerIndex, RFPath, Rates[i]);
- }
- }
- VOID
- PHY_GetTxPowerIndexByRateArray_8812A(
- IN PADAPTER pAdapter,
- IN u8 RFPath,
- IN CHANNEL_WIDTH BandWidth,
- IN u8 Channel,
- IN u8* Rate,
- OUT u8* PowerIndex,
- IN u8 ArraySize
- )
- {
- PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter);
- u8 i;
- for(i=0 ; i<ArraySize; i++)
- {
- PowerIndex[i] = (u8)PHY_GetTxPowerIndex_8812A(pAdapter, RFPath, Rate[i], BandWidth, Channel);
- if ( (PowerIndex[i] % 2 == 1) && IS_HARDWARE_TYPE_JAGUAR(pAdapter) && ! IS_NORMAL_CHIP(pHalData->VersionID) )
- PowerIndex[i] -= 1;
- }
-
- }
- VOID
- phy_TxPowerTrainingByPath_8812(
- IN PADAPTER Adapter,
- IN CHANNEL_WIDTH BandWidth,
- IN u8 Channel,
- IN u8 RfPath
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 i;
- u32 PowerLevel, writeData, writeOffset;
- if(RfPath >= pHalData->NumTotalRFPath)
- return;
- writeData = 0;
- if(RfPath == ODM_RF_PATH_A)
- {
- PowerLevel = PHY_GetTxPowerIndex_8812A(Adapter, ODM_RF_PATH_A, MGN_MCS7, BandWidth, Channel);
- writeOffset = rA_TxPwrTraing_Jaguar;
- }
- else
- {
- PowerLevel = PHY_GetTxPowerIndex_8812A(Adapter, ODM_RF_PATH_B, MGN_MCS7, BandWidth, Channel);
- writeOffset = rB_TxPwrTraing_Jaguar;
- }
-
- for(i = 0; i < 3; i++)
- {
- if(i == 0)
- PowerLevel = PowerLevel - 10;
- else if(i == 1)
- PowerLevel = PowerLevel - 8;
- else
- PowerLevel = PowerLevel - 6;
- writeData |= (((PowerLevel > 2)?(PowerLevel):2) << (i * 8));
- }
-
- PHY_SetBBReg(Adapter, writeOffset, 0xffffff, writeData);
- }
- VOID
- PHY_SetTxPowerLevelByPath8812(
- IN PADAPTER Adapter,
- IN u8 channel,
- IN u8 path
- )
- {
- PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
- struct registry_priv *pregistrypriv = &Adapter->registrypriv;
- u8 cckRates[] = {MGN_1M, MGN_2M, MGN_5_5M, MGN_11M};
- u8 ofdmRates[] = {MGN_6M, MGN_9M, MGN_12M, MGN_18M, MGN_24M, MGN_36M, MGN_48M, MGN_54M};
- u8 htRates1T[] = {MGN_MCS0, MGN_MCS1, MGN_MCS2, MGN_MCS3, MGN_MCS4, MGN_MCS5, MGN_MCS6, MGN_MCS7};
- u8 htRates2T[] = {MGN_MCS8, MGN_MCS9, MGN_MCS10, MGN_MCS11, MGN_MCS12, MGN_MCS13, MGN_MCS14, MGN_MCS15};
- u8 vhtRates1T[] = {MGN_VHT1SS_MCS0, MGN_VHT1SS_MCS1, MGN_VHT1SS_MCS2, MGN_VHT1SS_MCS3, MGN_VHT1SS_MCS4,
- MGN_VHT1SS_MCS5, MGN_VHT1SS_MCS6, MGN_VHT1SS_MCS7, MGN_VHT1SS_MCS8, MGN_VHT1SS_MCS9};
- u8 vhtRates2T[] = {MGN_VHT2SS_MCS0, MGN_VHT2SS_MCS1, MGN_VHT2SS_MCS2, MGN_VHT2SS_MCS3, MGN_VHT2SS_MCS4,
- MGN_VHT2SS_MCS5, MGN_VHT2SS_MCS6, MGN_VHT2SS_MCS7, MGN_VHT2SS_MCS8, MGN_VHT2SS_MCS9};
-
- #if(MP_DRIVER == 1)
- if (pregistrypriv->mp_mode == 1)
- return;
- #endif
-
- {
- if(pHalData->CurrentBandType == BAND_ON_2_4G)
- phy_SetTxPowerIndexByRateArray(Adapter, path, pHalData->CurrentChannelBW, channel,
- cckRates, sizeof(cckRates)/sizeof(u1Byte));
- phy_SetTxPowerIndexByRateArray(Adapter, path, pHalData->CurrentChannelBW, channel,
- ofdmRates, sizeof(ofdmRates)/sizeof(u1Byte));
- phy_SetTxPowerIndexByRateArray(Adapter, path, pHalData->CurrentChannelBW, channel,
- htRates1T, sizeof(htRates1T)/sizeof(u1Byte));
- phy_SetTxPowerIndexByRateArray(Adapter, path, pHalData->CurrentChannelBW, channel,
- vhtRates1T, sizeof(vhtRates1T)/sizeof(u1Byte));
- if(pHalData->NumTotalRFPath >= 2)
- {
- phy_SetTxPowerIndexByRateArray(Adapter, path, pHalData->CurrentChannelBW, channel,
- htRates2T, sizeof(htRates2T)/sizeof(u1Byte));
- phy_SetTxPowerIndexByRateArray(Adapter, path, pHalData->CurrentChannelBW, channel,
- vhtRates2T, sizeof(vhtRates2T)/sizeof(u1Byte));
- }
- }
-
- phy_TxPowerTrainingByPath_8812(Adapter, pHalData->CurrentChannelBW, channel, path);
-
- }
- VOID
- PHY_SetTxPowerLevel8812(
- IN PADAPTER Adapter,
- IN u8 Channel
- )
- {
- PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
- u8 path = 0;
-
- for( path = ODM_RF_PATH_A; path < pHalData->NumTotalRFPath; ++path )
- {
- PHY_SetTxPowerLevelByPath8812(Adapter, Channel, path);
- }
-
- }
- BOOLEAN
- PHY_UpdateTxPowerDbm8812(
- IN PADAPTER Adapter,
- IN int powerInDbm
- )
- {
- return _TRUE;
- }
- u32 PHY_GetTxBBSwing_8812A(
- IN PADAPTER Adapter,
- IN BAND_TYPE Band,
- IN u8 RFPath
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(GetDefaultAdapter(Adapter));
- PDM_ODM_T pDM_Odm = &pHalData->odmpriv;
- PODM_RF_CAL_T pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);
- EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(Adapter);
- s8 bbSwing_2G = -1 * GetRegTxBBSwing_2G(Adapter);
- s8 bbSwing_5G = -1 * GetRegTxBBSwing_5G(Adapter);
- u32 out = 0x200;
- const s8 AUTO = -1;
-
- if (pEEPROM->bautoload_fail_flag)
- {
- if ( Band == BAND_ON_2_4G ) {
- pRFCalibrateInfo->BBSwingDiff2G = bbSwing_2G;
- if (bbSwing_2G == 0) out = 0x200;
- else if (bbSwing_2G == -3) out = 0x16A;
- else if (bbSwing_2G == -6) out = 0x101;
- else if (bbSwing_2G == -9) out = 0x0B6;
- else {
- if ( pHalData->ExternalPA_2G ) {
- pRFCalibrateInfo->BBSwingDiff2G = -3;
- out = 0x16A;
- } else {
- pRFCalibrateInfo->BBSwingDiff2G = 0;
- out = 0x200;
- }
- }
- } else if ( Band == BAND_ON_5G ) {
- pRFCalibrateInfo->BBSwingDiff5G = bbSwing_5G;
- if (bbSwing_5G == 0) out = 0x200;
- else if (bbSwing_5G == -3) out = 0x16A;
- else if (bbSwing_5G == -6) out = 0x101;
- else if (bbSwing_5G == -9) out = 0x0B6;
- else {
- if ( pHalData->ExternalPA_5G ) {
- pRFCalibrateInfo->BBSwingDiff5G = -3;
- out = 0x16A;
- } else {
- pRFCalibrateInfo->BBSwingDiff5G = 0;
- out = 0x200;
- }
- }
- } else {
- pRFCalibrateInfo->BBSwingDiff2G = -3;
- pRFCalibrateInfo->BBSwingDiff5G = -3;
- out = 0x16A;
- }
- }
- else
- {
- u32 swing = 0, swingA = 0, swingB = 0;
- if (Band == BAND_ON_2_4G) {
- if (GetRegTxBBSwing_2G(Adapter) == AUTO)
- {
- EFUSE_ShadowRead(Adapter, 1, EEPROM_TX_BBSWING_2G_8812, (u32 *)&swing);
- swing = (swing == 0xFF) ? 0x00 : swing;
- }
- else if (bbSwing_2G == 0) swing = 0x00;
- else if (bbSwing_2G == -3) swing = 0x05;
- else if (bbSwing_2G == -6) swing = 0x0A;
- else if (bbSwing_2G == -9) swing = 0xFF;
- else swing = 0x00;
- }
- else {
- if (GetRegTxBBSwing_5G(Adapter) == AUTO)
- {
- EFUSE_ShadowRead(Adapter, 1, EEPROM_TX_BBSWING_5G_8812, (u32 *)&swing);
- swing = (swing == 0xFF) ? 0x00 : swing;
- }
- else if (bbSwing_5G == 0) swing = 0x00;
- else if (bbSwing_5G == -3) swing = 0x05;
- else if (bbSwing_5G == -6) swing = 0x0A;
- else if (bbSwing_5G == -9) swing = 0xFF;
- else swing = 0x00;
- }
-
- swingA = (swing & 0x3) >> 0;
- swingB = (swing & 0xC) >> 2;
-
-
- if (swingA == 0x00) {
- if (Band == BAND_ON_2_4G)
- pRFCalibrateInfo->BBSwingDiff2G = 0;
- else
- pRFCalibrateInfo->BBSwingDiff5G = 0;
- out = 0x200;
- } else if (swingA == 0x01) {
- if (Band == BAND_ON_2_4G)
- pRFCalibrateInfo->BBSwingDiff2G = -3;
- else
- pRFCalibrateInfo->BBSwingDiff5G = -3;
- out = 0x16A;
- } else if (swingA == 0x10) {
- if (Band == BAND_ON_2_4G)
- pRFCalibrateInfo->BBSwingDiff2G = -6;
- else
- pRFCalibrateInfo->BBSwingDiff5G = -6;
- out = 0x101;
- } else if (swingA == 0x11) {
- if (Band == BAND_ON_2_4G)
- pRFCalibrateInfo->BBSwingDiff2G = -9;
- else
- pRFCalibrateInfo->BBSwingDiff5G = -9;
- out = 0x0B6;
- }
-
-
- if (swingB == 0x00) {
- if (Band == BAND_ON_2_4G)
- pRFCalibrateInfo->BBSwingDiff2G = 0;
- else
- pRFCalibrateInfo->BBSwingDiff5G = 0;
- out = 0x200;
- } else if (swingB == 0x01) {
- if (Band == BAND_ON_2_4G)
- pRFCalibrateInfo->BBSwingDiff2G = -3;
- else
- pRFCalibrateInfo->BBSwingDiff5G = -3;
- out = 0x16A;
- } else if (swingB == 0x10) {
- if (Band == BAND_ON_2_4G)
- pRFCalibrateInfo->BBSwingDiff2G = -6;
- else
- pRFCalibrateInfo->BBSwingDiff5G = -6;
- out = 0x101;
- } else if (swingB == 0x11) {
- if (Band == BAND_ON_2_4G)
- pRFCalibrateInfo->BBSwingDiff2G = -9;
- else
- pRFCalibrateInfo->BBSwingDiff5G = -9;
- out = 0x0B6;
- }
- }
-
- return out;
- }
- VOID
- phy_SetRFEReg8812(
- IN PADAPTER Adapter,
- IN u8 Band
- )
- {
- u1Byte u1tmp = 0;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- if(Band == BAND_ON_2_4G)
- {
- switch(pHalData->RFEType){
- case 0: case 1: case 2:
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar,bMaskDWord, 0x77777777);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar,bMaskDWord, 0x77777777);
- PHY_SetBBReg(Adapter, rA_RFE_Inv_Jaguar,bMask_RFEInv_Jaguar, 0x000);
- PHY_SetBBReg(Adapter, rB_RFE_Inv_Jaguar,bMask_RFEInv_Jaguar, 0x000);
- break;
- case 3:
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar,bMaskDWord, 0x54337770);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar,bMaskDWord, 0x54337770);
- PHY_SetBBReg(Adapter, rA_RFE_Inv_Jaguar,bMask_RFEInv_Jaguar, 0x010);
- PHY_SetBBReg(Adapter, rB_RFE_Inv_Jaguar,bMask_RFEInv_Jaguar, 0x010);
- PHY_SetBBReg(Adapter, r_ANTSEL_SW_Jaguar,0x00000303, 0x1);
- break;
- case 4:
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar,bMaskDWord, 0x77777777);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar,bMaskDWord, 0x77777777);
- PHY_SetBBReg(Adapter, rA_RFE_Inv_Jaguar,bMask_RFEInv_Jaguar, 0x001);
- PHY_SetBBReg(Adapter, rB_RFE_Inv_Jaguar,bMask_RFEInv_Jaguar, 0x001);
- break;
- case 5:
-
- {
-
- rtw_write8(Adapter, rA_RFE_Pinmux_Jaguar+2, 0x77);
- }
-
-
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar,bMaskDWord, 0x77777777);
-
- {
-
-
- u1tmp = rtw_read8(Adapter, rA_RFE_Inv_Jaguar+3);
- rtw_write8(Adapter, rA_RFE_Inv_Jaguar+3, (u1tmp &= ~BIT0));
- }
-
-
- PHY_SetBBReg(Adapter, rB_RFE_Inv_Jaguar, bMask_RFEInv_Jaguar, 0x000);
- break;
- default:
- break;
- }
- }
- else
- {
- switch(pHalData->RFEType){
- case 0:
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar,bMaskDWord, 0x77337717);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar,bMaskDWord, 0x77337717);
- PHY_SetBBReg(Adapter, rA_RFE_Inv_Jaguar,bMask_RFEInv_Jaguar, 0x010);
- PHY_SetBBReg(Adapter, rB_RFE_Inv_Jaguar,bMask_RFEInv_Jaguar, 0x010);
- break;
- case 1:
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar,bMaskDWord, 0x77337717);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar,bMaskDWord, 0x77337717);
- PHY_SetBBReg(Adapter, rA_RFE_Inv_Jaguar,bMask_RFEInv_Jaguar, 0x000);
- PHY_SetBBReg(Adapter, rB_RFE_Inv_Jaguar,bMask_RFEInv_Jaguar, 0x000);
- break;
- case 2: case 4:
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar,bMaskDWord, 0x77337777);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar,bMaskDWord, 0x77337777);
- PHY_SetBBReg(Adapter, rA_RFE_Inv_Jaguar,bMask_RFEInv_Jaguar, 0x010);
- PHY_SetBBReg(Adapter, rB_RFE_Inv_Jaguar,bMask_RFEInv_Jaguar, 0x010);
- break;
- case 3:
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar,bMaskDWord, 0x54337717);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar,bMaskDWord, 0x54337717);
- PHY_SetBBReg(Adapter, rA_RFE_Inv_Jaguar,bMask_RFEInv_Jaguar, 0x010);
- PHY_SetBBReg(Adapter, rB_RFE_Inv_Jaguar,bMask_RFEInv_Jaguar, 0x010);
- PHY_SetBBReg(Adapter, r_ANTSEL_SW_Jaguar,0x00000303, 0x1);
- break;
- case 5:
-
- {
-
- if(pHalData->ExternalPA_5G)
- PlatformEFIOWrite1Byte(Adapter, rA_RFE_Pinmux_Jaguar+2, 0x33);
- else
- PlatformEFIOWrite1Byte(Adapter, rA_RFE_Pinmux_Jaguar+2, 0x73);
- }
- #if 0
- else
- {
- if (pHalData->ExternalPA_5G)
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar,bMaskDWord, 0x77337777);
- else
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar,bMaskDWord, 0x77737777);
- }
- #endif
- if (pHalData->ExternalPA_5G)
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar,bMaskDWord, 0x77337777);
- else
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar,bMaskDWord, 0x77737777);
-
- {
-
-
- u1tmp = rtw_read8(Adapter, rA_RFE_Inv_Jaguar+3);
- rtw_write8(Adapter, rA_RFE_Inv_Jaguar+3, (u1tmp |= BIT0));
- }
-
-
-
- PHY_SetBBReg(Adapter, rB_RFE_Inv_Jaguar, bMask_RFEInv_Jaguar, 0x010);
- break;
- default:
- break;
- }
- }
- }
- s32
- PHY_SwitchWirelessBand8812(
- IN PADAPTER Adapter,
- IN u8 Band
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 currentBand = pHalData->CurrentBandType;
-
- pHalData->CurrentBandType =(BAND_TYPE)Band;
-
- if(Band == BAND_ON_2_4G)
- {
-
- PHY_SetBBReg(Adapter, rOFDMCCKEN_Jaguar, bOFDMEN_Jaguar|bCCKEN_Jaguar, 0x00);
- if (IS_HARDWARE_TYPE_8821(Adapter))
- {
-
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar, 0xF000, 0x7);
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar, 0xF0, 0x7);
- }
-
- if(IS_VENDOR_8821A_MP_CHIP(Adapter))
- PHY_SetBBReg(Adapter, rA_TxScale_Jaguar, 0xF00, 0);
- else
- PHY_SetBBReg(Adapter, rAGC_table_Jaguar, 0x3, 0);
- if(IS_VENDOR_8812A_TEST_CHIP(Adapter))
- {
-
- PHY_SetBBReg(Adapter, rA_RFE_Jaguar, BIT12, 0x0);
- PHY_SetBBReg(Adapter, rB_RFE_Jaguar, BIT12, 0x0);
-
- PHY_SetBBReg(Adapter, rA_RFE_Jaguar, BIT15, 0x1);
- PHY_SetBBReg(Adapter, rB_RFE_Jaguar, BIT15, 0x1);
- }
- else if(IS_VENDOR_8812A_MP_CHIP(Adapter))
- {
- if(GetRegbENRFEType(Adapter))
- phy_SetRFEReg8812(Adapter, Band);
- else
- {
-
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar, 0x000000F0, 0x7);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar, 0x000000F0, 0x7);
-
-
- if (pHalData->ExternalPA_2G) {
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar, 0x0000000F, 0x0);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar, 0x0000000F, 0x0);
- } else {
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar, 0x0000000F, 0x7);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar, 0x0000000F, 0x7);
- }
-
- if (pHalData->ExternalLNA_2G) {
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar, bMaskByte2, 0x54);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar, bMaskByte2, 0x54);
- } else {
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar, bMaskByte2, 0x77);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar, bMaskByte2, 0x77);
- }
- }
- }
- update_tx_basic_rate(Adapter, WIRELESS_11BG);
-
- PHY_SetBBReg(Adapter, rOFDMCCKEN_Jaguar, bOFDMEN_Jaguar|bCCKEN_Jaguar, 0x3);
-
- if(IS_VENDOR_8812A_TEST_CHIP(Adapter))
- {
- PHY_SetRFReg(Adapter, RF_PATH_A, 0xEF, bLSSIWrite_data_Jaguar, 0x40000);
- PHY_SetRFReg(Adapter, RF_PATH_A, 0x3E, bLSSIWrite_data_Jaguar, 0x00000);
- PHY_SetRFReg(Adapter, RF_PATH_A, 0x3F, bLSSIWrite_data_Jaguar, 0x0001c);
- PHY_SetRFReg(Adapter, RF_PATH_A, 0xEF, bLSSIWrite_data_Jaguar, 0x00000);
- PHY_SetRFReg(Adapter, RF_PATH_A, 0xB5, bLSSIWrite_data_Jaguar, 0x16BFF);
- }
-
- rtw_write8(Adapter, REG_CCK_CHECK_8812, 0x0);
- }
- else
- {
- u16 count = 0, reg41A = 0;
- if (IS_HARDWARE_TYPE_8821(Adapter))
- {
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar, 0xF000, 0x5);
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar, 0xF0, 0x4);
- }
-
- rtw_write8(Adapter, REG_CCK_CHECK_8812, 0x80);
- count = 0;
- reg41A = rtw_read16(Adapter, REG_TXPKT_EMPTY);
-
- reg41A &= 0x30;
- while((reg41A!= 0x30) && (count < 50))
- {
- rtw_udelay_os(50);
-
- reg41A = rtw_read16(Adapter, REG_TXPKT_EMPTY);
- reg41A &= 0x30;
- count++;
-
- }
- if(count != 0)
- DBG_871X("PHY_SwitchWirelessBand8812(): Switch to 5G Band. Count = %d reg41A=0x%x\n", count, reg41A);
-
- PHY_SetBBReg(Adapter, rOFDMCCKEN_Jaguar, bOFDMEN_Jaguar|bCCKEN_Jaguar, 0x00);
-
- if (IS_VENDOR_8821A_MP_CHIP(Adapter))
- PHY_SetBBReg(Adapter, rA_TxScale_Jaguar, 0xF00, 1);
- else
- PHY_SetBBReg(Adapter, rAGC_table_Jaguar, 0x3, 1);
- if(IS_VENDOR_8812A_TEST_CHIP(Adapter))
- {
-
- PHY_SetBBReg(Adapter, rA_RFE_Jaguar, BIT12, 0x1);
- PHY_SetBBReg(Adapter, rB_RFE_Jaguar, BIT12, 0x1);
-
- PHY_SetBBReg(Adapter, rA_RFE_Jaguar, BIT15, 0x0);
- PHY_SetBBReg(Adapter, rB_RFE_Jaguar, BIT15, 0x0);
- }
- else if(IS_VENDOR_8812A_MP_CHIP(Adapter))
- {
- if(GetRegbENRFEType(Adapter))
- phy_SetRFEReg8812(Adapter, Band);
- else
- {
-
- if (pHalData->ExternalPA_5G) {
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar, 0x000000F0, 0x1);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar, 0x000000F0, 0x1);
- } else {
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar, 0x000000F0, 0x0);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar, 0x000000F0, 0x0);
- }
-
-
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar, 0x0000000F, 0x7);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar, 0x0000000F, 0x7);
-
- if (pHalData->ExternalLNA_5G) {
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar, bMaskByte2, 0x54);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar, bMaskByte2, 0x54);
- } else {
- PHY_SetBBReg(Adapter, rA_RFE_Pinmux_Jaguar, bMaskByte2, 0x77);
- PHY_SetBBReg(Adapter, rB_RFE_Pinmux_Jaguar, bMaskByte2, 0x77);
- }
- }
- }
-
-
- update_tx_basic_rate(Adapter, WIRELESS_11A);
-
- PHY_SetBBReg(Adapter, rOFDMCCKEN_Jaguar, bOFDMEN_Jaguar|bCCKEN_Jaguar, 0x2);
-
- if(IS_VENDOR_8812A_TEST_CHIP(Adapter))
- {
- PHY_SetRFReg(Adapter, RF_PATH_A, 0xEF, bLSSIWrite_data_Jaguar, 0x40000);
- PHY_SetRFReg(Adapter, RF_PATH_A, 0x3E, bLSSIWrite_data_Jaguar, 0x00000);
- PHY_SetRFReg(Adapter, RF_PATH_A, 0x3F, bLSSIWrite_data_Jaguar, 0x00017);
- PHY_SetRFReg(Adapter, RF_PATH_A, 0xEF, bLSSIWrite_data_Jaguar, 0x00000);
- PHY_SetRFReg(Adapter, RF_PATH_A, 0xB5, bLSSIWrite_data_Jaguar, 0x04BFF);
- }
-
- }
-
-
- if (IS_NORMAL_CHIP(pHalData->VersionID) || IS_HARDWARE_TYPE_8821(Adapter))
- {
- s8 BBDiffBetweenBand = 0;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(GetDefaultAdapter(Adapter));
- PDM_ODM_T pDM_Odm = &pHalData->odmpriv;
- PODM_RF_CAL_T pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);
-
- PHY_SetBBReg(Adapter, rA_TxScale_Jaguar, 0xFFE00000,
- PHY_GetTxBBSwing_8812A(Adapter, (BAND_TYPE)Band, ODM_RF_PATH_A));
- PHY_SetBBReg(Adapter, rB_TxScale_Jaguar, 0xFFE00000,
- PHY_GetTxBBSwing_8812A(Adapter, (BAND_TYPE)Band, ODM_RF_PATH_B));
-
-
-
- {
- if (Band != currentBand)
- {
- BBDiffBetweenBand = (pRFCalibrateInfo->BBSwingDiff2G - pRFCalibrateInfo->BBSwingDiff5G);
- BBDiffBetweenBand = (Band == BAND_ON_2_4G) ? BBDiffBetweenBand : (-1 * BBDiffBetweenBand);
- pDM_Odm->DefaultOfdmIndex += BBDiffBetweenBand*2;
- }
- ODM_ClearTxPowerTrackingState(pDM_Odm);
- }
- }
-
-
- return _SUCCESS;
- }
- BOOLEAN
- phy_SwBand8812(
- IN PADAPTER pAdapter,
- IN u8 channelToSW
- )
- {
- u8 u1Btmp;
- BOOLEAN ret_value = _TRUE;
- u8 Band = BAND_ON_5G, BandToSW;
- u1Btmp = rtw_read8(pAdapter, REG_CCK_CHECK_8812);
- if(u1Btmp & BIT7)
- Band = BAND_ON_5G;
- else
- Band = BAND_ON_2_4G;
-
- if(channelToSW > 14)
- {
- BandToSW = BAND_ON_5G;
- }
- else
- {
- BandToSW = BAND_ON_2_4G;
- }
- if(BandToSW != Band)
- PHY_SwitchWirelessBand8812(pAdapter,BandToSW);
- return ret_value;
- }
- u8
- phy_GetSecondaryChnl_8812(
- IN PADAPTER Adapter
- )
- {
- u8 SCSettingOf40 = 0, SCSettingOf20 = 0;
- PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
-
- if(pHalData->CurrentChannelBW== CHANNEL_WIDTH_80)
- {
- if(pHalData->nCur80MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_LOWER)
- SCSettingOf40 = VHT_DATA_SC_40_LOWER_OF_80MHZ;
- else if(pHalData->nCur80MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_UPPER)
- SCSettingOf40 = VHT_DATA_SC_40_UPPER_OF_80MHZ;
- else
- DBG_871X("SCMapping: Not Correct Primary40MHz Setting \n");
-
- if((pHalData->nCur40MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_LOWER) && (pHalData->nCur80MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_LOWER))
- SCSettingOf20 = VHT_DATA_SC_20_LOWEST_OF_80MHZ;
- else if((pHalData->nCur40MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_UPPER) && (pHalData->nCur80MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_LOWER))
- SCSettingOf20 = VHT_DATA_SC_20_LOWER_OF_80MHZ;
- else if((pHalData->nCur40MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_LOWER) && (pHalData->nCur80MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_UPPER))
- SCSettingOf20 = VHT_DATA_SC_20_UPPER_OF_80MHZ;
- else if((pHalData->nCur40MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_UPPER) && (pHalData->nCur80MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_UPPER))
- SCSettingOf20 = VHT_DATA_SC_20_UPPERST_OF_80MHZ;
- else
- DBG_871X("SCMapping: Not Correct Primary40MHz Setting \n");
- }
- else if(pHalData->CurrentChannelBW == CHANNEL_WIDTH_40)
- {
-
- if(pHalData->nCur40MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_UPPER)
- SCSettingOf20 = VHT_DATA_SC_20_UPPER_OF_80MHZ;
- else if(pHalData->nCur40MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_LOWER)
- SCSettingOf20 = VHT_DATA_SC_20_LOWER_OF_80MHZ;
- else
- DBG_871X("SCMapping: Not Correct Primary40MHz Setting \n");
- }
-
- return ( (SCSettingOf40 << 4) | SCSettingOf20);
- }
- VOID
- phy_SetRegBW_8812(
- IN PADAPTER Adapter,
- CHANNEL_WIDTH CurrentBW
- )
- {
- u16 RegRfMod_BW, u2tmp = 0;
- RegRfMod_BW = rtw_read16(Adapter, REG_WMAC_TRXPTCL_CTL);
- switch(CurrentBW)
- {
- case CHANNEL_WIDTH_20:
- rtw_write16(Adapter, REG_WMAC_TRXPTCL_CTL, (RegRfMod_BW & 0xFE7F));
- break;
- case CHANNEL_WIDTH_40:
- u2tmp = RegRfMod_BW | BIT7;
- rtw_write16(Adapter, REG_WMAC_TRXPTCL_CTL, (u2tmp & 0xFEFF));
- break;
- case CHANNEL_WIDTH_80:
- u2tmp = RegRfMod_BW | BIT8;
- rtw_write16(Adapter, REG_WMAC_TRXPTCL_CTL, (u2tmp & 0xFF7F));
- break;
- default:
- DBG_871X("phy_PostSetBWMode8812(): unknown Bandwidth: %#X\n",CurrentBW);
- break;
- }
- }
- void
- phy_FixSpur_8812A(
- IN PADAPTER pAdapter,
- IN CHANNEL_WIDTH Bandwidth,
- IN u1Byte Channel
- )
- {
-
- if(IS_VENDOR_8812A_C_CUT(pAdapter))
- {
- if(Bandwidth == CHANNEL_WIDTH_40 && Channel == 11)
- PHY_SetBBReg(pAdapter, rRFMOD_Jaguar, 0xC00, 0x3) ;
- else
- PHY_SetBBReg(pAdapter, rRFMOD_Jaguar, 0xC00, 0x2);
-
- if (Bandwidth == CHANNEL_WIDTH_20 &&
- (Channel == 13 || Channel == 14)) {
-
- PHY_SetBBReg(pAdapter, rRFMOD_Jaguar, 0x300, 0x3);
- PHY_SetBBReg(pAdapter, rADC_Buf_Clk_Jaguar, BIT30, 1);
-
- } else if (Bandwidth == CHANNEL_WIDTH_40 &&
- Channel == 11) {
- PHY_SetBBReg(pAdapter, rADC_Buf_Clk_Jaguar, BIT30, 1);
- } else if (Bandwidth != CHANNEL_WIDTH_80) {
-
- PHY_SetBBReg(pAdapter, rRFMOD_Jaguar, 0x300, 0x2);
- PHY_SetBBReg(pAdapter, rADC_Buf_Clk_Jaguar, BIT30, 0);
- }
- }
- else if (IS_HARDWARE_TYPE_8812(pAdapter))
- {
-
- if (Bandwidth == CHANNEL_WIDTH_20 &&
- (Channel == 13 || Channel == 14))
- PHY_SetBBReg(pAdapter, rRFMOD_Jaguar, 0x300, 0x3);
- else if (Channel <= 14)
- PHY_SetBBReg(pAdapter, rRFMOD_Jaguar, 0x300, 0x2);
- }
- }
- VOID
- phy_PostSetBwMode8812(
- IN PADAPTER Adapter
- )
- {
- u8 SubChnlNum = 0;
- u8 L1pkVal = 0;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
- phy_SetRegBW_8812(Adapter, pHalData->CurrentChannelBW);
-
- SubChnlNum = phy_GetSecondaryChnl_8812(Adapter);
- rtw_write8(Adapter, REG_DATA_SC_8812, SubChnlNum);
- if(pHalData->rf_chip == RF_PSEUDO_11N)
- {
- DBG_871X("phy_PostSetBwMode8812: return for PSEUDO \n");
- return;
- }
-
-
-
- switch(pHalData->CurrentChannelBW)
- {
- case CHANNEL_WIDTH_20:
- PHY_SetBBReg(Adapter, rRFMOD_Jaguar, 0x003003C3, 0x00300200);
- PHY_SetBBReg(Adapter, rADC_Buf_Clk_Jaguar, BIT30, 0);
- PHY_SetBBReg(Adapter, rFPGA0_XB_RFInterfaceOE, 0x001C0000, 4);
- if(pHalData->rf_type == RF_2T2R)
- PHY_SetBBReg(Adapter, rL1PeakTH_Jaguar, 0x03C00000, 7);
- else
- PHY_SetBBReg(Adapter, rL1PeakTH_Jaguar, 0x03C00000, 8);
- break;
-
- case CHANNEL_WIDTH_40:
- PHY_SetBBReg(Adapter, rRFMOD_Jaguar, 0x003003C3, 0x00300201);
- PHY_SetBBReg(Adapter, rADC_Buf_Clk_Jaguar, BIT30, 0);
- PHY_SetBBReg(Adapter, rRFMOD_Jaguar, 0x3C, SubChnlNum);
- PHY_SetBBReg(Adapter, rCCAonSec_Jaguar, 0xf0000000, SubChnlNum);
- PHY_SetBBReg(Adapter, rFPGA0_XB_RFInterfaceOE, 0x001C0000, 2);
- if(pHalData->Reg837 & BIT2)
- L1pkVal = 6;
- else
- {
- if(pHalData->rf_type == RF_2T2R)
- L1pkVal = 7;
- else
- L1pkVal = 8;
- }
- PHY_SetBBReg(Adapter, rL1PeakTH_Jaguar, 0x03C00000, L1pkVal);
- if(SubChnlNum == VHT_DATA_SC_20_UPPER_OF_80MHZ)
- PHY_SetBBReg(Adapter, rCCK_System_Jaguar, bCCK_System_Jaguar, 1);
- else
- PHY_SetBBReg(Adapter, rCCK_System_Jaguar, bCCK_System_Jaguar, 0);
- break;
- case CHANNEL_WIDTH_80:
- PHY_SetBBReg(Adapter, rRFMOD_Jaguar, 0x003003C3, 0x00300202);
- PHY_SetBBReg(Adapter, rADC_Buf_Clk_Jaguar, BIT30, 1);
- PHY_SetBBReg(Adapter, rRFMOD_Jaguar, 0x3C, SubChnlNum);
- PHY_SetBBReg(Adapter, rCCAonSec_Jaguar, 0xf0000000, SubChnlNum);
- PHY_SetBBReg(Adapter, rFPGA0_XB_RFInterfaceOE, 0x001C0000, 2);
- if(pHalData->Reg837 & BIT2)
- L1pkVal = 5;
- else
- {
- if(pHalData->rf_type == RF_2T2R)
- L1pkVal = 6;
- else
- L1pkVal = 7;
- }
- PHY_SetBBReg(Adapter, rL1PeakTH_Jaguar, 0x03C00000, L1pkVal);
- break;
- default:
- DBG_871X("phy_PostSetBWMode8812(): unknown Bandwidth: %#X\n",pHalData->CurrentChannelBW);
- break;
- }
-
- phy_FixSpur_8812A(Adapter, pHalData->CurrentChannelBW, pHalData->CurrentChannel);
-
-
-
-
- PHY_RF6052SetBandwidth8812(Adapter, pHalData->CurrentChannelBW);
- }
- VOID phy_InitRssiTRSW(
- IN PADAPTER pAdapter
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
- PDM_ODM_T pDM_Odm = &pHalData->odmpriv;
- u8 channel = pHalData->CurrentChannel;
- if (pHalData->RFEType == 3){
- if (channel <= 14) {
- pDM_Odm->RSSI_TRSW_H = 70;
- pDM_Odm->RSSI_TRSW_iso = 25;
- } else if (36 <= channel && channel <= 64) {
- pDM_Odm->RSSI_TRSW_H = 70;
- pDM_Odm->RSSI_TRSW_iso = 25;
- } else if (100 <= channel && channel <= 144) {
- pDM_Odm->RSSI_TRSW_H = 80;
- pDM_Odm->RSSI_TRSW_iso = 35;
- } else if (149 <= channel) {
- pDM_Odm->RSSI_TRSW_H = 75;
- pDM_Odm->RSSI_TRSW_iso = 30;
- }
- pDM_Odm->RSSI_TRSW_L = pDM_Odm->RSSI_TRSW_H - pDM_Odm->RSSI_TRSW_iso - 10;
- }
- }
- VOID
- phy_SwChnl8812(
- IN PADAPTER pAdapter
- )
- {
- u8 eRFPath = 0;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
- u8 channelToSW = pHalData->CurrentChannel;
- if (pAdapter->registrypriv.mp_mode == 0) {
- if(phy_SwBand8812(pAdapter, channelToSW) == _FALSE)
- {
- DBG_871X("error Chnl %d !\n", channelToSW);
- }
- }
-
- #if 0
- if (36 <= channelToSW && channelToSW <= 48)
- AGC_DIFF_CONFIG(8812A,LB);
- else if (50 <= channelToSW && channelToSW <= 64)
- AGC_DIFF_CONFIG(8812A,MB);
- else if (100 <= channelToSW && channelToSW <= 116)
- AGC_DIFF_CONFIG(8812A,HB);
- #endif
- if(pHalData->rf_chip == RF_PSEUDO_11N)
- {
- DBG_871X("phy_SwChnl8812: return for PSEUDO \n");
- return;
- }
-
-
-
-
- if (36 <= channelToSW && channelToSW <= 48)
- PHY_SetBBReg(pAdapter, rFc_area_Jaguar, 0x1ffe0000, 0x494);
- else if (50 <= channelToSW && channelToSW <= 64)
- PHY_SetBBReg(pAdapter, rFc_area_Jaguar, 0x1ffe0000, 0x453);
- else if (100 <= channelToSW && channelToSW <= 116)
- PHY_SetBBReg(pAdapter, rFc_area_Jaguar, 0x1ffe0000, 0x452);
- else if (118 <= channelToSW)
- PHY_SetBBReg(pAdapter, rFc_area_Jaguar, 0x1ffe0000, 0x412);
- else
- PHY_SetBBReg(pAdapter, rFc_area_Jaguar, 0x1ffe0000, 0x96a);
-
- for(eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++)
- {
-
- if(IS_VENDOR_8812A_TEST_CHIP(pAdapter))
- {
- if (1 <= channelToSW && channelToSW <= 7)
- PHY_SetRFReg(pAdapter, eRFPath, RF_TxLCTank_Jaguar, bLSSIWrite_data_Jaguar, 0x0017e);
- else if (8 <= channelToSW && channelToSW <= 14)
- PHY_SetRFReg(pAdapter, eRFPath, RF_TxLCTank_Jaguar, bLSSIWrite_data_Jaguar, 0x0013e);
- }
-
- if (36 <= channelToSW && channelToSW <= 64)
- PHY_SetRFReg(pAdapter, eRFPath, RF_CHNLBW_Jaguar, BIT18|BIT17|BIT16|BIT9|BIT8, 0x101);
- else if (100 <= channelToSW && channelToSW <= 140)
- PHY_SetRFReg(pAdapter, eRFPath, RF_CHNLBW_Jaguar, BIT18|BIT17|BIT16|BIT9|BIT8, 0x301);
- else if (140 < channelToSW)
- PHY_SetRFReg(pAdapter, eRFPath, RF_CHNLBW_Jaguar, BIT18|BIT17|BIT16|BIT9|BIT8, 0x501);
- else
- PHY_SetRFReg(pAdapter, eRFPath, RF_CHNLBW_Jaguar, BIT18|BIT17|BIT16|BIT9|BIT8, 0x000);
-
- phy_FixSpur_8812A(pAdapter, pHalData->CurrentChannelBW, channelToSW);
- PHY_SetRFReg(pAdapter, eRFPath, RF_CHNLBW_Jaguar, bMaskByte0, channelToSW);
-
- if (IS_HARDWARE_TYPE_8811AU(pAdapter) && ( !IS_NORMAL_CHIP(pHalData->VersionID)) && channelToSW > 14 )
- {
-
- if (36 <= channelToSW && channelToSW <= 64)
- PHY_SetRFReg(pAdapter, eRFPath, RF_APK_Jaguar, bRFRegOffsetMask, 0x710E7);
- else if (100 <= channelToSW && channelToSW <= 140)
- PHY_SetRFReg(pAdapter, eRFPath, RF_APK_Jaguar, bRFRegOffsetMask, 0x716E9);
- else
- PHY_SetRFReg(pAdapter, eRFPath, RF_APK_Jaguar, bRFRegOffsetMask, 0x714E9);
- }
- else if ((IS_HARDWARE_TYPE_8821E(pAdapter) || IS_HARDWARE_TYPE_8821S(pAdapter))
- && channelToSW > 14)
- {
-
- if (36 <= channelToSW && channelToSW <= 64)
- PHY_SetRFReg(pAdapter, eRFPath, RF_APK_Jaguar, bRFRegOffsetMask, 0x714E9);
- else if (100 <= channelToSW && channelToSW <= 140)
- PHY_SetRFReg(pAdapter, eRFPath, RF_APK_Jaguar, bRFRegOffsetMask, 0x110E9);
- else
- PHY_SetRFReg(pAdapter, eRFPath, RF_APK_Jaguar, bRFRegOffsetMask, 0x714E9);
- }
- }
- }
- VOID
- phy_SwChnlAndSetBwMode8812(
- IN PADAPTER Adapter
- )
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
- if((Adapter->bDriverStopped) || (Adapter->bSurpriseRemoved))
- {
- return;
- }
- if(pHalData->bSwChnl)
- {
- phy_SwChnl8812(Adapter);
- pHalData->bSwChnl = _FALSE;
- }
- if(pHalData->bSetChnlBW)
- {
- phy_PostSetBwMode8812(Adapter);
- pHalData->bSetChnlBW = _FALSE;
- }
- ODM_ClearTxPowerTrackingState(&pHalData->odmpriv);
- PHY_SetTxPowerLevel8812(Adapter, pHalData->CurrentChannel);
- if(IS_HARDWARE_TYPE_8812(Adapter))
- phy_InitRssiTRSW(Adapter);
- if ( (pHalData->bNeedIQK == _TRUE)
- #if (MP_DRIVER == 1)
- || (Adapter->registrypriv.mp_mode == 1)
- #endif
- )
- {
- if(IS_HARDWARE_TYPE_8812(Adapter))
- {
- #if (RTL8812A_SUPPORT == 1)
- PHY_IQCalibrate_8812A(Adapter, _FALSE);
- #endif
- }
- else if(IS_HARDWARE_TYPE_8821(Adapter))
- {
- #if (RTL8821A_SUPPORT == 1)
- PHY_IQCalibrate_8821A(Adapter, _FALSE);
- #endif
- }
- pHalData->bNeedIQK = _FALSE;
- }
- }
- VOID
- PHY_HandleSwChnlAndSetBW8812(
- IN PADAPTER Adapter,
- IN BOOLEAN bSwitchChannel,
- IN BOOLEAN bSetBandWidth,
- IN u8 ChannelNum,
- IN CHANNEL_WIDTH ChnlWidth,
- IN u8 ChnlOffsetOf40MHz,
- IN u8 ChnlOffsetOf80MHz,
- IN u8 CenterFrequencyIndex1
- )
- {
- PADAPTER pDefAdapter = GetDefaultAdapter(Adapter);
- PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pDefAdapter);
- u8 tmpChannel = pHalData->CurrentChannel;
- CHANNEL_WIDTH tmpBW= pHalData->CurrentChannelBW;
- u8 tmpnCur40MhzPrimeSC = pHalData->nCur40MhzPrimeSC;
- u8 tmpnCur80MhzPrimeSC = pHalData->nCur80MhzPrimeSC;
- u8 tmpCenterFrequencyIndex1 =pHalData->CurrentCenterFrequencyIndex1;
- struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
-
-
- if(!bSwitchChannel && !bSetBandWidth)
- {
- DBG_871X("PHY_HandleSwChnlAndSetBW8812: not switch channel and not set bandwidth \n");
- return;
- }
-
- if(bSwitchChannel)
- {
- if(pHalData->CurrentChannel != ChannelNum)
- {
- if (HAL_IsLegalChannel(Adapter, ChannelNum))
- pHalData->bSwChnl = _TRUE;
- else
- return;
- }
- }
- if(bSetBandWidth)
- {
- if(pHalData->bChnlBWInitialzed == _FALSE)
- {
- pHalData->bChnlBWInitialzed = _TRUE;
- pHalData->bSetChnlBW = _TRUE;
- }
- else if((pHalData->CurrentChannelBW != ChnlWidth) ||
- (pHalData->nCur40MhzPrimeSC != ChnlOffsetOf40MHz) ||
- (pHalData->nCur80MhzPrimeSC != ChnlOffsetOf80MHz) ||
- (pHalData->CurrentCenterFrequencyIndex1!= CenterFrequencyIndex1))
- {
- pHalData->bSetChnlBW = _TRUE;
- }
- }
- if(!pHalData->bSetChnlBW && !pHalData->bSwChnl)
- {
-
- return;
- }
- if(pHalData->bSwChnl)
- {
- pHalData->CurrentChannel=ChannelNum;
- pHalData->CurrentCenterFrequencyIndex1 = ChannelNum;
- }
-
- if(pHalData->bSetChnlBW)
- {
- pHalData->CurrentChannelBW = ChnlWidth;
- #if 0
- if(ExtChnlOffsetOf40MHz==EXTCHNL_OFFSET_LOWER)
- pHalData->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_UPPER;
- else if(ExtChnlOffsetOf40MHz==EXTCHNL_OFFSET_UPPER)
- pHalData->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_LOWER;
- else
- pHalData->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
- if(ExtChnlOffsetOf80MHz==EXTCHNL_OFFSET_LOWER)
- pHalData->nCur80MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_UPPER;
- else if(ExtChnlOffsetOf80MHz==EXTCHNL_OFFSET_UPPER)
- pHalData->nCur80MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_LOWER;
- else
- pHalData->nCur80MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
- #else
- pHalData->nCur40MhzPrimeSC = ChnlOffsetOf40MHz;
- pHalData->nCur80MhzPrimeSC = ChnlOffsetOf80MHz;
- #endif
- pHalData->CurrentCenterFrequencyIndex1 = CenterFrequencyIndex1;
- }
-
- if((!pDefAdapter->bDriverStopped) && (!pDefAdapter->bSurpriseRemoved))
- {
- phy_SwChnlAndSetBwMode8812(Adapter);
- }
- else
- {
- if(pHalData->bSwChnl)
- {
- pHalData->CurrentChannel = tmpChannel;
- pHalData->CurrentCenterFrequencyIndex1 = tmpChannel;
- }
- if(pHalData->bSetChnlBW)
- {
- pHalData->CurrentChannelBW = tmpBW;
- pHalData->nCur40MhzPrimeSC = tmpnCur40MhzPrimeSC;
- pHalData->nCur80MhzPrimeSC = tmpnCur80MhzPrimeSC;
- pHalData->CurrentCenterFrequencyIndex1 = tmpCenterFrequencyIndex1;
- }
- }
-
-
-
-
- }
- VOID
- PHY_SetBWMode8812(
- IN PADAPTER Adapter,
- IN CHANNEL_WIDTH Bandwidth,
- IN u8 Offset
- )
- {
- PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
-
- PHY_HandleSwChnlAndSetBW8812(Adapter, _FALSE, _TRUE, pHalData->CurrentChannel, Bandwidth, Offset, Offset, pHalData->CurrentChannel);
-
- }
- VOID
- PHY_SwChnl8812(
- IN PADAPTER Adapter,
- IN u8 channel
- )
- {
-
- PHY_HandleSwChnlAndSetBW8812(Adapter, _TRUE, _FALSE, channel, 0, 0, 0, channel);
-
- }
- VOID
- PHY_SetSwChnlBWMode8812(
- IN PADAPTER Adapter,
- IN u8 channel,
- IN CHANNEL_WIDTH Bandwidth,
- IN u8 Offset40,
- IN u8 Offset80
- )
- {
-
- PHY_HandleSwChnlAndSetBW8812(Adapter, _TRUE, _TRUE, channel, Bandwidth, Offset40, Offset80, channel);
-
- }
|