Changeset 23506 in vbox for trunk/src/VBox/Runtime/r0drv/nt
- Timestamp:
- Oct 2, 2009 11:12:21 AM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 53145
- Location:
- trunk/src/VBox/Runtime/r0drv/nt
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/r0drv/nt/initterm-r0drv-nt.cpp
r23413 r23506 59 59 /** HalRequestIpi, introduced in ??. */ 60 60 PFNHALREQUESTIPI g_pfnrtNtHalRequestIpi; 61 /** HalSendSoftwareInterrupt */ 62 PFNHALSENDSOFTWAREINTERRUPT g_pfnrtNtHalSendSoftwareInterrupt; 61 63 /** SendIpi handler based on Windows version */ 62 64 PFNRTSENDIPI g_pfnrtSendIpi; … … 88 90 g_pfnrtNtKeFlushQueuedDpcs = NULL; 89 91 g_pfnrtNtHalRequestIpi = NULL; 92 g_pfnrtNtHalSendSoftwareInterrupt = NULL; 90 93 #else 91 94 /* … … 101 104 RtlInitUnicodeString(&RoutineName, L"HalRequestIpi"); 102 105 g_pfnrtNtHalRequestIpi = (PFNHALREQUESTIPI)MmGetSystemRoutineAddress(&RoutineName); 106 107 RtlInitUnicodeString(&RoutineName, L"HalSendSoftwareInterrupt"); 108 g_pfnrtNtHalSendSoftwareInterrupt = (PFNHALSENDSOFTWAREINTERRUPT)MmGetSystemRoutineAddress(&RoutineName); 103 109 #endif 104 110 … … 113 119 g_pfnrtSendIpi = rtMpSendIpiDummy; 114 120 #ifndef IPRT_TARGET_NT4 115 if (g_pfnrtNtHalRequestIpi) 116 { 117 if ( MajorVersion == 6 118 && MinorVersion == 0) 119 { 120 /* Vista or Windows Server 2008 */ 121 g_pfnrtSendIpi = rtMpSendIpiVista; 122 } 123 else 124 if ( MajorVersion == 6 125 && MinorVersion == 1) 126 { 127 /* Windows 7 or Windows Server 2008 R2 */ 128 g_pfnrtSendIpi = rtMpSendIpiWin7; 129 } 130 /* Windows XP should send always send an IPI -> VERIFY */ 131 } 121 if ( g_pfnrtNtHalRequestIpi 122 && MajorVersion == 6 123 && MinorVersion == 0) 124 { 125 /* Vista or Windows Server 2008 */ 126 g_pfnrtSendIpi = rtMpSendIpiVista; 127 } 128 else 129 if ( g_pfnrtNtHalSendSoftwareInterrupt 130 && MajorVersion == 6 131 && MinorVersion == 1) 132 { 133 /* Windows 7 or Windows Server 2008 R2 */ 134 g_pfnrtSendIpi = rtMpSendIpiWin7; 135 } 136 /* Windows XP should send always send an IPI -> VERIFY */ 132 137 #endif 133 138 KIRQL OldIrql; -
trunk/src/VBox/Runtime/r0drv/nt/internal-r0drv-nt.h
r23412 r23506 42 42 typedef VOID (__stdcall *PFNMYKEFLUSHQUEUEDDPCS)(VOID); 43 43 typedef VOID (__stdcall *PFNHALREQUESTIPI)(KAFFINITY TargetSet); 44 typedef VOID (__stdcall *PFNHALSENDSOFTWAREINTERRUPT)(ULONG ProcessorNumber, KIRQL Irql); 44 45 typedef int (__stdcall *PFNRTSENDIPI)(RTCPUID idCpu); 45 46 … … 52 53 extern PFNMYKEFLUSHQUEUEDDPCS g_pfnrtNtKeFlushQueuedDpcs; 53 54 extern PFNHALREQUESTIPI g_pfnrtNtHalRequestIpi; 55 extern PFNHALSENDSOFTWAREINTERRUPT g_pfnrtNtHalSendSoftwareInterrupt; 54 56 extern PFNRTSENDIPI g_pfnrtSendIpi; 55 57 extern uint32_t g_offrtNtPbQuantumEnd; -
trunk/src/VBox/Runtime/r0drv/nt/mp-r0drv-nt.cpp
r23416 r23506 357 357 int rtMpSendIpiWin7(RTCPUID idCpu) 358 358 { 359 return VERR_NOT_IMPLEMENTED; 360 /* bsod */ 361 VOID (__stdcall *pfRequestIpi)(KAFFINITY Zero, KAFFINITY TargetSet) = (VOID (__stdcall *)(KAFFINITY, KAFFINITY))g_pfnrtNtHalRequestIpi; 362 363 pfRequestIpi(0, 1 << idCpu); 359 g_pfnrtNtHalSendSoftwareInterrupt(idCpu, DISPATCH_LEVEL); 364 360 return VINF_SUCCESS; 365 361 }
Note:
See TracChangeset
for help on using the changeset viewer.