summaryrefslogtreecommitdiff
path: root/firmware/rolo.c
diff options
context:
space:
mode:
authorBarry Wardell <rockbox@barrywardell.net>2007-06-04 13:48:21 +0000
committerBarry Wardell <rockbox@barrywardell.net>2007-06-04 13:48:21 +0000
commit54c73a24b6841efb06ee812831892960e5584e26 (patch)
treef235c11a81ee29a8b826cef7908b8a5fd50dfc8c /firmware/rolo.c
parent3611b4c8d8498c808bb0c6c26975e166e637a0aa (diff)
downloadrockbox-54c73a24b6841efb06ee812831892960e5584e26.tar.gz
rockbox-54c73a24b6841efb06ee812831892960e5584e26.zip
Bring back rolo for mi4-based targets (H10 and Sansa).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13550 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/rolo.c')
-rw-r--r--firmware/rolo.c19
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) {