Device Driver Writing

Hello,

I am writing a PCI device driver for a National Instruments 6527 Digital IO
board (or rather, trying to). Like so many others before me, I can probe
the device on the bus, no problem. It’s there, and I’ve got the base
address registers (BARS). BAR0 (pci mite memory) is 0xdd800000 and BAR1
(IO registers) is 0xdd000000. So what’s the problem? When I map into these
areas, I do not see the board. When I map into BAR0, I expect to see stuff
like vendor id, etc, and that’s just not happening. Here’s the code:


Thanks,

James Carmody
carmodyj@aecl.ca


begin 666 qnx6527-slim.c
M(VEN8VQU9&4@/’-T9&EO+F@^“B-I;F-L=61E(#QS=&1D968N:#X*(VEN8VQU
M9&4@/’-T9&QI8BYH/@HC:6YC;‘5D92 =6YI<W1D+F@^"B-I;F-L=61E(#QS
M=’)I;F<N:#X*(VEN8VQU9&4@/&DX-BYH/@HC:6YC;'5D92 <WES+W!C:2YH
M/@HC:6YC;'5D92 <WES+V]S:6YF;RYH/@HC:6YC;‘5D92 <WES+W-E9VEN
M9F\N:#X*(VEN8VQU9&4@/’-Y<R]T>7!E<RYH/@HC:6YC;'5D92 <WES+VME
M<FYE;“YH/@HC:6YC;‘5D92 \9F-N=&PN:#X*(VEN8VQU9&4@/’-Y<R]M;6%N
M+F@^”@HO+R!$969I;F4@=&AE(&1E=FEC92!A;F0@=F5N9&]R”@HC9&5F:6YE
M(" @64]54E]00TE?1$5624-%7TE$(" @,’@R0C(P(" @("\O($1I9VET86P@
M24@-C4R-PHC9&5F:6YE(" @64]54E]00TE?5D5.1$]27TE$(" @,’@Q,#DS
M(" @("\O($YA=&EO;F%L($EN<W1R=6UE;G1S"@IM86EN*" I"GL*“7-T<G5C
M=”!?;W-I;F9O"0D):6YF;SL*“75N<VEG;F5D"0D)“6)U<VYU;2P@”@D)“0D)
M"0ED979F=6YC;G5M.PH);&]N9PD)“0D)861D<F5S<S$[”@EL;VYG"0D)“0EA
M9&1R97-S,#L*“75N<VEG;F5D"0D)“7!C:5]I;F1E>” ](# [”@EC:&%R"0D)
M"0DJ8F%R,#L*“6-H87()“0D)“2IB87(Q.PH)<W1R=6-T(%]P8VE?8V]N9FEG
M7W)E9W,@<F5G<SL*“B\O($Y/5$4@,3H@<&-I7VEN9&5X(&ES(&$@=F%L=64@
M8F5T=V5E;B P(&%N9”!T:&4@;G5M8F5R( HO+R @(” @(” @(&]F(&1E=FEC
M97,@;V8@>6]U<B!T>7!E(&]N('1H92!B=7,N(”!4:&%T(&ES+” +R@(" @
M(" @("!S<&5C:69Y:6YG(&$@=F%L=64@;V8@,2!W:6QL(&1E=&5C="!T:&4@
M<V5C;VYD( HO+R @(" @(" @(&]C8W5R<F5N8V4@;V8@>6]U<B!D979I8V4N
M"B\O($Y/5$4@,CH@5&AE<F4@:7,@;F@<F5L871I;VYS:&EP(&)E=’=E96X@
M=&AE(’!C:5]I;F1E>" +R@(" @(" @("!A;F0@=&AE(&)U<R!S;&]T(&YU
M;6)E<G,N"B\O(%1H92!.970@9’)I=F5R<R!H879E(&$@8V]M;6%N9"!L:6YE
M(&]P=&EO;B!F;W(@<V5T=&EN9R +R@=&AE(’!C:5]I;F1E>"X"G!R:6YT
M9B@@(F]F9G-E="!I<SH@)61<;B(L(&]F9G-E=&]F
’-T<G5C="!?<&-I7V-O
M;F9I9U]R96=S+$)A<V5?061D<F5S<U]296=S6S!=(“D@3L@H):68H(’%N
M>%]O<VEN9F\H(# L(“9I;F9O(“D@/3T@+3$@2 "7L"0EP<FEN=&8H(D5R
M<F]R(’%N>%]O<VEN9F]<;B(I.PH)"65X:70H($58251?1D%)3%5212 I.PH)
M?0H
"2\O(’=E(&AA=F4@82!00TD@0DE/4PH):68H(”$H(&EN9F\N<V9L86=S
M(“8@7U!31E]00TE?0DE/4R I(“D@”@E[(” @(” @"@D)<’)I;G1F
”).;R!0
M0TD@0DE/4UQN(BD[”@D)<F5T=7)N(# ["@E]"@HO+R!&:6YD(‘1H92!D979I
M8V4@;VX@=&AE(&)U<PH):68H(%]#05]00TE?1FEN9%]$979I8V4H(%E/55)?
M4$-)7T1%5DE#15])1"P@“B @(” @(" @(%E/55)?4$-)7U9%3D1/4E])1"P@
M<&-I7VEN9&5X+" F8G5S;G5M+" (" @(" @(" @)F1E=F9U;F-N=6T@2 A
M/2!00TE?4U5#0T534R I( H)>PH)"7!R:6YT9B@B56YA8FQE('1O(&9I;F0@
M1&5V:6-E7&XB
3L
"0EE>&ET*"!%6$E47T9!24Q54D4@3L"7T*“B\O($=E
M=”!T:&4@=VAO;&4@<W1R=6-T=7)E"@EI9B@@7T-!7U!#25]296%D7T-O;F9I
M9U]">71E*"!B=7-N=6TL(&1E=F9U;F-N=6TL( H)“3 L”@D)<VEZ96]F*"!S
M=’)U8W0@7W!C:5]C;VYF:6=?<F5G<R I+" H8VAA<B J2 F<F5G<RD@(3T@
M4$-)7U-50T-%4U,@2 "7L"0EP<FEN=&8H(D5R<F]R(’)E861I;F<@:6YT
M97)R=7!T7&XB
3L
"0EE>&ET*"!%6$E47T9!24Q54D4@3L"7T*“B\O($Y/
M5$4Z(”!9;W4@=VEL;"!N965D(‘1O(&MN;W<@:&]W(‘1H92!C;VYF:6=U<F%T
M:6]N(’-P86-E( HO+R @(" @(" @:&%S(&)E96X@:6YI=&EA;&EZ960@9F]R
M(‘EO=7(@9&5V:6-E(‘1O(&1E=&5R;6EN92 +R@(" @(" @(‘1H92!)+T@
M86YD(&UE;6]R>2!B87-E(&%D9’)E<W-E<RX@(%EO=2!M:6=H="!H879E( HO
M+R @(" @(" @=&@8VAA;F=E(‘1H92!"87-E7T%D9’)E<W-?4F5G<R!I;F1E
M>“X@(%1H870@:7,L( HO+R @(” @(" @<V]M92!D979I8V5S(&UA>2!D969I
M;F4@;V9F<V5T(# @=&@8F4@=&AE(&UE;6]R>0HO+R @(" @(" @8F%S92P@
M=VAI;&4@;W1H97)S(&1E9FEN92!I="!A<R!T:&4@22]/(&)A<V4N"@HO+R!D
M971E<FUI;F4@9&5V:6-E($DO3R!A;F0@;65M;W)Y(&)A<V4@861D<F5S<V5S
M("A"05(P
0H):68H7T-!7U!#25]296%D7T-O;F9I9U]$5V]R9"AB=7-N=6TL
M(&1E=F9U;F-N=6TL( H)"6]F9G-E=&]F*’-T<G5C="!?<&-I7V-O;F9I9U]R
M96=S+" “0E"87-E7T%D9’)E<W-?4F5G<ULP72DL”@D),2P@&-H87(@BDF
M861D<F5S<S I("$](%!#25]354-#15-3
2 "7L"0EP<FEN=&8H(D5R<F]R
M(’)E861I;F<@861D<F5S<S%<;B(I.PH)"65X:70H($58251?1D%)3%5212 I
M.PH)?0H*+R@9&5T97)M:6YE(&1E=FEC92!)+T@86YD(&UE;6]R>2!B87-E
M(&%D9’)E<W-E<R H0D%2,2D*“6EF*%]#05]00TE?4F5A9%]#;VYF:6=?1%=O
M<F0H8G5S;G5M+”!D979F=6YC;G5M+" “0EO9F9S971O9BAS=’)U8W0@7W!C
M:5]C;VYF:6=?<F5G<RP@”@D)0F%S95]!9&1R97-S7U)E9W-;,5TI+ H)"3$L
M("AC:&%R("HI)F%D9’)E<W,Q
2 A/2!00TE?4U5#0T534RD@"@E["@D)<’)I
M;G1F*")%<G)O<B!R96%D:6YG(&%D9’)E<W,Q7&XB3L"0EE>&ET*"!%6$E4
M7T9!24Q54D4@3L"7T*"@EP<FEN=&8H(")“05(P(“AA9&1R97-S(&]F(%!#
M22!M:71E2 Z(“5X7&XB+”!A9&1R97-S," I.PH)<’)I;G1F” B0D%2,2 H
M861D<F5S<R!O9B!R96=I<W1E<G,I.B E>%QN(BP@861D<F5S<S$@3L@EA
M9&1R97-S," ](%!#25]-14U?041$4B@@861D<F5S<S @3L"6%D9’)E<W,Q
M(#T@4$-)7TE/7T%$1%(H(&%D9’)E<W,Q(“D[”@HO+PEA9&1R97-S,2 ]("@@
M861D<F5S<S$@)B P>$9&1D9&1C P(“D@?” P># P,# P,#@P.PH*“2\O(”!/
M<&5N(‘1H92!S:&%R960@;65M;W)Y(&%N9"!M87 @=&AE(&-A<F0@:6X*“7L*
M"0EI;G0@9F0[”@D)"@D):68H("@@9F0@/2!S:&U?;W!E;B@@(E!H>7-I8V%L
M(BP@3U]21%=2+" P(“D@2 ]/2 M,2 I"@D)>PH)“0EP<FEN=&8H(”)%<G)O
M<B!O<&5N:6YG(’-H87)E9"!M96UO<GDN7&XB(“D[”@D)"65X:70H("TQ(“D[
M”@D)?0H)"0H)"6)A<C @/2 H8VAA<B J
2!M;6%P*” P+" P>#$P,# L(%!2
M3U1?4D5!1"!(%!23U1?5U))5$4L($U!4%]32$%2140L(&9D+" "0D)"0D)
M"2 @
&]F9E]T2 H(&%D9’)E<W,P("8@?C!X9F9F("D@3L"0D"@D)8F%R
M,2 ]("AC:&%R(“HI(&UM87 H(# L(#!X,3 P,“P@4%)/5%]214%$(‘P@4%)/
M5%]74DE412P@34%07U-(05)%1"P@9F0L( H)"0D)“0D)(” H;V9F7W0I(&%D
M9’)E<W,Q(“D[”@D)”@E]”@H)<’)I;G1F*" B8F%R,"!R96UA<’!E9"!I;B!L
M;V-A;"!A9&1R97-S(’-P86-E(#H@)7!<;B(L(&)A<C @3L"7!R:6YT9B@@
M(F)A<C$@<F5M87!P960@:6X@;&]C86P@861D<F5S<R!S<&%C92 Z(“5P7&XB
M+”!B87(Q(“D[”@H)"@DO+R @5VAA="!)(&%N=&EC:7!A=&5D(&%T(‘1H:7,@
M<&]I;G0@=V%S.@H)+R@(%=H96X@:6X@=&AE(&1E8G5G9V5R+"!I9B!)(&EN
M<W!E8W0@=&AE(&-O;G1E;G1S(&]F(“IB87(P+”!)(’-H;W5L9"!S964@=&AE
M(’-A;64@:6YF;PH)+R@(&%S($D@<F5A9"!I;G1O(’)E9W,@<W1R=6-T+"!W
M:71H(‘1H92!?0T%?4$-)7U)E861?0V]N9FEG7T)Y=&4@8V%L;"!A8F]V92X@
M($YE961L97-S(‘1O( H)+R@(’-A>2P@=&AI<R!D:60@;F]T(&AA<’!E;BX@
M($%N>2!H96QP(’=O=6QD(&)E(&%P<’)E8VEA=&5D+B @5&AA;FMS+@H)+R@
M($A(;6UM+" “@EP<FEN=&8H(”)&24Y)4TA%1"Y<;B(@3L"@ER971U<FXH
5($58251?4U5#0T534R I.PH
?0H*
`
end

Previously, James Carmody wrote in qdn.public.qnx4.devtools:

Hello,

I am writing a PCI device driver for a National Instruments 6527 Digital IO
board (or rather, trying to). Like so many others before me, I can probe
the device on the bus, no problem. It’s there, and I’ve got the base
address registers (BARS). BAR0 (pci mite memory) is 0xdd800000 and BAR1
(IO registers) is 0xdd000000. So what’s the problem? When I map into these
areas, I do not see the board. When I map into BAR0, I expect to see stuff
like vendor id, etc, and that’s just not happening. Here’s the code:

I’m not sure if this is your problem, but you want to add PROT_NOCACHE
to the prot parameters.


Mitchell Schoenbrun --------- maschoen@pobox.com