3 /* For KeStallExecutionProcessor */
4 #if defined(_M_IX86) || defined(_M_AMD64)
5 #include <arch/pc/pcbios.h>
20 IN PKSPIN_LOCK SpinLock
)
27 IN PKSPIN_LOCK SpinLock
)
34 IN ULONG MaxIncrement
,
35 IN ULONG MinIncrement
)
43 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
44 IN PSTRING NtDeviceName
,
45 OUT PUCHAR NtSystemPath
,
46 OUT PSTRING NtSystemPathString
)
53 IoSetPartitionInformation(
54 IN PDEVICE_OBJECT DeviceObject
,
56 IN ULONG PartitionNumber
,
57 IN ULONG PartitionType
)
59 return STATUS_NOT_IMPLEMENTED
;
65 IoWritePartitionTable(
66 IN PDEVICE_OBJECT DeviceObject
,
68 IN ULONG SectorsPerTrack
,
69 IN ULONG NumberOfHeads
,
70 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
)
72 return STATUS_NOT_IMPLEMENTED
;
78 KeStallExecutionProcessor(
79 IN ULONG MicroSeconds
)
81 #if defined(_M_IX86) || defined(_M_AMD64)
86 // BIOS - WAIT (AT,PS)
89 // CX:DX = interval in microseconds
91 // CF clear if successful (wait interval elapsed)
92 // CF set on error or AH=83h wait already in progress
93 // AH = status (see #00496)
95 // Note: The resolution of the wait period is 977 microseconds on
96 // many systems because many BIOSes use the 1/1024 second fast
97 // interrupt from the AT real-time clock chip which is available on INT 70;
98 // because newer BIOSes may have much more precise timers available, it is
99 // not possible to use this function accurately for very short delays unless
100 // the precise behavior of the BIOS is known (or found through testing)
104 usec_this
= MicroSeconds
;
106 if (usec_this
> 4000000)
112 Regs
.w
.cx
= usec_this
>> 16;
113 Regs
.w
.dx
= usec_this
& 0xffff;
114 Int386(0x15, &Regs
, &Regs
);
116 MicroSeconds
-= usec_this
;