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

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

.global hidd_pm_set_now
hidd_pm_set_now:
/* 802D26F4 002CE354  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802D26F8 002CE358  7C 08 02 A6 */	mflr r0
/* 802D26FC 002CE35C  3C 80 80 57 */	lis r4, lbl_8056B6F0@ha
/* 802D2700 002CE360  38 A0 00 00 */	li r5, 0
/* 802D2704 002CE364  90 01 00 24 */	stw r0, 0x24(r1)
/* 802D2708 002CE368  38 84 B6 F0 */	addi r4, r4, lbl_8056B6F0@l
/* 802D270C 002CE36C  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 802D2710 002CE370  88 04 00 6E */	lbz r0, 0x6e(r4)
/* 802D2714 002CE374  90 A1 00 0C */	stw r5, 0xc(r1)
/* 802D2718 002CE378  2C 00 00 00 */	cmpwi r0, 0
/* 802D271C 002CE37C  90 A1 00 10 */	stw r5, 0x10(r1)
/* 802D2720 002CE380  B0 A1 00 14 */	sth r5, 0x14(r1)
/* 802D2724 002CE384  98 A1 00 08 */	stb r5, 8(r1)
/* 802D2728 002CE388  40 82 00 38 */	bne lbl_802D2760
/* 802D272C 002CE38C  88 C4 00 6A */	lbz r6, 0x6a(r4)
/* 802D2730 002CE390  88 A3 00 08 */	lbz r5, 8(r3)
/* 802D2734 002CE394  7C 05 30 40 */	cmplw r5, r6
/* 802D2738 002CE398  40 82 00 40 */	bne lbl_802D2778
/* 802D273C 002CE39C  2C 05 00 00 */	cmpwi r5, 0
/* 802D2740 002CE3A0  41 82 00 20 */	beq lbl_802D2760
/* 802D2744 002CE3A4  A0 84 00 6C */	lhz r4, 0x6c(r4)
/* 802D2748 002CE3A8  A0 03 00 02 */	lhz r0, 2(r3)
/* 802D274C 002CE3AC  7C 04 00 40 */	cmplw r4, r0
/* 802D2750 002CE3B0  41 80 00 28 */	blt lbl_802D2778
/* 802D2754 002CE3B4  A0 03 00 00 */	lhz r0, 0(r3)
/* 802D2758 002CE3B8  7C 04 00 40 */	cmplw r4, r0
/* 802D275C 002CE3BC  41 81 00 1C */	bgt lbl_802D2778
lbl_802D2760:
/* 802D2760 002CE3C0  3C 80 80 57 */	lis r4, lbl_8056B6F0@ha
/* 802D2764 002CE3C4  38 00 00 FF */	li r0, 0xff
/* 802D2768 002CE3C8  38 84 B6 F0 */	addi r4, r4, lbl_8056B6F0@l
/* 802D276C 002CE3CC  38 60 00 01 */	li r3, 1
/* 802D2770 002CE3D0  98 04 00 78 */	stb r0, 0x78(r4)
/* 802D2774 002CE3D4  48 00 01 44 */	b lbl_802D28B8
lbl_802D2778:
/* 802D2778 002CE3D8  2C 05 00 02 */	cmpwi r5, 2
/* 802D277C 002CE3DC  41 82 00 80 */	beq lbl_802D27FC
/* 802D2780 002CE3E0  40 80 00 10 */	bge lbl_802D2790
/* 802D2784 002CE3E4  2C 05 00 00 */	cmpwi r5, 0
/* 802D2788 002CE3E8  41 82 00 14 */	beq lbl_802D279C
/* 802D278C 002CE3EC  48 00 00 E4 */	b lbl_802D2870
lbl_802D2790:
/* 802D2790 002CE3F0  2C 05 00 04 */	cmpwi r5, 4
/* 802D2794 002CE3F4  40 80 00 DC */	bge lbl_802D2870
/* 802D2798 002CE3F8  48 00 00 A0 */	b lbl_802D2838
lbl_802D279C:
/* 802D279C 002CE3FC  28 06 00 02 */	cmplwi r6, 2
/* 802D27A0 002CE400  40 82 00 2C */	bne lbl_802D27CC
/* 802D27A4 002CE404  3F E0 80 57 */	lis r31, lbl_8056B6F0@ha
/* 802D27A8 002CE408  38 A1 00 0C */	addi r5, r1, 0xc
/* 802D27AC 002CE40C  38 9F B6 F0 */	addi r4, r31, lbl_8056B6F0@l
/* 802D27B0 002CE410  38 60 00 80 */	li r3, 0x80
/* 802D27B4 002CE414  4B FF 66 F5 */	bl BTM_SetPowerMode
/* 802D27B8 002CE418  38 9F B6 F0 */	addi r4, r31, -18704
/* 802D27BC 002CE41C  38 00 00 01 */	li r0, 1
/* 802D27C0 002CE420  98 61 00 08 */	stb r3, 8(r1)
/* 802D27C4 002CE424  98 04 00 6E */	stb r0, 0x6e(r4)
/* 802D27C8 002CE428  48 00 00 A8 */	b lbl_802D2870
lbl_802D27CC:
/* 802D27CC 002CE42C  28 06 00 03 */	cmplwi r6, 3
/* 802D27D0 002CE430  40 82 00 A0 */	bne lbl_802D2870
/* 802D27D4 002CE434  3F E0 80 57 */	lis r31, lbl_8056B6F0@ha
/* 802D27D8 002CE438  38 A1 00 0C */	addi r5, r1, 0xc
/* 802D27DC 002CE43C  38 9F B6 F0 */	addi r4, r31, lbl_8056B6F0@l
/* 802D27E0 002CE440  38 60 00 80 */	li r3, 0x80
/* 802D27E4 002CE444  4B FF 66 C5 */	bl BTM_SetPowerMode
/* 802D27E8 002CE448  38 9F B6 F0 */	addi r4, r31, -18704
/* 802D27EC 002CE44C  38 00 00 01 */	li r0, 1
/* 802D27F0 002CE450  98 61 00 08 */	stb r3, 8(r1)
/* 802D27F4 002CE454  98 04 00 6E */	stb r0, 0x6e(r4)
/* 802D27F8 002CE458  48 00 00 78 */	b lbl_802D2870
lbl_802D27FC:
/* 802D27FC 002CE45C  2C 06 00 00 */	cmpwi r6, 0
/* 802D2800 002CE460  41 82 00 10 */	beq lbl_802D2810
/* 802D2804 002CE464  38 61 00 0C */	addi r3, r1, 0xc
/* 802D2808 002CE468  4B FF FE ED */	bl hidd_pm_set_now
/* 802D280C 002CE46C  48 00 00 64 */	b lbl_802D2870
lbl_802D2810:
/* 802D2810 002CE470  3F E0 80 57 */	lis r31, lbl_8056B6F0@ha
/* 802D2814 002CE474  7C 65 1B 78 */	mr r5, r3
/* 802D2818 002CE478  38 9F B6 F0 */	addi r4, r31, lbl_8056B6F0@l
/* 802D281C 002CE47C  38 60 00 80 */	li r3, 0x80
/* 802D2820 002CE480  4B FF 66 89 */	bl BTM_SetPowerMode
/* 802D2824 002CE484  38 9F B6 F0 */	addi r4, r31, -18704
/* 802D2828 002CE488  38 00 00 01 */	li r0, 1
/* 802D282C 002CE48C  98 61 00 08 */	stb r3, 8(r1)
/* 802D2830 002CE490  98 04 00 6E */	stb r0, 0x6e(r4)
/* 802D2834 002CE494  48 00 00 3C */	b lbl_802D2870
lbl_802D2838:
/* 802D2838 002CE498  2C 06 00 00 */	cmpwi r6, 0
/* 802D283C 002CE49C  41 82 00 10 */	beq lbl_802D284C
/* 802D2840 002CE4A0  38 61 00 0C */	addi r3, r1, 0xc
/* 802D2844 002CE4A4  4B FF FE B1 */	bl hidd_pm_set_now
/* 802D2848 002CE4A8  48 00 00 28 */	b lbl_802D2870
lbl_802D284C:
/* 802D284C 002CE4AC  3F E0 80 57 */	lis r31, lbl_8056B6F0@ha
/* 802D2850 002CE4B0  7C 65 1B 78 */	mr r5, r3
/* 802D2854 002CE4B4  38 9F B6 F0 */	addi r4, r31, lbl_8056B6F0@l
/* 802D2858 002CE4B8  38 60 00 80 */	li r3, 0x80
/* 802D285C 002CE4BC  4B FF 66 4D */	bl BTM_SetPowerMode
/* 802D2860 002CE4C0  38 9F B6 F0 */	addi r4, r31, -18704
/* 802D2864 002CE4C4  38 00 00 01 */	li r0, 1
/* 802D2868 002CE4C8  98 61 00 08 */	stb r3, 8(r1)
/* 802D286C 002CE4CC  98 04 00 6E */	stb r0, 0x6e(r4)
lbl_802D2870:
/* 802D2870 002CE4D0  88 81 00 08 */	lbz r4, 8(r1)
/* 802D2874 002CE4D4  28 04 00 01 */	cmplwi r4, 1
/* 802D2878 002CE4D8  41 81 00 0C */	bgt lbl_802D2884
/* 802D287C 002CE4DC  38 60 00 01 */	li r3, 1
/* 802D2880 002CE4E0  48 00 00 38 */	b lbl_802D28B8
lbl_802D2884:
/* 802D2884 002CE4E4  3C 60 80 57 */	lis r3, lbl_8056B6F0@ha
/* 802D2888 002CE4E8  38 04 00 37 */	addi r0, r4, 0x37
/* 802D288C 002CE4EC  38 63 B6 F0 */	addi r3, r3, lbl_8056B6F0@l
/* 802D2890 002CE4F0  98 01 00 08 */	stb r0, 8(r1)
/* 802D2894 002CE4F4  81 83 00 C4 */	lwz r12, 0xc4(r3)
/* 802D2898 002CE4F8  2C 0C 00 00 */	cmpwi r12, 0
/* 802D289C 002CE4FC  41 82 00 18 */	beq lbl_802D28B4
/* 802D28A0 002CE500  88 83 00 6F */	lbz r4, 0x6f(r3)
/* 802D28A4 002CE504  38 A1 00 08 */	addi r5, r1, 8
/* 802D28A8 002CE508  38 60 00 04 */	li r3, 4
/* 802D28AC 002CE50C  7D 89 03 A6 */	mtctr r12
/* 802D28B0 002CE510  4E 80 04 21 */	bctrl
lbl_802D28B4:
/* 802D28B4 002CE514  38 60 00 00 */	li r3, 0
lbl_802D28B8:
/* 802D28B8 002CE518  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802D28BC 002CE51C  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 802D28C0 002CE520  7C 08 03 A6 */	mtlr r0
/* 802D28C4 002CE524  38 21 00 20 */	addi r1, r1, 0x20
/* 802D28C8 002CE528  4E 80 00 20 */	blr

