The work on the DRM PCI API has been really slow (working on the DRM API is not the most exciting experiences to me...) but it has enough for finishing Mach64.
If you recall, for Mach64 we need a set of DMA buffers which aren't mapped to the clients to assure that they aren't tampered before reaching the hardware - the private buffers. So what I'll do is setup a circular array for these private buffers. There is no need for a free list since these buffers are always used in [circular] order. (With the public buffers that doesn't happen because there's no guarantee that the order the buffers are handed out to the clients is the same that the client dispatches them.) This make things much simpler to get a free buffer - just compare a stamp (which is the value of the ring pointer after processing the buffer) with the current value of the ring pointer for any buffer we want. The actual DMA buffers for the entries in the circular array are either from the new DRM PCI API (the pci_pool_* functions) or from a contiguous piece of AGP memory. In case you're wondering what's missing in the DRM PCI to be more general is: - ioctl's for exposing the pci_pool_* to userspace - support to add maps to these buffers. (None of this is need for Mach64 as outlined above) - expose more of the AGP API internally (This would be nice, but is more work than I'd like to get into right now). Leif, so far I haven't done nothing in mach64-0-0-5-branch (the DRM PCI API stuff was done on a local checkout of the trunk), so in your opinion should I make these changes on the mach64-0-0-5-branch or on the mach64-0-0-6-branch? Jos� Fonseca
drm_pci.diff.gz
Description: Binary data
drm_pci.h.gz
Description: Binary data
