Subversion Repositories freemyipod

Rev

Rev 881 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 881 Rev 909
Line 104... Line 104...
104
#ifdef UMSBOOT_HAVE_CONSOLE
104
#ifdef UMSBOOT_HAVE_CONSOLE
105
        console_puts(&umsboot_console, "\nLoading UBI file...\n");
105
        console_puts(&umsboot_console, "\nLoading UBI file...\n");
106
        console_flush(&umsboot_console);
106
        console_flush(&umsboot_console);
107
#endif
107
#endif
108
        int found = 0;
108
        int found = 0;
-
 
109
        uint16_t ubicluster = 0;
-
 
110
        uint32_t ubisize = 0;
109
        uint16_t cluster = 0;
111
        uint16_t cluster = 0;
110
        uint32_t size = 0;
-
 
111
        uint16_t totalclusters = 0;
112
        uint16_t totalclusters = 0;
112
        for (i = 0; i < RAMDISK_SECTORSIZE; i += 32)
113
        for (i = 0; i < RAMDISK_SECTORSIZE; i += 32)
113
            if (!RAMDISK[1 + fatsectors][i]) break;
114
            if (!RAMDISK[1 + fatsectors][i]) break;
114
            else if (RAMDISK[1 + fatsectors][i] == 0xe5) continue;
115
            else if (RAMDISK[1 + fatsectors][i] == 0xe5) continue;
115
            else if (((((uint32_t*)RAMDISK[1 + fatsectors])[(i + 8) >> 2]) & 0xffffff) == 0x494255)
116
            else if (((((uint32_t*)RAMDISK[1 + fatsectors])[(i + 8) >> 2]) & 0xffffff) == 0x494255)
116
            {
117
            {
117
                cluster = ((uint16_t*)RAMDISK[1 + fatsectors])[(i + 26) >> 1];
118
                ubicluster = ((uint16_t*)RAMDISK[1 + fatsectors])[(i + 26) >> 1];
118
                size = ((uint32_t*)RAMDISK[1 + fatsectors])[(i + 28) >> 2];
119
                ubisize = ((uint32_t*)RAMDISK[1 + fatsectors])[(i + 28) >> 2];
119
                RAMDISK[1 + fatsectors][i] = 0xe5;
120
                RAMDISK[1 + fatsectors][i] = 0xe5;
120
                found++;
121
                found++;
121
            }
122
            }
122
            else if (((uint16_t*)RAMDISK[1 + fatsectors])[(i + 26) >> 1])
123
            else if ((cluster = ((uint16_t*)RAMDISK[1 + fatsectors])[(i + 26) >> 1]))
-
 
124
                while (cluster != 0xffff)
-
 
125
                {
123
                totalclusters += (((uint32_t*)RAMDISK[1 + fatsectors])[(i + 28) >> 2]
126
                    cluster = ((uint16_t*)RAMDISK[1])[cluster];
124
                                + RAMDISK_SECTORSIZE - 1) / RAMDISK_SECTORSIZE;
127
                    totalclusters++;
-
 
128
                }
125
        if (!found)
129
        if (!found)
126
        {
130
        {
127
#ifdef UMSBOOT_HAVE_CONSOLE
131
#ifdef UMSBOOT_HAVE_CONSOLE
128
            console_puts(&umsboot_console, "No UBI file found!\nPlease retry.\n");
132
            console_puts(&umsboot_console, "No UBI file found!\nPlease retry.\n");
129
            console_flush(&umsboot_console);
133
            console_flush(&umsboot_console);
Line 136... Line 140...
136
            console_puts(&umsboot_console, "Multiple UBI files found!\nPlease copy exactly one.\nPlease retry.\n");
140
            console_puts(&umsboot_console, "Multiple UBI files found!\nPlease copy exactly one.\nPlease retry.\n");
137
            console_flush(&umsboot_console);
141
            console_flush(&umsboot_console);
138
#endif
142
#endif
139
            continue;
143
            continue;
140
        }
144
        }
