Ah haa! solved it, foolish mistake on my behalf… I decided to check if
there were other
devices sharing the same interrupt as my PCI device, using winmsd.exe. it
turns out that there
were two other devices sharing the interrupt which was overwriting my copy
of the status control
register.
I should have read the status control register into a local variable and
copied it to my device extension
if it was an interrupt from my device…
Oppps! this would have been an issue with the 32bit driver as well, but it
wasn’t spotted since it wasn’t sharing its interrupt.
-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com]On Behalf Of James Dunning
Sent: 09 November 2005 14:36
To: Windows System Software Devs Interest List
Subject: RE: [ntdev] Porting a windows 32bit XP PCI Device Driver to
64bit
I have managed to port my 32bit driver to 64bit, and it has been
successfully installed on to
Windows XP x64 Edition, however the driver will lockup after a few seconds
while performing DMA operations.
I am sharing a copy of the DMA status register, in the Device Extension of
type UCHAR, the status register allows me to determine whether my PCI device
is interrupting upon completion of a DMA transfer, and to indicate whether
the DMA transfer was completed.
From the debug logging I have noticed that the copy of the DMA status
register is going out of sync between the InterruptHandler and the DPCforISR
routine. In one case the status register would be set to 0x84 Hex in the
interrupt handler, only to find that the copy of the status register has
been cleared before it enters the DPCforISR routine.
The access to the copy of the status register is controlled by the use of
KeAcquireInterruptSpinLock and KeReleaseInterruptSpinLock, so this has left
me rather confused! especially when the copy of the status register can only
be cleared from the DPCforISR routine.
Incidentally, I have added count information in the device extension to
determine how many times an IRP_MJ_READ request was handled, how many times
the InterrruptHandler was called, and how many times the DPCforISR routine
was called… these counts did not reveal anything out of the ordinary…
The driver is installed on a dual Opteron 251 system. any advice or
suggestions would be appreciated.
Regards
James
This email and any files attached are intended for the addressee and may
contain information of a confidential nature. If you are not the intended
recipient, be aware that this email was sent to you in error and you should
not disclose, distribute, print, copy or make other use of this email or its
attachments. Such actions, in fact, may be unlawful. In compliance with
the various Regulations and Acts, General Dynamics UK Limited reserves the
right to monitor (and examine for viruses) all emails and email attachments,
both inbound and outbound. Email communications and their attachments may
not be secure or error- or virus-free and the company does not accept
liability or responsibility for such matters or the consequences thereof.
Registered Office: 100 New Bridge Street, London EC4V 6JA. Registered in
England and Wales No: 1911653.
Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256
You are currently subscribed to ntdev as:
xxxxx@generaldynamics.uk.com
To unsubscribe send a blank email to xxxxx@lists.osr.com
This email and any files attached are intended for the addressee and may
contain information of a confidential nature. If you are not the intended
recipient, be aware that this email was sent to you in error and you should
not disclose, distribute, print, copy or make other use of this email or its
attachments. Such actions, in fact, may be unlawful. In compliance with
the various Regulations and Acts, General Dynamics UK Limited reserves the
right to monitor (and examine for viruses) all emails and email attachments,
both inbound and outbound. Email communications and their attachments may
not be secure or error- or virus-free and the company does not accept
liability or responsibility for such matters or the consequences thereof.
Registered Office: 100 New Bridge Street, London EC4V 6JA. Registered in
England and Wales No: 1911653.