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.

77 lines
1.6 KiB

  1. title "Deferred Procedure Call Interrupt"
  2. ;++
  3. ;
  4. ; Copyright (c) 2000 Microsoft Corporation
  5. ;
  6. ; Module Name:
  7. ;
  8. ; dpcint.asm
  9. ;
  10. ; Abstract:
  11. ;
  12. ; This module implements the code necessary to process the Deferred
  13. ; Procedure Call interrupt.
  14. ;
  15. ; Author:
  16. ;
  17. ; David N. Cutler (davec) 10-Nov-2000
  18. ;
  19. ; Environment:
  20. ;
  21. ; Kernel mode only.
  22. ;
  23. ;--
  24. extern KiDispatchInterrupt:proc
  25. extern KiInitiateUserApc:proc
  26. extern __imp_HalEndSystemInterrupt:qword
  27. include ksamd64.inc
  28. subttl "Deferred Procedure Call Interrupt"
  29. ;++
  30. ;
  31. ; VOID
  32. ; KiDpcInterrupt (
  33. ; VOID
  34. ; )
  35. ;
  36. ; Routine Description:
  37. ;
  38. ; This routine is entered as the result of a software interrupt generated
  39. ; at DISPATCH_LEVEL. Its function is to save the machine state and call
  40. ; the dispatch interrupt routine.
  41. ;
  42. ; N.B. This is a directly connected interrupt that does not use an interrupt
  43. ; object.
  44. ;
  45. ; Arguments:
  46. ;
  47. ; None.
  48. ;
  49. ; Return Value:
  50. ;
  51. ; None.
  52. ;
  53. ;--
  54. NESTED_ENTRY KiDpcInterrupt, _TEXT$00
  55. .pushframe ; mark machine frame
  56. push_reg rbp ; push dummy vector
  57. push_reg rbp ; save nonvolatile register
  58. GENERATE_INTERRUPT_FRAME ; generate interrupt frame
  59. mov ecx, DISPATCH_LEVEL ; set new IRQL level
  60. ENTER_INTERRUPT ; raise IRQL, do EOI, enable interrupts
  61. call KiDispatchInterrupt ; process the dispatch interrupt
  62. EXIT_INTERRUPT <NoEOI> ; lower IRQL and restore state
  63. NESTED_END KiDpcInterrupt, _TEXT$00
  64. end