Files
86Box/doc/nvidia_notes/NV3 DMA Engine.txt

55 lines
1.4 KiB
Plaintext

NV3 DMA Engine
(DirectDraw Driver)
Initially set CACHES, CACHE1_PULL0, CACHE1_PULL1, CACHE1_DMA0 to 1
Same for other areas
CACHE1_PUSH1 contains CHID
If it's different:
If RmFifoFlushContext failed: Do nothing
Set PULL0, PUSH0, Caches to 1, return false
If it's not:
DMA TLB PTE seems to be 1 for direct programming, maybe RM does it differently
Tag=FFFFFFFF
CACHE1_DMA1 - Number of bytes to send
CACHE1_DMA2 - Get offset
CACHE1_DMA3 - Bus address space (Area BAR0 mapped to? Or bar1?)
TO START:
To set up DMA for for Cache1 Puller: CACHE1_PULL0 -> 1, changes to 0 when done
To set up DMA Cache1 Push: CACHE1_PUsh0 -> 1, changes to 0 when done
Set CACHES to 1
GO: Set DMA0 to 1
***** Implementation in Driver ******
You can dma to "localvidmem:", "sysvidmem:" or "sysmem:", this is represented by a driver
CAUSE OF FAILURE:
the pfifo is never free because it never processes the submitted objects
which means that the FIFO is never free
which means that the drivers spin forever waiting for the fifo to be free
DMA_OBJECT STRUCTURE IN RESOURCE MANAGER:
0x328: Valid
0x34c: base address?
0x374: actually do the transfer
some objects don't actually need to do dma, for example, video patchcord, it just creates a structure in the driver, and rop just allocate ssome memory to put the data for the patchcord/rop thing
dma start=nv3_mini dc67
call of mthdCreate for ***DRIVER*** CLASS ID: a7b44, check ptr