summaryrefslogtreecommitdiff
path: root/arm9/asm/SOC_socl_create.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm/SOC_socl_create.s')
-rw-r--r--arm9/asm/SOC_socl_create.s491
1 files changed, 491 insertions, 0 deletions
diff --git a/arm9/asm/SOC_socl_create.s b/arm9/asm/SOC_socl_create.s
new file mode 100644
index 00000000..8f8f42b2
--- /dev/null
+++ b/arm9/asm/SOC_socl_create.s
@@ -0,0 +1,491 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start SOCLi_InitCommandPipe
+SOCLi_InitCommandPipe: ; 0x02097C14
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ mov r5, r2
+ mov r7, r0
+ mov r0, r5
+ mov r6, r1
+ bl SOCLi_GetSizeCommandPipe
+ add r4, r7, r0
+ ldrb r2, [r5, #0x3]
+ mov r0, r6
+ mov r1, r7
+ bl OS_InitMessageQueue
+ add r0, r6, #0xe0
+ bl OS_InitMutex
+ ldrh r2, [r5, #0x0]
+ add r0, r6, #0x20
+ ldr r1, _02097C88 ; =SOCLi_CommandPacketHandler
+ str r2, [sp, #0x0]
+ ldrb r12, [r5, #0x2]
+ mov r2, r6
+ mov r3, r4
+ str r12, [sp, #0x4]
+ bl OS_CreateThread
+ add r0, r6, #0x20
+ bl OS_WakeupThreadDirect
+ mov r0, r4
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_02097C88: .word SOCLi_CommandPacketHandler
+
+ arm_func_start SOCLi_InitSocketBuffer
+SOCLi_InitSocketBuffer: ; 0x02097C8C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ cmp r2, #0x0
+ moveq r0, #0x0
+ str r0, [r1, #0x4]
+ mov r0, r2
+ str r2, [r1, #0x0]
+ bl SOCLi_RoundUp4
+ add r0, r4, r0
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start SOCLi_InitSocket
+SOCLi_InitSocket: ; 0x02097CB8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r1
+ ldrsb r1, [r6, #0x0]
+ mov r7, r0
+ add r4, r7, #0x80
+ strb r1, [r7, #0x73]
+ ldrsb r0, [r6, #0x1]
+ strb r0, [r7, #0x72]
+ ldrh r0, [r6, #0x2]
+ cmp r0, #0x0
+ beq _02097D40
+ str r4, [r7, #0x64]
+ ldrh r2, [r6, #0x4]
+ mov r1, r4
+ add r0, r4, #0x114
+ strh r2, [r4, #0xfc]
+ add r2, r6, #0x10
+ mov r5, r4
+ bl SOCLi_InitCommandPipe
+ ldrh r2, [r6, #0x2]
+ add r1, r7, #0x3c
+ bl SOCLi_InitSocketBuffer
+ ldrh r2, [r6, #0x8]
+ add r1, r7, #0x50
+ bl SOCLi_InitSocketBuffer
+ ldrh r3, [r6, #0xe]
+ add r1, r5, #0x100
+ mov r2, #0x0
+ strh r3, [r1, #0xa]
+ str r2, [r5, #0x110]
+ ldr r1, [r5, #0x110]
+ mov r4, r0
+ str r1, [r5, #0x10c]
+_02097D40:
+ ldrh r0, [r6, #0x6]
+ cmp r0, #0x0
+ ldreq r0, _02097DC0 ; =SOCLiUDPSendSocket
+ ldreq r0, [r0, #0x0]
+ ldreq r0, [r0, #0x68]
+ streq r0, [r7, #0x68]
+ beq _02097DB0
+ str r4, [r7, #0x68]
+ mov r1, r4
+ str r7, [r4, #0x10c]
+ add r0, r4, #0x110
+ add r2, r6, #0x14
+ mov r5, r4
+ bl SOCLi_InitCommandPipe
+ ldrh r2, [r6, #0x6]
+ add r1, r7, #0x48
+ bl SOCLi_InitSocketBuffer
+ ldrh r2, [r6, #0xa]
+ add r1, r7, #0x58
+ bl SOCLi_InitSocketBuffer
+ ldrh r2, [r6, #0xc]
+ add r1, r4, #0xf8
+ bl SOCLi_InitSocketBuffer
+ mov r1, #0x0
+ str r1, [r5, #0x108]
+ ldr r1, [r5, #0x108]
+ mov r4, r0
+ str r1, [r5, #0x104]
+_02097DB0:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_02097DC0: .word SOCLiUDPSendSocket
+
+ arm_func_start SOCLi_GetSizeCommandPipe
+SOCLi_GetSizeCommandPipe: ; 0x02097DC4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldrb r0, [r5, #0x3]
+ mov r0, r0, lsl #0x2
+ bl SOCLi_RoundUp4
+ mov r4, r0
+ ldrh r0, [r5, #0x0]
+ bl SOCLi_RoundUp4
+ add r0, r4, r0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start SOCLi_GetSizeSocket
+SOCLi_GetSizeSocket: ; 0x02097DF8
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldrh r0, [r5, #0x2]
+ mov r4, #0x80
+ cmp r0, #0x0
+ beq _02097E38
+ add r4, r4, #0x114
+ bl SOCLi_RoundUp4
+ add r4, r4, r0
+ ldrh r0, [r5, #0x8]
+ bl SOCLi_RoundUp4
+ add r4, r4, r0
+ add r0, r5, #0x10
+ bl SOCLi_GetSizeCommandPipe
+ add r4, r4, r0
+_02097E38:
+ ldrh r0, [r5, #0x6]
+ cmp r0, #0x0
+ beq _02097E74
+ add r4, r4, #0x110
+ bl SOCLi_RoundUp4
+ add r4, r4, r0
+ ldrh r0, [r5, #0xa]
+ bl SOCLi_RoundUp4
+ add r4, r4, r0
+ ldrh r0, [r5, #0xc]
+ bl SOCLi_RoundUp4
+ add r4, r4, r0
+ add r0, r5, #0x14
+ bl SOCLi_GetSizeCommandPipe
+ add r4, r4, r0
+_02097E74:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start SOCLi_StartupSocket
+SOCLi_StartupSocket: ; 0x02097E84
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ bl SOCLi_GetSizeSocket
+ mov r4, r0
+ bl OS_DisableInterrupts
+ ldr r1, _02097EF4 ; =SOCLiConfigPtr
+ mov r5, r0
+ ldr r1, [r1, #0x0]
+ mov r0, r4
+ ldr r1, [r1, #0x18]
+ blx r1
+ movs r6, r0
+ beq _02097EDC
+ mov r2, r4
+ mov r1, #0x0
+ bl MI_CpuFill8
+ mov r0, r6
+ mov r1, r7
+ bl SOCLi_InitSocket
+ mov r0, r6
+ bl SOCLi_SocketRegister
+_02097EDC:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mov r0, r6
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_02097EF4: .word SOCLiConfigPtr
+
+ arm_func_start SOCLi_CreateSocketCallBack
+SOCLi_CreateSocketCallBack: ; 0x02097EF8
+ stmdb sp!, {r4,lr}
+ ldr r4, [r0, #0x4]
+ mov r0, r4
+ bl CPS_SocRegister
+ ldrsb r0, [r4, #0x73]
+ ldr r1, [r4, #0x68]
+ cmp r0, #0x4
+ addls pc, pc, r0, lsl #0x2
+ b _02097F58
+_02097F1C: ; jump table
+ b _02097F30 ; case 0
+ b _02097F40 ; case 1
+ b _02097F54 ; case 2
+ b _02097F58 ; case 3
+ b _02097F30 ; case 4
+_02097F30:
+ add r0, r1, #0x20
+ bl CPS_SocDup
+ bl CPS_SocUse
+ b _02097F58
+_02097F40:
+ bl CPS_SocUse
+ bl CPS_SocDatagramMode
+ ldr r0, _02097F6C ; =SOCLi_UdpRecvCallback
+ bl CPS_SetUdpCallback
+ b _02097F58
+_02097F54:
+ bl CPS_SocDatagramMode
+_02097F58:
+ mov r0, #0x1
+ strh r0, [r4, #0x70]
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02097F6C: .word SOCLi_UdpRecvCallback
+
+ arm_func_start SOCL_CreateSocket
+SOCL_CreateSocket: ; 0x02097F70
+ stmdb sp!, {r4,lr}
+ bl SOCLi_StartupSocket
+ movs r4, r0
+ mvneq r0, #0x30
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r0, _02097FB0 ; =SOCLi_CreateSocketCallBack
+ mov r1, r4
+ mov r2, #0x1
+ bl SOCLi_CreateCommandPacket
+ mov r1, r0
+ mov r0, r4
+ bl SOCLi_ExecCommandPacketInCtrlPipe
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02097FB0: .word SOCLi_CreateSocketCallBack
+
+ arm_func_start SOCLi_ListenAcceptCallBack
+SOCLi_ListenAcceptCallBack: ; 0x02097FB4
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r6, r0
+ ldr r4, [r6, #0x4]
+ ldr r5, [r4, #0x64]
+ add r0, r5, #0xe0
+ bl OS_LockMutex
+ mov r1, #0x0
+ ldrh r0, [r6, #0x10]
+ mov r2, r1
+ bl CPS_SocPingMode
+ bl CPS_TcpListen
+ mov r2, #0x0
+ add r0, sp, #0x0
+ add r1, sp, #0x4
+ str r2, [r5, #0xf8]
+ bl CPS_SocWho
+ ldrh r2, [sp, #0x0]
+ ldr r1, [r6, #0x14]
+ strh r2, [r1, #0x0]
+ ldr r1, [r6, #0x18]
+ str r0, [r1, #0x0]
+ ldrsh r1, [r4, #0x70]
+ add r0, r5, #0xe0
+ orr r1, r1, #0x4
+ strh r1, [r4, #0x70]
+ bl OS_UnlockMutex
+ mov r0, #0x0
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start SOCL_ListenAccept
+SOCL_ListenAccept:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl SOCL_SocketIsInvalid
+ cmp r0, #0x0
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ cmp r6, #0x0
+ mov r1, #0x0
+ beq _0209806C
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_0209806C:
+ cmp r1, #0x0
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x2
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ ldrsb r0, [r6, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _020980A8
+ cmp r0, #0x4
+ movne r1, #0x0
+_020980A8:
+ cmp r1, #0x0
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrsb r2, [r6, #0x72]
+ cmp r2, #0x1
+ mvnne r0, #0x5
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ ldrh r0, [r6, #0x74]
+ cmp r0, #0x0
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r0, _0209811C ; =SOCLi_ListenAcceptCallBack
+ mov r1, r6
+ bl SOCLi_CreateCommandPacket
+ mov r1, r0
+ ldrh r2, [r6, #0x74]
+ mov r0, r6
+ strh r2, [r1, #0x10]
+ str r5, [r1, #0x14]
+ str r4, [r1, #0x18]
+ ldrsh r2, [r6, #0x70]
+ orr r2, r2, #0x2
+ strh r2, [r6, #0x70]
+ bl SOCLi_ExecCommandPacketInRecvPipe
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209811C: .word SOCLi_ListenAcceptCallBack
+
+ arm_func_start SOCL_Accept
+SOCL_Accept:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl SOCL_SocketIsInvalid
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ cmp r6, #0x0
+ mov r1, #0x0
+ beq _02098164
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_02098164:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x2
+ addne sp, sp, #0x4
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldrsb r0, [r6, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _020981A8
+ cmp r0, #0x4
+ movne r1, #0x0
+_020981A8:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldrsb r0, [r6, #0x72]
+ cmp r0, #0x1
+ addne sp, sp, #0x4
+ mvnne r0, #0x5
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldr r0, _02098228 ; =SOCLSocketParamTCP
+ bl SOCL_CreateSocket
+ movs r7, r0
+ addmi sp, sp, #0x4
+ ldmmiia sp!, {r4-r7,lr}
+ bxmi lr
+ ldrh r1, [r6, #0x74]
+ bl SOCL_Bind
+ cmp r0, #0x0
+ addlt sp, sp, #0x4
+ ldmltia sp!, {r4-r7,lr}
+ bxlt lr
+ mov r0, r7
+ mov r1, r5
+ mov r2, r4
+ bl SOCL_ListenAccept
+ cmp r0, #0x0
+ movge r0, r7
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_02098228: .word SOCLSocketParamTCP
+
+ arm_func_start SOCL_Listen
+SOCL_Listen: ; 0x0209822C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl SOCL_SocketIsInvalid
+ cmp r0, #0x0
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ cmp r4, #0x0
+ mov r1, #0x0
+ beq _02098260
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_02098260:
+ cmp r1, #0x0
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x2
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ ldrsb r0, [r4, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _0209829C
+ cmp r0, #0x4
+ movne r1, #0x0
+_0209829C:
+ cmp r1, #0x0
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldrsb r0, [r4, #0x72]
+ cmp r0, #0x1
+ moveq r0, #0x0
+ mvnne r0, #0x5
+ ldmia sp!, {r4,lr}
+ bx lr