PCI DMA Driver...Why does I/O Manager limit transfer sizes

Discussion in 'Windows Vista Drivers' started by Brendan, Jan 4, 2005.

  1. Brendan

    Brendan Guest

    I am working on a PCI based DMA driver which is working. However the
    driver/user app. are only capable of transfering 63Mb at a time. When
    ReadFile() is called with a byte_count larger than about 63M, ReadFile()
    returns (Insufficient Resources Exist To Complete The Requested Service).
    Being new to kernel programming I am confused as to what the problem is. I
    do know the following:

    1) The system has more than enough physical memory.
    2) The driver never recieves an IRP (with transfer sizes > ~63Mb)
    3) Driver uses DO_DIRECT_IO (...DMA with MDL)

    Could it be that the I/O Manager won't lock that much memory?

    Any thoughts would be greatly appreciated...even if they are regarding a
    work around.

    Brendan, Jan 4, 2005
    1. Advertisements

  2. A single MDL and thus a single IRP cannot describe more then 64MB.

    MDL's Size field is 16bit, so the MDL size is <= 64K which is 16K physical
    pages which is 64MB.

    I expect the limit to be 32MB on IA64 or even on PAE.
    Maxim S. Shatskih, Jan 5, 2005
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.