summaryrefslogtreecommitdiffstats
path: root/private/ntos/nthals/halsgi/mips/sxsysint.c
diff options
context:
space:
mode:
Diffstat (limited to 'private/ntos/nthals/halsgi/mips/sxsysint.c')
-rw-r--r--private/ntos/nthals/halsgi/mips/sxsysint.c294
1 files changed, 294 insertions, 0 deletions
diff --git a/private/ntos/nthals/halsgi/mips/sxsysint.c b/private/ntos/nthals/halsgi/mips/sxsysint.c
new file mode 100644
index 000000000..bc336ae7b
--- /dev/null
+++ b/private/ntos/nthals/halsgi/mips/sxsysint.c
@@ -0,0 +1,294 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+Copyright (c) 1992 Silicon Graphics, Inc.
+
+Module Name:
+
+ s3sysint.c
+
+Abstract:
+
+ This module implements the HAL procedures required to maintain
+ system interrupt processing for a SGI Indigo system.
+
+Author:
+
+ David N. Cutler (davec) 6-May-1991
+ Kevin Meier (o-kevinm) 20-Jan-1992
+
+Environment:
+
+ Kernel mode
+
+Revision History:
+
+--*/
+
+#include "halp.h"
+
+VOID
+HalDisableSystemInterrupt (
+ IN ULONG Vector,
+ IN KIRQL Irql
+ )
+
+/*++
+
+Routine Description:
+
+ This routine disables the specified system interrupt.
+
+ N.B. This routine assumes that the caller has provided any required
+ synchronization to disable a system interrupt.
+
+Arguments:
+
+ Vector - Supplies the vector of the system interrupt that is disabled.
+
+ Irql - Supplies the IRQL of the interrupting source.
+
+Return Value:
+
+ None.
+
+--*/
+
+{
+ KIRQL OldIrql;
+
+ //
+ // Raise IRQL to the highest level.
+ //
+
+ KeRaiseIrql(HIGH_LEVEL, &OldIrql);
+
+ //
+ // This is a temp solution until these vectors can be obtained
+ // via the configuration manager. For now, these vectors are
+ // hardcoded in "sgidef.h".
+ //
+
+ switch( (UCHAR)Vector ){
+
+ //
+ // LOCAL0 vectors.
+ //
+
+ case SGI_VECTOR_GIO0FIFOFULL: // (0 + SGI_LOCAL0_VECTORS)
+ case SGI_VECTOR_IDEDMA: // (1 + SGI_LOCAL0_VECTORS)
+ case SGI_VECTOR_SCSI: // (2 + SGI_LOCAL0_VECTORS)
+ case SGI_VECTOR_ETHERNET: // (3 + SGI_LOCAL0_VECTORS)
+ case SGI_VECTOR_GRAPHICSDMA: // (4 + SGI_LOCAL0_VECTORS)
+ case SGI_VECTOR_SGIDUART: // (5 + SGI_LOCAL0_VECTORS)
+ case SGI_VECTOR_GIO1GE: // (6 + SGI_LOCAL0_VECTORS)
+ case SGI_VECTOR_VME0: // (7 + SGI_LOCAL0_VECTORS)
+ DISABLE_LOCAL0_IRQ( 1 << ((UCHAR)Vector - SGI_LOCAL0_VECTORS) );
+ break;
+
+ //
+ // LOCAL1 vectors.
+ //
+
+ case SGI_VECTOR_VME1: // (3 + SGI_LOCAL1_VECTORS)
+ case SGI_VECTOR_DSP: // (4 + SGI_LOCAL1_VECTORS)
+ case SGI_VECTOR_ACFAIL: // (5 + SGI_LOCAL1_VECTORS)
+ case SGI_VECTOR_VIDEOOPTION: // (6 + SGI_LOCAL1_VECTORS)
+ case SGI_VECTOR_GIO2VERTRET: // (7 + SGI_LOCAL1_VECTORS)
+ DISABLE_LOCAL1_IRQ( 1 << ((UCHAR)Vector - SGI_LOCAL1_VECTORS) );
+ break;
+
+ //
+ // Gets here when the disconnect interrupt routine is called
+ // for the second level dispatch routine (never)
+ //
+
+ case SGI_VECTOR_LOCAL0:
+ case SGI_VECTOR_LOCAL1:
+ break;
+
+ default:
+ DbgPrint("\nInvalid Vector (0x%x) passed.\n", (UCHAR)Vector);
+ DbgBreakPoint();
+
+ }// END SWITCH
+
+ //
+ // Lower IRQL to the previous level.
+ //
+
+ KeLowerIrql(OldIrql);
+}
+
+
+BOOLEAN
+HalEnableSystemInterrupt (
+ IN ULONG Vector,
+ IN KIRQL Irql,
+ IN KINTERRUPT_MODE InterruptMode
+ )
+
+/*++
+
+Routine Description:
+
+ This routine enables the specified system interrupt.
+
+ N.B. This routine assumes that the caller has provided any required
+ synchronization to enable a system interrupt.
+
+Arguments:
+
+ Vector - Supplies the vector of the system interrupt that is enabled.
+
+ Irql - Supplies the IRQL of the interrupting source.
+
+ InterruptMode - Supplies the mode of the interrupt; LevelSensitive or
+ Latched.
+
+Return Value:
+
+ TRUE if the system interrupt was enabled
+
+--*/
+
+{
+
+ KIRQL OldIrql;
+
+ //
+ // Raise IRQL to the highest level.
+ //
+
+ KeRaiseIrql(HIGH_LEVEL, &OldIrql);
+
+ //
+ // This is a temp solution until these vectors can be obtained
+ // via the configuration manager. For now, these vectors are
+ // hardcoded in "sgidef.h".
+ //
+
+ switch( (UCHAR)Vector ){
+
+ //
+ // LOCAL0 vectors.
+ //
+
+ case SGI_VECTOR_GIO0FIFOFULL: // (0 + SGI_LOCAL0_VECTORS)
+ case SGI_VECTOR_IDEDMA: // (1 + SGI_LOCAL0_VECTORS)
+ case SGI_VECTOR_SCSI: // (2 + SGI_LOCAL0_VECTORS)
+ case SGI_VECTOR_ETHERNET: // (3 + SGI_LOCAL0_VECTORS)
+ case SGI_VECTOR_GRAPHICSDMA: // (4 + SGI_LOCAL0_VECTORS)
+ case SGI_VECTOR_SGIDUART: // (5 + SGI_LOCAL0_VECTORS)
+ case SGI_VECTOR_GIO1GE: // (6 + SGI_LOCAL0_VECTORS)
+ case SGI_VECTOR_VME0: // (7 + SGI_LOCAL0_VECTORS)
+ ENABLE_LOCAL0_IRQ( 1 << ((UCHAR)Vector - SGI_LOCAL0_VECTORS) );
+ break;
+
+ //
+ // LOCAL1 vectors.
+ //
+
+ case SGI_VECTOR_VME1: // (3 + SGI_LOCAL1_VECTORS)
+ case SGI_VECTOR_DSP: // (4 + SGI_LOCAL1_VECTORS)
+ case SGI_VECTOR_ACFAIL: // (5 + SGI_LOCAL1_VECTORS)
+ case SGI_VECTOR_VIDEOOPTION: // (6 + SGI_LOCAL1_VECTORS)
+ case SGI_VECTOR_GIO2VERTRET: // (7 + SGI_LOCAL1_VECTORS)
+ ENABLE_LOCAL1_IRQ( 1 << ((UCHAR)Vector - SGI_LOCAL1_VECTORS) );
+ break;
+
+ //
+ // Gets here when the connect interrupt routine is called
+ // for the second level dispatch routine (init only)
+ //
+
+ case SGI_VECTOR_LOCAL0:
+ case SGI_VECTOR_LOCAL1:
+ break;
+
+ default:
+ DbgPrint("\nHal: Invalid Vector (0x%x) passed.\n",(UCHAR)Vector);
+ DbgBreakPoint();
+
+ }// END SWITCH
+
+ //
+ // Lower IRQL to the previous level.
+ //
+
+ KeLowerIrql(OldIrql);
+ return TRUE;
+}
+
+ULONG
+HalGetInterruptVector(
+ IN INTERFACE_TYPE InterfaceType,
+ IN ULONG BusNumber,
+ IN ULONG BusInterruptLevel,
+ IN ULONG BusInterruptVector,
+ OUT PKIRQL Irql,
+ OUT PKAFFINITY Affinity
+ )
+
+/*++
+
+Routine Description:
+
+ This function returns the system interrupt vector and IRQL level
+ corresponding to the specified bus interrupt level and/or vector. The
+ system interrupt vector and IRQL are suitable for use in a subsequent call
+ to KeInitializeInterrupt.
+
+Arguments:
+
+ InterfaceType - Supplies the type of bus which the vector is for.
+
+ BusNumber - Supplies the bus number for the device.
+
+ BusInterruptLevel - Supplies the bus specific interrupt level.
+
+ BusInterruptVector - Supplies the bus specific interrupt vector.
+
+ Irql - Returns the system request priority.
+
+ Affinity - Returns the affinity for the requested vector
+
+Return Value:
+
+ Returns the system interrupt vector corresponding to the specified device.
+
+--*/
+
+{
+ //
+ // Just return the passed parameters for now.
+ //
+
+ *Irql = (UCHAR)BusInterruptLevel;
+ *Affinity = 1;
+ return( BusInterruptVector );
+
+}
+VOID
+HalRequestIpi(
+ IN ULONG Mask
+ )
+
+/*++
+
+Routine Description:
+
+ Requests an interprocessor interrupt
+
+Arguments:
+
+ Mask - Supplies a mask of the processors to interrupt
+
+Return Value:
+
+ None.
+
+--*/
+
+{
+}