[HAL]: Implement system bus (and ISA) vector/interrupt translation.

svn path=/trunk/; revision=47672
This commit is contained in:
Sir Richard 2010-06-07 20:34:41 +00:00
parent dcde6d79da
commit 1b1d03c8a0

View file

@ -29,6 +29,35 @@ HalpTranslateSystemBusAddress(IN PBUS_HANDLER BusHandler,
return FALSE;
}
ULONG
NTAPI
HalpGetRootInterruptVector(IN ULONG BusInterruptLevel,
IN ULONG BusInterruptVector,
OUT PKIRQL Irql,
OUT PKAFFINITY Affinity)
{
ULONG SystemVector;
/* Get the system vector */
SystemVector = PRIMARY_VECTOR_BASE + BusInterruptLevel;
/* Validate it */
if ((SystemVector < PRIMARY_VECTOR_BASE) || (SystemVector > PRIMARY_VECTOR_BASE + 27))
{
/* Invalid vector */
DPRINT1("Vector %lx is too low or too high!\n", SystemVector);
return 0;
}
/* Return the IRQL and affinity */
*Irql = (PRIMARY_VECTOR_BASE + 27) - SystemVector;
*Affinity = HalpDefaultInterruptAffinity;
ASSERT(HalpDefaultInterruptAffinity);
/* Return the vector */
return SystemVector;
}
ULONG
NTAPI
HalpGetSystemInterruptVector(IN PBUS_HANDLER BusHandler,
@ -38,10 +67,17 @@ HalpGetSystemInterruptVector(IN PBUS_HANDLER BusHandler,
OUT PKIRQL Irql,
OUT PKAFFINITY Affinity)
{
ULONG Vector;
/* Get the root vector */
DPRINT1("SYSTEM GetVector\n");
while (TRUE);
return 0;
Vector = HalpGetRootInterruptVector(BusInterruptLevel,
BusInterruptVector,
Irql,
Affinity);
/* Check if the vector is owned by the HAL and fail if it is */
if (HalpIDTUsageFlags[Vector].Flags & IDT_REGISTERED) DPRINT1("Vector %lx is ALREADY IN USE!\n", Vector);
return (HalpIDTUsageFlags[Vector].Flags & IDT_REGISTERED) ? 0 : Vector;
}
/* EOF */