diff options
Diffstat (limited to 'firmware/rolo.c')
-rw-r--r-- | firmware/rolo.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/firmware/rolo.c b/firmware/rolo.c index 0375a7ac82..0b8a4f28ba 100644 --- a/firmware/rolo.c +++ b/firmware/rolo.c | |||
@@ -30,6 +30,14 @@ | |||
30 | #include "string.h" | 30 | #include "string.h" |
31 | #include "buffer.h" | 31 | #include "buffer.h" |
32 | 32 | ||
33 | #ifdef MI4_FORMAT | ||
34 | #include "crc32-mi4.h" | ||
35 | #undef FIRMWARE_OFFSET_FILE_CRC | ||
36 | #undef FIRMWARE_OFFSET_FILE_DATA | ||
37 | #define FIRMWARE_OFFSET_FILE_CRC 0xC | ||
38 | #define FIRMWARE_OFFSET_FILE_DATA 0x200 | ||
39 | #endif | ||
40 | |||
33 | #if !defined(IRIVER_IFP7XX_SERIES) && \ | 41 | #if !defined(IRIVER_IFP7XX_SERIES) && \ |
34 | (CONFIG_CPU != PP5002) && (CONFIG_CPU != S3C2440) | 42 | (CONFIG_CPU != PP5002) && (CONFIG_CPU != S3C2440) |
35 | /* FIX: this doesn't work on iFP, 3rd Gen ipods */ | 43 | /* FIX: this doesn't work on iFP, 3rd Gen ipods */ |
@@ -152,7 +160,9 @@ int rolo_load(const char* filename) | |||
152 | int fd; | 160 | int fd; |
153 | long length; | 161 | long length; |
154 | #if defined(CPU_COLDFIRE) || defined(CPU_PP) | 162 | #if defined(CPU_COLDFIRE) || defined(CPU_PP) |
163 | #if !defined(MI4_FORMAT) | ||
155 | int i; | 164 | int i; |
165 | #endif | ||
156 | unsigned long checksum,file_checksum; | 166 | unsigned long checksum,file_checksum; |
157 | #else | 167 | #else |
158 | long file_length; | 168 | long file_length; |
@@ -189,8 +199,11 @@ int rolo_load(const char* filename) | |||
189 | return -1; | 199 | return -1; |
190 | } | 200 | } |
191 | 201 | ||
202 | #if !defined(MI4_FORMAT) | ||
192 | /* Rockbox checksums are big-endian */ | 203 | /* Rockbox checksums are big-endian */ |
193 | file_checksum = betoh32(file_checksum); | 204 | file_checksum = betoh32(file_checksum); |
205 | #endif | ||
206 | |||
194 | #ifdef CPU_PP | 207 | #ifdef CPU_PP |
195 | cpu_message = COP_REBOOT; | 208 | cpu_message = COP_REBOOT; |
196 | COP_CTL = PROC_WAKE; | 209 | COP_CTL = PROC_WAKE; |
@@ -208,11 +221,17 @@ int rolo_load(const char* filename) | |||
208 | return -1; | 221 | return -1; |
209 | } | 222 | } |
210 | 223 | ||
224 | #ifdef MI4_FORMAT | ||
225 | /* Check CRC32 to see if we have a valid file */ | ||
226 | chksum_crc32gentab(); | ||
227 | checksum = chksum_crc32 (audiobuf, length); | ||
228 | #else | ||
211 | checksum = MODEL_NUMBER; | 229 | checksum = MODEL_NUMBER; |
212 | 230 | ||
213 | for(i = 0;i < length;i++) { | 231 | for(i = 0;i < length;i++) { |
214 | checksum += audiobuf[i]; | 232 | checksum += audiobuf[i]; |
215 | } | 233 | } |
234 | #endif | ||
216 | 235 | ||
217 | /* Verify checksum against file header */ | 236 | /* Verify checksum against file header */ |
218 | if (checksum != file_checksum) { | 237 | if (checksum != file_checksum) { |