summaryrefslogtreecommitdiff
path: root/arm9/asm/SOC_socl_startup.s
blob: 61147b6acf25d49f1e0dcddb1bc0e401244e3e71 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
	.include "asm/macros.inc"
	.include "global.inc"

	.section .bss

	.global SOCLiConfigPtr
SOCLiConfigPtr: ; 0x021C8CC0
	.space 0x4

	.global SOCLiYieldWait
SOCLiYieldWait: ; 0x021C8CC4
	.space 0x4

	.global SOCLiRequestedIP
SOCLiRequestedIP: ; 0x021C8CC8
	.space 0x4

	.global SOCLiDhcpState
SOCLiDhcpState: ; 0x021C8CCC
	.space 0x4

	.global SOCLiUDPSendSocket
SOCLiUDPSendSocket: ; 0x021C8CD0
	.space 0x4

	.global SOCLiCPSConfig
SOCLiCPSConfig: ; 0x021C8CD4
	.space 0x30

	.text

	arm_func_start SOCL_LinkIsOn
SOCL_LinkIsOn: ; 0x020975B4
	stmdb sp!, {lr}
	sub sp, sp, #0x4
	bl WCM_GetApMacAddress
	cmp r0, #0x0
	movne r0, #0x1
	moveq r0, #0x0
	add sp, sp, #0x4
	ldmia sp!, {lr}
	bx lr

	arm_func_start SOCLi_DhcpTimeout
