All pastes #1818530 Raw Edit

Untitled

public text v1 · immutable
#1818530 ·published 2010-03-02 05:34 UTC
rendered paste body
diff --git a/src/hal/drivers/mesa-hostmot2/bitfile.c b/src/hal/drivers/mesa-hostmot2/bitfile.c
index 5e98656..2a26b1e 100644
--- a/src/hal/drivers/mesa-hostmot2/bitfile.c
+++ b/src/hal/drivers/mesa-hostmot2/bitfile.c
@@ -39,20 +39,22 @@
 
 
 static int bitfile_do_small_chunk(const struct firmware *fw, bitfile_chunk_t *chunk, int *i) {
-    if (*i + 2 > fw->size) {
+    if ((*i) + 2 > fw->size) {
         HM2_PRINT_NO_LL("bitfile chunk extends past end of firmware\n");
         return -ENODATA;
     }
 
-    chunk->size = (fw->data[*i] * 256) + fw->data[*i + 1];
+    chunk->size = (fw->data[(*i)] * 256) + fw->data[(*i) + 1];
     (*i) += 2;
+    HM2_PRINT_NO_LL("small chunk size is %d\n", chunk->size);
 
-    if (*i + chunk->size > fw->size) {
+    if ((*i) + chunk->size > fw->size) {
         HM2_PRINT_NO_LL("bitfile chunk extends past end of firmware\n");
         return -ENODATA;
     }
 
-    chunk->data = &fw->data[*i];
+    chunk->data = &fw->data[(*i)];
+    HM2_PRINT_NO_LL("small chunk data pointer is %p\n", chunk->data);
 
     if (chunk->data[chunk->size - 1] != '\0') {
         HM2_PRINT_NO_LL("bitfile small chunk is not NULL terminated\n");
@@ -68,21 +70,23 @@ static int bitfile_do_small_chunk(const struct firmware *fw, bitfile_chunk_t *ch
 
 
 static int bitfile_do_big_chunk(const struct firmware *fw, bitfile_chunk_t *chunk, int *i) {
-    if (*i + 4 > fw->size) {
+    if ((*i) + 4 > fw->size) {
         HM2_PRINT_NO_LL("bitfile chunk extends past end of firmware\n");
         return -ENODATA;
     }
 
-    chunk->size = ((uint32_t)fw->data[*i] << 24) + ((uint32_t)fw->data[*i + 1] << 16) + ((uint32_t)fw->data[*i + 2] << 8) + fw->data[*i + 3];
+    chunk->size = ((uint32_t)fw->data[(*i)] << 24) + ((uint32_t)fw->data[(*i) + 1] << 16) + ((uint32_t)fw->data[(*i) + 2] << 8) + fw->data[(*i) + 3];
     (*i) += 4;
+    HM2_PRINT_NO_LL("big chunk size is %d\n", chunk->size);
 
-    if (*i + chunk->size > fw->size) {
+    if ((*i) + chunk->size > fw->size) {
         HM2_PRINT_NO_LL("bitfile chunk extends past end of firmware\n");
         return -ENODATA;
     }
 
-    chunk->data = &fw->data[*i];
+    chunk->data = &fw->data[(*i)];
     (*i) += chunk->size;
+    HM2_PRINT_NO_LL("big chunk data pointer is %p\n", chunk->data);
 
     return 0;
 }
@@ -95,6 +99,7 @@ static int bitfile_parse_and_verify_chunk(const struct firmware *fw, bitfile_t *
 
     tag = fw->data[*i];
     (*i) ++;
+    HM2_PRINT_NO_LL("chunk tag is %c\n", tag);
 
     if ((*i) > fw->size) {
         HM2_PRINT_NO_LL("bitfile chunk '%c' size fell off the end!\n", tag);
@@ -172,6 +177,8 @@ int bitfile_parse_and_verify(const struct firmware *fw, bitfile_t *bitfile) {
     // verify the header
     //
 
+    HM2_PRINT_NO_LL("fw size is %d\n", fw->size);
+
     if (fw->size < BITFILE_HEADERLEN) {
         HM2_PRINT_NO_LL("bitfile is too short\n");
         return -ENODATA;
@@ -190,7 +197,9 @@ int bitfile_parse_and_verify(const struct firmware *fw, bitfile_t *bitfile) {
     //
 
     while (i < fw->size) {
+        HM2_PRINT_NO_LL("checking chunk at offset %d\n", i);
         r = bitfile_parse_and_verify_chunk(fw, bitfile, &i);
+        HM2_PRINT_NO_LL("chunk done at offset %d\n", i);
         if (r != 0) return r;
     }