FreeCalypso > hg > fc-magnetite
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); +}