141
        if (!size || !cluster)
145
        if (!ubisize || !ubicluster)
142
        {
146
        {
143
#ifdef UMSBOOT_HAVE_CONSOLE
147
#ifdef UMSBOOT_HAVE_CONSOLE
144
            console_puts(&umsboot_console, "UBI file is empty!\nPlease retry.\n");
148
            console_puts(&umsboot_console, "UBI file is empty!\nPlease retry.\n");
145
            console_flush(&umsboot_console);
149
            console_flush(&umsboot_console);
146
#endif
150
#endif
147
            continue;
151
            continue;
148
        }
152
        }
149
        uint16_t dest = 0;
153
        uint16_t dest = 0;
150
        while (cluster != 0xffff)
154
        while (ubicluster != 0xffff)
151
        {
155
        {
152
            swap(fatsectors + cluster, dest++);
156
            swap(fatsectors + ubicluster, dest++);
153
            cluster = ((uint16_t*)RAMDISK[swapmap[1 + (cluster / (RAMDISK_SECTORSIZE / 2))]])
157
            ubicluster = ((uint16_t*)RAMDISK[swapmap[1 + (ubicluster / (RAMDISK_SECTORSIZE / 2))]])
154
                                         [cluster % (RAMDISK_SECTORSIZE / 2)];
158
                                            [ubicluster % (RAMDISK_SECTORSIZE / 2)];
155
        }
159
        }
156
#ifdef UMSBOOT_HAVE_CONSOLE
160
#ifdef UMSBOOT_HAVE_CONSOLE
157
        console_puts(&umsboot_console, "Rearranging files...\n");
161
        console_puts(&umsboot_console, "Rearranging files...\n");
158
        console_flush(&umsboot_console);
162
        console_flush(&umsboot_console);
159
#endif
163
#endif
Line 169... Line 173...
169
            else if (RAMDISK[swapmap[1 + fatsectors]][i] == 0xe5) continue;
173
            else if (RAMDISK[swapmap[1 + fatsectors]][i] == 0xe5) continue;
170
            else
174
            else
171
            {
175
            {
172
                memcpy(&newdir[newptr], &RAMDISK[swapmap[1 + fatsectors]][i], 0x20);
176
                memcpy(&newdir[newptr], &RAMDISK[swapmap[1 + fatsectors]][i], 0x20);
173
                cluster = ((uint16_t*)newdir)[(newptr + 26) >> 1];
177
                cluster = ((uint16_t*)newdir)[(newptr + 26) >> 1];
174
                size = ((uint32_t*)newdir)[(newptr + 28) >> 2];
-
 
175
                if (cluster)
178
                if (cluster)
176
                {
179
                {
177
                    ((uint16_t*)newdir)[(newptr + 26) >> 1] = dest;
180
                    ((uint16_t*)newdir)[(newptr + 26) >> 1] = dest;
178
                    while (cluster != 0xffff)
181
                    while (cluster != 0xffff)
179
                    {
182
                    {
Line 193... Line 196...
193
        fat16_write_mbr(RAMDISK_PTR, totalclusters + fatsectors + 2);
196
        fat16_write_mbr(RAMDISK_PTR, totalclusters + fatsectors + 2);
194
#ifdef UMSBOOT_HAVE_CONSOLE
197
#ifdef UMSBOOT_HAVE_CONSOLE
195
        console_puts(&umsboot_console, "Booting UBI file...");
198
        console_puts(&umsboot_console, "Booting UBI file...");
196
        console_flush(&umsboot_console);
199
        console_flush(&umsboot_console);
197
#endif
200
#endif
-
 
201
#ifdef DEBUG
-
 
202
        continue;
-
 
203
#else
198
        execfirmware(RAMDISK[0]);
204
        execfirmware(RAMDISK[0]);
-
 
205
#endif
199
    }
206
    }
200
}
207
}