#include <revolution/os.h>
void LCLoadBlocks(void* destTag, void* srcAddr, u32 numBlocks);
|
Start address for the locked cache region of the copy destination. Must be 32 byte-aligned. |
|
Start address for data in main memory to copy to destAddr. Must be 32 byte-aligned. |
|
Transfer size (number of cache blocks). Must be a value from 0 to 127. If zero is specified, the transfer size is 128 blocks (4 KB). |
None.
Enqueues a single DMA transfer to load data into the locked cache at destTag from main memory at srcAddr. This function is more efficient than calling the LCLoadData function, but has a maximum transfer limit of 128 cache blocks (4 KB) and performs no error checking. Addresses are assumed to be 32-byte aligned, and numBlocks is assumed to be a value from 0 to 127. Note that a value of zero for numBlocks implies a transfer size of 128 blocks. The range of valid transfer destination addresses is the 16 KB region starting from the value returned by the LCGetBase function.
The only ways to determine if the transfers are complete are to poll the length of the DMA queue with the LCQueueLength function or to wait until the queue length reaches a certain value with the LCQueueWait function. See the LCStoreBlocks function example in the Function Reference .
A maximum of 15 outstanding DMA transfers in the DMA queue is allowed. If the queue overflows, a machine check exception occurs.
The locked cache must be enabled, otherwise a machine check exception will occur during the DMA.
If DMA finds destination addresses in the normal cache, a machine check exception will occur.
Cache Functions, LCEnable, LCStoreBlocks, LCLoadData, LCQueueLength, LCQueueWait
03/01/2006 Initial version.