[OpenBIOS] [PATCH 3/3] fw_cfg: implement fw-cfg-read-file Forth word
Mark Cave-Ayland
mark.cave-ayland at ilande.co.uk
Sun Mar 19 12:46:54 CET 2017
Implement fw-cfg-read-file Forth word as a simple wrapper around
fw_cfg_read_file().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>
---
drivers/fw_cfg.c | 23 +++++++++++++++++++++++
include/arch/common/fw_cfg.h | 1 +
libopenbios/init.c | 7 ++++++-
3 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/drivers/fw_cfg.c b/drivers/fw_cfg.c
index f930ea8..d72461d 100644
--- a/drivers/fw_cfg.c
+++ b/drivers/fw_cfg.c
@@ -114,6 +114,29 @@ fw_cfg_read_file(const char *filename, uint32_t *size)
return NULL;
}
+//
+// ( fname fnamelen -- buf buflen -1 | 0 )
+//
+
+void
+forth_fw_cfg_read_file(void)
+{
+ char *filename = pop_fstr_copy();
+ char *buffer;
+ uint32_t size;
+
+ buffer = fw_cfg_read_file(filename, &size);
+ if (buffer) {
+ PUSH(pointer2cell(buffer));
+ PUSH(size);
+ PUSH(-1);
+
+ return;
+ }
+
+ PUSH(0);
+}
+
void
fw_cfg_init(void)
{
diff --git a/include/arch/common/fw_cfg.h b/include/arch/common/fw_cfg.h
index 1c43a9d..cd2183a 100644
--- a/include/arch/common/fw_cfg.h
+++ b/include/arch/common/fw_cfg.h
@@ -100,6 +100,7 @@ typedef struct FWCfgFiles {
unsigned int fw_cfg_find_file(const char *filename, uint16_t *select, uint32_t *size);
char *fw_cfg_read_file(const char *filename, uint32_t *size);
+void forth_fw_cfg_read_file(void);
#endif /* NO_OPENBIOS_PROTOS */
#endif
diff --git a/libopenbios/init.c b/libopenbios/init.c
index 8882bf3..aa99608 100644
--- a/libopenbios/init.c
+++ b/libopenbios/init.c
@@ -18,6 +18,8 @@
#include "libopenbios/openbios.h"
#include "libopenbios/bindings.h"
#include "libopenbios/initprogram.h"
+#define NO_QEMU_PROTOS
+#include "arch/common/fw_cfg.h"
void
openbios_init( void )
@@ -25,7 +27,10 @@ openbios_init( void )
// Bind the saved program state context into Forth
PUSH(pointer2cell((void *)&__context));
feval("['] __context cell+ !");
-
+
+ // Bind the Forth fw_cfg file interface
+ bind_func("fw-cfg-read-file", forth_fw_cfg_read_file);
+
// Bind the C implementation of (init-program) into Forth
bind_func("(init-program)", init_program);
--
1.7.10.4
More information about the OpenBIOS
mailing list