Change the file name case to follow coding style: The first character should be capital.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5250 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
163
MdeModulePkg/Core/Dxe/Event/Tpl.c
Normal file
163
MdeModulePkg/Core/Dxe/Event/Tpl.c
Normal file
@@ -0,0 +1,163 @@
|
||||
/** @file
|
||||
|
||||
Task priority (TPL) function
|
||||
|
||||
Copyright (c) 2006 - 2008, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include <DxeMain.h>
|
||||
|
||||
|
||||
/**
|
||||
Set Interrupt State.
|
||||
|
||||
@param Enable The state of enable or disable interrupt
|
||||
|
||||
**/
|
||||
STATIC
|
||||
VOID
|
||||
CoreSetInterruptState (
|
||||
IN BOOLEAN Enable
|
||||
)
|
||||
{
|
||||
if (gCpu != NULL) {
|
||||
if (Enable) {
|
||||
gCpu->EnableInterrupt(gCpu);
|
||||
} else {
|
||||
gCpu->DisableInterrupt(gCpu);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Return the highest set bit
|
||||
//
|
||||
|
||||
/**
|
||||
Return the highest set bit.
|
||||
|
||||
@param Number The value to check
|
||||
|
||||
@return Bit position of the highest set bit
|
||||
|
||||
**/
|
||||
UINTN
|
||||
CoreHighestSetBit (
|
||||
IN UINTN Number
|
||||
)
|
||||
{
|
||||
UINTN msb;
|
||||
|
||||
msb = 31;
|
||||
while ((msb > 0) && ((Number & (UINTN)(1 << msb)) == 0)) {
|
||||
msb--;
|
||||
}
|
||||
|
||||
return msb;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Raise the task priority level to the new level.
|
||||
High level is implemented by disabling processor interrupts.
|
||||
|
||||
@param NewTpl New task priority level
|
||||
|
||||
@return The previous task priority level
|
||||
|
||||
**/
|
||||
EFI_TPL
|
||||
EFIAPI
|
||||
CoreRaiseTpl (
|
||||
IN EFI_TPL NewTpl
|
||||
)
|
||||
{
|
||||
EFI_TPL OldTpl;
|
||||
|
||||
OldTpl = gEfiCurrentTpl;
|
||||
ASSERT (OldTpl <= NewTpl);
|
||||
ASSERT (VALID_TPL (NewTpl));
|
||||
|
||||
//
|
||||
// If raising to high level, disable interrupts
|
||||
//
|
||||
if (NewTpl >= TPL_HIGH_LEVEL && OldTpl < TPL_HIGH_LEVEL) {
|
||||
CoreSetInterruptState (FALSE);
|
||||
}
|
||||
|
||||
//
|
||||
// Set the new value
|
||||
//
|
||||
gEfiCurrentTpl = NewTpl;
|
||||
|
||||
return OldTpl;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Lowers the task priority to the previous value. If the new
|
||||
priority unmasks events at a higher priority, they are dispatched.
|
||||
|
||||
@param NewTpl New, lower, task priority
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
CoreRestoreTpl (
|
||||
IN EFI_TPL NewTpl
|
||||
)
|
||||
{
|
||||
EFI_TPL OldTpl;
|
||||
|
||||
OldTpl = gEfiCurrentTpl;
|
||||
ASSERT (NewTpl <= OldTpl);
|
||||
ASSERT (VALID_TPL (NewTpl));
|
||||
|
||||
//
|
||||
// If lowering below HIGH_LEVEL, make sure
|
||||
// interrupts are enabled
|
||||
//
|
||||
|
||||
if (OldTpl >= TPL_HIGH_LEVEL && NewTpl < TPL_HIGH_LEVEL) {
|
||||
gEfiCurrentTpl = TPL_HIGH_LEVEL;
|
||||
}
|
||||
|
||||
//
|
||||
// Dispatch any pending events
|
||||
//
|
||||
|
||||
while ((-2 << NewTpl) & gEventPending) {
|
||||
gEfiCurrentTpl = CoreHighestSetBit (gEventPending);
|
||||
if (gEfiCurrentTpl < TPL_HIGH_LEVEL) {
|
||||
CoreSetInterruptState (TRUE);
|
||||
}
|
||||
CoreDispatchEventNotifies (gEfiCurrentTpl);
|
||||
}
|
||||
|
||||
//
|
||||
// Set the new value
|
||||
//
|
||||
|
||||
gEfiCurrentTpl = NewTpl;
|
||||
|
||||
//
|
||||
// If lowering below HIGH_LEVEL, make sure
|
||||
// interrupts are enabled
|
||||
//
|
||||
if (gEfiCurrentTpl < TPL_HIGH_LEVEL) {
|
||||
CoreSetInterruptState (TRUE);
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user