Thread: [zd1211-devs] New Source Code Contribution From ZyDAS
Status: Beta
Brought to you by:
mayne
From: Markus K. <mar...@gm...> - 2005-05-10 15:56:35
Attachments:
ZD1211LnxRelNote_1_2_7_0.doc
ZD1211LnxDrv_1_2_7_0.tar.gz
|
Hi all, ZyDAS sent me some code under GPL that we may incorporate to our code base. Have a look at the attached files. Have Fun Markus |
From: Jose P. <jos...@al...> - 2005-05-10 18:43:18
|
hi, but version uploaded by Mike is 1.4.0.0, why this old version (1.2.7.0) from Zydas guys! regards > -----Mensaje original----- > De: zd1...@li...=20 > [mailto:zd1...@li...] En nombre de=20 > Markus Karg > Enviado el: martes, 10 de mayo de 2005 18:02 > Para: zd1...@li... > Asunto: [zd1211-devs] New Source Code Contribution From ZyDAS >=20 >=20 > Hi all, >=20 > ZyDAS sent me some code under GPL that we may incorporate to=20 > our code base.=20 > Have a look at the attached files. >=20 > Have Fun > Markus >=20 > __________ Informaci=F3n de NOD32 1.1086 (20050502) __________ >=20 > Este mensaje ha sido analizado con NOD32 antivirus system=20 http://www.nod32.com __________ Informaci=F3n de NOD32 1.1086 (20050502) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com |
From: Albert R. <al...@ir...> - 2005-05-10 19:42:06
|
Upon closer examination, it looks like 1.2.7.0 is indeed newer than 1.4.0.0 ;-) You didn't think so, eh? = I.e. at zd1205.c:zd1205_sleep_reset they seemed to fix a semaphore bug. Luckly for us, there're not much code changed between these two, most of it is just formatting (new lines, idents, white spaces, comments) and commented out pieces of debugging junk. -albertr = Jose Pascual writes: = > hi, = > = > but version uploaded by Mike is 1.4.0.0, why this old version (1.2.7.0)= > from Zydas guys=21 = > = > regards = > = >> -----Mensaje original----- >> De: zd1211-devs-admin=40lists.sourceforge.net = >> =5Bmailto:zd1211-devs-admin=40lists.sourceforge.net=5D En nombre de = >> Markus Karg >> Enviado el: martes, 10 de mayo de 2005 18:02 >> Para: zd1211-devs=40lists.sourceforge.net >> Asunto: =5Bzd1211-devs=5D New Source Code Contribution From ZyDAS = >> = >> = >> Hi all, = >> = >> ZyDAS sent me some code under GPL that we may incorporate to = >> our code base. = >> Have a look at the attached files. = >> = >> Have Fun >> Markus = >> = >> __________ Informaci=F3n de NOD32 1.1086 (20050502) __________ = >> = >> Este mensaje ha sido analizado con NOD32 antivirus system = > http://www.nod32.com = > = > = > = > __________ Informaci=F3n de NOD32 1.1086 (20050502) __________ = > = > Este mensaje ha sido analizado con NOD32 antivirus system > http://www.nod32.com = > = > = > = > = > ------------------------------------------------------- > This SF.Net email is sponsored by Oracle Space Sweepstakes > Want to be the first software developer in space? > Enter now for the Oracle Space Sweepstakes=21 > http://ads.osdn.com/?ad_ids93&alloc_id=16281&opclick > _______________________________________________ > Zd1211-devs mailing list > Zd1211-devs=40lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/zd1211-devs = > = = |
From: Albert R. <al...@ir...> - 2005-05-10 20:07:08
|
FYI, WPA support was removed from 1.2.7.0. I would guess it shouldn't be difficult to merge it back from 1.4.0.0. = Albert Rybalkin writes: = > Upon closer examination, it looks like 1.2.7.0 is indeed newer than > 1.4.0.0 ;-) You didn't think so, eh? = > = > I.e. at zd1205.c:zd1205_sleep_reset they seemed to fix a semaphore bug.= > Luckly for us, there're not much code changed between these two, most o= f > it is just formatting (new lines, idents, white spaces, comments) and > commented out pieces of debugging junk. > -albertr = > = > Jose Pascual writes: = > = >> hi, = >> = >> but version uploaded by Mike is 1.4.0.0, why this old version (1.2.7.0= ) >> from Zydas guys=21 = >> = >> regards = >> = >>> -----Mensaje original----- >>> De: zd1211-devs-admin=40lists.sourceforge.net = >>> =5Bmailto:zd1211-devs-admin=40lists.sourceforge.net=5D En nombre de M= arkus = >>> Karg >>> Enviado el: martes, 10 de mayo de 2005 18:02 >>> Para: zd1211-devs=40lists.sourceforge.net >>> Asunto: =5Bzd1211-devs=5D New Source Code Contribution From ZyDAS = >>> = >>> = >>> Hi all, = >>> = >>> ZyDAS sent me some code under GPL that we may incorporate to our code= = >>> base. Have a look at the attached files. = >>> = >>> Have Fun >>> Markus = >>> = >>> __________ Informaci=F3n de NOD32 1.1086 (20050502) __________ = >>> = >>> Este mensaje ha sido analizado con NOD32 antivirus system >> http://www.nod32.com = >> = >> = >> = >> __________ Informaci=F3n de NOD32 1.1086 (20050502) __________ = >> = >> Este mensaje ha sido analizado con NOD32 antivirus system >> http://www.nod32.com = >> = >> = >> = >> = >> ------------------------------------------------------- >> This SF.Net email is sponsored by Oracle Space Sweepstakes >> Want to be the first software developer in space? >> Enter now for the Oracle Space Sweepstakes=21 >> http://ads.osdn.com/?ad_ids93&alloc_id=16281&opclick >> _______________________________________________ >> Zd1211-devs mailing list >> Zd1211-devs=40lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/zd1211-devs = >> = > = > = > = > = > ------------------------------------------------------- > This SF.Net email is sponsored by Oracle Space Sweepstakes > Want to be the first software developer in space? > Enter now for the Oracle Space Sweepstakes=21 > http://ads.osdn.com/?ad_ids93&alloc_id=16281&opclick > _______________________________________________ > Zd1211-devs mailing list > Zd1211-devs=40lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/zd1211-devs = > = = |
From: Jose P. <jos...@al...> - 2005-05-11 09:03:28
|
So, There is to choose to port diff from 1.2.7.0 or 1.4.0.0 or from 1.4.0.0 to 1.2.7.0 ;-) but What will zydas guys will be doing in the future going on working on 1.4.0.0 or 1.2.7.0 or ...? ;-) > -----Mensaje original----- > De: zd1...@li...=20 > [mailto:zd1...@li...] En nombre de=20 > Albert Rybalkin > Enviado el: martes, 10 de mayo de 2005 22:07 > Para: Albert Rybalkin > CC: Jose Pascual; 'Markus Karg'; zd1...@li... > Asunto: [zd1211-devs] Re: New Source Code Contribution From ZyDAS >=20 >=20 > FYI, WPA support was removed from 1.2.7.0. I would guess it=20 > shouldn't be difficult to merge it back from 1.4.0.0.=20 >=20 > Albert Rybalkin writes:=20 >=20 > > Upon closer examination, it looks like 1.2.7.0 is indeed newer than=20 > > 1.4.0.0 ;-) You didn't think so, eh? > >=20 > > I.e. at zd1205.c:zd1205_sleep_reset they seemed to fix a semaphore=20 > > bug. Luckly for us, there're not much code changed between=20 > these two,=20 > > most of it is just formatting (new lines, idents, white spaces,=20 > > comments) and commented out pieces of debugging junk. -albertr > >=20 > > Jose Pascual writes: > >=20 > >> hi, > >>=20 > >> but version uploaded by Mike is 1.4.0.0, why this old version=20 > >> (1.2.7.0) from Zydas guys! > >>=20 > >> regards > >>=20 > >>> -----Mensaje original----- > >>> De: zd1...@li... > >>> [mailto:zd1...@li...] En=20 > nombre de Markus=20 > >>> Karg > >>> Enviado el: martes, 10 de mayo de 2005 18:02 > >>> Para: zd1...@li... > >>> Asunto: [zd1211-devs] New Source Code Contribution From ZyDAS =20 > >>>=20 > >>>=20 > >>> Hi all, > >>>=20 > >>> ZyDAS sent me some code under GPL that we may incorporate to our=20 > >>> code > >>> base. Have a look at the attached files. =20 > >>>=20 > >>> Have Fun > >>> Markus > >>>=20 > >>> __________ Informaci=F3n de NOD32 1.1086 (20050502) __________ > >>>=20 > >>> Este mensaje ha sido analizado con NOD32 antivirus system > >> http://www.nod32.com > >>=20 > >> =20 > >>=20 > >> __________ Informaci=F3n de NOD32 1.1086 (20050502) __________ > >>=20 > >> Este mensaje ha sido analizado con NOD32 antivirus system=20 > >> http://www.nod32.com > >>=20 > >> =20 > >>=20 > >>=20 > >> ------------------------------------------------------- > >> This SF.Net email is sponsored by Oracle Space Sweepstakes=20 > Want to be=20 > >> the first software developer in space? Enter now for the=20 > Oracle Space=20 > >> Sweepstakes! http://ads.osdn.com/?ad_ids93&alloc_id=16281&opclick > >> _______________________________________________ > >> Zd1211-devs mailing list > >> Zd1...@li... > >> https://lists.sourceforge.net/lists/listinfo/zd1211-devs =20 > >>=20 > > =20 > >=20 > > =20 > >=20 > > ------------------------------------------------------- > > This SF.Net email is sponsored by Oracle Space Sweepstakes=20 > Want to be=20 > > the first software developer in space? Enter now for the=20 > Oracle Space=20 > > Sweepstakes! http://ads.osdn.com/?ad_ids93&alloc_id=16281&opclick > > _______________________________________________ > > Zd1211-devs mailing list > > Zd1...@li... > > https://lists.sourceforge.net/lists/listinfo/zd1211-devs=20 > >=20 > =20 >=20 >=20 >=20 > ------------------------------------------------------- > This SF.Net email is sponsored by Oracle Space Sweepstakes > Want to be the first software developer in space? > Enter now for the Oracle Space Sweepstakes!=20 > http://ads.osdn.com/?ad_ids93&alloc_id=16281> &op=3Dick >=20 > _______________________________________________ >=20 > Zd1211-devs mailing list > Zd1...@li...=20 > https://lists.sourceforge.net/lists/listinfo/zd> 1211-devs >=20 >=20 > __________ Informaci=F3n de NOD32 1.1086 (20050502)=20 > __________ >=20 > Este mensaje ha sido analizado con NOD32 antivirus system=20 http://www.nod32.com __________ Informaci=F3n de NOD32 1.1086 (20050502) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com |
From: Albert R. <al...@ir...> - 2005-05-11 13:38:20
|
Jose Pascual writes: = > So, There is to choose to port diff from 1.2.7.0 or 1.4.0.0 or from > 1.4.0.0 to 1.2.7.0 ;-) = > = > but What will zydas guys will be doing in the future going on working o= n > 1.4.0.0 or 1.2.7.0 or ...? ;-) = > = That's a good question. I would guess (and Marcus can probably verify it)= that they are still determined to work on this driver under closed doors.= If so, then they would probably release updated versions from time to time. = Now back to your other question - I think the answer depends on what release 1.4.0.0 was. Was it a special release to get WPA working for some customer? Which version ZyDAS would continue to develop - 1.2.7.0 or 1.4.0.0? Maybe both? Marcus, could you try to get answers to these questions from your contact at ZyDAS? = -albertr = > = > = >> -----Mensaje original----- >> De: zd1211-devs-admin=40lists.sourceforge.net = >> =5Bmailto:zd1211-devs-admin=40lists.sourceforge.net=5D En nombre de = >> Albert Rybalkin >> Enviado el: martes, 10 de mayo de 2005 22:07 >> Para: Albert Rybalkin >> CC: Jose Pascual; 'Markus Karg'; zd1211-devs=40lists.sourceforge.net >> Asunto: =5Bzd1211-devs=5D Re: New Source Code Contribution From ZyDAS = = >> = >> = >> FYI, WPA support was removed from 1.2.7.0. I would guess it = >> shouldn't be difficult to merge it back from 1.4.0.0. = >> = >> Albert Rybalkin writes: = >> = >> > Upon closer examination, it looks like 1.2.7.0 is indeed newer than = = >> > 1.4.0.0 ;-) You didn't think so, eh? >> > = >> > I.e. at zd1205.c:zd1205_sleep_reset they seemed to fix a semaphore = >> > bug. Luckly for us, there're not much code changed between = >> these two, = >> > most of it is just formatting (new lines, idents, white spaces, = >> > comments) and commented out pieces of debugging junk. -albertr >> > = >> > Jose Pascual writes: >> > = >> >> hi, >> >> = >> >> but version uploaded by Mike is 1.4.0.0, why this old version = >> >> (1.2.7.0) from Zydas guys=21 >> >> = >> >> regards >> >> = >> >>> -----Mensaje original----- >> >>> De: zd1211-devs-admin=40lists.sourceforge.net >> >>> =5Bmailto:zd1211-devs-admin=40lists.sourceforge.net=5D En = >> nombre de Markus = >> >>> Karg >> >>> Enviado el: martes, 10 de mayo de 2005 18:02 >> >>> Para: zd1211-devs=40lists.sourceforge.net >> >>> Asunto: =5Bzd1211-devs=5D New Source Code Contribution From ZyDAS = = >> >>> = >> >>> = >> >>> Hi all, >> >>> = >> >>> ZyDAS sent me some code under GPL that we may incorporate to our = >> >>> code >> >>> base. Have a look at the attached files. = >> >>> = >> >>> Have Fun >> >>> Markus >> >>> = >> >>> __________ Informaci=F3n de NOD32 1.1086 (20050502) __________ >> >>> = >> >>> Este mensaje ha sido analizado con NOD32 antivirus system >> >> http://www.nod32.com >> >> = >> >> = >> >> = >> >> __________ Informaci=F3n de NOD32 1.1086 (20050502) __________ >> >> = >> >> Este mensaje ha sido analizado con NOD32 antivirus system = >> >> http://www.nod32.com >> >> = >> >> = >> >> = >> >> = >> >> ------------------------------------------------------- >> >> This SF.Net email is sponsored by Oracle Space Sweepstakes = >> Want to be = >> >> the first software developer in space? Enter now for the = >> Oracle Space = >> >> Sweepstakes=21 http://ads.osdn.com/?ad_ids93&alloc_id=16281&opclick= >> >> _______________________________________________ >> >> Zd1211-devs mailing list >> >> Zd1211-devs=40lists.sourceforge.net >> >> https://lists.sourceforge.net/lists/listinfo/zd1211-devs = >> >> = >> > = >> > = >> > = >> > = >> > ------------------------------------------------------- >> > This SF.Net email is sponsored by Oracle Space Sweepstakes = >> Want to be = >> > the first software developer in space? Enter now for the = >> Oracle Space = >> > Sweepstakes=21 http://ads.osdn.com/?ad_ids93&alloc_id=16281&opclick >> > _______________________________________________ >> > Zd1211-devs mailing list >> > Zd1211-devs=40lists.sourceforge.net >> > https://lists.sourceforge.net/lists/listinfo/zd1211-devs = >> > = >> = >> = >> = >> = >> ------------------------------------------------------- >> This SF.Net email is sponsored by Oracle Space Sweepstakes >> Want to be the first software developer in space? >> Enter now for the Oracle Space Sweepstakes=21 = >> http://ads.osdn.com/?ad_ids93&alloc_id=16281> &op=3Dick = >> = >> _______________________________________________ = >> = >> Zd1211-devs mailing list >> Zd1211-devs=40lists.sourceforge.net = >> https://lists.sourceforge.net/lists/listinfo/zd> 1211-devs = >> = >> = >> __________ Informaci=F3n de NOD32 1.1086 (20050502) = >> __________ = >> = >> Este mensaje ha sido analizado con NOD32 antivirus system = > http://www.nod32.com = > = > = > = > __________ Informaci=F3n de NOD32 1.1086 (20050502) __________ = > = > Este mensaje ha sido analizado con NOD32 antivirus system > http://www.nod32.com = > = > = > = > ------------------------------------------------------- > This SF.Net email is sponsored by Oracle Space Sweepstakes > Want to be the first software developer in space? > Enter now for the Oracle Space Sweepstakes=21 > http://ads.osdn.com/?ad_ids93&alloc_id=16281&opclick > _______________________________________________ > Zd1211-devs mailing list > Zd1211-devs=40lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/zd1211-devs = > = = |
From: Dmitriy K. <kor...@to...> - 2005-05-11 18:27:11
|
Guys, why should we care about versions of ZyDAS code? Why you don't=20 want to participate in the new driver generation? Regards, Albert Rybalkin wrote: > Jose Pascual writes: > >> So, There is to choose to port diff from 1.2.7.0 or 1.4.0.0 or from >> 1.4.0.0 to 1.2.7.0 ;-) >> but What will zydas guys will be doing in the future going on working = on >> 1.4.0.0 or 1.2.7.0 or ...? ;-) > > > That's a good question. I would guess (and Marcus can probably verify i= t) > that they are still determined to work on this driver under closed door= s. > If so, then they would probably release updated versions from time to > time. > Now back to your other question - I think the answer depends on what > release 1.4.0.0 was. Was it a special release to get WPA working > for some customer? Which version ZyDAS would continue to develop - > 1.2.7.0 or 1.4.0.0? Maybe both? Marcus, could you try to get answers > to these questions from your contact at ZyDAS? > -albertr > >> =20 >> >>> -----Mensaje original----- >>> De: zd1...@li...=20 >>> [mailto:zd1...@li...] En nombre de Albert=20 >>> Rybalkin >>> Enviado el: martes, 10 de mayo de 2005 22:07 >>> Para: Albert Rybalkin >>> CC: Jose Pascual; 'Markus Karg'; zd1...@li... >>> Asunto: [zd1211-devs] Re: New Source Code Contribution From ZyDAS >>> >>> FYI, WPA support was removed from 1.2.7.0. I would guess it=20 >>> shouldn't be difficult to merge it back from 1.4.0.0.=20 >>> Albert Rybalkin writes:=20 >>> > Upon closer examination, it looks like 1.2.7.0 is indeed newer=20 >>> than > 1.4.0.0 ;-) You didn't think so, eh? >>> > > I.e. at zd1205.c:zd1205_sleep_reset they seemed to fix a=20 >>> semaphore > bug. Luckly for us, there're not much code changed=20 >>> between these two, > most of it is just formatting (new lines,=20 >>> idents, white spaces, > comments) and commented out pieces of=20 >>> debugging junk. -albertr >>> > > Jose Pascual writes: >>> > >> hi, >>> >> >> but version uploaded by Mike is 1.4.0.0, why this old version=20 >>> >> (1.2.7.0) from Zydas guys! >>> >> >> regards >>> >> >>> -----Mensaje original----- >>> >>> De: zd1...@li... >>> >>> [mailto:zd1...@li...] En nombre de=20 >>> Markus >>> Karg >>> >>> Enviado el: martes, 10 de mayo de 2005 18:02 >>> >>> Para: zd1...@li... >>> >>> Asunto: [zd1211-devs] New Source Code Contribution From ZyDAS =20 >>> >>> >>> >>> Hi all, >>> >>> >>> ZyDAS sent me some code under GPL that we may incorporate to=20 >>> our >>> code >>> >>> base. Have a look at the attached files. >>> >>> Have Fun >>> >>> Markus >>> >>> >>> __________ Informaci=F3n de NOD32 1.1086 (20050502) _________= _ >>> >>> >>> Este mensaje ha sido analizado con NOD32 antivirus system >>> >> http://www.nod32.com >>> >> >> >> >> __________ Informaci=F3n de NOD32 1.1086 (20050502)=20 >>> __________ >>> >> >> Este mensaje ha sido analizado con NOD32 antivirus system >>=20 >>> http://www.nod32.com >>> >> >> >> >> >>=20 >>> ------------------------------------------------------- >>> >> This SF.Net email is sponsored by Oracle Space Sweepstakes Want=20 >>> to be >> the first software developer in space? Enter now for the=20 >>> Oracle Space >> Sweepstakes!=20 >>> http://ads.osdn.com/?ad_ids93&alloc_id=16281&opclick >>> >> _______________________________________________ >>> >> Zd1211-devs mailing list >>> >> Zd1...@li... >>> >> https://lists.sourceforge.net/lists/listinfo/zd1211-devs >> > >=20 >>> > > > ------------------------------------------------------- >>> > This SF.Net email is sponsored by Oracle Space Sweepstakes Want to=20 >>> be > the first software developer in space? Enter now for the Oracle=20 >>> Space > Sweepstakes! http://ads.osdn.com/?ad_ids93&alloc_id=16281&opc= lick >>> > _______________________________________________ >>> > Zd1211-devs mailing list >>> > Zd1...@li... >>> > https://lists.sourceforge.net/lists/listinfo/zd1211-devs > =20 >>> =20 >>> >>> ------------------------------------------------------- >>> This SF.Net email is sponsored by Oracle Space Sweepstakes >>> Want to be the first software developer in space? >>> Enter now for the Oracle Space Sweepstakes!=20 >>> http://ads.osdn.com/?ad_ids93&alloc_id=16281> &op=3Dick >>> _______________________________________________ >>> Zd1211-devs mailing list >>> Zd1...@li...=20 >>> https://lists.sourceforge.net/lists/listinfo/zd> 1211-devs >>> >>> __________ Informaci=F3n de NOD32 1.1086 (20050502) __________ >>> Este mensaje ha sido analizado con NOD32 antivirus system=20 >> >> http://www.nod32.com >> =20 >> >> __________ Informaci=F3n de NOD32 1.1086 (20050502) __________ >> Este mensaje ha sido analizado con NOD32 antivirus system >> http://www.nod32.com >> =20 >> >> ------------------------------------------------------- >> This SF.Net email is sponsored by Oracle Space Sweepstakes >> Want to be the first software developer in space? >> Enter now for the Oracle Space Sweepstakes! >> http://ads.osdn.com/?ad_ids93&alloc_id=16281&opclick >> _______________________________________________ >> Zd1211-devs mailing list >> Zd1...@li... >> https://lists.sourceforge.net/lists/listinfo/zd1211-devs > > > > > > ------------------------------------------------------- > This SF.Net email is sponsored by Oracle Space Sweepstakes > Want to be the first software developer in space? > Enter now for the Oracle Space Sweepstakes! > http://ads.osdn.com/?ad_ids93&alloc_id=16281&op=CCk > _______________________________________________ > Zd1211-devs mailing list > Zd1...@li... > https://lists.sourceforge.net/lists/listinfo/zd1211-devs > --=20 Dmitriy |
From: Markus K. <mar...@gm...> - 2005-05-11 19:11:32
|
Guys, please remind that the code that ZyDAS provided is just a gift from their=20 internal development team. Their driver is neither a branch nor a split of= =20 ours. Just think of them developing their own driver and letting us have so= me=20 insight from time to time. If you want to copy some parts, do that, it's GP= L.=20 If you think it is useless, throw it away. But ZyDAS will NEVER participate= =20 to our developments directly, NOR will their version numbers be in any sync= =20 with ours. Markus Am Mittwoch, 11. Mai 2005 20:32 schrieben Sie: > IMHO the code from ZyDAS has valuable information on zd1211 hardware. > Since I don't even have an access to ZyDAS technical documents, > that code is the only source of information for me to learn from. > -albertr > > Dmitriy Korovkin writes: > > Guys, why should we care about versions of ZyDAS code? Why you don't wa= nt > > to participate in the new driver generation? > > Regards, > > > > Albert Rybalkin wrote: > >> Jose Pascual writes: > >>> So, There is to choose to port diff from 1.2.7.0 or 1.4.0.0 or from > >>> 1.4.0.0 to 1.2.7.0 ;-) > >>> but What will zydas guys will be doing in the future going on working > >>> on 1.4.0.0 or 1.2.7.0 or ...? ;-) > >> > >> That's a good question. I would guess (and Marcus can probably verify > >> it) that they are still determined to work on this driver under closed > >> doors. If so, then they would probably release updated versions from > >> time to time. > >> Now back to your other question - I think the answer depends on what > >> release 1.4.0.0 was. Was it a special release to get WPA working > >> for some customer? Which version ZyDAS would continue to develop - > >> 1.2.7.0 or 1.4.0.0? Maybe both? Marcus, could you try to get answers > >> to these questions from your contact at ZyDAS? > >> -albertr > >> > >>>> -----Mensaje original----- > >>>> De: zd1...@li... > >>>> [mailto:zd1...@li...] En nombre de Albert > >>>> Rybalkin > >>>> Enviado el: martes, 10 de mayo de 2005 22:07 > >>>> Para: Albert Rybalkin > >>>> CC: Jose Pascual; 'Markus Karg'; zd1...@li... > >>>> Asunto: [zd1211-devs] Re: New Source Code Contribution From ZyDAS > >>>> > >>>> FYI, WPA support was removed from 1.2.7.0. I would guess it shouldn't > >>>> be difficult to merge it back from 1.4.0.0. Albert Rybalkin writes: > > >>>> Upon closer examination, it looks like 1.2.7.0 is indeed newer than > > >>>> 1.4.0.0 ;-) You didn't think so, eh? > >>>> > >>>> > > I.e. at zd1205.c:zd1205_sleep_reset they seemed to fix a semapho= re > >>>> > > >>>> > bug. Luckly for us, there're not much code changed between these > >>>> > two, most of it is just formatting (new lines, idents, white space= s, > >>>> > > > >>>> > >>>> comments) and commented out pieces of debugging junk. -albertr > >>>> > >>>> > > Jose Pascual writes: > >>>> > >> hi, > >>>> > >> > >>>> >> >> but version uploaded by Mike is 1.4.0.0, why this old version = >> > >>>> > >>>> (1.2.7.0) from Zydas guys! > >>>> > >>>> >> >> regards > >>>> >> >> > >>>> >> >>> -----Mensaje original----- > >>>> >>> > >>>> >>> De: zd1...@li... > >>>> >>> [mailto:zd1...@li...] En nombre de > >>>> > >>>> Markus >>> Karg > >>>> > >>>> >>> Enviado el: martes, 10 de mayo de 2005 18:02 > >>>> >>> Para: zd1...@li... > >>>> >>> Asunto: [zd1211-devs] New Source Code Contribution From ZyDAS >= >> > >>>> >>> > >>>> >>> >>> Hi all, > >>>> >>> >>> ZyDAS sent me some code under GPL that we may incorporate to > >>>> > >>>> our >>> code > >>>> > >>>> >>> base. Have a look at the attached files. >>> >>> Have Fun > >>>> >>> Markus > >>>> >>> > >>>> >>> >>> __________ Informaci=F3n de NOD32 1.1086 (20050502) ________= __ > >>>> >>> >>> Este mensaje ha sido analizado con NOD32 antivirus system > >>>> >> > >>>> >> http://www.nod32.com > >>>> >> > >>>> >> >> >> >> __________ Informaci=F3n de NOD32 1.1086 (20050502) > >>>> > >>>> __________ > >>>> > >>>> >> >> Este mensaje ha sido analizado con NOD32 antivirus system >> > >>>> > >>>> http://www.nod32.com > >>>> > >>>> ------------------------------------------------------- > >>>> > >>>> >> This SF.Net email is sponsored by Oracle Space Sweepstakes Want to > >>>> > >>>> be >> the first software developer in space? Enter now for the Oracle > >>>> Space >> Sweepstakes! > >>>> http://ads.osdn.com/?ad_ids93&alloc_id281&opclick > >>>> > >>>> >> _______________________________________________ > >>>> >> Zd1211-devs mailing list > >>>> >> Zd1...@li... > >>>> >> https://lists.sourceforge.net/lists/listinfo/zd1211-devs >> > >= > > >>>> >> > >>>> > > ------------------------------------------------------- > >>>> > > >>>> > This SF.Net email is sponsored by Oracle Space Sweepstakes Want to > >>>> > be the first software developer in space? Enter now for the Oracle > >>>> > Space Sweepstakes! http://ads.osdn.com/?ad_ids93&alloc_id281&opcli= ck > >>>> > _______________________________________________ > >>>> > Zd1211-devs mailing list > >>>> > Zd1...@li... > >>>> > https://lists.sourceforge.net/lists/listinfo/zd1211-devs > > >>>> > >>>> ------------------------------------------------------- > >>>> This SF.Net email is sponsored by Oracle Space Sweepstakes > >>>> Want to be the first software developer in space? > >>>> Enter now for the Oracle Space Sweepstakes! > >>>> http://ads.osdn.com/?ad_ids93&alloc_id281> &op=3Dick > >>>> _______________________________________________ > >>>> Zd1211-devs mailing list > >>>> Zd1...@li... > >>>> https://lists.sourceforge.net/lists/listinfo/zd> 1211-devs > >>>> > >>>> __________ Informaci=F3n de NOD32 1.1086 (20050502) __________ > >>>> Este mensaje ha sido analizado con NOD32 antivirus system > >>> > >>> http://www.nod32.com > >>> > >>> > >>> __________ Informaci=F3n de NOD32 1.1086 (20050502) __________ > >>> Este mensaje ha sido analizado con NOD32 antivirus system > >>> http://www.nod32.com > >>> > >>> > >>> ------------------------------------------------------- > >>> This SF.Net email is sponsored by Oracle Space Sweepstakes > >>> Want to be the first software developer in space? > >>> Enter now for the Oracle Space Sweepstakes! > >>> http://ads.osdn.com/?ad_ids93&alloc_id281&opclick > >>> _______________________________________________ > >>> Zd1211-devs mailing list > >>> Zd1...@li... > >>> https://lists.sourceforge.net/lists/listinfo/zd1211-devs > >> > >> ------------------------------------------------------- > >> This SF.Net email is sponsored by Oracle Space Sweepstakes > >> Want to be the first software developer in space? > >> Enter now for the Oracle Space Sweepstakes! > >> http://ads.osdn.com/?ad_ids93&alloc_id281&op=CCk > >> _______________________________________________ > >> Zd1211-devs mailing list > >> Zd1...@li... > >> https://lists.sourceforge.net/lists/listinfo/zd1211-devs > > > > -- > > Dmitriy |
From: Dan S. <dds...@ie...> - 2005-06-15 20:01:46
|
Hi all, I have been working on the ng-code for a couple days and I finally have the module successfully loading and talking to the zd1211 chip, without crashing or being unable to unload :) Unfortuntately I still can't actually use my adapter as it's in "airoha" RF mode and only RFMD mode is supported so far... Anyway, there are many more changes I would like to make (starting with adding airoha support if I can figure it out), but first here is the patch I have so far. I will try to list all changes: -move common parts of src/2.4/zd1211.h and src/2.6/zd1211.h into src/zd1211.h -move different parts of src/2.4/zd1211.h and src/2.5/zd1211.h into new files src/2.4/zd1211_kernel.h and src/2.6/zd1211_kernel.h -replace deprecated interruptible_wait_on() with wait_event_interruptible() -add flags (condition flags) for use with wait_event_interruptible() -add several new macros due to 2.4/2.6 differences, change existing macros -put do {...} while(0) around ASSERT_FN() as is standard practice (so macro ends with a ;) -clean up .*.cmd in src/ directory as well as src/2.6/ directory -use free_netdev() not kfree() -remove unneeded spinlock -add debug statements -fix RF type debugging -add code to resubmit interrupt-in buffer (it doesn't resubmit itself like it used to in 2.4) -add #defines to replace some magic numbers Any chance this can make it into CVS? Thanks! diff -x CVS -urN zd1211ng-orig/src/2.4/zd1211.h zd1211ng/src/2.4/zd1211.h --- zd1211ng-orig/src/2.4/zd1211.h 2005-06-08 18:54:56.000000000 -0400 +++ zd1211ng/src/2.4/zd1211.h 1969-12-31 19:00:00.000000000 -0500 @@ -1,154 +0,0 @@ -/* - * $Id: zd1211.h,v 1.10 2005/06/08 22:54:56 sagamore Exp $ - * - * Copyright (C) 2005 Arno WILLIG (ak...@us...) - * Copyright (C) 2005 Dimitriy KOROVKIN (kor...@us...) - * Copyright (C) 2005 Markus KARG (mar...@us...) - * - * This file is part of the ZD1211 Wireless USB Driver for Linux. - * - * This driver is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This driver is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this driver; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _ZD1211_H_ -#define _ZD1211_H_ - - -#include <linux/sched.h> -#include <linux/interrupt.h> -#include <linux/netdevice.h> -#include <linux/etherdevice.h> -#include <linux/usb.h> -#include <linux/slab.h> -#include <linux/spinlock.h> -#include <linux/smp_lock.h> - -#include <linux/wireless.h> -#include <linux/version.h> -#include <zdparm.h> - -/** - * Linux kernel module compliant definitions. - */ -#define DRIVER_AUTHOR "Arno WILLIG <ak...@us...>" -#define DRIVER_DESC "ZD1211 802.11b/g USB WLAN driver" -#define DRIVER_URL "http://zd1211.sourceforge.net/" -#define DRIVER_VERSION "0.0.1" -#define DRIVER_LICENSE "GPL" - -/** - * Driver constants - */ -#define CTRL_BUF_LEN 64 //Length of the buffer used for control operations - -//Primary and secondary responce buffers -#define PRIMARY_RSP_BUF 0 -#define SECONDARY_RSP_BUF 1 - -/** - * enumeration describes the adapter size - */ -typedef enum -{ - ZD_ADAPTER, ZD_DONGLE -} AdapterSize; - -/** - * This structure describes the 802.11 part of the device - */ -struct ieee80211_device -{ - u16 channel; //the channel number - u32 allowedChannels; //mask of the allower channels - u8 rfMode; //RF mode of the chip - u16 rfBitWidth; //The valid bit the data field - AdapterSize size; //Adapter size flag - u8 intValue[N_CHANNELS]; //integration values for channels - u16 regionCode; //The region code - u32 intrMask; //interrupt mask - u8 txGainSetting; //transmit gain setting - u8 phyTest; //PHY testing parameter - u8 bssType; //BSS type (what were you thinking it might be?) - u8 basicRate; //the maximum rate this card can handle - u16 beaconPeriod; //beaconPeriod - u16 beaconInterval; //beacon interval -#if TX_GAIN_OFDM - u8 txGainSetting2; //another transmit gain setting for OFDM -#endif - u8 macMode; //MAC mode (802.11b, 802.11g etc.) - u8 normalRates[NUM_SUPPORTED_RATE]; //Normal supported transfer rates - int nnRates; //number of normal rates - u8 extRates[NUM_SUPPORTED_RATE]; //Extended supported transfer rates - int neRates; //number of extended rates -}; - -/** - * This structure describes the device. - */ -struct zd1211_priv -{ - struct ieee80211_device ieee; - struct usb_device *usb_dev; - struct net_device *net_dev; - struct iw_statistics wstats; - struct proc_dir_entry *dir_dev; - - u8 mac_addr[ETH_ALEN]; - int release; //Number of the software release - - /* - * FIXME: we MUST try to do zerocopy if possible, - * may be we need to allocate an skbuff and submit it as a buffer - */ - u8* rxbuffer; // RX data buffer - int rxbuflen; // RX buffer length - struct urb* rxUrb; //receive urb - - u8* txbuffer; // TX data buffer - int txbuflen; // TX buffer length - struct urb* txUrb; //transmit urb - - u8* macCmdBuf; // MAC command buffer - int macCmdBufLen; // MAC command buffer length - struct urb* macCmdUrb; //MAC request URB - int macCmdResult; //result of the of the command - - u8* macRspBuf[2]; // MAC responce buffer - int macRspBufLen; // MAC responce buffer length - struct urb* macRspUrb; //MAC responce urb - int macRspResult; //result of the of the command - - u8 ctrlBuf[CTRL_BUF_LEN]; //Buffer for control operations - int ctrlBufLen; //Length of the control buffer - - u8 ep4int; // if EP4 is interrupt (it may be bulk, you know) - struct semaphore reg_sem; // locks access to registers - wait_queue_head_t regwq; //device register read/write wait queue - spinlock_t lock; //lock to be used to lock structure access -}; - -#ifndef HAVE_NETDEV_PRIV -static inline void *netdev_priv(struct net_device *dev) -{ - return dev->priv; -} -#endif //HAVE_NETDEV_PRIV -//Kernel dependent macroses -#define NUM_ENDPOINTS(ifdesc) (ifdesc)->bNumEndpoints -#define CUR_ALTSETTING(iface) (iface)->altsetting + (iface)->act_altsetting -#define ENDPOINT(iface_desc, i) (iface_desc)->endpoint[(i)] -#define ALLOC_URB(len) usb_alloc_urb((len)) -#define FREE_URB(urb) usb_free_urb ((urb)) -#endif diff -x CVS -urN zd1211ng-orig/src/2.4/zd1211_kernel.h zd1211ng/src/2.4/zd1211_kernel.h --- zd1211ng-orig/src/2.4/zd1211_kernel.h 1969-12-31 19:00:00.000000000 -0500 +++ zd1211ng/src/2.4/zd1211_kernel.h 2005-06-15 14:13:14.000000000 -0400 @@ -0,0 +1,38 @@ +/* + * $Id: zd1211.h,v 1.10 2005/06/08 22:54:56 sagamore Exp $ + * + * Copyright (C) 2005 Arno WILLIG (ak...@us...) + * Copyright (C) 2005 Dimitriy KOROVKIN (kor...@us...) + * Copyright (C) 2005 Markus KARG (mar...@us...) + * + * This file is part of the ZD1211 Wireless USB Driver for Linux. + * + * This driver is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This driver is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this driver; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _ZD1211_KERNEL_H_ +#define _ZD1211_KERNEL_H_ + +//Kernel dependent macroses +#define CUR_ALTSETTING(iface) ((iface)->altsetting[(iface)->act_altsetting]) +#define ENDPOINT(iface, i) (CUR_ALTSETTING(iface).endpoint[i]) +#define ALLOC_URB() (usb_alloc_urb(0)) +#define FREE_URB(urb) (usb_free_urb ((urb))) +#define PT_REGS +#define USB_SUBMIT_URB(urb) (usb_submit_urb(urb)) +#define USB_UNLINK_URB(urb) (usb_unlink_urb(urb)) +#define RESUBMIT_URB(priv) do { } while(0) + +#endif /* _ZD1211_KERNEL_H_ */ diff -x CVS -urN zd1211ng-orig/src/2.6/Makefile zd1211ng/src/2.6/Makefile --- zd1211ng-orig/src/2.6/Makefile 2005-06-14 18:05:33.000000000 -0400 +++ zd1211ng/src/2.6/Makefile 2005-06-15 15:38:42.000000000 -0400 @@ -59,7 +59,7 @@ clean: - @-rm -rf *.o *.ko .*.cmd *.mod.c .tmp_versions *~ + @-rm -rf *.o *.ko .*.cmd ../.*.cmd *.mod.c .tmp_versions *~ insmod: @insmod ${TARGET}.ko diff -x CVS -urN zd1211ng-orig/src/2.6/zd1211.c zd1211ng/src/2.6/zd1211.c --- zd1211ng-orig/src/2.6/zd1211.c 2005-06-14 18:05:33.000000000 -0400 +++ zd1211ng/src/2.6/zd1211.c 2005-06-15 15:36:44.000000000 -0400 @@ -76,7 +76,7 @@ static inline void zd1211_delete(struct zd1211_priv *priv) { if (priv) - kfree(priv->net_dev); + free_netdev(priv->net_dev); } /** @@ -87,14 +87,17 @@ { struct zd1211_priv *priv = usb_get_intfdata(interface); + debug("Got zd1211 device disconnect."); flush_scheduled_work(); usb_put_dev(interface_to_usbdev(interface)); usb_set_intfdata(interface, NULL); + debug("Freeing URBs"); down(&priv->reg_sem); zd1211_urb_delete(priv); - debug("Unregister net device"); + debug("Unregistering net device"); unregister_netdev(priv->net_dev); up(&priv->reg_sem); + debug("Freeing net device"); zd1211_delete(priv); info("zd1211 device disconnected.\n"); } @@ -111,16 +114,13 @@ dev = alloc_etherdev(sizeof(*priv)); if (dev == NULL) { err("%s Out of memory", __FUNCTION__); - goto error; + return NULL; } priv = netdev_priv(dev); - memset(priv, 0, sizeof(struct zd1211_priv)); + memset(priv, 0, sizeof(*priv)); priv->usb_dev = usb_dev; priv->net_dev = dev; return dev; -error: - zd1211_delete(priv); - return NULL; } /** @@ -132,7 +132,7 @@ { struct usb_device *usb_dev = interface_to_usbdev(interface); struct net_device *dev; - struct zd1211_priv *priv; + struct zd1211_priv *priv = NULL; int vendor_id, product_id; int result = 0; @@ -168,7 +168,6 @@ usb_set_intfdata(interface, priv); init_MUTEX(&priv->reg_sem); init_waitqueue_head (&priv->regwq); - spin_lock_init(&priv->lock); // spin_lock_init(&dev->lock); if (zd1211_loadFirmware(priv) < 0) diff -x CVS -urN zd1211ng-orig/src/2.6/zd1211.h zd1211ng/src/2.6/zd1211.h --- zd1211ng-orig/src/2.6/zd1211.h 2005-06-14 18:05:33.000000000 -0400 +++ zd1211ng/src/2.6/zd1211.h 1969-12-31 19:00:00.000000000 -0500 @@ -1,154 +0,0 @@ -/* - * $Id: zd1211.h,v 1.8 2005/06/14 22:05:33 sagamore Exp $ - * - * Copyright (C) 2005 Arno WILLIG (ak...@us...) - * Copyright (C) 2005 Dimitriy KOROVKIN (kor...@us...) - * Copyright (C) 2005 Markus KARG (mar...@us...) - * - * This file is part of the ZD1211 Wireless USB Driver for Linux. - * - * This driver is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This driver is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this driver; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _ZD1211_H_ -#define _ZD1211_H_ - - -#include <linux/sched.h> -#include <linux/interrupt.h> -#include <linux/netdevice.h> -#include <linux/etherdevice.h> -#include <linux/usb.h> -#include <linux/slab.h> -#include <linux/spinlock.h> -#include <linux/smp_lock.h> - -#include <linux/wireless.h> -#include <linux/version.h> -#include <zdparm.h> - -/** - * Linux kernel module compliant definitions. - */ -#define DRIVER_AUTHOR "Arno WILLIG <ak...@us...>" -#define DRIVER_DESC "ZD1211 802.11b/g USB WLAN driver" -#define DRIVER_URL "http://zd1211.sourceforge.net/" -#define DRIVER_VERSION "0.0.1" -#define DRIVER_LICENSE "GPL" - -/** - * Driver constants - */ -#define CTRL_BUF_LEN 64 //Length of the buffer used for control operations - -//Primary and secondary responce buffers -#define PRIMARY_RSP_BUF 0 -#define SECONDARY_RSP_BUF 1 - -/** - * enumeration describes the adapter size - */ -typedef enum -{ - ZD_ADAPTER, ZD_DONGLE -} AdapterSize; - -/** - * This structure describes the 802.11 part of the device - */ -struct ieee80211_device -{ - u16 channel; //the channel number - u32 allowedChannels; //mask of the allower channels - u8 rfMode; //RF mode of the chip - u16 rfBitWidth; //The valid bit the data field - AdapterSize size; //Adapter size flag - u8 intValue[N_CHANNELS]; //integration values for channels - u16 regionCode; //The region code - u32 intrMask; //interrupt mask - u8 txGainSetting; //transmit gain setting - u8 phyTest; //PHY testing parameter - u8 bssType; //BSS type (what were you thinking it might be?) - u8 basicRate; //the maximum rate this card can handle - u16 beaconPeriod; //beaconPeriod - u16 beaconInterval; //beacon interval -#if TX_GAIN_OFDM - u8 txGainSetting2; //another transmit gain setting for OFDM -#endif - u8 macMode; //MAC mode (802.11b, 802.11g etc.) - u8 normalRates[NUM_SUPPORTED_RATE]; //Normal supported transfer rates - int nnRates; //number of normal rates - u8 extRates[NUM_SUPPORTED_RATE]; //Extended supported transfer rates - int neRates; //number of extended rates -}; - -/** - * This structure describes the device. - */ -struct zd1211_priv -{ - struct ieee80211_device ieee; - struct usb_device *usb_dev; - struct net_device *net_dev; - struct iw_statistics wstats; - struct proc_dir_entry *dir_dev; - - u8 mac_addr[ETH_ALEN]; - int release; //Number of the software release - - /* - * FIXME: we MUST try to do zerocopy if possible, - * may be we need to allocate an skbuff and submit it as a buffer - */ - u8* rxbuffer; // RX data buffer - int rxbuflen; // RX buffer length - struct urb* rxUrb; //receive urb - - u8* txbuffer; // TX data buffer - int txbuflen; // TX buffer length - struct urb* txUrb; //transmit urb - - u8* macCmdBuf; // MAC command buffer - int macCmdBufLen; // MAC command buffer length - struct urb* macCmdUrb; //MAC request URB - int macCmdResult; //result of the of the command - - u8* macRspBuf[2]; // MAC responce buffer - int macRspBufLen; // MAC responce buffer length - struct urb* macRspUrb; //MAC responce urb - int macRspResult; //result of the of the command - - u8 ctrlBuf[CTRL_BUF_LEN]; //Buffer for control operations - int ctrlBufLen; //Length of the control buffer - - u8 ep4int; // if EP4 is interrupt (it may be bulk, you know) - struct semaphore reg_sem; // locks access to registers - wait_queue_head_t regwq; //device register read/write wait queue - spinlock_t lock; //lock to be used to lock structure access -}; - -#ifndef HAVE_NETDEV_PRIV -static inline void *netdev_priv(struct net_device *dev) -{ - return dev->priv; -} -#endif //HAVE_NETDEV_PRIV - -//Kernel dependent macroses -#define NUM_ENDPOINT(ifdesc) (ifdesc)->desc.bNumEndpoints -#define CUR_ALTSETTING(iface) (iface)->cur_altsetting -#define ENDPOINT(iface_desc, i) (iface_desc)->endpoint[(i)].desc - -#endif diff -x CVS -urN zd1211ng-orig/src/2.6/zd1211_kernel.h zd1211ng/src/2.6/zd1211_kernel.h --- zd1211ng-orig/src/2.6/zd1211_kernel.h 1969-12-31 19:00:00.000000000 -0500 +++ zd1211ng/src/2.6/zd1211_kernel.h 2005-06-15 14:16:24.000000000 -0400 @@ -0,0 +1,42 @@ +/* + * $Id: zd1211.h,v 1.7 2005/06/13 23:33:42 sagamore Exp $ + * + * Copyright (C) 2005 Arno WILLIG (ak...@us...) + * Copyright (C) 2005 Dimitriy KOROVKIN (kor...@us...) + * Copyright (C) 2005 Markus KARG (mar...@us...) + * + * This file is part of the ZD1211 Wireless USB Driver for Linux. + * + * This driver is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This driver is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this driver; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _ZD1211_KERNEL_H_ +#define _ZD1211_KERNEL_H_ + +//Kernel dependent macroses +#define CUR_ALTSETTING(iface) ((iface)->cur_altsetting->desc) +#define ENDPOINT(iface, i) ((iface)->cur_altsetting->endpoint[(i)].desc) +#define ALLOC_URB() (usb_alloc_urb(0, GFP_KERNEL)) +#define FREE_URB(urb) (usb_free_urb ((urb))) +#define PT_REGS , struct pt_regs *regs +#define USB_SUBMIT_URB(urb) (usb_submit_urb(urb, GFP_KERNEL)) +#define USB_UNLINK_URB(urb) (usb_kill_urb(urb)) +#define RESUBMIT_URB(priv) do { \ + int ret; \ + if ((ret = zd1211_submit_resp_urb(priv))) \ + err("Could not resubmit response URB : %d\n",ret); \ +} while(0) + +#endif diff -x CVS -urN zd1211ng-orig/src/zd1211.h zd1211ng/src/zd1211.h --- zd1211ng-orig/src/zd1211.h 1969-12-31 19:00:00.000000000 -0500 +++ zd1211ng/src/zd1211.h 2005-06-15 14:05:40.000000000 -0400 @@ -0,0 +1,140 @@ +/* + * $Id: zd1211.h,v 1.7 2005/06/13 23:33:42 sagamore Exp $ + * + * Copyright (C) 2005 Arno WILLIG (ak...@us...) + * Copyright (C) 2005 Dimitriy KOROVKIN (kor...@us...) + * Copyright (C) 2005 Markus KARG (mar...@us...) + * + * This file is part of the ZD1211 Wireless USB Driver for Linux. + * + * This driver is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This driver is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this driver; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _ZD1211_H_ +#define _ZD1211_H_ + +#include <linux/sched.h> +#include <linux/interrupt.h> +#include <linux/netdevice.h> +#include <linux/etherdevice.h> +#include <linux/usb.h> +#include <linux/slab.h> + +#include <linux/wireless.h> +#include <linux/version.h> +#include "zdparm.h" +#include "zd1211_kernel.h" + +/** + * Linux kernel module compliant definitions. + */ +#define DRIVER_AUTHOR "Arno WILLIG <ak...@us...>" +#define DRIVER_DESC "ZD1211 802.11b/g USB WLAN driver" +#define DRIVER_URL "http://zd1211.sourceforge.net/" +#define DRIVER_VERSION "0.0.1" +#define DRIVER_LICENSE "GPL" + +/** + * Driver constants + */ +#define CTRL_BUF_LEN 64 //Length of the buffer used for control operations + +//Primary and secondary responce buffers +#define PRIMARY_RSP_BUF 0 +#define SECONDARY_RSP_BUF 1 + +/** + * This structure describes the 802.11 part of the device + */ +struct ieee80211_device +{ + u16 channel; //the channel number + u32 allowedChannels; //mask of the allower channels + u8 rfMode; //RF mode of the chip + u16 rfBitWidth; //The valid bit the data field + int size; //Adapter size flag + u8 intValue[N_CHANNELS]; //integration values for channels + u16 regionCode; //The region code + u32 intrMask; //interrupt mask + u8 txGainSetting; //transmit gain setting + u8 phyTest; //PHY testing parameter + u8 bssType; //BSS type (what were you thinking it might be?) + u8 basicRate; //the maximum rate this card can handle + u16 beaconPeriod; //beaconPeriod + u16 beaconInterval; //beacon interval +#if TX_GAIN_OFDM + u8 txGainSetting2; //another transmit gain setting for OFDM +#endif + u8 macMode; //MAC mode (802.11b, 802.11g etc.) + u8 normalRates[NUM_SUPPORTED_RATE]; //Normal supported transfer rates + int nnRates; //number of normal rates + u8 extRates[NUM_SUPPORTED_RATE]; //Extended supported transfer rates + int neRates; //number of extended rates +}; + +/** + * This structure describes the device. + */ +struct zd1211_priv +{ + struct ieee80211_device ieee; + struct usb_device *usb_dev; + struct net_device *net_dev; + struct iw_statistics wstats; + struct proc_dir_entry *dir_dev; + + u8 mac_addr[ETH_ALEN]; + int release; //Number of the software release + + /* + * FIXME: we MUST try to do zerocopy if possible, + * may be we need to allocate an skbuff and submit it as a buffer + */ + u8* rxbuffer; // RX data buffer + int rxbuflen; // RX buffer length + struct urb* rxUrb; //receive urb + + u8* txbuffer; // TX data buffer + int txbuflen; // TX buffer length + struct urb* txUrb; //transmit urb + + u8* macCmdBuf; // MAC command buffer + int macCmdBufLen; // MAC command buffer length + struct urb* macCmdUrb; //MAC request URB + int macCmdResult; //result of the of the command + + u8* macRspBuf[2]; // MAC responce buffer + int macRspBufLen; // MAC responce buffer length + struct urb* macRspUrb; //MAC responce urb + int macRspResult; //result of the of the command + + u8 ctrlBuf[CTRL_BUF_LEN]; //Buffer for control operations + int ctrlBufLen; //Length of the control buffer + + u8 ep4int; // if EP4 is interrupt (it may be bulk, you know) + struct semaphore reg_sem; // locks access to registers + wait_queue_head_t regwq; //device register read/write wait queue + int reg_rw_sent; //flag to indicate the read/write command was sent + int resp_received; //flag to indicate a response was received +}; + +#ifndef HAVE_NETDEV_PRIV +static inline void *netdev_priv(struct net_device *dev) +{ + return dev->priv; +} +#endif //HAVE_NETDEV_PRIV + +#endif diff -x CVS -urN zd1211ng-orig/src/zd1211_802_11_hw.c zd1211ng/src/zd1211_802_11_hw.c --- zd1211ng-orig/src/zd1211_802_11_hw.c 2005-05-15 14:46:15.000000000 -0400 +++ zd1211ng/src/zd1211_802_11_hw.c 2005-06-15 11:49:15.000000000 -0400 @@ -650,7 +650,7 @@ nBits = priv->ieee.rfBitWidth; //to avoid un-necessary register read/write //Read the programming pattern from a register - ASSERT_FN(zd1211_read_hw_reg(priv, ZD_CR203, &val)) + ASSERT_FN(zd1211_read_hw_reg(priv, ZD_CR203, &val)); val = mCLR_BIT(val, ZD_IF_LE);; val = mCLR_BIT(val, ZD_RF_CLK); //Now let's build the i2c programming pattern @@ -666,7 +666,7 @@ nBits--; value >>= 1; } - ASSERT_FN(zd1211_cfg_rf(priv, priv->ieee.rfBitWidth, data)) + ASSERT_FN(zd1211_cfg_rf(priv, priv->ieee.rfBitWidth, data)); out: return result; @@ -692,21 +692,21 @@ // Get Phy-Config permission if (!initOnly) { for (i = 0; i < len; i++) { - ASSERT_FN(zd1211_write_hw_reg(priv, initRFMD[i].addr, initRFMD[i].value)) + ASSERT_FN(zd1211_write_hw_reg(priv, initRFMD[i].addr, initRFMD[i].value)); } ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR24, - (priv->ieee.size == ZD_ADAPTER)? 0x14: 0x20))//cca threshold + (priv->ieee.size == ADAPTER_NORMAL)? 0x14: 0x20));//cca threshold ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR106, - (priv->ieee.size == ZD_ADAPTER)? 0x1a: 0x22))//cca threshold + (priv->ieee.size == ADAPTER_NORMAL)? 0x1a: 0x22));//cca threshold len = sizeof(initRFMDSynth) / sizeof(initRFMDSynth[0]); for (i = 0; i < len; i++) { - ASSERT_FN(zd1211_set_if_synth(priv, initRFMDSynth[i])) + ASSERT_FN(zd1211_set_if_synth(priv, initRFMDSynth[i])); } } else { - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR122, 0x00)) - ASSERT_FN(zd1211_set_if_synth(priv, RFMD2958t[channel * 2])) - ASSERT_FN(zd1211_set_if_synth(priv, RFMD2958t[channel * 2 + 1])) + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR122, 0x00)); + ASSERT_FN(zd1211_set_if_synth(priv, RFMD2958t[channel * 2])); + ASSERT_FN(zd1211_set_if_synth(priv, RFMD2958t[channel * 2 + 1])); } out: return result; @@ -725,22 +725,22 @@ int result = 0; //function result switch(priv->ieee.rfMode) { - case RFMD_RF: { + case RF_RFMD: { if (txPwrType != cTX_OFDM) { - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR31, txGain)) + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR31, txGain)); } else { #if !TX_GAIN_OFDM - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR31, txGain)) + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR31, txGain)); #endif - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR51, txGain)) - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR52, txGain)) - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR53, txGain)) + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR51, txGain)); + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR52, txGain)); + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR53, txGain)); } break; } default: { - err(__FUNCTION__ " Unsupported RF mode 0x%X", priv->ieee.rfMode); + err("%s Unsupported RF mode 0x%X", __FUNCTION__, priv->ieee.rfMode); result = -EINVAL; break; } @@ -827,20 +827,20 @@ { int result = 0; //The function call result - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CONFIGPhilips, 0x00)) + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CONFIGPhilips, 0x00)); switch (priv->ieee.rfMode) { - case RFMD_RF: //For now we can check this setting only + case RF_RFMD: //For now we can check this setting only { priv->ieee.rfBitWidth = 0x18; - ASSERT_FN(zd1211_set_RFMD_chip(priv, channel, initOnly)) + ASSERT_FN(zd1211_set_RFMD_chip(priv, channel, initOnly)); if (!initOnly) - ASSERT_FN(zd1211_update_integration(priv, channel)) + ASSERT_FN(zd1211_update_integration(priv, channel)); break; } default: { - err(__FUNCTION__ " Unsupported RF mode 0x%X", priv->ieee.rfMode); + err("%s Unsupported RF mode 0x%X", __FUNCTION__, priv->ieee.rfMode); result = -EINVAL; break; } @@ -863,7 +863,7 @@ int result = 0; //the operation result //I hope we will get more region options - ASSERT_FN(zd1211_read_hw_reg(priv, ZD_CR5, &val)) + ASSERT_FN(zd1211_read_hw_reg(priv, ZD_CR5, &val)); switch(regionCode) { case ZD_JAPAN: @@ -877,7 +877,7 @@ break; } } - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR5, val)) + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR5, val)); out: return result; } @@ -900,21 +900,21 @@ goto out; } priv->ieee.channel = channel; - ASSERT_FN(zd1211_switch_channel(priv, channel, 0)) + ASSERT_FN(zd1211_switch_channel(priv, channel, 0)); // If channnel == 14 , enable Japan spectrum mask if (priv->ieee.regionCode == ZD_JAPAN) { if (channel == 14) { - ASSERT_FN(zd1211_set_filter_band(priv, priv->ieee.regionCode)) - if (priv->ieee.rfMode == RFMD_RF) - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR47, 0x18)) + ASSERT_FN(zd1211_set_filter_band(priv, priv->ieee.regionCode)); + if (priv->ieee.rfMode == RF_RFMD) + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR47, 0x18)); } else { - ASSERT_FN(zd1211_set_filter_band(priv, 0)) + ASSERT_FN(zd1211_set_filter_band(priv, 0)); // CR47 has it's default value } //External control TX power (CR31_CCK, CR51_6-36M, CR52_48M, CR53_54M - if (priv->ieee.rfMode == RFMD_RF) - ASSERT_FN(zd1211_set_if_synth(priv, 0x28252d)) + if (priv->ieee.rfMode == RF_RFMD) + ASSERT_FN(zd1211_set_if_synth(priv, 0x28252d)); } udelay(100); out: @@ -933,7 +933,7 @@ int result = 0; //operation result ASSERT_FN(zd1211_write_hw_reg(priv, ZD_InterruptCtrl, - (enable != 0)? priv->ieee.intrMask: 0)) + (enable != 0)? priv->ieee.intrMask: 0)); out: return result; } @@ -979,19 +979,19 @@ if (on) { //Switch radio on switch (priv->ieee.rfMode) { - case RFMD_RF: { + case RF_RFMD: { if (!(priv->ieee.phyTest & BIT_2)) - ASSERT_FN(zd1211_set_if_synth(priv, 0x000007)) + ASSERT_FN(zd1211_set_if_synth(priv, 0x000007)); if (!(priv->ieee.phyTest & BIT_0)) { - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR10, 0x89)) - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR11, 0x00)) - ASSERT_FN(zd1211_read_hw_reg(priv, ZD_CR11, &val)) + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR10, 0x89)); + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR11, 0x00)); + ASSERT_FN(zd1211_read_hw_reg(priv, ZD_CR11, &val)); val &= 0xFF; if (val != 0 && (priv->ieee.phyTest & BIT_1)) { for (i = 0; i < 10; i++) { udelay(1000); - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR11, 0x00)) - ASSERT_FN(zd1211_read_hw_reg(priv, ZD_CR11, &val)) + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR11, 0x00)); + ASSERT_FN(zd1211_read_hw_reg(priv, ZD_CR11, &val)); if ((val & 0xFF) == 0) break; } @@ -1000,7 +1000,7 @@ break; } default: { - err(__FUNCTION__ " Unsupported RF mode 0x%X", priv->ieee.rfMode); + err("%s Unsupported RF mode 0x%X", __FUNCTION__, priv->ieee.rfMode); result = -EINVAL; break; } @@ -1008,17 +1008,17 @@ } else { switch (priv->ieee.rfMode) { - case RFMD_RF: { + case RF_RFMD: { if (!(priv->ieee.phyTest & BIT_0)) { - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR11, 0x15)) - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR10, 0x81)) + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR11, 0x15)); + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR10, 0x81)); } if (!(priv->ieee.phyTest & BIT_2)) - ASSERT_FN(zd1211_set_if_synth(priv, 0x00000F)) + ASSERT_FN(zd1211_set_if_synth(priv, 0x00000F)); break; } default: { - err(__FUNCTION__ " Unsupported RF mode 0x%X", priv->ieee.rfMode); + err("%s Unsupported RF mode 0x%X", __FUNCTION__, priv->ieee.rfMode); result = -EINVAL; break; } @@ -1050,7 +1050,7 @@ //Number of elements in the rate mask int arrlen = sizeof(rateMask) / sizeof(rateMask[0]); #if defined(AMAC) || defined(GCCK) && defined(OFDM) - ASSERT_FN(zd1211_read_hw_reg(priv, BASICRATE, &val)) + ASSERT_FN(zd1211_read_hw_reg(priv, BASICRATE, &val)); #endif highRate = SR_1M; highBasicRate = SR_1M; @@ -1076,19 +1076,19 @@ highBasicRate = rate; } #if defined(AMAC) || (defined(GCCK) && defined(OFDM)) - ASSERT_FN(zd1211_write_hw_reg(priv, BASICRATE, val)) + ASSERT_FN(zd1211_write_hw_reg(priv, BASICRATE, val)); #endif ////This piece of code more than strange. I really don't understand ////why is it necessary to set up bits in a register where these bits ////are marked as reserved? #if !defined(OFDM) - ASSERT_FN(zd1211_read_hw_reg(priv, MISC, &val)) + ASSERT_FN(zd1211_read_hw_reg(priv, MISC, &val)); if (priv->ieee.bssType == INDEPENDENT_BSS && highBasicRate == SR_1M) { // Workaround compatibility issue. // For resonable case, HighestBasicRate should larger than 2M if // short-preamble is supported. highBasicRate = SR_2M; - ASSERT_FN(zd1211_write_hw_reg(priv, ACK_EXT, 0x3f)) + ASSERT_FN(zd1211_write_hw_reg(priv, ACK_EXT, 0x3f)); } // I really don't understand this piece of code. // May be it must be removed in the future @@ -1118,7 +1118,7 @@ break; } } - ASSERT_FN(zd1211_write_hw_reg(priv, MISC, val)) + ASSERT_FN(zd1211_write_hw_reg(priv, MISC, val)); #else len = sizeof(ofdmBasicRates) / (sizeof(u8) * 2); for (i = 0; i < len; i++) { @@ -1165,11 +1165,11 @@ } default: { result = -EINVAL; - err(__FUNCTION__" Invalid MAC mode %d", mode); + err("%s Invalid MAC mode %d", __FUNCTION__, mode); goto out; } } - ASSERT_FN(zd1211_write_hw_reg(priv, CW_LIMIT, cwLimit)) + ASSERT_FN(zd1211_write_hw_reg(priv, CW_LIMIT, cwLimit)); priv->ieee.macMode = mode; //Now, let's set up the real mode //Actually normal mode settings are common for any mode @@ -1196,7 +1196,7 @@ priv->ieee.extRates[6] = SR_48M; priv->ieee.extRates[7] = SR_54M; ASSERT_FN(zd1211_write_hw_reg(priv, MANDATORY_RATES, - 0x150f)) //1,2,5.5,11,6,12,24 + 0x150f)); //1,2,5.5,11,6,12,24 break; } case PURE_G_MODE: { @@ -1210,13 +1210,13 @@ priv->ieee.extRates[6] = SR_48M; priv->ieee.extRates[7] = SR_54M; ASSERT_FN(zd1211_write_hw_reg(priv, MANDATORY_RATES, - 0x150f)) //1,2,5.5,11,6,12,24 + 0x150f)); //1,2,5.5,11,6,12,24 break; } case PURE_B_MODE: { priv->ieee.neRates = 0; ASSERT_FN(zd1211_write_hw_reg(priv, MANDATORY_RATES, - 0x0f)) //1,2,5.5,11 + 0x0f)); //1,2,5.5,11 break; } } @@ -1237,19 +1237,19 @@ debug("zd1211: Update card settings"); ASSERT_FN(zd1211_beacon_enable(priv, priv->ieee.beaconInterval, - priv->ieee.beaconInterval, priv->ieee.bssType)) - ASSERT_FN(zd1211_radio_onoff(priv, 1)) + priv->ieee.beaconInterval, priv->ieee.bssType)); + ASSERT_FN(zd1211_radio_onoff(priv, 1)); if (priv->ieee.bssType != INFRASTRUCTURE_BSS) - ASSERT_FN(zd1211_set_channel(priv, priv->ieee.channel)) + ASSERT_FN(zd1211_set_channel(priv, priv->ieee.channel)); #if defined(AMAC) - ASSERT_FN(zd1211_write_hw_reg(priv, BASICRATE, 0)) + ASSERT_FN(zd1211_write_hw_reg(priv, BASICRATE, 0)); #endif ASSERT_FN(zd1211_set_supported_rates(priv, priv->ieee.normalRates, - priv->ieee.nnRates)) + priv->ieee.nnRates)); #if defined(OFDM) if (priv->ieee.macMode != PURE_B_MODE) ASSERT_FN(zd1211_set_supported_rates(priv, priv->ieee.extRates, - priv->ieee.neRates)) + priv->ieee.neRates)); #endif out: return result; Binary files zd1211ng-orig/src/zd1211_802_11_hw.o and zd1211ng/src/zd1211_802_11_hw.o differ diff -x CVS -urN zd1211ng-orig/src/zd1211_ether.c zd1211ng/src/zd1211_ether.c --- zd1211ng-orig/src/zd1211_ether.c 2005-05-15 14:46:15.000000000 -0400 +++ zd1211ng/src/zd1211_ether.c 2005-06-15 11:34:53.000000000 -0400 @@ -81,9 +81,9 @@ { int result = 0; //function result netif_start_queue(netdev); - ASSERT_FN(zd1211_card_settings(netdev_priv(netdev))) - ASSERT_FN(zd1211_setup_rx_urb(netdev_priv(netdev))) - ASSERT_FN(zd1211_int_enable(netdev_priv(netdev), 1)) + ASSERT_FN(zd1211_card_settings(netdev_priv(netdev))); + ASSERT_FN(zd1211_setup_rx_urb(netdev_priv(netdev))); + ASSERT_FN(zd1211_int_enable(netdev_priv(netdev), 1)); out: return result; } @@ -97,7 +97,7 @@ int zd1211_stop(struct net_device *netdev) { int result = 0; - ASSERT_FN(zd1211_int_enable(netdev_priv(netdev), 0)) + ASSERT_FN(zd1211_int_enable(netdev_priv(netdev), 0)); netif_stop_queue(netdev); out: return result; Binary files zd1211ng-orig/src/zd1211_ether.o and zd1211ng/src/zd1211_ether.o differ diff -x CVS -urN zd1211ng-orig/src/zd1211_functions.h zd1211ng/src/zd1211_functions.h --- zd1211ng-orig/src/zd1211_functions.h 2005-05-15 14:46:15.000000000 -0400 +++ zd1211ng/src/zd1211_functions.h 2005-06-15 11:30:57.000000000 -0400 @@ -50,7 +50,7 @@ #define mTEST_BIT(a, b) mCHK_BIT1(a, b) //Evil function result checking macros -#define ASSERT_FN(fn) if ((result = (fn)) != 0) goto out; +#define ASSERT_FN(fn) do { if ((result = (fn)) != 0) goto out; } while (0) ///USB handling functions /** diff -x CVS -urN zd1211ng-orig/src/zd1211_setup.c zd1211ng/src/zd1211_setup.c --- zd1211ng-orig/src/zd1211_setup.c 2005-05-06 15:46:52.000000000 -0400 +++ zd1211ng/src/zd1211_setup.c 2005-06-15 15:43:39.000000000 -0400 @@ -63,12 +63,12 @@ (buflen) = endpoint->wMaxPacketSize; \ (buf) = kmalloc((buflen), GFP_KERNEL); \ if ((urb) == NULL) \ - (urb) = ALLOC_URB(0); \ + (urb) = ALLOC_URB(); \ if ((buf) == NULL || ((urb) == NULL)) { \ err ("Out of memory"); \ goto errout; \ }\ - debug(__FUNCTION__ " - %d bytes allocated for buffer: %p, URB - %p", (buflen), (buf), (urb)); \ + debug("%s - %d bytes allocated for buffer: %p, URB - %p", __FUNCTION__, (buflen), (buf), (urb)); \ } /** @@ -83,17 +83,18 @@ int zd1211_urb_alloc(struct zd1211_priv *priv, struct usb_interface *interface) { int i; //just an index variable - struct usb_interface_descriptor *iface_desc; //interface descriptor struct usb_endpoint_descriptor *endpoint; //endpoint descriptor + __u8 bNumEndpoints = CUR_ALTSETTING(interface).bNumEndpoints; priv->ctrlBufLen = CTRL_BUF_LEN; - iface_desc = CUR_ALTSETTING(interface); - if (NUM_ENDPOINTS(iface_desc) == 0) + if (bNumEndpoints == 0) { + err("No endpoints found for this interface!\n"); goto errout; - for (i = 0; i < NUM_ENDPOINTS(iface_desc); ++i) { - endpoint = &ENDPOINT(iface_desc, i); + } + for (i = 0; i < bNumEndpoints; ++i) { + endpoint = &ENDPOINT(interface, i); - debug(__FUNCTION__ " - endpoint found: 0x%X", endpoint->bEndpointAddress); + debug("%s - endpoint found: 0x%x", __FUNCTION__, endpoint->bEndpointAddress); if (endpoint->bEndpointAddress & EP_RCV_MASK) { if ((endpoint->bEndpointAddress & ~EP_RCV_MASK) == EP_RX_DATA) ALLOC_BUF(priv->rxbuffer, priv->rxbuflen, priv->rxUrb) @@ -126,9 +127,9 @@ //Dirty macros that deallocates the buffer and urb #define FREE_BUF(buf, buflen, urb) \ { \ - debug(__FUNCTION__ " - deallocate buffer: %p, URB - %p", (buf), (urb)); \ + debug("%s - deallocate buffer: %p, URB - %p", __FUNCTION__, (buf), (urb)); \ if ((urb) != NULL) { \ - usb_unlink_urb((urb)); \ + USB_UNLINK_URB((urb)); \ FREE_URB((urb)); \ (urb) = NULL; \ } \ @@ -181,7 +182,7 @@ FIRMWARE_DOWNLOAD, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, codeOff, 0, priv->ctrlBuf, msglen, HZ); if (result < 0) { - err(__FUNCTION__ " Firmware download failed %d", result); + err("%s Firmware download failed %d", __FUNCTION__, result); goto out; } memcpy(ptmp, priv->ctrlBuf, msglen); @@ -210,7 +211,7 @@ int msglen; //length of the message we are going to send over USB u8* ptmp = pBuffer; //temporary pointer to the buffer - debug(__FUNCTION__ " Firmware upload %d bytes", buflen); + debug("%s Firmware upload %d bytes", __FUNCTION__, buflen); while (buflen) { msglen = (buflen < priv->ctrlBufLen)? buflen: priv->ctrlBufLen; memcpy(priv->ctrlBuf, ptmp, msglen); @@ -219,7 +220,7 @@ FIRMWARE_UPLOAD, USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, codeOff, 0, priv->ctrlBuf, msglen, HZ); if (result < 0) { - err(__FUNCTION__ " Firmware upload failed %d", result); + err("%s Firmware upload failed %d", __FUNCTION__, result); goto out; } buflen -= msglen; @@ -232,22 +233,22 @@ FIRMWARE_CONFIRM, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0, 0, priv->ctrlBuf, sizeof(u8), 10 * HZ); if (result < 0) { - err(__FUNCTION__ " Firmware upload check failed %d", result); + err("%s Firmware upload check failed %d", __FUNCTION__, result); goto out; } if (priv->ctrlBuf[0] == 0x80) { - err(__FUNCTION__ " Firmware CRC error"); + err("%s Firmware CRC error", __FUNCTION__); result = -1; goto out; } else if (priv->ctrlBuf[0] == 1) { - debug(__FUNCTION__ " Firmware upload OK"); + debug("%s Firmware upload OK", __FUNCTION__); } else { - err(__FUNCTION__ " Firmware upload undefined error"); + err("%s Firmware upload undefined error", __FUNCTION__); result = -1; goto out; } @@ -278,21 +279,21 @@ */ debug("EEPORM Ver = %x\n", EEPVer); if (priv->release != EEPVer){ - debug(__FUNCTION__ " Chip version 0x%X, firmware version 0x%X", + debug("%s Chip version 0x%X, firmware version 0x%X", __FUNCTION__, priv->release, EEPVer); if (priv->release <= 0x4312) { result = zd1211_LoadUSBSpecCode(priv, WS11Ur2, sizeof(WS11Ur2), cFIRMWARE_OLD_ADDR, 0); if (result < 0) { - err(__FUNCTION__ " WS11Ur2 upload error"); + err("%s WS11Ur2 upload error", __FUNCTION__); return result; } } result = zd1211_LoadUSBSpecCode(priv, WS11Ur, sizeof(WS11Ur), cFIRMWARE_START_ADDR, 1); if (result < 0) { - err(__FUNCTION__ " WS11Ur upload error"); + err("%s WS11Ur upload error", __FUNCTION__); return result; } @@ -301,7 +302,7 @@ sizeof(WS11Ub) - (cEPDATA_OFFSET * 2) - (E2P_END - E2P_SUBID), cFIRMWARE_EEPROM_OFFSET + (E2P_END - E2P_SUBID) / 2, 1); if (result < 0) { - err(__FUNCTION__ " WS11Ub upload error"); + err("%s WS11Ub upload error", __FUNCTION__); return result; } @@ -312,7 +313,7 @@ result = zd1211_GetUSBSpecCode(priv, WS11Ub + (cEPDATA_OFFSET * 2), (E2P_END - E2P_SUBID), cFIRMWARE_EEPROM_OFFSET); if (result < 0) { - err(__FUNCTION__ " Read EEPROM Data fail"); + err("%s Read EEPROM Data fail", __FUNCTION__); return result; } @@ -323,7 +324,7 @@ (E2P_END - E2P_SUBID) + (cEPDATA_OFFSET * 2), cBOOTCODE_START_ADDR, 0); if (result < 0) { - err(__FUNCTION__ "Write EEPROM Data fail"); + err("%s Write EEPROM Data fail", __FUNCTION__); return result; } @@ -334,7 +335,7 @@ cFIRMWARE_START_ADDR, 1); if (result < 0) { - err(__FUNCTION__ "Load WS11UPh fail\n"); + err("%s Load WS11UPh fail\n", __FUNCTION__); return result; } return 0; @@ -361,7 +362,7 @@ { if ((i % 4) == 0) { - ASSERT_FN(zd1211_read_eeprom_reg(priv, addrs[i / 4], &val)) + ASSERT_FN(zd1211_read_eeprom_reg(priv, addrs[i / 4], &val)); val -= cPWR_INT_VALUE_GUARD; debug("Integration value: 0x%08X", val); } @@ -370,6 +371,7 @@ val >>= 8; } out: + debug("%s result %d",__FUNCTION__,result); return result; } @@ -386,57 +388,55 @@ u8 mac_addr[ETH_ALEN]; //macaddress of the device //Get RF_Mode from EEPROM - ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_POD, &val)) + ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_POD, &val)); priv->ieee.rfMode = (u8)(val & 0x0F); - if (val == 0x04 || val == 0x07) { - debug("AiroHa RF"); - } - else if (val == 0x09) { - debug("GCT RF"); - } - else if (val == RFMD_RF) { - debug("RFMD RF"); - } - else { - debug("Unknown RF - 0x%X", val); + switch (priv->ieee.rfMode) { + case RF_AIROHA: debug("Airoha RF"); break; + case RF_MAXIM: debug("Maxim RF"); break; + case RF_RFMD: debug("RFMD RF"); break; + case 0x9: debug("GCT RF?"); break; + default: debug("Unknown RF : 0x%x", priv->ieee.rfMode); } - + //Get adapter type - if (val & BIT_9) - priv->ieee.size = ZD_ADAPTER; - else - priv->ieee.size = ZD_DONGLE; + if (val & BIT_9) { + priv->ieee.size = ADAPTER_NORMAL; + debug("Normal size adapter"); + } else { + priv->ieee.size = ADAPTER_DONGLE; + debug("Dongle size adapter"); + } if ((result = zd1211_read_integration(priv)) != 0) goto out; //Stop the device (???) - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_GPI_EN, 0x00)) + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_GPI_EN, 0x00)); //Now let's call a function from hardware part of 802.11 - ASSERT_FN(zd1211_reset(priv)) - ASSERT_FN(zd1211_init_hmac(priv)) + ASSERT_FN(zd1211_reset(priv)); + ASSERT_FN(zd1211_init_hmac(priv)); //Read MAC address from EEPROM and write it to the HW register - ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_MACADDRL, &val)) + ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_MACADDRL, &val)); memcpy(mac_addr, &val, sizeof(val)); - ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_MACADDRH, &val)) + ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_MACADDRH, &val)); val &= 0xFFFF; memcpy(mac_addr + sizeof(u32), &val, sizeof(u16)); - ASSERT_FN(zd1211_set_mac_address(priv->net_dev, mac_addr)) + ASSERT_FN(zd1211_set_mac_address(priv->net_dev, mac_addr)); info("MAC adress: %02X:%02X:%02X:%02X:%02X:%02X", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); //Read the allowed channel - ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_ALLOWED_CHANNEL, &val)) + ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_ALLOWED_CHANNEL, &val)); if (!(val & 0xFFFF0000)) val |= 0x10000; debug("Allowed channel 0x%X", val); priv->ieee.allowedChannels = val; //Read the region code - ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_SUBID, &val)) + ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_SUBID, &val)); val >>= 16; debug("Region code - 0x%X", val); priv->ieee.regionCode = (u16)val; @@ -445,11 +445,14 @@ priv->ieee.phyTest = 4; //Set up the current channel - ASSERT_FN(zd1211_set_channel(priv, (u16)(priv->ieee.allowedChannels >> 16))) + ASSERT_FN(zd1211_set_channel(priv, (u16)(priv->ieee.allowedChannels >> 16))); //Disable interrupts from a card - ASSERT_FN(zd1211_int_enable(priv, 0)) + ASSERT_FN(zd1211_int_enable(priv, 0)); out: + if (result) + debug("%s error : %d",__FUNCTION__,result); + return result; } Binary files zd1211ng-orig/src/zd1211_setup.o and zd1211ng/src/zd1211_setup.o differ diff -x CVS -urN zd1211ng-orig/src/zd1211_usb.c zd1211ng/src/zd1211_usb.c --- zd1211ng-orig/src/zd1211_usb.c 2005-05-15 14:46:15.000000000 -0400 +++ zd1211ng/src/zd1211_usb.c 2005-06-15 14:19:45.000000000 -0400 @@ -25,23 +25,21 @@ #include "zd1211.h" #include "zd1211_functions.h" -static void zd1211_mac_resp_callback(struct urb *urb); +static void zd1211_mac_resp_callback(struct urb *urb PT_REGS); /** * zd1211_readreg_callback * @brief Function serves register reading completition * @param urb urb we have received */ -static void zd1211_readreg_callback(struct urb *uurb) +static void zd1211_readreg_callback(struct urb *uurb PT_REGS) { //device descriptor pointer struct zd1211_priv* priv = (struct zd1211_priv*)uurb->context; - if (!priv->usb_dev) - return; priv->macCmdResult = uurb->status; - if (uurb->status != 0 && waitqueue_active(&priv->regwq)) - wake_up_interruptible(&priv->regwq); + priv->reg_rw_sent = 1; + wake_up_all(&priv->regwq); } /** @@ -49,16 +47,14 @@ * @brief Function serves register writing completition * @param urb urb we have received */ -static void zd1211_writereg_callback(struct urb *uurb) +static void zd1211_writereg_callback(struct urb *uurb PT_REGS) { //device descriptor pointer struct zd1211_priv* priv = (struct zd1211_priv*)uurb->context; - if (!priv->usb_dev) - return; priv->macCmdResult = uurb->status; - if (waitqueue_active(&priv->regwq)) - wake_up_interruptible(&priv->regwq); + priv->reg_rw_sent = 1; + wake_up_all(&priv->regwq); } /** @@ -74,7 +70,7 @@ usb_rcvintpipe(priv->usb_dev, EP_MAC_RESP), priv->macRspBuf[PRIMARY_RSP_BUF], priv->macRspBufLen, zd1211_mac_resp_callback, priv, HZ); - return usb_submit_urb(priv->macRspUrb); + return USB_SUBMIT_URB(priv->macRspUrb); } /** @@ -82,20 +78,19 @@ * @brief function serves receiving the responce from the register reading * @param urb urb we have received */ -static void zd1211_mac_resp_callback(struct urb *urb) +static void zd1211_mac_resp_callback(struct urb *urb PT_REGS) { struct zd1211_priv* priv = (struct zd1211_priv*)urb->context; - if (!priv->usb_dev) - return; - spin_lock(&priv->lock); priv->macRspResult = urb->status; - spin_unlock(&priv->lock); memcpy(priv->macRspBuf[SECONDARY_RSP_BUF], priv->macRspBuf[PRIMARY_RSP_BUF], urb->actual_length); - if (waitqueue_active(&priv->regwq)) - wake_up_interruptible(&priv->regwq); + + priv->resp_received = 1; + wake_up_all(&priv->regwq); + + RESUBMIT_URB(priv); } /** @@ -142,22 +137,24 @@ priv->macCmdBuf, sizeof(struct regReadReq), zd1211_readreg_callback, priv); - result = usb_submit_urb(urb); + priv->reg_rw_sent = 0; + priv->resp_received = 0; + result = USB_SUBMIT_URB(urb); if (result < 0) { - err(__FUNCTION__ " Unable to submit URB, %d", result); + err("%s Unable to submit URB, %d", __FUNCTION__, result); goto out; } - interruptible_sleep_on(&priv->regwq); + wait_event_interruptible(priv->regwq, priv->reg_rw_sent && priv->resp_received); if (signal_pending(current)) { result = -EINTR; goto out; } - + if (priv->macCmdResult == 0 && priv->macRspResult == 0) { if (le16_to_cpu(reg1->id) != REG_GOT || le16_to_cpu(reg1->addr0) != addr) { - err(__FUNCTION__ " Urb results are different 0x%04X != 0x%04X, 0x%04X != 0x%04X", + err("%s Urb results are different 0x%04X != 0x%04X, 0x%04X != 0x%04X", __FUNCTION__, reg1->id, REG_GOT, reg1->addr0, addr); result = -EINVAL; } @@ -172,12 +169,12 @@ result = priv->macCmdResult; else result = priv->macRspResult; - err(__FUNCTION__ " Urb error %d", result); + err("%s Urb error %d", __FUNCTION__, result); } out: up(&priv->reg_sem); if (result != 0) - err(__FUNCTION__ " Register 0x%04X read failed %d", addr, result); + err("%s Register 0x%04X read failed %d", __FUNCTION__, addr, result); else { reg_debug("0x%04X = 0x%04X%04X", addr, reg1->data1, reg1->data0); } @@ -224,12 +221,13 @@ priv->macCmdBuf, sizeof(struct regWriteReq), zd1211_writereg_callback, priv); - result = usb_submit_urb(urb); + priv->reg_rw_sent = 0; + result = USB_SUBMIT_URB(urb); if (result < 0) { - err(__FUNCTION__ " Unable to submit URB %d", result); + err("%s Unable to submit URB %d", __FUNCTION__, result); goto out; } - interruptible_sleep_on(&priv->regwq); + wait_event_interruptible(priv->regwq, priv->reg_rw_sent); if (signal_pending(current)) { result = -EINTR; goto out; @@ -240,7 +238,7 @@ out: up(&priv->reg_sem); if (result != 0) - err(__FUNCTION__ " Register 0x%04X write failed %d", addr, result); + err("%s Register 0x%04X write failed %d", __FUNCTION__, addr, result); else { reg_debug("0x%04X done", addr); } @@ -303,12 +301,13 @@ usb_fill_bulk_urb(urb, dev, usb_sndbulkpipe(dev, EP_MAC_REQ), priv->macCmdBuf, len, zd1211_writereg_callback, priv); - result = usb_submit_urb(urb); + priv->reg_rw_sent = 0; + result = USB_SUBMIT_URB(urb); if (result < 0) { - err(__FUNCTION__ " Unable to submit URB %d", result); + err("%s Unable to submit URB %d", __FUNCTION__, result); goto out; } - interruptible_sleep_on(&priv->regwq); + wait_event_interruptible(priv->regwq, priv->reg_rw_sent); if (signal_pending(current)) { result = -EINTR; goto out; @@ -319,7 +318,7 @@ out: up(&priv->reg_sem); if (result != 0) - err(__FUNCTION__ " RF configuration failed %d", result); + err("%s RF configuration failed %d", __FUNCTION__, result); return result; } @@ -337,11 +336,11 @@ } /** - * zd1211_readreg_callback - * @brief Function serves register reading completition + * zd1211_rx_data + * @brief Receive data * @param urb urb we have received */ -static void zd1211_rx_data(struct urb *uurb) +static void zd1211_rx_data(struct urb *uurb PT_REGS) { //device descriptor pointer struct zd1211_priv* priv = (struct zd1211_priv*)uurb->context; @@ -367,7 +366,7 @@ usb_rcvintpipe(priv->usb_dev, EP_RX_DATA), priv->rxbuffer, priv->rxbuflen, zd1211_rx_data, priv, HZ); - return usb_submit_urb(priv->rxUrb); + return USB_SUBMIT_URB(priv->rxUrb); } Binary files zd1211ng-orig/src/zd1211_usb.o and zd1211ng/src/zd1211_usb.o differ diff -x CVS -urN zd1211ng-orig/src/zdparm.h zd1211ng/src/zdparm.h --- zd1211ng-orig/src/zdparm.h 2005-05-15 14:46:15.000000000 -0400 +++ zd1211ng/src/zdparm.h 2005-06-15 11:40:15.000000000 -0400 @@ -93,5 +93,18 @@ #define CW_LONG_SLOT 0x7f047f // CW min limit - 3F us, Slot time reload number - 041 us, CW max limit - 7F us +//RF types +#define RF_AIROHA 0x4 +#define RF_MAXIM 0x8 +#define RF_RFMD 0xd + +//LED types +#define LED_ONE 0x0 +#define LED_TWO 0x1 + +//Adapter size +#define ADAPTER_DONGLE 0x0 +#define ADAPTER_NORMAL 0x1 + #endif //eof diff -x CVS -urN zd1211ng-orig/src/zdusb.h zd1211ng/src/zdusb.h --- zd1211ng-orig/src/zdusb.h 2005-04-30 16:00:37.000000000 -0400 +++ zd1211ng/src/zdusb.h 2005-06-15 11:42:21.000000000 -0400 @@ -138,9 +138,6 @@ #endif //end of USB -//RF modes -#define RFMD_RF 0xD - //RF flags #define ZD_IF_LE 1 #define ZD_RF_CLK 2 |
From: Dan S. <dds...@ie...> - 2005-06-16 14:29:12
|
Ok, thanks. I will hold off on any more changes until I hear more from you. On Thu, 16 Jun 2005, Dmitriy Korovkin wrote: >Dan, >Thank you very much for the patch. >I'm afraid, I can't agree with all of your changes. Before integrating >this patch I need to review it more carefully. >But you've done a great work! >Regards, > >On Wed, 15 Jun 2005, Dan Streetman wrote: > >> Date: Wed, 15 Jun 2005 16:01:41 -0400 (EDT) >> From: Dan Streetman <dds...@ie...> >> To: zd1...@li... >> Cc: Dmitriy Korovkin <kor...@to...> >> Subject: [patch] updates to zd1211ng for 2.6(.11) >> >> >> Hi all, >> >> I have been working on the ng-code for a couple days and I finally have >> the module successfully loading and talking to the zd1211 chip, without >> crashing or being unable to unload :) >> >> Unfortuntately I still can't actually use my adapter as it's in "airoha" >> RF mode and only RFMD mode is supported so far... >> >> Anyway, there are many more changes I would like to make (starting with >> adding airoha support if I can figure it out), but first here is the patch >> I have so far. I will try to list all changes: >> >> -move common parts of src/2.4/zd1211.h and src/2.6/zd1211.h into >> src/zd1211.h >> -move different parts of src/2.4/zd1211.h and src/2.5/zd1211.h into new >> files src/2.4/zd1211_kernel.h and src/2.6/zd1211_kernel.h >> -replace deprecated interruptible_wait_on() with >> wait_event_interruptible() >> -add flags (condition flags) for use with wait_event_interruptible() >> -add several new macros due to 2.4/2.6 differences, change existing macros >> -put do {...} while(0) around ASSERT_FN() as is standard practice (so >> macro ends with a ;) >> -clean up .*.cmd in src/ directory as well as src/2.6/ directory >> -use free_netdev() not kfree() >> -remove unneeded spinlock >> -add debug statements >> -fix RF type debugging >> -add code to resubmit interrupt-in buffer (it doesn't resubmit itself like >> it used to in 2.4) >> -add #defines to replace some magic numbers >> >> >> Any chance this can make it into CVS? >> >> Thanks! >> >> >> >> diff -x CVS -urN zd1211ng-orig/src/2.4/zd1211.h zd1211ng/src/2.4/zd1211.h >> --- zd1211ng-orig/src/2.4/zd1211.h 2005-06-08 18:54:56.000000000 -0400 >> +++ zd1211ng/src/2.4/zd1211.h 1969-12-31 19:00:00.000000000 -0500 >> @@ -1,154 +0,0 @@ >> -/* >> - * $Id: zd1211.h,v 1.10 2005/06/08 22:54:56 sagamore Exp $ >> - * >> - * Copyright (C) 2005 Arno WILLIG (ak...@us...) >> - * Copyright (C) 2005 Dimitriy KOROVKIN (kor...@us...) >> - * Copyright (C) 2005 Markus KARG (mar...@us...) >> - * >> - * This file is part of the ZD1211 Wireless USB Driver for Linux. >> - * >> - * This driver is free software; you can redistribute it and/or modify >> - * it under the terms of the GNU General Public License as published by >> - * the Free Software Foundation; either version 2 of the License, or >> - * (at your option) any later version. >> - * >> - * This driver is distributed in the hope that it will be useful, >> - * but WITHOUT ANY WARRANTY; without even the implied warranty of >> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> - * GNU General Public License for more details. >> - * >> - * You should have received a copy of the GNU General Public License >> - * along with this driver; if not, write to the Free Software >> - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA >> - */ >> - >> -#ifndef _ZD1211_H_ >> -#define _ZD1211_H_ >> - >> - >> -#include <linux/sched.h> >> -#include <linux/interrupt.h> >> -#include <linux/netdevice.h> >> -#include <linux/etherdevice.h> >> -#include <linux/usb.h> >> -#include <linux/slab.h> >> -#include <linux/spinlock.h> >> -#include <linux/smp_lock.h> >> - >> -#include <linux/wireless.h> >> -#include <linux/version.h> >> -#include <zdparm.h> >> - >> -/** >> - * Linux kernel module compliant definitions. >> - */ >> -#define DRIVER_AUTHOR "Arno WILLIG <ak...@us...>" >> -#define DRIVER_DESC "ZD1211 802.11b/g USB WLAN driver" >> -#define DRIVER_URL "http://zd1211.sourceforge.net/" >> -#define DRIVER_VERSION "0.0.1" >> -#define DRIVER_LICENSE "GPL" >> - >> -/** >> - * Driver constants >> - */ >> -#define CTRL_BUF_LEN 64 //Length of the buffer used for control operations >> - >> -//Primary and secondary responce buffers >> -#define PRIMARY_RSP_BUF 0 >> -#define SECONDARY_RSP_BUF 1 >> - >> -/** >> - * enumeration describes the adapter size >> - */ >> -typedef enum >> -{ >> - ZD_ADAPTER, ZD_DONGLE >> -} AdapterSize; >> - >> -/** >> - * This structure describes the 802.11 part of the device >> - */ >> -struct ieee80211_device >> -{ >> - u16 channel; //the channel number >> - u32 allowedChannels; //mask of the allower channels >> - u8 rfMode; //RF mode of the chip >> - u16 rfBitWidth; //The valid bit the data field >> - AdapterSize size; //Adapter size flag >> - u8 intValue[N_CHANNELS]; //integration values for channels >> - u16 regionCode; //The region code >> - u32 intrMask; //interrupt mask >> - u8 txGainSetting; //transmit gain setting >> - u8 phyTest; //PHY testing parameter >> - u8 bssType; //BSS type (what were you thinking it might be?) >> - u8 basicRate; //the maximum rate this card can handle >> - u16 beaconPeriod; //beaconPeriod >> - u16 beaconInterval; //beacon interval >> -#if TX_GAIN_OFDM >> - u8 txGainSetting2; //another transmit gain setting for OFDM >> -#endif >> - u8 macMode; //MAC mode (802.11b, 802.11g etc.) >> - u8 normalRates[NUM_SUPPORTED_RATE]; //Normal supported transfer rates >> - int nnRates; //number of normal rates >> - u8 extRates[NUM_SUPPORTED_RATE]; //Extended supported transfer rates >> - int neRates; //number of extended rates >> -}; >> - >> -/** >> - * This structure describes the device. >> - */ >> -struct zd1211_priv >> -{ >> - struct ieee80211_device ieee; >> - struct usb_device *usb_dev; >> - struct net_device *net_dev; >> - struct iw_statistics wstats; >> - struct proc_dir_entry *dir_dev; >> - >> - u8 mac_addr[ETH_ALEN]; >> - int release; //Number of the software release >> - >> - /* >> - * FIXME: we MUST try to do zerocopy if possible, >> - * may be we need to allocate an skbuff and submit it as a buffer >> - */ >> - u8* rxbuffer; // RX data buffer >> - int rxbuflen; // RX buffer length >> - struct urb* rxUrb; //receive urb >> - >> - u8* txbuffer; // TX data buffer >> - int txbuflen; // TX buffer length >> - struct urb* txUrb; //transmit urb >> - >> - u8* macCmdBuf; // MAC command buffer >> - int macCmdBufLen; // MAC command buffer length >> - struct urb* macCmdUrb; //MAC request URB >> - int macCmdResult; //result of the of the command >> - >> - u8* macRspBuf[2]; // MAC responce buffer >> - int macRspBufLen; // MAC responce buffer length >> - struct urb* macRspUrb; //MAC responce urb >> - int macRspResult; //result of the of the command >> - >> - u8 ctrlBuf[CTRL_BUF_LEN]; //Buffer for control operations >> - int ctrlBufLen; //Length of the control buffer >> - >> - u8 ep4int; // if EP4 is interrupt (it may be bulk, you know) >> - struct semaphore reg_sem; // locks access to registers >> - wait_queue_head_t regwq; //device register read/write wait queue >> - spinlock_t lock; //lock to be used to lock structure access >> -}; >> - >> -#ifndef HAVE_NETDEV_PRIV >> -static inline void *netdev_priv(struct net_device *dev) >> -{ >> - return dev->priv; >> -} >> -#endif //HAVE_NETDEV_PRIV >> -//Kernel dependent macroses >> -#define NUM_ENDPOINTS(ifdesc) (ifdesc)->bNumEndpoints >> -#define CUR_ALTSETTING(iface) (iface)->altsetting + (iface)->act_altsetting >> -#define ENDPOINT(iface_desc, i) (iface_desc)->endpoint[(i)] >> -#define ALLOC_URB(len) usb_alloc_urb((len)) >> -#define FREE_URB(urb) usb_free_urb ((urb)) >> -#endif >> diff -x CVS -urN zd1211ng-orig/src/2.4/zd1211_kernel.h zd1211ng/src/2.4/zd1211_kernel.h >> --- zd1211ng-orig/src/2.4/zd1211_kernel.h 1969-12-31 19:00:00.000000000 -0500 >> +++ zd1211ng/src/2.4/zd1211_kernel.h 2005-06-15 14:13:14.000000000 -0400 >> @@ -0,0 +1,38 @@ >> +/* >> + * $Id: zd1211.h,v 1.10 2005/06/08 22:54:56 sagamore Exp $ >> + * >> + * Copyright (C) 2005 Arno WILLIG (ak...@us...) >> + * Copyright (C) 2005 Dimitriy KOROVKIN (kor...@us...) >> + * Copyright (C) 2005 Markus KARG (mar...@us...) >> + * >> + * This file is part of the ZD1211 Wireless USB Driver for Linux. >> + * >> + * This driver is free software; you can redistribute it and/or modify >> + * it under the terms of the GNU General Public License as published by >> + * the Free Software Foundation; either version 2 of the License, or >> + * (at your option) any later version. >> + * >> + * This driver is distributed in the hope that it will be useful, >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> + * GNU General Public License for more details. >> + * >> + * You should have received a copy of the GNU General Public License >> + * along with this driver; if not, write to the Free Software >> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA >> + */ >> + >> +#ifndef _ZD1211_KERNEL_H_ >> +#define _ZD1211_KERNEL_H_ >> + >> +//Kernel dependent macroses >> +#define CUR_ALTSETTING(iface) ((iface)->altsetting[(iface)->act_altsetting]) >> +#define ENDPOINT(iface, i) (CUR_ALTSETTING(iface).endpoint[i]) >> +#define ALLOC_URB() (usb_alloc_urb(0)) >> +#define FREE_URB(urb) (usb_free_urb ((urb))) >> +#define PT_REGS >> +#define USB_SUBMIT_URB(urb) (usb_submit_urb(urb)) >> +#define USB_UNLINK_URB(urb) (usb_unlink_urb(urb)) >> +#define RESUBMIT_URB(priv) do { } while(0) >> + >> +#endif /* _ZD1211_KERNEL_H_ */ >> diff -x CVS -urN zd1211ng-orig/src/2.6/Makefile zd1211ng/src/2.6/Makefile >> --- zd1211ng-orig/src/2.6/Makefile 2005-06-14 18:05:33.000000000 -0400 >> +++ zd1211ng/src/2.6/Makefile 2005-06-15 15:38:42.000000000 -0400 >> @@ -59,7 +59,7 @@ >> >> >> clean: >> - @-rm -rf *.o *.ko .*.cmd *.mod.c .tmp_versions *~ >> + @-rm -rf *.o *.ko .*.cmd ../.*.cmd *.mod.c .tmp_versions *~ >> >> insmod: >> @insmod ${TARGET}.ko >> diff -x CVS -urN zd1211ng-orig/src/2.6/zd1211.c zd1211ng/src/2.6/zd1211.c >> --- zd1211ng-orig/src/2.6/zd1211.c 2005-06-14 18:05:33.000000000 -0400 >> +++ zd1211ng/src/2.6/zd1211.c 2005-06-15 15:36:44.000000000 -0400 >> @@ -76,7 +76,7 @@ >> static inline void zd1211_delete(struct zd1211_priv *priv) >> { >> if (priv) >> - kfree(priv->net_dev); >> + free_netdev(priv->net_dev); >> } >> >> /** >> @@ -87,14 +87,17 @@ >> { >> struct zd1211_priv *priv = usb_get_intfdata(interface); >> >> + debug("Got zd1211 device disconnect."); >> flush_scheduled_work(); >> usb_put_dev(interface_to_usbdev(interface)); >> usb_set_intfdata(interface, NULL); >> + debug("Freeing URBs"); >> down(&priv->reg_sem); >> zd1211_urb_delete(priv); >> - debug("Unregister net device"); >> + debug("Unregistering net device"); >> unregister_netdev(priv->net_dev); >> up(&priv->reg_sem); >> + debug("Freeing net device"); >> zd1211_delete(priv); >> info("zd1211 device disconnected.\n"); >> } >> @@ -111,16 +114,13 @@ >> dev = alloc_etherdev(sizeof(*priv)); >> if (dev == NULL) { >> err("%s Out of memory", __FUNCTION__); >> - goto error; >> + return NULL; >> } >> priv = netdev_priv(dev); >> - memset(priv, 0, sizeof(struct zd1211_priv)); >> + memset(priv, 0, sizeof(*priv)); >> priv->usb_dev = usb_dev; >> priv->net_dev = dev; >> return dev; >> -error: >> - zd1211_delete(priv); >> - return NULL; >> } >> >> /** >> @@ -132,7 +132,7 @@ >> { >> struct usb_device *usb_dev = interface_to_usbdev(interface); >> struct net_device *dev; >> - struct zd1211_priv *priv; >> + struct zd1211_priv *priv = NULL; >> int vendor_id, product_id; >> int result = 0; >> >> @@ -168,7 +168,6 @@ >> usb_set_intfdata(interface, priv); >> init_MUTEX(&priv->reg_sem); >> init_waitqueue_head (&priv->regwq); >> - spin_lock_init(&priv->lock); >> // spin_lock_init(&dev->lock); >> >> if (zd1211_loadFirmware(priv) < 0) >> diff -x CVS -urN zd1211ng-orig/src/2.6/zd1211.h zd1211ng/src/2.6/zd1211.h >> --- zd1211ng-orig/src/2.6/zd1211.h 2005-06-14 18:05:33.000000000 -0400 >> +++ zd1211ng/src/2.6/zd1211.h 1969-12-31 19:00:00.000000000 -0500 >> @@ -1,154 +0,0 @@ >> -/* >> - * $Id: zd1211.h,v 1.8 2005/06/14 22:05:33 sagamore Exp $ >> - * >> - * Copyright (C) 2005 Arno WILLIG (ak...@us...) >> - * Copyright (C) 2005 Dimitriy KOROVKIN (kor...@us...) >> - * Copyright (C) 2005 Markus KARG (mar...@us...) >> - * >> - * This file is part of the ZD1211 Wireless USB Driver for Linux. >> - * >> - * This driver is free software; you can redistribute it and/or modify >> - * it under the terms of the GNU General Public License as published by >> - * the Free Software Foundation; either version 2 of the License, or >> - * (at your option) any later version. >> - * >> - * This driver is distributed in the hope that it will be useful, >> - * but WITHOUT ANY WARRANTY; without even the implied warranty of >> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> - * GNU General Public License for more details. >> - * >> - * You should have received a copy of the GNU General Public License >> - * along with this driver; if not, write to the Free Software >> - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA >> - */ >> - >> -#ifndef _ZD1211_H_ >> -#define _ZD1211_H_ >> - >> - >> -#include <linux/sched.h> >> -#include <linux/interrupt.h> >> -#include <linux/netdevice.h> >> -#include <linux/etherdevice.h> >> -#include <linux/usb.h> >> -#include <linux/slab.h> >> -#include <linux/spinlock.h> >> -#include <linux/smp_lock.h> >> - >> -#include <linux/wireless.h> >> -#include <linux/version.h> >> -#include <zdparm.h> >> - >> -/** >> - * Linux kernel module compliant definitions. >> - */ >> -#define DRIVER_AUTHOR "Arno WILLIG <ak...@us...>" >> -#define DRIVER_DESC "ZD1211 802.11b/g USB WLAN driver" >> -#define DRIVER_URL "http://zd1211.sourceforge.net/" >> -#define DRIVER_VERSION "0.0.1" >> -#define DRIVER_LICENSE "GPL" >> - >> -/** >> - * Driver constants >> - */ >> -#define CTRL_BUF_LEN 64 //Length of the buffer used for control operations >> - >> -//Primary and secondary responce buffers >> -#define PRIMARY_RSP_BUF 0 >> -#define SECONDARY_RSP_BUF 1 >> - >> -/** >> - * enumeration describes the adapter size >> - */ >> -typedef enum >> -{ >> - ZD_ADAPTER, ZD_DONGLE >> -} AdapterSize; >> - >> -/** >> - * This structure describes the 802.11 part of the device >> - */ >> -struct ieee80211_device >> -{ >> - u16 channel; //the channel number >> - u32 allowedChannels; //mask of the allower channels >> - u8 rfMode; //RF mode of the chip >> - u16 rfBitWidth; //The valid bit the data field >> - AdapterSize size; //Adapter size flag >> - u8 intValue[N_CHANNELS]; //integration values for channels >> - u16 regionCode; //The region code >> - u32 intrMask; //interrupt mask >> - u8 txGainSetting; //transmit gain setting >> - u8 phyTest; //PHY testing parameter >> - u8 bssType; //BSS type (what were you thinking it might be?) >> - u8 basicRate; //the maximum rate this card can handle >> - u16 beaconPeriod; //beaconPeriod >> - u16 beaconInterval; //beacon interval >> -#if TX_GAIN_OFDM >> - u8 txGainSetting2; //another transmit gain setting for OFDM >> -#endif >> - u8 macMode; //MAC mode (802.11b, 802.11g etc.) >> - u8 normalRates[NUM_SUPPORTED_RATE]; //Normal supported transfer rates >> - int nnRates; //number of normal rates >> - u8 extRates[NUM_SUPPORTED_RATE]; //Extended supported transfer rates >> - int neRates; //number of extended rates >> -}; >> - >> -/** >> - * This structure describes the device. >> - */ >> -struct zd1211_priv >> -{ >> - struct ieee80211_device ieee; >> - struct usb_device *usb_dev; >> - struct net_device *net_dev; >> - struct iw_statistics wstats; >> - struct proc_dir_entry *dir_dev; >> - >> - u8 mac_addr[ETH_ALEN]; >> - int release; //Number of the software release >> - >> - /* >> - * FIXME: we MUST try to do zerocopy if possible, >> - * may be we need to allocate an skbuff and submit it as a buffer >> - */ >> - u8* rxbuffer; // RX data buffer >> - int rxbuflen; // RX buffer length >> - struct urb* rxUrb; //receive urb >> - >> - u8* txbuffer; // TX data buffer >> - int txbuflen; // TX buffer length >> - struct urb* txUrb; //transmit urb >> - >> - u8* macCmdBuf; // MAC command buffer >> - int macCmdBufLen; // MAC command buffer length >> - struct urb* macCmdUrb; //MAC request URB >> - int macCmdResult; //result of the of the command >> - >> - u8* macRspBuf[2]; // MAC responce buffer >> - int macRspBufLen; // MAC responce buffer length >> - struct urb* macRspUrb; //MAC responce urb >> - int macRspResult; //result of the of the command >> - >> - u8 ctrlBuf[CTRL_BUF_LEN]; //Buffer for control operations >> - int ctrlBufLen; //Length of the control buffer >> - >> - u8 ep4int; // if EP4 is interrupt (it may be bulk, you know) >> - struct semaphore reg_sem; // locks access to registers >> - wait_queue_head_t regwq; //device register read/write wait queue >> - spinlock_t lock; //lock to be used to lock structure access >> -}; >> - >> -#ifndef HAVE_NETDEV_PRIV >> -static inline void *netdev_priv(struct net_device *dev) >> -{ >> - return dev->priv; >> -} >> -#endif //HAVE_NETDEV_PRIV >> - >> -//Kernel dependent macroses >> -#define NUM_ENDPOINT(ifdesc) (ifdesc)->desc.bNumEndpoints >> -#define CUR_ALTSETTING(iface) (iface)->cur_altsetting >> -#define ENDPOINT(iface_desc, i) (iface_desc)->endpoint[(i)].desc >> - >> -#endif >> diff -x CVS -urN zd1211ng-orig/src/2.6/zd1211_kernel.h zd1211ng/src/2.6/zd1211_kernel.h >> --- zd1211ng-orig/src/2.6/zd1211_kernel.h 1969-12-31 19:00:00.000000000 -0500 >> +++ zd1211ng/src/2.6/zd1211_kernel.h 2005-06-15 14:16:24.000000000 -0400 >> @@ -0,0 +1,42 @@ >> +/* >> + * $Id: zd1211.h,v 1.7 2005/06/13 23:33:42 sagamore Exp $ >> + * >> + * Copyright (C) 2005 Arno WILLIG (ak...@us...) >> + * Copyright (C) 2005 Dimitriy KOROVKIN (kor...@us...) >> + * Copyright (C) 2005 Markus KARG (mar...@us...) >> + * >> + * This file is part of the ZD1211 Wireless USB Driver for Linux. >> + * >> + * This driver is free software; you can redistribute it and/or modify >> + * it under the terms of the GNU General Public License as published by >> + * the Free Software Foundation; either version 2 of the License, or >> + * (at your option) any later version. >> + * >> + * This driver is distributed in the hope that it will be useful, >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> + * GNU General Public License for more details. >> + * >> + * You should have received a copy of the GNU General Public License >> + * along with this driver; if not, write to the Free Software >> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA >> + */ >> + >> +#ifndef _ZD1211_KERNEL_H_ >> +#define _ZD1211_KERNEL_H_ >> + >> +//Kernel dependent macroses >> +#define CUR_ALTSETTING(iface) ((iface)->cur_altsetting->desc) >> +#define ENDPOINT(iface, i) ((iface)->cur_altsetting->endpoint[(i)].desc) >> +#define ALLOC_URB() (usb_alloc_urb(0, GFP_KERNEL)) >> +#define FREE_URB(urb) (usb_free_urb ((urb))) >> +#define PT_REGS , struct pt_regs *regs >> +#define USB_SUBMIT_URB(urb) (usb_submit_urb(urb, GFP_KERNEL)) >> +#define USB_UNLINK_URB(urb) (usb_kill_urb(urb)) >> +#define RESUBMIT_URB(priv) do { \ >> + int ret; \ >> + if ((ret = zd1211_submit_resp_urb(priv))) \ >> + err("Could not resubmit response URB : %d\n",ret); \ >> +} while(0) >> + >> +#endif >> diff -x CVS -urN zd1211ng-orig/src/zd1211.h zd1211ng/src/zd1211.h >> --- zd1211ng-orig/src/zd1211.h 1969-12-31 19:00:00.000000000 -0500 >> +++ zd1211ng/src/zd1211.h 2005-06-15 14:05:40.000000000 -0400 >> @@ -0,0 +1,140 @@ >> +/* >> + * $Id: zd1211.h,v 1.7 2005/06/13 23:33:42 sagamore Exp $ >> + * >> + * Copyright (C) 2005 Arno WILLIG (ak...@us...) >> + * Copyright (C) 2005 Dimitriy KOROVKIN (kor...@us...) >> + * Copyright (C) 2005 Markus KARG (mar...@us...) >> + * >> + * This file is part of the ZD1211 Wireless USB Driver for Linux. >> + * >> + * This driver is free software; you can redistribute it and/or modify >> + * it under the terms of the GNU General Public License as published by >> + * the Free Software Foundation; either version 2 of the License, or >> + * (at your option) any later version. >> + * >> + * This driver is distributed in the hope that it will be useful, >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> + * GNU General Public License for more details. >> + * >> + * You should have received a copy of the GNU General Public License >> + * along with this driver; if not, write to the Free Software >> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA >> + */ >> + >> +#ifndef _ZD1211_H_ >> +#define _ZD1211_H_ >> + >> +#include <linux/sched.h> >> +#include <linux/interrupt.h> >> +#include <linux/netdevice.h> >> +#include <linux/etherdevice.h> >> +#include <linux/usb.h> >> +#include <linux/slab.h> >> + >> +#include <linux/wireless.h> >> +#include <linux/version.h> >> +#include "zdparm.h" >> +#include "zd1211_kernel.h" >> + >> +/** >> + * Linux kernel module compliant definitions. >> + */ >> +#define DRIVER_AUTHOR "Arno WILLIG <ak...@us...>" >> +#define DRIVER_DESC "ZD1211 802.11b/g USB WLAN driver" >> +#define DRIVER_URL "http://zd1211.sourceforge.net/" >> +#define DRIVER_VERSION "0.0.1" >> +#define DRIVER_LICENSE "GPL" >> + >> +/** >> + * Driver constants >> + */ >> +#define CTRL_BUF_LEN 64 //Length of the buffer used for control operations >> + >> +//Primary and secondary responce buffers >> +#define PRIMARY_RSP_BUF 0 >> +#define SECONDARY_RSP_BUF 1 >> + >> +/** >> + * This structure describes the 802.11 part of the device >> + */ >> +struct ieee80211_device >> +{ >> + u16 channel; //the channel number >> + u32 allowedChannels; //mask of the allower channels >> + u8 rfMode; //RF mode of the chip >> + u16 rfBitWidth; //The valid bit the data field >> + int size; //Adapter size flag >> + u8 intValue[N_CHANNELS]; //integration values for channels >> + u16 regionCode; //The region code >> + u32 intrMask; //interrupt mask >> + u8 txGainSetting; //transmit gain setting >> + u8 phyTest; //PHY testing parameter >> + u8 bssType; //BSS type (what were you thinking it might be?) >> + u8 basicRate; //the maximum rate this card can handle >> + u16 beaconPeriod; //beaconPeriod >> + u16 beaconInterval; //beacon interval >> +#if TX_GAIN_OFDM >> + u8 txGainSetting2; //another transmit gain setting for OFDM >> +#endif >> + u8 macMode; //MAC mode (802.11b, 802.11g etc.) >> + u8 normalRates[NUM_SUPPORTED_RATE]; //Normal supported transfer rates >> + int nnRates; //number of normal rates >> + u8 extRates[NUM_SUPPORTED_RATE]; //Extended supported transfer rates >> + int neRates; //number of extended rates >> +}; >> + >> +/** >> + * This structure describes the device. >> + */ >> +struct zd1211_priv >> +{ >> + struct ieee80211_device ieee; >> + struct usb_device *usb_dev; >> + struct net_device *net_dev; >> + struct iw_statistics wstats; >> + struct proc_dir_entry *dir_dev; >> + >> + u8 mac_addr[ETH_ALEN]; >> + int release; //Number of the software release >> + >> + /* >> + * FIXME: we MUST try to do zerocopy if possible, >> + * may be we need to allocate an skbuff and submit it as a buffer >> + */ >> + u8* rxbuffer; // RX data buffer >> + int rxbuflen; // RX buffer length >> + struct urb* rxUrb; //receive urb >> + >> + u8* txbuffer; // TX data buffer >> + int txbuflen; // TX buffer length >> + struct urb* txUrb; //transmit urb >> + >> + u8* macCmdBuf; // MAC command buffer >> + int macCmdBufLen; // MAC command buffer length >> + struct urb* macCmdUrb; //MAC request URB >> + int macCmdResult; //result of the of the command >> + >> + u8* macRspBuf[2]; // MAC responce buffer >> + int macRspBufLen; // MAC responce buffer length >> + struct urb* macRspUrb; //MAC responce urb >> + int macRspResult; //result of the of the command >> + >> + u8 ctrlBuf[CTRL_BUF_LEN]; //Buffer for control operations >> + int ctrlBufLen; //Length of the control buffer >> + >> + u8 ep4int; // if EP4 is interrupt (it may be bulk, you know) >> + struct semaphore reg_sem; // locks access to registers >> + wait_queue_head_t regwq; //device register read/write wait queue >> + int reg_rw_sent; //flag to indicate the read/write command was sent >> + int resp_received; //flag to indicate a response was received >> +}; >> + >> +#ifndef HAVE_NETDEV_PRIV >> +static inline void *netdev_priv(struct net_device *dev) >> +{ >> + return dev->priv; >> +} >> +#endif //HAVE_NETDEV_PRIV >> + >> +#endif >> diff -x CVS -urN zd1211ng-orig/src/zd1211_802_11_hw.c zd1211ng/src/zd1211_802_11_hw.c >> --- zd1211ng-orig/src/zd1211_802_11_hw.c 2005-05-15 14:46:15.000000000 -0400 >> +++ zd1211ng/src/zd1211_802_11_hw.c 2005-06-15 11:49:15.000000000 -0400 >> @@ -650,7 +650,7 @@ >> nBits = priv->ieee.rfBitWidth; >> //to avoid un-necessary register read/write >> //Read the programming pattern from a register >> - ASSERT_FN(zd1211_read_hw_reg(priv, ZD_CR203, &val)) >> + ASSERT_FN(zd1211_read_hw_reg(priv, ZD_CR203, &val)); >> val = mCLR_BIT(val, ZD_IF_LE);; >> val = mCLR_BIT(val, ZD_RF_CLK); >> //Now let's build the i2c programming pattern >> @@ -666,7 +666,7 @@ >> nBits--; >> value >>= 1; >> } >> - ASSERT_FN(zd1211_cfg_rf(priv, priv->ieee.rfBitWidth, data)) >> + ASSERT_FN(zd1211_cfg_rf(priv, priv->ieee.rfBitWidth, data)); >> >> out: >> return result; >> @@ -692,21 +692,21 @@ >> // Get Phy-Config permission >> if (!initOnly) { >> for (i = 0; i < len; i++) { >> - ASSERT_FN(zd1211_write_hw_reg(priv, initRFMD[i].addr, initRFMD[i].value)) >> + ASSERT_FN(zd1211_write_hw_reg(priv, initRFMD[i].addr, initRFMD[i].value)); >> } >> ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR24, >> - (priv->ieee.size == ZD_ADAPTER)? 0x14: 0x20))//cca threshold >> + (priv->ieee.size == ADAPTER_NORMAL)? 0x14: 0x20));//cca threshold >> ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR106, >> - (priv->ieee.size == ZD_ADAPTER)? 0x1a: 0x22))//cca threshold >> + (priv->ieee.size == ADAPTER_NORMAL)? 0x1a: 0x22));//cca threshold >> len = sizeof(initRFMDSynth) / sizeof(initRFMDSynth[0]); >> for (i = 0; i < len; i++) { >> - ASSERT_FN(zd1211_set_if_synth(priv, initRFMDSynth[i])) >> + ASSERT_FN(zd1211_set_if_synth(priv, initRFMDSynth[i])); >> } >> } >> else { >> - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR122, 0x00)) >> - ASSERT_FN(zd1211_set_if_synth(priv, RFMD2958t[channel * 2])) >> - ASSERT_FN(zd1211_set_if_synth(priv, RFMD2958t[channel * 2 + 1])) >> + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR122, 0x00)); >> + ASSERT_FN(zd1211_set_if_synth(priv, RFMD2958t[channel * 2])); >> + ASSERT_FN(zd1211_set_if_synth(priv, RFMD2958t[channel * 2 + 1])); >> } >> out: >> return result; >> @@ -725,22 +725,22 @@ >> int result = 0; //function result >> >> switch(priv->ieee.rfMode) { >> - case RFMD_RF: { >> + case RF_RFMD: { >> if (txPwrType != cTX_OFDM) { >> - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR31, txGain)) >> + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR31, txGain)); >> } >> else { >> #if !TX_GAIN_OFDM >> - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR31, txGain)) >> + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR31, txGain)); >> #endif >> - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR51, txGain)) >> - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR52, txGain)) >> - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR53, txGain)) >> + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR51, txGain)); >> + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR52, txGain)); >> + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR53, txGain)); >> } >> break; >> } >> default: { >> - err(__FUNCTION__ " Unsupported RF mode 0x%X", priv->ieee.rfMode); >> + err("%s Unsupported RF mode 0x%X", __FUNCTION__, priv->ieee.rfMode); >> result = -EINVAL; >> break; >> } >> @@ -827,20 +827,20 @@ >> { >> int result = 0; //The function call result >> >> - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CONFIGPhilips, 0x00)) >> + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CONFIGPhilips, 0x00)); >> switch (priv->ieee.rfMode) >> { >> - case RFMD_RF: //For now we can check this setting only >> + case RF_RFMD: //For now we can check this setting only >> { >> priv->ieee.rfBitWidth = 0x18; >> - ASSERT_FN(zd1211_set_RFMD_chip(priv, channel, initOnly)) >> + ASSERT_FN(zd1211_set_RFMD_chip(priv, channel, initOnly)); >> if (!initOnly) >> - ASSERT_FN(zd1211_update_integration(priv, channel)) >> + ASSERT_FN(zd1211_update_integration(priv, channel)); >> break; >> } >> default: >> { >> - err(__FUNCTION__ " Unsupported RF mode 0x%X", priv->ieee.rfMode); >> + err("%s Unsupported RF mode 0x%X", __FUNCTION__, priv->ieee.rfMode); >> result = -EINVAL; >> break; >> } >> @@ -863,7 +863,7 @@ >> int result = 0; //the operation result >> >> //I hope we will get more region options >> - ASSERT_FN(zd1211_read_hw_reg(priv, ZD_CR5, &val)) >> + ASSERT_FN(zd1211_read_hw_reg(priv, ZD_CR5, &val)); >> switch(regionCode) >> { >> case ZD_JAPAN: >> @@ -877,7 +877,7 @@ >> break; >> } >> } >> - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR5, val)) >> + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR5, val)); >> out: >> return result; >> } >> @@ -900,21 +900,21 @@ >> goto out; >> } >> priv->ieee.channel = channel; >> - ASSERT_FN(zd1211_switch_channel(priv, channel, 0)) >> + ASSERT_FN(zd1211_switch_channel(priv, channel, 0)); >> // If channnel == 14 , enable Japan spectrum mask >> if (priv->ieee.regionCode == ZD_JAPAN) { >> if (channel == 14) { >> - ASSERT_FN(zd1211_set_filter_band(priv, priv->ieee.regionCode)) >> - if (priv->ieee.rfMode == RFMD_RF) >> - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR47, 0x18)) >> + ASSERT_FN(zd1211_set_filter_band(priv, priv->ieee.regionCode)); >> + if (priv->ieee.rfMode == RF_RFMD) >> + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR47, 0x18)); >> } >> else { >> - ASSERT_FN(zd1211_set_filter_band(priv, 0)) >> + ASSERT_FN(zd1211_set_filter_band(priv, 0)); >> // CR47 has it's default value >> } >> //External control TX power (CR31_CCK, CR51_6-36M, CR52_48M, CR53_54M >> - if (priv->ieee.rfMode == RFMD_RF) >> - ASSERT_FN(zd1211_set_if_synth(priv, 0x28252d)) >> + if (priv->ieee.rfMode == RF_RFMD) >> + ASSERT_FN(zd1211_set_if_synth(priv, 0x28252d)); >> } >> udelay(100); >> out: >> @@ -933,7 +933,7 @@ >> int result = 0; //operation result >> >> ASSERT_FN(zd1211_write_hw_reg(priv, ZD_InterruptCtrl, >> - (enable != 0)? priv->ieee.intrMask: 0)) >> + (enable != 0)? priv->ieee.intrMask: 0)); >> out: >> return result; >> } >> @@ -979,19 +979,19 @@ >> >> if (on) { //Switch radio on >> switch (priv->ieee.rfMode) { >> - case RFMD_RF: { >> + case RF_RFMD: { >> if (!(priv->ieee.phyTest & BIT_2)) >> - ASSERT_FN(zd1211_set_if_synth(priv, 0x000007)) >> + ASSERT_FN(zd1211_set_if_synth(priv, 0x000007)); >> if (!(priv->ieee.phyTest & BIT_0)) { >> - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR10, 0x89)) >> - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR11, 0x00)) >> - ASSERT_FN(zd1211_read_hw_reg(priv, ZD_CR11, &val)) >> + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR10, 0x89)); >> + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR11, 0x00)); >> + ASSERT_FN(zd1211_read_hw_reg(priv, ZD_CR11, &val)); >> val &= 0xFF; >> if (val != 0 && (priv->ieee.phyTest & BIT_1)) { >> for (i = 0; i < 10; i++) { >> udelay(1000); >> - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR11, 0x00)) >> - ASSERT_FN(zd1211_read_hw_reg(priv, ZD_CR11, &val)) >> + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR11, 0x00)); >> + ASSERT_FN(zd1211_read_hw_reg(priv, ZD_CR11, &val)); >> if ((val & 0xFF) == 0) >> break; >> } >> @@ -1000,7 +1000,7 @@ >> break; >> } >> default: { >> - err(__FUNCTION__ " Unsupported RF mode 0x%X", priv->ieee.rfMode); >> + err("%s Unsupported RF mode 0x%X", __FUNCTION__, priv->ieee.rfMode); >> result = -EINVAL; >> break; >> } >> @@ -1008,17 +1008,17 @@ >> } >> else { >> switch (priv->ieee.rfMode) { >> - case RFMD_RF: { >> + case RF_RFMD: { >> if (!(priv->ieee.phyTest & BIT_0)) { >> - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR11, 0x15)) >> - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR10, 0x81)) >> + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR11, 0x15)); >> + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_CR10, 0x81)); >> } >> if (!(priv->ieee.phyTest & BIT_2)) >> - ASSERT_FN(zd1211_set_if_synth(priv, 0x00000F)) >> + ASSERT_FN(zd1211_set_if_synth(priv, 0x00000F)); >> break; >> } >> default: { >> - err(__FUNCTION__ " Unsupported RF mode 0x%X", priv->ieee.rfMode); >> + err("%s Unsupported RF mode 0x%X", __FUNCTION__, priv->ieee.rfMode); >> result = -EINVAL; >> break; >> } >> @@ -1050,7 +1050,7 @@ >> //Number of elements in the rate mask >> int arrlen = sizeof(rateMask) / sizeof(rateMask[0]); >> #if defined(AMAC) || defined(GCCK) && defined(OFDM) >> - ASSERT_FN(zd1211_read_hw_reg(priv, BASICRATE, &val)) >> + ASSERT_FN(zd1211_read_hw_reg(priv, BASICRATE, &val)); >> #endif >> highRate = SR_1M; >> highBasicRate = SR_1M; >> @@ -1076,19 +1076,19 @@ >> highBasicRate = rate; >> } >> #if defined(AMAC) || (defined(GCCK) && defined(OFDM)) >> - ASSERT_FN(zd1211_write_hw_reg(priv, BASICRATE, val)) >> + ASSERT_FN(zd1211_write_hw_reg(priv, BASICRATE, val)); >> #endif >> ////This piece of code more than strange. I really don't understand >> ////why is it necessary to set up bits in a register where these bits >> ////are marked as reserved? >> #if !defined(OFDM) >> - ASSERT_FN(zd1211_read_hw_reg(priv, MISC, &val)) >> + ASSERT_FN(zd1211_read_hw_reg(priv, MISC, &val)); >> if (priv->ieee.bssType == INDEPENDENT_BSS && highBasicRate == SR_1M) { >> // Workaround compatibility issue. >> // For resonable case, HighestBasicRate should larger than 2M if >> // short-preamble is supported. >> highBasicRate = SR_2M; >> - ASSERT_FN(zd1211_write_hw_reg(priv, ACK_EXT, 0x3f)) >> + ASSERT_FN(zd1211_write_hw_reg(priv, ACK_EXT, 0x3f)); >> } >> // I really don't understand this piece of code. >> // May be it must be removed in the future >> @@ -1118,7 +1118,7 @@ >> break; >> } >> } >> - ASSERT_FN(zd1211_write_hw_reg(priv, MISC, val)) >> + ASSERT_FN(zd1211_write_hw_reg(priv, MISC, val)); >> #else >> len = sizeof(ofdmBasicRates) / (sizeof(u8) * 2); >> for (i = 0; i < len; i++) { >> @@ -1165,11 +1165,11 @@ >> } >> default: { >> result = -EINVAL; >> - err(__FUNCTION__" Invalid MAC mode %d", mode); >> + err("%s Invalid MAC mode %d", __FUNCTION__, mode); >> goto out; >> } >> } >> - ASSERT_FN(zd1211_write_hw_reg(priv, CW_LIMIT, cwLimit)) >> + ASSERT_FN(zd1211_write_hw_reg(priv, CW_LIMIT, cwLimit)); >> priv->ieee.macMode = mode; >> //Now, let's set up the real mode >> //Actually normal mode settings are common for any mode >> @@ -1196,7 +1196,7 @@ >> priv->ieee.extRates[6] = SR_48M; >> priv->ieee.extRates[7] = SR_54M; >> ASSERT_FN(zd1211_write_hw_reg(priv, MANDATORY_RATES, >> - 0x150f)) //1,2,5.5,11,6,12,24 >> + 0x150f)); //1,2,5.5,11,6,12,24 >> break; >> } >> case PURE_G_MODE: { >> @@ -1210,13 +1210,13 @@ >> priv->ieee.extRates[6] = SR_48M; >> priv->ieee.extRates[7] = SR_54M; >> ASSERT_FN(zd1211_write_hw_reg(priv, MANDATORY_RATES, >> - 0x150f)) //1,2,5.5,11,6,12,24 >> + 0x150f)); //1,2,5.5,11,6,12,24 >> break; >> } >> case PURE_B_MODE: { >> priv->ieee.neRates = 0; >> ASSERT_FN(zd1211_write_hw_reg(priv, MANDATORY_RATES, >> - 0x0f)) //1,2,5.5,11 >> + 0x0f)); //1,2,5.5,11 >> break; >> } >> } >> @@ -1237,19 +1237,19 @@ >> >> debug("zd1211: Update card settings"); >> ASSERT_FN(zd1211_beacon_enable(priv, priv->ieee.beaconInterval, >> - priv->ieee.beaconInterval, priv->ieee.bssType)) >> - ASSERT_FN(zd1211_radio_onoff(priv, 1)) >> + priv->ieee.beaconInterval, priv->ieee.bssType)); >> + ASSERT_FN(zd1211_radio_onoff(priv, 1)); >> if (priv->ieee.bssType != INFRASTRUCTURE_BSS) >> - ASSERT_FN(zd1211_set_channel(priv, priv->ieee.channel)) >> + ASSERT_FN(zd1211_set_channel(priv, priv->ieee.channel)); >> #if defined(AMAC) >> - ASSERT_FN(zd1211_write_hw_reg(priv, BASICRATE, 0)) >> + ASSERT_FN(zd1211_write_hw_reg(priv, BASICRATE, 0)); >> #endif >> ASSERT_FN(zd1211_set_supported_rates(priv, priv->ieee.normalRates, >> - priv->ieee.nnRates)) >> + priv->ieee.nnRates)); >> #if defined(OFDM) >> if (priv->ieee.macMode != PURE_B_MODE) >> ASSERT_FN(zd1211_set_supported_rates(priv, priv->ieee.extRates, >> - priv->ieee.neRates)) >> + priv->ieee.neRates)); >> #endif >> out: >> return result; >> Binary files zd1211ng-orig/src/zd1211_802_11_hw.o and zd1211ng/src/zd1211_802_11_hw.o differ >> diff -x CVS -urN zd1211ng-orig/src/zd1211_ether.c zd1211ng/src/zd1211_ether.c >> --- zd1211ng-orig/src/zd1211_ether.c 2005-05-15 14:46:15.000000000 -0400 >> +++ zd1211ng/src/zd1211_ether.c 2005-06-15 11:34:53.000000000 -0400 >> @@ -81,9 +81,9 @@ >> { >> int result = 0; //function result >> netif_start_queue(netdev); >> - ASSERT_FN(zd1211_card_settings(netdev_priv(netdev))) >> - ASSERT_FN(zd1211_setup_rx_urb(netdev_priv(netdev))) >> - ASSERT_FN(zd1211_int_enable(netdev_priv(netdev), 1)) >> + ASSERT_FN(zd1211_card_settings(netdev_priv(netdev))); >> + ASSERT_FN(zd1211_setup_rx_urb(netdev_priv(netdev))); >> + ASSERT_FN(zd1211_int_enable(netdev_priv(netdev), 1)); >> out: >> return result; >> } >> @@ -97,7 +97,7 @@ >> int zd1211_stop(struct net_device *netdev) >> { >> int result = 0; >> - ASSERT_FN(zd1211_int_enable(netdev_priv(netdev), 0)) >> + ASSERT_FN(zd1211_int_enable(netdev_priv(netdev), 0)); >> netif_stop_queue(netdev); >> out: >> return result; >> Binary files zd1211ng-orig/src/zd1211_ether.o and zd1211ng/src/zd1211_ether.o differ >> diff -x CVS -urN zd1211ng-orig/src/zd1211_functions.h zd1211ng/src/zd1211_functions.h >> --- zd1211ng-orig/src/zd1211_functions.h 2005-05-15 14:46:15.000000000 -0400 >> +++ zd1211ng/src/zd1211_functions.h 2005-06-15 11:30:57.000000000 -0400 >> @@ -50,7 +50,7 @@ >> #define mTEST_BIT(a, b) mCHK_BIT1(a, b) >> >> //Evil function result checking macros >> -#define ASSERT_FN(fn) if ((result = (fn)) != 0) goto out; >> +#define ASSERT_FN(fn) do { if ((result = (fn)) != 0) goto out; } while (0) >> >> ///USB handling functions >> /** >> diff -x CVS -urN zd1211ng-orig/src/zd1211_setup.c zd1211ng/src/zd1211_setup.c >> --- zd1211ng-orig/src/zd1211_setup.c 2005-05-06 15:46:52.000000000 -0400 >> +++ zd1211ng/src/zd1211_setup.c 2005-06-15 15:43:39.000000000 -0400 >> @@ -63,12 +63,12 @@ >> (buflen) = endpoint->wMaxPacketSize; \ >> (buf) = kmalloc((buflen), GFP_KERNEL); \ >> if ((urb) == NULL) \ >> - (urb) = ALLOC_URB(0); \ >> + (urb) = ALLOC_URB(); \ >> if ((buf) == NULL || ((urb) == NULL)) { \ >> err ("Out of memory"); \ >> goto errout; \ >> }\ >> - debug(__FUNCTION__ " - %d bytes allocated for buffer: %p, URB - %p", (buflen), (buf), (urb)); \ >> + debug("%s - %d bytes allocated for buffer: %p, URB - %p", __FUNCTION__, (buflen), (buf), (urb)); \ >> } >> >> /** >> @@ -83,17 +83,18 @@ >> int zd1211_urb_alloc(struct zd1211_priv *priv, struct usb_interface *interface) >> { >> int i; //just an index variable >> - struct usb_interface_descriptor *iface_desc; //interface descriptor >> struct usb_endpoint_descriptor *endpoint; //endpoint descriptor >> + __u8 bNumEndpoints = CUR_ALTSETTING(interface).bNumEndpoints; >> >> priv->ctrlBufLen = CTRL_BUF_LEN; >> - iface_desc = CUR_ALTSETTING(interface); >> - if (NUM_ENDPOINTS(iface_desc) == 0) >> + if (bNumEndpoints == 0) { >> + err("No endpoints found for this interface!\n"); >> goto errout; >> - for (i = 0; i < NUM_ENDPOINTS(iface_desc); ++i) { >> - endpoint = &ENDPOINT(iface_desc, i); >> + } >> + for (i = 0; i < bNumEndpoints; ++i) { >> + endpoint = &ENDPOINT(interface, i); >> >> - debug(__FUNCTION__ " - endpoint found: 0x%X", endpoint->bEndpointAddress); >> + debug("%s - endpoint found: 0x%x", __FUNCTION__, endpoint->bEndpointAddress); >> if (endpoint->bEndpointAddress & EP_RCV_MASK) { >> if ((endpoint->bEndpointAddress & ~EP_RCV_MASK) == EP_RX_DATA) >> ALLOC_BUF(priv->rxbuffer, priv->rxbuflen, priv->rxUrb) >> @@ -126,9 +127,9 @@ >> //Dirty macros that deallocates the buffer and urb >> #define FREE_BUF(buf, buflen, urb) \ >> { \ >> - debug(__FUNCTION__ " - deallocate buffer: %p, URB - %p", (buf), (urb)); \ >> + debug("%s - deallocate buffer: %p, URB - %p", __FUNCTION__, (buf), (urb)); \ >> if ((urb) != NULL) { \ >> - usb_unlink_urb((urb)); \ >> + USB_UNLINK_URB((urb)); \ >> FREE_URB((urb)); \ >> (urb) = NULL; \ >> } \ >> @@ -181,7 +182,7 @@ >> FIRMWARE_DOWNLOAD, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, >> codeOff, 0, priv->ctrlBuf, msglen, HZ); >> if (result < 0) { >> - err(__FUNCTION__ " Firmware download failed %d", result); >> + err("%s Firmware download failed %d", __FUNCTION__, result); >> goto out; >> } >> memcpy(ptmp, priv->ctrlBuf, msglen); >> @@ -210,7 +211,7 @@ >> int msglen; //length of the message we are going to send over USB >> u8* ptmp = pBuffer; //temporary pointer to the buffer >> >> - debug(__FUNCTION__ " Firmware upload %d bytes", buflen); >> + debug("%s Firmware upload %d bytes", __FUNCTION__, buflen); >> while (buflen) { >> msglen = (buflen < priv->ctrlBufLen)? buflen: priv->ctrlBufLen; >> memcpy(priv->ctrlBuf, ptmp, msglen); >> @@ -219,7 +220,7 @@ >> FIRMWARE_UPLOAD, USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, >> codeOff, 0, priv->ctrlBuf, msglen, HZ); >> if (result < 0) { >> - err(__FUNCTION__ " Firmware upload failed %d", result); >> + err("%s Firmware upload failed %d", __FUNCTION__, result); >> goto out; >> } >> buflen -= msglen; >> @@ -232,22 +233,22 @@ >> FIRMWARE_CONFIRM, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, >> 0, 0, priv->ctrlBuf, sizeof(u8), 10 * HZ); >> if (result < 0) { >> - err(__FUNCTION__ " Firmware upload check failed %d", result); >> + err("%s Firmware upload check failed %d", __FUNCTION__, result); >> goto out; >> } >> if (priv->ctrlBuf[0] == 0x80) >> { >> - err(__FUNCTION__ " Firmware CRC error"); >> + err("%s Firmware CRC error", __FUNCTION__); >> result = -1; >> goto out; >> } >> else if (priv->ctrlBuf[0] == 1) >> { >> - debug(__FUNCTION__ " Firmware upload OK"); >> + debug("%s Firmware upload OK", __FUNCTION__); >> } >> else >> { >> - err(__FUNCTION__ " Firmware upload undefined error"); >> + err("%s Firmware upload undefined error", __FUNCTION__); >> result = -1; >> goto out; >> } >> @@ -278,21 +279,21 @@ >> */ >> debug("EEPORM Ver = %x\n", EEPVer); >> if (priv->release != EEPVer){ >> - debug(__FUNCTION__ " Chip version 0x%X, firmware version 0x%X", >> + debug("%s Chip version 0x%X, firmware version 0x%X", __FUNCTION__, >> priv->release, EEPVer); >> if (priv->release <= 0x4312) { >> result = zd1211_LoadUSBSpecCode(priv, WS11Ur2, sizeof(WS11Ur2), >> cFIRMWARE_OLD_ADDR, 0); >> >> if (result < 0) { >> - err(__FUNCTION__ " WS11Ur2 upload error"); >> + err("%s WS11Ur2 upload error", __FUNCTION__); >> return result; >> } >> } >> result = zd1211_LoadUSBSpecCode(priv, WS11Ur, sizeof(WS11Ur), >> cFIRMWARE_START_ADDR, 1); >> if (result < 0) { >> - err(__FUNCTION__ " WS11Ur upload error"); >> + err("%s WS11Ur upload error", __FUNCTION__); >> return result; >> } >> >> @@ -301,7 +302,7 @@ >> sizeof(WS11Ub) - (cEPDATA_OFFSET * 2) - (E2P_END - E2P_SUBID), >> cFIRMWARE_EEPROM_OFFSET + (E2P_END - E2P_SUBID) / 2, 1); >> if (result < 0) { >> - err(__FUNCTION__ " WS11Ub upload error"); >> + err("%s WS11Ub upload error", __FUNCTION__); >> return result; >> } >> >> @@ -312,7 +313,7 @@ >> result = zd1211_GetUSBSpecCode(priv, WS11Ub + (cEPDATA_OFFSET * 2), >> (E2P_END - E2P_SUBID), cFIRMWARE_EEPROM_OFFSET); >> if (result < 0) { >> - err(__FUNCTION__ " Read EEPROM Data fail"); >> + err("%s Read EEPROM Data fail", __FUNCTION__); >> return result; >> } >> >> @@ -323,7 +324,7 @@ >> (E2P_END - E2P_SUBID) + (cEPDATA_OFFSET * 2), >> cBOOTCODE_START_ADDR, 0); >> if (result < 0) { >> - err(__FUNCTION__ "Write EEPROM Data fail"); >> + err("%s Write EEPROM Data fail", __FUNCTION__); >> return result; >> } >> >> @@ -334,7 +335,7 @@ >> cFIRMWARE_START_ADDR, 1); >> >> if (result < 0) { >> - err(__FUNCTION__ "Load WS11UPh fail\n"); >> + err("%s Load WS11UPh fail\n", __FUNCTION__); >> return result; >> } >> return 0; >> @@ -361,7 +362,7 @@ >> { >> if ((i % 4) == 0) >> { >> - ASSERT_FN(zd1211_read_eeprom_reg(priv, addrs[i / 4], &val)) >> + ASSERT_FN(zd1211_read_eeprom_reg(priv, addrs[i / 4], &val)); >> val -= cPWR_INT_VALUE_GUARD; >> debug("Integration value: 0x%08X", val); >> } >> @@ -370,6 +371,7 @@ >> val >>= 8; >> } >> out: >> + debug("%s result %d",__FUNCTION__,result); >> return result; >> } >> >> @@ -386,57 +388,55 @@ >> u8 mac_addr[ETH_ALEN]; //macaddress of the device >> >> //Get RF_Mode from EEPROM >> - ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_POD, &val)) >> + ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_POD, &val)); >> priv->ieee.rfMode = (u8)(val & 0x0F); >> - if (val == 0x04 || val == 0x07) { >> - debug("AiroHa RF"); >> - } >> - else if (val == 0x09) { >> - debug("GCT RF"); >> - } >> - else if (val == RFMD_RF) { >> - debug("RFMD RF"); >> - } >> - else { >> - debug("Unknown RF - 0x%X", val); >> + switch (priv->ieee.rfMode) { >> + case RF_AIROHA: debug("Airoha RF"); break; >> + case RF_MAXIM: debug("Maxim RF"); break; >> + case RF_RFMD: debug("RFMD RF"); break; >> + case 0x9: debug("GCT RF?"); break; >> + default: debug("Unknown RF : 0x%x", priv->ieee.rfMode); >> } >> - >> + >> //Get adapter type >> - if (val & BIT_9) >> - priv->ieee.size = ZD_ADAPTER; >> - else >> - priv->ieee.size = ZD_DONGLE; >> + if (val & BIT_9) { >> + priv->ieee.size = ADAPTER_NORMAL; >> + debug("Normal size adapter"); >> + } else { >> + priv->ieee.size = ADAPTER_DONGLE; >> + debug("Dongle size adapter"); >> + } >> >> if ((result = zd1211_read_integration(priv)) != 0) >> goto out; >> >> //Stop the device (???) >> - ASSERT_FN(zd1211_write_hw_reg(priv, ZD_GPI_EN, 0x00)) >> + ASSERT_FN(zd1211_write_hw_reg(priv, ZD_GPI_EN, 0x00)); >> >> //Now let's call a function from hardware part of 802.11 >> - ASSERT_FN(zd1211_reset(priv)) >> - ASSERT_FN(zd1211_init_hmac(priv)) >> + ASSERT_FN(zd1211_reset(priv)); >> + ASSERT_FN(zd1211_init_hmac(priv)); >> >> //Read MAC address from EEPROM and write it to the HW register >> - ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_MACADDRL, &val)) >> + ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_MACADDRL, &val)); >> memcpy(mac_addr, &val, sizeof(val)); >> - ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_MACADDRH, &val)) >> + ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_MACADDRH, &val)); >> val &= 0xFFFF; >> memcpy(mac_addr + sizeof(u32), &val, sizeof(u16)); >> - ASSERT_FN(zd1211_set_mac_address(priv->net_dev, mac_addr)) >> + ASSERT_FN(zd1211_set_mac_address(priv->net_dev, mac_addr)); >> info("MAC adress: %02X:%02X:%02X:%02X:%02X:%02X", >> mac_addr[0], mac_addr[1], mac_addr[2], >> mac_addr[3], mac_addr[4], mac_addr[5]); >> >> //Read the allowed channel >> - ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_ALLOWED_CHANNEL, &val)) >> + ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_ALLOWED_CHANNEL, &val)); >> if (!(val & 0xFFFF0000)) >> val |= 0x10000; >> debug("Allowed channel 0x%X", val); >> priv->ieee.allowedChannels = val; >> >> //Read the region code >> - ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_SUBID, &val)) >> + ASSERT_FN(zd1211_read_eeprom_reg(priv, E2P_SUBID, &val)); >> val >>= 16; >> debug("Region code - 0x%X", val); >> priv->ieee.regionCode = (u16)val; >> @@ -445,11 +445,14 @@ >> priv->ieee.phyTest = 4; >> >> //Set up the current channel >> - ASSERT_FN(zd1211_set_channel(priv, (u16)(priv->ieee.allowedChannels >> 16))) >> + ASSERT_FN(zd1211_set_channel(priv, (u16)(priv->ieee.allowedChannels >> 16))); >> >> //Disable interrupts from a card >> - ASSERT_FN(zd1211_int_enable(priv, 0)) >> + ASSERT_FN(zd1211_int_enable(priv, 0)); >> out: >> + if (result) >> + debug("%s error : %d",__FUNCTION__,result); >> + >> return result; >> } >> >> Binary files zd1211ng-orig/src/zd1211_setup.o and zd1211ng/src/zd1211_setup.o differ >> diff -x CVS -urN zd1211ng-orig/src/zd1211_usb.c zd1211ng/src/zd1211_usb.c >> --- zd1211ng-orig/src/zd1211_usb.c 2005-05-15 14:46:15.000000000 -0400 >> +++ zd1211ng/src/zd1211_usb.c 2005-06-15 14:19:45.000000000 -0400 >> @@ -25,23 +25,21 @@ >> #include "zd1211.h" >> #include "zd1211_functions.h" >> >> -static void zd1211_mac_resp_callback(struct urb *urb); >> +static void zd1211_mac_resp_callback(struct urb *urb PT_REGS); >> >> /** >> * zd1211_readreg_callback >> * @brief Function serves register reading completition >> * @param urb urb we have received >> */ >> -static void zd1211_readreg_callback(struct urb *uurb) >> +static void zd1211_readreg_callback(struct urb *uurb PT_REGS) >> { >> //device descriptor pointer >> struct zd1211_priv* priv = (struct zd1211_priv*)uurb->context; >> >> - if (!priv->usb_dev) >> - return; >> priv->macCmdResult = uurb->status; >> - if (uurb->status != 0 && waitqueue_active(&priv->regwq)) >> - wake_up_interruptible(&priv->regwq); >> + priv->reg_rw_sent = 1; >> + wake_up_all(&priv->regwq); >> } >> >> /** >> @@ -49,16 +47,14 @@ >> * @brief Function serves register writing completition >> * @param urb urb we have received >> */ >> -static void zd1211_writereg_callback(struct urb *uurb) >> +static void zd1211_writereg_callback(struct urb *uurb PT_REGS) >> { >> //device descriptor pointer >> struct zd1211_priv* priv = (struct zd1211_priv*)uurb->context; >> >> - if (!priv->usb_dev) >> - return; >> priv->macCmdResult = uurb->status; >> - if (waitqueue_active(&priv->regwq)) >> - wake_up_interruptible(&priv->regwq); >> + priv->reg_rw_sent = 1; >> + wake_up_all(&priv->regwq); >> } >> >> /** >> @@ -74,7 +70,7 @@ >> usb_rcvintpipe(priv->usb_dev, EP_MAC_RESP), >> priv->macRspBuf[PRIMARY_RSP_BUF], priv->macRspBufLen, >> zd1211_mac_resp_callback, priv, HZ); >> - return usb_submit_urb(priv->macRspUrb); >> + return USB_SUBMIT_URB(priv->macRspUrb); >> } >> >> /** >> @@ -82,20 +78,19 @@ >> * @brief function serves receiving the responce from the register reading >> * @param urb urb we have received >> */ >> -static void zd1211_mac_resp_callback(struct urb *urb) >> +static void zd1211_mac_resp_callback(struct urb *urb PT_REGS) >> { >> struct zd1211_priv* priv = (struct zd1211_priv*)urb->context; >> >> - if (!priv->usb_dev) >> - return; >> - spin_lock(&priv->lock); >> priv->macRspResult = urb->status; >> - spin_unlock(&priv->lock); >> >> memcpy(priv->macRspBuf[SECONDARY_RSP_BUF], >> priv->macRspBuf[PRIMARY_RSP_BUF], urb->actual_length); >> - if (waitqueue_active(&priv->regwq)) >> - wake_up_interruptible(&priv->regwq); >> + >> + priv->resp_received = 1; >> + wake_up_all(&priv->regwq); >> + >> + RESUBMIT_URB(priv); >> } >> >> /** >> @@ -142,22 +137,24 @@ >> priv->macCmdBuf, sizeof(struct regReadReq), >> zd1211_readreg_callback, priv); >> >> - result = usb_submit_urb(urb); >> + priv->reg_rw_sent = 0; >> + priv->resp_received = 0; >> + result = USB_SUBMIT_URB(urb); >> if (result < 0) { >> - err(__FUNCTION__ " Unable to submit URB, %d", result); >> + err("%s Unable to submit URB, %d", __FUNCTION__, result); >> goto out; >> } >> - interruptible_sleep_on(&priv->regwq); >> + wait_event_interruptible(priv->regwq, priv->reg_rw_sent && priv->resp_received); >> if (signal_pending(current)) { >> result = -EINTR; >> goto out; >> } >> - >> + >> if (priv->macCmdResult == 0 && priv->macRspResult == 0) >> { >> if (le16_to_cpu(reg1->id) != REG_GOT || le16_to_cpu(reg1->addr0) != addr) >> { >> - err(__FUNCTION__ " Urb results are different 0x%04X != 0x%04X, 0x%04X != 0x%04X", >> + err("%s Urb results are different 0x%04X != 0x%04X, 0x%04X != 0x%04X", __FUNCTION__, >> reg1->id, REG_GOT, reg1->addr0, addr); >> result = -EINVAL; >> } >> @@ -172,12 +169,12 @@ >> result = priv->macCmdResult; >> else >> result = priv->macRspResult; >> - err(__FUNCTION__ " Urb error %d", result); >> + err("%s Urb error %d", __FUNCTION__, result); >> } >> out: >> up(&priv->reg_sem); >> if (result != 0) >> - err(__FUNCTION__ " Register 0x%04X read failed %d", addr, result); >> + err("%s Register 0x%04X read failed %d", __FUNCTION__, addr, result); >> else { >> reg_debug("0x%04X = 0x%04X%04X", addr, reg1->data1, reg1->data0); >> } >> @@ -224,12 +221,13 @@ >> priv->macCmdBuf, sizeof(struct regWriteReq), >> zd1211_writereg_callback, priv); >> >> - result = usb_submit_urb(urb); >> + priv->reg_rw_sent = 0; >> + result = USB_SUBMIT_URB(urb); >> if (result < 0) { >> - err(__FUNCTION__ " Unable to submit URB %d", result); >> + err("%s Unable to submit URB %d", __FUNCTION__, result); >> goto out; >> } >> - interruptible_sleep_on(&priv->regwq); >> + wait_event_interruptible(priv->regwq, priv->reg_rw_sent); >> if (signal_pending(current)) { >> result = -EINTR; >> goto out; >> @@ -240,7 +238,7 @@ >> out: >> up(&priv->reg_sem); >> if (result != 0) >> - err(__FUNCTION__ " Register 0x%04X write failed %d", addr, result); >> + err("%s Register 0x%04X write failed %d", __FUNCTION__, addr, result); >> else { >> reg_debug("0x%04X done", addr); >> } >> @@ -303,12 +301,13 @@ >> usb_fill_bulk_urb(urb, dev, usb_sndbulkpipe(dev, EP_MAC_REQ), >> priv->macCmdBuf, len, zd1211_writereg_callback, priv); >> >> - result = usb_submit_urb(urb); >> + priv->reg_rw_sent = 0; >> + result = USB_SUBMIT_URB(urb); >> if (result < 0) { >> - err(__FUNCTION__ " Unable to submit URB %d", result); >> + err("%s Unable to submit URB %d", __FUNCTION__, result); >> goto out; >> } >> - interruptible_sleep_on(&priv->regwq); >> + wait_event_interruptible(priv->regwq, priv->reg_rw_sent); >> if (signal_pending(current)) { >> result = -EINTR; >> goto out; >> @@ -319,7 +318,7 @@ >> out: >> up(&priv->reg_sem); >> if (result != 0) >> - err(__FUNCTION__ " RF configuration failed %d", result); >> + err("%s RF configuration failed %d", __FUNCTION__, result); >> return result; >> } >> >> @@ -337,11 +336,11 @@ >> } >> >> /** >> - * zd1211_readreg_callback >> - * @brief Function serves register reading completition >> + * zd1211_rx_data >> + * @brief Receive data >> * @param urb urb we have received >> */ >> -static void zd1211_rx_data(struct urb *uurb) >> +static void zd1211_rx_data(struct urb *uurb PT_REGS) >> { >> //device descriptor pointer >> struct zd1211_priv* priv = (struct zd1211_priv*)uurb->context; >> @@ -367,7 +366,7 @@ >> usb_rcvintpipe(priv->usb_dev, EP_RX_DATA), >> priv->rxbuffer, priv->rxbuflen, >> zd1211_rx_data, priv, HZ); >> - return usb_submit_urb(priv->rxUrb); >> + return USB_SUBMIT_URB(priv->rxUrb); >> >> } >> >> Binary files zd1211ng-orig/src/zd1211_usb.o and zd1211ng/src/zd1211_usb.o differ >> diff -x CVS -urN zd1211ng-orig/src/zdparm.h zd1211ng/src/zdparm.h >> --- zd1211ng-orig/src/zdparm.h 2005-05-15 14:46:15.000000000 -0400 >> +++ zd1211ng/src/zdparm.h 2005-06-15 11:40:15.000000000 -0400 >> @@ -93,5 +93,18 @@ >> #define CW_LONG_SLOT 0x7f047f >> // CW min limit - 3F us, Slot time reload number - 041 us, CW max limit - 7F us >> >> +//RF types >> +#define RF_AIROHA 0x4 >> +#define RF_MAXIM 0x8 >> +#define RF_RFMD 0xd >> + >> +//LED types >> +#define LED_ONE 0x0 >> +#define LED_TWO 0x1 >> + >> +//Adapter size >> +#define ADAPTER_DONGLE 0x0 >> +#define ADAPTER_NORMAL 0x1 >> + >> #endif >> //eof >> diff -x CVS -urN zd1211ng-orig/src/zdusb.h zd1211ng/src/zdusb.h >> --- zd1211ng-orig/src/zdusb.h 2005-04-30 16:00:37.000000000 -0400 >> +++ zd1211ng/src/zdusb.h 2005-06-15 11:42:21.000000000 -0400 >> @@ -138,9 +138,6 @@ >> #endif >> //end of USB >> >> -//RF modes >> -#define RFMD_RF 0xD >> - >> //RF flags >> #define ZD_IF_LE 1 >> #define ZD_RF_CLK 2 >> > > -- Dan Streetman dds...@ie... --------------------- 186,272 miles per second: It isn't just a good idea, it's the law! |
From: Dmitriy K. <kor...@to...> - 2005-06-20 06:43:18
|
Hi Dan, After review of your patch I see the following: 1. Join zd1211.h and ad1211.c from 2.4 and 2.6 directories looks reasonable. If it works fine it may be accepted. ACCEPTED. 2. I don't see a reason to use ; at the end of each mcros, but Roman says ne likes this idea, so let it be. ACCEPTED. 3. I don't see a reason to rename constants like ZD_ADAPTER to ADAPTER_NORMAL etc. REJECTED. 4. I don't see a reason to remove locks. They are reserved for the future implementation. REJECTED. 5. I also don't see a reason in changes like this: - struct usb_interface_descriptor *iface_desc; //interface descriptor struct usb_endpoint_descriptor *endpoint; //endpoint descriptor + __u8 bNumEndpoints = CUR_ALTSETTING(interface).bNumEndpoints; Variable you have removed may be used in the future. REJECTED. 6. I also don't see a reason in changes like this: - if (val == 0x04 || val == 0x07) { - debug("AiroHa RF"); - } - else if (val == 0x09) { - debug("GCT RF"); - } - else if (val == RFMD_RF) { - debug("RFMD RF"); - } - else { - debug("Unknown RF - 0x%X", val); + switch (priv->ieee.rfMode) { + case RF_AIROHA: debug("Airoha RF"); break; + case RF_MAXIM: debug("Maxim RF"); break; + case RF_RFMD: debug("RFMD RF"); break; + case 0x9: debug("GCT RF?"); break; + default: debug("Unknown RF : 0x%x", priv->ieee.rfMode); REJECTED. 7. I also don't understand, what did you want to do with these changes in callbacks: - if (!priv->usb_dev) - return; priv->macCmdResult = uurb->status; - if (uurb->status != 0 && waitqueue_active(&priv->regwq)) - wake_up_interruptible(&priv->regwq); + priv->reg_rw_sent = 1; + wake_up_all(&priv->regwq); And these: - interruptible_sleep_on(&priv->regwq); + wait_event_interruptible(priv->regwq, priv->reg_rw_sent && priv->resp_received); Please, explain why your solution is better, so I'll make a decision. DELAYED. The main reason I have rejected some changes - big changes of code though all the text confuses other developers. we MUST avoid operations like tab -> space conversions, function names changes, reformatting and constants renaming even if we don't like some of them. Let's follow the old army principle "ugly but stable". But anyway, thank you very much for your work. It's very usefull. But as I mentioned previously, ng driver is in experimental stage, so IMHO it's better for us to concentrate on making this driver working. Hope to see you in the list of the developers. Regards, Dan Streetman wrote: >Sure I can work on getting it working...but what about the patch I sent? >Will you use any of that or not? If not, what are the problems you see >with it? > > >On Thu, 16 Jun 2005, Dmitriy Korovkin wrote: > > > >>Dan, >>May I ask you to concentrate on experimenting and hacking. >>Currently I'm hardly trying to make this device answer to my scan request. >>Any work in this direction (to make the device work) would be very highly >>appreciated. >>Regards, >> >>On Thu, 16 Jun 2005, Dan Streetman wrote: >> >> >> >>>Date: Thu, 16 Jun 2005 10:28:56 -0400 (EDT) >>>From: Dan Streetman <dds...@ie...> >>>To: Dmitriy Korovkin <dko...@ra...> >>>Cc: zd1...@li... >>>Subject: Re: [patch] updates to zd1211ng for 2.6(.11) >>> >>> >>>Ok, thanks. I will hold off on any more changes until I hear more from >>>you. >>> >>>On Thu, 16 Jun 2005, Dmitriy Korovkin wrote: >>> >>> >>> >>>>Dan, >>>>Thank you very much for the patch. >>>>I'm afraid, I can't agree with all of your changes. Before integrating >>>>this patch I need to review it more carefully. >>>>But you've done a great work! >>>>Regards, >>>> >>>>On Wed, 15 Jun 2005, Dan Streetman wrote: >>>> >>>> >>>> > > > -- Dmitriy |
From: Dan S. <dds...@ie...> - 2005-06-20 15:15:03
|
Hi Dmitriy, I think your mailer is line-wrapping the code lines, maybe you could turn that off for emails with code in them? On Mon, 20 Jun 2005, Dmitriy Korovkin wrote: >4. I don't see a reason to remove locks. They are reserved for the >future implementation. REJECTED. It doesn't matter to me either way, however I'll just say you can ALWAYS add locks in when you DO need them. I don't see the point of having locks when you aren't using them. >5. I also don't see a reason in changes like this: >- struct usb_interface_descriptor *iface_desc; //interface >descriptor > struct usb_endpoint_descriptor *endpoint; //endpoint >descriptor >+ __u8 bNumEndpoints = >CUR_ALTSETTING(interface).bNumEndpoints; >Variable you have removed may be used in the future. >REJECTED. I'm pretty sure you'll need to change the method of access the USB topology items, as it's different in 2.6. Do you have a different suggestion for making the driver compile/work with the 2.6 kernel? >6. I also don't see a reason in changes like this: >- if (val == 0x04 || val == 0x07) >{ >- debug("AiroHa >RF"); >- >} > >- else if (val == 0x09) >{ >- debug("GCT >RF"); >- >} > >- else if (val == RFMD_RF) >{ >- debug("RFMD >RF"); >- >} > >- else >{ > >- debug("Unknown RF - 0x%X", >val); >+ switch (priv->ieee.rfMode) >{ >+ case RF_AIROHA: debug("Airoha RF"); >break; >+ case RF_MAXIM: debug("Maxim RF"); >break; >+ case RF_RFMD: debug("RFMD RF"); >break; >+ case 0x9: debug("GCT RF?"); >break; >+ default: debug("Unknown RF : 0x%x", >priv->ieee.rfMode); >REJECTED. :-) The point is you shouldn't use "magic numbers" in code. It's much better to define constants and use those. There are (at least) 2 benefits to it: 1) you have a single place to change a constant, if you ever need to 2) when reviewing code, it's much easier to understand the code if constant variables (with descriptive names) are used instead of mysterious "magic numbers". As far as if vs. switch, I just think the switch statement was easier that if, but it doesn't really matter. >7. I also don't understand, what did you want to do with these changes >in callbacks: >- if >(!priv->usb_dev) > >- >return; > > priv->macCmdResult = >uurb->status; >- if (uurb->status != 0 && >waitqueue_active(&priv->regwq)) >- >wake_up_interruptible(&priv->regwq); > >+ priv->reg_rw_sent = >1; >+ >wake_up_all(&priv->regwq); > > >And these: >- >interruptible_sleep_on(&priv->regwq); > >+ wait_event_interruptible(priv->regwq, priv->reg_rw_sent && >priv->resp_received); >Please, explain why your solution is better, so I'll make a decision. >DELAYED. Ok, I'll explain what you have above, let me know if there are other parts you would like more explanation for. I removed the bailout on "!priv->usb_dev" as just because the device is gone is no reason to stop the callback. In fact, it is quite important to wake up the code sleeping on the waitqueue, even if the device is gone. You could add it before the URB resubmission, as there is no reason to resubmit if the device is gone. The waitqueue change is needed because simply sleeping on a waitqueue is deprecated, because it is racy. There is simply no way with a simple sleep_on() to ensure you sleep before the event happens (in which case you never get woken up!). So I changed it to the correct mechanism, where there is a flag (event) you're waiting for. There is no race in this case. I used only 2 flags, one for completion on ep3 (register r/w) and one for ep4 (responses). >The main reason I have rejected some changes - big changes of code >though all the text confuses other developers. we MUST avoid operations >like tab -> space conversions, function names changes, reformatting and >constants renaming even if we don't like some of them. I have no problem following tab vs. space usage, I'll use whatever you would like, I actually didn't realize mine was different...I always use tabs. I don't think any of my patch converted tabs to spaces, did it? Anyway, which is the right one to use? Tabs? Or 4-space, or 8-space? As for changing function names or constants, as long as the names or constants are meaningful, I don't understand why you are against changing them, if the new name is more consistent or meaningful than the old name. Are there any examples, maybe that would make it clearer to me...? >Let's follow the old army principle "ugly but stable". Well, I personally have always thought those 2 adjectives are mutually exclusive when being used to describe code. :-) I think ugly code will always be less stable, and (more importantly) less maintainable, than clean code. Especially when people who didn't write the code try to understand and update the code. But, this is much more your project than mine so you make the call ;-) >But anyway, thank you very much for your work. It's very usefull. But as >I mentioned previously, ng driver is in experimental stage, so IMHO it's >better for us to concentrate on making this driver working. >Hope to see you in the list of the developers. Sure, I'll get the latest CVS code and keep trying to get it working on 2.6. -- Dan Streetman dds...@ie... --------------------- 186,272 miles per second: It isn't just a good idea, it's the law! |
From: Roman K <rom...@ma...> - 2005-06-21 00:24:50
|
Hi, > Hi Dmitriy, > > I think your mailer is line-wrapping the code lines, maybe you could turn > that off for emails with code in them? > > On Mon, 20 Jun 2005, Dmitriy Korovkin wrote: > > >4. I don't see a reason to remove locks. They are reserved for the > >future implementation. REJECTED. > > It doesn't matter to me either way, however I'll just say you can ALWAYS > add locks in when you DO need them. I don't see the point of having locks > when you aren't using them. The code is under development and lock would be needed in the near future. It is not bad to write a code with one step ahead. > >5. I also don't see a reason in changes like this: > >- struct usb_interface_descriptor *iface_desc; //interface > >descriptor > > struct usb_endpoint_descriptor *endpoint; //endpoint > >descriptor > >+ __u8 bNumEndpoints = > >CUR_ALTSETTING(interface).bNumEndpoints; > >Variable you have removed may be used in the future. > >REJECTED. > > I'm pretty sure you'll need to change the method of access the USB > topology items, as it's different in 2.6. Do you have a different > suggestion for making the driver compile/work with the 2.6 kernel? I think this will be accepted in some form. > >6. I also don't see a reason in changes like this: > >- if (val == 0x04 || val == 0x07) > >{ > >- debug("AiroHa > >RF"); > >- > >} > > > >- else if (val == 0x09) > >{ > >- debug("GCT > >RF"); > >- > >} > > > >- else if (val == RFMD_RF) > >{ > >- debug("RFMD > >RF"); > >- > >} > > > >- else > >{ > > > >- debug("Unknown RF - 0x%X", > >val); > >+ switch (priv->ieee.rfMode) > >{ > >+ case RF_AIROHA: debug("Airoha RF"); > >break; > >+ case RF_MAXIM: debug("Maxim RF"); > >break; > >+ case RF_RFMD: debug("RFMD RF"); > >break; > >+ case 0x9: debug("GCT RF?"); > >break; > >+ default: debug("Unknown RF : 0x%x", > >priv->ieee.rfMode); > >REJECTED. > > :-) > > The point is you shouldn't use "magic numbers" in code. It's much better > to define constants and use those. There are (at least) 2 benefits to it: > 1) you have a single place to change a constant, if you ever need to > 2) when reviewing code, it's much easier to understand the code if > constant variables (with descriptive names) are used instead of mysterious > "magic numbers". > > As far as if vs. switch, I just think the switch statement was easier that > if, but it doesn't really matter. This would be also accepted after checking for some lost code. > >7. I also don't understand, what did you want to do with these changes > >in callbacks: > >- if > >(!priv->usb_dev) > > > >- > >return; > > > > priv->macCmdResult = > >uurb->status; > >- if (uurb->status != 0 && > >waitqueue_active(&priv->regwq)) > >- > >wake_up_interruptible(&priv->regwq); > > > >+ priv->reg_rw_sent = > >1; > >+ > >wake_up_all(&priv->regwq); > > > > > >And these: > >- > >interruptible_sleep_on(&priv->regwq); > > > >+ wait_event_interruptible(priv->regwq, priv->reg_rw_sent && > >priv->resp_received); > >Please, explain why your solution is better, so I'll make a decision. > >DELAYED. > > Ok, I'll explain what you have above, let me know if there are other parts > you would like more explanation for. > > I removed the bailout on "!priv->usb_dev" as just because the device is > gone is no reason to stop the callback. In fact, it is quite important > to wake up the code sleeping on the waitqueue, even if the device is > gone. You could add it before the URB resubmission, as there is no reason > to resubmit if the device is gone. > > The waitqueue change is needed because simply sleeping on a waitqueue is > deprecated, because it is racy. There is simply no way with a simple > sleep_on() to ensure you sleep before the event happens (in which case you > never get woken up!). So I changed it to the correct mechanism, where > there is a flag (event) you're waiting for. There is no race in this > case. I used only 2 flags, one for completion on ep3 (register r/w) and > one for ep4 (responses). Why wake_up_all() not wake_up_interruptible() or even wake_up_interruptible_all() if you prefer '_all()'. > >The main reason I have rejected some changes - big changes of code > >though all the text confuses other developers. we MUST avoid operations > >like tab -> space conversions, function names changes, reformatting and > >constants renaming even if we don't like some of them. > > I have no problem following tab vs. space usage, I'll use whatever you > would like, I actually didn't realize mine was different...I always use > tabs. I don't think any of my patch converted tabs to spaces, did it? > Anyway, which is the right one to use? Tabs? Or 4-space, or 8-space? I believe that this was general remark. Probably there is some space cleanup/addition, but this is small part of 'useless' changes. Please, do not treate it as main reason. > As for changing function names or constants, as long as the names or > constants are meaningful, I don't understand why you are against changing > them, if the new name is more consistent or meaningful than the old > name. Are there any examples, maybe that would make it clearer to me...? There was one, please refer to the original reply by Dmitriy. > >Let's follow the old army principle "ugly but stable". > > Well, I personally have always thought those 2 adjectives are mutually > exclusive when being used to describe code. :-) > I think ugly code will always be less stable, and (more importantly) less > maintainable, than clean code. Especially when people who didn't write > the code try to understand and update the code. But, this is much more > your project than mine so you make the call ;-) > >But anyway, thank you very much for your work. It's very usefull. But as > >I mentioned previously, ng driver is in experimental stage, so IMHO it's > >better for us to concentrate on making this driver working. > >Hope to see you in the list of the developers. > > Sure, I'll get the latest CVS code and keep trying to get it working on > 2.6. > > > -- > Dan Streetman > dds...@ie... > --------------------- > 186,272 miles per second: > It isn't just a good idea, it's the law! |
From: Dan S. <dds...@ie...> - 2005-06-21 16:50:05
|
On Tue, 21 Jun 2005, Roman K wrote: >> The waitqueue change is needed because simply sleeping on a waitqueue is >> deprecated, because it is racy. There is simply no way with a simple >> sleep_on() to ensure you sleep before the event happens (in which case you >> never get woken up!). So I changed it to the correct mechanism, where >> there is a flag (event) you're waiting for. There is no race in this >> case. I used only 2 flags, one for completion on ep3 (register r/w) and >> one for ep4 (responses). > >Why wake_up_all() not wake_up_interruptible() or even wake_up_interruptible_all() >if you prefer '_all()'. wake_up_all() wakes all sleepers (interruptible and uninterruptible). wake_up_interruptible() wakes up only 1 (interruptible) sleeper. wake_up_interruptible_all() wakes up all interruptible sleepers (but not uninterruptible sleepers). There is no benefit to using the other wake functions, and the disadvantage to using them is they will not work right if more sleepers are added later or if uninterruptible sleepers are added later. >> name. Are there any examples, maybe that would make it clearer to me...? > >There was one, please refer to the original reply by Dmitriy. I'll look again, although I didn't see it the first time I read the email... -- Dan Streetman dds...@ie... --------------------- 186,272 miles per second: It isn't just a good idea, it's the law! |
From: Roman K <rom...@ma...> - 2005-06-21 17:23:48
|
> On Tue, 21 Jun 2005, Roman K wrote: > > >> The waitqueue change is needed because simply sleeping on a waitqueue is > >> deprecated, because it is racy. There is simply no way with a simple > >> sleep_on() to ensure you sleep before the event happens (in which case you > >> never get woken up!). So I changed it to the correct mechanism, where > >> there is a flag (event) you're waiting for. There is no race in this > >> case. I used only 2 flags, one for completion on ep3 (register r/w) and > >> one for ep4 (responses). > > > >Why wake_up_all() not wake_up_interruptible() or even wake_up_interruptible_all() > >if you prefer '_all()'. > > wake_up_all() wakes all sleepers (interruptible and uninterruptible). I was sure that it is only for uninterruptible ... I even noted that I've read before in LDD (v3) the almost other thing. I was wrong. ;-) > wake_up_interruptible() wakes up only 1 (interruptible) sleeper. > wake_up_interruptible_all() wakes up all interruptible sleepers (but not uninterruptible sleepers). > > There is no benefit to using the other wake functions, and the > disadvantage to using them is they will not work right if more sleepers > are added later or if uninterruptible sleepers are added later. I see. So this is good only in case we will have more sleepers of various type. I am not sure that this is good approach. I'll think of it. > > >> name. Are there any examples, maybe that would make it clearer to me...? > > > >There was one, please refer to the original reply by Dmitriy. > > I'll look again, although I didn't see it the first time I read the > email... > > > -- > Dan Streetman > dds...@ie... > --------------------- |
From: Dan S. <dds...@ie...> - 2005-06-22 03:35:01
|
On Tue, 21 Jun 2005, Roman K wrote: >> wake_up_interruptible() wakes up only 1 (interruptible) sleeper. >> wake_up_interruptible_all() wakes up all interruptible sleepers (but not uninterruptible sleepers). >> >> There is no benefit to using the other wake functions, and the >> disadvantage to using them is they will not work right if more sleepers >> are added later or if uninterruptible sleepers are added later. > >I see. So this is good only in case we will have more sleepers of >various type. I am not sure that this is good approach. I'll think >of it. Since there is currently only a single thread sleeping (interruptibly), wake_up_interruptible() will (should) work fine...of course so will wake_up_all() :-) -- Dan Streetman dds...@ie... --------------------- 186,272 miles per second: It isn't just a good idea, it's the law! |
From: Roman K <rom...@ma...> - 2005-06-22 06:47:27
|
Hi, > >> name. Are there any examples, maybe that would make it clearer to me...? > > > >There was one, please refer to the original reply by Dmitriy. > > I'll look again, although I didn't see it the first time I read the > email... That was RF_ => _RF change for example or ZD_ADAPTER rename. rik |
From: Dan S. <dds...@ie...> - 2005-06-22 17:20:44
|
On Wed, 22 Jun 2005, Roman K wrote: >Hi, > >> >> name. Are there any examples, maybe that would make it clearer to me...? >> > >> >There was one, please refer to the original reply by Dmitriy. >> >> I'll look again, although I didn't see it the first time I read the >> email... > >That was RF_ => _RF change for example or ZD_ADAPTER rename. Ah, ok. I changed RFMD_RF for 2 reasons: 1) there were no defines for the other modes, they were all magic numbers, so I created those and renamed RFMD_RF to match 2) it is (IMHO at least) much more useful to have the generic part of a define _before_ the specific part. For example defining all RF modes as: RFMD_RF AIROHA_RF WHATEVER_RF is not as good as defining them as: RF_RFMD RF_AIROHA RF_WHATEVER since the prefix immediately tells you the define is describing a RF mode. I do not normally see defines with a type-suffix. I changed ZD_ADAPTER for three reasons: 1) ZD is a meaningless prefix, since we already know this is a zd1211 device :) 2) ADAPTER is a meaningful prefix, it tells you the define describes the type of ADAPTER 3) The specification described the two possible types of adapters as "normal" and "dongle". So to me, it makes sense to name the defines to match the specification. When I see "ZD_ADAPTER" that doesn't tell me if it matches the "normal" adapter or "dongle" adapter, until I go find that "ZD_DONGLE" is also defined, and then by process of elimination I figure "ZD_ADAPTER" _probably means_ the "normal" adapter. Not good naming practice... Of course you could go with "ZD_ADAPTER_NORMAL" and "ZD_ADAPTER_DONGLE", but again, ZD_ doesn't really add any useful information, does it? Unless, of course, you prefix ALL the zd1211 defines with ZD_, to indicate it's a zd1211 specific constant. But I don't think there is anything in the .h file that warrants it being put into include/linux/ and so I don't think anyone besides the zd1211 driver should need to include it, and so we're back to ZD_ not being a useful prefix :-) -- Dan Streetman dds...@ie... --------------------- 186,272 miles per second: It isn't just a good idea, it's the law! |
From: Dmitriy K. <kor...@to...> - 2005-06-22 19:24:00
|
Hi Dan, The reason I've rejected this change. On the previous project spca50x USB web camera driver I saw a situation when there were two guys who added patches that changes things like this: int funcname (int parameter1, foor param2) { } to int funcname( int parameter1, foo param2) { } They did it one after another. And again... and again... and again... I saw another (commercial) project where guys changed file and directory names almost every day... The project was not finished... So, again, let's make this driver work first. Before this, let's change things we think they are necessary for the driver fynctionality (for both kernels). That is what I mean "ugly but stable". Let's not change names of the existing functions, variables, files, directories, etc. We may add them (when we think it's necessary) and name them however we want this. Regards, Dan Streetman wrote: >On Wed, 22 Jun 2005, Roman K wrote: > > > >>Hi, >> >> >> >>>>>name. Are there any examples, maybe that would make it clearer to me...? >>>>> >>>>> >>>>There was one, please refer to the original reply by Dmitriy. >>>> >>>> >>>I'll look again, although I didn't see it the first time I read the >>>email... >>> >>> >>That was RF_ => _RF change for example or ZD_ADAPTER rename. >> >> > >Ah, ok. I changed RFMD_RF for 2 reasons: >1) there were no defines for the other modes, they were all magic numbers, >so I created those and renamed RFMD_RF to match >2) it is (IMHO at least) much more useful to have the generic part >of a define _before_ the specific part. For example defining all RF modes >as: >RFMD_RF >AIROHA_RF >WHATEVER_RF >is not as good as defining them as: >RF_RFMD >RF_AIROHA >RF_WHATEVER >since the prefix immediately tells you the define is describing a RF mode. >I do not normally see defines with a type-suffix. > > >I changed ZD_ADAPTER for three reasons: >1) ZD is a meaningless prefix, since we already know this is a zd1211 >device :) >2) ADAPTER is a meaningful prefix, it tells you the define describes the >type of ADAPTER >3) The specification described the two possible types of adapters as >"normal" and "dongle". So to me, it makes sense to name the defines to >match the specification. When I see "ZD_ADAPTER" that doesn't tell me if >it matches the "normal" adapter or "dongle" adapter, until I go find that >"ZD_DONGLE" is also defined, and then by process of elimination I figure >"ZD_ADAPTER" _probably means_ the "normal" adapter. Not good naming >practice... > >Of course you could go with "ZD_ADAPTER_NORMAL" and "ZD_ADAPTER_DONGLE", >but again, ZD_ doesn't really add any useful information, does it? >Unless, of course, you prefix ALL the zd1211 defines with ZD_, to indicate >it's a zd1211 specific constant. But I don't think there is anything in >the .h file that warrants it being put into include/linux/ and so I don't >think anyone besides the zd1211 driver should need to include it, and so >we're back to ZD_ not being a useful prefix :-) > > > > -- Dmitriy |
From: Dan S. <dds...@ie...> - 2005-06-22 20:57:09
|
Disagreeing about function/constant names is one thing. I may have my opinion but unless the function or constant name is completely misleading, I don't care either way. Also I of course have my own coding style but I'll adhere to whatever style you want, as long as it's not too bad/confusing (for example, the FN_ASSERT macro that intentionally ended without a ";" was bad - you aren't convincing me otherwise ;-) But that said, cleaning up code is often an absolute necessity to making a driver work right. I'm not talking about where { } are placed or such, I mean design changes may be needed. Anyway I'll try to keep my patches small so it's easier for you to review them, although that will probably mean I can't actually test each patch, at least for a while; and it certainly will be more work for me. On Wed, 22 Jun 2005, Dmitriy Korovkin wrote: >Hi Dan, >The reason I've rejected this change. >On the previous project spca50x USB web camera driver I saw a situation >when there were two guys who added patches that changes things like this: >int funcname (int parameter1, foor param2) >{ >} > >to >int > funcname( > int parameter1, > foo param2) { >} > >They did it one after another. And again... and again... and again... >I saw another (commercial) project where guys changed file and directory >names almost every day... The project was not finished... > >So, again, let's make this driver work first. Before this, let's change >things we think they are necessary for the driver fynctionality (for >both kernels). That is what I mean "ugly but stable". >Let's not change names of the existing functions, variables, files, >directories, etc. We may add them (when we think it's necessary) and >name them however we want this. >Regards, > >Dan Streetman wrote: > >>On Wed, 22 Jun 2005, Roman K wrote: >> >> >> >>>Hi, >>> >>> >>> >>>>>>name. Are there any examples, maybe that would make it clearer to me...? >>>>>> >>>>>> >>>>>There was one, please refer to the original reply by Dmitriy. >>>>> >>>>> >>>>I'll look again, although I didn't see it the first time I read the >>>>email... >>>> >>>> >>>That was RF_ => _RF change for example or ZD_ADAPTER rename. >>> >>> >> >>Ah, ok. I changed RFMD_RF for 2 reasons: >>1) there were no defines for the other modes, they were all magic numbers, >>so I created those and renamed RFMD_RF to match >>2) it is (IMHO at least) much more useful to have the generic part >>of a define _before_ the specific part. For example defining all RF modes >>as: >>RFMD_RF >>AIROHA_RF >>WHATEVER_RF >>is not as good as defining them as: >>RF_RFMD >>RF_AIROHA >>RF_WHATEVER >>since the prefix immediately tells you the define is describing a RF mode. >>I do not normally see defines with a type-suffix. >> >> >>I changed ZD_ADAPTER for three reasons: >>1) ZD is a meaningless prefix, since we already know this is a zd1211 >>device :) >>2) ADAPTER is a meaningful prefix, it tells you the define describes the >>type of ADAPTER >>3) The specification described the two possible types of adapters as >>"normal" and "dongle". So to me, it makes sense to name the defines to >>match the specification. When I see "ZD_ADAPTER" that doesn't tell me if >>it matches the "normal" adapter or "dongle" adapter, until I go find that >>"ZD_DONGLE" is also defined, and then by process of elimination I figure >>"ZD_ADAPTER" _probably means_ the "normal" adapter. Not good naming >>practice... >> >>Of course you could go with "ZD_ADAPTER_NORMAL" and "ZD_ADAPTER_DONGLE", >>but again, ZD_ doesn't really add any useful information, does it? >>Unless, of course, you prefix ALL the zd1211 defines with ZD_, to indicate >>it's a zd1211 specific constant. But I don't think there is anything in >>the .h file that warrants it being put into include/linux/ and so I don't >>think anyone besides the zd1211 driver should need to include it, and so >>we're back to ZD_ not being a useful prefix :-) >> >> >> >> > > > -- Dan Streetman dds...@ie... --------------------- 186,272 miles per second: It isn't just a good idea, it's the law! |
From: Roman K <rom...@ma...> - 2005-06-20 23:55:30
|
Hi, > Hi Dan, > After review of your patch I see the following: > 1. Join zd1211.h and ad1211.c from 2.4 and 2.6 directories looks > reasonable. If it works fine it may be accepted. ACCEPTED. > 2. I don't see a reason to use ; at the end of each mcros, but Roman > says ne likes this idea, so let it be. ACCEPTED. Done. > 3. I don't see a reason to rename constants like ZD_ADAPTER to > ADAPTER_NORMAL etc. > REJECTED. > 4. I don't see a reason to remove locks. They are reserved for the > future implementation. REJECTED. > 5. I also don't see a reason in changes like this: > - struct usb_interface_descriptor *iface_desc; //interface > descriptor > struct usb_endpoint_descriptor *endpoint; //endpoint > descriptor > + __u8 bNumEndpoints = > CUR_ALTSETTING(interface).bNumEndpoints; > Variable you have removed may be used in the future. > REJECTED. It is better to use macro functions since iface_desc has different types in 2.4 and 2.6. > 6. I also don't see a reason in changes like this: > - if (val == 0x04 || val == 0x07) > { > - debug("AiroHa > RF"); > - > } > > - else if (val == 0x09) > { > - debug("GCT > RF"); > - > } > > - else if (val == RFMD_RF) > { > - debug("RFMD > RF"); > - > } > > - else > { > > - debug("Unknown RF - 0x%X", > val); > + switch (priv->ieee.rfMode) > { > + case RF_AIROHA: debug("Airoha RF"); > break; > + case RF_MAXIM: debug("Maxim RF"); > break; > + case RF_RFMD: debug("RFMD RF"); > break; > + case 0x9: debug("GCT RF?"); > break; > + default: debug("Unknown RF : 0x%x", > priv->ieee.rfMode); > REJECTED. One-line style is bad, but concept (switch & named consts) are not so bad idea. > 7. I also don't understand, what did you want to do with these changes > in callbacks: > - if > (!priv->usb_dev) > > - > return; > > priv->macCmdResult = > uurb->status; > - if (uurb->status != 0 && > waitqueue_active(&priv->regwq)) > - > wake_up_interruptible(&priv->regwq); > > + priv->reg_rw_sent = > 1; > + > wake_up_all(&priv->regwq); > > > And these: > - > interruptible_sleep_on(&priv->regwq); > > + wait_event_interruptible(priv->regwq, priv->reg_rw_sent && > priv->resp_received); > Please, explain why your solution is better, so I'll make a decision. > DELAYED. > > The main reason I have rejected some changes - big changes of code > though all the text confuses other developers. we MUST avoid operations > like tab -> space conversions, function names changes, reformatting and > constants renaming even if we don't like some of them. > Let's follow the old army principle "ugly but stable". > > But anyway, thank you very much for your work. It's very usefull. But as > I mentioned previously, ng driver is in experimental stage, so IMHO it's > better for us to concentrate on making this driver working. > Hope to see you in the list of the developers. > Regards, > > Dan Streetman wrote: > > >Sure I can work on getting it working...but what about the patch I sent? > >Will you use any of that or not? If not, what are the problems you see > >with it? > > > > > >On Thu, 16 Jun 2005, Dmitriy Korovkin wrote: > > > > > > > >>Dan, > >>May I ask you to concentrate on experimenting and hacking. > >>Currently I'm hardly trying to make this device answer to my scan request. > >>Any work in this direction (to make the device work) would be very highly > >>appreciated. > >>Regards, > >> > >>On Thu, 16 Jun 2005, Dan Streetman wrote: > >> > >> > >> > >>>Date: Thu, 16 Jun 2005 10:28:56 -0400 (EDT) > >>>From: Dan Streetman <dds...@ie...> > >>>To: Dmitriy Korovkin <dko...@ra...> > >>>Cc: zd1...@li... > >>>Subject: Re: [patch] updates to zd1211ng for 2.6(.11) > >>> > >>> > >>>Ok, thanks. I will hold off on any more changes until I hear more from > >>>you. > >>> > >>>On Thu, 16 Jun 2005, Dmitriy Korovkin wrote: > >>> > >>> > >>> > >>>>Dan, > >>>>Thank you very much for the patch. > >>>>I'm afraid, I can't agree with all of your changes. Before integrating > >>>>this patch I need to review it more carefully. > >>>>But you've done a great work! > >>>>Regards, > >>>> > >>>>On Wed, 15 Jun 2005, Dan Streetman wrote: > >>>> > >>>> > >>>> > > > > > > > > > -- > Dmitriy |
From: Albert R. <al...@ir...> - 2005-05-10 18:44:02
|
Markus Karg writes: > Hi all, > > ZyDAS sent me some code under GPL that we may incorporate to our code base. > Have a look at the attached files. > > Have Fun > Markus So now we have two new versions from ZyDAS (1.2.7.0 and 1.4.0.0) and even more confusion.... I took a quick look at both, and it appears that some files are newer in one version, but other files - in the other? Do they use different source code branches in ZyDAS? Or different people working on it? Marcus, thank you for posting the 1.2.7.0 driver, could you please ask your contact in ZyDAS about what is different between 1.2.7.0 and 1.4.0.0? What are their plans for future development of this driver? Would they like to move their development completely into some open source form, i.e. this project on SF (well, maybe I'm smoking a crack pipe here)? Or we always have to play catch 5 with them? -albertr |
From: Markus K. <mar...@gm...> - 2005-05-11 19:26:32
|
> Marcus, thank you for posting the 1.2.7.0 driver, could you please > ask your contact in ZyDAS about what is different between 1.2.7.0 > and 1.4.0.0? What are their plans for future development of this > driver? Would they like to move their development completely into > some open source form, i.e. this project on SF (well, maybe I'm > smoking a crack pipe here)? Or we always have to play catch 5 with them? They won't tell us I think. Why not just making a DIFF? ZyDAS is internally developing their own stuff, they just wanted to give us insight into their code for our benefit. They want us to be the one and only open source driver on the web, and they don't want to join our project. And there is no chance that this changes soon. Clear now? |
From: Mike P. <mp...@re...> - 2005-05-12 10:34:42
|
On Wed, May 11, 2005 at 09:32:39PM +0200, Markus Karg wrote: > ZyDAS is internally developing their own stuff, they just wanted to give us > insight into their code for our benefit. They want us to be the one and only > open source driver on the web, and they don't want to join our project. And > there is no chance that this changes soon. Clearly if they want to do things in this manner there is no way we can stop them. But I don't see how what they are doing makes sense. If they were keeping their driver proprietary and it had some features that are missing from this project's Free version it's easier to understand why they might want to remain in competition with us. But they are allowing us to make use of any bits of their code we find useful (and releasing useful documents to us) - so why are they insisting on continuing their development partly behind closed doors? I can't see their motivation for continuing their development at all given what you say. If they are not in competition with us that means they have no interest in people using their driver over ours - so why not collaborate more? Who knows, they might find some of our changes useful :-). I think part of the answer is that they have very little developer time available for this project - look at how little development they have done in the last six months. Mike |
From: Markus K. <mar...@gm...> - 2005-05-12 18:16:07
|
> Clearly if they want to do things in this manner there is no way we can > stop them. But I don't see how what they are doing makes sense. If > they were keeping their driver proprietary and it had some features > that are missing from this project's Free version it's easier to > understand why they might want to remain in competition with us. But > they are allowing us to make use of any bits of their code we find > useful (and releasing useful documents to us) - so why are they > insisting on continuing their development partly behind closed doors? Competition is not a bad thing. If two team provide GPL implementations for the same problem, after finishing both teams can take a look at the other team's solution and learn from it. If this would not be true, there would not be a market for Tomcat AND Jetty, for JBoss AND JOnAS, for... > I can't see their motivation for continuing their development at all > given what you say. If they are not in competition with us that means > they have no interest in people using their driver over ours - so why > not collaborate more? Who knows, they might find some of our changes > useful :-). As ZyDAS told me, their driver is targeting another market than we do. Ours is for USB dongles, theirs is for embedded applications. So their driver is not actively maintained, it's a kind of side effect of their work. They are not interested in providing their own driver for USB dongles, it just exists "by incidence". Markus |