summaryrefslogtreecommitdiff
path: root/asm/SDK/BTE/hcisu_h2.s
blob: 30b046cf3de861691450b0f661dd4f23bdc40d84 (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
.include "macros.inc"

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

hcisu_h2_usb_cback:
/* 802BB1F8 002B6E58  2C 03 00 04 */	cmpwi r3, 4
/* 802BB1FC 002B6E5C  41 82 00 14 */	beq lbl_802BB210
/* 802BB200 002B6E60  4C 80 00 20 */	bgelr
/* 802BB204 002B6E64  2C 03 00 00 */	cmpwi r3, 0
/* 802BB208 002B6E68  4D 82 00 20 */	beqlr
/* 802BB20C 002B6E6C  4E 80 00 20 */	blr
lbl_802BB210:
/* 802BB210 002B6E70  7C 83 07 74 */	extsb r3, r4
/* 802BB214 002B6E74  48 00 1E CC */	b bta_usb_close_evt
/* 802BB218 002B6E78  4E 80 00 20 */	blr

.global hcisu_h2_receive_msg
hcisu_h2_receive_msg:
/* 802BB21C 002B6E7C  94 21 FF A0 */	stwu r1, -0x60(r1)
/* 802BB220 002B6E80  7C 08 02 A6 */	mflr r0
/* 802BB224 002B6E84  90 01 00 64 */	stw r0, 0x64(r1)
/* 802BB228 002B6E88  39 61 00 60 */	addi r11, r1, 0x60
/* 802BB22C 002B6E8C  4B F0 BE C9 */	bl __save_gpr
/* 802BB230 002B6E90  88 04 00 1E */	lbz r0, 0x1e(r4)
/* 802BB234 002B6E94  7C 8F 23 78 */	mr r15, r4
/* 802BB238 002B6E98  3A 60 00 00 */	li r19, 0
/* 802BB23C 002B6E9C  28 00 00 02 */	cmplwi r0, 2
/* 802BB240 002B6EA0  41 82 00 0C */	beq lbl_802BB24C
/* 802BB244 002B6EA4  38 60 00 00 */	li r3, 0
/* 802BB248 002B6EA8  48 00 03 54 */	b lbl_802BB59C
lbl_802BB24C:
/* 802BB24C 002B6EAC  3A 83 00 01 */	addi r20, r3, 1
/* 802BB250 002B6EB0  54 60 0B FC */	rlwinm r0, r3, 1, 0xf, 0x1e
/* 802BB254 002B6EB4  3F E0 80 56 */	lis r31, lbl_80564DA0@ha
/* 802BB258 002B6EB8  7E C4 1A 14 */	add r22, r4, r3
/* 802BB25C 002B6EBC  56 90 04 3E */	clrlwi r16, r20, 0x10
/* 802BB260 002B6EC0  54 77 13 BA */	rlwinm r23, r3, 2, 0xe, 0x1d
/* 802BB264 002B6EC4  7E A4 02 14 */	add r21, r4, r0
/* 802BB268 002B6EC8  3B FF 4D A0 */	addi r31, r31, lbl_80564DA0@l
/* 802BB26C 002B6ECC  3B A0 00 00 */	li r29, 0
/* 802BB270 002B6ED0  3B C0 00 04 */	li r30, 4
/* 802BB274 002B6ED4  3B 82 A4 38 */	addi r28, r2, lbl_80642A38-_SDA2_BASE_
/* 802BB278 002B6ED8  3B 20 00 03 */	li r25, 3
/* 802BB27C 002B6EDC  3B 00 00 02 */	li r24, 2
/* 802BB280 002B6EE0  3D C0 80 44 */	lis r14, 0x8044
/* 802BB284 002B6EE4  3B 42 A4 40 */	addi r26, r2, lbl_80642A40-_SDA2_BASE_
/* 802BB288 002B6EE8  3B 60 00 01 */	li r27, 1
lbl_802BB28C:
/* 802BB28C 002B6EEC  56 03 06 3E */	clrlwi r3, r16, 0x18
/* 802BB290 002B6EF0  38 81 00 08 */	addi r4, r1, 8
/* 802BB294 002B6EF4  38 A0 00 01 */	li r5, 1
/* 802BB298 002B6EF8  48 00 14 59 */	bl UUSB_Read
/* 802BB29C 002B6EFC  54 60 04 3F */	clrlwi. r0, r3, 0x10
/* 802BB2A0 002B6F00  41 82 02 F8 */	beq lbl_802BB598
/* 802BB2A4 002B6F04  88 16 00 1A */	lbz r0, 0x1a(r22)
/* 802BB2A8 002B6F08  3A 20 00 00 */	li r17, 0
/* 802BB2AC 002B6F0C  3A 73 00 01 */	addi r19, r19, 1
/* 802BB2B0 002B6F10  2C 00 00 02 */	cmpwi r0, 2
/* 802BB2B4 002B6F14  41 82 01 C8 */	beq lbl_802BB47C
/* 802BB2B8 002B6F18  40 80 00 14 */	bge lbl_802BB2CC
/* 802BB2BC 002B6F1C  2C 00 00 00 */	cmpwi r0, 0
/* 802BB2C0 002B6F20  41 82 00 1C */	beq lbl_802BB2DC
/* 802BB2C4 002B6F24  40 80 00 C0 */	bge lbl_802BB384
/* 802BB2C8 002B6F28  48 00 02 B0 */	b lbl_802BB578
lbl_802BB2CC:
/* 802BB2CC 002B6F2C  2C 00 00 04 */	cmpwi r0, 4
/* 802BB2D0 002B6F30  41 82 02 90 */	beq lbl_802BB560
/* 802BB2D4 002B6F34  40 80 02 A4 */	bge lbl_802BB578
/* 802BB2D8 002B6F38  48 00 01 F0 */	b lbl_802BB4C8
lbl_802BB2DC:
/* 802BB2DC 002B6F3C  28 10 00 01 */	cmplwi r16, 1
/* 802BB2E0 002B6F40  40 82 00 18 */	bne lbl_802BB2F8
/* 802BB2E4 002B6F44  38 60 00 02 */	li r3, 2
/* 802BB2E8 002B6F48  4B FF E9 65 */	bl GKI_getpoolbuf
/* 802BB2EC 002B6F4C  7C 6F B9 2E */	stwx r3, r15, r23
/* 802BB2F0 002B6F50  9B D6 00 14 */	stb r30, 0x14(r22)
/* 802BB2F4 002B6F54  48 00 00 38 */	b lbl_802BB32C
lbl_802BB2F8:
/* 802BB2F8 002B6F58  28 10 00 02 */	cmplwi r16, 2
/* 802BB2FC 002B6F5C  40 82 00 18 */	bne lbl_802BB314
/* 802BB300 002B6F60  38 60 00 03 */	li r3, 3
/* 802BB304 002B6F64  4B FF E9 49 */	bl GKI_getpoolbuf
/* 802BB308 002B6F68  7C 6F B9 2E */	stwx r3, r15, r23
/* 802BB30C 002B6F6C  9B 16 00 14 */	stb r24, 0x14(r22)
/* 802BB310 002B6F70  48 00 00 1C */	b lbl_802BB32C
lbl_802BB314:
/* 802BB314 002B6F74  28 10 00 03 */	cmplwi r16, 3
/* 802BB318 002B6F78  40 82 02 60 */	bne lbl_802BB578
/* 802BB31C 002B6F7C  38 60 00 01 */	li r3, 1
/* 802BB320 002B6F80  4B FF E9 2D */	bl GKI_getpoolbuf
/* 802BB324 002B6F84  7C 6F B9 2E */	stwx r3, r15, r23
/* 802BB328 002B6F88  9B 36 00 14 */	stb r25, 0x14(r22)
lbl_802BB32C:
/* 802BB32C 002B6F8C  7C 6F B8 2E */	lwzx r3, r15, r23
/* 802BB330 002B6F90  2C 03 00 00 */	cmpwi r3, 0
/* 802BB334 002B6F94  41 82 00 30 */	beq lbl_802BB364
/* 802BB338 002B6F98  B3 A3 00 02 */	sth r29, 2(r3)
/* 802BB33C 002B6F9C  88 16 00 14 */	lbz r0, 0x14(r22)
/* 802BB340 002B6FA0  7C 6F B8 2E */	lwzx r3, r15, r23
/* 802BB344 002B6FA4  54 00 08 3C */	slwi r0, r0, 1
/* 802BB348 002B6FA8  7C 9A 02 14 */	add r4, r26, r0
/* 802BB34C 002B6FAC  A0 04 FF FE */	lhz r0, -2(r4)
/* 802BB350 002B6FB0  B0 03 00 00 */	sth r0, 0(r3)
/* 802BB354 002B6FB4  7C 6F B8 2E */	lwzx r3, r15, r23
/* 802BB358 002B6FB8  B3 A3 00 04 */	sth r29, 4(r3)
/* 802BB35C 002B6FBC  9B 76 00 1A */	stb r27, 0x1a(r22)
/* 802BB360 002B6FC0  48 00 00 14 */	b lbl_802BB374
lbl_802BB364:
/* 802BB364 002B6FC4  38 8E F2 78 */	addi r4, r14, -3464
/* 802BB368 002B6FC8  3C 60 00 07 */	lis r3, 7
/* 802BB36C 002B6FCC  48 00 1B A5 */	bl LogMsg_0
/* 802BB370 002B6FD0  9B 16 00 1A */	stb r24, 0x1a(r22)
lbl_802BB374:
/* 802BB374 002B6FD4  88 16 00 14 */	lbz r0, 0x14(r22)
/* 802BB378 002B6FD8  7C 7C 02 14 */	add r3, r28, r0
/* 802BB37C 002B6FDC  88 03 FF FF */	lbz r0, -1(r3)
/* 802BB380 002B6FE0  B0 15 00 0C */	sth r0, 0xc(r21)
lbl_802BB384:
/* 802BB384 002B6FE4  7C CF B8 2E */	lwzx r6, r15, r23
/* 802BB388 002B6FE8  88 A1 00 08 */	lbz r5, 8(r1)
/* 802BB38C 002B6FEC  A0 86 00 02 */	lhz r4, 2(r6)
/* 802BB390 002B6FF0  7C 66 22 14 */	add r3, r6, r4
/* 802BB394 002B6FF4  38 04 00 01 */	addi r0, r4, 1
/* 802BB398 002B6FF8  98 A3 00 08 */	stb r5, 8(r3)
/* 802BB39C 002B6FFC  B0 06 00 02 */	sth r0, 2(r6)
/* 802BB3A0 002B7000  A0 75 00 0C */	lhz r3, 0xc(r21)
/* 802BB3A4 002B7004  38 63 FF FF */	addi r3, r3, -1
/* 802BB3A8 002B7008  54 60 04 3F */	clrlwi. r0, r3, 0x10
/* 802BB3AC 002B700C  B0 75 00 0C */	sth r3, 0xc(r21)
/* 802BB3B0 002B7010  40 82 00 C0 */	bne lbl_802BB470
/* 802BB3B4 002B7014  88 16 00 14 */	lbz r0, 0x14(r22)
/* 802BB3B8 002B7018  8A 41 00 08 */	lbz r18, 8(r1)
/* 802BB3BC 002B701C  28 00 00 02 */	cmplwi r0, 2
/* 802BB3C0 002B7020  40 82 00 44 */	bne lbl_802BB404
/* 802BB3C4 002B7024  88 16 00 17 */	lbz r0, 0x17(r22)
/* 802BB3C8 002B7028  56 44 42 2E */	rlwinm r4, r18, 8, 8, 0x17
/* 802BB3CC 002B702C  7C 6F B8 2E */	lwzx r3, r15, r23
/* 802BB3D0 002B7030  7C 04 02 14 */	add r0, r4, r0
/* 802BB3D4 002B7034  54 12 04 3E */	clrlwi r18, r0, 0x10
/* 802BB3D8 002B7038  48 01 D2 45 */	bl l2cap_link_chk_pkt_start
/* 802BB3DC 002B703C  2C 03 00 00 */	cmpwi r3, 0
/* 802BB3E0 002B7040  7C 6F B9 2E */	stwx r3, r15, r23
/* 802BB3E4 002B7044  40 82 00 20 */	bne lbl_802BB404
/* 802BB3E8 002B7048  2C 12 00 00 */	cmpwi r18, 0
/* 802BB3EC 002B704C  B2 55 00 0C */	sth r18, 0xc(r21)
/* 802BB3F0 002B7050  40 82 00 0C */	bne lbl_802BB3FC
/* 802BB3F4 002B7054  9B B6 00 1A */	stb r29, 0x1a(r22)
/* 802BB3F8 002B7058  48 00 01 80 */	b lbl_802BB578
lbl_802BB3FC:
/* 802BB3FC 002B705C  9B D6 00 1A */	stb r30, 0x1a(r22)
/* 802BB400 002B7060  48 00 01 78 */	b lbl_802BB578
lbl_802BB404:
/* 802BB404 002B7064  B2 55 00 0C */	sth r18, 0xc(r21)
/* 802BB408 002B7068  7C 6F B8 2E */	lwzx r3, r15, r23
/* 802BB40C 002B706C  4B FF EA 99 */	bl GKI_get_buf_size
/* 802BB410 002B7070  88 16 00 14 */	lbz r0, 0x14(r22)
/* 802BB414 002B7074  54 64 04 3E */	clrlwi r4, r3, 0x10
/* 802BB418 002B7078  7C 7C 02 14 */	add r3, r28, r0
/* 802BB41C 002B707C  88 03 FF FF */	lbz r0, -1(r3)
/* 802BB420 002B7080  7C 72 02 14 */	add r3, r18, r0
/* 802BB424 002B7084  38 03 00 08 */	addi r0, r3, 8
/* 802BB428 002B7088  7C 00 20 40 */	cmplw r0, r4
/* 802BB42C 002B708C  40 81 00 28 */	ble lbl_802BB454
/* 802BB430 002B7090  7C 6F B8 2E */	lwzx r3, r15, r23
/* 802BB434 002B7094  4B FF E9 01 */	bl GKI_freebuf
/* 802BB438 002B7098  7F AF B9 2E */	stwx r29, r15, r23
/* 802BB43C 002B709C  3C 60 80 44 */	lis r3, lbl_8043F2B4@ha
/* 802BB440 002B70A0  38 83 F2 B4 */	addi r4, r3, lbl_8043F2B4@l
/* 802BB444 002B70A4  9B D6 00 1A */	stb r30, 0x1a(r22)
/* 802BB448 002B70A8  3C 60 00 07 */	lis r3, 7
/* 802BB44C 002B70AC  48 00 1A C5 */	bl LogMsg_0
/* 802BB450 002B70B0  48 00 01 28 */	b lbl_802BB578
lbl_802BB454:
/* 802BB454 002B70B4  2C 12 00 00 */	cmpwi r18, 0
/* 802BB458 002B70B8  41 82 00 0C */	beq lbl_802BB464
/* 802BB45C 002B70BC  9B 36 00 1A */	stb r25, 0x1a(r22)
/* 802BB460 002B70C0  48 00 01 18 */	b lbl_802BB578
lbl_802BB464:
/* 802BB464 002B70C4  9B B6 00 1A */	stb r29, 0x1a(r22)
/* 802BB468 002B70C8  3A 20 00 01 */	li r17, 1
/* 802BB46C 002B70CC  48 00 01 0C */	b lbl_802BB578
lbl_802BB470:
/* 802BB470 002B70D0  88 01 00 08 */	lbz r0, 8(r1)
/* 802BB474 002B70D4  98 16 00 17 */	stb r0, 0x17(r22)
/* 802BB478 002B70D8  48 00 01 00 */	b lbl_802BB578
lbl_802BB47C:
/* 802BB47C 002B70DC  A0 75 00 0C */	lhz r3, 0xc(r21)
/* 802BB480 002B70E0  38 63 FF FF */	addi r3, r3, -1
/* 802BB484 002B70E4  54 60 04 3F */	clrlwi. r0, r3, 0x10
/* 802BB488 002B70E8  B0 75 00 0C */	sth r3, 0xc(r21)
/* 802BB48C 002B70EC  40 82 00 30 */	bne lbl_802BB4BC
/* 802BB490 002B70F0  88 16 00 14 */	lbz r0, 0x14(r22)
/* 802BB494 002B70F4  88 61 00 08 */	lbz r3, 8(r1)
/* 802BB498 002B70F8  28 00 00 02 */	cmplwi r0, 2
/* 802BB49C 002B70FC  40 82 00 14 */	bne lbl_802BB4B0
/* 802BB4A0 002B7100  88 16 00 17 */	lbz r0, 0x17(r22)
/* 802BB4A4 002B7104  54 63 42 2E */	rlwinm r3, r3, 8, 8, 0x17
/* 802BB4A8 002B7108  7C 03 02 14 */	add r0, r3, r0
/* 802BB4AC 002B710C  54 03 04 3E */	clrlwi r3, r0, 0x10
lbl_802BB4B0:
/* 802BB4B0 002B7110  B0 75 00 0C */	sth r3, 0xc(r21)
/* 802BB4B4 002B7114  9B D6 00 1A */	stb r30, 0x1a(r22)
/* 802BB4B8 002B7118  48 00 00 C0 */	b lbl_802BB578
lbl_802BB4BC:
/* 802BB4BC 002B711C  88 01 00 08 */	lbz r0, 8(r1)
/* 802BB4C0 002B7120  98 16 00 17 */	stb r0, 0x17(r22)
/* 802BB4C4 002B7124  48 00 00 B4 */	b lbl_802BB578
lbl_802BB4C8:
/* 802BB4C8 002B7128  7C EF B8 2E */	lwzx r7, r15, r23
/* 802BB4CC 002B712C  56 83 06 3E */	clrlwi r3, r20, 0x18
/* 802BB4D0 002B7130  88 C1 00 08 */	lbz r6, 8(r1)
/* 802BB4D4 002B7134  A0 A7 00 02 */	lhz r5, 2(r7)
/* 802BB4D8 002B7138  7C 87 2A 14 */	add r4, r7, r5
/* 802BB4DC 002B713C  38 05 00 01 */	addi r0, r5, 1
/* 802BB4E0 002B7140  98 C4 00 08 */	stb r6, 8(r4)
/* 802BB4E4 002B7144  B0 07 00 02 */	sth r0, 2(r7)
/* 802BB4E8 002B7148  A0 95 00 0C */	lhz r4, 0xc(r21)
/* 802BB4EC 002B714C  38 04 FF FF */	addi r0, r4, -1
/* 802BB4F0 002B7150  B0 15 00 0C */	sth r0, 0xc(r21)
/* 802BB4F4 002B7154  54 05 04 3E */	clrlwi r5, r0, 0x10
/* 802BB4F8 002B7158  7C 8F B8 2E */	lwzx r4, r15, r23
/* 802BB4FC 002B715C  A0 04 00 02 */	lhz r0, 2(r4)
/* 802BB500 002B7160  7C 84 02 14 */	add r4, r4, r0
/* 802BB504 002B7164  38 84 00 08 */	addi r4, r4, 8
/* 802BB508 002B7168  48 00 11 E9 */	bl UUSB_Read
/* 802BB50C 002B716C  7C 8F B8 2E */	lwzx r4, r15, r23
/* 802BB510 002B7170  7E 73 1A 14 */	add r19, r19, r3
/* 802BB514 002B7174  A0 04 00 02 */	lhz r0, 2(r4)
/* 802BB518 002B7178  7C 00 1A 14 */	add r0, r0, r3
/* 802BB51C 002B717C  B0 04 00 02 */	sth r0, 2(r4)
/* 802BB520 002B7180  A0 15 00 0C */	lhz r0, 0xc(r21)
/* 802BB524 002B7184  7C 63 00 50 */	subf r3, r3, r0
/* 802BB528 002B7188  54 60 04 3F */	clrlwi. r0, r3, 0x10
/* 802BB52C 002B718C  B0 75 00 0C */	sth r3, 0xc(r21)
/* 802BB530 002B7190  40 82 00 48 */	bne lbl_802BB578
/* 802BB534 002B7194  88 16 00 14 */	lbz r0, 0x14(r22)
/* 802BB538 002B7198  28 00 00 02 */	cmplwi r0, 2
/* 802BB53C 002B719C  40 82 00 18 */	bne lbl_802BB554
/* 802BB540 002B71A0  48 01 D2 AD */	bl l2cap_link_chk_pkt_end
/* 802BB544 002B71A4  54 60 06 3F */	clrlwi. r0, r3, 0x18
/* 802BB548 002B71A8  40 82 00 0C */	bne lbl_802BB554
/* 802BB54C 002B71AC  9B B6 00 1A */	stb r29, 0x1a(r22)
/* 802BB550 002B71B0  48 00 00 28 */	b lbl_802BB578
lbl_802BB554:
/* 802BB554 002B71B4  9B B6 00 1A */	stb r29, 0x1a(r22)
/* 802BB558 002B71B8  3A 20 00 01 */	li r17, 1
/* 802BB55C 002B71BC  48 00 00 1C */	b lbl_802BB578
lbl_802BB560:
/* 802BB560 002B71C0  A0 75 00 0C */	lhz r3, 0xc(r21)
/* 802BB564 002B71C4  38 63 FF FF */	addi r3, r3, -1
/* 802BB568 002B71C8  54 60 04 3F */	clrlwi. r0, r3, 0x10
/* 802BB56C 002B71CC  B0 75 00 0C */	sth r3, 0xc(r21)
/* 802BB570 002B71D0  40 82 00 08 */	bne lbl_802BB578
/* 802BB574 002B71D4  9B B6 00 1A */	stb r29, 0x1a(r22)
lbl_802BB578:
/* 802BB578 002B71D8  2C 11 00 00 */	cmpwi r17, 0
/* 802BB57C 002B71DC  41 82 FD 10 */	beq lbl_802BB28C
/* 802BB580 002B71E0  88 7F 00 1F */	lbz r3, 0x1f(r31)
/* 802BB584 002B71E4  38 80 00 00 */	li r4, 0
/* 802BB588 002B71E8  7C AF B8 2E */	lwzx r5, r15, r23
/* 802BB58C 002B71EC  4B FF E9 5D */	bl GKI_send_msg
/* 802BB590 002B71F0  7F AF B9 2E */	stwx r29, r15, r23
/* 802BB594 002B71F4  4B FF FC F8 */	b lbl_802BB28C
lbl_802BB598:
/* 802BB598 002B71F8  7E 63 9B 78 */	mr r3, r19
lbl_802BB59C:
/* 802BB59C 002B71FC  39 61 00 60 */	addi r11, r1, 0x60
/* 802BB5A0 002B7200  4B F0 BB A1 */	bl __restore_gpr
/* 802BB5A4 002B7204  80 01 00 64 */	lwz r0, 0x64(r1)
/* 802BB5A8 002B7208  7C 08 03 A6 */	mtlr r0
/* 802BB5AC 002B720C  38 21 00 60 */	addi r1, r1, 0x60
/* 802BB5B0 002B7210  4E 80 00 20 */	blr

.global hcisu_h2_send_msg_now
hcisu_h2_send_msg_now:
/* 802BB5B4 002B7214  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802BB5B8 002B7218  7C 08 02 A6 */	mflr r0
/* 802BB5BC 002B721C  90 01 00 24 */	stw r0, 0x24(r1)
/* 802BB5C0 002B7220  39 61 00 20 */	addi r11, r1, 0x20
/* 802BB5C4 002B7224  4B F0 BB 65 */	bl _savegpr_27
/* 802BB5C8 002B7228  A0 A4 00 00 */	lhz r5, 0(r4)
/* 802BB5CC 002B722C  7C 9B 23 78 */	mr r27, r4
/* 802BB5D0 002B7230  A0 04 00 04 */	lhz r0, 4(r4)
/* 802BB5D4 002B7234  28 05 21 00 */	cmplwi r5, 0x2100
/* 802BB5D8 002B7238  7C 64 02 14 */	add r3, r4, r0
/* 802BB5DC 002B723C  38 C3 00 08 */	addi r6, r3, 8
/* 802BB5E0 002B7240  40 82 00 0C */	bne lbl_802BB5EC
/* 802BB5E4 002B7244  3B 80 00 02 */	li r28, 2
/* 802BB5E8 002B7248  48 00 00 20 */	b lbl_802BB608
lbl_802BB5EC:
/* 802BB5EC 002B724C  28 05 22 00 */	cmplwi r5, 0x2200
/* 802BB5F0 002B7250  40 82 00 0C */	bne lbl_802BB5FC
/* 802BB5F4 002B7254  3B 80 00 03 */	li r28, 3
/* 802BB5F8 002B7258  48 00 00 10 */	b lbl_802BB608
lbl_802BB5FC:
/* 802BB5FC 002B725C  28 05 20 00 */	cmplwi r5, 0x2000
/* 802BB600 002B7260  40 82 00 08 */	bne lbl_802BB608
/* 802BB604 002B7264  3B 80 00 00 */	li r28, 0
lbl_802BB608:
/* 802BB608 002B7268  28 05 21 00 */	cmplwi r5, 0x2100
/* 802BB60C 002B726C  40 82 01 20 */	bne lbl_802BB72C
/* 802BB610 002B7270  3C 60 80 57 */	lis r3, lbl_80568650@ha
/* 802BB614 002B7274  A0 84 00 02 */	lhz r4, 2(r4)
/* 802BB618 002B7278  3B C3 86 50 */	addi r30, r3, lbl_80568650@l
/* 802BB61C 002B727C  A0 1E 00 7E */	lhz r0, 0x7e(r30)
/* 802BB620 002B7280  7C 04 00 40 */	cmplw r4, r0
/* 802BB624 002B7284  40 81 01 08 */	ble lbl_802BB72C
/* 802BB628 002B7288  88 06 00 01 */	lbz r0, 1(r6)
/* 802BB62C 002B728C  88 66 00 00 */	lbz r3, 0(r6)
/* 802BB630 002B7290  38 C6 00 02 */	addi r6, r6, 2
/* 802BB634 002B7294  54 00 44 2E */	rlwinm r0, r0, 8, 0x10, 0x17
/* 802BB638 002B7298  7C 03 02 14 */	add r0, r3, r0
/* 802BB63C 002B729C  54 00 04 3E */	clrlwi r0, r0, 0x10
/* 802BB640 002B72A0  70 00 CF FF */	andi. r0, r0, 0xcfff
/* 802BB644 002B72A4  60 1F 10 00 */	ori r31, r0, 0x1000
/* 802BB648 002B72A8  7F FD 46 70 */	srawi r29, r31, 8
/* 802BB64C 002B72AC  48 00 00 D0 */	b lbl_802BB71C
lbl_802BB650:
/* 802BB650 002B72B0  7C C4 33 78 */	mr r4, r6
/* 802BB654 002B72B4  7F 83 E3 78 */	mr r3, r28
/* 802BB658 002B72B8  7F 66 DB 78 */	mr r6, r27
/* 802BB65C 002B72BC  48 00 10 9D */	bl UUSB_Write
/* 802BB660 002B72C0  A0 7B 00 04 */	lhz r3, 4(r27)
/* 802BB664 002B72C4  A0 1E 00 7C */	lhz r0, 0x7c(r30)
/* 802BB668 002B72C8  A0 9B 00 02 */	lhz r4, 2(r27)
/* 802BB66C 002B72CC  7C 03 02 14 */	add r0, r3, r0
/* 802BB670 002B72D0  B0 1B 00 04 */	sth r0, 4(r27)
/* 802BB674 002B72D4  54 00 04 3E */	clrlwi r0, r0, 0x10
/* 802BB678 002B72D8  7C 7B 02 14 */	add r3, r27, r0
/* 802BB67C 002B72DC  A0 1E 00 7C */	lhz r0, 0x7c(r30)
/* 802BB680 002B72E0  38 C3 00 0A */	addi r6, r3, 0xa
/* 802BB684 002B72E4  7C 00 20 50 */	subf r0, r0, r4
/* 802BB688 002B72E8  B0 1B 00 02 */	sth r0, 2(r27)
/* 802BB68C 002B72EC  9B E3 00 08 */	stb r31, 8(r3)
/* 802BB690 002B72F0  9B A3 00 09 */	stb r29, 9(r3)
/* 802BB694 002B72F4  A0 7B 00 02 */	lhz r3, 2(r27)
/* 802BB698 002B72F8  A0 1E 00 7E */	lhz r0, 0x7e(r30)
/* 802BB69C 002B72FC  7C 03 00 40 */	cmplw r3, r0
/* 802BB6A0 002B7300  40 81 00 20 */	ble lbl_802BB6C0
/* 802BB6A4 002B7304  A0 1E 00 7C */	lhz r0, 0x7c(r30)
/* 802BB6A8 002B7308  98 06 00 00 */	stb r0, 0(r6)
/* 802BB6AC 002B730C  A0 1E 00 7C */	lhz r0, 0x7c(r30)
/* 802BB6B0 002B7310  7C 00 46 70 */	srawi r0, r0, 8
/* 802BB6B4 002B7314  98 06 00 01 */	stb r0, 1(r6)
/* 802BB6B8 002B7318  38 C6 00 02 */	addi r6, r6, 2
/* 802BB6BC 002B731C  48 00 00 20 */	b lbl_802BB6DC
lbl_802BB6C0:
/* 802BB6C0 002B7320  38 03 FF FC */	addi r0, r3, -4
/* 802BB6C4 002B7324  98 06 00 00 */	stb r0, 0(r6)
/* 802BB6C8 002B7328  A0 7B 00 02 */	lhz r3, 2(r27)
/* 802BB6CC 002B732C  38 03 FF FC */	addi r0, r3, -4
/* 802BB6D0 002B7330  7C 00 46 70 */	srawi r0, r0, 8
/* 802BB6D4 002B7334  98 06 00 01 */	stb r0, 1(r6)
/* 802BB6D8 002B7338  38 C6 00 02 */	addi r6, r6, 2
lbl_802BB6DC:
/* 802BB6DC 002B733C  A0 7B 00 06 */	lhz r3, 6(r27)
/* 802BB6E0 002B7340  2C 03 00 00 */	cmpwi r3, 0
/* 802BB6E4 002B7344  41 82 00 38 */	beq lbl_802BB71C
/* 802BB6E8 002B7348  38 63 FF FF */	addi r3, r3, -1
/* 802BB6EC 002B734C  54 60 04 3F */	clrlwi. r0, r3, 0x10
/* 802BB6F0 002B7350  B0 7B 00 06 */	sth r3, 6(r27)
/* 802BB6F4 002B7354  40 82 00 28 */	bne lbl_802BB71C
/* 802BB6F8 002B7358  38 00 19 00 */	li r0, 0x1900
/* 802BB6FC 002B735C  3C 60 80 56 */	lis r3, lbl_80564DA0@ha
/* 802BB700 002B7360  B0 1B 00 00 */	sth r0, 0(r27)
/* 802BB704 002B7364  38 63 4D A0 */	addi r3, r3, lbl_80564DA0@l
/* 802BB708 002B7368  7F 65 DB 78 */	mr r5, r27
/* 802BB70C 002B736C  38 80 00 00 */	li r4, 0
/* 802BB710 002B7370  88 63 00 1F */	lbz r3, 0x1f(r3)
/* 802BB714 002B7374  4B FF E7 D5 */	bl GKI_send_msg
/* 802BB718 002B7378  48 00 00 30 */	b lbl_802BB748
lbl_802BB71C:
/* 802BB71C 002B737C  A0 BE 00 7E */	lhz r5, 0x7e(r30)
/* 802BB720 002B7380  A0 1B 00 02 */	lhz r0, 2(r27)
/* 802BB724 002B7384  7C 00 28 40 */	cmplw r0, r5
/* 802BB728 002B7388  41 81 FF 28 */	bgt lbl_802BB650
lbl_802BB72C:
/* 802BB72C 002B738C  A0 BB 00 02 */	lhz r5, 2(r27)
/* 802BB730 002B7390  7C C4 33 78 */	mr r4, r6
/* 802BB734 002B7394  7F 83 E3 78 */	mr r3, r28
/* 802BB738 002B7398  7F 66 DB 78 */	mr r6, r27
/* 802BB73C 002B739C  48 00 0F BD */	bl UUSB_Write
/* 802BB740 002B73A0  7F 63 DB 78 */	mr r3, r27
/* 802BB744 002B73A4  4B FF E5 F1 */	bl GKI_freebuf
lbl_802BB748:
/* 802BB748 002B73A8  39 61 00 20 */	addi r11, r1, 0x20
/* 802BB74C 002B73AC  4B F0 BA 29 */	bl _restgpr_27
/* 802BB750 002B73B0  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802BB754 002B73B4  7C 08 03 A6 */	mtlr r0
/* 802BB758 002B73B8  38 21 00 20 */	addi r1, r1, 0x20
/* 802BB75C 002B73BC  4E 80 00 20 */	blr

hcisu_h2_init:
/* 802BB760 002B73C0  3C C0 80 56 */	lis r6, lbl_80564DA0@ha
/* 802BB764 002B73C4  38 00 00 00 */	li r0, 0
/* 802BB768 002B73C8  38 C6 4D A0 */	addi r6, r6, lbl_80564DA0@l
/* 802BB76C 002B73CC  98 06 00 1E */	stb r0, 0x1e(r6)
/* 802BB770 002B73D0  98 06 00 1A */	stb r0, 0x1a(r6)
/* 802BB774 002B73D4  98 06 00 1B */	stb r0, 0x1b(r6)
/* 802BB778 002B73D8  98 06 00 1C */	stb r0, 0x1c(r6)
/* 802BB77C 002B73DC  98 66 00 1F */	stb r3, 0x1f(r6)
/* 802BB780 002B73E0  98 86 00 20 */	stb r4, 0x20(r6)
/* 802BB784 002B73E4  B0 A6 00 12 */	sth r5, 0x12(r6)
/* 802BB788 002B73E8  4E 80 00 20 */	blr

hcisu_h2_open:
/* 802BB78C 002B73EC  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802BB790 002B73F0  7C 08 02 A6 */	mflr r0
/* 802BB794 002B73F4  3C A0 80 56 */	lis r5, lbl_80564DA0@ha
/* 802BB798 002B73F8  90 01 00 24 */	stw r0, 0x24(r1)
/* 802BB79C 002B73FC  38 00 00 00 */	li r0, 0
/* 802BB7A0 002B7400  38 A5 4D A0 */	addi r5, r5, lbl_80564DA0@l
/* 802BB7A4 002B7404  98 01 00 13 */	stb r0, 0x13(r1)
/* 802BB7A8 002B7408  38 00 00 02 */	li r0, 2
/* 802BB7AC 002B740C  88 85 00 1F */	lbz r4, 0x1f(r5)
/* 802BB7B0 002B7410  A0 C3 00 00 */	lhz r6, 0(r3)
/* 802BB7B4 002B7414  B0 C1 00 0C */	sth r6, 0xc(r1)
/* 802BB7B8 002B7418  A0 C3 00 02 */	lhz r6, 2(r3)
/* 802BB7BC 002B741C  38 61 00 08 */	addi r3, r1, 8
/* 802BB7C0 002B7420  B0 C1 00 0E */	sth r6, 0xe(r1)
/* 802BB7C4 002B7424  B0 81 00 10 */	sth r4, 0x10(r1)
/* 802BB7C8 002B7428  98 05 00 1E */	stb r0, 0x1e(r5)
/* 802BB7CC 002B742C  48 00 0B A1 */	bl UUSB_Register
/* 802BB7D0 002B7430  3C 80 80 2C */	lis r4, hcisu_h2_usb_cback@ha
/* 802BB7D4 002B7434  38 61 00 08 */	addi r3, r1, 8
/* 802BB7D8 002B7438  38 84 B1 F8 */	addi r4, r4, hcisu_h2_usb_cback@l
/* 802BB7DC 002B743C  48 00 0D FD */	bl UUSB_Open
/* 802BB7E0 002B7440  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802BB7E4 002B7444  38 60 00 01 */	li r3, 1
/* 802BB7E8 002B7448  7C 08 03 A6 */	mtlr r0
/* 802BB7EC 002B744C  38 21 00 20 */	addi r1, r1, 0x20
/* 802BB7F0 002B7450  4E 80 00 20 */	blr

hcisu_h2_close:
/* 802BB7F4 002B7454  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 802BB7F8 002B7458  7C 08 02 A6 */	mflr r0
/* 802BB7FC 002B745C  3C 60 80 56 */	lis r3, lbl_80564DA0@ha
/* 802BB800 002B7460  90 01 00 14 */	stw r0, 0x14(r1)
/* 802BB804 002B7464  38 00 00 00 */	li r0, 0
/* 802BB808 002B7468  38 63 4D A0 */	addi r3, r3, lbl_80564DA0@l
/* 802BB80C 002B746C  98 03 00 1E */	stb r0, 0x1e(r3)
/* 802BB810 002B7470  48 00 14 71 */	bl UUSB_Close
/* 802BB814 002B7474  48 00 15 19 */	bl UUSB_Unregister
/* 802BB818 002B7478  80 01 00 14 */	lwz r0, 0x14(r1)
/* 802BB81C 002B747C  7C 08 03 A6 */	mtlr r0
/* 802BB820 002B7480  38 21 00 10 */	addi r1, r1, 0x10
/* 802BB824 002B7484  4E 80 00 20 */	blr

hcisu_h2_send:
/* 802BB828 002B7488  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 802BB82C 002B748C  7C 08 02 A6 */	mflr r0
/* 802BB830 002B7490  3C A0 80 56 */	lis r5, lbl_80564DA0@ha
/* 802BB834 002B7494  7C 64 1B 78 */	mr r4, r3
/* 802BB838 002B7498  90 01 00 14 */	stw r0, 0x14(r1)
/* 802BB83C 002B749C  38 65 4D A0 */	addi r3, r5, lbl_80564DA0@l
/* 802BB840 002B74A0  4B FF FD 75 */	bl hcisu_h2_send_msg_now
/* 802BB844 002B74A4  80 01 00 14 */	lwz r0, 0x14(r1)
/* 802BB848 002B74A8  38 60 00 01 */	li r3, 1
/* 802BB84C 002B74AC  7C 08 03 A6 */	mtlr r0
/* 802BB850 002B74B0  38 21 00 10 */	addi r1, r1, 0x10
/* 802BB854 002B74B4  4E 80 00 20 */	blr

hcisu_h2_handle_event:
/* 802BB858 002B74B8  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 802BB85C 002B74BC  7C 08 02 A6 */	mflr r0
/* 802BB860 002B74C0  3C 80 80 56 */	lis r4, lbl_80564DA0@ha
/* 802BB864 002B74C4  90 01 00 14 */	stw r0, 0x14(r1)
/* 802BB868 002B74C8  38 84 4D A0 */	addi r4, r4, lbl_80564DA0@l
/* 802BB86C 002B74CC  38 03 FF F8 */	addi r0, r3, -8
/* 802BB870 002B74D0  A0 64 00 12 */	lhz r3, 0x12(r4)
/* 802BB874 002B74D4  7C 03 00 50 */	subf r0, r3, r0
/* 802BB878 002B74D8  54 03 04 3E */	clrlwi r3, r0, 0x10
/* 802BB87C 002B74DC  4B FF F9 A1 */	bl hcisu_h2_receive_msg
/* 802BB880 002B74E0  80 01 00 14 */	lwz r0, 0x14(r1)
/* 802BB884 002B74E4  38 60 00 00 */	li r3, 0
/* 802BB888 002B74E8  7C 08 03 A6 */	mtlr r0
/* 802BB88C 002B74EC  38 21 00 10 */	addi r1, r1, 0x10
/* 802BB890 002B74F0  4E 80 00 20 */	blr