seteventmesg.c 1.37 KB
/**************************************************************************
 *									  *
 *		 Copyright (C) 1994, Silicon Graphics, Inc.		  *
 *									  *
 *  These coded instructions, statements, and computer programs  contain  *
 *  unpublished  proprietary  information of Silicon Graphics, Inc., and  *
 *  are protected by Federal copyright law.  They  may  not be disclosed  *
 *  to  third  parties  or copied or duplicated in any form, in whole or  *
 *  in part, without the prior written consent of Silicon Graphics, Inc.  *
 *									  *
 **************************************************************************/

#include "osint.h"
/* #include "assert.h" */

__OSEventState __osEventStateTab[OS_NUM_EVENTS];
extern s32 __osShutdown;
s32 __osPreNMI = 0;

void
osSetEventMesg(OSEvent e, OSMesgQueue *mq, OSMesg m)
{
	register u32 saveMask;

	__OSEventState *es;

	/* Make sure that message queue is not null */
	/* assert(mq != NULL); */

#ifdef _DEBUG
	if (e >= OS_NUM_EVENTS) {
		__osError(ERR_OSSETEVENTMESG, 1, e);
		return;
	}
#endif
	/* Disable interrupts */
	saveMask = __osDisableInt();
	es = &__osEventStateTab[e];

	es->messageQueue = mq;
	es->message = m;

	/* Check PRENMI */
	if (e == OS_EVENT_PRENMI){
	  if((__osShutdown) && (__osPreNMI == 0)){
	    osSendMesg(mq,m,OS_MESG_NOBLOCK);
	  }
	  __osPreNMI = 1;
	}
	/* Restore interrupts */
	__osRestoreInt(saveMask);
	
}