[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]


   NAME
       Cause -- cause a software interrupt

   SYNOPSIS
       Cause(interrupt)
	     A1

       void Cause(struct Interrupt *);

   FUNCTION
	This function causes a software interrupt to occur.  If it is
	called from user mode (and processor level 0), the software
	interrupt will preempt the current task.  This call is often used
	by high-level hardware interrupts to defer medium-length processing
	down to a lower interrupt level.  Note that a software interrupt is
	still a real interrupt, and must obey the same restrictions on what
	system function it may call.

	Currently only 5 software interrupt priorities are implemented:
	-32, -16, 0, +16, and +32.  Priorities in between are truncated,
	values outside the -32/+32 range are not allowed.

   NOTE
	When setting up the Interrupt structure, set the node type to
	NT_INTERRUPT, or NT_UNKOWN.

   IMPLEMENTATION
	1> Checks if the node type is NT_SOFTINT.  If so does nothing since
	   the softint is already pending.  No nest count is maintained.
	2> Sets the node type to NT_SOFTINT.
	3> Links into one of the 5 priority queues.
	4> Pokes the hardware interrupt bit used for softints.

	The node type returns to NT_INTERRUPT after removal from the list.

   INPUTS
	interrupt - pointer to a properly initialized interrupt node

   BUGS
	Unlike other Interrupts, SoftInts must preserve the value of A6.