Add helper to translate run level to software interrupt vector
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in -59m27s
Builds / ExectOS (amd64, debug) (push) Successful in -59m26s
Builds / ExectOS (i686, release) (push) Successful in -59m28s
Builds / ExectOS (i686, debug) (push) Successful in -59m26s

This commit is contained in:
2026-04-27 20:17:57 +02:00
parent 8d58a7fcc1
commit 6a983fe33c
3 changed files with 46 additions and 0 deletions

View File

@@ -20,6 +20,7 @@ XTFASTCALL
KRUNLEVEL KRUNLEVEL
HL::RunLevel::GetRunLevel(VOID) HL::RunLevel::GetRunLevel(VOID)
{ {
/* Read current run level */
return (KRUNLEVEL)AR::CpuFunc::ReadControlRegister(8); return (KRUNLEVEL)AR::CpuFunc::ReadControlRegister(8);
} }
@@ -37,6 +38,7 @@ XTFASTCALL
VOID VOID
HL::RunLevel::SetRunLevel(IN KRUNLEVEL RunLevel) HL::RunLevel::SetRunLevel(IN KRUNLEVEL RunLevel)
{ {
/* Set new run level */
AR::CpuFunc::WriteControlRegister(8, RunLevel); AR::CpuFunc::WriteControlRegister(8, RunLevel);
} }
@@ -54,6 +56,7 @@ XTFASTCALL
KRUNLEVEL KRUNLEVEL
HL::RunLevel::TransformApicTprToRunLevel(IN UCHAR Tpr) HL::RunLevel::TransformApicTprToRunLevel(IN UCHAR Tpr)
{ {
/* Transform APIC TPR to run level */
return (KRUNLEVEL)(Tpr >> 4); return (KRUNLEVEL)(Tpr >> 4);
} }
@@ -71,5 +74,25 @@ XTFASTCALL
UCHAR UCHAR
HL::RunLevel::TransformRunLevelToApicTpr(IN KRUNLEVEL RunLevel) HL::RunLevel::TransformRunLevelToApicTpr(IN KRUNLEVEL RunLevel)
{ {
/* Transform run level to APIC TPR */
return (RunLevel << 4); return (RunLevel << 4);
} }
/**
* Transforms a given execution run level into a corresponding hardware interrupt vector
* suitable for software interrupts.
*
* @param RunLevel
* Supplies the run level to be translated into a software interrupt vector.
*
* @return This routine returns the 8-bit APIC vector corresponding to the requested software interrupt level.
*
* @since XT 1.0
*/
XTFASTCALL
UCHAR
HL::RunLevel::TransformRunLevelToSoftwareVector(IN KRUNLEVEL RunLevel)
{
/* Transform run level to APIC interrupt vector */
return TransformRunLevelToApicTpr(RunLevel) | 0xF;
}

View File

@@ -20,6 +20,7 @@ XTFASTCALL
KRUNLEVEL KRUNLEVEL
HL::RunLevel::GetRunLevel(VOID) HL::RunLevel::GetRunLevel(VOID)
{ {
/* Read current run level */
return TransformApicTprToRunLevel(HL::Pic::ReadApicRegister(APIC_TPR)); return TransformApicTprToRunLevel(HL::Pic::ReadApicRegister(APIC_TPR));
} }
@@ -37,6 +38,7 @@ XTFASTCALL
VOID VOID
HL::RunLevel::SetRunLevel(IN KRUNLEVEL RunLevel) HL::RunLevel::SetRunLevel(IN KRUNLEVEL RunLevel)
{ {
/* Set new run level */
HL::Pic::WriteApicRegister(APIC_TPR, TransformRunLevelToApicTpr(RunLevel)); HL::Pic::WriteApicRegister(APIC_TPR, TransformRunLevelToApicTpr(RunLevel));
} }
@@ -131,3 +133,23 @@ HL::RunLevel::TransformRunLevelToApicTpr(IN KRUNLEVEL RunLevel)
/* Return the TPR corresponding to the run level from the transformation table. */ /* Return the TPR corresponding to the run level from the transformation table. */
return TransformationTable[RunLevel]; return TransformationTable[RunLevel];
} }
/**
* Transforms a given execution run level into a corresponding hardware interrupt vector
* suitable for software interrupts.
*
* @param RunLevel
* Supplies the run level to be translated into a software interrupt vector.
*
* @return This routine returns the 8-bit APIC vector corresponding to the requested software interrupt level.
*
* @since XT 1.0
*/
XTFASTCALL
UCHAR
HL::RunLevel::TransformRunLevelToSoftwareVector(IN KRUNLEVEL RunLevel)
{
/* Transform run level to APIC interrupt vector */
return TransformRunLevelToApicTpr(RunLevel);
}

View File

@@ -20,6 +20,7 @@ namespace HL
public: public:
STATIC XTFASTCALL KRUNLEVEL GetRunLevel(VOID); STATIC XTFASTCALL KRUNLEVEL GetRunLevel(VOID);
STATIC XTFASTCALL VOID SetRunLevel(IN KRUNLEVEL RunLevel); STATIC XTFASTCALL VOID SetRunLevel(IN KRUNLEVEL RunLevel);
STATIC XTFASTCALL UCHAR TransformRunLevelToSoftwareVector(IN KRUNLEVEL RunLevel);
private: private:
STATIC XTFASTCALL KRUNLEVEL TransformApicTprToRunLevel(IN UCHAR Tpr); STATIC XTFASTCALL KRUNLEVEL TransformApicTprToRunLevel(IN UCHAR Tpr);