aboutsummaryrefslogtreecommitdiffstats
path: root/firmware/ihex2fw.c
diff options
context:
space:
mode:
authorMarc Zyngier <maz@misterjones.org>2008-08-02 13:12:23 -0400
committerDavid Woodhouse <David.Woodhouse@intel.com>2008-08-02 13:36:10 -0400
commit85ebd00334099fd5d296bcae74a66c943d46686d (patch)
tree07f799155fd03f15606e7c49a7d6547fb6f18563 /firmware/ihex2fw.c
parentf1136d022af8f07a97f59c6d07483bdb82ffbd8e (diff)
Fix IHEX firmware generation/loading
Fix both the IHEX firmware generation (len field always null, and EOF marker a byte too short) and loading (struct ihex_binrec needs to be packed to reflect the on-disk structure). Signed-off-by: Marc Zyngier <maz@misterjones.org> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'firmware/ihex2fw.c')
-rw-r--r--firmware/ihex2fw.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/firmware/ihex2fw.c b/firmware/ihex2fw.c
index 660b191ed75e..8f7fdaa9e010 100644
--- a/firmware/ihex2fw.c
+++ b/firmware/ihex2fw.c
@@ -250,19 +250,19 @@ static void file_record(struct ihex_binrec *record)
250 250
251static int output_records(int outfd) 251static int output_records(int outfd)
252{ 252{
253 unsigned char zeroes[5] = {0, 0, 0, 0, 0}; 253 unsigned char zeroes[6] = {0, 0, 0, 0, 0, 0};
254 struct ihex_binrec *p = records; 254 struct ihex_binrec *p = records;
255 255
256 while (p) { 256 while (p) {
257 uint16_t writelen = (p->len + 9) & ~3; 257 uint16_t writelen = (p->len + 9) & ~3;
258 258
259 p->addr = htonl(p->addr); 259 p->addr = htonl(p->addr);
260 p->len = htonl(p->len); 260 p->len = htons(p->len);
261 write(outfd, &p->addr, writelen); 261 write(outfd, &p->addr, writelen);
262 p = p->next; 262 p = p->next;
263 } 263 }
264 /* EOF record is zero length, since we don't bother to represent 264 /* EOF record is zero length, since we don't bother to represent
265 the type field in the binary version */ 265 the type field in the binary version */
266 write(outfd, zeroes, 5); 266 write(outfd, zeroes, 6);
267 return 0; 267 return 0;
268} 268}