pkvec.s
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:2k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. ; Packet driver interrupt hooks
  2. include asmglobal.h
  3. extrn pkint:proc
  4. .DATA
  5. extrn Stktop
  6. .CODE
  7. sssave dw ?
  8. spsave dw ?
  9. dbase dw @Data
  10. if @Cpu AND 8 ; temp storage for POPAD operations
  11. disave dw ?
  12. endif
  13. ; pkvec0 - Packet driver receive call handler #0
  14. public pkvec0
  15. label pkvec0 far
  16. pushf ; save his interrupt state
  17. cld
  18. cli ; no distractions
  19. mov cs:sssave,ss ; stash user stack context
  20. mov cs:spsave,sp
  21. mov ss,cs:dbase ; set up interrupt stack
  22. lea sp,Stktop
  23. if @Cpu AND 8
  24. PUSHALL ; Protect 32-bit regs
  25. endif
  26. push ds ; save for caller
  27. mov ds,cs:dbase
  28. push ax
  29. push cx
  30. mov ax,0 ; device #0
  31. push ax
  32. call pkint
  33. jmp pkret
  34. ; pkvec1 - Packet driver receive call handler #1
  35. public pkvec1
  36. label pkvec1 far
  37. pushf ; save his interrupt state
  38. cld
  39. cli ; no distractions
  40. mov cs:sssave,ss ; stash user stack context
  41. mov cs:spsave,sp
  42. mov ss,cs:dbase ; set up interrupt stack
  43. lea sp,Stktop
  44. if @Cpu AND 8
  45. PUSHALL ; Protect 32-bit regs
  46. endif
  47. push ds ; save for caller
  48. mov ds,cs:dbase
  49. push ax
  50. push cx
  51. mov ax,1 ; device #1
  52. push ax
  53. call pkint
  54. jmp pkret
  55. ; pkvec2 - Packet driver receive call handler #2
  56. public pkvec2
  57. label pkvec2 far
  58. pushf ; save his interrupt state
  59. cld
  60. cli ; no distractions
  61. mov cs:sssave,ss ; stash user stack context
  62. mov cs:spsave,sp
  63. mov ss,cs:dbase ; set up interrupt stack
  64. lea sp,Stktop
  65. if @Cpu AND 8
  66. PUSHALL ; Protect 32-bit regs
  67. endif
  68. push ds ; save for caller
  69. mov ds,cs:dbase
  70. push ax
  71. push cx
  72. mov ax,2 ; device #2
  73. push ax
  74. call pkint
  75. jmp pkret
  76. ; common return for all packet drivers
  77. label pkret near
  78. mov es,dx ; move returned pointer from DX:AX to ES:DI
  79. mov di,ax
  80. pop ax ; pop dev # arg
  81. pop cx
  82. pop ax
  83. pop ds ; restore for caller
  84. if @Cpu AND 8 ; POPAD available
  85. mov cs:disave,di
  86. POPALL ; restore all regs but DI 
  87. mov di,cs:disave
  88. endif
  89. mov ss,cs:sssave
  90. mov sp,cs:spsave ; restore original stack context
  91. POPFLAGS
  92. retf
  93. end