<p>Philipp Deppenwiese has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/24967">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">commonlib/cbfs: Add hook function<br><br>* Add hook function to access rdev.<br><br>Change-Id: Ie5d51c1f5a353fbcdec3ce9b4c051c4621780582<br>Signed-off-by: zaolin <zaolin@das-labor.org><br>---<br>M src/commonlib/cbfs.c<br>M src/commonlib/include/commonlib/cbfs.h<br>M src/lib/cbfs.c<br>3 files changed, 24 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/67/24967/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/commonlib/cbfs.c b/src/commonlib/cbfs.c</span><br><span>index 1db8d31..4518a8e 100644</span><br><span>--- a/src/commonlib/cbfs.c</span><br><span>+++ b/src/commonlib/cbfs.c</span><br><span>@@ -61,6 +61,11 @@</span><br><span>       return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+void __attribute__((weak))</span><br><span style="color: hsl(120, 100%, 40%);">+hook_cbfs_data(const char *name, const struct region_device *area)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int cbfs_for_each_file(const struct region_device *cbfs,</span><br><span>                       const struct cbfsf *prev, struct cbfsf *fh)</span><br><span> {</span><br><span>diff --git a/src/commonlib/include/commonlib/cbfs.h b/src/commonlib/include/commonlib/cbfs.h</span><br><span>index 163bef2..9589380 100644</span><br><span>--- a/src/commonlib/include/commonlib/cbfs.h</span><br><span>+++ b/src/commonlib/include/commonlib/cbfs.h</span><br><span>@@ -26,6 +26,9 @@</span><br><span>    struct region_device data;</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Hook function for access to rdev in locate functions */</span><br><span style="color: hsl(120, 100%, 40%);">+void hook_cbfs_data(const char *name, const struct region_device *area);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Locate file by name and optional type. Returns 0 on succcess else < 0 on</span><br><span>  * error.*/</span><br><span> int cbfs_locate(struct cbfsf *fh, const struct region_device *cbfs,</span><br><span>diff --git a/src/lib/cbfs.c b/src/lib/cbfs.c</span><br><span>index 596abc5..259704b 100644</span><br><span>--- a/src/lib/cbfs.c</span><br><span>+++ b/src/lib/cbfs.c</span><br><span>@@ -53,7 +53,12 @@</span><br><span>       if (rdev_chain(&rdev, boot_dev, props.offset, props.size))</span><br><span>               return -1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  return cbfs_locate(fh, &rdev, name, type);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (cbfs_locate(fh, &rdev, name, type))</span><br><span style="color: hsl(120, 100%, 40%);">+           return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  hook_cbfs_data(name, fh->data);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  return 0;</span><br><span> }</span><br><span> </span><br><span> void *cbfs_boot_map_with_leak(const char *name, uint32_t type, size_t *size)</span><br><span>@@ -69,6 +74,8 @@</span><br><span>       if (size != NULL)</span><br><span>            *size = fsize;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    hook_cbfs_data(name, &fh.data);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>        return rdev_mmap(&fh.data, 0, fsize);</span><br><span> }</span><br><span> </span><br><span>@@ -83,7 +90,12 @@</span><br><span>              return -1;</span><br><span>   }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   return cbfs_locate(fh, &rdev, name, type);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (cbfs_locate(fh, &rdev, name, type))</span><br><span style="color: hsl(120, 100%, 40%);">+           return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  hook_cbfs_data(name, fh->data);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  return 0;</span><br><span> }</span><br><span> </span><br><span> size_t cbfs_load_and_decompress(const struct region_device *rdev, size_t offset,</span><br><span>@@ -197,6 +209,8 @@</span><br><span>                                      || decompressed_size > buf_size)</span><br><span>             return 0;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ hook_cbfs_data(name, &fh.data);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>        return cbfs_load_and_decompress(&fh.data, 0, region_device_sz(&fh.data),</span><br><span>                                     buf, buf_size, compression_algo);</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/24967">change 24967</a>. To unsubscribe, or for help writing mail filters, 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/24967"/><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: Ie5d51c1f5a353fbcdec3ce9b4c051c4621780582 </div>
<div style="display:none"> Gerrit-Change-Number: 24967 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Philipp Deppenwiese <zaolin.daisuki@gmail.com> </div>