.global hidd_pm_proc_mode_change
hidd_pm_proc_mode_change:
/* 802D28CC 002CE52C  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802D28D0 002CE530  7C 08 02 A6 */	mflr r0
/* 802D28D4 002CE534  90 01 00 24 */	stw r0, 0x24(r1)
/* 802D28D8 002CE538  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 802D28DC 002CE53C  93 C1 00 18 */	stw r30, 0x18(r1)
/* 802D28E0 002CE540  3F C0 80 57 */	lis r30, lbl_8056B6F0@ha
/* 802D28E4 002CE544  3B DE B6 F0 */	addi r30, r30, lbl_8056B6F0@l
/* 802D28E8 002CE548  93 A1 00 14 */	stw r29, 0x14(r1)
/* 802D28EC 002CE54C  7C 9D 23 78 */	mr r29, r4
/* 802D28F0 002CE550  88 1E 01 40 */	lbz r0, 0x140(r30)
/* 802D28F4 002CE554  98 61 00 08 */	stb r3, 8(r1)
/* 802D28F8 002CE558  2C 00 00 00 */	cmpwi r0, 0
/* 802D28FC 002CE55C  B0 A1 00 0A */	sth r5, 0xa(r1)
/* 802D2900 002CE560  41 82 01 08 */	beq lbl_802D2A08
/* 802D2904 002CE564  3B E0 00 00 */	li r31, 0
/* 802D2908 002CE568  54 60 06 3F */	clrlwi. r0, r3, 0x18
/* 802D290C 002CE56C  9B FE 00 6E */	stb r31, 0x6e(r30)
/* 802D2910 002CE570  41 82 00 28 */	beq lbl_802D2938
/* 802D2914 002CE574  81 9E 00 C4 */	lwz r12, 0xc4(r30)
/* 802D2918 002CE578  2C 0C 00 00 */	cmpwi r12, 0
/* 802D291C 002CE57C  41 82 00 EC */	beq lbl_802D2A08
/* 802D2920 002CE580  38 A1 00 08 */	addi r5, r1, 8
/* 802D2924 002CE584  88 9E 00 6F */	lbz r4, 0x6f(r30)
/* 802D2928 002CE588  38 60 00 04 */	li r3, 4
/* 802D292C 002CE58C  7D 89 03 A6 */	mtctr r12
/* 802D2930 002CE590  4E 80 04 21 */	bctrl
/* 802D2934 002CE594  48 00 00 D4 */	b lbl_802D2A08
lbl_802D2938:
/* 802D2938 002CE598  88 1E 00 78 */	lbz r0, 0x78(r30)
/* 802D293C 002CE59C  54 A3 04 3E */	clrlwi r3, r5, 0x10
/* 802D2940 002CE5A0  98 9E 00 6A */	stb r4, 0x6a(r30)
/* 802D2944 002CE5A4  28 00 00 FF */	cmplwi r0, 0xff
/* 802D2948 002CE5A8  B0 BE 00 6C */	sth r5, 0x6c(r30)
/* 802D294C 002CE5AC  41 82 00 54 */	beq lbl_802D29A0
/* 802D2950 002CE5B0  7C 00 20 40 */	cmplw r0, r4
/* 802D2954 002CE5B4  40 82 00 24 */	bne lbl_802D2978
/* 802D2958 002CE5B8  2C 00 00 00 */	cmpwi r0, 0
/* 802D295C 002CE5BC  41 82 00 30 */	beq lbl_802D298C
/* 802D2960 002CE5C0  A0 1E 00 72 */	lhz r0, 0x72(r30)
/* 802D2964 002CE5C4  7C 03 00 40 */	cmplw r3, r0
/* 802D2968 002CE5C8  41 80 00 10 */	blt lbl_802D2978
/* 802D296C 002CE5CC  A0 1E 00 70 */	lhz r0, 0x70(r30)
/* 802D2970 002CE5D0  7C 03 00 40 */	cmplw r3, r0
/* 802D2974 002CE5D4  40 81 00 18 */	ble lbl_802D298C
lbl_802D2978:
/* 802D2978 002CE5D8  3C 60 80 57 */	lis r3, lbl_8056B6F0@ha
/* 802D297C 002CE5DC  38 63 B6 F0 */	addi r3, r3, lbl_8056B6F0@l
/* 802D2980 002CE5E0  38 63 00 70 */	addi r3, r3, 0x70
/* 802D2984 002CE5E4  4B FF FD 71 */	bl hidd_pm_set_now
/* 802D2988 002CE5E8  48 00 00 58 */	b lbl_802D29E0
lbl_802D298C:
/* 802D298C 002CE5EC  3C 60 80 57 */	lis r3, lbl_8056B6F0@ha
/* 802D2990 002CE5F0  38 00 00 FF */	li r0, 0xff
/* 802D2994 002CE5F4  38 63 B6 F0 */	addi r3, r3, lbl_8056B6F0@l
/* 802D2998 002CE5F8  98 03 00 78 */	stb r0, 0x78(r3)
/* 802D299C 002CE5FC  48 00 00 44 */	b lbl_802D29E0
lbl_802D29A0:
/* 802D29A0 002CE600  2C 04 00 00 */	cmpwi r4, 0
/* 802D29A4 002CE604  40 82 00 3C */	bne lbl_802D29E0
/* 802D29A8 002CE608  38 7E 00 70 */	addi r3, r30, 0x70
/* 802D29AC 002CE60C  38 9E 00 4C */	addi r4, r30, 0x4c
/* 802D29B0 002CE610  38 A0 00 0A */	li r5, 0xa
/* 802D29B4 002CE614  4B D3 16 4D */	bl memcpy
/* 802D29B8 002CE618  38 7E 00 4C */	addi r3, r30, 0x4c
/* 802D29BC 002CE61C  4B FF FD 39 */	bl hidd_pm_set_now
/* 802D29C0 002CE620  3C 60 80 2D */	lis r3, hidd_pm_inact_timeout@ha
/* 802D29C4 002CE624  9B FE 00 6F */	stb r31, 0x6f(r30)
/* 802D29C8 002CE628  38 63 2A 24 */	addi r3, r3, hidd_pm_inact_timeout@l
/* 802D29CC 002CE62C  38 80 00 16 */	li r4, 0x16
/* 802D29D0 002CE630  90 7E 00 44 */	stw r3, 0x44(r30)
/* 802D29D4 002CE634  38 7E 00 34 */	addi r3, r30, 0x34
/* 802D29D8 002CE638  38 A0 00 3C */	li r5, 0x3c
/* 802D29DC 002CE63C  4B FE AB 01 */	bl btu_start_timer
lbl_802D29E0:
/* 802D29E0 002CE640  3C 60 80 57 */	lis r3, lbl_8056B6F0@ha
/* 802D29E4 002CE644  38 63 B6 F0 */	addi r3, r3, lbl_8056B6F0@l
/* 802D29E8 002CE648  81 83 00 C4 */	lwz r12, 0xc4(r3)
/* 802D29EC 002CE64C  2C 0C 00 00 */	cmpwi r12, 0
/* 802D29F0 002CE650  41 82 00 18 */	beq lbl_802D2A08
/* 802D29F4 002CE654  7F A4 EB 78 */	mr r4, r29
/* 802D29F8 002CE658  38 A1 00 0A */	addi r5, r1, 0xa
/* 802D29FC 002CE65C  38 60 00 03 */	li r3, 3
/* 802D2A00 002CE660  7D 89 03 A6 */	mtctr r12
/* 802D2A04 002CE664  4E 80 04 21 */	bctrl
lbl_802D2A08:
/* 802D2A08 002CE668  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802D2A0C 002CE66C  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 802D2A10 002CE670  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 802D2A14 002CE674  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 802D2A18 002CE678  7C 08 03 A6 */	mtlr r0
/* 802D2A1C 002CE67C  38 21 00 20 */	addi r1, r1, 0x20
/* 802D2A20 002CE680  4E 80 00 20 */	blr

