summaryrefslogtreecommitdiff
path: root/arm9/asm/SOC_socl_cleanup.s
blob: 5eb8b9499268a41a0d932910820c13e7aaee465d (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
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
	.include "asm/macros.inc"
	.include "global.inc"

	.text

	arm_func_start SOCL_CalmDown
SOCL_CalmDown: ; 0x02099A94
	stmdb sp!, {r4,lr}
	ldr r0, _02099B10 ; =SOCLiUDPSendSocket
	ldr r0, [r0, #0x0]
	cmp r0, #0x0
	beq _02099AE8
	bl SOCL_CloseAll
	movs r4, r0
	bne _02099AE0
	ldr r0, _02099B10 ; =SOCLiUDPSendSocket
	ldr r0, [r0, #0x0]
	bl SOCL_Close
	ldr r0, _02099B10 ; =SOCLiUDPSendSocket
	ldr r0, [r0, #0x0]
	bl SOCL_IsClosed
	cmp r0, #0x0
	ldrne r0, _02099B10 ; =SOCLiUDPSendSocket
	movne r1, #0x0
	strne r1, [r0, #0x0]
	mvn r4, #0x19
_02099AE0:
	bl SOCLi_TrashSocket
	b _02099B04
_02099AE8:
	bl CPS_CalmDown
	cmp r0, #0x0
	mvneq r4, #0x19
	beq _02099B04
	mov r0, #0x0
	bl WCM_SetRecvDCFCallback
	mov r4, #0x0
_02099B04:
	mov r0, r4
	ldmia sp!, {r4,lr}
	bx lr
	.balign 4
_02099B10: .word SOCLiUDPSendSocket

	arm_func_start SOCL_CloseAll
SOCL_CloseAll: ; 0x02099B14
	stmdb sp!, {r4-r6,lr}
	ldr r4, _02099BBC ; =SOCLiUDPSendSocket
	ldr r5, _02099BC0 ; =SOCLiSocketList
_02099B20:
	bl OS_DisableInterrupts
	ldr r6, [r5, #0x0]
	cmp r6, #0x0
	beq _02099B54
	ldr r2, [r4, #0x0]
_02099B34:
	cmp r6, r2
	beq _02099B48
	ldrsh r1, [r6, #0x70]
	ands r1, r1, #0x10
	beq _02099B54
_02099B48:
	ldr r6, [r6, #0x7c]
	cmp r6, #0x0
	bne _02099B34
_02099B54:
	bl OS_RestoreInterrupts
	cmp r6, #0x0
	beq _02099B6C
	mov r0, r6
	bl SOCL_Close
	b _02099B20
_02099B6C:
	ldr r0, _02099BC0 ; =SOCLiSocketList
	ldr r1, [r0, #0x0]
	cmp r1, #0x0
	beq _02099B98
	ldr r0, _02099BBC ; =SOCLiUDPSendSocket
	ldr r0, [r0, #0x0]
	cmp r1, r0
	bne _02099BB0
	ldr r0, [r1, #0x7c]
	cmp r0, #0x0
	bne _02099BB0
_02099B98:
	ldr r0, _02099BC4 ; =SOCLiSocketListTrash
	ldr r0, [r0, #0x0]
	cmp r0, #0x0
	moveq r0, #0x0
	ldmeqia sp!, {r4-r6,lr}
	bxeq lr
_02099BB0:
	mvn r0, #0x19
	ldmia sp!, {r4-r6,lr}
	bx lr
	.balign 4
_02099BBC: .word SOCLiUDPSendSocket
_02099BC0: .word SOCLiSocketList
_02099BC4: .word SOCLiSocketListTrash

	arm_func_start SOCL_Cleanup
SOCL_Cleanup: ; 0x02099BC8
	stmdb sp!, {r4-r5,lr}
	sub sp, sp, #0x4
	ldr r1, _02099C68 ; =SOCLiRequestedIP
	ldr r0, [r1, #0x0]
	cmp r0, #0x0
	ldreq r0, _02099C6C ; =CPSMyIp
	ldreq r0, [r0, #0x0]
	streq r0, [r1, #0x0]
	bl SOCL_CalmDown
	mvn r4, #0x19
	cmp r0, r4
	bne _02099C10
	mov r5, #0x64
_02099BFC:
	mov r0, r5
	bl OS_Sleep
	bl SOCL_CalmDown
	cmp r0, r4
	beq _02099BFC
_02099C10:
	bl SOCLi_CleanupCommandPacketQueue
	movs r4, r0
	bmi _02099C58
	bl CPS_Cleanup
	mov r0, #0x0
	bl CPS_SetScavengerCallback
	ldr r0, _02099C70 ; =SOCLiConfigPtr
	ldr r1, [r0, #0x0]
	ldr r0, [r1, #0x28]
	cmp r0, #0x0
	bne _02099C4C
	ldr r0, _02099C74 ; =SOCLiCPSConfig
	ldr r1, [r1, #0x1c]
	ldr r0, [r0, #0x1c]
	blx r1
_02099C4C:
	ldr r0, _02099C70 ; =SOCLiConfigPtr
	mov r1, #0x0
	str r1, [r0, #0x0]
_02099C58:
	mov r0, r4
	add sp, sp, #0x4
	ldmia sp!, {r4-r5,lr}
	bx lr
	.balign 4
_02099C68: .word SOCLiRequestedIP
_02099C6C: .word CPSMyIp
_02099C70: .word SOCLiConfigPtr
_02099C74: .word SOCLiCPSConfig

	arm_func_start SOCL_GetHostID
SOCL_GetHostID: ; 02099C78
	stmdb sp!, {lr}
	sub sp, sp, #0x4
	ldr r0, _02099CE0 ; =CPSMyIp
	ldr r2, [r0, #0x0]
	cmp r2, #0x0
	bne _02099CBC
	ldr r0, _02099CE4 ; =SOCLiDhcpState
	ldr r0, [r0, #0x0]
	and r0, r0, #0x3
	cmp r0, #0x1
	bne _02099CCC
	bl OS_GetProcMode
	cmp r0, #0x12
	beq _02099CCC
	mov r0, #0xa
	bl OS_Sleep
	b _02099CCC
_02099CBC:
	ldr r0, _02099CE8 ; =SOCLiRequestedIP
	ldr r1, [r0, #0x0]
	cmp r1, #0x0
	streq r2, [r0, #0x0]
_02099CCC:
	ldr r0, _02099CE0 ; =CPSMyIp
	ldr r0, [r0, #0x0]
	add sp, sp, #0x4
	ldmia sp!, {lr}
	bx lr
	.balign 4
_02099CE0: .word CPSMyIp
_02099CE4: .word SOCLiDhcpState
_02099CE8: .word SOCLiRequestedIP

	arm_func_start SOCL_SetResolver
SOCL_SetResolver: ; 0x02099CEC
	stmdb sp!, {r4-r5,lr}
	sub sp, sp, #0x4
	mov r5, r0
	mov r4, r1
	bl SOCL_GetHostID
	cmp r0, #0x0
	ldrne r1, _02099D24 ; =CPSDnsIp
	mvneq r0, #0x26
	movne r0, #0x0
	strne r5, [r1, #0x0]
	strne r4, [r1, #0x4]
	add sp, sp, #0x4
	ldmia sp!, {r4-r5,lr}
	bx lr
	.balign 4
_02099D24: .word CPSDnsIp

	arm_func_start SOCL_InetAtoH
SOCL_InetAtoH: ; 0x022099D28
	stmdb sp!, {r4-r7,lr}
	sub sp, sp, #0x4
	mov r4, r0
	bl OS_DisableInterrupts
	ldr r1, _02099D84 ; =CPSDnsIp
	mov r5, r0
	ldr r7, [r1, #0x0]
	mov r2, #0x0
	ldr r6, [r1, #0x4]
	mov r0, r4
	str r2, [r1, #0x0]
	str r2, [r1, #0x4]
	bl CPS_Resolve
	ldr r1, _02099D84 ; =CPSDnsIp
	mov r4, r0
	mov r0, r5
	str r7, [r1, #0x0]
	str r6, [r1, #0x4]
	bl OS_RestoreInterrupts
	mov r0, r4
	add sp, sp, #0x4
	ldmia sp!, {r4-r7,lr}
	bx lr
	.balign 4
_02099D84: .word CPSDnsIp

	arm_func_start SOCL_Resolve
SOCL_Resolve: ; 0x02099D88
	stmdb sp!, {r4-r5,lr}
	sub sp, sp, #0x64
	movs r4, r0
	addeq sp, sp, #0x64
	moveq r0, #0x0
	ldmeqia sp!, {r4-r5,lr}
	bxeq lr
	ldr r1, _02099E34 ; =SOCLiConfigPtr
	mov r0, #0xfd0
	ldr r1, [r1, #0x0]
	ldr r1, [r1, #0x18]
	blx r1
	movs r5, r0
	addeq sp, sp, #0x64
	moveq r0, #0x0
	ldmeqia sp!, {r4-r5,lr}
	bxeq lr
	add r0, sp, #0x0
	mov r1, #0x0
	mov r2, #0x64
	bl MI_CpuFill8
	ldr r3, _02099E38 ; =0x00000B68
	ldr r1, _02099E3C ; =0x00000466
	add r2, r5, r3
	add r0, sp, #0x0
	str r5, [sp, #0x40]
	str r3, [sp, #0x3c]
	str r2, [sp, #0x4c]
	str r1, [sp, #0x48]
	bl CPS_SocRegister
	mov r0, r4
	bl CPS_Resolve
	mov r4, r0
	bl CPS_SocUnRegister
	ldr r1, _02099E34 ; =SOCLiConfigPtr
	mov r0, r5
	ldr r1, [r1, #0x0]
	ldr r1, [r1, #0x1c]
	blx r1
	mov r0, r4
	add sp, sp, #0x64
	ldmia sp!, {r4-r5,lr}
	bx lr
	.balign 4
_02099E34: .word SOCLiConfigPtr
_02099E38: .word 0x00000B68
_02099E3C: .word 0x00000466