Direct memory access control Manager
Module
Version |
World |
Privilege
|
1.69-3.60 |
Non-secure |
Kernel
|
Libraries
Known NIDs
Data segment layout
Address |
Size |
Description
|
0x0000 |
0x04 |
void* SceDmacmgrDmac0Reg membase
|
0x0004 |
0x04 |
void* SceDmacmgrDmac1Reg membase
|
0x0008 |
0x04 |
void* SceDmacmgrDmac2Reg membase
|
0x000C |
0x04 |
void* SceDmacmgrDmac3Reg membase
|
0x0010 |
0x04 |
void* SceDmacmgrDmac4Reg membase
|
0x0014 |
0x04 |
void* SceDmacmgrDmac5Reg membase
|
0x0018 |
0x04 |
void* SceDmacmgrDmac6Reg membase
|
0x001C |
0x1284 |
|
Types
typedef SceInt32 SceDmaOpId;
// Using internally
typedef struct SceDmaOpAlloc { // size is 0x60 on FW 0.990
uint unk_0;
uint unk_4;
uint magic; // 0x81005001
SceUID evfId;
uint unk_10;
uint16_t unk_14; // 1
uint16_t unk_16;
uint maybe_callback_1;
uint stat;
char unk_20[0x14];
int curchain;
uint unk_38; // 0
uint unk_3C;
const char opname[0x20];
} SceDmaOpAlloc;
typedef struct SceKernelDmaOp { // Size is 0x40-bytes on 3.60
int data_0x00;
int data_0x04;
int data_0x08;
int data_0x0C;
void *data_0x10;
int data_0x14;
int data_0x18;
int data_0x1C;
int data_0x20;
int data_0x24;
void *data_0x28;
int cpu_intr;
uintptr_t data_0x30;
SceUID evfid;
SceUInt16 data_0x38;
SceUInt16 data_0x3A;
char *name;
} SceKernelDmaOp;
SceDmacmgrForDriver
sceKernelDmaOpSetupChainForDriver
Version |
NID
|
0.990-3.60 |
0x167079FC
|
int sceKernelDmaOpSetupChainForDriver(uint32_t opid, void *pTag, int *a3, uint32_t flag);
sceKernelDmaOpQuitForDriver
Version |
NID
|
0.990-3.60 |
0x03052D0D
|
int sceKernelDmaOpQuitForDriver(int opid);
sceKernelDmaOpAllocForDriver
Version |
NID
|
0.990-3.60 |
0x7CD5088A
|
Usages:
Module |
Name
|
SceSblSsMgr |
SceSblDmac5Common, Dmac5Test_Direct
|
SceDisplay |
SceDisplay
|
SceAudio |
SceSrcMix%d%d
|
SceCodecEngineWrapper |
SceVeneziaDmacMemcpy%02u, SceHwd0DmacMemcpy%02u
|
Allocate 0x60 bytes of heap.
Return opid = (uint)dma_op_heap_addr >> 1 | 1;
SceDmaOpId sceKernelDmaOpAllocForDriver(const char *name);
sceKernelDmaOpAssignForDriver
Version |
NID
|
0.990-3.60 |
0xFCE4171A
|
Executes Dmac5 command.
int sceKernelDmaOpAssignForDriver(SceDmaOpId opid, SceUInt32 unk1, SceUInt32 unk2);
sceKernelDmaOpFreeForDriver
Version |
NID
|
0.990-3.60 |
0xADFF1186
|
int sceKernelDmaOpFreeForDriver(int opid);
sceKernelDmaOpConcatenateForDriver
Version |
NID
|
0.990-3.60 |
0xA4454DEA
|
sceKernelDmaOpEnQueueForDriver
Version |
NID
|
0.990-3.60 |
0x543F54CF
|
int sceKernelDmaOpEnQueueForDriver(int opid);
sceKernelDmaOpDeQueueForDriver
Version |
NID
|
0.990-3.60 |
0x7433F70F
|
sceKernelDmaOpSetCallbackForDriver
Version |
NID
|
0.990-3.60 |
0xCF627CFD
|
int sceKernelDmaOpSetCallbackForDriver(int opid, int a2, int a3);
sceKernelDmaOpSyncForDriver
Version |
NID
|
0.990-3.60 |
0x397A917C
|
int sceKernelDmaOpSyncForDriver(int opid, SceUInt32 op_sync_mode, SceUInt32 timeout, SceInt32 *result);
sceKernelDmacMemcpyForDriver
Version |
NID
|
0.990-3.60 |
0x00896B11
|
Synchronous memcpy
, wrapper around SceKernelDmacMgr#sceKernelDmacMemcpyAsyncForDriver.
SceInt32 sceKernelDmacMemcpyForDriver(void* dst, void* src, SceSize size);
sceKernelDmacMemsetForDriver
Version |
NID
|
0.990-3.60 |
0x4BAC049B
|
sceKernelDmaOpSetupDirectForDriver
Version |
NID
|
0.990-3.60 |
0x01A599E0
|
typedef struct SceDmaOpKey {
char data[0x4C];
} SceDmaOpKey;
int sceKernelDmaOpSetupDirectForDriver(int opid, SceDmaOpKey *a2, int a3);
sceKernelDmacMemcpyAsyncForDriver
Version |
NID
|
0.990 |
0x6E81B8BF
|
3.60 |
not present
|
sceKernelDmacMemsetAsyncForDriver
Version |
NID
|
0.990 |
0x6FD7F708
|
3.60 |
not present
|
SceDmacmgrForDriver_BCBB5E85
Version |
NID
|
0.990-3.60 |
0xBCBB5E85
|
A big function. TO RE.
SceDmacmgrForDriver_893FCB80
Version |
NID
|
0.990-3.60 |
0x893FCB80
|
On FW 0.990 simply returns SCE_KERNEL_ERROR_NOT_IMPLEMENTED.
SceDmacmgr
This library doesn't exist on FW 0.990.
sceDmacMemcpy
Version |
NID
|
3.60 |
0x9B2FF739
|
sceDmacMemset
Version |
NID
|
3.60 |
0xA4C33F11
|