SOCLi_DhcpTimeout: ; 0x020975D8
	ldr r0, _020975EC ; =SOCLiDhcpState
	ldr r1, [r0, #0x0]
	orr r1, r1, #0x2
	str r1, [r0, #0x0]
	bx lr
	.balign 4
_020975EC: .word SOCLiDhcpState

	arm_func_start SOCLi_SetMyIP
SOCLi_SetMyIP: ; 0x020975F0
	stmdb sp!, {lr}
	sub sp, sp, #0x4
	ldr r1, _02097654 ; =SOCLiConfigPtr
	ldr r0, _02097658 ; =SOCLiDhcpState
	ldr lr, [r1, #0x0]
	ldr r3, [r0, #0x0]
	ldr r12, [lr, #0x4]
	ldr r2, _0209765C ; =CPSMyIp
	ldr r1, _02097660 ; =CPSNetMask
	str r12, [r2, #0x0]
	ldr r12, [lr, #0x8]
	ldr r2, _02097664 ; =CPSGatewayIp
	str r12, [r1, #0x0]
	ldr r12, [lr, #0xc]
	ldr r1, _02097668 ; =CPSDnsIp
	str r12, [r2, #0x0]
	ldr r12, [lr, #0x10]
	orr r2, r3, #0x2
	str r12, [r1, #0x0]
	ldr r3, [lr, #0x14]
	str r3, [r1, #0x4]
	str r2, [r0, #0x0]
	add sp, sp, #0x4
	ldmia sp!, {lr}
	bx lr
	.balign 4
_02097654: .word SOCLiConfigPtr
_02097658: .word SOCLiDhcpState
_0209765C: .word CPSMyIp
_02097660: .word CPSNetMask
_02097664: .word CPSGatewayIp
_02097668: .word CPSDnsIp

	arm_func_start SOCLi_StartupCPS
SOCLi_StartupCPS: ; 0x0209766C
	stmdb sp!, {r4-r5,lr}
	sub sp, sp, #0x4
	ldr r0, _020977C0 ; =SOCLiConfigPtr
	ldr r5, _020977C4 ; =SOCLiCPSConfig
	ldr r4, [r0, #0x0]
	mov r0, r5
	mov r1, #0x0
	mov r2, #0x30
	bl MI_CpuFill8
	ldr r0, _020977C8 ; =SOCLiYieldWait
	ldr r2, [r4, #0x18]
	mov r1, r5
	str r2, [r1, #0x4]
	ldr r12, [r4, #0x1c]
	mov r2, #0x0
	ldr r3, _020977CC ; =SOCL_LinkIsOn
	ldr r0, [r0, #0x0]
	str r12, [r1, #0x8]
	str r3, [r1, #0x10]
	str r2, [r1, #0x14]
	str r2, [r1, #0x18]
	str r0, [r1, #0x2c]
	ldr r0, [r4, #0x24]
	cmp r0, #0x0
	strne r0, [r5, #0x20]
	moveq r0, #0x4000
	streq r0, [r5, #0x20]
	ldr r0, [r4, #0x28]
	cmp r0, #0x0
	strne r0, [r5, #0x1c]
	bne _02097700
	ldr r1, _020977C0 ; =SOCLiConfigPtr
	ldr r0, [r5, #0x20]
	ldr r1, [r1, #0x0]
	ldr r1, [r1, #0x18]
	blx r1
	str r0, [r5, #0x1c]
_02097700:
	ldr r0, [r4, #0x30]
	ldr r12, [r4, #0x34]
	cmp r0, #0x0
	moveq r0, #0x240
	cmp r12, #0x0
	sub r2, r0, #0x28
	moveq r12, #0x10c0
	add r0, r12, r12, lsr #0x1f
	str r2, [r5, #0x24]
	ldr r1, _020977D0 ; =SOCLSocketParamTCP
	mov r3, r0, asr #0x1
	ldr r0, _020977D4 ; =CPSMyIp
	mov r2, #0x0
	strh r12, [r1, #0x2]
	strh r3, [r1, #0x4]
	str r2, [r0, #0x0]
	ldr r0, [r4, #0x0]
	cmp r0, #0x0
	beq _02097774
	ldr r0, _020977D8 ; =SOCLiDhcpState
	mov r1, #0x1
	str r1, [r0, #0x0]
	ldr r1, _020977DC ; =SOCLi_DhcpTimeout
	str r2, [r5, #0x0]
	ldr r0, _020977E0 ; =SOCLiRequestedIP
	str r1, [r5, #0xc]
	ldr r0, [r0, #0x0]
	str r0, [r5, #0x28]
	b _0209778C
_02097774:
	ldr r0, _020977D8 ; =SOCLiDhcpState
	mov r1, #0x1
	str r2, [r0, #0x0]
	ldr r0, _020977E4 ; =SOCLi_SetMyIP
	str r1, [r5, #0x0]
	str r0, [r5, #0xc]
_0209778C:
	ldr r0, [r4, #0x2c]
	cmp r0, #0x0
	moveq r0, #0xb
	bl CPS_SetThreadPriority
	ldr r0, _020977E8 ; =CPSi_RecvCallbackFunc
	bl WCM_SetRecvDCFCallback
	ldr r0, _020977EC ; =SOCLi_TrashSocket
	bl CPS_SetScavengerCallback
	mov r0, r5
	bl CPS_Startup
	add sp, sp, #0x4
	ldmia sp!, {r4-r5,lr}
	bx lr
	.balign 4
_020977C0: .word SOCLiConfigPtr
_020977C4: .word SOCLiCPSConfig
_020977C8: .word SOCLiYieldWait
_020977CC: .word SOCL_LinkIsOn
_020977D0: .word SOCLSocketParamTCP
_020977D4: .word CPSMyIp
_020977D8: .word SOCLiDhcpState
_020977DC: .word SOCLi_DhcpTimeout
_020977E0: .word SOCLiRequestedIP
_020977E4: .word SOCLi_SetMyIP
_020977E8: .word CPSi_RecvCallbackFunc
_020977EC: .word SOCLi_TrashSocket

	arm_func_start SOCLi_StartupSOCL
SOCLi_StartupSOCL: ; 0x020977F0
	stmdb sp!, {r4,lr}
	ldr r0, _02097828 ; =SOCLiConfigPtr
	ldr r0, [r0, #0x0]
	ldr r0, [r0, #0x20]
	bl SOCLi_StartupCommandPacketQueue
	movs r4, r0
	bmi _0209781C
	ldr r0, _0209782C ; =SOCLSocketParamUDPSend
	bl SOCL_CreateSocket
	ldr r1, _02097830 ; =SOCLiUDPSendSocket
	str r0, [r1, #0x0]
_0209781C:
	mov r0, r4
	ldmia sp!, {r4,lr}
	bx lr
	.balign 4
_02097828: .word SOCLiConfigPtr
_0209782C: .word SOCLSocketParamUDPSend
_02097830: .word SOCLiUDPSendSocket

	.extern _SDK_NintendoWiFi

	arm_func_start SOCL_Startup
SOCL_Startup: ; 0x02097834
	stmdb sp!, {r4,lr}
	mov r4, r0
	ldr r0, _02097870 ; =_SDK_NintendoWiFi
	bl OSi_ReferSymbol
	ldr r0, _02097874 ; =SOCLiConfigPtr
	ldr r1, [r0, #0x0]
	cmp r1, #0x0
	movne r0, #0x0
	ldmneia sp!, {r4,lr}
	bxne lr
	str r4, [r0, #0x0]
	bl SOCLi_StartupCPS
	bl SOCLi_StartupSOCL
	ldmia sp!, {r4,lr}
	bx lr
	.balign 4
_02097870: .word _SDK_NintendoWiFi
_02097874: .word SOCLiConfigPtr