Linux 下wifi 驱动开发—— SDIO接口WiFi驱动浅析.docx

上传人:夺命阿水 文档编号:1466262 上传时间:2024-06-29 格式:DOCX 页数:16 大小:110.12KB
返回 下载 相关 举报
Linux 下wifi 驱动开发—— SDIO接口WiFi驱动浅析.docx_第1页
第1页 / 共16页
Linux 下wifi 驱动开发—— SDIO接口WiFi驱动浅析.docx_第2页
第2页 / 共16页
Linux 下wifi 驱动开发—— SDIO接口WiFi驱动浅析.docx_第3页
第3页 / 共16页
Linux 下wifi 驱动开发—— SDIO接口WiFi驱动浅析.docx_第4页
第4页 / 共16页
Linux 下wifi 驱动开发—— SDIO接口WiFi驱动浅析.docx_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《Linux 下wifi 驱动开发—— SDIO接口WiFi驱动浅析.docx》由会员分享,可在线阅读,更多相关《Linux 下wifi 驱动开发—— SDIO接口WiFi驱动浅析.docx(16页珍藏版)》请在课桌文档上搜索。

1、1.inux下wifi驱动开发(三)SDIO接口WiFi驱动浅析SDlO-Wifi极块是格I-SDIO接口的符合Wifi无废网络标准的微入式粒块,内JR无线网络协议IEEE802.11由议栈以及TCRlP办议栈.健济实现用户主平台数据通过SDKD:I到无线网络之间的整辄SDlCH!有恰轮救据快,兼存SD.MMC接I】琼特.点,对于SDlo接口的Wtn,首先,它是一个SdiO的卡的设符.然后典备了WiG的功健,所以,注册的时候还是先以sdi。的卡的设番去注册的.然后检测到卡之后就要蓼动他的VVifi功能了.iV.feHISdio的协议,通过发吩咐和致据束限制的.F面丸谕沾回Bi卜SDlO的相关学

2、同r一、S3。相关若破学向IW1、SDIOSDIo故名思义,就是SD的I/O技口(interface)的一照,不过这样说明可能还丁点抽像,更具体的说明.SDKl它是记忆卡的标准,但是现在也可以把SD家来插上-S外IB授口运用,这样的技术使aSDio.所以SDK)4号是朴相当用纯的技术,透过SO的l,O按却;fc连接外罂外Hb并只透过SD上的I,。数据接位与这些外IK传输数据.而I1.SD用会金倒也推出很完祭的SDIOstack浜动程序,使得SDIO外IH(我们称为SDIO卡的开发与应用变祖相当热门。现在已经有特别多的手机或是持装五都支拈SOlO的功能(SD杯准贩本就是针对mobiledevic

3、e而制定),而H很多SDIO外图也都放开发出来,让手机外接外阴更加荷洁,并且开发上更有弹性(不须要内建外围).目前常见的SDIO外IHSDK)卡)IfiWi-Ficard(无线网将卡-CMOSsensorcard(照相模块)GPScard GSM.lGPRSmodemcard BluetthcardSDK)的应用将是格来嵌入式系统4iR要的接【】技术之一,井Il也会取代HOTGPIO式的SPI接2、SDIOAikSDiO总线和USB总统类似.SDQ也有两端.其中一端是HOST端.W端足device端,全H的信部是由HOSTMI发送蛤咐HB先的,DeviceIt可以相互JaftC1.K信+H0$

4、T给OEVlCE的时神辅号,每个时钟周期传珀个吩附,CMD信明C向的俏叽C干传送CH和反应.DAT0-DAT3俏:四条用于传送的吹伽线.VDD俏号:电海伯号.VSS1.VSS2:电源地伯号.3、SDIOIMMUItS方法:K个定时检查或按中断检,使件:Ikuigpgio(日NTl8)用于SDk检测GPGlO为高电平G没行挂入SDKGPGlo为低电平固插入/SDK4,SDlO*附SDK)总我上都是HOST端发起为求,然后DEVICE瑞网底M求.Sdk)功由由6个字节织成.a-COmmand:用起先传输的吩的,是由HOST端发i?DEVICE端的.其中吩咐是通过CMD伯号线传送的.b-Respon

