SceKernelDmacMgr: Difference between revisions

From Vita Development Wiki
Jump to navigation Jump to search
(Swapped Module <-> Library, see revision 1.1 under "Revision History" of "Vita SDK specifications" (https://wiki.henkaku.xyz/vita/File:Vita_SDK_specifications.pdf))
No edit summary
 
(60 intermediate revisions by 4 users not shown)
Line 1: Line 1:
Direct memory access control Manager
== Module ==
== Module ==


=== Known NIDs ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! Name !! World !! Privilege !! NID
! Version !! World !! Privilege
|-
|-
| 1.69 || SceKernelDmacMgr || Non-secure || Kernel || 0x67E3D2D2
| 1.69-3.60 || Non-secure || Kernel
|}
|}


Line 17: Line 18:
! Version !! Name !! World !! Visibility !! NID
! Version !! Name !! World !! Visibility !! NID
|-
|-
| 1.69 || [[SceKernelDmacMgr#SceDmacmgrForDriver|SceDmacmgrForDriver]] || Non-secure || Kernel || 0xEB4E3738
| 0.990-3.60 || [[SceKernelDmacMgr#SceDmacmgrForDriver|SceDmacmgrForDriver]] || Non-secure || Kernel || 0xEB4E3738
|-
| 0.990 || [[SceKernelDmacMgr#SceDmacmgr|SceDmacmgr]] || Non-secure || User || not present
|-
| 3.60 || [[SceKernelDmacMgr#SceDmacmgr|SceDmacmgr]] || Non-secure || User || 0xA9E5B2F0
|}
 
=== Data segment layout ===
{| class="wikitable"
|-
! 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 ==
<source lang="C">
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;
</source>


== SceDmacmgrForDriver ==
== SceDmacmgrForDriver ==


=== sceKernelDmaOpSetupChainForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0x167079FC
|}
<source lang="C">int sceKernelDmaOpSetupChainForDriver(uint32_t opid, void *pTag, int *a3, uint32_t flag);</source>
=== sceKernelDmaOpQuitForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0x03052D0D
|}
<source lang="C">int sceKernelDmaOpQuitForDriver(int opid);</source>
=== sceKernelDmaOpAllocForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0x7CD5088A
|}
Usages:
{| class="wikitable"
|-
! 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;
<source lang="C">SceDmaOpId sceKernelDmaOpAllocForDriver(const char *name);</source>
=== sceKernelDmaOpAssignForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0xFCE4171A
|}
Executes [[DMAC|DMAC5 command]].
<source lang="C">int sceKernelDmaOpAssignForDriver(SceDmaOpId opid, SceUInt32 unk1, SceUInt32 unk2);</source>
=== sceKernelDmaOpFreeForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0xADFF1186
|}
<source lang="C">int sceKernelDmaOpFreeForDriver(int opid);</source>
=== sceKernelDmaOpConcatenateForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0xA4454DEA
|}
=== sceKernelDmaOpEnQueueForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0x543F54CF
|}
<source lang="C">int sceKernelDmaOpEnQueueForDriver(int opid);</source>
=== sceKernelDmaOpDeQueueForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0x7433F70F
|}
=== sceKernelDmaOpSetCallbackForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0xCF627CFD
|}
<source lang="C">int sceKernelDmaOpSetCallbackForDriver(int opid, int a2, int a3);</source>
=== sceKernelDmaOpSyncForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0x397A917C
|}
<source lang="C">int sceKernelDmaOpSyncForDriver(int opid, SceUInt32 op_sync_mode, SceUInt32 timeout, SceInt32 *result);</source>
=== sceKernelDmacMemcpyForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0x00896B11
|}
Synchronous <code>memcpy</code>, wrapper around [[SceKernelDmacMgr#sceKernelDmacMemcpyAsyncForDriver]].
<source lang="c">SceInt32 sceKernelDmacMemcpyForDriver(void *dst, const void *src, SceSize size);</source>
=== sceKernelDmacMemsetForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0x4BAC049B
|}
=== sceKernelDmaOpSetupDirectForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0x01A599E0
|}
<source lang="C">
typedef struct SceDmaOpKey {
char data[0x4C];
} SceDmaOpKey;
int sceKernelDmaOpSetupDirectForDriver(int opid, SceDmaOpKey *a2, int a3);</source>
=== sceKernelDmacMemcpyAsyncForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990 || 0x6E81B8BF
|-
| 3.60 || not present
|}
=== sceKernelDmacMemsetAsyncForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990 || 0x6FD7F708
|-
| 3.60 || not present
|}
=== SceDmacmgrForDriver_BCBB5E85 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0xBCBB5E85
|}
A big function. TO RE.
=== SceDmacmgrForDriver_1EDD385C ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.940 || 0x1EDD385C
|}
Returns SCE_KERNEL_ERROR_NOT_IMPLEMENTED.


=== SceDmacmgrForDriver_DCBA0B59 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.940 || 0xDCBA0B59
|}


Returns SCE_KERNEL_ERROR_NOT_IMPLEMENTED.


=== SceDmacmgrForDriver_893FCB80 ===
{| class="wikitable"
|-
! 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 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x9B2FF739
|}
=== sceDmacMemset ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xA4C33F11
|}
[[Category:ARM]]
[[Category:Kernel]]
[[Category:Modules]]
[[Category:Modules]]
[[Category:Kernel]]
[[Category:Library]]

Latest revision as of 08:18, 15 August 2023

Direct memory access control Manager

Module

Version World Privilege
1.69-3.60 Non-secure Kernel

Libraries

Known NIDs

Version Name World Visibility NID
0.990-3.60 SceDmacmgrForDriver Non-secure Kernel 0xEB4E3738
0.990 SceDmacmgr Non-secure User not present
3.60 SceDmacmgr Non-secure User 0xA9E5B2F0

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, const 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_1EDD385C

Version NID
0.940 0x1EDD385C

Returns SCE_KERNEL_ERROR_NOT_IMPLEMENTED.

SceDmacmgrForDriver_DCBA0B59

Version NID
0.940 0xDCBA0B59

Returns SCE_KERNEL_ERROR_NOT_IMPLEMENTED.

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