• Home
  • Raw
  • Download

Lines Matching +full:directory +full:- +full:based

2  * Parse RedBoot-style Flash Image System (FIS) tables and
6 * Copyright © 2001-2010 David Woodhouse <dwmw2@infradead.org>
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
40 unsigned char _pad[256-(16+7*sizeof(uint32_t))];
50 static int directory = CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK; variable
51 module_param(directory, int, 0);
79 if ( directory < 0 ) { in parse_redboot_partitions()
80 offset = master->size + directory * master->erasesize; in parse_redboot_partitions()
84 printk(KERN_NOTICE "Failed to find a non-bad block to check for RedBoot partition table\n"); in parse_redboot_partitions()
85 return -EIO; in parse_redboot_partitions()
87 offset -= master->erasesize; in parse_redboot_partitions()
90 offset = directory * master->erasesize; in parse_redboot_partitions()
92 offset += master->erasesize; in parse_redboot_partitions()
93 if (offset == master->size) in parse_redboot_partitions()
97 buf = vmalloc(master->erasesize); in parse_redboot_partitions()
100 return -ENOMEM; in parse_redboot_partitions()
103 master->name, offset); in parse_redboot_partitions()
105 ret = mtd_read(master, offset, master->erasesize, &retlen, in parse_redboot_partitions()
111 if (retlen != master->erasesize) { in parse_redboot_partitions()
112 ret = -EIO; in parse_redboot_partitions()
116 numslots = (master->erasesize / sizeof(struct fis_image_desc)); in parse_redboot_partitions()
118 if (!memcmp(buf[i].name, "FIS directory", 14)) { in parse_redboot_partitions()
119 /* This is apparently the FIS directory entry for the in parse_redboot_partitions()
120 * FIS directory itself. The FIS directory size is in parse_redboot_partitions()
123 * a byte swapped FIS directory - swap all the entries! in parse_redboot_partitions()
128 /* RedBoot can combine the FIS directory and in parse_redboot_partitions()
130 we assume wrong-endian if either the swapped in parse_redboot_partitions()
134 if (swab32(buf[i].size) == master->erasesize || in parse_redboot_partitions()
135 (buf[i].size > master->erasesize in parse_redboot_partitions()
136 && swab32(buf[i].size) < master->erasesize)) { in parse_redboot_partitions()
138 /* Update numslots based on actual FIS directory size */ in parse_redboot_partitions()
164 } else if (buf[i].size < master->erasesize) { in parse_redboot_partitions()
165 /* Update numslots based on actual FIS directory size */ in parse_redboot_partitions()
174 master->name); in parse_redboot_partitions()
195 ret = -ENOMEM; in parse_redboot_partitions()
198 new_fl->img = &buf[i]; in parse_redboot_partitions()
199 if (data && data->origin) in parse_redboot_partitions()
200 buf[i].flash_base -= data->origin; in parse_redboot_partitions()
202 buf[i].flash_base &= master->size-1; in parse_redboot_partitions()
208 while(*prev && (*prev)->img->flash_base < new_fl->img->flash_base) in parse_redboot_partitions()
209 prev = &(*prev)->next; in parse_redboot_partitions()
210 new_fl->next = *prev; in parse_redboot_partitions()
216 if (fl->img->flash_base) { in parse_redboot_partitions()
221 for (tmp_fl = fl; tmp_fl->next; tmp_fl = tmp_fl->next) { in parse_redboot_partitions()
222 …if (tmp_fl->img->flash_base + tmp_fl->img->size + master->erasesize <= tmp_fl->next->img->flash_ba… in parse_redboot_partitions()
231 ret = -ENOMEM; in parse_redboot_partitions()
246 if (fl->img->flash_base) { in parse_redboot_partitions()
248 parts[0].size = fl->img->flash_base; in parse_redboot_partitions()
254 parts[i].size = fl->img->size; in parse_redboot_partitions()
255 parts[i].offset = fl->img->flash_base; in parse_redboot_partitions()
258 strcpy(names, fl->img->name); in parse_redboot_partitions()
262 !memcmp(names, "FIS directory", 14)) { in parse_redboot_partitions()
269 …if(fl->next && fl->img->flash_base + fl->img->size + master->erasesize <= fl->next->img->flash_bas… in parse_redboot_partitions()
271 parts[i].offset = parts[i-1].size + parts[i-1].offset; in parse_redboot_partitions()
272 parts[i].size = fl->next->img->flash_base - parts[i].offset; in parse_redboot_partitions()
277 fl = fl->next; in parse_redboot_partitions()
285 fl = fl->next; in parse_redboot_partitions()