Implement HlClearInterruptFlag() and HlSetInterruptFlag() intrinsic routines
All checks were successful
ci/woodpecker/push/build Pipeline was successful

This commit is contained in:
Rafal Kupiec 2022-12-27 18:54:01 +01:00
parent 8f3a4aef60
commit 5b75d005a7
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
5 changed files with 74 additions and 0 deletions

View File

@ -18,6 +18,10 @@
extern ULONG ComPortAddress[];
/* HAL library routines forward references */
XTCDECL
VOID
HlClearInterruptFlag();
XTCDECL
BOOLEAN
HlCpuId(IN OUT PCPUID_REGISTERS Registers);
@ -39,6 +43,10 @@ XTCDECL
ULONG_PTR
HlReadControlRegister(IN USHORT ControlRegister);
XTCDECL
VOID
HlSetInterruptFlag();
XTCDECL
VOID
HlWriteControlRegister(IN USHORT ControlRegister,

View File

@ -18,6 +18,10 @@
extern ULONG ComPortAddress[];
/* HAL library routines forward references */
XTCDECL
VOID
HlClearInterruptFlag();
XTCDECL
BOOLEAN
HlCpuId(IN OUT PCPUID_REGISTERS Registers);
@ -39,6 +43,10 @@ XTCDECL
ULONG_PTR
HlReadControlRegister(IN USHORT ControlRegister);
XTCDECL
VOID
HlSetInterruptFlag();
XTCDECL
VOID
HlWriteControlRegister(IN USHORT ControlRegister,

View File

@ -380,6 +380,7 @@ BlStartNewStack()
/* Infinite bootloader loop */
BlEfiPrint(L"System halted!");
HlClearInterruptFlag();
HlHalt();
/* Return success */
@ -461,6 +462,7 @@ BlStartXtLoader(IN EFI_HANDLE ImageHandle,
/* Infinite bootloader loop */
BlDbgPrint(L"ERROR: Unexpected exception occurred, probably did not create a new stack\n");
BlEfiPrint(L"System halted!");
HlClearInterruptFlag();
HlHalt();
/* Return success */

View File

@ -9,6 +9,20 @@
#include "xtkmapi.h"
/**
* Instructs the processor to clear the interrupt flag.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTCDECL
VOID
HlClearInterruptFlag()
{
asm volatile("cli");
}
/**
* Retrieves a various amount of information about the CPU.
*
@ -176,6 +190,20 @@ HlReadControlRegister(IN USHORT ControlRegister)
return Value;
}
/**
* Instructs the processor to set the interrupt flag.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTCDECL
VOID
HlSetInterruptFlag()
{
asm volatile("sti");
}
/**
* Writes a value to the specified CPU control register.
*

View File

@ -9,6 +9,20 @@
#include "xtkmapi.h"
/**
* Instructs the processor to clear the interrupt flag.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTCDECL
VOID
HlClearInterruptFlag()
{
asm volatile("cli");
}
/**
* Retrieves a various amount of information about the CPU.
*
@ -170,6 +184,20 @@ HlReadControlRegister(IN USHORT ControlRegister)
return Value;
}
/**
* Instructs the processor to set the interrupt flag.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTCDECL
VOID
HlSetInterruptFlag()
{
asm volatile("sti");
}
/**
* Writes a value to the specified CPU control register.
*