Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// 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
|