reactos/ntoskrnl/include/internal/hal.h
Pierre Schweitzer 321bcc056d Create the AHCI branch for Aman's work
svn path=/branches/GSoC_2016/AHCI/; revision=71203
2016-04-24 20:17:09 +00:00

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;