102 lines
1.8 KiB
ArmAsm
102 lines
1.8 KiB
ArmAsm
// TITLE("Manipulate Interrupt Request Level")
|
||
//++
|
||
//
|
||
// Copyright (c) 1990 Microsoft Corporation
|
||
// Copyright (c) 1992 Microsoft Corporation
|
||
//
|
||
// Module Name:
|
||
//
|
||
// irql.s
|
||
//
|
||
// Abstract:
|
||
//
|
||
// This module implements the code necessary to lower and raise the current
|
||
// Interrupt Request Level (IRQL).
|
||
//
|
||
//
|
||
// Author:
|
||
//
|
||
// David N. Cutler (davec) 12-Aug-1990
|
||
// Joe Notarangelo 06-Apr-1992
|
||
//
|
||
// Environment:
|
||
//
|
||
// Kernel mode only.
|
||
//
|
||
// Revision History:
|
||
//
|
||
//--
|
||
|
||
#include "ksalpha.h"
|
||
|
||
//++
|
||
//
|
||
// VOID
|
||
// KeLowerIrql (
|
||
// KIRQL NewIrql
|
||
// )
|
||
//
|
||
// Routine Description:
|
||
//
|
||
// This function lowers the current IRQL to the specified value.
|
||
//
|
||
// Arguments:
|
||
//
|
||
// NewIrql (a0) - Supplies the new IRQL value.
|
||
//
|
||
// Return Value:
|
||
//
|
||
// None.
|
||
//
|
||
//--
|
||
|
||
LEAF_ENTRY(KeLowerIrql)
|
||
|
||
SWAP_IRQL // a0 = new, on return v0 = old irql
|
||
ret zero, (ra) // return
|
||
|
||
.end KeLowerIrql
|
||
|
||
//++
|
||
//
|
||
// VOID
|
||
// KeRaiseIrql (
|
||
// KIRQL NewIrql,
|
||
// PKIRQL OldIrql
|
||
// )
|
||
//
|
||
// Routine Description:
|
||
//
|
||
// This function raises the current IRQL to the specified value and returns
|
||
// the old IRQL value.
|
||
//
|
||
// Arguments:
|
||
//
|
||
// NewIrql (a0) - Supplies the new IRQL value.
|
||
//
|
||
// OldIrql (a1) - Supplies a pointer to a variable that recieves the old
|
||
// IRQL value.
|
||
//
|
||
// Return Value:
|
||
//
|
||
// None.
|
||
//
|
||
//--
|
||
|
||
LEAF_ENTRY(KeRaiseIrql)
|
||
|
||
bis a1, zero, t0 // save pointer to old irql
|
||
SWAP_IRQL // a0 = new, on return v0 = old irql
|
||
|
||
ldq_u t1, 0(t0) // get quadword around old irql
|
||
bic t0, 0x3, t3 // get containing longword address
|
||
insbl v0, t0, t2 // put destination byte into position
|
||
mskbl t1, t0, t1 // clear destination byte
|
||
bis t1, t2, t1 // merge destination byte
|
||
extll t1, t3, t1 // get appropriate longword
|
||
stl t1, 0(t3) // store byte
|
||
|
||
ret zero, (ra) // return
|
||
|
||
.end KeRaiseIrql
|