In memory of Ben “bushing” Byer, who passed away on Monday, February 8th, 2016.

Difference between revisions of "Dmae.rpl"

From WiiUBrew
Jump to navigation Jump to search
m (Grammar things)
(change functions that return a uint64_t to return a uint64_t)
Line 3: Line 3:
 
==Functions==
 
==Functions==
  
Every non-bool function returns a uint64_t timestamp that can be used with DMAEWaitDone
+
All uint64_t values returned from functions are timestamps that can be used with DMAEWaitDone.
  
===Wait===
+
===Timing===
 
{| class="wikitable"
 
{| class="wikitable"
 
!Name
 
!Name
Line 22: Line 22:
 
|-
 
|-
 
|DMAEInitSemaphore
 
|DMAEInitSemaphore
|<code>void DMAEInitSemaphore(uint64_t *semaphoreAddr, uint64_t semaphoreCount)</code>
+
|<code>uint64_t DMAEInitSemaphore(uint64_t *semaphoreAddr, uint64_t semaphoreCount)</code>
 
|Initialize a Semaphore to synchronize DMA Engine to the GPU (GPU7)
 
|Initialize a Semaphore to synchronize DMA Engine to the GPU (GPU7)
 
|-
 
|-
 
|DMAESemaphore
 
|DMAESemaphore
|<code>void DMAESemaphore(u64 *semaphoreAddr, DMAESemaphoreAction semaphoreAction)</code>
+
|<code>uint64_t DMAESemaphore(u64 *semaphoreAddr, DMAESemaphoreAction semaphoreAction)</code>
 
|Create a Semaphore at the specified address
 
|Create a Semaphore at the specified address
 
|}
 
|}
Line 36: Line 36:
 
|-
 
|-
 
|DMAECopyMem
 
|DMAECopyMem
|<code>void DMAECopyMem(void *dst, const void *src, uint32_t size, DMAEEndian endian)</code>
+
|<code>uint64_t DMAECopyMem(void *dst, const void *src, uint32_t size, DMAEEndian endian)</code>
 
|Copy src to dst (high-level memcpy)
 
|Copy src to dst (high-level memcpy)
 
|-
 
|-
Line 44: Line 44:
 
|-
 
|-
 
|DMAEFillMem
 
|DMAEFillMem
|<code>void DMAEFillMem(void *dst, uint32_t fillData, uint32_t size)</code>
+
|<code>uint64_t DMAEFillMem(void *dst, uint32_t fillData, uint32_t size)</code>
 
|Fill a virtual memory range with "fillData" (also has DMAEFillMemWait version)
 
|Fill a virtual memory range with "fillData" (also has DMAEFillMemWait version)
 
|-
 
|-
 
|DMAEFillMemPhys
 
|DMAEFillMemPhys
|<code>void DMAEFillMemPhys(uint32_t dst_pa, uint32_t fillData, uint32_t size</code>
+
|<code>uint64_t DMAEFillMemPhys(uint32_t dst_pa, uint32_t fillData, uint32_t size</code>
 
|Fill a physical memory range with "fillData" (also has DMAEFillMemPhysWait version)
 
|Fill a physical memory range with "fillData" (also has DMAEFillMemPhysWait version)
 
|}
 
|}

Revision as of 08:13, 18 August 2016

dmae.rpl is the system library that provides DMA (Direct Memory Access) functions.

Functions

All uint64_t values returned from functions are timestamps that can be used with DMAEWaitDone.

Timing

Name Prototype Description
DMAEWaitDone bool DMAEWaitDone(uint64_t ts); Return true if all goes normally, return false if a time-out occurred. Usage: DMAEWaitDone(DMAECopyMem(mem_ptr, 0, 0x100, DMAE_ENDIAN_8IN32));

Semaphore

Name Prototype Description
DMAEInitSemaphore uint64_t DMAEInitSemaphore(uint64_t *semaphoreAddr, uint64_t semaphoreCount) Initialize a Semaphore to synchronize DMA Engine to the GPU (GPU7)
DMAESemaphore uint64_t DMAESemaphore(u64 *semaphoreAddr, DMAESemaphoreAction semaphoreAction) Create a Semaphore at the specified address

Memory

Name Prototype Description
DMAECopyMem uint64_t DMAECopyMem(void *dst, const void *src, uint32_t size, DMAEEndian endian) Copy src to dst (high-level memcpy)
DMAECopyMemWait bool DMAECopyMemWait(void *dst, const void *src, uint32_t size, DMAEEndian endian) Returns true when all goes normally, return false if a time-out occurred
DMAEFillMem uint64_t DMAEFillMem(void *dst, uint32_t fillData, uint32_t size) Fill a virtual memory range with "fillData" (also has DMAEFillMemWait version)
DMAEFillMemPhys uint64_t DMAEFillMemPhys(uint32_t dst_pa, uint32_t fillData, uint32_t size Fill a physical memory range with "fillData" (also has DMAEFillMemPhysWait version)

Enumeration

Semaphore

Name Prototype
DMAESemaphoreAction
typedef enum _DMAESemaphoreAction {
    DMAE_SEMAPHORE_WAIT   = 0x00000000,   ///< Wait before processing next command
    DMAE_SEMAPHORE_SIGNAL = 0x00000001,   ///< Signal after all previous work is done
} DMAESemaphoreAction;

Endian

Name Prototype
DMAEEndian
typedef enum DMAEEndian {
    DMAE_ENDIAN_NONE  = 0x00000000,   ///< do-nothing
    DMAE_ENDIAN_8IN16 = 0x00000001,   ///< 8IN16 swapping mode. Endian swap in 16-bit int buffer. 
    DMAE_ENDIAN_8IN32 = 0x00000002,   ///< 8IN32 swapping mode. Endian swap in 32-bit int buffer. 
    DMAE_ENDIAN_8IN64 = 0x00000003,   ///< 8IN64 swapping mode. Endian swap in 64-bit int buffer. /// Directly from the SDK
} DMAEEndian;