aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--util/mkelfImage/include/linuxbios_tables.h9
-rw-r--r--util/mkelfImage/linux-i386/convert_params.c7
2 files changed, 16 insertions, 0 deletions
diff --git a/util/mkelfImage/include/linuxbios_tables.h b/util/mkelfImage/include/linuxbios_tables.h
index c324cf543a..8ee3257ee0 100644
--- a/util/mkelfImage/include/linuxbios_tables.h
+++ b/util/mkelfImage/include/linuxbios_tables.h
@@ -79,4 +79,13 @@ struct lb_hwrpb {
uint64_t hwrpb;
};
+#define LB_TAG_FORWARD 0x0011
+struct lb_forward {
+ uint32_t tag;
+ uint32_t size;
+ uint64_t forward;
+};
+
+
+
#endif /* LINUXBIOS_TABLES_H */
diff --git a/util/mkelfImage/linux-i386/convert_params.c b/util/mkelfImage/linux-i386/convert_params.c
index 501adfbb11..5af3fafca3 100644
--- a/util/mkelfImage/linux-i386/convert_params.c
+++ b/util/mkelfImage/linux-i386/convert_params.c
@@ -978,6 +978,13 @@ static int find_lb_table(struct param_info *info)
head = __find_lb_table((void *)0xf0000, (void *)0x100000);
}
if (head) {
+ struct lb_forward *forward = (struct lb_forward *)(((char *)head) + head->header_bytes);
+ if (forward->tag == LB_TAG_FORWARD) {
+ head = __find_lb_table(forward->forward,
+ forward->forward + 0x1000);
+ }
+ }
+ if (head) {
info->has_linuxbios = 1;
info->lb_table = head;
return 1;