Hi, Does anyone know and use compactPCI instead of regular pci bus? My
driver works fine in regular PCI bus but not on compactPCI. Anyone has any
clue? Thanks in advance.
Z.S.Wang
Hi, Does anyone know and use compactPCI instead of regular pci bus? My
driver works fine in regular PCI bus but not on compactPCI. Anyone has any
clue? Thanks in advance.
Z.S.Wang
Some of the BIOSes on the cPCI CPU boards are more stringent about the
number of I/O ports allowed to be configured on a PCI card. Other than
that, I have found no problems using cPCI (at least under Windows CE and
98).
Greg
-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com]On Behalf Of
xxxxx@exgate.tek.com
Sent: Thursday, September 21, 2000 11:03 AM
To: NT Developers Interest List
Subject: [ntdev] compactPciHi, Does anyone know and use compactPCI instead of regular pci bus? My
driver works fine in regular PCI bus but not on compactPCI. Anyone has any
clue? Thanks in advance.Z.S.Wang
==================================
Zhongsheng Wang
P. O. Box 500, M/S 50-480
Beaverton, OR 97077
Email: xxxxx@tek.com
Phone: (503) 627-5260
You are currently subscribed to ntdev as: xxxxx@pdq.net
To unsubscribe send a blank email to $subst(‘Email.Unsub’)
>Hi, Does anyone know and use compactPCI instead of regular pci bus? My
driver works fine in regular PCI bus but not on compactPCI. Anyone has any
clue? Thanks in advance.
I believe compact PCI systems will often have slots behind a PCI bridge. NT
4 doesn’t exactly handle bridges real well. If you trace your driver with a
debugger, have you verified your device gets detected? I assume you are
scanning for multiple PCI busses in your device detection code? Can you be
more specific about what you mean by “not working”?
Thanks, Jan: Yes, I have searched many buses and I can see that the second
device object has been created. In each loop, I create the device object and
then let driver do the following:
// prepare a DPC object for later use, and associate it // with the UNAS
device
IoInitializeDpcRequest(pDevObj, VvUnasDpcForIsr);
// make sure device interrupts are off
*(UINT32 *)(tcb->atu + OIMR_PCI_ADDR) = 0xffff;
KdPrint((“IRQL is %d\n”, DeviceBlock->Dirql));
status = IoConnectInterrupt(
&tcb->pInterrupt,
VvIsr,
tcb, // we use control block as
//interrupt handler context
NULL, // no spin lock
DeviceBlock->SystemVector,
DeviceBlock->Dirql,
DeviceBlock->Dirql,
DeviceBlock->InterruptMode,
DeviceBlock->ShareVector,
DeviceBlock->Affinity,
DeviceBlock->FloatingSave);
There is no problem to connect interrupt for the first device, but the CPU
is locked after the driver creates the device object for the second device.
The debuger information shows that the driver stops right before
IoConnectInterrupt() for the second device. There is no problem to run one
driver for one device, but not one driver for multiple devices. Can you see
the problem now? Thanks very much.
Z.S.Wang
-----Original Message-----
From: Jan Bottorff [mailto:xxxxx@pmatrix.com]
Sent: Thursday, September 21, 2000 12:47 PM
To: NT Developers Interest List
Subject: [ntdev] Re: compactPci
Hi, Does anyone know and use compactPCI instead of regular pci bus? My
driver works fine in regular PCI bus but not on compactPCI. Anyone has any
clue? Thanks in advance.
I believe compact PCI systems will often have slots behind a PCI bridge. NT
4 doesn’t exactly handle bridges real well. If you trace your driver with a
debugger, have you verified your device gets detected? I assume you are
scanning for multiple PCI busses in your device detection code? Can you be
more specific about what you mean by “not working”?
You are currently subscribed to ntdev as: xxxxx@exgate.tek.com
To unsubscribe send a blank email to $subst(‘Email.Unsub’)
> IoInitializeDpcRequest(pDevObj, VvUnasDpcForIsr);
// make sure device interrupts are off
*(UINT32 *)(tcb->atu + OIMR_PCI_ADDR) = 0xffff;
KdPrint((“IRQL is %d\n”, DeviceBlock->Dirql));
status = IoConnectInterrupt(
&tcb->pInterrupt,
<…>
Your aware that modern processors execute instructions out of order, so in
the above code fragment the write to the device may happen AFTER
instructions in IoConnectInterrupt are executing? This may be bad. The DDK
functions (like WRITE_REGISTER_ULONG) for device memory access also contain
instruction pipeline synchronization to assure accesses happen in the
correct order. My suggestion would be to replace any direct pointer
accesses to device memory with calls to an appropriate synchronized access
function.
As this specific example seems to have this memory access synchronization
issue, other parts of the driver may also have the same issue. This means
all bets are off about how the device is actually getting accessed. Until
there is a match between your logical intent and the actual signals the
device sees, it will be really unpredictable how the device responds.
Does anyone how to control interrupt level via BIOS settup in compactPCI? My
driver can handle multiple devices. I have been successfully started the
driver with a different IRQ number for each device, but I have to use same
IRQ number for all devices after I mess up the BIOS setting. Now my driver
can run only when two devices in the slots with same IRQ. Can anyone give me
some suggestion? Thanks.
Z.S.Wang
That would be dependant upon the BIOS on your CPU card. You will need to
consult the documentation for you CPU board. cPCI is no different that
standard PCI, except as noted it usually uses an extra bridge between the
primary PCI bus and the cPCI slots.
Greg
-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com]On Behalf Of
xxxxx@exgate.tek.com
Sent: Friday, September 22, 2000 11:41 AM
To: NT Developers Interest List
Subject: [ntdev] compactPCIDoes anyone how to control interrupt level via BIOS settup in
compactPCI? My
driver can handle multiple devices. I have been successfully started the
driver with a different IRQ number for each device, but I have to use same
IRQ number for all devices after I mess up the BIOS setting. Now my driver
can run only when two devices in the slots with same IRQ. Can
anyone give me
some suggestion? Thanks.Z.S.Wang
==================================
Zhongsheng Wang
P. O. Box 500, M/S 50-480
Beaverton, OR 97077
Email: xxxxx@tek.com
Phone: (503) 627-5260
You are currently subscribed to ntdev as: xxxxx@pdq.net
To unsubscribe send a blank email to $subst(‘Email.Unsub’)
I have not seen a difference between the two busses with NT 4.0. My driver works on both.
Bill Wandel
-----Original Message-----
From: xxxxx@exgate.tek.com [SMTP:xxxxx@exgate.tek.com]
Sent: Thursday, September 21, 2000 12:03 PM
To: NT Developers Interest List
Subject: [ntdev] compactPci
Hi, Does anyone know and use compactPCI instead of regular pci bus? My
driver works fine in regular PCI bus but not on compactPCI. Anyone has any
clue? Thanks in advance.
Z.S.Wang
You are currently subscribed to ntdev as: xxxxx@smart.net
To unsubscribe send a blank email to $subst(‘Email.Unsub’)
Does your driver perform “hot swapping” properly? Did you have to modify
your PCI driver to achieve that?
Bennet Levine
----- Original Message -----
From: “Bill Wandel”
To: “NT Developers Interest List”
Sent: Saturday, September 23, 2000 7:30 AM
Subject: RE: [ntdev] compactPci
> I have not seen a difference between the two busses with NT 4.0. My
> driver works on both.
>
> Bill Wandel
>
> -----Original Message-----
> From: xxxxx@exgate.tek.com
> [SMTP:xxxxx@exgate.tek.com]
> Sent: Thursday, September 21, 2000 12:03 PM
> To: NT Developers Interest List
> Subject: [ntdev] compactPci
>
> Hi, Does anyone know and use compactPCI instead of regular pci bus? My
> driver works fine in regular PCI bus but not on compactPCI. Anyone has
> any
> clue? Thanks in advance.
>
> Z.S.Wang
>
> ==================================
> Zhongsheng Wang
> P. O. Box 500, M/S 50-480
> Beaverton, OR 97077
> Email: xxxxx@tek.com
> Phone: (503) 627-5260
> ==================================
>
>
> —
> You are currently subscribed to ntdev as: xxxxx@smart.net
> To unsubscribe send a blank email to $subst(‘Email.Unsub’)