view src/gpf2/osl/os_drv.c @ 700:800bf29abf31

audio mode load change from Tourmaline Our FreeCalypso universe now has two kinds of audio mode config files: the old 164 byte kind and the new 176 byte kind. We are not enabling L1_NEW_AEC in Magnetite, only in Tourmaline, thus 164 byte audio mode files are still native to Magnetite. But we still desire graceful handling of the situation when a running Magnetite fw may load a 176 byte audio mode file (presumably with new AEC config), thus we incorporate the same audio mode loading change which we implemented in Tourmaline: if the loaded audio mode file is of the wrong kind, the AEC config is cleared to default disabled state.
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 30 Jul 2021 03:55:52 +0000
parents 045d641c9bfa
children
line wrap: on
line source

/*
 * 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 "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);
}