summaryrefslogtreecommitdiff
path: root/asm/SDK/OS/OSMutex.s
blob: fdd39f852a25370e1c3b476d21682c4687c0c251 (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
.include "macros.inc"

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

.global OSInitMutex
OSInitMutex:
/* 8026F910 0026B570  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 8026F914 0026B574  7C 08 02 A6 */	mflr r0
/* 8026F918 0026B578  90 01 00 14 */	stw r0, 0x14(r1)
/* 8026F91C 0026B57C  93 E1 00 0C */	stw r31, 0xc(r1)
/* 8026F920 0026B580  7C 7F 1B 78 */	mr r31, r3
/* 8026F924 0026B584  48 00 19 C5 */	bl OSInitThreadQueue
/* 8026F928 0026B588  38 00 00 00 */	li r0, 0
/* 8026F92C 0026B58C  90 1F 00 08 */	stw r0, 8(r31)
/* 8026F930 0026B590  90 1F 00 0C */	stw r0, 0xc(r31)
/* 8026F934 0026B594  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 8026F938 0026B598  80 01 00 14 */	lwz r0, 0x14(r1)
/* 8026F93C 0026B59C  7C 08 03 A6 */	mtlr r0
/* 8026F940 0026B5A0  38 21 00 10 */	addi r1, r1, 0x10
/* 8026F944 0026B5A4  4E 80 00 20 */	blr

.global OSLockMutex
OSLockMutex:
/* 8026F948 0026B5A8  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 8026F94C 0026B5AC  7C 08 02 A6 */	mflr r0
/* 8026F950 0026B5B0  90 01 00 24 */	stw r0, 0x24(r1)
/* 8026F954 0026B5B4  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 8026F958 0026B5B8  93 C1 00 18 */	stw r30, 0x18(r1)
/* 8026F95C 0026B5BC  93 A1 00 14 */	stw r29, 0x14(r1)
/* 8026F960 0026B5C0  93 81 00 10 */	stw r28, 0x10(r1)
/* 8026F964 0026B5C4  7C 7C 1B 78 */	mr r28, r3
/* 8026F968 0026B5C8  4B FF ED F5 */	bl OSDisableInterrupts
/* 8026F96C 0026B5CC  7C 7D 1B 78 */	mr r29, r3
/* 8026F970 0026B5D0  48 00 19 89 */	bl OSGetCurrentThread
/* 8026F974 0026B5D4  7C 7E 1B 78 */	mr r30, r3
/* 8026F978 0026B5D8  3B E0 00 00 */	li r31, 0
lbl_8026F97C:
/* 8026F97C 0026B5DC  80 1C 00 08 */	lwz r0, 8(r28)
/* 8026F980 0026B5E0  2C 00 00 00 */	cmpwi r0, 0
/* 8026F984 0026B5E4  40 82 00 40 */	bne lbl_8026F9C4
/* 8026F988 0026B5E8  80 7C 00 0C */	lwz r3, 0xc(r28)
/* 8026F98C 0026B5EC  93 DC 00 08 */	stw r30, 8(r28)
/* 8026F990 0026B5F0  38 03 00 01 */	addi r0, r3, 1
/* 8026F994 0026B5F4  90 1C 00 0C */	stw r0, 0xc(r28)
/* 8026F998 0026B5F8  80 7E 02 F8 */	lwz r3, 0x2f8(r30)
/* 8026F99C 0026B5FC  2C 03 00 00 */	cmpwi r3, 0
/* 8026F9A0 0026B600  40 82 00 0C */	bne lbl_8026F9AC
/* 8026F9A4 0026B604  93 9E 02 F4 */	stw r28, 0x2f4(r30)
/* 8026F9A8 0026B608  48 00 00 08 */	b lbl_8026F9B0
lbl_8026F9AC:
/* 8026F9AC 0026B60C  93 83 00 10 */	stw r28, 0x10(r3)
lbl_8026F9B0:
/* 8026F9B0 0026B610  38 00 00 00 */	li r0, 0
/* 8026F9B4 0026B614  90 7C 00 14 */	stw r3, 0x14(r28)
/* 8026F9B8 0026B618  90 1C 00 10 */	stw r0, 0x10(r28)
/* 8026F9BC 0026B61C  93 9E 02 F8 */	stw r28, 0x2f8(r30)
/* 8026F9C0 0026B620  48 00 00 3C */	b lbl_8026F9FC
lbl_8026F9C4:
/* 8026F9C4 0026B624  7C 00 F0 40 */	cmplw r0, r30
/* 8026F9C8 0026B628  40 82 00 14 */	bne lbl_8026F9DC
/* 8026F9CC 0026B62C  80 7C 00 0C */	lwz r3, 0xc(r28)
/* 8026F9D0 0026B630  38 03 00 01 */	addi r0, r3, 1
/* 8026F9D4 0026B634  90 1C 00 0C */	stw r0, 0xc(r28)
/* 8026F9D8 0026B638  48 00 00 24 */	b lbl_8026F9FC
lbl_8026F9DC:
/* 8026F9DC 0026B63C  93 9E 02 F0 */	stw r28, 0x2f0(r30)
/* 8026F9E0 0026B640  80 7C 00 08 */	lwz r3, 8(r28)
/* 8026F9E4 0026B644  80 9E 02 D0 */	lwz r4, 0x2d0(r30)
/* 8026F9E8 0026B648  48 00 1C 2D */	bl __OSPromoteThread
/* 8026F9EC 0026B64C  7F 83 E3 78 */	mr r3, r28
/* 8026F9F0 0026B650  48 00 29 85 */	bl OSSleepThread
/* 8026F9F4 0026B654  93 FE 02 F0 */	stw r31, 0x2f0(r30)
/* 8026F9F8 0026B658  4B FF FF 84 */	b lbl_8026F97C
lbl_8026F9FC:
/* 8026F9FC 0026B65C  7F A3 EB 78 */	mr r3, r29
/* 8026FA00 0026B660  4B FF ED 85 */	bl OSRestoreInterrupts
/* 8026FA04 0026B664  80 01 00 24 */	lwz r0, 0x24(r1)
/* 8026FA08 0026B668  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 8026FA0C 0026B66C  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 8026FA10 0026B670  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 8026FA14 0026B674  83 81 00 10 */	lwz r28, 0x10(r1)
/* 8026FA18 0026B678  7C 08 03 A6 */	mtlr r0
/* 8026FA1C 0026B67C  38 21 00 20 */	addi r1, r1, 0x20
/* 8026FA20 0026B680  4E 80 00 20 */	blr

.global OSUnlockMutex
OSUnlockMutex:
/* 8026FA24 0026B684  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 8026FA28 0026B688  7C 08 02 A6 */	mflr r0
/* 8026FA2C 0026B68C  90 01 00 24 */	stw r0, 0x24(r1)
/* 8026FA30 0026B690  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 8026FA34 0026B694  93 C1 00 18 */	stw r30, 0x18(r1)
/* 8026FA38 0026B698  93 A1 00 14 */	stw r29, 0x14(r1)
/* 8026FA3C 0026B69C  7C 7D 1B 78 */	mr r29, r3
/* 8026FA40 0026B6A0  4B FF ED 1D */	bl OSDisableInterrupts
/* 8026FA44 0026B6A4  7C 7F 1B 78 */	mr r31, r3
/* 8026FA48 0026B6A8  48 00 18 B1 */	bl OSGetCurrentThread
/* 8026FA4C 0026B6AC  80 1D 00 08 */	lwz r0, 8(r29)
/* 8026FA50 0026B6B0  7C 7E 1B 78 */	mr r30, r3
/* 8026FA54 0026B6B4  7C 00 18 40 */	cmplw r0, r3
/* 8026FA58 0026B6B8  40 82 00 70 */	bne lbl_8026FAC8
/* 8026FA5C 0026B6BC  80 1D 00 0C */	lwz r0, 0xc(r29)
/* 8026FA60 0026B6C0  34 00 FF FF */	addic. r0, r0, -1
/* 8026FA64 0026B6C4  90 1D 00 0C */	stw r0, 0xc(r29)
/* 8026FA68 0026B6C8  40 82 00 60 */	bne lbl_8026FAC8
/* 8026FA6C 0026B6CC  80 9D 00 10 */	lwz r4, 0x10(r29)
/* 8026FA70 0026B6D0  80 BD 00 14 */	lwz r5, 0x14(r29)
/* 8026FA74 0026B6D4  2C 04 00 00 */	cmpwi r4, 0
/* 8026FA78 0026B6D8  40 82 00 0C */	bne lbl_8026FA84
/* 8026FA7C 0026B6DC  90 A3 02 F8 */	stw r5, 0x2f8(r3)
/* 8026FA80 0026B6E0  48 00 00 08 */	b lbl_8026FA88
lbl_8026FA84:
/* 8026FA84 0026B6E4  90 A4 00 14 */	stw r5, 0x14(r4)
lbl_8026FA88:
/* 8026FA88 0026B6E8  2C 05 00 00 */	cmpwi r5, 0
/* 8026FA8C 0026B6EC  40 82 00 0C */	bne lbl_8026FA98
/* 8026FA90 0026B6F0  90 83 02 F4 */	stw r4, 0x2f4(r3)
/* 8026FA94 0026B6F4  48 00 00 08 */	b lbl_8026FA9C
lbl_8026FA98:
/* 8026FA98 0026B6F8  90 85 00 10 */	stw r4, 0x10(r5)
lbl_8026FA9C:
/* 8026FA9C 0026B6FC  38 00 00 00 */	li r0, 0
/* 8026FAA0 0026B700  90 1D 00 08 */	stw r0, 8(r29)
/* 8026FAA4 0026B704  80 83 02 D0 */	lwz r4, 0x2d0(r3)
/* 8026FAA8 0026B708  80 03 02 D4 */	lwz r0, 0x2d4(r3)
/* 8026FAAC 0026B70C  7C 04 00 00 */	cmpw r4, r0
/* 8026FAB0 0026B710  40 80 00 10 */	bge lbl_8026FAC0
/* 8026FAB4 0026B714  7F C3 F3 78 */	mr r3, r30
/* 8026FAB8 0026B718  48 00 19 6D */	bl __OSGetEffectivePriority
/* 8026FABC 0026B71C  90 7E 02 D0 */	stw r3, 0x2d0(r30)
lbl_8026FAC0:
/* 8026FAC0 0026B720  7F A3 EB 78 */	mr r3, r29
/* 8026FAC4 0026B724  48 00 29 9D */	bl OSWakeupThread
lbl_8026FAC8:
/* 8026FAC8 0026B728  7F E3 FB 78 */	mr r3, r31
/* 8026FACC 0026B72C  4B FF EC B9 */	bl OSRestoreInterrupts
/* 8026FAD0 0026B730  80 01 00 24 */	lwz r0, 0x24(r1)
/* 8026FAD4 0026B734  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 8026FAD8 0026B738  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 8026FADC 0026B73C  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 8026FAE0 0026B740  7C 08 03 A6 */	mtlr r0
/* 8026FAE4 0026B744  38 21 00 20 */	addi r1, r1, 0x20
/* 8026FAE8 0026B748  4E 80 00 20 */	blr

.global __OSUnlockAllMutex
__OSUnlockAllMutex:
/* 8026FAEC 0026B74C  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 8026FAF0 0026B750  7C 08 02 A6 */	mflr r0
/* 8026FAF4 0026B754  90 01 00 14 */	stw r0, 0x14(r1)
/* 8026FAF8 0026B758  93 E1 00 0C */	stw r31, 0xc(r1)
/* 8026FAFC 0026B75C  3B E0 00 00 */	li r31, 0
/* 8026FB00 0026B760  93 C1 00 08 */	stw r30, 8(r1)
/* 8026FB04 0026B764  7C 7E 1B 78 */	mr r30, r3
/* 8026FB08 0026B768  48 00 00 2C */	b lbl_8026FB34
lbl_8026FB0C:
/* 8026FB0C 0026B76C  80 83 00 10 */	lwz r4, 0x10(r3)
/* 8026FB10 0026B770  2C 04 00 00 */	cmpwi r4, 0
/* 8026FB14 0026B774  40 82 00 0C */	bne lbl_8026FB20
/* 8026FB18 0026B778  93 FE 02 F8 */	stw r31, 0x2f8(r30)
/* 8026FB1C 0026B77C  48 00 00 08 */	b lbl_8026FB24
lbl_8026FB20:
/* 8026FB20 0026B780  93 E4 00 14 */	stw r31, 0x14(r4)
lbl_8026FB24:
/* 8026FB24 0026B784  90 9E 02 F4 */	stw r4, 0x2f4(r30)
/* 8026FB28 0026B788  93 E3 00 0C */	stw r31, 0xc(r3)
/* 8026FB2C 0026B78C  93 E3 00 08 */	stw r31, 8(r3)
/* 8026FB30 0026B790  48 00 29 31 */	bl OSWakeupThread
lbl_8026FB34:
/* 8026FB34 0026B794  80 7E 02 F4 */	lwz r3, 0x2f4(r30)
/* 8026FB38 0026B798  2C 03 00 00 */	cmpwi r3, 0
/* 8026FB3C 0026B79C  40 82 FF D0 */	bne lbl_8026FB0C
/* 8026FB40 0026B7A0  80 01 00 14 */	lwz r0, 0x14(r1)
/* 8026FB44 0026B7A4  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 8026FB48 0026B7A8  83 C1 00 08 */	lwz r30, 8(r1)
/* 8026FB4C 0026B7AC  7C 08 03 A6 */	mtlr r0
/* 8026FB50 0026B7B0  38 21 00 10 */	addi r1, r1, 0x10
/* 8026FB54 0026B7B4  4E 80 00 20 */	blr

.global OSTryLockMutex
OSTryLockMutex:
/* 8026FB58 0026B7B8  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 8026FB5C 0026B7BC  7C 08 02 A6 */	mflr r0
/* 8026FB60 0026B7C0  90 01 00 24 */	stw r0, 0x24(r1)
/* 8026FB64 0026B7C4  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 8026FB68 0026B7C8  93 C1 00 18 */	stw r30, 0x18(r1)
/* 8026FB6C 0026B7CC  93 A1 00 14 */	stw r29, 0x14(r1)
/* 8026FB70 0026B7D0  7C 7D 1B 78 */	mr r29, r3
/* 8026FB74 0026B7D4  4B FF EB E9 */	bl OSDisableInterrupts
/* 8026FB78 0026B7D8  7C 7F 1B 78 */	mr r31, r3
/* 8026FB7C 0026B7DC  48 00 17 7D */	bl OSGetCurrentThread
/* 8026FB80 0026B7E0  80 1D 00 08 */	lwz r0, 8(r29)
/* 8026FB84 0026B7E4  2C 00 00 00 */	cmpwi r0, 0
/* 8026FB88 0026B7E8  40 82 00 44 */	bne lbl_8026FBCC
/* 8026FB8C 0026B7EC  80 9D 00 0C */	lwz r4, 0xc(r29)
/* 8026FB90 0026B7F0  90 7D 00 08 */	stw r3, 8(r29)
/* 8026FB94 0026B7F4  38 04 00 01 */	addi r0, r4, 1
/* 8026FB98 0026B7F8  90 1D 00 0C */	stw r0, 0xc(r29)
/* 8026FB9C 0026B7FC  80 83 02 F8 */	lwz r4, 0x2f8(r3)
/* 8026FBA0 0026B800  2C 04 00 00 */	cmpwi r4, 0
/* 8026FBA4 0026B804  40 82 00 0C */	bne lbl_8026FBB0
/* 8026FBA8 0026B808  93 A3 02 F4 */	stw r29, 0x2f4(r3)
/* 8026FBAC 0026B80C  48 00 00 08 */	b lbl_8026FBB4
lbl_8026FBB0:
/* 8026FBB0 0026B810  93 A4 00 10 */	stw r29, 0x10(r4)
lbl_8026FBB4:
/* 8026FBB4 0026B814  38 00 00 00 */	li r0, 0
/* 8026FBB8 0026B818  90 9D 00 14 */	stw r4, 0x14(r29)
/* 8026FBBC 0026B81C  3B C0 00 01 */	li r30, 1
/* 8026FBC0 0026B820  90 1D 00 10 */	stw r0, 0x10(r29)
/* 8026FBC4 0026B824  93 A3 02 F8 */	stw r29, 0x2f8(r3)
/* 8026FBC8 0026B828  48 00 00 24 */	b lbl_8026FBEC
lbl_8026FBCC:
/* 8026FBCC 0026B82C  7C 00 18 40 */	cmplw r0, r3
/* 8026FBD0 0026B830  40 82 00 18 */	bne lbl_8026FBE8
/* 8026FBD4 0026B834  80 7D 00 0C */	lwz r3, 0xc(r29)
/* 8026FBD8 0026B838  3B C0 00 01 */	li r30, 1
/* 8026FBDC 0026B83C  38 03 00 01 */	addi r0, r3, 1
/* 8026FBE0 0026B840  90 1D 00 0C */	stw r0, 0xc(r29)
/* 8026FBE4 0026B844  48 00 00 08 */	b lbl_8026FBEC
lbl_8026FBE8:
/* 8026FBE8 0026B848  3B C0 00 00 */	li r30, 0
lbl_8026FBEC:
/* 8026FBEC 0026B84C  7F E3 FB 78 */	mr r3, r31
/* 8026FBF0 0026B850  4B FF EB 95 */	bl OSRestoreInterrupts
/* 8026FBF4 0026B854  7F C3 F3 78 */	mr r3, r30
/* 8026FBF8 0026B858  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 8026FBFC 0026B85C  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 8026FC00 0026B860  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 8026FC04 0026B864  80 01 00 24 */	lwz r0, 0x24(r1)
/* 8026FC08 0026B868  7C 08 03 A6 */	mtlr r0
/* 8026FC0C 0026B86C  38 21 00 20 */	addi r1, r1, 0x20
/* 8026FC10 0026B870  4E 80 00 20 */	blr

.global OSInitCond
OSInitCond:
/* 8026FC14 0026B874  48 00 16 D4 */	b OSInitThreadQueue

.global OSSignalCond
OSSignalCond:
/* 8026FC18 0026B878  48 00 28 48 */	b OSWakeupThread