Jose, It's taking me a little longer than expected to finish the changes I mentioned. I'm trying to set this up so that it will be possible to test emitting buffers to the ring as they come in, but keep the original code in place, while sharing as much code as possible. I'm borrowing some code from the r128 driver, and alomst have this working, but I've got bugs and regressions to fix still. I saw your commit and wanted to get this to you so you can see what I had in mind before you get too far along. Let me know what you think.
BTW, regarding your last change: you're right that the register resets for BUS_CNTL and SRC_CNTL are _not_ required to stop the DMA transfer. The card won't act on the changes made to these registers, but the values are changed. It's more of a security thing to leave things in a sane state between dispatches. Anyway, if you look at my diff, I have a separate macro for emitting buffers to the ring -- I'd like to keep the existing queue and dispatch functions around (plus the cosmetic changes) until we see how the new approach goes. That way we'll have a basis for comparison and a working fallback. I know the code gets a bit ugly with all the preprocessor switches, but we can remove those and clean up down the road when we find the best option. The biggest problem with emitting to the ring right away is handling restarting DMA when the card goes idle. You don't want to do it right away or it will go idle again. You need to allow a resonable amount of buffers to queue up on the card before restarting it. -- Leif Delgass http://www.retinalburn.net
mach64-20020529.diff.gz
Description: GNU Zip compressed data