We never call KfRaise/LowerIrql in portable code anymore, isntead, we use Ke.
We now have correctly defined IRQL routines for ARM, much more of the kernel builds as a result.
svn path=/trunk/; revision=32179
Added x86-only guards around certain structures and functions which are non-portable. Also guarded certain inline functions.
Added some more ARM structures, and filled out the KPRCB.
Created ARM-specific headers when required.
We can now have a buildable ARM kernel, minus a couple of compile errors.
svn path=/trunk/; revision=32178
FreeLDR ARM now loads properly, however, we need to start building the ARM kernel and ARM boot drivers, otherwise their relocations will have byte offsets which will lead to alignment errors (on ARM relocaitons are DWORD-aligned).
Next steps are to get the kernel building, then the HAL, then bootvid/kdcom.
svn path=/trunk/; revision=32176
Made the ARM code use the shared disk routines, which allowed us to remove some hacks -> we now detect the boot/system volume just like on x86.
FreeLDR now loads NTOSKRNL.EXE on ARM.
Also made the DiskIsBootDeviceFloppy return FALSE for ramdisks.
Finally, note that the disk routines were still kept as Machine-specific routines in the Mach Table, so other architectures can still override them if they really need to (for example, the XBOX port overrides one of them for a specific XBOX hack).
svn path=/trunk/; revision=32173
Unlike the x86 virtual-ramdisk, the ramdisk here is also used as boot device, not only system device.
Current FreeLDR output:
Booting FreeLDR...
FreeLoader v3.0 for ARM
Bootargs: rdbase=0x2000000 rdsize=0x1400000
This file system has cluster sizes bigger than 64k.
FreeLoader does not support this.
Press any key
svn path=/trunk/; revision=32169
This fixes the extraction of any file, which is not the first file in the cabinet.
- I don't see a reason for reading the file name in 32 byte chunks in ReadString() instead of reading it completely in one call.
As the previous algorithm was buggy for files longer than 32 characters, I read the file name string completely now.
Cabman is now able to extract the "reactos.cab" it created itself without any problems :-)
- Simplify CreateSimpleCabinet() a bit
svn path=/trunk/; revision=32165
The ramdisk parameter parsing had several bugs which were fixed, including support for hex parameters and using proper return values from strstr.
We also rewrote command line parsing to be much simpler. It was very broken, modifying the memory contents of the command line -- this wouldn't work on systems where the command line is stored in ROM unless a copy is first made. It also broke ram disk parameters by modifying whitespaces to NULL chars for purposes of reading its own parameters, but did not put the whitespace back, terminating the command line early.
Finally, we now have an integrated ramdisk parameter parsing with the new command line code.
svn path=/trunk/; revision=32164
We added a new member to the ARM board configuration block that specifies the number of memory map entries.
Board boot loaders are responsible for sending the base and size of all DRAM and FLASH banks. FLASH banks should be marked as Reserved so we don't try using them as RAM.
svn path=/trunk/; revision=32162
- Make i8042Flush apply only KBD_OBF flag (applying MOU_OBF leads to an infinite loop trying to flush the buffer).
- Fix a bug in i8042Write, where instead of waiting by polling a PollingIterations times (~10000), it was using ResendIterations (=3), thus giving 8042 very small chance of processing the data.
- Make i8042BasicDetect resend CTRL_SELF_TEST sequence, if controller asks so. Maximum resend iterations are limited by ResendIterations variable.
- Reinsert debug-messages hack, since this is an early-loading driver, and it's not possible to break in to KDBG to change debug filter values.
- As a result, keyboard and mouse work on real hardware again.
See issue #3036 for more details.
svn path=/trunk/; revision=32153
We added a new ClockRate member to the ARM Board Block structure.
We now print out the FreeLDR header after initialization to give some output to the user that we are alive.
Started putting shared stuff in headers.
Fixed copy/paste leftovers from file headers (wrong file names, implementation details, author).
svn path=/trunk/; revision=32151
In ArmInit we define the structure that a compatible bootloader has to send us and currently make some assertions on it, before dropping into the common, portable, freeldr startup (BootMain).
This would be the place where we would want to setup UART0 for serial support later on, as well as TIMER0.
In MachInit, we now define the required ARM routines we'll need, all which simply loop for now.
Also fix a bug in RamDiskInit, which could do reads from NULL pointers.
svn path=/trunk/; revision=32148
- Add a line to the autogenerated Makefile for Boot-CDs, which creates a "vgafonts.cab" file from the binary fonts at build time.
- Change blue.sys to read the fonts from the "vgafonts.cab" file instead of the "vgafont.bin" (ZIP format) file.
I dropped support for PSF fonts in blue.sys, because with the vgafontedit app, we can easily convert PSF fonts to BIN fonts now.
If someone still needs this format in blue.sys, I can reimplement it.
svn path=/trunk/; revision=32145
Bug 3038: Ukrainian translation update (temarez@yandex.ru)
RC Files resorting like in the Bug reports before these will be done later this day.
svn path=/trunk/; revision=32140
- Only compare file names, not the whole pathes, in the Unix code path using MatchFileNamePattern
- Small change to the Usage text
svn path=/trunk/; revision=32139
As a workaround, a special "startup" section is now used to contain the boot.s code, and a linker flag is used to set this section as the entrypoint section at 0x8000.
FreeLDR for ARM now links properly, with _start at 0x8000.
svn path=/trunk/; revision=32136
beep is now MachBeep since the code is not portable.
A variety of portable PE loading routines were in arch/loader.c for no reason. These are now in reactos/imageldr.c. arch/loader.c now only contains the architecture-specific ReactOS initialization code.
AcpiPresent was used on all builds, even though it's a non-portable x86-only flag. Now, ACPI detection itself, if present, will set the appropriate ACPI flag directly in the loader blog, so other architectures don't have to worry about exporting AcpiPresent;
DiskStopFloppyMotor is only relevant to x86, as is preparing for Video. MachVideoPrepareForReactOS has therefore been replaced by MachPrepareForReactOS as a generic pre-boot preparation routine.
Implemented MachPrepareForReactOS across current architectures to preserve functionality.
svn path=/trunk/; revision=32135
Fix NtCurrentTeb definition for ARM. We will expose the KPCR to user-mode much like KUSER_SHARED_DATA on x86 (this is how ARM-CE and NT-MIPS do it) and link the TEB there.
svn path=/trunk/; revision=32134
We merely provide a _start entrypoint stub and two stub architecture files with no functions implemented.
We also supply the proper ARM configuration settings in the .rbuild files, and add the necessary headers.
FreeLDR can now be compiled (along with rossym, libcntptr, rtl and cmlib) but it will not link until the actual ARM code is implemented.
svn path=/trunk/; revision=32132
Reactos-arm.rbuild uses the same settings as the x86 version, but defines _ARM_ and __arm__ instead. _M_ARM is already defined by the compiler.
Add ARM system call stub support to ncitool. We are currently using a SWI 0x2E to achieve this.
Add ARM support to winnt.h.
Add a preliminary intrin_arm.h
Add ketypes.h and mmtypes.h for ARM in the NDK. For now these are mostly stubs to allow compiling to work.
Add ARM support to winddk.h.
Fix some broken x86-only assumptions in the NDK.
Add config-arm-template.rbuild. By defauilt we build for armv5te (armv4 and v5 are supported, not v6).
Set ROS_ARCH=arm to switch to ARM. Set ROS_PREFIX to an appropriate MinGW-32 ARM PE crosscompiler.
svn path=/trunk/; revision=32131
We can now remove the portio.h and portio.c files in FreeLDR, since there's no more need to duplicate this code.
Additionally, this can be also done with the PPC port of FreeLDR or any other architecture, since it doesn't require per-architecture support in FreeLDR anymore -- only the underlying intrinsics in intrin.h must be implemented (note that for PPC, MIPS and ARM, the notion of a port doesn't even exist -- those functions map to register-reading functions, where register basically means memory).
svn path=/trunk/; revision=32130