62 Commits
Author SHA1 Message Date
Timo Kreuzer 1704b28ed0 [HAL] Implement HaliQueryProcessorBrandString 2026-07-03 17:04:11 +00:00
Doug Lyons 442892d14d [HALX86:DMA] Improve limitation of Scatter/Gather memory allocation (#8910)
CORE-20565

Estimate DMA memory needed staying conservative and use this for memory allocation.
This fixes a regression caused by [5418987](https://github.com/reactos/reactos/commit/5418987)
2026-05-03 18:46:55 -05:00
Dmitry Borisov 5418987cb8 [HALX86:DMA] HACK: Avoid excessive stack usage
CORE-17256
2026-04-21 15:01:22 -05:00
Dmitry Borisov 6eaae6d729 [HAL] Make HalpCalibrateStallExecution discardable
- Discard the RTC interrupt handler for MSVC builds. Unfortunately GAS doesn't have such a feature
- Remove the unused systimer.S file from MiniHAL compilation
2026-04-15 10:52:11 +03:00
Ahmed Arif 229f7891a1 [FREELDR][HAL] Skip x86 BIOS emulator on UEFI boots (#8827)
Skip x86 BIOS emulator initialization on EFI boots by having FreeLdr populate EFI boot state in the loader block and making HAL consume it.

This keeps BIOS behavior unchanged while avoiding legacy BIOS/INT10 setup in the EFI path and preventing early EFI boot failures caused by entering the BIOS emulator path at all.
2026-04-02 13:37:43 +02:00
Hermès Bélusca-Maïto bcd4c718c1 [HALX86] Use correct HalpComPortIrqMapping values in PC98
In addition, there is no COM port IRQ mapping on the Xbox,
so exclude this from the Xbox HAL build.
2026-03-19 21:53:12 +01:00
Ivan Georgiev a70f59b0dd [DRIVERS] Replace obsolete RtlConvert*ToLargeInteger calls with inline equivalents (#8721)
RtlConvertUlongToLargeInteger and RtlConvertLongToLargeInteger are
obsolete NT routines that assign a 32-bit integer to LARGE_INTEGER.QuadPart.
Replace all driver/DLL usages with inline .QuadPart assignments or
standard C/C++ casts. This removes unnecessary function calls.

CORE-19438
2026-03-14 13:29:02 +03:00
Hermès Bélusca-Maïto 5674e5d32b [BOOTVID][HAL][NTOS:INBV][NDK] *DisplayString(): Use a more suitable string pointer parameter type
Use `PCSTR` for the type of the (Hal,Inbv,Vid)DisplayString() routines'
`String` parameter, instead of `PCHAR` or `PUCHAR`, since it points to a
NUL-terminated string. (The buffer isn't a counted string.)

And improve SAL annotations along the way.
2026-01-03 14:19:24 +01:00
Hermès Bélusca-Maïto 1b89086bae [HALX86] Re-enable HalpBiosDisplayReset() for x64: it actually supports display reset (#5513)
CORE-18185
Addendum to commit 215148267e

Everything that's needed (the x86 emulator with x86BiosCall) is implemented.
Fixes screen cleaning when bootvid takes over the VGA display.
2025-11-19 15:32:19 +01:00
Hermès Bélusca-Maïto 94abe8328f [HALX86] HalpBiosDisplayReset: Return x86BiosCall result (#5513) 2025-11-18 22:09:10 +01:00
Timo Kreuzer de5f284ae3 [HALX86] Fix x86BiosCall
Properly initialize the segment registers by calling Fast486SetSegment. Fixes graphics initialization on some hardware.
2025-11-02 14:46:54 +02:00
Timo Kreuzer 6b0ac35393 [HALx86] Fix annotations for x86BiosAllocateBuffer 2025-11-02 14:46:54 +02:00
Timo Kreuzer 2c057d9bc1 [HALX86] Set the NMI disable flag when accessing CMOS registers
An NMI while accessing the CMOS can leave it in an undefined state. NMIs are used on x64 SMP for CPU freeze in the debugger.
2025-04-24 11:36:12 +00:00
Hermès Bélusca-Maïto 3022d74beb [NTOS:EX/KE][HALX86] Add support for NUMPROC, BOOTPROC, MAXPROC, ONECPU boot switches (#6024)
These SMP-specific switches allow to test and control configurations
with various number of CPUs on multiprocessor systems.

- NUMPROC: maximum number of logical processors that can be started
  (including dynamically, not currently supported by ReactOS) at run-time.

- BOOTPROC: maximum number of logical processors that can be started at
  boot-time.

- MAXPROC: forces the OS to report the maximum possible number of CPUs
  as existing on the system.

- ONECPU (MP HAL-only boot switch): causes the HAL to only use one
  (the boot) CPU on a multiprocessor system. Attempting to start other
  processors will fail.

For more information, see:
https://www.geoffchappell.com/notes/windows/boot/bcd/osloader/numproc.htm
https://www.geoffchappell.com/notes/windows/license/processors.htm
https://rmscrypt.wordpress.com/2011/02/
https://codeinsecurity.wordpress.com/2022/04/07/cpu-socket-and-core-count-limits-in-windows-10-and-how-to-remove-them/

Generic references about BOOT.INI switches:
https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/boot-options-in-a-boot-ini-file
https://www.itprotoday.com/cloud-computing/what-switches-can-be-used-bootini
http://franck.kiechel.free.fr/dbr_eng/BootIni.htm

References about BCD options:
https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/bcdedit--set
http://www.mistyprojects.co.uk/documents/BCDEdit/files/commands.6.1.7601.htm#TYPES%20OSLOADER
2025-04-04 12:51:49 +02:00
Hermès Bélusca-Maïto b0dd4ba09c [HALX86][HALARM] Minor formatting to HalInitSystem
Add CODE_SEG("INIT"), SAL2 annotations, remove extra-parenthesis...
2025-04-04 12:51:28 +02:00
Timo Kreuzer 79aaee6aac [HALX86] Implement the clock IPI handler 2024-03-02 07:56:27 +01:00
Hermès Bélusca-Maïto 46831c537f [HAL] HalInitializeBios() should not explicitly call HalpBiosDisplayReset().
While the BIOS support for INT10h emulation has been set up, any
modification of the display should wait until the kernel requests
video initialization with INBV/bootvid.
The latter will call HalResetDisplay() (that calls HalpBiosDisplayReset())
at the correct time.
This avoids an useless video mode change and reset when booting ReactOS.
2024-02-11 18:51:40 +01:00
Justin Miller 3306a16e84 [HALX86] Fix SYNCH_LEVEL differences between UP and SMP in HAL (#5874)
First step to fixing the multiprocessor kernel when booting on a single core.
2024-01-20 06:26:59 -08:00
Timo Kreuzer 10bb50b456 [HAL] Fix SMP initialization
- Don't use CONFIG_SMP, this isn't handled in (most of) hal
- Add a dummy HalpSetupProcessorsTable for UP
- Call HalpRegisterKdSupportFunctions only for processor 0
2023-12-30 12:53:18 +02:00
Timo Kreuzer 230f7c7f3c [HALX86] Some improvements / bugfixes for IPI support functions 2023-12-08 19:28:57 +02:00
Timo Kreuzer d8d46a00c3 [HALX86] Use InterlockedBitTestAndSetAffinity instead of InterlockedBitTestAndSet 2023-12-08 19:28:57 +02:00
Timo Kreuzer 40b6b1dab3 [HAL] Implement IPI support functions 2023-12-03 00:07:53 +02:00
Justin Miller 516ccad340 [NTOS:KE][HALX86] Implement AP startup code (#5879)
Co-authored-by: Victor Perevertkin <[email protected]>

Introduce the initial changes needed to get other processors up and into kernel mode. 
This only supports x86 as of now but is the first real step towards using other system processors.
2023-11-19 15:51:33 -08:00
Serge Gautherie 2cc7eeb939 [HALX86] Add missing \n to DPRINT() calls (#5993)
And promote some DPRINT() to DPRINT1().
2023-11-19 19:44:46 +01:00
Hermès Bélusca-Maïto bd0eaa924d [HALX86] HalHandleNMI: Re-enable debugger-entering code. 2023-08-03 13:26:24 +02:00
Adam Słaboń ce2d4740a6 [SDK][HAL] Enable x86Bios on x86 (#5454)
This will be needed for compatibility with x86 Windows Vista/7 videoprt.sys builds.
Might be also useful in future for platforms (x86 , ...) where V86 mode is not available or buggy.

CORE-11954, CORE-18185
2023-07-20 21:44:44 +02:00
Victor Perevertkin 16882dcfa4 [HALX86] Bugcheck in case the ACPI initialization failed (for ACPI HAL) (#5376)
CORE-16302
2023-07-02 02:01:11 +03:00
Hermès Bélusca-Maïto 9ba1849a97 [HAL][MINIHAL] Minor cleanup in reboot.c files (#5359)
And remove pic/processor.c from minihal compilation.
2023-06-25 19:39:44 +02:00
Hermès Bélusca-Maïto d6a78d580b [HALX86] Tabs to 4-space indentation in generic/sysinfo.c + Fix typo "ALMI" -> "AMLI" 2023-06-20 22:40:57 +02:00
Hermès Bélusca-Maïto d03fc32e7d [MINIHAL] Remove unneeded files from compilation. 2023-06-20 18:39:01 +02:00
Hermès Bélusca-Maïto 7e1510eb9c [HALX86] Implement HalpcGetCmosData and HalpcSetCmosData. 2023-06-19 21:09:03 +02:00
Dmitry Borisov 734cd5e842 [PCI][HALX86] Support PCI debugging devices
Also optimize the PCI bus scanning

CORE-17360
2022-06-06 01:47:21 +03:00
Hermès Bélusca-Maïto 94c25baf85 [HAL][HALARM] The HAL should only use KPCR.
And why the ARM HAL uses KPCR::InterruptRoutine, a field only defined
in *powerpc*/ketypes.h, is beyond me, but OK...

See Timo vs. Alex discussion, explaining that KIPCR is a ReactOS-only
thing: https://reactos.org/archives/public/ros-dev/2008-August/010549.html
2022-05-08 17:21:44 +02:00
Hermès Bélusca-Maïto c026b5950e [FREELDR][MINIHAL] Move KefAcquireSpinLockAtDpcLevel stub back to HAL, #ifdef'ed in _MINIHAL_ where it's only needed. 2022-05-08 17:21:43 +02:00
Dmitry Borisov 269f3a2b24 [HALXBOX] Do not claim interrupt resources for the KD COM port
The actual COM port lacks SERIRQ, IRQ 4 is hardwired to the NIC

CORE-15872 CORE-16216
2022-04-16 11:54:24 +03:00
Serge Gautherie 0fd3e51580 [HALX86] HalpDmaAllocateChildAdapter(): Fix memory leak, on error (#4156)
Simplify code, instead of adding 2 missing ObDereferenceObject().
(Note that ObInsertObject() always dereferences the object in case of failure.)

CORE-17904
2021-12-20 21:14:36 +01:00
Hervé Poussineau b39ae9f32b [HALX86] Implement HalBuildScatterGatherList
Make HalGetScatterGatherList a wrapper around it.
2021-11-07 14:07:57 +01:00
Hervé Poussineau eb283043d5 [HALX86] Partly implement HalCalculateScatterGatherListSize 2021-11-07 14:07:55 +01:00
Hervé Poussineau 88839d9726 [HALX86] Stub-implement scatter/gather DMA operations
These are required when we ask for a DMA_ADAPTER version 2.
2021-11-01 18:16:25 +01:00
Jérôme Gardou 56d0bc31ce [HAL] Hack KeTryToAcquireQueuedSpinlock & KeTryToAcquireQueuedSpinLockRaiseToSynch into a somewhat working implementation 2021-06-29 11:49:20 +02:00
Timo Kreuzer 400af0cfc5 [HAL] Add smp component and build x64 smp hal
Like the up component it contains the spinlock code and now also the HalpBuildType variable.
2021-06-19 12:17:18 +02:00
40bb3786b6 [HALX86] Implement HalQueryAMLIIllegalIOPortAddresses case in HaliQuerySystemInformation
CORE-17359

Co-authored-by: Stanislav Motylkov <[email protected]>
Co-authored-by: Oleg Dubinskiy <[email protected]>
2020-11-14 15:18:37 +01:00
Timo Kreuzer c5a700fd06 [HAL:X64] Fix/improve the BIOS interface
* Call HalInitializeBios both in phase 0 and 1
* In phase 0 allocate some physical memory, instead of using arbitrary hardcoded pages, that then end up as page tables and get filled with VESA tables
2020-11-07 18:46:20 +01:00
Victor Perevertkin 5c7ce4475e [REACTOS] Cleanup INIT and some PAGE section allocations
- Change INIT_FUNCTION and INIT_SECTION to CODE_SEG("INIT") and DATA_SEG("INIT") respectively
- Remove INIT_FUNCTION from function prototypes
- Remove alloc_text pragma calls as they are not needed anymore
2020-11-02 21:45:31 +03:00
Timo Kreuzer 2aca4b2795 [ASM] Fix boot with VS 16.7.3 / MSVC 19.27
See https://developercommunity.visualstudio.com/content/problem/1180800/ml-x86-assume-directive-causes-invalid-code-genera.html
2020-09-12 15:01:04 +02:00
Dmitry Borisov b36018ff26 [HALPC98] Add Hardware Abstraction Layer for NEC PC-98 series (#3002) 2020-07-25 15:31:02 +02:00
Dmitry Borisov 17c5fb8866 [HALXBOX] Fix clock drift (#2889)
Add a new rollover table for Original Xbox (base frequency is 1.125000 MHz).
This fixes potential time issues in kernel and drivers.

CORE-16216
2020-06-03 02:14:16 +03:00
Stanislav Motylkov fa1ec0a2ed [BOOTVID][HALXBOX] Implement boot video driver for Xbox (#2774)
Also make HalpBiosDisplayReset() function always return FALSE,
because we don't have a BIOS on Xbox.

CORE-16216 CORE-16219
2020-05-17 19:18:32 +03:00
Stanislav Motylkov cd91271796 [NTOSKRNL][HAL][BOOTVID] Some more code refactoring
- Add boot video color constants
- Refactor palette initialization
- Move some common stuff in right place
- Get rid of some magic constants and hardcoded values
- Get rid of TopDelta variable (calculated at compile time)
- Update SAL annotations

Addendum to 5f2ca473. CORE-16216 CORE-16219
2020-05-12 15:56:37 +03:00
Dmitry BorisovandHermès Bélusca-Maïto 1610367fe2 [BOOTVID][NTOSKRNL][HALX86] Move hardcoded coordinates of bootvid into one place. (#2504)
Co-Authored-By: Hermès Bélusca-Maïto <[email protected]>
2020-04-09 15:17:48 +02:00