hmmm ... from reverse-engineering of linux "ide-dma.c", it appears that the 'descriptor table' is made of 2x32bits entries. The first dword in each entry is the dma address of the chunk and the second dword is actually used on 16bits only and is the size (highest bit of the size is the termination bit). Note that chunks may not cross a 64Kb barrier (as far as i know) and may not be larger than 64KB either. A 0x0000 size is usually representing a full 64KB size, but some controllers misinterprete this as a 0 size, so linux split all 64K chunks in 2 32K chunks on the fly.
-- update --
intel Chipset datasheet confirms the Physical Region Descriptor Format.
I have trouble finding out how one actually access the PCI configuration space. i know I/O ports 0xCF0..0xCFF are involved, but i don't know neither how nor which one exactly ... What is usually presented as memory-mapping configuration space looks like not being mapped at all ??...
Tim or anybody else that has worked on PCI already, if you have some docs reference ...
-- update --
this article seems to hold good info about how to access the PCI configuration space.