summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2011-01-31 19:16:06 +0000
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2011-01-31 19:16:06 +0000
commit6f2bba961f7744dd1f136a95b5a460daa0f9e1fe (patch)
treea2b328b0a0eb4d8aa7286960506583eaf1408aaf
parentad6c3bc8c5251106a8a8e6ed6d6d3b42f0be0f6d (diff)
downloadrockbox-6f2bba961f7744dd1f136a95b5a460daa0f9e1fe.tar.gz
rockbox-6f2bba961f7744dd1f136a95b5a460daa0f9e1fe.zip
mkmpioboot: restructure model / firmware file information.
Collect the various arrays holding model names, numbers etc. into a structure. This makes the code cleaner since there aren't multiple arrays that need to be kept in sync any more and avoids issues with other tools (like mkamsboot) when linked together with Rockbox Utility. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29176 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--rbutil/mkmpioboot/mkmpioboot.c47
1 files changed, 21 insertions, 26 deletions
diff --git a/rbutil/mkmpioboot/mkmpioboot.c b/rbutil/mkmpioboot/mkmpioboot.c
index b36f009730..ea619ed2f2 100644
--- a/rbutil/mkmpioboot/mkmpioboot.c
+++ b/rbutil/mkmpioboot/mkmpioboot.c
@@ -30,31 +30,26 @@
30#define MPIO_STRING_OFFSET 0xfffe0 /* offset of the version string in OF */ 30#define MPIO_STRING_OFFSET 0xfffe0 /* offset of the version string in OF */
31#define BOOTLOADER_MAX_SIZE 0x1f800 /* free space size */ 31#define BOOTLOADER_MAX_SIZE 0x1f800 /* free space size */
32 32
33/* Descriptive name of these models */ 33struct mpio_model {
34static const char* model_names[] = { 34 /* Descriptive name of this model */
35 [MODEL_HD200] = "MPIO HD200", 35 const char* model_name;
36 [MODEL_HD300] = "MPIO HD300", 36 /* Model name used in the Rockbox header in ".mpio" files - these match the
37 -add parameter to the "scramble" tool */
38 const char* rb_model_name;
39 /* Model number used to initialise the checksum in the Rockbox header in
40 ".mpio" files - these are the same as MODEL_NUMBER in config-target.h */
41 const int rb_model_num;
42 /* Strings which indentifies OF version */
43 const char* of_model_string;
37}; 44};
38 45
39/* Model names used in the Rockbox header in ".mpio" files - these match the 46static const struct mpio_model mpio_models[] = {
40 -add parameter to the "scramble" tool */ 47 [MODEL_HD200] =
41static const char* rb_model_names[] = { 48 { "MPIO HD200", "hd20", 69, "HD200 HDD Audio Ver113005" },
42 [MODEL_HD200] = "hd20", 49 [MODEL_HD300] =
43 [MODEL_HD300] = "hd30", 50 { "MPIO HD300", "hd30", 70, "HD300 HDD Audio Ver113006" },
44}; 51};
45 52
46/* Model numbers used to initialise the checksum in the Rockbox header in
47 ".mpio" files - these are the same as MODEL_NUMBER in config-target.h */
48static const int rb_model_num[] = {
49 [MODEL_HD200] = 69,
50 [MODEL_HD300] = 70,
51};
52
53/* Strings which indentify OF version */
54static const char* of_model_string[] = {
55 [MODEL_HD200] = "HD200 HDD Audio Ver113005",
56 [MODEL_HD300] = "HD300 HDD Audio Ver113006",
57};
58 53
59/* MPIO HD200 and HD300 firmware is plain binary image 54/* MPIO HD200 and HD300 firmware is plain binary image
60 * 4 bytes of initial SP (loaded on reset) 55 * 4 bytes of initial SP (loaded on reset)
@@ -123,7 +118,7 @@ int mkmpioboot(const char* infile, const char* bootfile, const char* outfile, in
123 */ 118 */
124 119
125 for(model_index = 0; model_index < NUM_MODELS; model_index++) 120 for(model_index = 0; model_index < NUM_MODELS; model_index++)
126 if (strcmp(of_model_string[model_index], 121 if (strcmp(mpio_models[model_index].of_model_string,
127 (char*)(image + MPIO_STRING_OFFSET)) == 0) 122 (char*)(image + MPIO_STRING_OFFSET)) == 0)
128 break; 123 break;
129 124
@@ -134,7 +129,7 @@ int mkmpioboot(const char* infile, const char* bootfile, const char* outfile, in
134 } 129 }
135 130
136 fprintf(stderr, "[INFO] Loading original firmware file for %s\n", 131 fprintf(stderr, "[INFO] Loading original firmware file for %s\n",
137 model_names[model_index]); 132 mpio_models[model_index].model_name);
138 133
139 /* Now, read the boot loader into the image */ 134 /* Now, read the boot loader into the image */
140 f = fopen(bootfile, "rb"); 135 f = fopen(bootfile, "rb");
@@ -178,11 +173,11 @@ int mkmpioboot(const char* infile, const char* bootfile, const char* outfile, in
178 /* get bootloader header*/ 173 /* get bootloader header*/
179 fread(header,1,8,f); 174 fread(header,1,8,f);
180 175
181 if ( memcmp(header + 4, rb_model_names[model_index], 4) != 0 ) 176 if ( memcmp(header + 4, mpio_models[model_index].rb_model_name, 4) != 0 )
182 { 177 {
183 fprintf(stderr, "[ERR] Original firmware and rockbox bootloader mismatch!\n"); 178 fprintf(stderr, "[ERR] Original firmware and rockbox bootloader mismatch!\n");
184 fprintf(stderr, "[ERR] Double check that you have bootloader for %s\n", 179 fprintf(stderr, "[ERR] Double check that you have bootloader for %s\n",
185 model_names[model_index]); 180 mpio_models[model_index].model_name);
186 return -7; 181 return -7;
187 } 182 }
188 183
@@ -202,7 +197,7 @@ int mkmpioboot(const char* infile, const char* bootfile, const char* outfile, in
202 /* calculate checksum and compare with data 197 /* calculate checksum and compare with data
203 * from header 198 * from header
204 */ 199 */
205 file_checksum = checksum(image + origin, rb_model_num[model_index], len); 200 file_checksum = checksum(image + origin, mpio_models[model_index].rb_model_num, len);
206 201
207 if ( file_checksum != get_uint32be(header) ) 202 if ( file_checksum != get_uint32be(header) )
208 { 203 {