ReactOS 0.4.16-dev-2633-g8dc9e50
halinit.c File Reference
#include <hal.h>
#include <debug.h>
Include dependency graph for halinit.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

static VOID HalpGetParameters (_In_ PLOADER_PARAMETER_BLOCK LoaderBlock)
 
VOID NTAPI HalInitializeProcessor (IN ULONG ProcessorNumber, IN PLOADER_PARAMETER_BLOCK LoaderBlock)
 
BOOLEAN NTAPI HalInitSystem (_In_ ULONG BootPhase, _In_ PLOADER_PARAMETER_BLOCK LoaderBlock)
 

Variables

BOOLEAN HalpOnlyBootProcessor
 
BOOLEAN HalpPciLockSettings
 
BOOLEAN HalBootViaEfi
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 12 of file halinit.c.

Function Documentation

◆ HalInitializeProcessor()

VOID NTAPI HalInitializeProcessor ( IN ULONG  ProcessorNumber,
IN PLOADER_PARAMETER_BLOCK  LoaderBlock 
)

Definition at line 57 of file halinit.c.

60{
61 /* Hal specific initialization for this cpu */
62 HalpInitProcessor(ProcessorNumber, LoaderBlock);
63
64 /* Set default stall count */
65 KeGetPcr()->StallScaleFactor = INITIAL_STALL_COUNT;
66
67 /* Update the interrupt affinity and processor mask */
70
71 if (ProcessorNumber == 0)
72 {
73 /* Register routines for KDCOM */
75 }
76}
VOID NTAPI HalpRegisterKdSupportFunctions(VOID)
Definition: busemul.c:22
KAFFINITY HalpDefaultInterruptAffinity
Definition: processor.c:18
KAFFINITY HalpActiveProcessors
Definition: processor.c:17
VOID NTAPI HalpInitProcessor(IN ULONG ProcessorNumber, IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: halinit.c:24
#define INITIAL_STALL_COUNT
Definition: ketypes.h:347
#define KeGetPcr()
Definition: ketypes.h:81
FORCEINLINE BOOLEAN InterlockedBitTestAndSetAffinity(volatile KAFFINITY *Affinity, ULONG Index)
Definition: kefuncs.h:63

◆ HalInitSystem()

BOOLEAN NTAPI HalInitSystem ( _In_ ULONG  BootPhase,
_In_ PLOADER_PARAMETER_BLOCK  LoaderBlock 
)

Definition at line 84 of file halinit.c.

87{
88 PKPRCB Prcb = KeGetCurrentPrcb();
90
91 /* Check the boot phase */
92 if (BootPhase == 0)
93 {
94 /* Save bus type */
95 HalpBusType = LoaderBlock->u.I386.MachineType & 0xFF;
96
97 /* Get command-line parameters */
98 HalpGetParameters(LoaderBlock);
99
100#if (NTDDI_VERSION >= NTDDI_LONGHORN)
101 HalBootViaEfi = LoaderBlock->FirmwareInformation.FirmwareTypeEfi;
102#else
104#ifdef __REACTOS__
105 ASSERT(LoaderBlock->Extension != NULL);
106 if (LoaderBlock->Extension->Size >= FIELD_OFFSET(LOADER_PARAMETER_EXTENSION, LoaderPerformanceData))
107 HalBootViaEfi = LoaderBlock->Extension->BootViaEFI;
108#endif
109#endif
110
111 /* Check for PRCB version mismatch */
112 if (Prcb->MajorVersion != PRCB_MAJOR_VERSION)
113 {
114 /* No match, bugcheck */
115 KeBugCheckEx(MISMATCHED_HAL, 1, Prcb->MajorVersion, PRCB_MAJOR_VERSION, 0);
116 }
117
118 /* Checked/free HAL requires checked/free kernel */
119 if (Prcb->BuildType != HalpBuildType)
120 {
121 /* No match, bugcheck */
122 KeBugCheckEx(MISMATCHED_HAL, 2, Prcb->BuildType, HalpBuildType, 0);
123 }
124
125 /* Initialize ACPI */
126 Status = HalpSetupAcpiPhase0(LoaderBlock);
127 if (!NT_SUCCESS(Status))
128 {
130 }
131
132 /* Initialize the PICs */
134
135 /* Initialize CMOS lock */
137
138 /* Initialize CMOS */
140
141 /* Fill out the dispatch tables */
146
147 HalGetInterruptTranslator = NULL; // FIXME: TODO
150
151 /* Setup I/O space */
154
155 /* Setup busy waiting */
157
158 /* Initialize the clock */
160
161 /*
162 * We could be rebooting with a pending profile interrupt,
163 * so clear it here before interrupts are enabled
164 */
166
167 /* Do some HAL-specific initialization */
168 HalpInitPhase0(LoaderBlock);
169
170 /* Initialize Phase 0 of the x86 emulator */
171 HalInitializeBios(0, LoaderBlock);
172 }
173 else if (BootPhase == 1)
174 {
175 /* Initialize bus handlers */
177
178 /* Do some HAL-specific initialization */
180
181 /* Initialize Phase 1 of the x86 emulator */
182 HalInitializeBios(1, LoaderBlock);
183 }
184
185 /* All done, return */
186 return TRUE;
187}
#define ACPI_BIOS_ERROR(plist)
Definition: acoutput.h:243
NTSTATUS NTAPI HaliInitPnpDriver(VOID)
Definition: halpnpdd.c:906
VOID NTAPI HalpInitializePICs(IN BOOLEAN EnableInterrupts)
Definition: apic.c:514
LONG NTSTATUS
Definition: precomp.h:26
DECLSPEC_NORETURN VOID NTAPI KeBugCheckEx(IN ULONG BugCheckCode, IN ULONG_PTR BugCheckParameter1, IN ULONG_PTR BugCheckParameter2, IN ULONG_PTR BugCheckParameter3, IN ULONG_PTR BugCheckParameter4)
Definition: debug.c:485
const USHORT HalpBuildType
Definition: buildtype.c:14
ULONG HalpBusType
Definition: pcibus.c:18
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define KeInitializeSpinLock(sl)
Definition: env_spec_w32.h:604
Status
Definition: gdiplustypes.h:25
NTSTATUS NTAPI HaliSetSystemInformation(IN HAL_SET_INFORMATION_CLASS InformationClass, IN ULONG BufferSize, IN OUT PVOID Buffer)
Definition: sysinfo.c:31
NTSTATUS NTAPI HaliQuerySystemInformation(IN HAL_QUERY_INFORMATION_CLASS InformationClass, IN ULONG BufferSize, IN OUT PVOID Buffer, OUT PULONG ReturnedLength)
Definition: sysinfo.c:19
VOID HalpInitializeClock(VOID)
Definition: timer.c:54
VOID NTAPI HaliHaltSystem(VOID)
Definition: processor.c:21
BOOLEAN NTAPI HalpBiosDisplayReset(VOID)
Definition: bios.c:642
VOID NTAPI HalpInitializeCmos(VOID)
Definition: cmos.c:160
PDMA_ADAPTER NTAPI HalpGetDmaAdapter(IN PVOID Context, IN PDEVICE_DESCRIPTION DeviceDescription, OUT PULONG NumberOfMapRegisters)
Definition: dma.c:853
KSPIN_LOCK HalpSystemHardwareLock
Definition: spinlock.c:25
PADDRESS_USAGE HalpAddressUsageList
Definition: usage.c:17
ADDRESS_USAGE HalpDefaultIoSpace
Definition: usage.c:51
VOID NTAPI HalpInitBusHandlers(VOID)
Definition: halacpi.c:986
NTSTATUS NTAPI HalpSetupAcpiPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: halacpi.c:792
static VOID HalpGetParameters(_In_ PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: halinit.c:22
VOID NTAPI HalStopProfileInterrupt(IN KPROFILE_SOURCE ProfileSource)
Definition: profil.c:22
VOID HalpInitPhase0(PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: halinit_mp.c:30
VOID HalpInitPhase1(VOID)
Definition: halinit_up.c:26
BOOLEAN HalBootViaEfi
Definition: halinit.c:21
#define ASSERT(a)
Definition: mode.c:44
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
Definition: ketypes.h:1187
#define PRCB_MAJOR_VERSION
Definition: ketypes.h:331
#define HalHaltSystem
Definition: halfuncs.h:43
#define HalResetDisplay
Definition: halfuncs.h:45
VOID HalpCalibrateStallExecution(VOID)
Definition: pchw.c:105
struct _HalAddressUsage * Next
Definition: halp.h:202
UCHAR BuildType
Definition: ketypes.h:697
USHORT MajorVersion
Definition: ketypes.h:696
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
@ ProfileTime
Definition: winternl.h:3731
VOID NTAPI HalInitializeBios(_In_ ULONG Phase, _In_ PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: x86bios.c:48
#define HalQuerySystemInformation
Definition: haltypes.h:304
#define HalGetDmaAdapter
Definition: haltypes.h:312
#define HalGetInterruptTranslator
Definition: haltypes.h:313
#define HalSetSystemInformation
Definition: haltypes.h:305
#define HalInitPnpDriver
Definition: haltypes.h:310

◆ HalpGetParameters()

static VOID HalpGetParameters ( _In_ PLOADER_PARAMETER_BLOCK  LoaderBlock)
static

Definition at line 28 of file halinit.c.

30{
31 /* Make sure we have a loader block and command line */
32 if (LoaderBlock && LoaderBlock->LoadOptions)
33 {
34 /* Read the command line */
35 PCSTR CommandLine = LoaderBlock->LoadOptions;
36
37//#ifdef CONFIG_SMP // FIXME: Reenable conditional once HAL is consistently compiled for SMP mode
38 /* Check whether we should only start one CPU */
39 if (strstr(CommandLine, "ONECPU"))
41//#endif
42
43 /* Check if PCI is locked */
44 if (strstr(CommandLine, "PCILOCK"))
46
47 /* Check for initial breakpoint */
48 if (strstr(CommandLine, "BREAK"))
50 }
51}
_ACRTIMP char *__cdecl strstr(const char *, const char *)
Definition: string.c:3415
BOOLEAN HalpOnlyBootProcessor
Definition: halinit.c:18
BOOLEAN HalpPciLockSettings
Definition: halinit.c:20
const char * PCSTR
Definition: typedefs.h:52
NTSYSAPI void WINAPI DbgBreakPoint(void)

Variable Documentation

◆ HalBootViaEfi

BOOLEAN HalBootViaEfi

Definition at line 21 of file halinit.c.

Referenced by HalInitializeBios(), and HalInitSystem().

◆ HalpOnlyBootProcessor

BOOLEAN HalpOnlyBootProcessor

Definition at line 18 of file halinit.c.

Referenced by HalpGetParameters(), and HalStartNextProcessor().

◆ HalpPciLockSettings

BOOLEAN HalpPciLockSettings

Definition at line 20 of file halinit.c.

Referenced by HalpAdjustPCIResourceList(), and HalpGetParameters().