hidd_pm_inact_timeout:
/* 802D2A24 002CE684  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 802D2A28 002CE688  7C 08 02 A6 */	mflr r0
/* 802D2A2C 002CE68C  38 A0 00 0A */	li r5, 0xa
/* 802D2A30 002CE690  90 01 00 14 */	stw r0, 0x14(r1)
/* 802D2A34 002CE694  93 E1 00 0C */	stw r31, 0xc(r1)
/* 802D2A38 002CE698  3F E0 80 57 */	lis r31, lbl_8056B6F0@ha
/* 802D2A3C 002CE69C  3B FF B6 F0 */	addi r31, r31, lbl_8056B6F0@l
/* 802D2A40 002CE6A0  38 7F 00 70 */	addi r3, r31, 0x70
/* 802D2A44 002CE6A4  38 9F 00 56 */	addi r4, r31, 0x56
/* 802D2A48 002CE6A8  4B D3 15 B9 */	bl memcpy
/* 802D2A4C 002CE6AC  38 7F 00 56 */	addi r3, r31, 0x56
/* 802D2A50 002CE6B0  4B FF FC A5 */	bl hidd_pm_set_now
/* 802D2A54 002CE6B4  38 00 00 01 */	li r0, 1
/* 802D2A58 002CE6B8  98 1F 00 6F */	stb r0, 0x6f(r31)
/* 802D2A5C 002CE6BC  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 802D2A60 002CE6C0  80 01 00 14 */	lwz r0, 0x14(r1)
/* 802D2A64 002CE6C4  7C 08 03 A6 */	mtlr r0
/* 802D2A68 002CE6C8  38 21 00 10 */	addi r1, r1, 0x10
/* 802D2A6C 002CE6CC  4E 80 00 20 */	blr