diff src/gpf/osl/os_mis_fl.c @ 0:4e78acac3d88

src/{condat,cs,gpf,nucleus}: import from Selenite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:23:26 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/gpf/osl/os_mis_fl.c	Fri Oct 16 06:23:26 2020 +0000
@@ -0,0 +1,170 @@
+/*
+ * This C module is a reconstruction based on the disassembly of
+ * os_mis.obj in frame_na7_db_fl.lib from the Leonardo package.
+ */
+
+/* set of included headers from COFF symtab, slightly reordered: */
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#if 0	/* from first attempt at gcc-built fw, currently unused */
+#include "../../riviera/rv/general.h"
+#include "../../riviera/rv/rv_general.h"
+#include "../../riviera/rvf/rvf_api.h"
+#include "../../services/ffs/ffs.h"
+#endif
+#include "nucleus.h"
+#include "typedefs.h"
+#include "os.h"
+#include "gdi.h"
+#include "os_types.h"
+#include "os_glob.h"
+#include "header.h"
+#include "vsi.h"
+#if 0	/* from first attempt at gcc-built fw, currently unused */
+#include "drvconf.h"
+#include "../tst_pei/tstdriver.h"
+#endif
+#include "dar_func.h"
+#include "tools.h"
+
+typedef unsigned char u_char;
+
+char *NU_State[13] = {
+	"NU_READY",
+	"",
+	"NU_SLEEP_SUSPEND",
+	"",
+	"",
+	"NU_QUEUE_SUSPEND",
+	"NU_SEMAPHORE_SUSPEND",
+	"",
+	"NU_PARTITION_SUSPEND",
+	"NU_MEMORY_SUSPEND",
+	"",
+	"NU_FINISHED",
+	"NU_TERMINATED",
+};
+
+char *msg_type[4] = {
+	"",
+	"PRIMITIVE",
+	"SIGNAL",
+	"TIMEOUT",
+};
+
+char *warning = "SYSTEM WARNING: ";
+
+T_GPF_DAR_PROPERTIES *dar;
+T_GPF_DAR_STRUCT os_dar;
+NU_PROTECT os_mis_Protect;
+u_char SystemErrorBuffer[256];
+u_char DARErrorBuffer[256];
+
+static u_char state;
+static int fd;
+static unsigned bytes_read;
+static u_char *msg;
+static unsigned count;
+static unsigned data_len;
+static unsigned dar_wrap_around;
+static unsigned dar_buffer_count;
+static unsigned dar_wrap_around_detected;
+
+LONG
+os_read_dar_ffs_data(USHORT entry, char *buffer, USHORT len)
+{
+	/*
+	 * This function is only used to implement the READ_DAR_FILE
+	 * system primitive; this frill feature is currently deemed
+	 * not important enough to expend the effort to reconstruct
+	 * this function from disassembly.
+	 */
+	return(OS_ERROR);
+}
+
+LONG
+os_dar_set_filter(void)
+{
+	if (dar)
+		dar->diagnose_swe_filter(dar->gpf_use_id, dar->warning);
+	return(OS_OK);
+}
+
+LONG
+os_dar_register(const void *dar_properties)
+{
+	if (dar_properties) {
+		os_dar.properties = (T_GPF_DAR_PROPERTIES *) dar_properties;
+		os_dar.magic_nr = DAR_INITIALIZED;
+		dar = (T_GPF_DAR_PROPERTIES *) dar_properties;
+	}
+	return(OS_OK);
+}
+
+void
+os_dar_init(void)
+{
+	if (os_dar.magic_nr != DAR_INITIALIZED)
+		dar = 0;
+}
+
+void
+os_SystemError(OS_HANDLE Caller, USHORT cause, char *buffer)
+{
+	/*
+	 * The implementation of this function in the binary blob
+	 * which we are reversing is very complex.  I am leaving it
+	 * as an empty stub for now. - Space Falcon
+	 */
+}
+
+GLOBAL LONG
+os_ObjectInformation(OS_HANDLE Caller, USHORT Id, USHORT Handle, USHORT len,
+			void *Buffer)
+{
+	switch (Id) {
+	case OS_OBJTASK:
+		return os_TaskInformation(Handle, Buffer);
+	case OS_OBJQUEUE:
+		return os_QueueInformation(Handle, Buffer);
+	case OS_OBJPARTITIONGROUP:
+		return os_PartitionInformation(Handle, Buffer);
+	case OS_OBJMEMORYPOOL:
+		return os_MemoryInformation(Handle, Buffer);
+	case OS_OBJTIMER:
+		return os_TimerInformation(Handle, Buffer);
+	case OS_OBJSEMAPHORE:
+		return os_SemaphoreInformation(Handle, Buffer);
+	default:
+		return(OS_ERROR);
+	}
+}
+
+GLOBAL LONG
+os_Initialize(void)
+{
+	if (os_SemInit() == OS_ERROR)
+		return(OS_ERROR);
+	if (os_ProInit() == OS_ERROR)
+		return(OS_ERROR);
+	if (os_ComInit() == OS_ERROR)
+		return(OS_ERROR);
+	if (os_MemInit() == OS_ERROR)
+		return(OS_ERROR);
+	if (os_TimInit() == OS_ERROR)
+		return(OS_ERROR);
+	if (os_isr_init() == OS_ERROR)
+		return(OS_ERROR);
+#if 0
+	if (os_EvGrpInit() == OS_ERROR)
+		return(OS_ERROR);
+#endif
+	/*
+	 * The original code zeroes out the first 32-bit word of
+	 * os_mis_Protect here.  We don't really need to do that,
+	 * as it is a zeroed-on-boot bss var.
+	 */
+	os_dar_init();	/* inlined in the original */
+	return(OS_OK);
+}