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

Attachment: drm_pci.diff.gz
Description: Binary data

Attachment: drm_pci.h.gz
Description: Binary data

Reply via email to