5、se:I-IDEVICE返回的HOST的吩怀作为CommandWll,也是通过CMD线传送的.C-Data:敬粼型双向的传送的.可以设列为1线校式.也可以设设为4找模式.数据是通过DATOQAT3倒当找传箱的.SDtO的毋次煤作蚓6由HOST在CMD及上发起一个CMD.对于有的CMD.DEVICE须要返回ReSPOnSe.仃的则不缴:要.对F读吩呐.首先HOSTADEVICE发送助时,紧接莉DEVICE会一回个援.号,此时.当HOST收到何府的烈r.;.会杉敬粼放在4位的数掂找上.在传送攻榭的同时会跟前茄CRC校验码.当链个读传送完毕后,HOST会野次发送个吩咐.通知DEVICE操作完毕.DE

6、VlCE同时会返网个啊应.对于写盼学计先HoST会向DEVICE发送物机J着DEVICE会i铀手倡号,此时.“1HOST收到M位的粗F信号后.会将IkM放在4(4的Kt掘我上.在传送数屈的同时会跟同芹CRC投S码.当隹个与传送完毕后.HoST会再次发送个吩咐.通知DEVICE操作完中.DEVlCE同时会这回个科应.二、SDI。接口现动前面讲到.SDlO接口的wi.首先.它是个sdi。的卡的设省.备了Wifi的功能,所以SDIOIirI的WiFi明动就是在所芈动外面套上了个SDlO郭动的外壳.SDIO期动仍I口符合七备罢动的分Ji与分JN星也役备出动层(wifi-各)I核心层(向上向下供应接口)

7、II:机郭动层(实现SDKD架动)卜面先分析SDlO按I1!Jh功的实现,R几个,Il变的数据拮构用了核心层。生机用动星的数据交换处现).1,lnclude1u11mc.host.hSIrUClmmCJTOSl用朱筠述卡JHiWittstructmmc_card用来描法卡structmmcdriver用来描述mmcf*jstructSdioJunc用来描述功能i2%Structmmc.host,ops用来描述F1制!S携作接【】出数功傕,用从把机以制器层向COrC层注册操作也致,从而将COrC层与具体的主机限制/隔肉.也就是说core要搽作主机限制毋,就用这个OPS当中给的函数指仔探作,不能留

8、/用具体上限制搭的沿11.HOST层杂动分析在前面的东列文章中1.inUXSOI:曲动开发(:)SO1:*:力分析HOSTRff具体阑逑,下面只淌洁回顾一下一些戒要函数处理1、MWHostXCtt这里.修整的是S3C24XX的HOSTlR功程序,1driversmmcosVs3cmci.cStaticStructPmfOrf1.drhfers3rTHlSJlaMXF,.prs$3cfici_p_ops,.ldtabic53oici_drlvcr_ids.p11eMSk_吟K,.一2务。,以门南合.renove_devexlt_p(s3crl-rerove),10.shutdo*11-s3ici

