aboutsummaryrefslogtreecommitdiff
path: root/include/hw/loader.h
diff options
context:
space:
mode:
authorAlex Bennée <alex.bennee@linaro.org>2022-02-25 17:20:20 +0000
committerAlex Bennée <alex.bennee@linaro.org>2022-02-28 16:42:35 +0000
commit5fc983af8b20d69279f819efef2b340565d0e9a3 (patch)
tree3cfdbdf77a57ce019760f325aaef7c1ef3db5ba5 /include/hw/loader.h
parent04e90c1313fc6422fc3a5066fcc84ef3ef030ebf (diff)
semihosting/arm-compat: replace heuristic for softmmu SYS_HEAPINFO
The previous numbers were a guess at best and rather arbitrary without taking into account anything that might be loaded. Instead of using guesses based on the state of registers implement a new function that: a) scans the MemoryRegions for the largest RAM block b) iterates through all "ROM" blobs looking for the biggest gap The "ROM" blobs include all code loaded via -kernel and the various -device loader techniques. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Cc: Andrew Strauss <astrauss11@gmail.com> Cc: Keith Packard <keithp@keithp.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-Id: <20220225172021.3493923-18-alex.bennee@linaro.org>
Diffstat (limited to 'include/hw/loader.h')
-rw-r--r--include/hw/loader.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/include/hw/loader.h b/include/hw/loader.h
index 4fa485bd61..5572108ba5 100644
--- a/include/hw/loader.h
+++ b/include/hw/loader.h
@@ -343,4 +343,18 @@ int rom_add_option(const char *file, int32_t bootindex);
* overflow on real hardware too. */
#define UBOOT_MAX_GUNZIP_BYTES (64 << 20)
+typedef struct RomGap {
+ hwaddr base;
+ size_t size;
+} RomGap;
+
+/**
+ * rom_find_largest_gap_between: return largest gap between ROMs in given range
+ *
+ * Given a range of addresses, this function finds the largest
+ * contiguous subrange which has no ROMs loaded to it. That is,
+ * it finds the biggest gap which is free for use for other things.
+ */
+RomGap rom_find_largest_gap_between(hwaddr base, size_t size);
+
#endif