Hello,
I have been asked to look into implementing DMA for a PCI board (with Altera Cyclone core). Currently the board doesn’t have a DMA controller and there is no plan to implement one if not necessary. The main reason is to speed access to a FIFO of 256 kbytes.
Currently the board doesn’t provide a DMA descriptor with the IRP_START_DEVICE (obviously). To access the FIFO, I have to map a memory space that is recognized as a CmResourceMemory. I am using MapIoSpace on this 256 kbytes FIFO and doing read/write buffer access with WRITE_REGISTER_BUFFER…/READ_REGISTER_BUFFER… .
First off, is it possible to implement DMA in my driver without the board having a DMA controller? If so, what are the steps to doing so (SG or Common Buffer…Master or Slave… etc).
Second, is there any way to implement a driver DMA on a CmResourceMemory?
In case it helps narrow, the driver needs to support 2000/XP/Vista/x86/x64
Thank you,
Frederick
Express yourself with free Messenger emoticons. Get them today!
http://g.msn.ca/ca55/207
The system DMA controller is strictly for legacy devices and cannot be used
for normal PCI devices that cannot perform bus master memory accesses.
You do not need a ‘dma controller’ on your PCI device, you need logic that
can perform bus master operations to read non-local memory over the PCI bus.
If your PCI device cannot do this then your only alternative is what you
have already implemented: using the HAL READ_* WRITE_* methods to access
your device memory from the system.
On Thu, Mar 27, 2008 at 10:02 AM, Frederick Guillemot <
xxxxx@hotmail.com> wrote:
Hello,
I have been asked to look into implementing DMA for a PCI board (with
Altera Cyclone core). Currently the board doesn’t have a DMA controller and
there is no plan to implement one if not necessary. The main reason is to
speed access to a FIFO of 256 kbytes.
Currently the board doesn’t provide a DMA descriptor with the
IRP_START_DEVICE (obviously). To access the FIFO, I have to map a memory
space that is recognized as a CmResourceMemory. I am using MapIoSpace on
this 256 kbytes FIFO and doing read/write buffer access with
WRITE_REGISTER_BUFFER…/READ_REGISTER_BUFFER… .
First off, is it possible to implement DMA in my driver without the board
having a DMA controller? If so, what are the steps to doing so (SG or Common
Buffer…Master or Slave… etc).
Second, is there any way to implement a driver DMA on a CmResourceMemory?
In case it helps narrow, the driver needs to support 2000/XP/Vista/x86/x64
Thank you,
Frederick
Express yourself with free Messenger emoticons. Get them today!http:
> —
> NTDEV is sponsored by OSR
>
> For our schedule of WDF, WDM, debugging and other seminars visit:
> http://www.osr.com/seminars
>
> To unsubscribe, visit the List Server section of OSR Online at
> http://www.osronline.com/page.cfm?name=ListServer
>
–
Mark Roddy</http:>
Hello,
Thank you for the reply, I was doudting a little bit my intuation.
I have talked to the card developpers and they state that the pci card is using Pci Compiler v3.0.0 (from Altera) and use Master/Target Megacore functionnality.
Looking on the net/ Altera IP core documentation, I cannot find any information on the link between Master/Target and DMA. Is there one?
Date: Thu, 27 Mar 2008 10:49:20 -0400From: xxxxx@hollistech.comTo: xxxxx@lists.osr.comSubject: Re: [ntdev] Basic question about DMA and PCI board
The system DMA controller is strictly for legacy devices and cannot be used for normal PCI devices that cannot perform bus master memory accesses.
You do not need a ‘dma controller’ on your PCI device, you need logic that can perform bus master operations to read non-local memory over the PCI bus. If your PCI device cannot do this then your only alternative is what you have already implemented: using the HAL READ_* WRITE_* methods to access your device memory from the system.
On Thu, Mar 27, 2008 at 10:02 AM, Frederick Guillemot wrote:
Hello, I have been asked to look into implementing DMA for a PCI board (with Altera Cyclone core). Currently the board doesn’t have a DMA controller and there is no plan to implement one if not necessary. The main reason is to speed access to a FIFO of 256 kbytes. Currently the board doesn’t provide a DMA descriptor with the IRP_START_DEVICE (obviously). To access the FIFO, I have to map a memory space that is recognized as a CmResourceMemory. I am using MapIoSpace on this 256 kbytes FIFO and doing read/write buffer access with WRITE_REGISTER_BUFFER…/READ_REGISTER_BUFFER… . First off, is it possible to implement DMA in my driver without the board having a DMA controller? If so, what are the steps to doing so (SG or Common Buffer…Master or Slave… etc). Second, is there any way to implement a driver DMA on a CmResourceMemory? In case it helps narrow, the driver needs to support 2000/XP/Vista/x86/x64 Thank you,Frederick
Express yourself with free Messenger emoticons. Get them today!— NTDEV is sponsored by OSR For our schedule of WDF, WDM, debugging and other seminars visit: http://www.osr.com/seminars To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer – Mark Roddy — NTDEV is sponsored by OSR For our schedule of WDF, WDM, debugging and other seminars visit: http://www.osr.com/seminars To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer
_________________________________________________________________
Enter the Hunt & you could win a 2008 Eclipse Spyder! Click here to enter!
http://g.msn.ca/ca55/213
>Currently the board doesn’t provide a DMA descriptor with the
IRP_START_DEVICE (obviously).
No PCI boards do this. This is ISA-only.
First off, is it possible to implement DMA in my driver without the board
having a
DMA controller?
No.
–
Maxim Shatskih, Windows DDK MVP
StorageCraft Corporation
xxxxx@storagecraft.com
http://www.storagecraft.com