The following patch adds another test function, 'hello_world' to the 32
bit functions. The intention is to show what needs to be done to support
one more function call -- not much. This and the already-existing test
function are then called from handle_1a in 16 bit space.
After enabling the debugging output, the following then becomes visible:
handle_1a at 0x00008356
Calling hello world
Hello world at 0x7ffe48f3
test at 0x7ffe4905
a=7,b=8,c=9,d=10,e=11,f=12
Result from upcall res=56
The result 'res' is the result of a*b.
Signed-off-by: Stefan Berger <stefanb(a)us.ibm.com>
---
src/clock.c | 5 +++++
src/upcall.c | 5 +++++
2 files changed, 10 insertions(+)
Index: seabios/src/clock.c
===================================================================
--- seabios.orig/src/clock.c
+++ seabios/src/clock.c
@@ -13,6 +13,7 @@
#include "bregs.h" // struct bregs
#include "biosvar.h" // GET_GLOBAL
#include "usb-hid.h" // usb_check_event
+#include "upcall.h"
// RTC register flags
#define RTC_A_UIP 0x80
@@ -445,6 +446,10 @@ handle_1aXX(struct bregs *regs)
void VISIBLE16
handle_1a(struct bregs *regs)
{
+dprintf(1, "handle_1a at %p\n", handle_1a);
+dprintf(1,"Calling hello world\n");
+hello_world();
+dprintf(1,"Result from upcall res=%d\n", test_highbios(7,8,9,10,11,12));
debug_enter(regs, DEBUG_HDL_1a);
switch (regs->ah) {
case 0x00: handle_1a00(regs); break;
Index: seabios/src/upcall.c
===================================================================
--- seabios.orig/src/upcall.c
+++ seabios/src/upcall.c
@@ -11,6 +11,11 @@ test_highbios(u8 a, u16 b, u32 c, u8 d,
return a*b;
}
+void
+hello_world(void)
+{
+ dprintf(1,"Hello world at %p\n", hello_world);
+}
#define FUNC(IDX, NUMPARMS, RETTYPE, NAME, PARMS ...) \
[IDX] = NAME,
Index: seabios/src/upcall_protos.h
===================================================================
--- seabios.orig/src/upcall_protos.h
+++ seabios/src/upcall_protos.h
@@ -6,7 +6,9 @@
/* all function names below must be expanded with _upcall */
# define test_highbios test_highbios_upcall
+# define hello_world hello_world_upcall
#endif
FUNC(0, 6, int , test_highbios, u8 a, u16 b, u32 c,u8 d, u16 e, int f)
+FUNC(1, 0, void, hello_world , void)
\ No newline at end of file