@@ -122,69 +122,76 @@ void patch(pk11_offs *pk11, pkg2_hdr_t *pkg2, link_t *kips) {
122
122
if (!customKern ) {
123
123
u32 crc = crc32c (pkg2 -> data , pkg2 -> sec_size [PKG2_SEC_KERNEL ]);
124
124
uPtr kern = (uPtr )& pkg2 -> data ;
125
- uPtr sendOff , recvOff , codeRcvOff , codeSndOff , svcVerifOff , svcDebugOff ;
125
+ uPtr sendOff , recvOff , codeRcvOff , codeSndOff , svcVerifOff , svcDebugOff , ver ;
126
126
switch (crc ){
127
- case 0x427f2647 :{
127
+ case 0x427f2647 :{ //1.0.0
128
128
svcVerifOff = 0x3764C ;
129
129
svcDebugOff = 0x44074 ;
130
130
sendOff = 0x23CC0 ;
131
131
recvOff = 0x219F0 ;
132
132
codeSndOff = 4 ;
133
133
codeRcvOff = 4 ;
134
+ ver = 0 ;
134
135
break ;
135
136
}
136
- case 0xae19cf1b :{
137
+ case 0xae19cf1b :{ //2.0.0
137
138
svcVerifOff = 0x54834 ;
138
139
svcDebugOff = 0x6086C ;
139
140
sendOff = 0x3F134 ;
140
141
recvOff = 0x3D1A8 ;
141
142
codeSndOff = 4 ;
142
143
codeRcvOff = 4 ;
144
+ ver = 1 ;
143
145
break ;
144
146
}
145
- case 0x73c9e274 :{
147
+ case 0x73c9e274 :{ //3.0.0
146
148
svcVerifOff = 0x3BD24 ;
147
149
svcDebugOff = 0x483FC ;
148
150
sendOff = 0x26080 ;
149
151
recvOff = 0x240F0 ;
150
152
codeSndOff = 4 ;
151
153
codeRcvOff = 4 ;
154
+ ver = 2 ;
152
155
break ;
153
156
}
154
- case 0xe0e8cdc4 :{
157
+ case 0xe0e8cdc4 :{ //3.0.2
155
158
svcVerifOff = 0x3BD24 ;
156
159
svcDebugOff = 0x48414 ;
157
160
sendOff = 0x26080 ;
158
161
recvOff = 0x240F0 ;
159
162
codeSndOff = 4 ;
160
163
codeRcvOff = 4 ;
164
+ ver = 3 ;
161
165
break ;
162
166
}
163
- case 0x485d0157 :{
167
+ case 0x485d0157 :{ //4.0.0
164
168
svcVerifOff = 0x41EB4 ;
165
169
svcDebugOff = 0x4EBFC ;
166
170
sendOff = 0x2AF64 ;
167
171
recvOff = 0x28F6C ;
168
172
codeSndOff = 8 ;
169
173
codeRcvOff = 4 ;
174
+ ver = 4 ;
170
175
break ;
171
176
}
172
- case 0xf3c363f2 :{
177
+ case 0xf3c363f2 :{ //5.0.0
173
178
svcVerifOff = 0x45E6C ;
174
179
svcDebugOff = 0x5513C ;
175
180
sendOff = 0x2AD34 ;
176
181
recvOff = 0x28DAC ;
177
182
codeSndOff = 8 ;
178
183
codeRcvOff = 8 ;
184
+ ver = 5 ;
179
185
break ;
180
186
}
181
- case 0x64ce1a44 :{
187
+ case 0x64ce1a44 :{ //6.0.0
182
188
svcVerifOff = 0x47EA0 ;
183
189
svcDebugOff = 0x57548 ;
184
190
sendOff = 0x2BB8C ;
185
191
recvOff = 0x29B6C ;
186
192
codeSndOff = 0x10 ;
187
193
codeRcvOff = 0x10 ;
194
+ ver = 6 ;
188
195
break ;
189
196
}
190
197
default :
@@ -193,17 +200,19 @@ void patch(pk11_offs *pk11, pkg2_hdr_t *pkg2, link_t *kips) {
193
200
}
194
201
195
202
//ID Send
196
- uPtr freeSpace = getFreeSpace ((void * )pkg2 -> data , 0x200 , pkg2 -> sec_size [PKG2_SEC_KERNEL ]); //Find area to write payload
197
- size_t payloadSize = sizeof (PRC_ID_SND_600 );
203
+ uPtr freeSpace = getFreeSpace ((void * )(kern + 0x45000 ), 0x200 , 0x20000 ) + 0x45000 ; //Find area to write payload
204
+ print ("Kernel Freespace: 0x%08X\n" , freeSpace );
205
+ size_t payloadSize ;
206
+ u32 * sndPayload = getSndPayload (ver , & payloadSize );
198
207
* (vu32 * )(kern + sendOff ) = _B (sendOff , freeSpace ); //write hook to payload
199
- memcpy ((void * )(kern + freeSpace ), ( void * ) PRC_ID_SND_600 , payloadSize ); //Copy payload to free space
208
+ memcpy ((void * )(kern + freeSpace ), sndPayload , payloadSize ); //Copy payload to free space
200
209
* (vu32 * )(kern + freeSpace + payloadSize ) = _B (freeSpace + payloadSize , sendOff + codeSndOff ); //Jump back skipping the hook
201
210
202
211
//ID Receive
203
212
freeSpace += (payloadSize + 4 );
204
- payloadSize = sizeof ( PRC_ID_RCV_600 );
213
+ u32 * rcvPayload = getRcvPayload ( ver , & payloadSize );
205
214
* (vu32 * )(kern + recvOff ) = _B (recvOff , freeSpace );
206
- memcpy ((void * )(kern + freeSpace ), ( void * ) PRC_ID_RCV_600 , payloadSize );
215
+ memcpy ((void * )(kern + freeSpace ), rcvPayload , payloadSize );
207
216
* (vu32 * )(kern + freeSpace + payloadSize ) = _B (freeSpace + payloadSize , recvOff + codeRcvOff );
208
217
209
218
//SVC patches
@@ -400,7 +409,7 @@ void firmware() {
400
409
((void (* )())PAYLOAD_ADDR )();
401
410
}
402
411
SYSREG (AHB_AHB_SPARE_REG ) = (volatile vu32 )0xFFFFFF9F ;
403
- PMC (APBDEV_PMC_SCRATCH49 ) = 0 ;
412
+ PMC (APBDEV_PMC_SCRATCH49 ) = 0 ;
404
413
405
414
if (btn_read () & BTN_VOL_DOWN ) {
406
415
print ("Booting verbosely\n" );
0 commit comments