2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: ntoskrnl/include/hal.h
5 * PURPOSE: Internal header for the I/O HAL Functions (Fstub)
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
7 * Pierre Schweitzer (pierre.schweitzer@reactos.org)
13 // Default implementations of HAL dispatch table
17 xHalExamineMBR(IN PDEVICE_OBJECT DeviceObject
,
19 IN ULONG MbrTypeIdentifier
,
20 OUT PVOID
*MbrBuffer
);
24 xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock
,
25 IN PSTRING NtDeviceName
,
26 OUT PUCHAR NtSystemPath
,
27 OUT PSTRING NtSystemPathString
);
31 xHalIoReadPartitionTable(IN PDEVICE_OBJECT DeviceObject
,
33 IN BOOLEAN ReturnRecognizedPartitions
,
34 IN OUT PDRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
38 xHalIoSetPartitionInformation(IN PDEVICE_OBJECT DeviceObject
,
40 IN ULONG PartitionNumber
,
41 IN ULONG PartitionType
);
45 xHalIoWritePartitionTable(IN PDEVICE_OBJECT DeviceObject
,
47 IN ULONG SectorsPerTrack
,
48 IN ULONG NumberOfHeads
,
49 IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer
);
77 xHalGetInterruptTranslator(
78 IN INTERFACE_TYPE ParentInterfaceType
,
79 IN ULONG ParentBusNumber
,
80 IN INTERFACE_TYPE BridgeInterfaceType
,
83 OUT PTRANSLATOR_INTERFACE Translator
,
84 OUT PULONG BridgeBusNumber
90 IN INTERFACE_TYPE InterfaceType
,
97 IN PBUS_HANDLER BusHandler
108 xHalInitPowerManagement(
109 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
110 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
127 xHalMirrorPhysicalMemory(
128 IN PHYSICAL_ADDRESS PhysicalAddress
,
129 IN LARGE_INTEGER NumberOfBytes
135 IN PBUS_HANDLER BusHandler
,
137 OUT PULONG SlotNumbers
,
138 OUT PULONG ReturnedLength
143 xHalSetSystemInformation(
144 IN HAL_SET_INFORMATION_CLASS InformationClass
,
151 xHalQuerySystemInformation(
152 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
155 OUT PULONG ReturnedLength
160 xHalLocateHiberRanges(
166 xHalRegisterBusHandler(
167 IN INTERFACE_TYPE InterfaceType
,
168 IN BUS_DATA_TYPE ConfigSpace
,
170 IN INTERFACE_TYPE ParentInterfaceType
,
171 IN ULONG ParentBusNumber
,
172 IN ULONG ContextSize
,
173 IN PINSTALL_BUS_HANDLER InstallCallback
,
174 OUT PBUS_HANDLER
*BusHandler
180 IN ULONGLONG AlartTime
,
181 IN PTIME_FIELDS TimeFields
186 xHalTranslateBusAddress(
187 IN INTERFACE_TYPE InterfaceType
,
189 IN PHYSICAL_ADDRESS BusAddress
,
190 IN OUT PULONG AddressSpace
,
191 OUT PPHYSICAL_ADDRESS TranslatedAddress
196 xHalAllocateMapRegisters(
197 IN PADAPTER_OBJECT AdapterObject
,
200 PMAP_REGISTER_ENTRY Registers
205 xKdSetupPciDeviceForDebugging(
206 IN PVOID LoaderBlock OPTIONAL
,
207 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
212 xKdReleasePciDeviceForDebugging(
213 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
218 xKdGetAcpiTablePhase(
219 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
226 IN PHYSICAL_ADDRESS PhysicalAddress
,
227 IN ULONG NumberPages
,
228 IN BOOLEAN FlushCurrentTLB
233 xKdUnmapVirtualAddress(
234 IN PVOID VirtualAddress
,
235 IN ULONG NumberPages
,
236 IN BOOLEAN FlushCurrentTLB
241 // Various offsets in the boot record
243 #define PARTITION_TABLE_OFFSET (0x1BE / 2)
244 #define BOOT_SIGNATURE_OFFSET ((0x200 / 2) - 1)
245 #define BOOT_RECORD_RESERVED 0x1BC
246 #define BOOT_RECORD_SIGNATURE 0xAA55
247 #define NUM_PARTITION_TABLE_ENTRIES 4
252 #define GET_STARTING_SECTOR(p) \
253 ((ULONG)(p->StartingSectorLsb0) + \
254 (ULONG)(p->StartingSectorLsb1 << 8 ) + \
255 (ULONG)(p->StartingSectorMsb0 << 16) + \
256 (ULONG)(p->StartingSectorMsb1 << 24))
258 #define GET_ENDING_S_OF_CHS(p) \
259 ((UCHAR)(p->EndingCylinderLsb & 0x3F))
261 #define GET_PARTITION_LENGTH(p) \
262 ((ULONG)(p->PartitionLengthLsb0) + \
263 (ULONG)(p->PartitionLengthLsb1 << 8) + \
264 (ULONG)(p->PartitionLengthMsb0 << 16) + \
265 (ULONG)(p->PartitionLengthMsb1 << 24))
267 #define SET_PARTITION_LENGTH(p, l) \
268 p->PartitionLengthLsb0 = l & 0xFF; \
269 p->PartitionLengthLsb1 = (l >> 8) & 0xFF; \
270 p->PartitionLengthMsb0 = (l >> 16) & 0xFF; \
271 p->PartitionLengthMsb1 = (l >> 24) & 0xFF
274 // Structure describing a partition
276 typedef struct _PARTITION_DESCRIPTOR
280 UCHAR StartingCylinderLsb
;
281 UCHAR StartingCylinderMsb
;
284 UCHAR EndingCylinderLsb
;
285 UCHAR EndingCylinderMsb
;
286 UCHAR StartingSectorLsb0
;
287 UCHAR StartingSectorLsb1
;
288 UCHAR StartingSectorMsb0
;
289 UCHAR StartingSectorMsb1
;
290 UCHAR PartitionLengthLsb0
;
291 UCHAR PartitionLengthLsb1
;
292 UCHAR PartitionLengthMsb0
;
293 UCHAR PartitionLengthMsb1
;
294 } PARTITION_DESCRIPTOR
, *PPARTITION_DESCRIPTOR
;
297 // Structure describing a boot sector
299 typedef struct _BOOT_SECTOR_INFO
304 UCHAR BytesPerSector
[2];
306 UCHAR NumberOfSectors
[2];
309 UCHAR SectorsPerTrack
[2];
310 UCHAR NumberOfHeads
[2];
311 } BOOT_SECTOR_INFO
, *PBOOT_SECTOR_INFO
;
314 // Partition Table and Disk Layout
316 typedef struct _PARTITION_TABLE
318 PARTITION_INFORMATION PartitionEntry
[4];
319 } PARTITION_TABLE
, *PPARTITION_TABLE
;
321 typedef struct _DISK_LAYOUT
325 PARTITION_TABLE PartitionTable
[1];
326 } DISK_LAYOUT
, *PDISK_LAYOUT
;
329 // Partition Table Entry
335 USHORT StartingCylinder
;
338 USHORT EndingCylinder
;
339 ULONG StartingSector
;
340 ULONG PartitionLength
;