Execution in the boot services environment occurs at different task priority levels, or TPLs. The
boot services environment exposes only three of these levels to EFI applications and drivers:
•
TPL_APPLICATION, the lowest priority level
•
TPL_CALLBACK, an intermediate priority level
•
TPL_NOTIFY, the highest priority level
Tasks that execute at a higher priority level may interrupt tasks that execute at a lower priority
level. For example, tasks that run at the
or
TPL_APPLICATION
exposed to the boot services applications, the firmware may have higher task priority items it deals
with. For example, the firmware may have to deal with tasks of higher priority like timer ticks and
internal devices. Consequently, there is a fourth TPL,
exclusively by the firmware.
The intended usage of the priority levels is shown in Table 3-2 from the lowest level
(TPL_APPLICATION) to the highest level (TPL_HIGH_LEVEL). As the level increases, the
duration of the code and the amount of blocking allowed decrease. Execution generally occurs at
the
TPL_APPLICATION
of an event notification function(this is typically caused by the signaling of an event). During timer
interrupts, firmware signals timer events when an event's "trigger time" has expired. This allows
event notification functions to interrupt lower priority code to check devices (for example). The
notification function can signal other events as required. After all pending event notification
functions execute, execution continues at the
Table 3-2.
TPL Usage
Task Priority Level
TPL_APPLICATION
TPL_CALLBACK
TPL_NOTIFY
Version 1.02
TPL_NOTIFY
level. While
TPL_CALLBACK
level. Execution occurs at other levels as a direct result of the triggering
TPL_APPLICATION
Usage
This is the lowest priority level. It is the level of execution which occurs when
no event notifications are pending and which interacts with the user. User I/O
(and blocking on User I/O) can be performed at this level. The boot manager
executes at this level and passes control to other EFI applications at this level.
Interrupts code executing below
operations (such as file system operations and disk I/O) can occur at this level.
Interrupts code execting below
at this level. Code executes to completion and returns. If code requires more
processing, it needs to signal an event to wait to reobtain control at whatever
level it requires. This level is typically used to process low level IO to or from a
device.
12/12/00
level may interrupt tasks that run at the
is the highest level
TPL_NOTIFY
designed for use
TPL_HIGH_LEVEL,
level.
TPL_CALLBACK
level. Long term
TPL_NOTIFY
level. Blocking is not allowed
Services
continued
27
Need help?
Do you have a question about the Extensible Firmware Interface and is the answer not in the manual?