summaryrefslogtreecommitdiff
path: root/asm/SDK/VF/nand_drv.s
blob: 721fd8e9e081033825bb9e58e203f17fc29255f2 (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
.include "macros.inc"

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

.global VFi_NandFlushNANDFromHandleIdx
VFi_NandFlushNANDFromHandleIdx:
/* 8031BE1C 00317A7C  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 8031BE20 00317A80  7C 08 02 A6 */	mflr r0
/* 8031BE24 00317A84  90 01 00 34 */	stw r0, 0x34(r1)
/* 8031BE28 00317A88  39 61 00 30 */	addi r11, r1, 0x30
/* 8031BE2C 00317A8C  4B EA B2 ED */	bl _savegpr_23
/* 8031BE30 00317A90  7C 7A 1B 78 */	mr r26, r3
/* 8031BE34 00317A94  7C 9B 23 78 */	mr r27, r4
/* 8031BE38 00317A98  4B FF ED A9 */	bl VFSysGetDriveP
/* 8031BE3C 00317A9C  7C 77 1B 78 */	mr r23, r3
/* 8031BE40 00317AA0  7F 43 D3 78 */	mr r3, r26
/* 8031BE44 00317AA4  4B FF EC 39 */	bl VFSysGetHandleP
/* 8031BE48 00317AA8  2C 03 00 00 */	cmpwi r3, 0
/* 8031BE4C 00317AAC  41 82 00 24 */	beq lbl_8031BE70
/* 8031BE50 00317AB0  80 63 00 00 */	lwz r3, 0(r3)
/* 8031BE54 00317AB4  2C 03 00 00 */	cmpwi r3, 0
/* 8031BE58 00317AB8  41 82 00 18 */	beq lbl_8031BE70
/* 8031BE5C 00317ABC  80 03 00 0C */	lwz r0, 0xc(r3)
/* 8031BE60 00317AC0  28 00 00 01 */	cmplwi r0, 1
/* 8031BE64 00317AC4  40 82 00 0C */	bne lbl_8031BE70
/* 8031BE68 00317AC8  38 60 00 00 */	li r3, 0
/* 8031BE6C 00317ACC  48 00 02 9C */	b lbl_8031C108
lbl_8031BE70:
/* 8031BE70 00317AD0  2C 17 00 00 */	cmpwi r23, 0
/* 8031BE74 00317AD4  41 82 02 90 */	beq lbl_8031C104
/* 8031BE78 00317AD8  3C 60 10 62 */	lis r3, 0x10624DD3@ha
/* 8031BE7C 00317ADC  83 97 00 00 */	lwz r28, 0(r23)
/* 8031BE80 00317AE0  3B B7 00 3C */	addi r29, r23, 0x3c
/* 8031BE84 00317AE4  83 CD B0 08 */	lwz r30, lbl_806402C8-_SDA_BASE_(r13)
/* 8031BE88 00317AE8  3B 23 4D D3 */	addi r25, r3, 0x10624DD3@l
/* 8031BE8C 00317AEC  3B E0 00 00 */	li r31, 0
/* 8031BE90 00317AF0  3F 00 80 00 */	lis r24, 0x8000
/* 8031BE94 00317AF4  3A E0 00 00 */	li r23, 0
/* 8031BE98 00317AF8  48 00 00 50 */	b lbl_8031BEE8
lbl_8031BE9C:
/* 8031BE9C 00317AFC  7F 83 E3 78 */	mr r3, r28
/* 8031BEA0 00317B00  4B FC C7 E9 */	bl NANDClose
/* 8031BEA4 00317B04  2C 03 FF FD */	cmpwi r3, -3
/* 8031BEA8 00317B08  7C 7F 1B 78 */	mr r31, r3
/* 8031BEAC 00317B0C  41 82 00 08 */	beq lbl_8031BEB4
/* 8031BEB0 00317B10  48 00 00 44 */	b lbl_8031BEF4
lbl_8031BEB4:
/* 8031BEB4 00317B14  80 18 00 F8 */	lwz r0, 0xf8(r24)
/* 8031BEB8 00317B18  80 CD B0 0C */	lwz r6, lbl_806402CC-_SDA_BASE_(r13)
/* 8031BEBC 00317B1C  54 00 F0 BE */	srwi r0, r0, 2
/* 8031BEC0 00317B20  7C 79 00 16 */	mulhwu r3, r25, r0
/* 8031BEC4 00317B24  7C C0 FE 70 */	srawi r0, r6, 0x1f
/* 8031BEC8 00317B28  7C 97 31 D6 */	mullw r4, r23, r6
/* 8031BECC 00317B2C  54 65 D1 BE */	srwi r5, r3, 6
/* 8031BED0 00317B30  7C 65 30 16 */	mulhwu r3, r5, r6
/* 8031BED4 00317B34  7C 05 01 D6 */	mullw r0, r5, r0
/* 8031BED8 00317B38  7C 63 22 14 */	add r3, r3, r4
/* 8031BEDC 00317B3C  7C 85 31 D6 */	mullw r4, r5, r6
/* 8031BEE0 00317B40  7C 63 02 14 */	add r3, r3, r0
/* 8031BEE4 00317B44  4B F5 68 21 */	bl OSSleepTicks
lbl_8031BEE8:
/* 8031BEE8 00317B48  2C 1E 00 00 */	cmpwi r30, 0
/* 8031BEEC 00317B4C  3B DE FF FF */	addi r30, r30, -1
/* 8031BEF0 00317B50  41 81 FF AC */	bgt lbl_8031BE9C
lbl_8031BEF4:
/* 8031BEF4 00317B54  2C 1F 00 00 */	cmpwi r31, 0
/* 8031BEF8 00317B58  40 80 00 20 */	bge lbl_8031BF18
/* 8031BEFC 00317B5C  2C 1B 00 00 */	cmpwi r27, 0
/* 8031BF00 00317B60  41 82 00 10 */	beq lbl_8031BF10
/* 8031BF04 00317B64  7F 43 D3 78 */	mr r3, r26
/* 8031BF08 00317B68  7F E4 FB 78 */	mr r4, r31
/* 8031BF0C 00317B6C  4B FF FE 6D */	bl dCommon_setLastDeviceErrorToDisk2
lbl_8031BF10:
/* 8031BF10 00317B70  7F E3 FB 78 */	mr r3, r31
/* 8031BF14 00317B74  48 00 01 F4 */	b lbl_8031C108
lbl_8031BF18:
/* 8031BF18 00317B78  28 1A 00 1A */	cmplwi r26, 0x1a
/* 8031BF1C 00317B7C  40 80 00 BC */	bge lbl_8031BFD8
/* 8031BF20 00317B80  3C 60 80 61 */	lis r3, lbl_8060FA50@ha
/* 8031BF24 00317B84  57 40 20 36 */	slwi r0, r26, 4
/* 8031BF28 00317B88  38 63 FA 50 */	addi r3, r3, lbl_8060FA50@l
/* 8031BF2C 00317B8C  7C 63 02 14 */	add r3, r3, r0
/* 8031BF30 00317B90  81 83 00 04 */	lwz r12, 4(r3)
/* 8031BF34 00317B94  2C 0C 00 00 */	cmpwi r12, 0
/* 8031BF38 00317B98  41 82 00 20 */	beq lbl_8031BF58
/* 8031BF3C 00317B9C  7F A3 EB 78 */	mr r3, r29
/* 8031BF40 00317BA0  7F 84 E3 78 */	mr r4, r28
/* 8031BF44 00317BA4  38 A0 00 03 */	li r5, 3
/* 8031BF48 00317BA8  7D 89 03 A6 */	mtctr r12
/* 8031BF4C 00317BAC  4E 80 04 21 */	bctrl
/* 8031BF50 00317BB0  7C 7F 1B 78 */	mr r31, r3
/* 8031BF54 00317BB4  48 00 01 8C */	b lbl_8031C0E0
lbl_8031BF58:
/* 8031BF58 00317BB8  3C 60 10 62 */	lis r3, 0x10624DD3@ha
/* 8031BF5C 00317BBC  83 CD B0 08 */	lwz r30, lbl_806402C8-_SDA_BASE_(r13)
/* 8031BF60 00317BC0  3B 23 4D D3 */	addi r25, r3, 0x10624DD3@l
/* 8031BF64 00317BC4  3B E0 00 00 */	li r31, 0
/* 8031BF68 00317BC8  3F 00 80 00 */	lis r24, 0x8000
/* 8031BF6C 00317BCC  3A E0 00 00 */	li r23, 0
/* 8031BF70 00317BD0  48 00 00 58 */	b lbl_8031BFC8
lbl_8031BF74:
/* 8031BF74 00317BD4  7F A3 EB 78 */	mr r3, r29
/* 8031BF78 00317BD8  7F 84 E3 78 */	mr r4, r28
/* 8031BF7C 00317BDC  38 A0 00 03 */	li r5, 3
/* 8031BF80 00317BE0  4B FC C4 89 */	bl NANDOpen
/* 8031BF84 00317BE4  2C 03 FF FD */	cmpwi r3, -3
/* 8031BF88 00317BE8  7C 7F 1B 78 */	mr r31, r3
/* 8031BF8C 00317BEC  41 82 00 08 */	beq lbl_8031BF94
/* 8031BF90 00317BF0  48 00 01 50 */	b lbl_8031C0E0
lbl_8031BF94:
/* 8031BF94 00317BF4  80 18 00 F8 */	lwz r0, 0xf8(r24)
/* 8031BF98 00317BF8  80 CD B0 0C */	lwz r6, lbl_806402CC-_SDA_BASE_(r13)
/* 8031BF9C 00317BFC  54 00 F0 BE */	srwi r0, r0, 2
/* 8031BFA0 00317C00  7C 79 00 16 */	mulhwu r3, r25, r0
/* 8031BFA4 00317C04  7C C0 FE 70 */	srawi r0, r6, 0x1f
/* 8031BFA8 00317C08  7C 97 31 D6 */	mullw r4, r23, r6
/* 8031BFAC 00317C0C  54 65 D1 BE */	srwi r5, r3, 6
/* 8031BFB0 00317C10  7C 65 30 16 */	mulhwu r3, r5, r6
/* 8031BFB4 00317C14  7C 05 01 D6 */	mullw r0, r5, r0
/* 8031BFB8 00317C18  7C 63 22 14 */	add r3, r3, r4
/* 8031BFBC 00317C1C  7C 85 31 D6 */	mullw r4, r5, r6
/* 8031BFC0 00317C20  7C 63 02 14 */	add r3, r3, r0
/* 8031BFC4 00317C24  4B F5 67 41 */	bl OSSleepTicks
lbl_8031BFC8:
/* 8031BFC8 00317C28  2C 1E 00 00 */	cmpwi r30, 0
/* 8031BFCC 00317C2C  3B DE FF FF */	addi r30, r30, -1
/* 8031BFD0 00317C30  41 81 FF A4 */	bgt lbl_8031BF74
/* 8031BFD4 00317C34  48 00 01 0C */	b lbl_8031C0E0
lbl_8031BFD8:
/* 8031BFD8 00317C38  3C 1A 00 01 */	addis r0, r26, 1
/* 8031BFDC 00317C3C  28 00 FF F6 */	cmplwi r0, 0xfff6
/* 8031BFE0 00317C40  40 82 00 84 */	bne lbl_8031C064
/* 8031BFE4 00317C44  3C 60 10 62 */	lis r3, 0x10624DD3@ha
/* 8031BFE8 00317C48  83 CD B0 08 */	lwz r30, lbl_806402C8-_SDA_BASE_(r13)
/* 8031BFEC 00317C4C  3B 23 4D D3 */	addi r25, r3, 0x10624DD3@l
/* 8031BFF0 00317C50  3B E0 00 00 */	li r31, 0
/* 8031BFF4 00317C54  3F 00 80 00 */	lis r24, 0x8000
/* 8031BFF8 00317C58  3A E0 00 00 */	li r23, 0
/* 8031BFFC 00317C5C  48 00 00 58 */	b lbl_8031C054
lbl_8031C000:
/* 8031C000 00317C60  7F A3 EB 78 */	mr r3, r29
/* 8031C004 00317C64  7F 84 E3 78 */	mr r4, r28
/* 8031C008 00317C68  38 A0 00 03 */	li r5, 3
/* 8031C00C 00317C6C  4B FC C3 FD */	bl NANDOpen
/* 8031C010 00317C70  2C 03 FF FD */	cmpwi r3, -3
/* 8031C014 00317C74  7C 7F 1B 78 */	mr r31, r3
/* 8031C018 00317C78  41 82 00 08 */	beq lbl_8031C020
/* 8031C01C 00317C7C  48 00 00 C4 */	b lbl_8031C0E0
lbl_8031C020:
/* 8031C020 00317C80  80 18 00 F8 */	lwz r0, 0xf8(r24)
/* 8031C024 00317C84  80 CD B0 0C */	lwz r6, lbl_806402CC-_SDA_BASE_(r13)
/* 8031C028 00317C88  54 00 F0 BE */	srwi r0, r0, 2
/* 8031C02C 00317C8C  7C 79 00 16 */	mulhwu r3, r25, r0
/* 8031C030 00317C90  7C C0 FE 70 */	srawi r0, r6, 0x1f
/* 8031C034 00317C94  7C 97 31 D6 */	mullw r4, r23, r6
/* 8031C038 00317C98  54 65 D1 BE */	srwi r5, r3, 6
/* 8031C03C 00317C9C  7C 65 30 16 */	mulhwu r3, r5, r6
/* 8031C040 00317CA0  7C 05 01 D6 */	mullw r0, r5, r0
/* 8031C044 00317CA4  7C 63 22 14 */	add r3, r3, r4
/* 8031C048 00317CA8  7C 85 31 D6 */	mullw r4, r5, r6
/* 8031C04C 00317CAC  7C 63 02 14 */	add r3, r3, r0
/* 8031C050 00317CB0  4B F5 66 B5 */	bl OSSleepTicks
lbl_8031C054:
/* 8031C054 00317CB4  2C 1E 00 00 */	cmpwi r30, 0
/* 8031C058 00317CB8  3B DE FF FF */	addi r30, r30, -1
/* 8031C05C 00317CBC  41 81 FF A4 */	bgt lbl_8031C000
/* 8031C060 00317CC0  48 00 00 80 */	b lbl_8031C0E0
lbl_8031C064:
/* 8031C064 00317CC4  3C 60 10 62 */	lis r3, 0x10624DD3@ha
/* 8031C068 00317CC8  83 CD B0 08 */	lwz r30, lbl_806402C8-_SDA_BASE_(r13)
/* 8031C06C 00317CCC  3A E3 4D D3 */	addi r23, r3, 0x10624DD3@l
/* 8031C070 00317CD0  3B E0 00 00 */	li r31, 0
/* 8031C074 00317CD4  3F 00 80 00 */	lis r24, 0x8000
/* 8031C078 00317CD8  3B 20 00 00 */	li r25, 0
/* 8031C07C 00317CDC  48 00 00 58 */	b lbl_8031C0D4
lbl_8031C080:
/* 8031C080 00317CE0  7F A3 EB 78 */	mr r3, r29
/* 8031C084 00317CE4  7F 84 E3 78 */	mr r4, r28
/* 8031C088 00317CE8  38 A0 00 03 */	li r5, 3
/* 8031C08C 00317CEC  4B FC C4 09 */	bl NANDPrivateOpen
/* 8031C090 00317CF0  2C 03 FF FD */	cmpwi r3, -3
/* 8031C094 00317CF4  7C 7F 1B 78 */	mr r31, r3
/* 8031C098 00317CF8  41 82 00 08 */	beq lbl_8031C0A0
/* 8031C09C 00317CFC  48 00 00 44 */	b lbl_8031C0E0
lbl_8031C0A0:
/* 8031C0A0 00317D00  80 18 00 F8 */	lwz r0, 0xf8(r24)
/* 8031C0A4 00317D04  80 CD B0 0C */	lwz r6, lbl_806402CC-_SDA_BASE_(r13)
/* 8031C0A8 00317D08  54 00 F0 BE */	srwi r0, r0, 2
/* 8031C0AC 00317D0C  7C 77 00 16 */	mulhwu r3, r23, r0
/* 8031C0B0 00317D10  7C C0 FE 70 */	srawi r0, r6, 0x1f
/* 8031C0B4 00317D14  7C 99 31 D6 */	mullw r4, r25, r6
/* 8031C0B8 00317D18  54 65 D1 BE */	srwi r5, r3, 6
/* 8031C0BC 00317D1C  7C 65 30 16 */	mulhwu r3, r5, r6
/* 8031C0C0 00317D20  7C 05 01 D6 */	mullw r0, r5, r0
/* 8031C0C4 00317D24  7C 63 22 14 */	add r3, r3, r4
/* 8031C0C8 00317D28  7C 85 31 D6 */	mullw r4, r5, r6
/* 8031C0CC 00317D2C  7C 63 02 14 */	add r3, r3, r0
/* 8031C0D0 00317D30  4B F5 66 35 */	bl OSSleepTicks
lbl_8031C0D4:
/* 8031C0D4 00317D34  2C 1E 00 00 */	cmpwi r30, 0
/* 8031C0D8 00317D38  3B DE FF FF */	addi r30, r30, -1
/* 8031C0DC 00317D3C  41 81 FF A4 */	bgt lbl_8031C080
lbl_8031C0E0:
/* 8031C0E0 00317D40  2C 1F 00 00 */	cmpwi r31, 0
/* 8031C0E4 00317D44  40 80 00 20 */	bge lbl_8031C104
/* 8031C0E8 00317D48  2C 1B 00 00 */	cmpwi r27, 0
/* 8031C0EC 00317D4C  41 82 00 10 */	beq lbl_8031C0FC
/* 8031C0F0 00317D50  7F 43 D3 78 */	mr r3, r26
/* 8031C0F4 00317D54  7F E4 FB 78 */	mr r4, r31
/* 8031C0F8 00317D58  4B FF FC 81 */	bl dCommon_setLastDeviceErrorToDisk2
lbl_8031C0FC:
/* 8031C0FC 00317D5C  7F E3 FB 78 */	mr r3, r31
/* 8031C100 00317D60  48 00 00 08 */	b lbl_8031C108
lbl_8031C104:
/* 8031C104 00317D64  38 60 00 00 */	li r3, 0
lbl_8031C108:
/* 8031C108 00317D68  39 61 00 30 */	addi r11, r1, 0x30
/* 8031C10C 00317D6C  4B EA B0 59 */	bl _restgpr_23
/* 8031C110 00317D70  80 01 00 34 */	lwz r0, 0x34(r1)
/* 8031C114 00317D74  7C 08 03 A6 */	mtlr r0
/* 8031C118 00317D78  38 21 00 30 */	addi r1, r1, 0x30
/* 8031C11C 00317D7C  4E 80 00 20 */	blr