summaryrefslogtreecommitdiff
path: root/asm/SDK/MP/mpsystem.s
blob: 9bb48c5e1563e8b58d8984115fac8dd9ae87b0df (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
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
.include "macros.inc"

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

.global MPStartup
MPStartup:
/* 802F0588 002EC1E8  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 802F058C 002EC1EC  7C 08 02 A6 */	mflr r0
/* 802F0590 002EC1F0  90 01 00 14 */	stw r0, 0x14(r1)
/* 802F0594 002EC1F4  93 E1 00 0C */	stw r31, 0xc(r1)
/* 802F0598 002EC1F8  93 C1 00 08 */	stw r30, 8(r1)
/* 802F059C 002EC1FC  7C 7E 1B 78 */	mr r30, r3
/* 802F05A0 002EC200  80 0D 8B F4 */	lwz r0, lbl_8063DEB4-_SDA_BASE_(r13)
/* 802F05A4 002EC204  2C 00 00 00 */	cmpwi r0, 0
/* 802F05A8 002EC208  41 80 00 0C */	blt lbl_802F05B4
/* 802F05AC 002EC20C  38 60 FF 06 */	li r3, -250
/* 802F05B0 002EC210  48 00 00 28 */	b lbl_802F05D8
lbl_802F05B4:
/* 802F05B4 002EC214  4B FF D1 9D */	bl NCDLockWirelessDriver
/* 802F05B8 002EC218  2C 03 00 00 */	cmpwi r3, 0
/* 802F05BC 002EC21C  40 80 00 14 */	bge lbl_802F05D0
/* 802F05C0 002EC220  2C 03 FF FE */	cmpwi r3, -2
/* 802F05C4 002EC224  41 82 00 0C */	beq lbl_802F05D0
/* 802F05C8 002EC228  38 60 FF 06 */	li r3, -250
/* 802F05CC 002EC22C  48 00 00 0C */	b lbl_802F05D8
lbl_802F05D0:
/* 802F05D0 002EC230  90 6D 8B F4 */	stw r3, lbl_8063DEB4-_SDA_BASE_(r13)
/* 802F05D4 002EC234  38 60 00 00 */	li r3, 0
lbl_802F05D8:
/* 802F05D8 002EC238  2C 03 00 00 */	cmpwi r3, 0
/* 802F05DC 002EC23C  40 80 00 08 */	bge lbl_802F05E4
/* 802F05E0 002EC240  48 00 01 68 */	b lbl_802F0748
lbl_802F05E4:
/* 802F05E4 002EC244  4B F7 E1 79 */	bl OSDisableInterrupts
/* 802F05E8 002EC248  80 0D AF 38 */	lwz r0, lbl_806401F8-_SDA_BASE_(r13)
/* 802F05EC 002EC24C  7C 7F 1B 78 */	mr r31, r3
/* 802F05F0 002EC250  2C 00 00 01 */	cmpwi r0, 1
/* 802F05F4 002EC254  40 82 00 2C */	bne lbl_802F0620
/* 802F05F8 002EC258  4B F7 E1 8D */	bl OSRestoreInterrupts
/* 802F05FC 002EC25C  80 6D 8B F4 */	lwz r3, lbl_8063DEB4-_SDA_BASE_(r13)
/* 802F0600 002EC260  2C 03 00 00 */	cmpwi r3, 0
/* 802F0604 002EC264  41 80 00 14 */	blt lbl_802F0618
/* 802F0608 002EC268  38 00 FF FF */	li r0, -1
/* 802F060C 002EC26C  90 0D 8B F4 */	stw r0, lbl_8063DEB4-_SDA_BASE_(r13)
/* 802F0610 002EC270  4B FF D2 45 */	bl NCDUnlockWirelessDriver
/* 802F0614 002EC274  2C 03 00 00 */	cmpwi r3, 0
lbl_802F0618:
/* 802F0618 002EC278  38 60 FF 14 */	li r3, -236
/* 802F061C 002EC27C  48 00 01 2C */	b lbl_802F0748
lbl_802F0620:
/* 802F0620 002EC280  38 00 00 00 */	li r0, 0
/* 802F0624 002EC284  80 6D 8B F0 */	lwz r3, lbl_8063DEB0-_SDA_BASE_(r13)
/* 802F0628 002EC288  90 0D AF 38 */	stw r0, lbl_806401F8-_SDA_BASE_(r13)
/* 802F062C 002EC28C  4B F7 90 25 */	bl OSRegisterVersion
/* 802F0630 002EC290  7F C3 F3 78 */	mr r3, r30
/* 802F0634 002EC294  48 00 02 25 */	bl MPiStartupSystem
/* 802F0638 002EC298  2C 03 00 00 */	cmpwi r3, 0
/* 802F063C 002EC29C  7C 7E 1B 78 */	mr r30, r3
/* 802F0640 002EC2A0  41 80 00 7C */	blt lbl_802F06BC
/* 802F0644 002EC2A4  48 00 17 75 */	bl MPiStartupConnection
/* 802F0648 002EC2A8  2C 03 00 00 */	cmpwi r3, 0
/* 802F064C 002EC2AC  7C 7E 1B 78 */	mr r30, r3
/* 802F0650 002EC2B0  41 80 00 6C */	blt lbl_802F06BC
/* 802F0654 002EC2B4  48 00 0E 35 */	bl MPiStartupTxRx
/* 802F0658 002EC2B8  2C 03 00 00 */	cmpwi r3, 0
/* 802F065C 002EC2BC  7C 7E 1B 78 */	mr r30, r3
/* 802F0660 002EC2C0  41 80 00 5C */	blt lbl_802F06BC
/* 802F0664 002EC2C4  80 62 AA 30 */	lwz r3, lbl_80643030-_SDA2_BASE_(r2)
/* 802F0668 002EC2C8  80 03 00 0C */	lwz r0, 0xc(r3)
/* 802F066C 002EC2CC  28 00 00 01 */	cmplwi r0, 1
/* 802F0670 002EC2D0  40 82 00 14 */	bne lbl_802F0684
/* 802F0674 002EC2D4  48 00 1D 91 */	bl MPiStartupParent
/* 802F0678 002EC2D8  2C 03 00 00 */	cmpwi r3, 0
/* 802F067C 002EC2DC  7C 7E 1B 78 */	mr r30, r3
/* 802F0680 002EC2E0  41 80 00 3C */	blt lbl_802F06BC
lbl_802F0684:
/* 802F0684 002EC2E4  48 00 2A D5 */	bl MPiStartupNotification
/* 802F0688 002EC2E8  2C 03 00 00 */	cmpwi r3, 0
/* 802F068C 002EC2EC  7C 7E 1B 78 */	mr r30, r3
/* 802F0690 002EC2F0  41 80 00 2C */	blt lbl_802F06BC
/* 802F0694 002EC2F4  48 00 34 1D */	bl MPiStartupBeacon
/* 802F0698 002EC2F8  2C 03 00 00 */	cmpwi r3, 0
/* 802F069C 002EC2FC  7C 7E 1B 78 */	mr r30, r3
/* 802F06A0 002EC300  41 80 00 1C */	blt lbl_802F06BC
/* 802F06A4 002EC304  48 00 2C 7D */	bl MPiStartupPort
/* 802F06A8 002EC308  2C 03 00 00 */	cmpwi r3, 0
/* 802F06AC 002EC30C  7C 7E 1B 78 */	mr r30, r3
/* 802F06B0 002EC310  41 80 00 0C */	blt lbl_802F06BC
/* 802F06B4 002EC314  38 00 00 01 */	li r0, 1
/* 802F06B8 002EC318  90 0D AF 38 */	stw r0, lbl_806401F8-_SDA_BASE_(r13)
lbl_802F06BC:
/* 802F06BC 002EC31C  7F E3 FB 78 */	mr r3, r31
/* 802F06C0 002EC320  4B F7 E0 C5 */	bl OSRestoreInterrupts
/* 802F06C4 002EC324  2C 1E 00 00 */	cmpwi r30, 0
/* 802F06C8 002EC328  40 80 00 10 */	bge lbl_802F06D8
/* 802F06CC 002EC32C  48 00 00 95 */	bl MPCleanup
/* 802F06D0 002EC330  7F C3 F3 78 */	mr r3, r30
/* 802F06D4 002EC334  48 00 00 74 */	b lbl_802F0748
lbl_802F06D8:
/* 802F06D8 002EC338  48 00 0E 0D */	bl MPiStartupTxRxLater
/* 802F06DC 002EC33C  2C 03 00 00 */	cmpwi r3, 0
/* 802F06E0 002EC340  7C 7E 1B 78 */	mr r30, r3
/* 802F06E4 002EC344  41 80 00 4C */	blt lbl_802F0730
/* 802F06E8 002EC348  48 00 2D 41 */	bl MPiStartupPortLater
/* 802F06EC 002EC34C  2C 03 00 00 */	cmpwi r3, 0
/* 802F06F0 002EC350  7C 7E 1B 78 */	mr r30, r3
/* 802F06F4 002EC354  41 80 00 3C */	blt lbl_802F0730
/* 802F06F8 002EC358  48 00 05 39 */	bl MPiStartupWD
/* 802F06FC 002EC35C  2C 03 00 00 */	cmpwi r3, 0
/* 802F0700 002EC360  7C 7E 1B 78 */	mr r30, r3
/* 802F0704 002EC364  41 80 00 2C */	blt lbl_802F0730
/* 802F0708 002EC368  80 62 AA 30 */	lwz r3, lbl_80643030-_SDA2_BASE_(r2)
/* 802F070C 002EC36C  80 03 00 0C */	lwz r0, 0xc(r3)
/* 802F0710 002EC370  28 00 00 01 */	cmplwi r0, 1
/* 802F0714 002EC374  40 82 00 14 */	bne lbl_802F0728
/* 802F0718 002EC378  48 00 1E 35 */	bl MPiStartupParentLater
/* 802F071C 002EC37C  2C 03 00 00 */	cmpwi r3, 0
/* 802F0720 002EC380  7C 7E 1B 78 */	mr r30, r3
/* 802F0724 002EC384  41 80 00 0C */	blt lbl_802F0730
lbl_802F0728:
/* 802F0728 002EC388  48 00 2A 7D */	bl MPiStartupNotificationLater
/* 802F072C 002EC38C  7C 7E 1B 78 */	mr r30, r3
lbl_802F0730:
/* 802F0730 002EC390  2C 1E 00 00 */	cmpwi r30, 0
/* 802F0734 002EC394  40 80 00 10 */	bge lbl_802F0744
/* 802F0738 002EC398  48 00 00 29 */	bl MPCleanup
/* 802F073C 002EC39C  7F C3 F3 78 */	mr r3, r30
/* 802F0740 002EC3A0  48 00 00 08 */	b lbl_802F0748
lbl_802F0744:
/* 802F0744 002EC3A4  38 60 00 00 */	li r3, 0
lbl_802F0748:
/* 802F0748 002EC3A8  80 01 00 14 */	lwz r0, 0x14(r1)
/* 802F074C 002EC3AC  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 802F0750 002EC3B0  83 C1 00 08 */	lwz r30, 8(r1)
/* 802F0754 002EC3B4  7C 08 03 A6 */	mtlr r0
/* 802F0758 002EC3B8  38 21 00 10 */	addi r1, r1, 0x10
/* 802F075C 002EC3BC  4E 80 00 20 */	blr

.global MPCleanup
MPCleanup:
/* 802F0760 002EC3C0  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 802F0764 002EC3C4  7C 08 02 A6 */	mflr r0
/* 802F0768 002EC3C8  90 01 00 14 */	stw r0, 0x14(r1)
/* 802F076C 002EC3CC  93 E1 00 0C */	stw r31, 0xc(r1)
/* 802F0770 002EC3D0  93 C1 00 08 */	stw r30, 8(r1)
/* 802F0774 002EC3D4  48 00 06 01 */	bl MPiCleanupWD
/* 802F0778 002EC3D8  80 6D 8B F4 */	lwz r3, lbl_8063DEB4-_SDA_BASE_(r13)
/* 802F077C 002EC3DC  2C 03 00 00 */	cmpwi r3, 0
/* 802F0780 002EC3E0  41 80 00 14 */	blt lbl_802F0794
/* 802F0784 002EC3E4  38 00 FF FF */	li r0, -1
/* 802F0788 002EC3E8  90 0D 8B F4 */	stw r0, lbl_8063DEB4-_SDA_BASE_(r13)
/* 802F078C 002EC3EC  4B FF D0 C9 */	bl NCDUnlockWirelessDriver
/* 802F0790 002EC3F0  2C 03 00 00 */	cmpwi r3, 0
lbl_802F0794:
/* 802F0794 002EC3F4  48 00 2A 79 */	bl MPiCleanupNotificationEarlier
/* 802F0798 002EC3F8  48 00 1F C9 */	bl MPiCleanupParentEarlier
/* 802F079C 002EC3FC  48 00 0D D1 */	bl MPiCleanupTxRxEarlier
/* 802F07A0 002EC400  4B F7 DF BD */	bl OSDisableInterrupts
/* 802F07A4 002EC404  3B E0 00 00 */	li r31, 0
/* 802F07A8 002EC408  7C 7E 1B 78 */	mr r30, r3
/* 802F07AC 002EC40C  93 ED AF 38 */	stw r31, lbl_806401F8-_SDA_BASE_(r13)
/* 802F07B0 002EC410  48 00 2D 3D */	bl MPiCleanupPort
/* 802F07B4 002EC414  48 00 33 79 */	bl MPiCleanupBeacon
/* 802F07B8 002EC418  48 00 2A AD */	bl MPiCleanupNotification
/* 802F07BC 002EC41C  80 62 AA 30 */	lwz r3, lbl_80643030-_SDA2_BASE_(r2)
/* 802F07C0 002EC420  7C 03 F8 40 */	cmplw r3, r31
/* 802F07C4 002EC424  41 82 00 14 */	beq lbl_802F07D8
/* 802F07C8 002EC428  80 03 00 0C */	lwz r0, 0xc(r3)
/* 802F07CC 002EC42C  28 00 00 01 */	cmplwi r0, 1
/* 802F07D0 002EC430  40 82 00 08 */	bne lbl_802F07D8
/* 802F07D4 002EC434  48 00 20 35 */	bl MPiCleanupParent
lbl_802F07D8:
/* 802F07D8 002EC438  48 00 0E 51 */	bl MPiCleanupTxRx
/* 802F07DC 002EC43C  48 00 16 C9 */	bl MPiCleanupConnection
/* 802F07E0 002EC440  80 62 AA 30 */	lwz r3, lbl_80643030-_SDA2_BASE_(r2)
/* 802F07E4 002EC444  38 00 00 00 */	li r0, 0
/* 802F07E8 002EC448  7C 03 00 40 */	cmplw r3, r0
/* 802F07EC 002EC44C  41 82 00 40 */	beq lbl_802F082C
/* 802F07F0 002EC450  83 E3 00 04 */	lwz r31, 4(r3)
/* 802F07F4 002EC454  38 63 59 84 */	addi r3, r3, 0x5984
/* 802F07F8 002EC458  38 80 00 00 */	li r4, 0
/* 802F07FC 002EC45C  38 A0 07 00 */	li r5, 0x700
/* 802F0800 002EC460  4B D1 39 05 */	bl memset
/* 802F0804 002EC464  80 62 AA 30 */	lwz r3, lbl_80643030-_SDA2_BASE_(r2)
/* 802F0808 002EC468  38 80 00 00 */	li r4, 0
/* 802F080C 002EC46C  38 A0 74 E0 */	li r5, 0x74e0
/* 802F0810 002EC470  4B D1 38 F5 */	bl memset
/* 802F0814 002EC474  80 62 AA 30 */	lwz r3, lbl_80643030-_SDA2_BASE_(r2)
/* 802F0818 002EC478  7F EC FB 78 */	mr r12, r31
/* 802F081C 002EC47C  88 03 FF FF */	lbz r0, -1(r3)
/* 802F0820 002EC480  7C 60 18 50 */	subf r3, r0, r3
/* 802F0824 002EC484  7D 89 03 A6 */	mtctr r12
/* 802F0828 002EC488  4E 80 04 21 */	bctrl
lbl_802F082C:
/* 802F082C 002EC48C  38 00 00 00 */	li r0, 0
/* 802F0830 002EC490  7F C3 F3 78 */	mr r3, r30
/* 802F0834 002EC494  90 02 AA 30 */	stw r0, lbl_80643030-_SDA2_BASE_(r2)
/* 802F0838 002EC498  4B F7 DF 4D */	bl OSRestoreInterrupts
/* 802F083C 002EC49C  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 802F0840 002EC4A0  38 60 00 00 */	li r3, 0
/* 802F0844 002EC4A4  83 C1 00 08 */	lwz r30, 8(r1)
/* 802F0848 002EC4A8  80 01 00 14 */	lwz r0, 0x14(r1)
/* 802F084C 002EC4AC  7C 08 03 A6 */	mtlr r0
/* 802F0850 002EC4B0  38 21 00 10 */	addi r1, r1, 0x10
/* 802F0854 002EC4B4  4E 80 00 20 */	blr

.global MPiStartupSystem
MPiStartupSystem:
/* 802F0858 002EC4B8  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802F085C 002EC4BC  7C 08 02 A6 */	mflr r0
/* 802F0860 002EC4C0  81 83 00 00 */	lwz r12, 0(r3)
/* 802F0864 002EC4C4  90 01 00 24 */	stw r0, 0x24(r1)
/* 802F0868 002EC4C8  2C 0C 00 00 */	cmpwi r12, 0
/* 802F086C 002EC4CC  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 802F0870 002EC4D0  93 C1 00 18 */	stw r30, 0x18(r1)
/* 802F0874 002EC4D4  7C 7E 1B 78 */	mr r30, r3
/* 802F0878 002EC4D8  93 A1 00 14 */	stw r29, 0x14(r1)
/* 802F087C 002EC4DC  41 82 00 10 */	beq lbl_802F088C
/* 802F0880 002EC4E0  80 03 00 04 */	lwz r0, 4(r3)
/* 802F0884 002EC4E4  2C 00 00 00 */	cmpwi r0, 0
/* 802F0888 002EC4E8  40 82 00 0C */	bne lbl_802F0894
lbl_802F088C:
/* 802F088C 002EC4EC  38 60 FF 01 */	li r3, -255
/* 802F0890 002EC4F0  48 00 01 04 */	b lbl_802F0994
lbl_802F0894:
/* 802F0894 002EC4F4  38 60 75 20 */	li r3, 0x7520
/* 802F0898 002EC4F8  7D 89 03 A6 */	mtctr r12
/* 802F089C 002EC4FC  4E 80 04 21 */	bctrl
/* 802F08A0 002EC500  38 03 00 20 */	addi r0, r3, 0x20
/* 802F08A4 002EC504  54 1D 00 34 */	rlwinm r29, r0, 0, 0, 0x1a
/* 802F08A8 002EC508  7C 03 E8 50 */	subf r0, r3, r29
/* 802F08AC 002EC50C  98 1D FF FF */	stb r0, -1(r29)
/* 802F08B0 002EC510  80 0D 8B F8 */	lwz r0, lbl_8063DEB8-_SDA_BASE_(r13)
/* 802F08B4 002EC514  2C 00 00 00 */	cmpwi r0, 0
/* 802F08B8 002EC518  41 82 00 50 */	beq lbl_802F0908
/* 802F08BC 002EC51C  2C 1D 00 00 */	cmpwi r29, 0
/* 802F08C0 002EC520  41 82 00 48 */	beq lbl_802F0908
/* 802F08C4 002EC524  57 A4 00 FE */	clrlwi r4, r29, 3
/* 802F08C8 002EC528  3C 00 10 00 */	lis r0, 0x1000
/* 802F08CC 002EC52C  7C 04 00 40 */	cmplw r4, r0
/* 802F08D0 002EC530  38 60 00 00 */	li r3, 0
/* 802F08D4 002EC534  41 80 00 14 */	blt lbl_802F08E8
/* 802F08D8 002EC538  3C 00 18 00 */	lis r0, 0x1800
/* 802F08DC 002EC53C  7C 04 00 40 */	cmplw r4, r0
/* 802F08E0 002EC540  40 80 00 08 */	bge lbl_802F08E8
/* 802F08E4 002EC544  38 60 00 01 */	li r3, 1
lbl_802F08E8:
/* 802F08E8 002EC548  2C 03 00 00 */	cmpwi r3, 0
/* 802F08EC 002EC54C  40 82 00 1C */	bne lbl_802F0908
/* 802F08F0 002EC550  88 1D FF FF */	lbz r0, -1(r29)
/* 802F08F4 002EC554  81 9E 00 04 */	lwz r12, 4(r30)
/* 802F08F8 002EC558  7C 60 E8 50 */	subf r3, r0, r29
/* 802F08FC 002EC55C  7D 89 03 A6 */	mtctr r12
/* 802F0900 002EC560  4E 80 04 21 */	bctrl
/* 802F0904 002EC564  3B A0 00 00 */	li r29, 0
lbl_802F0908:
/* 802F0908 002EC568  2C 1D 00 00 */	cmpwi r29, 0
/* 802F090C 002EC56C  40 82 00 14 */	bne lbl_802F0920
/* 802F0910 002EC570  38 00 00 00 */	li r0, 0
/* 802F0914 002EC574  38 60 FF 10 */	li r3, -240
/* 802F0918 002EC578  90 02 AA 30 */	stw r0, lbl_80643030-_SDA2_BASE_(r2)
/* 802F091C 002EC57C  48 00 00 78 */	b lbl_802F0994
lbl_802F0920:
/* 802F0920 002EC580  93 A2 AA 30 */	stw r29, lbl_80643030-_SDA2_BASE_(r2)
/* 802F0924 002EC584  7F A3 EB 78 */	mr r3, r29
/* 802F0928 002EC588  38 80 00 00 */	li r4, 0
/* 802F092C 002EC58C  38 A0 74 E0 */	li r5, 0x74e0
/* 802F0930 002EC590  4B D1 37 D5 */	bl memset
/* 802F0934 002EC594  7F A3 EB 78 */	mr r3, r29
/* 802F0938 002EC598  7F C4 F3 78 */	mr r4, r30
/* 802F093C 002EC59C  38 A0 01 40 */	li r5, 0x140
/* 802F0940 002EC5A0  4B D1 36 C1 */	bl memcpy
/* 802F0944 002EC5A4  3B FD 59 84 */	addi r31, r29, 0x5984
/* 802F0948 002EC5A8  38 80 00 00 */	li r4, 0
/* 802F094C 002EC5AC  7F E3 FB 78 */	mr r3, r31
/* 802F0950 002EC5B0  38 A0 07 00 */	li r5, 0x700
/* 802F0954 002EC5B4  4B D1 37 B1 */	bl memset
/* 802F0958 002EC5B8  3B DD 58 E4 */	addi r30, r29, 0x58e4
/* 802F095C 002EC5BC  38 9D 59 04 */	addi r4, r29, 0x5904
/* 802F0960 002EC5C0  7F C3 F3 78 */	mr r3, r30
/* 802F0964 002EC5C4  38 A0 00 20 */	li r5, 0x20
/* 802F0968 002EC5C8  4B F7 E5 91 */	bl OSInitMessageQueue
/* 802F096C 002EC5CC  3B A0 00 00 */	li r29, 0
lbl_802F0970:
/* 802F0970 002EC5D0  7F C3 F3 78 */	mr r3, r30
/* 802F0974 002EC5D4  7F E4 FB 78 */	mr r4, r31
/* 802F0978 002EC5D8  38 A0 00 00 */	li r5, 0
/* 802F097C 002EC5DC  4B F7 E5 DD */	bl OSSendMessage
/* 802F0980 002EC5E0  3B BD 00 01 */	addi r29, r29, 1
/* 802F0984 002EC5E4  3B FF 00 38 */	addi r31, r31, 0x38
/* 802F0988 002EC5E8  2C 1D 00 20 */	cmpwi r29, 0x20
/* 802F098C 002EC5EC  41 80 FF E4 */	blt lbl_802F0970
/* 802F0990 002EC5F0  38 60 00 00 */	li r3, 0
lbl_802F0994:
/* 802F0994 002EC5F4  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802F0998 002EC5F8  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 802F099C 002EC5FC  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 802F09A0 002EC600  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 802F09A4 002EC604  7C 08 03 A6 */	mtlr r0
/* 802F09A8 002EC608  38 21 00 20 */	addi r1, r1, 0x20
/* 802F09AC 002EC60C  4E 80 00 20 */	blr

.global MPiAllocateCommandBlock
MPiAllocateCommandBlock:
/* 802F09B0 002EC610  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802F09B4 002EC614  7C 08 02 A6 */	mflr r0
/* 802F09B8 002EC618  2C 04 00 01 */	cmpwi r4, 1
/* 802F09BC 002EC61C  90 01 00 24 */	stw r0, 0x24(r1)
/* 802F09C0 002EC620  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 802F09C4 002EC624  7C 7F 1B 78 */	mr r31, r3
/* 802F09C8 002EC628  40 82 00 1C */	bne lbl_802F09E4
/* 802F09CC 002EC62C  80 62 AA 30 */	lwz r3, lbl_80643030-_SDA2_BASE_(r2)
/* 802F09D0 002EC630  38 81 00 08 */	addi r4, r1, 8
/* 802F09D4 002EC634  38 A0 00 01 */	li r5, 1
/* 802F09D8 002EC638  38 63 58 E4 */	addi r3, r3, 0x58e4
/* 802F09DC 002EC63C  4B F7 E6 45 */	bl OSReceiveMessage
/* 802F09E0 002EC640  48 00 00 30 */	b lbl_802F0A10
lbl_802F09E4:
/* 802F09E4 002EC644  80 62 AA 30 */	lwz r3, lbl_80643030-_SDA2_BASE_(r2)
/* 802F09E8 002EC648  38 81 00 08 */	addi r4, r1, 8
/* 802F09EC 002EC64C  38 A0 00 00 */	li r5, 0
/* 802F09F0 002EC650  38 63 58 E4 */	addi r3, r3, 0x58e4
/* 802F09F4 002EC654  4B F7 E6 2D */	bl OSReceiveMessage
/* 802F09F8 002EC658  2C 03 00 00 */	cmpwi r3, 0
/* 802F09FC 002EC65C  40 82 00 14 */	bne lbl_802F0A10
/* 802F0A00 002EC660  38 00 00 00 */	li r0, 0
/* 802F0A04 002EC664  38 60 FF 13 */	li r3, -237
/* 802F0A08 002EC668  90 1F 00 00 */	stw r0, 0(r31)
/* 802F0A0C 002EC66C  48 00 00 24 */	b lbl_802F0A30
lbl_802F0A10:
/* 802F0A10 002EC670  80 01 00 08 */	lwz r0, 8(r1)
/* 802F0A14 002EC674  90 1F 00 00 */	stw r0, 0(r31)
/* 802F0A18 002EC678  80 01 00 08 */	lwz r0, 8(r1)
/* 802F0A1C 002EC67C  2C 00 00 00 */	cmpwi r0, 0
/* 802F0A20 002EC680  40 82 00 0C */	bne lbl_802F0A2C
/* 802F0A24 002EC684  38 60 FF 00 */	li r3, -256
/* 802F0A28 002EC688  48 00 00 08 */	b lbl_802F0A30
lbl_802F0A2C:
/* 802F0A2C 002EC68C  38 60 00 00 */	li r3, 0
lbl_802F0A30:
/* 802F0A30 002EC690  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802F0A34 002EC694  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 802F0A38 002EC698  7C 08 03 A6 */	mtlr r0
/* 802F0A3C 002EC69C  38 21 00 20 */	addi r1, r1, 0x20
/* 802F0A40 002EC6A0  4E 80 00 20 */	blr

.global MPiFreeCommandBlock
MPiFreeCommandBlock:
/* 802F0A44 002EC6A4  80 C2 AA 30 */	lwz r6, lbl_80643030-_SDA2_BASE_(r2)
/* 802F0A48 002EC6A8  7C 64 1B 78 */	mr r4, r3
/* 802F0A4C 002EC6AC  38 A0 00 00 */	li r5, 0
/* 802F0A50 002EC6B0  38 66 58 E4 */	addi r3, r6, 0x58e4
/* 802F0A54 002EC6B4  4B F7 E5 04 */	b OSSendMessage

.global MPiSendRequest
MPiSendRequest:
/* 802F0A58 002EC6B8  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802F0A5C 002EC6BC  7C 08 02 A6 */	mflr r0
/* 802F0A60 002EC6C0  2C 05 00 01 */	cmpwi r5, 1
/* 802F0A64 002EC6C4  90 01 00 24 */	stw r0, 0x24(r1)
/* 802F0A68 002EC6C8  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 802F0A6C 002EC6CC  93 C1 00 18 */	stw r30, 0x18(r1)
/* 802F0A70 002EC6D0  7C 9E 23 78 */	mr r30, r4
/* 802F0A74 002EC6D4  93 A1 00 14 */	stw r29, 0x14(r1)
/* 802F0A78 002EC6D8  7C 7D 1B 78 */	mr r29, r3
/* 802F0A7C 002EC6DC  40 82 00 3C */	bne lbl_802F0AB8
/* 802F0A80 002EC6E0  38 64 00 08 */	addi r3, r4, 8
/* 802F0A84 002EC6E4  38 80 00 00 */	li r4, 0
/* 802F0A88 002EC6E8  4B F8 03 E1 */	bl OSInitSemaphore
/* 802F0A8C 002EC6EC  4B F7 DC D1 */	bl OSDisableInterrupts
/* 802F0A90 002EC6F0  7C 7F 1B 78 */	mr r31, r3
/* 802F0A94 002EC6F4  7F A3 EB 78 */	mr r3, r29
/* 802F0A98 002EC6F8  7F C4 F3 78 */	mr r4, r30
/* 802F0A9C 002EC6FC  38 A0 00 01 */	li r5, 1
/* 802F0AA0 002EC700  4B F7 E4 B9 */	bl OSSendMessage
/* 802F0AA4 002EC704  38 7E 00 08 */	addi r3, r30, 8
/* 802F0AA8 002EC708  4B F8 04 19 */	bl OSWaitSemaphore
/* 802F0AAC 002EC70C  7F E3 FB 78 */	mr r3, r31
/* 802F0AB0 002EC710  4B F7 DC D5 */	bl OSRestoreInterrupts
/* 802F0AB4 002EC714  48 00 00 1C */	b lbl_802F0AD0
lbl_802F0AB8:
/* 802F0AB8 002EC718  38 A0 00 00 */	li r5, 0
/* 802F0ABC 002EC71C  4B F7 E4 9D */	bl OSSendMessage
/* 802F0AC0 002EC720  2C 03 00 00 */	cmpwi r3, 0
/* 802F0AC4 002EC724  40 82 00 0C */	bne lbl_802F0AD0
/* 802F0AC8 002EC728  38 60 FF 13 */	li r3, -237
/* 802F0ACC 002EC72C  48 00 00 08 */	b lbl_802F0AD4
lbl_802F0AD0:
/* 802F0AD0 002EC730  38 60 00 00 */	li r3, 0
lbl_802F0AD4:
/* 802F0AD4 002EC734  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802F0AD8 002EC738  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 802F0ADC 002EC73C  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 802F0AE0 002EC740  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 802F0AE4 002EC744  7C 08 03 A6 */	mtlr r0
/* 802F0AE8 002EC748  38 21 00 20 */	addi r1, r1, 0x20
/* 802F0AEC 002EC74C  4E 80 00 20 */	blr

.global MPiRespondToWaitingRequest
MPiRespondToWaitingRequest:
/* 802F0AF0 002EC750  80 04 00 04 */	lwz r0, 4(r4)
/* 802F0AF4 002EC754  90 64 00 14 */	stw r3, 0x14(r4)
/* 802F0AF8 002EC758  2C 00 00 01 */	cmpwi r0, 1
/* 802F0AFC 002EC75C  40 82 00 0C */	bne lbl_802F0B08
/* 802F0B00 002EC760  38 64 00 08 */	addi r3, r4, 8
/* 802F0B04 002EC764  4B F8 04 7C */	b OSSignalSemaphore
lbl_802F0B08:
/* 802F0B08 002EC768  81 84 00 18 */	lwz r12, 0x18(r4)
/* 802F0B0C 002EC76C  7D 89 03 A6 */	mtctr r12
/* 802F0B10 002EC770  4E 80 04 20 */	bctr

.global MPiIsEqualMacAddress
MPiIsEqualMacAddress:
/* 802F0B14 002EC774  88 A3 00 00 */	lbz r5, 0(r3)
/* 802F0B18 002EC778  88 04 00 00 */	lbz r0, 0(r4)
/* 802F0B1C 002EC77C  7C 05 00 40 */	cmplw r5, r0
/* 802F0B20 002EC780  41 82 00 0C */	beq lbl_802F0B2C
/* 802F0B24 002EC784  38 60 00 00 */	li r3, 0
/* 802F0B28 002EC788  4E 80 00 20 */	blr
lbl_802F0B2C:
/* 802F0B2C 002EC78C  88 A3 00 01 */	lbz r5, 1(r3)
/* 802F0B30 002EC790  88 04 00 01 */	lbz r0, 1(r4)
/* 802F0B34 002EC794  7C 05 00 40 */	cmplw r5, r0
/* 802F0B38 002EC798  41 82 00 0C */	beq lbl_802F0B44
/* 802F0B3C 002EC79C  38 60 00 00 */	li r3, 0
/* 802F0B40 002EC7A0  4E 80 00 20 */	blr
lbl_802F0B44:
/* 802F0B44 002EC7A4  88 A3 00 02 */	lbz r5, 2(r3)
/* 802F0B48 002EC7A8  88 04 00 02 */	lbz r0, 2(r4)
/* 802F0B4C 002EC7AC  7C 05 00 40 */	cmplw r5, r0
/* 802F0B50 002EC7B0  41 82 00 0C */	beq lbl_802F0B5C
/* 802F0B54 002EC7B4  38 60 00 00 */	li r3, 0
/* 802F0B58 002EC7B8  4E 80 00 20 */	blr
lbl_802F0B5C:
/* 802F0B5C 002EC7BC  88 A3 00 03 */	lbz r5, 3(r3)
/* 802F0B60 002EC7C0  88 04 00 03 */	lbz r0, 3(r4)
/* 802F0B64 002EC7C4  7C 05 00 40 */	cmplw r5, r0
/* 802F0B68 002EC7C8  41 82 00 0C */	beq lbl_802F0B74
/* 802F0B6C 002EC7CC  38 60 00 00 */	li r3, 0
/* 802F0B70 002EC7D0  4E 80 00 20 */	blr
lbl_802F0B74:
/* 802F0B74 002EC7D4  88 A3 00 04 */	lbz r5, 4(r3)
/* 802F0B78 002EC7D8  88 04 00 04 */	lbz r0, 4(r4)
/* 802F0B7C 002EC7DC  7C 05 00 40 */	cmplw r5, r0
/* 802F0B80 002EC7E0  41 82 00 0C */	beq lbl_802F0B8C
/* 802F0B84 002EC7E4  38 60 00 00 */	li r3, 0
/* 802F0B88 002EC7E8  4E 80 00 20 */	blr
lbl_802F0B8C:
/* 802F0B8C 002EC7EC  88 A3 00 05 */	lbz r5, 5(r3)
/* 802F0B90 002EC7F0  88 04 00 05 */	lbz r0, 5(r4)
/* 802F0B94 002EC7F4  7C 05 00 40 */	cmplw r5, r0
/* 802F0B98 002EC7F8  41 82 00 0C */	beq lbl_802F0BA4
/* 802F0B9C 002EC7FC  38 60 00 00 */	li r3, 0
/* 802F0BA0 002EC800  4E 80 00 20 */	blr
lbl_802F0BA4:
/* 802F0BA4 002EC804  38 60 00 01 */	li r3, 1
/* 802F0BA8 002EC808  4E 80 00 20 */	blr

.global MPiGetNewTgid
MPiGetNewTgid:
/* 802F0BAC 002EC80C  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 802F0BB0 002EC810  7C 08 02 A6 */	mflr r0
/* 802F0BB4 002EC814  90 01 00 14 */	stw r0, 0x14(r1)
/* 802F0BB8 002EC818  4B F8 1C 01 */	bl OSGetTime
/* 802F0BBC 002EC81C  3C 60 00 01 */	lis r3, 0x0000FFFF@ha
/* 802F0BC0 002EC820  38 03 FF FF */	addi r0, r3, 0x0000FFFF@l
/* 802F0BC4 002EC824  7C 83 00 38 */	and r3, r4, r0
/* 802F0BC8 002EC828  80 01 00 14 */	lwz r0, 0x14(r1)
/* 802F0BCC 002EC82C  7C 08 03 A6 */	mtlr r0
/* 802F0BD0 002EC830  38 21 00 10 */	addi r1, r1, 0x10
/* 802F0BD4 002EC834  4E 80 00 20 */	blr

.global MPiCountPopulation
MPiCountPopulation:
/* 802F0BD8 002EC838  3C C0 55 55 */	lis r6, 0x55555555@ha
/* 802F0BDC 002EC83C  3C A0 33 33 */	lis r5, 0x33333333@ha
/* 802F0BE0 002EC840  54 67 F8 7E */	srwi r7, r3, 1
/* 802F0BE4 002EC844  3C 80 0F 0F */	lis r4, 0x0F0F0F0F@ha
/* 802F0BE8 002EC848  38 06 55 55 */	addi r0, r6, 0x55555555@l
/* 802F0BEC 002EC84C  38 A5 33 33 */	addi r5, r5, 0x33333333@l
/* 802F0BF0 002EC850  7C E6 00 38 */	and r6, r7, r0
/* 802F0BF4 002EC854  38 04 0F 0F */	addi r0, r4, 0x0F0F0F0F@l
/* 802F0BF8 002EC858  7C 86 18 50 */	subf r4, r6, r3
/* 802F0BFC 002EC85C  54 83 F0 BE */	srwi r3, r4, 2
/* 802F0C00 002EC860  7C 84 28 38 */	and r4, r4, r5
/* 802F0C04 002EC864  7C 63 28 38 */	and r3, r3, r5
/* 802F0C08 002EC868  7C 84 1A 14 */	add r4, r4, r3
/* 802F0C0C 002EC86C  54 83 E1 3E */	srwi r3, r4, 4
/* 802F0C10 002EC870  7C 84 1A 14 */	add r4, r4, r3
/* 802F0C14 002EC874  7C 84 00 38 */	and r4, r4, r0
/* 802F0C18 002EC878  54 80 C2 3E */	srwi r0, r4, 8
/* 802F0C1C 002EC87C  7C 84 02 14 */	add r4, r4, r0
/* 802F0C20 002EC880  54 80 84 3E */	srwi r0, r4, 0x10
/* 802F0C24 002EC884  7C 84 02 14 */	add r4, r4, r0
/* 802F0C28 002EC888  54 83 06 3E */	clrlwi r3, r4, 0x18
/* 802F0C2C 002EC88C  4E 80 00 20 */	blr