summaryrefslogtreecommitdiff
path: root/asm/SDK/SO/SOOption.s
blob: 49add9e617adaa5ba9088a78534fae19c979df0d (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
284
285
286
287
288
289
290
291
292
293
.include "macros.inc"

.section .text, "ax"  # 0x80006980 - 0x803E1E60

.global SOGetSockOpt
SOGetSockOpt:
/* 802F7750 002F33B0  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 802F7754 002F33B4  7C 08 02 A6 */	mflr r0
/* 802F7758 002F33B8  90 01 00 34 */	stw r0, 0x34(r1)
/* 802F775C 002F33BC  39 61 00 30 */	addi r11, r1, 0x30
/* 802F7760 002F33C0  4B EC F9 C5 */	bl _savegpr_26
/* 802F7764 002F33C4  7C 7A 1B 78 */	mr r26, r3
/* 802F7768 002F33C8  7C 9B 23 78 */	mr r27, r4
/* 802F776C 002F33CC  7C BF 2B 78 */	mr r31, r5
/* 802F7770 002F33D0  7C DC 33 78 */	mr r28, r6
/* 802F7774 002F33D4  7C FD 3B 78 */	mr r29, r7
/* 802F7778 002F33D8  38 81 00 08 */	addi r4, r1, 8
/* 802F777C 002F33DC  38 60 00 00 */	li r3, 0
/* 802F7780 002F33E0  4B FF E4 45 */	bl SOiPrepare
/* 802F7784 002F33E4  2C 03 00 00 */	cmpwi r3, 0
/* 802F7788 002F33E8  40 82 00 B4 */	bne lbl_802F783C
/* 802F778C 002F33EC  38 60 00 0C */	li r3, 0xc
/* 802F7790 002F33F0  38 80 00 20 */	li r4, 0x20
/* 802F7794 002F33F4  4B FF E3 15 */	bl SOiAlloc
/* 802F7798 002F33F8  2C 03 00 00 */	cmpwi r3, 0
/* 802F779C 002F33FC  7C 7E 1B 78 */	mr r30, r3
/* 802F77A0 002F3400  40 82 00 0C */	bne lbl_802F77AC
/* 802F77A4 002F3404  3B E0 FF CF */	li r31, -49
/* 802F77A8 002F3408  48 00 00 88 */	b lbl_802F7830
lbl_802F77AC:
/* 802F77AC 002F340C  93 43 00 00 */	stw r26, 0(r3)
/* 802F77B0 002F3410  7F C7 F3 78 */	mr r7, r30
/* 802F77B4 002F3414  38 80 00 08 */	li r4, 8
/* 802F77B8 002F3418  38 A0 00 00 */	li r5, 0
/* 802F77BC 002F341C  93 63 00 04 */	stw r27, 4(r3)
/* 802F77C0 002F3420  38 C0 00 00 */	li r6, 0
/* 802F77C4 002F3424  39 00 00 18 */	li r8, 0x18
/* 802F77C8 002F3428  93 E3 00 08 */	stw r31, 8(r3)
/* 802F77CC 002F342C  80 61 00 08 */	lwz r3, 8(r1)
/* 802F77D0 002F3430  4B FA C3 21 */	bl IOS_Ioctl
/* 802F77D4 002F3434  2C 03 00 00 */	cmpwi r3, 0
/* 802F77D8 002F3438  7C 7F 1B 78 */	mr r31, r3
/* 802F77DC 002F343C  41 80 00 44 */	blt lbl_802F7820
/* 802F77E0 002F3440  2C 1D 00 00 */	cmpwi r29, 0
/* 802F77E4 002F3444  41 82 00 3C */	beq lbl_802F7820
/* 802F77E8 002F3448  80 BE 00 0C */	lwz r5, 0xc(r30)
/* 802F77EC 002F344C  80 1D 00 00 */	lwz r0, 0(r29)
/* 802F77F0 002F3450  7C 00 28 00 */	cmpw r0, r5
/* 802F77F4 002F3454  41 80 00 24 */	blt lbl_802F7818
/* 802F77F8 002F3458  2C 1C 00 00 */	cmpwi r28, 0
/* 802F77FC 002F345C  41 82 00 10 */	beq lbl_802F780C
/* 802F7800 002F3460  7F 83 E3 78 */	mr r3, r28
/* 802F7804 002F3464  38 9E 00 10 */	addi r4, r30, 0x10
/* 802F7808 002F3468  4B D0 C7 F9 */	bl memcpy
lbl_802F780C:
/* 802F780C 002F346C  80 1E 00 0C */	lwz r0, 0xc(r30)
/* 802F7810 002F3470  90 1D 00 00 */	stw r0, 0(r29)
/* 802F7814 002F3474  48 00 00 0C */	b lbl_802F7820
lbl_802F7818:
/* 802F7818 002F3478  90 BD 00 00 */	stw r5, 0(r29)
/* 802F781C 002F347C  3B E0 FF E4 */	li r31, -28
lbl_802F7820:
/* 802F7820 002F3480  7F C4 F3 78 */	mr r4, r30
/* 802F7824 002F3484  38 60 00 0C */	li r3, 0xc
/* 802F7828 002F3488  38 A0 00 20 */	li r5, 0x20
/* 802F782C 002F348C  4B FF E3 65 */	bl SOiFree
lbl_802F7830:
/* 802F7830 002F3490  7F E4 FB 78 */	mr r4, r31
/* 802F7834 002F3494  38 60 00 00 */	li r3, 0
/* 802F7838 002F3498  4B FF E4 75 */	bl SOiConclude
lbl_802F783C:
/* 802F783C 002F349C  39 61 00 30 */	addi r11, r1, 0x30
/* 802F7840 002F34A0  4B EC F9 31 */	bl _restgpr_26
/* 802F7844 002F34A4  80 01 00 34 */	lwz r0, 0x34(r1)
/* 802F7848 002F34A8  7C 08 03 A6 */	mtlr r0
/* 802F784C 002F34AC  38 21 00 30 */	addi r1, r1, 0x30
/* 802F7850 002F34B0  4E 80 00 20 */	blr

.global SOSetSockOpt
SOSetSockOpt:
/* 802F7854 002F34B4  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 802F7858 002F34B8  7C 08 02 A6 */	mflr r0
/* 802F785C 002F34BC  90 01 00 34 */	stw r0, 0x34(r1)
/* 802F7860 002F34C0  39 61 00 30 */	addi r11, r1, 0x30
/* 802F7864 002F34C4  4B EC F8 C1 */	bl _savegpr_26
/* 802F7868 002F34C8  7C 7A 1B 78 */	mr r26, r3
/* 802F786C 002F34CC  7C 9B 23 78 */	mr r27, r4
/* 802F7870 002F34D0  7C BC 2B 78 */	mr r28, r5
/* 802F7874 002F34D4  7C DD 33 78 */	mr r29, r6
/* 802F7878 002F34D8  7C FF 3B 78 */	mr r31, r7
/* 802F787C 002F34DC  38 81 00 08 */	addi r4, r1, 8
/* 802F7880 002F34E0  38 60 00 00 */	li r3, 0
/* 802F7884 002F34E4  4B FF E3 41 */	bl SOiPrepare
/* 802F7888 002F34E8  2C 03 00 00 */	cmpwi r3, 0
/* 802F788C 002F34EC  40 82 00 B4 */	bne lbl_802F7940
/* 802F7890 002F34F0  2C 1F 00 00 */	cmpwi r31, 0
/* 802F7894 002F34F4  41 80 00 0C */	blt lbl_802F78A0
/* 802F7898 002F34F8  2C 1F 00 14 */	cmpwi r31, 0x14
/* 802F789C 002F34FC  40 81 00 0C */	ble lbl_802F78A8
lbl_802F78A0:
/* 802F78A0 002F3500  3B E0 FF E4 */	li r31, -28
/* 802F78A4 002F3504  48 00 00 90 */	b lbl_802F7934
lbl_802F78A8:
/* 802F78A8 002F3508  38 60 00 0C */	li r3, 0xc
/* 802F78AC 002F350C  38 80 00 40 */	li r4, 0x40
/* 802F78B0 002F3510  4B FF E1 F9 */	bl SOiAlloc
/* 802F78B4 002F3514  2C 03 00 00 */	cmpwi r3, 0
/* 802F78B8 002F3518  7C 7E 1B 78 */	mr r30, r3
/* 802F78BC 002F351C  40 82 00 0C */	bne lbl_802F78C8
/* 802F78C0 002F3520  3B E0 FF CF */	li r31, -49
/* 802F78C4 002F3524  48 00 00 70 */	b lbl_802F7934
lbl_802F78C8:
/* 802F78C8 002F3528  93 43 00 00 */	stw r26, 0(r3)
/* 802F78CC 002F352C  2C 1D 00 00 */	cmpwi r29, 0
/* 802F78D0 002F3530  93 63 00 04 */	stw r27, 4(r3)
/* 802F78D4 002F3534  93 83 00 08 */	stw r28, 8(r3)
/* 802F78D8 002F3538  93 E3 00 0C */	stw r31, 0xc(r3)
/* 802F78DC 002F353C  41 82 00 18 */	beq lbl_802F78F4
/* 802F78E0 002F3540  7F A4 EB 78 */	mr r4, r29
/* 802F78E4 002F3544  7F E5 FB 78 */	mr r5, r31
/* 802F78E8 002F3548  38 63 00 10 */	addi r3, r3, 0x10
/* 802F78EC 002F354C  4B D0 C7 15 */	bl memcpy
/* 802F78F0 002F3550  48 00 00 14 */	b lbl_802F7904
lbl_802F78F4:
/* 802F78F4 002F3554  7F E5 FB 78 */	mr r5, r31
/* 802F78F8 002F3558  38 80 00 00 */	li r4, 0
/* 802F78FC 002F355C  38 63 00 10 */	addi r3, r3, 0x10
/* 802F7900 002F3560  4B D0 C8 05 */	bl memset
lbl_802F7904:
/* 802F7904 002F3564  80 61 00 08 */	lwz r3, 8(r1)
/* 802F7908 002F3568  7F C5 F3 78 */	mr r5, r30
/* 802F790C 002F356C  38 80 00 09 */	li r4, 9
/* 802F7910 002F3570  38 C0 00 24 */	li r6, 0x24
/* 802F7914 002F3574  38 E0 00 00 */	li r7, 0
/* 802F7918 002F3578  39 00 00 00 */	li r8, 0
/* 802F791C 002F357C  4B FA C1 D5 */	bl IOS_Ioctl
/* 802F7920 002F3580  7C 7F 1B 78 */	mr r31, r3
/* 802F7924 002F3584  7F C4 F3 78 */	mr r4, r30
/* 802F7928 002F3588  38 60 00 0C */	li r3, 0xc
/* 802F792C 002F358C  38 A0 00 40 */	li r5, 0x40
/* 802F7930 002F3590  4B FF E2 61 */	bl SOiFree
lbl_802F7934:
/* 802F7934 002F3594  7F E4 FB 78 */	mr r4, r31
/* 802F7938 002F3598  38 60 00 00 */	li r3, 0
/* 802F793C 002F359C  4B FF E3 71 */	bl SOiConclude
lbl_802F7940:
/* 802F7940 002F35A0  39 61 00 30 */	addi r11, r1, 0x30
/* 802F7944 002F35A4  4B EC F8 2D */	bl _restgpr_26
/* 802F7948 002F35A8  80 01 00 34 */	lwz r0, 0x34(r1)
/* 802F794C 002F35AC  7C 08 03 A6 */	mtlr r0
/* 802F7950 002F35B0  38 21 00 30 */	addi r1, r1, 0x30
/* 802F7954 002F35B4  4E 80 00 20 */	blr

.global SOGetInterfaceOpt
SOGetInterfaceOpt:
/* 802F7958 002F35B8  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 802F795C 002F35BC  7C 08 02 A6 */	mflr r0
/* 802F7960 002F35C0  90 01 00 34 */	stw r0, 0x34(r1)
/* 802F7964 002F35C4  39 61 00 30 */	addi r11, r1, 0x30
/* 802F7968 002F35C8  4B EC F7 B9 */	bl _savegpr_25
/* 802F796C 002F35CC  7C 9A 23 78 */	mr r26, r4
/* 802F7970 002F35D0  7C B9 2B 78 */	mr r25, r5
/* 802F7974 002F35D4  7C DE 33 78 */	mr r30, r6
/* 802F7978 002F35D8  7C FF 3B 78 */	mr r31, r7
/* 802F797C 002F35DC  38 81 00 0C */	addi r4, r1, 0xc
/* 802F7980 002F35E0  38 A1 00 08 */	addi r5, r1, 8
/* 802F7984 002F35E4  38 60 00 00 */	li r3, 0
/* 802F7988 002F35E8  4B FF E3 81 */	bl SOiPrepareTempRm
/* 802F798C 002F35EC  2C 03 00 00 */	cmpwi r3, 0
/* 802F7990 002F35F0  40 82 01 8C */	bne lbl_802F7B1C
/* 802F7994 002F35F4  38 19 EF FF */	addi r0, r25, -4097
/* 802F7998 002F35F8  28 00 00 01 */	cmplwi r0, 1
/* 802F799C 002F35FC  41 81 00 0C */	bgt lbl_802F79A8
/* 802F79A0 002F3600  3B 80 FF E4 */	li r28, -28
/* 802F79A4 002F3604  48 00 01 68 */	b lbl_802F7B0C
lbl_802F79A8:
/* 802F79A8 002F3608  2C 1F 00 00 */	cmpwi r31, 0
/* 802F79AC 002F360C  38 60 00 00 */	li r3, 0
/* 802F79B0 002F3610  41 82 00 10 */	beq lbl_802F79C0
/* 802F79B4 002F3614  80 1F 00 00 */	lwz r0, 0(r31)
/* 802F79B8 002F3618  2C 00 00 00 */	cmpwi r0, 0
/* 802F79BC 002F361C  40 80 00 08 */	bge lbl_802F79C4
lbl_802F79C0:
/* 802F79C0 002F3620  38 60 00 01 */	li r3, 1
lbl_802F79C4:
/* 802F79C4 002F3624  2C 03 00 00 */	cmpwi r3, 0
/* 802F79C8 002F3628  41 82 00 0C */	beq lbl_802F79D4
/* 802F79CC 002F362C  38 60 00 00 */	li r3, 0
/* 802F79D0 002F3630  48 00 00 08 */	b lbl_802F79D8
lbl_802F79D4:
/* 802F79D4 002F3634  80 7F 00 00 */	lwz r3, 0(r31)
lbl_802F79D8:
/* 802F79D8 002F3638  38 03 00 7F */	addi r0, r3, 0x7f
/* 802F79DC 002F363C  38 60 00 0C */	li r3, 0xc
/* 802F79E0 002F3640  54 1D 00 34 */	rlwinm r29, r0, 0, 0, 0x1a
/* 802F79E4 002F3644  7F A4 EB 78 */	mr r4, r29
/* 802F79E8 002F3648  4B FF E0 C1 */	bl SOiAlloc
/* 802F79EC 002F364C  2C 03 00 00 */	cmpwi r3, 0
/* 802F79F0 002F3650  7C 7B 1B 78 */	mr r27, r3
/* 802F79F4 002F3654  40 82 00 0C */	bne lbl_802F7A00
/* 802F79F8 002F3658  3B 80 FF CF */	li r28, -49
/* 802F79FC 002F365C  48 00 01 10 */	b lbl_802F7B0C
lbl_802F7A00:
/* 802F7A00 002F3660  93 43 00 20 */	stw r26, 0x20(r3)
/* 802F7A04 002F3664  38 A3 00 20 */	addi r5, r3, 0x20
/* 802F7A08 002F3668  2C 1F 00 00 */	cmpwi r31, 0
/* 802F7A0C 002F366C  38 80 00 00 */	li r4, 0
/* 802F7A10 002F3670  3B 45 00 20 */	addi r26, r5, 0x20
/* 802F7A14 002F3674  93 23 00 24 */	stw r25, 0x24(r3)
/* 802F7A18 002F3678  3B 3A 00 20 */	addi r25, r26, 0x20
/* 802F7A1C 002F367C  41 82 00 10 */	beq lbl_802F7A2C
/* 802F7A20 002F3680  80 1F 00 00 */	lwz r0, 0(r31)
/* 802F7A24 002F3684  2C 00 00 00 */	cmpwi r0, 0
/* 802F7A28 002F3688  40 80 00 08 */	bge lbl_802F7A30
lbl_802F7A2C:
/* 802F7A2C 002F368C  38 80 00 01 */	li r4, 1
lbl_802F7A30:
/* 802F7A30 002F3690  2C 04 00 00 */	cmpwi r4, 0
/* 802F7A34 002F3694  41 82 00 0C */	beq lbl_802F7A40
/* 802F7A38 002F3698  38 00 00 00 */	li r0, 0
/* 802F7A3C 002F369C  48 00 00 08 */	b lbl_802F7A44
lbl_802F7A40:
/* 802F7A40 002F36A0  80 1F 00 00 */	lwz r0, 0(r31)
lbl_802F7A44:
/* 802F7A44 002F36A4  90 1A 00 00 */	stw r0, 0(r26)
/* 802F7A48 002F36A8  38 00 00 08 */	li r0, 8
/* 802F7A4C 002F36AC  2C 1F 00 00 */	cmpwi r31, 0
/* 802F7A50 002F36B0  38 80 00 00 */	li r4, 0
/* 802F7A54 002F36B4  90 A3 00 00 */	stw r5, 0(r3)
/* 802F7A58 002F36B8  90 03 00 04 */	stw r0, 4(r3)
/* 802F7A5C 002F36BC  93 23 00 08 */	stw r25, 8(r3)
/* 802F7A60 002F36C0  41 82 00 10 */	beq lbl_802F7A70
/* 802F7A64 002F36C4  80 1F 00 00 */	lwz r0, 0(r31)
/* 802F7A68 002F36C8  2C 00 00 00 */	cmpwi r0, 0
/* 802F7A6C 002F36CC  40 80 00 08 */	bge lbl_802F7A74
lbl_802F7A70:
/* 802F7A70 002F36D0  38 80 00 01 */	li r4, 1
lbl_802F7A74:
/* 802F7A74 002F36D4  2C 04 00 00 */	cmpwi r4, 0
/* 802F7A78 002F36D8  41 82 00 0C */	beq lbl_802F7A84
/* 802F7A7C 002F36DC  38 00 00 00 */	li r0, 0
/* 802F7A80 002F36E0  48 00 00 08 */	b lbl_802F7A88
lbl_802F7A84:
/* 802F7A84 002F36E4  80 1F 00 00 */	lwz r0, 0(r31)
lbl_802F7A88:
/* 802F7A88 002F36E8  90 03 00 0C */	stw r0, 0xc(r3)
/* 802F7A8C 002F36EC  38 00 00 04 */	li r0, 4
/* 802F7A90 002F36F0  7F 67 DB 78 */	mr r7, r27
/* 802F7A94 002F36F4  38 80 00 1C */	li r4, 0x1c
/* 802F7A98 002F36F8  93 43 00 10 */	stw r26, 0x10(r3)
/* 802F7A9C 002F36FC  38 A0 00 01 */	li r5, 1
/* 802F7AA0 002F3700  38 C0 00 02 */	li r6, 2
/* 802F7AA4 002F3704  90 03 00 14 */	stw r0, 0x14(r3)
/* 802F7AA8 002F3708  80 61 00 0C */	lwz r3, 0xc(r1)
/* 802F7AAC 002F370C  4B FA C3 95 */	bl IOS_Ioctlv
/* 802F7AB0 002F3710  2C 03 00 00 */	cmpwi r3, 0
/* 802F7AB4 002F3714  7C 7C 1B 78 */	mr r28, r3
/* 802F7AB8 002F3718  41 80 00 44 */	blt lbl_802F7AFC
/* 802F7ABC 002F371C  2C 1F 00 00 */	cmpwi r31, 0
/* 802F7AC0 002F3720  41 82 00 3C */	beq lbl_802F7AFC
/* 802F7AC4 002F3724  80 BA 00 00 */	lwz r5, 0(r26)
/* 802F7AC8 002F3728  80 1F 00 00 */	lwz r0, 0(r31)
/* 802F7ACC 002F372C  7C 00 28 00 */	cmpw r0, r5
/* 802F7AD0 002F3730  41 80 00 24 */	blt lbl_802F7AF4
/* 802F7AD4 002F3734  2C 1E 00 00 */	cmpwi r30, 0
/* 802F7AD8 002F3738  41 82 00 10 */	beq lbl_802F7AE8
/* 802F7ADC 002F373C  7F C3 F3 78 */	mr r3, r30
/* 802F7AE0 002F3740  7F 24 CB 78 */	mr r4, r25
/* 802F7AE4 002F3744  4B D0 C5 1D */	bl memcpy
lbl_802F7AE8:
/* 802F7AE8 002F3748  80 1A 00 00 */	lwz r0, 0(r26)
/* 802F7AEC 002F374C  90 1F 00 00 */	stw r0, 0(r31)
/* 802F7AF0 002F3750  48 00 00 0C */	b lbl_802F7AFC
lbl_802F7AF4:
/* 802F7AF4 002F3754  90 BF 00 00 */	stw r5, 0(r31)
/* 802F7AF8 002F3758  3B 80 FF E4 */	li r28, -28
lbl_802F7AFC:
/* 802F7AFC 002F375C  7F 64 DB 78 */	mr r4, r27
/* 802F7B00 002F3760  7F A5 EB 78 */	mr r5, r29
/* 802F7B04 002F3764  38 60 00 0C */	li r3, 0xc
/* 802F7B08 002F3768  4B FF E0 89 */	bl SOiFree
lbl_802F7B0C:
/* 802F7B0C 002F376C  80 A1 00 08 */	lwz r5, 8(r1)
/* 802F7B10 002F3770  7F 84 E3 78 */	mr r4, r28
/* 802F7B14 002F3774  38 60 00 00 */	li r3, 0
/* 802F7B18 002F3778  4B FF E4 C9 */	bl SOiConcludeTempRm
lbl_802F7B1C:
/* 802F7B1C 002F377C  39 61 00 30 */	addi r11, r1, 0x30
/* 802F7B20 002F3780  4B EC F6 4D */	bl _restgpr_25
/* 802F7B24 002F3784  80 01 00 34 */	lwz r0, 0x34(r1)
/* 802F7B28 002F3788  7C 08 03 A6 */	mtlr r0
/* 802F7B2C 002F378C  38 21 00 30 */	addi r1, r1, 0x30
/* 802F7B30 002F3790  4E 80 00 20 */	blr