windows-nt/Source/XPSP1/NT/base/ntos/ke/amd64/kiamd64.h
2020-09-26 16:20:57 +08:00

247 lines
3.1 KiB
C

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
kiamd64.h
Abstract:
This module contains the private (internal) platform specific header file
for the kernel.
Author:
David N. Cutler (davec) 15-May-2000
Revision History:
--*/
#if !defined(_KIAMD64_)
#define _KIAMD64_
VOID
KiCheckBreakInRequest (
VOID
);
VOID
KiInitializeBootStructures (
PLOADER_PARAMETER_BLOCK LoaderBlock
);
ULONG
KiCopyInformation (
IN OUT PEXCEPTION_RECORD ExceptionRecord1,
IN PEXCEPTION_RECORD ExceptionRecord2
);
extern KIRQL KiProfileIrql;
BOOLEAN
KeInvalidateAllCaches (
IN BOOLEAN AllProcessors
);
VOID
KiRetireDpcList (
PKPRCB Prcb
);
//
// Define function prototypes for trap processing functions.
//
VOID
KiDivideErrorFault (
VOID
);
VOID
KiDebugTrapOrFault (
VOID
);
VOID
KiNmiInterrupt (
VOID
);
VOID
KiBreakpointTrap (
VOID
);
VOID
KiOverflowTrap (
VOID
);
VOID
KiBoundFault (
VOID
);
VOID
KiInvalidOpcodeFault (
VOID
);
VOID
KiNpxNotAvailableFault (
VOID
);
VOID
KiDoubleFaultAbort (
VOID
);
VOID
KiNpxSegmentOverrunAbort (
VOID
);
VOID
KiInvalidTssFault (
VOID
);
VOID
KiSegmentNotPresentFault (
VOID
);
VOID
KiSetPageAttributesTable (
VOID
);
VOID
KiStackFault (
VOID
);
VOID
KiGeneralProtectionFault (
VOID
);
VOID
KiPageFault (
VOID
);
VOID
KiFloatingErrorFault (
VOID
);
VOID
KiAlignmentFault (
VOID
);
VOID
KiMcheckAbort (
VOID
);
VOID
KiXmmException (
VOID
);
VOID
KiApcInterrupt (
VOID
);
VOID
KiDebugServiceTrap (
VOID
);
VOID
KiDpcInterrupt (
VOID
);
VOID
KiSystemCall32 (
VOID
);
VOID
KiSystemCall64 (
VOID
);
//
// Define unexpected interrupt structure and table.
//
// N.B. The actual table is generated in assembler.
//
typedef struct _UNEXPECTED_INTERRUPT {
ULONG Array[4];
} UNEXPECTED_INTERRUPT, *PUNEXPECTED_INTERRUPT;
UNEXPECTED_INTERRUPT KxUnexpectedInterrupt0[];
//
// PAE definitions.
//
#define MAX_IDENTITYMAP_ALLOCATIONS 30
typedef struct _IDENTITY_MAP {
PHARDWARE_PTE TopLevelDirectory;
ULONG64 IdentityCR3;
ULONG64 IdentityAddr;
ULONG PagesAllocated;
PVOID PageList[MAX_IDENTITYMAP_ALLOCATIONS];
} IDENTITY_MAP, *PIDENTITY_MAP;
VOID
Ki386ClearIdentityMap(
PIDENTITY_MAP IdentityMap
);
VOID
Ki386EnableTargetLargePage(
PIDENTITY_MAP IdentityMap
);
BOOLEAN
Ki386CreateIdentityMap(
IN OUT PIDENTITY_MAP IdentityMap,
IN PVOID StartVa,
IN PVOID EndVa
);
BOOLEAN
Ki386EnableCurrentLargePage (
IN ULONG IdentityAddr,
IN ULONG IdentityCr3
);
extern PVOID Ki386EnableCurrentLargePageEnd;
#define PPI_BITS 2
#define PDI_BITS 9
#define PTI_BITS 9
#define PDI_MASK ((1 << PDI_BITS) - 1)
#define PTI_MASK ((1 << PTI_BITS) - 1)
#define KiGetPpeIndex(va) ((((ULONG)(va)) >> PPI_SHIFT) & PPI_MASK)
#define KiGetPdeIndex(va) ((((ULONG)(va)) >> PDI_SHIFT) & PDI_MASK)
#define KiGetPteIndex(va) ((((ULONG)(va)) >> PTI_SHIFT) & PTI_MASK)
extern ULONG KeAmd64MachineType;
#endif // !defined(_KIAMD64_)