mirror of
https://github.com/reactos/reactos.git
synced 2024-11-03 21:34:00 +00:00
341 lines
7.2 KiB
C
341 lines
7.2 KiB
C
/*
|
|
* PROJECT: ReactOS Kernel
|
|
* LICENSE: GPL - See COPYING in the top level directory
|
|
* FILE: ntoskrnl/include/internal/hal.h
|
|
* PURPOSE: Internal header for the I/O HAL Functions (Fstub)
|
|
* PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
|
|
* Pierre Schweitzer (pierre.schweitzer@reactos.org)
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
//
|
|
// Default implementations of HAL dispatch table
|
|
//
|
|
VOID
|
|
FASTCALL
|
|
xHalExamineMBR(IN PDEVICE_OBJECT DeviceObject,
|
|
IN ULONG SectorSize,
|
|
IN ULONG MbrTypeIdentifier,
|
|
OUT PVOID *MbrBuffer);
|
|
|
|
VOID
|
|
FASTCALL
|
|
xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
|
|
IN PSTRING NtDeviceName,
|
|
OUT PUCHAR NtSystemPath,
|
|
OUT PSTRING NtSystemPathString);
|
|
|
|
NTSTATUS
|
|
FASTCALL
|
|
xHalIoReadPartitionTable(IN PDEVICE_OBJECT DeviceObject,
|
|
IN ULONG SectorSize,
|
|
IN BOOLEAN ReturnRecognizedPartitions,
|
|
IN OUT PDRIVE_LAYOUT_INFORMATION *PartitionBuffer);
|
|
|
|
NTSTATUS
|
|
FASTCALL
|
|
xHalIoSetPartitionInformation(IN PDEVICE_OBJECT DeviceObject,
|
|
IN ULONG SectorSize,
|
|
IN ULONG PartitionNumber,
|
|
IN ULONG PartitionType);
|
|
|
|
NTSTATUS
|
|
FASTCALL
|
|
xHalIoWritePartitionTable(IN PDEVICE_OBJECT DeviceObject,
|
|
IN ULONG SectorSize,
|
|
IN ULONG SectorsPerTrack,
|
|
IN ULONG NumberOfHeads,
|
|
IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer);
|
|
|
|
VOID
|
|
NTAPI
|
|
xHalHaltSystem(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
xHalEndOfBoot(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
xHalSetWakeEnable(
|
|
IN BOOLEAN Enable
|
|
);
|
|
|
|
UCHAR
|
|
NTAPI
|
|
xHalVectorToIDTEntry(
|
|
IN ULONG Vector
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
xHalGetInterruptTranslator(
|
|
IN INTERFACE_TYPE ParentInterfaceType,
|
|
IN ULONG ParentBusNumber,
|
|
IN INTERFACE_TYPE BridgeInterfaceType,
|
|
IN USHORT Size,
|
|
IN USHORT Version,
|
|
OUT PTRANSLATOR_INTERFACE Translator,
|
|
OUT PULONG BridgeBusNumber
|
|
);
|
|
|
|
PBUS_HANDLER
|
|
FASTCALL
|
|
xHalHandlerForBus(
|
|
IN INTERFACE_TYPE InterfaceType,
|
|
IN ULONG BusNumber
|
|
);
|
|
|
|
VOID
|
|
FASTCALL
|
|
xHalReferenceHandler(
|
|
IN PBUS_HANDLER BusHandler
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
xHalInitPnpDriver(
|
|
VOID
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
xHalInitPowerManagement(
|
|
IN PPM_DISPATCH_TABLE PmDriverDispatchTable,
|
|
OUT PPM_DISPATCH_TABLE *PmHalDispatchTable
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
xHalStartMirroring(
|
|
VOID
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
xHalEndMirroring(
|
|
IN ULONG PassNumber
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
xHalMirrorPhysicalMemory(
|
|
IN PHYSICAL_ADDRESS PhysicalAddress,
|
|
IN LARGE_INTEGER NumberOfBytes
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
xHalQueryBusSlots(
|
|
IN PBUS_HANDLER BusHandler,
|
|
IN ULONG BufferSize,
|
|
OUT PULONG SlotNumbers,
|
|
OUT PULONG ReturnedLength
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
xHalSetSystemInformation(
|
|
IN HAL_SET_INFORMATION_CLASS InformationClass,
|
|
IN ULONG BufferSize,
|
|
IN PVOID Buffer
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
xHalQuerySystemInformation(
|
|
IN HAL_QUERY_INFORMATION_CLASS InformationClass,
|
|
IN ULONG BufferSize,
|
|
IN OUT PVOID Buffer,
|
|
OUT PULONG ReturnedLength
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
xHalLocateHiberRanges(
|
|
IN PVOID MemoryMap
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
xHalRegisterBusHandler(
|
|
IN INTERFACE_TYPE InterfaceType,
|
|
IN BUS_DATA_TYPE ConfigSpace,
|
|
IN ULONG BusNumber,
|
|
IN INTERFACE_TYPE ParentInterfaceType,
|
|
IN ULONG ParentBusNumber,
|
|
IN ULONG ContextSize,
|
|
IN PINSTALL_BUS_HANDLER InstallCallback,
|
|
OUT PBUS_HANDLER *BusHandler
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
xHalSetWakeAlarm(
|
|
IN ULONGLONG AlartTime,
|
|
IN PTIME_FIELDS TimeFields
|
|
);
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
xHalTranslateBusAddress(
|
|
IN INTERFACE_TYPE InterfaceType,
|
|
IN ULONG BusNumber,
|
|
IN PHYSICAL_ADDRESS BusAddress,
|
|
IN OUT PULONG AddressSpace,
|
|
OUT PPHYSICAL_ADDRESS TranslatedAddress
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
xHalAllocateMapRegisters(
|
|
IN PADAPTER_OBJECT AdapterObject,
|
|
IN ULONG Unknown,
|
|
IN ULONG Unknown2,
|
|
PMAP_REGISTER_ENTRY Registers
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
xKdSetupPciDeviceForDebugging(
|
|
IN PVOID LoaderBlock OPTIONAL,
|
|
IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
xKdReleasePciDeviceForDebugging(
|
|
IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
|
|
);
|
|
|
|
PVOID
|
|
NTAPI
|
|
xKdGetAcpiTablePhase(
|
|
IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
|
|
IN ULONG Signature
|
|
);
|
|
|
|
PVOID
|
|
NTAPI
|
|
MatchAll(
|
|
IN PHYSICAL_ADDRESS PhysicalAddress,
|
|
IN ULONG NumberPages,
|
|
IN BOOLEAN FlushCurrentTLB
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
xKdUnmapVirtualAddress(
|
|
IN PVOID VirtualAddress,
|
|
IN ULONG NumberPages,
|
|
IN BOOLEAN FlushCurrentTLB
|
|
);
|
|
|
|
|
|
//
|
|
// Various offsets in the boot record
|
|
//
|
|
#define PARTITION_TABLE_OFFSET (0x1BE / 2)
|
|
#define BOOT_SIGNATURE_OFFSET ((0x200 / 2) - 1)
|
|
#define BOOT_RECORD_RESERVED 0x1BC
|
|
#define BOOT_RECORD_SIGNATURE 0xAA55
|
|
#define NUM_PARTITION_TABLE_ENTRIES 4
|
|
|
|
//
|
|
// Helper Macros
|
|
//
|
|
#define GET_STARTING_SECTOR(p) \
|
|
((ULONG)(p->StartingSectorLsb0) + \
|
|
(ULONG)(p->StartingSectorLsb1 << 8 ) + \
|
|
(ULONG)(p->StartingSectorMsb0 << 16) + \
|
|
(ULONG)(p->StartingSectorMsb1 << 24))
|
|
|
|
#define GET_ENDING_S_OF_CHS(p) \
|
|
((UCHAR)(p->EndingCylinderLsb & 0x3F))
|
|
|
|
#define GET_PARTITION_LENGTH(p) \
|
|
((ULONG)(p->PartitionLengthLsb0) + \
|
|
(ULONG)(p->PartitionLengthLsb1 << 8) + \
|
|
(ULONG)(p->PartitionLengthMsb0 << 16) + \
|
|
(ULONG)(p->PartitionLengthMsb1 << 24))
|
|
|
|
#define SET_PARTITION_LENGTH(p, l) \
|
|
p->PartitionLengthLsb0 = l & 0xFF; \
|
|
p->PartitionLengthLsb1 = (l >> 8) & 0xFF; \
|
|
p->PartitionLengthMsb0 = (l >> 16) & 0xFF; \
|
|
p->PartitionLengthMsb1 = (l >> 24) & 0xFF
|
|
|
|
//
|
|
// Structure describing a partition
|
|
//
|
|
typedef struct _PARTITION_DESCRIPTOR
|
|
{
|
|
UCHAR ActiveFlag;
|
|
UCHAR StartingTrack;
|
|
UCHAR StartingCylinderLsb;
|
|
UCHAR StartingCylinderMsb;
|
|
UCHAR PartitionType;
|
|
UCHAR EndingTrack;
|
|
UCHAR EndingCylinderLsb;
|
|
UCHAR EndingCylinderMsb;
|
|
UCHAR StartingSectorLsb0;
|
|
UCHAR StartingSectorLsb1;
|
|
UCHAR StartingSectorMsb0;
|
|
UCHAR StartingSectorMsb1;
|
|
UCHAR PartitionLengthLsb0;
|
|
UCHAR PartitionLengthLsb1;
|
|
UCHAR PartitionLengthMsb0;
|
|
UCHAR PartitionLengthMsb1;
|
|
} PARTITION_DESCRIPTOR, *PPARTITION_DESCRIPTOR;
|
|
|
|
//
|
|
// Structure describing a boot sector
|
|
//
|
|
typedef struct _BOOT_SECTOR_INFO
|
|
{
|
|
UCHAR JumpByte[1];
|
|
UCHAR Ignore1[2];
|
|
UCHAR OemData[8];
|
|
UCHAR BytesPerSector[2];
|
|
UCHAR Ignore2[6];
|
|
UCHAR NumberOfSectors[2];
|
|
UCHAR MediaByte[1];
|
|
UCHAR Ignore3[2];
|
|
UCHAR SectorsPerTrack[2];
|
|
UCHAR NumberOfHeads[2];
|
|
} BOOT_SECTOR_INFO, *PBOOT_SECTOR_INFO;
|
|
|
|
//
|
|
// Partition Table and Disk Layout
|
|
//
|
|
typedef struct _PARTITION_TABLE
|
|
{
|
|
PARTITION_INFORMATION PartitionEntry[4];
|
|
} PARTITION_TABLE, *PPARTITION_TABLE;
|
|
|
|
typedef struct _DISK_LAYOUT
|
|
{
|
|
ULONG TableCount;
|
|
ULONG Signature;
|
|
PARTITION_TABLE PartitionTable[1];
|
|
} DISK_LAYOUT, *PDISK_LAYOUT;
|
|
|
|
//
|
|
// Partition Table Entry
|
|
//
|
|
typedef struct _PTE
|
|
{
|
|
UCHAR ActiveFlag;
|
|
UCHAR StartingTrack;
|
|
USHORT StartingCylinder;
|
|
UCHAR PartitionType;
|
|
UCHAR EndingTrack;
|
|
USHORT EndingCylinder;
|
|
ULONG StartingSector;
|
|
ULONG PartitionLength;
|
|
} PTE, *PPTE;
|