diff src/gpf2/osl/os_drv.c @ 487:91e8dac34ada

src/gpf2/osl: initial import from old freecalypso-sw tree
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 22 Jun 2018 05:56:16 +0000
parents
children 045d641c9bfa
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/gpf2/osl/os_drv.c	Fri Jun 22 05:56:16 2018 +0000
@@ -0,0 +1,52 @@
+/*
+ * This C module is a reconstruction based on the disassembly of
+ * os_drv.obj in frame_na7_db_fl.lib from the Leonardo package.
+ */
+
+/* set of included headers from COFF symtab: */
+#include "gpfconf.h"	/* FreeCalypso addition */
+#include "../../nucleus/nucleus.h"
+#include "typedefs.h"
+#include "gdi.h"
+#include "os.h"
+
+typedef unsigned char u_char;
+
+extern OS_HANDLE os_ext_pool_handle;
+
+static u_char *HISR_Stack;
+static T_DRV_SIGNAL *SignalID;
+static void (*DrvCallback)(T_DRV_SIGNAL *);
+static NU_HISR CallBack_HISR;
+
+#define	CB_HISR_STACK_SIZE	1024
+
+GLOBAL LONG
+os_ExecuteCallback(OS_HANDLE Caller, void (*Callback)(T_DRV_SIGNAL *),
+			T_DRV_SIGNAL *Signal)
+{
+	DrvCallback = Callback;
+	SignalID = Signal;
+	NU_Activate_HISR(&CallBack_HISR);
+	return(OS_OK);
+}
+
+static void
+CallbackFunc(void)
+{
+	DrvCallback(SignalID);
+}
+
+GLOBAL LONG
+os_CreateCallback(void)
+{
+	if (os_AllocateMemory(OS_NOTASK, (T_VOID_STRUCT **) &HISR_Stack,
+				CB_HISR_STACK_SIZE, 0xFFFFFFFF,
+				os_ext_pool_handle) == OS_ERROR)
+		return(OS_ERROR);
+	if (NU_Create_HISR(&CallBack_HISR, "CB_HISR", CallbackFunc, 2,
+				HISR_Stack, CB_HISR_STACK_SIZE) == NU_SUCCESS)
+		return(OS_OK);
+	else
+		return(OS_ERROR);
+}