9、_shutdoMnt;1213. s3evkepdev)W.(XS./.16. structWKJXistr;17. me-w*c-alloc-hst(sizeof(structs3cnci-bost),4pdev-dev);,寸Tmh8t体18.19. /26. )21.22. 注仪中断杜卬汨软GaIcIrq%处教出也发AW引起的汴抑中的,23. r4qutjrq(host-1rq,(3cncl.lrq,DftIVERJUvirq-cdjHCrKi_irq_cd,IRQFJRlGGE氏RlSlNGIIRQFTKlGGERA1.Ilh6,WIVtRNAME.host)27.2Sfwcadd_h

10、ost(oc);/initialisehosthardware卜州coreii,host29. -dcvlco_ddd(&host-class_dcv);.(pm11nc-,dctcct-chngc(host,);34.35. SchedulcdelayedworkintheWCworkqueu国度H”工作队列/36. rfic_schcdulc_dclayed_iK)rk(ahostdctcct-delay);搜寻host-detected得到以下值息:drfvrsmm0,re,host.c)1. NIT-D1.AY1.0.M0RK(ah5t-detect,mc-rescan;2.3. mc

11、_bu$_put(hO5t);/drd从busM故它为,。找内川5.6. mWWmehn联濯岂古被占用,力加ECRUX黑段如被占用,爨么hocUlr-1;告用为。7. *殁如为1,那么幺在Glk(I)M环中调用schedule切拉出自上,与用r或器的蝶性先成之后,依freJrTNSQhxU)的叼蚁,含点落登记到净存认列&hsJM中的N他和MmMC点以黑衿的此阴根8. /9. nrc_clain_hst(hO5t);10. EJreS5_tryEhos1.r0xf.nin)t11.12. staticintrrrescan_try_freq(structmehosthot,IInSiKnedfr

12、eq)13(14. 315. OrdersmPortgK:proe$010,then$0,thenft*C/16. if(wc-attach-5dio(host)17. returne;18. if(!iwc_attach_$d(hott)19. return6;2.if(!wc_attach_mc(ho5t)21. return;22. 23)24.25. wc_attach_sdlo(structmsdiot:lI-26. -rwc_attdch_bu5(hott,&rfK_$dlo_op$);27.28. cdJ总筑卜的制动匹死,双柳始化rd”29. mrc_5dlo_lnit_card

13、(bost,hostocr,NU1.1.,);30. -ordEJaIIOC_crd(ho$t,NUll)jHt*cardrM,r,31. wc-5et.bus-node(host,WC_BU5OOt_PUSW1.1.);/i2TmebusIfJEC32.33. struct5dlo_func5dio-ur(SDI0-MAX-FUWCS);/SDXOfunctions(devices)34.35. u11card,11);36. funcsdio-alloc-unc(card);/tstructsdio-llounc(fn-IJ-fun.39.4.nmc_add_card(host-card)

14、;tf,dor?i!.Mc_bus_typcs,41.sdlo-ddunc(ho$t-card-dlo_fuc1J);杉WioH:0不:“fIWio_tHl1.tyKS总汴这里泵列斯数调用在Iim的SD驱动蚊怅中已的州述过r.不再具体阐述2、SDIO设冬的m当场拔SDlO设备,分触发中断通知到CPlh然后执行卡检/I中断处理函数在这个中断服务函数中,mmc_detect_change-mmc_schedute_delayed_work(&ho5t-detect,(Tyncescan)会谓收mmcescan用数延时调度作队列.这样也会触发SDIo设备的初始化菰理,松测到仃效的SDlOiQ备后,会

15、将它注册到系统中去.1. staticlrqreturn-ts3cfK13Nd(i11tf11bvoidadev.W)2. 3. structs3cnci-b5thost-(structs3c11ci-host)dcv-id;EJdetejmc,msc$_to_j1ff1es(5W);returnXRQ_HAKD1.ED;三、Wifi抬动分解析MH生动的通用的软件架构1,分为两部分,上面为1:机用*动.卜面是我们之就所说的HrmWarC2 .其中冏件1分的土要工作是:内为天&接殳和发送W米的拇是802.”他的博,而主机接受和传送出来的数据部必需是802,3WXl,所以必需由firmware来负

16、员802.3的偏和80211糊之间的传换3 .当天税收到数刖,并俄Mmwar。处理好后会放在一个buer*R,并产生一个中新,主机在收到中断后就2:读这个butter.SDO设备的版由SdioMriVer结构体定义,Sdio_tInVer其实是UHer的时装.通过sdio_register_driver,j4SDlO议备第,5加我迸内核K实就是挂收到SdIoJ)us_type总&卜&1、慢备网动的注与DaEDfiversl11etwelessllibertas.lif-sdio.c1. SDIOfunctiondevicedriver*/2.3. structsdlo-drivcr.hatb1

17、1a11e;二林幺5. conststructsdio-device.idid-table;各*虱ID6. Int(probc)(structsdio_unc.conststruct5dlo_dcvicc_id);1.Tm37. void(re;8. Strvctevle.drirobo,14. .rerov9-IJWegVQ,15. .drv9.pr-iif-sdio-pn-ops,0)U-);设台注册请数(cpp)”00t*n1.2. sdio-rcgi5tcr-drivcrregisterafunctiondriver3drv:SDIOfudrv.11artedrv-nare;9. dr

18、vdrv.bus-45dio_bus_typo;/i,H*driverbuslj5dlo_bus_typo10. returndriwr-rglstrdrv);U.)线的数1.2.staticstructbus_typctdlo_bus_typc.naf*-wsdio,3.dev-8ttrs三s1io-dev.attrs,4.natch-sdio-bus-11atchi5.ucvcnt-sdlo_bus_ucvent.6.probe-sdlo_bus_pro6e.7.renove*ic_bu5_regve.8.PG-SOIO.P,OPS.PTR,9.;fflfi:设名或齐业功注JH到系统中的过

19、程中,都会调用相包bus上的匹配函数来进行匹协作适的动或谷Q.对于sdo设备的典配金Ihsdlo_bus_matchfsdio_bus_probe函数来完成staticint5dio-bus-fiatch(structdevicedev,structdevice-driverdrv)3. structsdiouncunc-dcv_to_5dio_func(dcv);4. structsdio_drlver3rvto_$dlo_driver(drv);5. If(idio-atch-levice(fufKjdrv)6. return1;7.a.Zturn0;910.11. staticconst

20、structsdio_5cvicc_ldtdio_fiatch_dcvlcc(structsdlo-fncfuncr12. struct$dlo_driversdrv)8. 14. conststructsdio.device-idids;15. Ids-sdrvid_tablo;16.17. if(sdio_neth-one(fun,Ws)18. returnids;19.由以上腿比过程来行,通过匹配idJabJe和Sa(IdnVeri2备胆,劝中id,来因协作道的奖励或设备,.M终会调用.RgeMtt来完成相关操作.2、tt_sdlo_probeS*,flflsdoN担入了之后就会用用lf

21、_sdio_probe,而当卡祓移除就公词用I1.SdIojemove硬件层产而光fi吓I1.Sdl。.Probet总数,I1.sdiojxob函数上要做门呵件犷StNkstructsdic,rl*rif-sdlo-driver(.11areIibUE-.id,tablcardhst;17.U育女足皆有指定的财皖寄存道AmC18./_sdio_CArd中10.for(1-e;icardnun_lnfo;1)(20.Sf(ssonf(furx-ihfoi,21.22.”802.11SDIOID:%xSMI)-123.在出服Ii打片送珏*卦我不i用的MrVCl8686的&备24.case”01_8

22、36:2S.26.27.card-scratch,rcIF-SOIO-SCRATCH;2S./fiHtsdio的匚作M列29.CardWorkqueveCreatJMOrkQUeUeHbeEudio,);3.调用下面的函数31.32.31.IMlT-MORK(lcrd-pketorker,“_Wio_hosJto_c3rd_worfc);34.主机到卡的工伸队开35.36staticvoidif_$dlo_h&$t_to_CArd_work*r(ttmctvor*_$tru5W8686_M1X.”CdB686.bln39.fw.tble中的H0Ml.8686,sd866.helper.binw

23、,sd8686.bl11,40.for(i0;1fdel*fw-table(i).ncel)42.break;43.)44.45.46.NOOEI_8688,-Mbertssd86,helpe,binM,-UKres谢热bin”47.中他个host48.Sdi181IhOSt(fUM);49. /(%Sdlo的功籍寄存代5.ret-sdio_cnablc_func(func);51. if(rt)52. gotorelease;5J.54. 2/Ipiflidio的,吩m是事务的时向执行刎Ii55. retlio_cUln_lrq(func,if_tdio_lnxerrupt);ret-if-

24、sdio-card.to.h5t(carl);Mk到IU二卅57. ret-lbudl_cnd(card,crdbu-。r4,chunk-4);也八IitJwZNM59. ret三H_dlo_hardle_event(card,buffdev);64.65. 女EVwrnM设备并注明66. m5cv-lbs_cg_allocdrdcv);67. 862无拄MftUIH1的检件咕数典veev-wlyVdPhy_MW,lbs_”的211_ops,Ueof(strictlbs.privte);69.7.71. ”安样网络设备是整个M珞端分操作的72. 的核心”尚体73. dev-lloc-nctdc

25、v(e,*Ml0nXd*,cthor_sctup);:M化dan的见并74. dev-lcccse211_ptrHdcv;75. gveljr!v-riv;76. 设/设备的物理地址77. SET.NEIDEVj)EV(dev.dndev);78. 3cvnctdcv-dev;79. prlvdv-dev;80. 初帕化N络议备85.4t(Ifi81. dcvnctdcv-ps-aibs_nctdc_op5;/外4络气分的Il悴的注fl82. dev-wtchdog-tIjico-5HZ;83. dv-thtool-ops-aib$_thtool_ops;84. dev-flacs|I“_BR

26、OADCASTIFF.HJ1.T1CAST;!橹女匕M85.86.87.88. 个内核纹理朱竹”这个M珞自笈的执发您事务的处JTI:的放比伸做卅时的处PI89. privfai11,thred*kthread.r11(lb5.tbread,dev,lbrain);00.初#化相关的1.性以外Ol-prlvork-trwd-CrMtQ.Gnglehz;IdrorICqgUIbjgrkor);92INIT_W0KS_set_ro$t_vorter);93. privHWE-kAK1.UP;94. privol-gplo-uol_gap-20;96. priv-eh$_rhw-host-to-car

27、d*if-三dio-b5t-to-,card;12.priv-cntcr_dccp_51ccp-lQXfj80p_SlSp-SJWiCfXlJd8p_10”;1M,priv-reset_de.$leep_viakeup三i-dlo.reset-de,slee-weup;10S.sdio-claim-host(func);16.107.,塔劝F设尔18.retlbs-SUrt-Cr8v);112. err三y1stJnerdeVke(dev);113.114.115. /HIiirjwHi设5*功功能116. 明络出在憔作的父幺版效117. staticcontstruct11et-ut-ltH

28、-tx-tlfWvt,力123. .fdo_骏JeUltkasJllstIbS_3et_rultk3SJUst,/MttI址124. .rdo-chage-11tueth-cha11e-mtuj心KWln儿125. .ndo_valldatc_addrcth_valldatc_agJIandler=if_sdio_interrupt.当s3cmcijrq中断处理雨数的S3C2410_SDIIK4SK_SDIOIRO中断破触发时将调用if_sdiOjnterrUp(O函数.进行接收故KstaticVOidif-sdio-,interrpt(structsdio.funcfunc)3. rt-/从

29、无线网I角口。我Z义及I.报联4. :W&门上的数先,成到Srd的buff中5. ret-sdio_afunc,Crdbuffcrzcard-ioport/chunk);6. 1.在这W方由处理中新ft27switch(type)(处MSdbuffer4,chunk-4);如t川*的小中Ittl.K(rot)11.gotoout;12. break;13. caseMVnSJM1:14. rot-if_sdlo_handlc_datatufcr4,chunk4);/,/tH,;,:15. “(CQt)16. gotoout;17. break;18. caseKVKS_EVEMT:19. re

30、t-tf_sdlo_handInvent(card,ordbu*er*4,chunk-4)j,l,iHH20.21. 论发包俯近日22. Ib5_proco55_rxcd_packct(card-prlvtskb);2324. 俯S*中Ift.我杷5kb送个包代交法由iZM送个嫉皎兄25. 眇说以世应的netif-rx(5kb)26. U(in-intcrrut()27. netif-rxrI31. 21$dlo_r*ad$b(cardfunc,crdbuf*r,card-loort,chunk);32. 诜娘4/1的地址,教M$33i11tsdio,rcadsb(5tructidio_fun

31、cfc,voiddst,unsignedi11taddrji11tcount)34.35returnd1o_lo_rm_xt_h1r(funci%addr,dst,count);36.37. retmc-Bio_nf_extended(func-card/YriyfUnC1111,Dddr,increaddr,buf,blocks,funccur-blksizc);38. cod.rg-write?8Geeaae:eaeeae;39.40. Maitforrequest41. mc-*it-lor-rcq(cardhst,&vrq);42.4J.起融答EJStarJregSt(host,Crq

32、);44Mit-for-corequest(ho(tfnrq);4、99(cpp).*a.ce3.4. if(!netif.tx_qucue_stoppl(txq)5. _thU-cu-lnc(xmit-rcur51on);6. 世益欢起先发送?rrxk),strtjmlt($kb,ev);11.12. dcvnctdcv-ps-41bs_nctdcv_op5;/i7ir.A11t13.14. 处PfsFM-hoftt,to-ardtc_pnding_bufrrlv-tx,pndlng-ln);19. 为什么是if_sdlo_to_hO5t懦mi(prb由口中左乂ft28. 设置主机发送欧JK

33、到上21. prlv-hM_ho$t_to_crd-1_sdlo_bo$t-to-card;22.23. staticIntif_5dlo_bo5t_to_card(strictlbseprivateprlvtuBtype,u8bufru!611b24. 杷bbuffer%buf,nb);26. 创it工作队到27. qucuc_Mork(card-workqucu.Acard-packct_uorkcr);28. 桁始化队列29INIT_W(WK(8pMket_M0rker,if_dlo_ho$t_to_Ioport,pAbu*fr,packetnb);33. 展门34. retme_io.

34、rw_extended(func-cardzwrite,func-11ufi/oddrrincr-oddr,buf,blocks,funccur-blksl2c;3536373839we41424J444$4647/waitforrequestm_wait_for_rq(carho$t,Rnrq);crqKonjdataAcodonc-imc_nait_donc;Ej穴jequQSt(hxt,11rq);完成导恬故奴丛我wit-forco11pleti(8rcorplete);host-osreest(host,erq);咒党就耒发送教抠5、力s&ok拔除时.集动仑词用诊的数.完成相鹿操作.如郁故A.仃的贾泡.禁止func功能函数.煤放host.if_sdio_ro(structsdlouncunc-lbs.stcp.Crd(priv);lbs_rerove_card(cdrd-priv;.kthread_$top(priv-nai-thread);+V-,lbsr.1pter(priv);lb5.cfgfree(priv);frcc-nctdcvdcv);10. flus-orkqueue(Cdrd-Mwrkqueue);CClR的11. de5troy_

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号