sgdk
dma.h
Go to the documentation of this file.
00001 
00010 #include "config.h"
00011 #include "types.h"
00012 
00013 #ifndef _DMA_H_
00014 #define _DMA_H_
00015 
00016 
00021 #define DMA_VRAM    0
00022 
00026 #define DMA_CRAM    1
00027 
00031 #define DMA_VSRAM   2
00032 
00033 #define DMA_QUEUE_SIZE_DEFAULT      64
00034 #define DMA_QUEUE_SIZE_MIN          20
00035 
00036 #define DMA_TRANSFER_CAPACITY_NTSC  7200
00037 #define DMA_TRANSFER_CAPACITY_PAL   15000
00038 
00039 #define DMA_BUFFER_SIZE_NTSC        (8 * 1024)
00040 #define DMA_BUFFER_SIZE_PAL         (14 * 1024)
00041 #define DMA_BUFFER_SIZE_MIN         (2 * 1024)
00042 
00043 
00048 typedef enum
00049 {
00050     CPU = 0,            
00051     DMA = 1,            
00052     DMA_QUEUE = 2,      
00053     DMA_QUEUE_COPY = 3  
00054 } TransferMethod;
00055 
00056 
00061 typedef struct
00062 {
00063     u32 regLen;         // ((len | (len << 8)) & 0xFF00FF) | 0x94009300;
00064     u32 regAddrMStep;   // (((addr << 7) & 0xFF0000) | 0x96008F00) + step;
00065     u32 regAddrHAddrL;  // ((addr >> 1) & 0x7F00FF) | 0x97009500;
00066     u32 regCtrlWrite;   // GFX_DMA_VRAMCOPY_ADDR(to)
00067 } DMAOpInfo;
00068 
00069 
00074 extern DMAOpInfo *dmaQueues;
00075 
00076 
00086 void DMA_init();
00106 void DMA_initEx(u16 size, u16 capacity, u16 bufferSize);
00107 
00116 u16 DMA_getAutoFlush();
00125 void DMA_setAutoFlush(bool value);
00132 u16 DMA_getMaxQueueSize();
00144 void DMA_setMaxQueueSize(u16 value);
00152 void DMA_setMaxQueueSizeToDefault();
00160 u16 DMA_getMaxTransferSize();
00173 void DMA_setMaxTransferSize(u16 value);
00180 void DMA_setMaxTransferSizeToDefault();
00188 u16 DMA_getBufferSize();
00202 void DMA_setBufferSize(u16 value);
00209 void DMA_setBufferSizeToDefault();
00216 u16 DMA_getIgnoreOverCapacity();
00227 void DMA_setIgnoreOverCapacity(bool value);
00228 
00234 void DMA_clearQueue();
00247 void DMA_flushQueue();
00248 
00253 u16 DMA_getQueueSize();
00260 u32 DMA_getQueueTransferSize();
00261 
00275 void* DMA_allocateTemp(u16 len);
00285 void DMA_releaseTemp(u16 len);
00286 
00318 bool DMA_transfer(TransferMethod tm, u8 location, void* from, u16 to, u16 len, u16 step);
00319 
00346 void* DMA_allocateAndQueueDma(u8 location, u16 to, u16 len, u16 step);
00372 bool DMA_copyAndQueueDma(u8 location, void* from, u16 to, u16 len, u16 step);
00398 bool DMA_queueDma(u8 location, void* from, u16 to, u16 len, u16 step);
00421 void DMA_doDma(u8 location, void* from, u16 to, u16 len, s16 step);
00443 void DMA_doCPUCopy(u8 location, void* from, u16 to, u16 len, s16 step);
00459 void DMA_doCPUCopyDirect(u32 cmd, void* from, u16 len, s16 step);
00460 
00476 void DMA_doVRamFill(u16 to, u16 len, u8 value, s16 step);
00491 void DMA_doVRamCopy(u16 from, u16 to, u16 len, s16 step);
00492 
00497 void DMA_waitCompletion();
00498 
00499 
00500 #endif // _DMA_H_
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines