<p>Bill XIE has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/21510">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ifdtool: redesign some structures<br><br>Redesign some array-like structures as true arrays,<br>and rewrite functions to dump them as loops.<br><br>This commit is one separated from the original I6d05418c.<br><br>Change-Id: I161c9a2ae83d26e658d67d0804e943fff95fe076<br>Signed-off-by: Bill XIE <persmule@gmail.com><br>---<br>M util/ifdtool/Makefile<br>M util/ifdtool/ifdtool.c<br>M util/ifdtool/ifdtool.h<br>3 files changed, 21 insertions(+), 120 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/10/21510/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/util/ifdtool/Makefile b/util/ifdtool/Makefile<br>index 77547ef..936aa50 100644<br>--- a/util/ifdtool/Makefile<br>+++ b/util/ifdtool/Makefile<br>@@ -18,7 +18,7 @@<br> CC      = gcc<br> INSTALL = /usr/bin/install<br> PREFIX  = /usr/local<br>-CFLAGS  = -O2 -g -Wall -W -Werror<br>+CFLAGS  = -O2 -g -Wall -W -Werror -I../../src/commonlib/include<br> LDFLAGS =<br> <br> OBJS = ifdtool.o<br>diff --git a/util/ifdtool/ifdtool.c b/util/ifdtool/ifdtool.c<br>index 03b28f4..f6524c9 100644<br>--- a/util/ifdtool/ifdtool.c<br>+++ b/util/ifdtool/ifdtool.c<br>@@ -21,6 +21,7 @@<br> #include <fcntl.h><br> #include <sys/types.h><br> #include <sys/stat.h><br>+#include <commonlib/helpers.h><br> #include "ifdtool.h"<br> <br> #ifndef O_BINARY<br>@@ -106,7 +107,6 @@<br>       int base_mask;<br>        int limit_mask;<br>       uint32_t flreg;<br>-      const void *v;<br>        region_t region;<br> <br>   if (ifd_version >= IFD_VERSION_2)<br>@@ -116,40 +116,12 @@<br> <br>        limit_mask = base_mask << 16;<br> <br>-       switch (region_type) {<br>-       case 0:<br>-              v = &frba->flreg0;<br>-            break;<br>-       case 1:<br>-              v = &frba->flreg1;<br>-            break;<br>-       case 2:<br>-              v = &frba->flreg2;<br>-            break;<br>-       case 3:<br>-              v = &frba->flreg3;<br>-            break;<br>-       case 4:<br>-              v = &frba->flreg4;<br>-            break;<br>-       case 5:<br>-              v = &frba->flreg5;<br>-            break;<br>-       case 6:<br>-              v = &frba->flreg6;<br>-            break;<br>-       case 7:<br>-              v = &frba->flreg7;<br>-            break;<br>-       case 8:<br>-              v = &frba->flreg8;<br>-            break;<br>-       default:<br>+     if (region_type >= MAX_REGIONS) {<br>          fprintf(stderr, "Invalid region type %d.\n", region_type);<br>          exit (EXIT_FAILURE);<br>  }<br> <br>- memmove(&flreg, v, sizeof(flreg));<br>+       flreg = frba->flreg[region_type];<br>  region.base = (flreg & base_mask) << 12;<br>    region.limit = ((flreg & limit_mask) >> 4) | 0xfff;<br>         region.size = region.limit - region.base + 1;<br>@@ -163,31 +135,14 @@<br> static void set_region(frba_t *frba, unsigned int region_type,<br>                        const region_t *region)<br> {<br>-   switch (region_type) {<br>-       case 0:<br>-              frba->flreg0 = (((region->limit >> 12) & 0x7fff) << 16)<br>-                        | ((region->base >> 12) & 0x7fff);<br>-              break;<br>-       case 1:<br>-              frba->flreg1 = (((region->limit >> 12) & 0x7fff) << 16)<br>-                        | ((region->base >> 12) & 0x7fff);<br>-              break;<br>-       case 2:<br>-              frba->flreg2 = (((region->limit >> 12) & 0x7fff) << 16)<br>-                        | ((region->base >> 12) & 0x7fff);<br>-              break;<br>-       case 3:<br>-              frba->flreg3 = (((region->limit >> 12) & 0x7fff) << 16)<br>-                        | ((region->base >> 12) & 0x7fff);<br>-              break;<br>-       case 4:<br>-              frba->flreg4 = (((region->limit >> 12) & 0x7fff) << 16)<br>-                        | ((region->base >> 12) & 0x7fff);<br>-              break;<br>-       default:<br>-             fprintf(stderr, "Invalid region type.\n");<br>+ if (region_type >= MAX_REGIONS_OLD) {<br>+             fprintf(stderr, "Invalid region type %d.\n", region_type);<br>          exit (EXIT_FAILURE);<br>  }<br>+<br>+ frba->flreg[region_type] =<br>+                (((region->limit >> 12) & 0x7fff) << 16) |<br>+                ((region->base >> 12) & 0x7fff);<br> }<br> <br> static const char *region_name(unsigned int region_type)<br>@@ -252,27 +207,11 @@<br> <br> static void dump_frba(const frba_t *frba)<br> {<br>+    unsigned int i;<br>       printf("Found Region Section\n");<br>-  printf("FLREG0:    0x%08x\n", frba->flreg0);<br>-    dump_region(0, frba);<br>-        printf("FLREG1:    0x%08x\n", frba->flreg1);<br>-    dump_region(1, frba);<br>-        printf("FLREG2:    0x%08x\n", frba->flreg2);<br>-    dump_region(2, frba);<br>-        printf("FLREG3:    0x%08x\n", frba->flreg3);<br>-    dump_region(3, frba);<br>-        printf("FLREG4:    0x%08x\n", frba->flreg4);<br>-    dump_region(4, frba);<br>-<br>-     if (ifd_version >= IFD_VERSION_2) {<br>-               printf("FLREG5:    0x%08x\n", frba->flreg5);<br>-            dump_region(5, frba);<br>-                printf("FLREG6:    0x%08x\n", frba->flreg6);<br>-            dump_region(6, frba);<br>-                printf("FLREG7:    0x%08x\n", frba->flreg7);<br>-            dump_region(7, frba);<br>-                printf("FLREG8:    0x%08x\n", frba->flreg8);<br>-            dump_region(8, frba);<br>+        for (i = 0; i < max_regions; i++) {<br>+               printf("FLREG%u:    0x%08x\n", i, frba->flreg[i]);<br>+              dump_region(i, frba);<br>         }<br> }<br> <br>@@ -419,25 +358,11 @@<br> <br> static void dump_fpsba(const fpsba_t *fpsba)<br> {<br>+        unsigned int i;<br>       printf("Found PCH Strap Section\n");<br>-       printf("PCHSTRP0:  0x%08x\n", fpsba->pchstrp0);<br>- printf("PCHSTRP1:  0x%08x\n", fpsba->pchstrp1);<br>- printf("PCHSTRP2:  0x%08x\n", fpsba->pchstrp2);<br>- printf("PCHSTRP3:  0x%08x\n", fpsba->pchstrp3);<br>- printf("PCHSTRP4:  0x%08x\n", fpsba->pchstrp4);<br>- printf("PCHSTRP5:  0x%08x\n", fpsba->pchstrp5);<br>- printf("PCHSTRP6:  0x%08x\n", fpsba->pchstrp6);<br>- printf("PCHSTRP7:  0x%08x\n", fpsba->pchstrp7);<br>- printf("PCHSTRP8:  0x%08x\n", fpsba->pchstrp8);<br>- printf("PCHSTRP9:  0x%08x\n", fpsba->pchstrp9);<br>- printf("PCHSTRP10: 0x%08x\n", fpsba->pchstrp10);<br>-        printf("PCHSTRP11: 0x%08x\n", fpsba->pchstrp11);<br>-        printf("PCHSTRP12: 0x%08x\n", fpsba->pchstrp12);<br>-        printf("PCHSTRP13: 0x%08x\n", fpsba->pchstrp13);<br>-        printf("PCHSTRP14: 0x%08x\n", fpsba->pchstrp14);<br>-        printf("PCHSTRP15: 0x%08x\n", fpsba->pchstrp15);<br>-        printf("PCHSTRP16: 0x%08x\n", fpsba->pchstrp16);<br>-        printf("PCHSTRP17: 0x%08x\n\n", fpsba->pchstrp17);<br>+      for (i = 0; i < ARRAY_SIZE(fpsba->pchstrp); i++)<br>+               printf("PCHSTRP%u:  0x%08x\n", i, fpsba->pchstrp[i]);<br>+   printf("\n");<br> }<br> <br> static void decode_flmstr(uint32_t flmstr)<br>diff --git a/util/ifdtool/ifdtool.h b/util/ifdtool/ifdtool.h<br>index f50f6be..0cce8e4 100644<br>--- a/util/ifdtool/ifdtool.h<br>+++ b/util/ifdtool/ifdtool.h<br>@@ -60,16 +60,9 @@<br> // regions<br> #define MAX_REGIONS 9<br> #define MAX_REGIONS_OLD 5<br>+<br> typedef struct {<br>-      uint32_t flreg0;<br>-     uint32_t flreg1;<br>-     uint32_t flreg2;<br>-     uint32_t flreg3;<br>-     uint32_t flreg4;<br>-     uint32_t flreg5;<br>-     uint32_t flreg6;<br>-     uint32_t flreg7;<br>-     uint32_t flreg8;<br>+     uint32_t flreg[MAX_REGIONS];<br> } __attribute__((packed)) frba_t;<br> <br> // component section<br>@@ -81,24 +74,7 @@<br> <br> // pch strap<br> typedef struct {<br>-  uint32_t pchstrp0;<br>-   uint32_t pchstrp1;<br>-   uint32_t pchstrp2;<br>-   uint32_t pchstrp3;<br>-   uint32_t pchstrp4;<br>-   uint32_t pchstrp5;<br>-   uint32_t pchstrp6;<br>-   uint32_t pchstrp7;<br>-   uint32_t pchstrp8;<br>-   uint32_t pchstrp9;<br>-   uint32_t pchstrp10;<br>-  uint32_t pchstrp11;<br>-  uint32_t pchstrp12;<br>-  uint32_t pchstrp13;<br>-  uint32_t pchstrp14;<br>-  uint32_t pchstrp15;<br>-  uint32_t pchstrp16;<br>-  uint32_t pchstrp17;<br>+  uint32_t pchstrp[18];<br> } __attribute__((packed)) fpsba_t;<br> <br> /*<br></pre><p>To view, visit <a href="https://review.coreboot.org/21510">change 21510</a>. To unsubscribe, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/21510"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I161c9a2ae83d26e658d67d0804e943fff95fe076 </div>
<div style="display:none"> Gerrit-Change-Number: 21510 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Bill XIE <persmule@gmail.com> </div>