Jeff Hartmann wrote:

> 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


Hi guys,

I was interested by your conversation about bus mastering, but I don't 
understand what are the security issues about sending secondary buffers 
to the kernel. Isn't the way that the GL driver is doing? As I can 
understand, the vertex data is added to a secondary buffer, which is 
sent to the kernel via mgaFlushVertexBuffer, and then added in the 
primary buffer to be read by the vertex DMA channel. Why is it not 
possible to do the same thing in XFree86 because it runs as root?

-Karl

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


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

Reply via email to