Fred Black wrote:

> Hello everyone,
> 
> I've been reading about how drm works and going through some code. To  
> understand the whole thing I'm trying a couple of stuff. But I now 
> need some  help.
> 
> I'm trying to find a way for sending some intructions through bus 
> mastering.  I understand that with drm that should be possible.
> 
> Here's what I understand so far.
> 
> When the X server starts with dri enabled 128 65k DMA buffers are 
> created.  So I understand that after these buffers are mapped I could 
> reserve one of  them for my own personnal use by using drmDMA(); This 
> returns a index that I  could refer to in the future.
> 
> After I reserve a buffer. I'm able to have the address of where this  
> particular buffer is situated. So what I do now is to write the 
> instructions  in that buffer in a format that the card will 
> understand. Which is that the  first DWORD is 4 index of registers and 
> the next 4 dwords are the data that  we want to put in them.
> 
> 
> Right now all I'm doing is writing to DMA_PAD. But the questions is 
> that ,  after I do this how to make drm read the intructions. I was 
> thinking that I  could use  drmMGAFlushVertexBuffer() but it locks up 
> my system. Is it  necessary to use some sort of locking mecanish. Or 
> maybe I'm supposed to do  something else after I do this intruction.
> 
> By the way, I'm writing these intructions in SetupForSolidFills  in  
> mga_storm.c.
> 
> What do you guys think? Am I going to right route? Is there another 
> function  I should be using in order to make the card read the 
> intructions? All I want  is that one 2d operation is done using bus 
> mastering. 

Doing bus mastering through a secondary buffer is probably going to have 
latency issues.  What you really want is bus mastering in XFree86 to use 
the primary dma buffer.  With a little bit of work you can probably get 
XFree86 and the kernel to both write to the primary dma stream.

That being said, you can't use the kernel mechanisms to send secondary 
dma buffers to the card for security reasons.  Currently you can only 
send straight vertex data through the kernel interfaces.  That being 
said, if you wanted to add a root only ioctl to allow you to send 
commands directly to the card there is no one stopping you.  
Unfortunately we can't add a command that is not root only to do the 
same thing for security reasons.  Since XFree86 is root when its 
configuring direct rendering this is not really an issue for you.

-Jeff


_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to