From: Jeff H. <jha...@va...> - 2001-04-25 19:38:17
|
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 |