Commit Graph

406 Commits

Author SHA1 Message Date
Stefan Ginsberg
dbd86db31e - Deprecate global helper.h -- define the various 'helpful macros' per module
svn path=/trunk/; revision=39092
2009-01-25 16:13:16 +00:00
Stefan Ginsberg
f368fdbf9a - Partially revert 29656. NTOS calls HalQuerySystemInformation with HalFrameBufferCachingInformation, and disables PAT and MTRR if it returns success + TRUE. There is no reason this would be needed in ReactOS at the moment, so revert to old behaviour.
svn path=/trunk/; revision=39001
2009-01-21 17:10:16 +00:00
Stefan Ginsberg
dc7184e73f Fix the completely retarded implementation of KdComPortInUse.
The original definition of this variable seems to have been based on the retarded type in the serial.sys source sample, which defines it as:

extern PUCHAR *KdComPortInUse;

This, somehow, works in MSVC, but gcc complains about the lack of import specifier (KdComPortInUse is exported by HAL).
This was 'fixed' by adding the import specifier to ros.
So instead of: PUCHAR *KdComPortInUse;
We ended up with: NTHALAPI PUCHAR *KdComPortInUse;
Which becomes 3 dereferences instead of 2, which is incorrect. This was 'fixed' by hacking the variable in HAL too.
Use "extern PUCHAR NTHALAPI KdComPortInUse" to be compatible with both compilers, remove the HAL hacks, and fix the usage of the variable.

Fixes the serial.sys crash when booted with _WINKD_ + kdcom from Windows 2003, as kdcom would (due to the HAL hack) set the internal 'pointer' to the port value, and serial would end up dereferencing the port address

svn path=/trunk/; revision=38960
2009-01-19 23:22:22 +00:00
Stefan Ginsberg
f233dab1ee - Remove unnecessary allowwarnings="true"
svn path=/trunk/; revision=38948
2009-01-19 18:08:28 +00:00
Christoph von Wittich
82cffd5af5 fix some more typos
svn path=/trunk/; revision=38345
2008-12-25 12:27:47 +00:00
Timo Kreuzer
1f9c4940d2 Introduce new config flag BUILD_MP. Compile MP kernel and hal only when this is set to 1 to save us some time and space.
svn path=/trunk/; revision=38270
2008-12-22 15:23:08 +00:00
Dmitry Gorbachev
c63a203efa Put inline functions into header files.
svn path=/trunk/; revision=37921
2008-12-07 23:40:23 +00:00
Dmitry Gorbachev
620e4cad34 Silence compiler warnings (5/11).
svn path=/trunk/; revision=37827
2008-12-03 17:31:38 +00:00
Stefan Ginsberg
37ba4af619 - Deprecate STDCALL from HAL
svn path=/trunk/; revision=37755
2008-11-29 23:16:39 +00:00
Aleksey Bragin
abb8c42552 Juan Sánchez Jurado <juan.s.jurado@gmail.com>
- Fixed HAL DMA problem that caused floppy driver not to work (the point was that function had to copy the read sector back to the MDL buffer and it was not doing that because of the problem with braces, broken in rev is 24464).
See issue #2287 for more details.

svn path=/trunk/; revision=37254
2008-11-09 08:23:16 +00:00
KJK::Hyperion
5f616878c9 Remove all <file> entries for spec/pspec files that don't define any stubs (for real this time)
svn path=/trunk/; revision=37144
2008-11-01 23:11:38 +00:00
Colin Finck
291486f5d6 Don't decide whether to preprocess .spec files based on Kernel-Mode vs. User-Mode, but on the file extension.
.pspec files are preprocessed now, while .spec files aren't. A change like this was already done in the amd64 branch before KJK rewrote the .spec stuff in rbuild.

- Renamed currently preprocessed .spec files to .pspec and changed that in the .rbuild files appropriately
- Renamed "IsWineModule" to "IsSpecDefinitionFile",  the new name is more appropriate
- Removed some checks for uppercased file extensions, we neither use them in our tree nor it will totally work as we only support them in a few places

Commit dedicated to Timo ;-)

svn path=/trunk/; revision=37070
2008-10-29 16:42:03 +00:00
KJK::Hyperion
9ac0fa4e4d modified tools/rbuild/backend/mingw/modulehandler.cpp
modified   tools/rbuild/backend/mingw/modulehandler.h
modified   tools/rbuild/module.cpp
   Split rules for .spec files as input files vs import libraries. .spec files can now be specified independently as <file>s (to generate and compile a .stubs.c file) and <importlibrary> (to generate and compile a .spec.def file)
   .spec files are now specified in <importlibrary>s directly (instead of pointing to the non-existing, generated .spec.def file. Whose idea was that? sounds like the doing of Arch Blackmann)
   Allow multiple modules to share a single .spec file without using <importlibrary base="...">
   Allow static libraries to use .spec files in <importlibrary>
   Emit comments in makefile.auto so rules can be traced back to the code that generated them

deleted    lib/debugsup/debugsup-ntos.def
added      lib/debugsup/debugsup-ntos.spec
modified   lib/debugsup/debugsup.rbuild
   .def -> .spec

<<hundreds of rbuild files>>
   Remove <file> entry for spec file if there are no stubs to compile
   .spec.def -> .spec in <importlibrary> entries

Soon: making all keyboard layouts use a single .spec file
Dedicated to: Samuel Serapión, Stefan Ginsberg, and all the fellow team members who'll have an aneurysm at this commit

See issue #3746 for more details.

svn path=/trunk/; revision=36870
2008-10-21 13:51:49 +00:00
Stefan Ginsberg
fce1822384 - HalRequestIpi takes a KAFFINITY as input, not a ULONG -- fix this and add a note about MP HAL's brokenness
svn path=/trunk/; revision=36680
2008-10-07 20:56:48 +00:00
Stefan Ginsberg
c2ca8fb596 - HalpXboxReadSector: Fail if we are out of memory instead of dereferencing null
- Fix for Coverity error CID: 464

svn path=/trunk/; revision=36490
2008-09-24 17:16:25 +00:00
Stefan Ginsberg
ba22ca771d - IoFlushAdapterBuffers: "AdapterObject" is not an optional parameter, it is vital to identify the DMA adapter. Remove the check which confused Coverity and ASSERTify this instead.
- Fix for Coverity error CID: 155

svn path=/trunk/; revision=36489
2008-09-24 17:11:35 +00:00
Stefan Ginsberg
5ae7cefa81 - Get rid of ASSERT_IRQL, deprecated since long ago
- Remove various dead stuff from headers, and move ASSERT_IRQL_LESS_OR_EQUAL, ASSERT_IRQL_EQUAL and ASSERT_IRQL_LESS to global debug.h

svn path=/trunk/; revision=35803
2008-08-30 15:14:12 +00:00
Stefan Ginsberg
7876a9fe0d - Remove deprecated CHECKPOINT/CHECKPOINT1 macros which basically translated into DPRINT/DPRINT1("\n")
svn path=/trunk/; revision=35638
2008-08-25 18:52:38 +00:00
Stefan Ginsberg
13362ee99b - Remove KEBUGCHECK and KEBUGCHECKEX macros
- Replace "KeBugCheck(0)" by ASSERT(FALSE)
- Replace deprecated "CPRINT" by DRINT1

svn path=/trunk/; revision=35600
2008-08-24 15:48:05 +00:00
Hervé Poussineau
36502dfce7 Use generic .spec file instead of arch specific .def file
svn path=/trunk/; revision=35072
2008-08-03 16:16:09 +00:00
ReactOS Portable Systems Group
a9f6591d2c - Don't use .spec file on ARM, it doesn't work.
- For the first time, the entire ARM build of ReactOS builds (for the components we've defined)!
- Now the user-mode fun begins.


svn path=/trunk/; revision=34890
2008-07-28 03:07:50 +00:00
ReactOS Portable Systems Group
a249132448 - Define the "generic" versions of the ARM-specific HAL routines.
- Now the generic HAL builds without linker errors.


svn path=/trunk/; revision=34886
2008-07-28 02:15:40 +00:00
Hervé Poussineau
72fbdac08a Use hal.spec file for i386 build
svn path=/trunk/; revision=34841
2008-07-27 09:56:21 +00:00
Hervé Poussineau
0bd0421c3b Add a .spec file for HAL exports. Don't use it yet
svn path=/trunk/; revision=34836
2008-07-27 09:07:59 +00:00
ReactOS Portable Systems Group
b513c98fb2 - Rewrite the low-level trap/exception/system call code from the ground up:
- Do not corrupt the stack anymore
  - Use a consistent trap frame layout (enable OldIrql and PreviousMode, and set the 0xBADB0D00 debug mark)
  - Use slower but more correct trap prolog/epilog code for now.
  - Generalize all prolog/epilog code into macros just like on x86. As a result, traps are now 6 lines of code.
- Rewrite the system call interface from the ground up:
  - System calls didn't actually work: a debug print made the stack layout magical enough so that they didn't normally crush, but only slowly ate the stack.
  - Copying arguments from caller to system call was, as the comment on the original code so aptly put it, "total shit".
  - Due to ABI concerns, and to provide an actual template on how you're -supposed- to implement something like system calls on RISC processors, we now use
    a model similar to BSD, but about ten times better (with that much less code too). We'll document it later on the RosPSG Wiki.
  - This code probably contains some of the most vile-yet-elegant macro magic ever written for such low-level code as system call dispatching. 
- The result of all this is that we're at the same place as before (RamdiskAddDevice needs to be implemented by the Ramdisk guys) but with a sane low-level
  backend that isn't slowly eating away the stack, corrupting data, and basically working through random chance.
- Move timebase code from stubs.c to its own file, time.c.
- Silence multiple debug prints and fix a corrupted debug print in KiSystemStartup.


svn path=/trunk/; revision=34366
2008-07-08 09:11:44 +00:00
ReactOS Portable Systems Group
926d44768b - Add driver database code to FreeLDR (using ReactOS-style LoadOrderListHead instead of BootDriversListHead, oh well!).
- This means we actually load and parse drivers now!!! Some Mm work was required to support unloading and remapping: MmDeleteVirtualMapping is now implemented.
- We can now see scsiport.sys and atapi.sys strings displayed on the LCD.
- Implemented HalQuery/SetDisplayParameters, HalQuery/ReleaseDisplayOwnership and HalDisplayString just like on x86.
- Since we now load symbols for the drivers (or at least try to), stubbed DebugService2, which also shows us what's being loaded.
- Extended the Loader MemoryType array to include XIP/RAM Disk Memory.  


svn path=/trunk/; revision=34210
2008-06-30 08:40:54 +00:00
ReactOS Portable Systems Group
c50bcc2c12 - Implement beginnings of Ramdisk Port Driver. Planning compatibility with ISO, SDI and WIM files and full Windows support.
- New license for our code.


svn path=/trunk/; revision=34170
2008-06-29 02:58:05 +00:00
ReactOS Portable Systems Group
241449fc0e - Save and restore the trap frame for the current thread when we take an interrupt, so that ISRs can read it.
- We use this in the clock ISR, that can now actually send the trap frame to KeUpdateSystemTime.
- Implement KeUpdateRunTime to handle time accounting and DPC rescheduling as well as Quantum End.
- Ignore quantum end for now.
- We now have a working timebase, and we're back to our earlier checkpoint around CmInitSystem1!.


svn path=/trunk/; revision=34088
2008-06-26 05:56:35 +00:00
ReactOS Portable Systems Group
d7928010a4 - We now implement the KeUpdateSystemTime routine and the HalpClockInterrupt.
- We do not yet handle all cases, most notably, timer expiration.
- There may still be some bugs to work out in the code, but it's a start.
- This regresses progress, but does not ignore time anymore.

svn path=/trunk/; revision=34084
2008-06-25 16:10:14 +00:00
ReactOS Portable Systems Group
8df8940a6e - The CRT sync by "fireball" is incorrect and results in a broken ntos kernel. Although it may work on i386 builds, it results in a corrupted kernel anyways. On ARM, we try to hackfix around it by not including some routines that should not be in the kernel but were being imported due to the broken crt changes.
- We do not attemp to build world anymore. We have handwritten a new ARM rbuild file that only builds what we need for our current ARM work.
- HAL and FreeLDR do not seem to have an "installpath"... why not? Added one at least for our ARM stuff, so that "make install" can drop the binaries.
- Fixed some ARM DDK macro inconsistencies, allow more drivers to build.
- It is now possible to use "make install -k" to drop a completely working ARM build onto an image due to all these changes.

svn path=/trunk/; revision=34055
2008-06-23 03:57:50 +00:00
ReactOS Portable Systems Group
69bc0881f9 - Continue cleanup, use new peripheral headers (And fix them)
- Fix ARM HAL headers and use them


svn path=/trunk/; revision=33981
2008-06-15 07:54:18 +00:00
ReactOS Portable Systems Group
def9fa66b4 - Create cmhardwr.c for ARM, stub it out.
- Implement KiInitMachineDependent -- this is only useful for x86 and has nothing relevant to ARM, so we just return.
- Implement HalAllProcessorsStarted (again, a no-op) and HalQueryRealTimeClock (uses the RTC on the board -- uboot must set it up first).
- Make sure we get the right Sp during a system call (this is still broken though).
- We need to fix our system call handler next.


svn path=/trunk/; revision=33977
2008-06-15 05:40:27 +00:00
ReactOS Portable Systems Group
bfd0d8594d - Fix a bug in MmGetPhysicalAddress.
- Don't hang in the clock interrupt anymore, for now we'll just ignore it (but it works! :D)
- Make all unimplemented bootvid functions hang the system, so we can better stop at progress-points.
- Implement VidInitialize:
  - We allocate a 640x480@16bpp framebuffer using contiguous physical memory (our MMU code survives!).
  - We setup the LCD controller timings and framebuffer address.
  - We enable the LCD
- For debugging, we're also drawing a nice little test pattern... and it works! We have GUI Code :)


svn path=/trunk/; revision=33974
2008-06-15 03:32:52 +00:00
ReactOS Portable Systems Group
0ea44bde8f - Separate bootvid into bootvid/i386 and bootvid/arm (no code change to i386 version).
- Stub out all the bootvid functions for ARM, and add an infinite loop so we stop there.
- Remove the infinite loop from the HAL -- Hal Initialization is complete.
- We must now implement the LCD graphics functions.


svn path=/trunk/; revision=33973
2008-06-14 23:43:45 +00:00
ReactOS Portable Systems Group
35656fd354 - Dude, we don't need to calibrate anything... we've got a 1MHz timer, which means 1us-precision. KeStallExecutionProcessor needs 1us-precision!
- Since we have two timers (ha x86!!!), set the second one as the stall timer. It's a one-shot periodic timer, set to the exact number of microseconds being waited on.
- To fully emulate stalling, we don't use a clock interrupt for it (it supports not sending one!) and just busy-loop until the value reaches 0.
- Tried it with a 10 second (10000000 us) wait and it worked -perfectly-.
- Re-implemented KeStallExecutionProcessor and got rid of the other code. Back in HalInitSystem(phase1) now...
- Also killed some DPRINT1s getting on my nerves.


svn path=/trunk/; revision=33971
2008-06-14 23:19:03 +00:00
ReactOS Portable Systems Group
949bda1cee - Implement the basic stall interrupt to be used to calculate the factors for KeStallExecution (using NT MIPS algorithm, hope this will work)
- Also written KeStallExecution.
- Now, we are back to where we hang before Phase 1 (so Phase 1 doesn't occur anymore).
- This hang is because we used to do a DPC here, which isn't good, since IRQL is already at dispatch.
- Instead, the correct course of action is to enter the idle loop, which will schedule the phase 1 thread.
- But, we don't have an idle loop yet ;-)


svn path=/trunk/; revision=33969
2008-06-14 22:28:40 +00:00
ReactOS Portable Systems Group
e66a86c8b9 - Fix stupid IRQL/Interrupt handling code that someone wrote ;):
- Get rid of KeSwapIrql -- both lower and higher IRQL handling was treated the same!
  - We can now re-activate the assert in the IRQL code
  - Disable interrupts before changing the interrupt mask!!!
  - And re-enable them solely if they were enabled.
  - Clear interrupts mask before setting a new one -- raising isn't always additive!
  - Fix KiInterruptHandler to perform operations in the right order.
  - Finish implementing interrupt exit code.
- Code KeArmStatusRegisterGet to read CPSR and interrupt status.
- Make debug prints a lot more readable and dont trying to acquire the stack during pool allocations.
- Setup the clock interval timer!!!
- This code regresses progress but makes stuf fwork right. We'll get better after implementing the stall interrupt.


svn path=/trunk/; revision=33967
2008-06-14 22:02:50 +00:00
ReactOS Portable Systems Group
e6d9765059 - Fix build on ARM:
- _iob is already defined as a dll_import
  - _rotl intrinsic is now implemented (should use rol instruction, but not sure on the syntax!)
  - Add a stub psctx.h for ARM
  - Added InterlockedEXchangePointers
  - Fix uninitialized variable warning in ex/resource.c
- Start to implement interrupt handling:
  - We now have a rudimentary interrupt handler that takes care of software interrupts
  - We now have a rudimentary DPC handler which takes care of switching to the next thread, if any
  - We now setup the HAL Interrupt Source -> IRQL Table (The IRQLMask Table).
  - Implemented HalGetInterruptSource, which allows us to get the interrupt # that cause the IRQ.
    Note: this wasn't needed on Alpha/PPC/MIPS NT ports, because that information is stored on the CPU,
    and the kernel could read it -- we must abstract it through the HAL.
  - Add the OldIrql to the TRAP_FRAME, we don't use it yet.
- We are now ready to context switch to the Phase 1 thread.

svn path=/trunk/; revision=33933
2008-06-11 16:48:07 +00:00
Marc Piulachs
ed39c925a0 set 'installname' attribute for halup to 'hal.dll'
svn path=/trunk/; revision=33806
2008-06-01 13:24:25 +00:00
Marc Piulachs
22ab89339c - Move every x86 HAL to it's own .rbuild file
- Take advantage of r33676

svn path=/trunk/; revision=33677
2008-05-24 20:32:44 +00:00
Marc Piulachs
9ea0a62432 - remove 'basename' , no such attribute exists for <importlibrary>
svn path=/trunk/; revision=33672
2008-05-24 15:33:49 +00:00
Marc Piulachs
b0dcd1e796 -replace the non defined ${MP} property by a constant boolean value for now. ${MP} was removed long time ago
svn path=/trunk/; revision=33285
2008-05-04 23:32:43 +00:00
ReactOS Portable Systems Group
362ca1e480 - Implement IRQL functions for the PL190 VIC.
- Start coding HalInitSystem.
- Implement HalRequestSoftwareInterrupt for the PL190 VIC. The interrupt fires! (This interrupt is responsible for forcing DPC delivery, which should also force thread scheduling, which should force the switch to the phase 1 thread)

svn path=/trunk/; revision=32674
2008-03-13 16:29:45 +00:00
ReactOS Portable Systems Group
0d376b34fa - Make another kind of page fault also be handleable by our hacked-up handler: paged pool now fully works.
- Current status: we now make it all the way to the first system call at the end of Phase 0!
- We now make the IRQL routines modify the IRQL saved in the KPCR, to make some assertions work.
- Build mem.c and memgen.c from RTL in order to get non-optimized but portable Rtl*Memory routines and Rtl*Swap routines.
- Take the PPC non-optimized but portable Ex*Interlocked* routines and make them available for ARM as well. Play with the code a bit to get other routines in there too.
- Major TODO: Cleanup these routines, re-format them, make them compatible for all architectures, and later on, provided optimized ARM versions.
- Remove _all* _aull* MSVC-i386 helper exports from the kernel, as well as Exfi386* routines -- they're only for x86 kernels.

svn path=/trunk/; revision=32664
2008-03-12 00:13:09 +00:00
ReactOS Portable Systems Group
3d10a2eabc - Forgot to commit previous HAL changes.
- There is no reason to implement the Interlocked* APIs in assembly in the kernel -- just have them call the intrinsics.
- Also fix the way we were overloading the exported APIs, we now use the intrinsics all the time.
- Convert loader block address to virtual, and parse the addresses inside it and convert them to virtual too, after we don't use them in FreeLDR anymore -- the kernel will delete the p->v identity mapping, and eventually still need to touch the loader block.
- Implement MmGetPhysicalAddress and MiGetUserPageDirectoryCount for ARM.
- We now reach the point where we start initializing the boot drivers' memory information.

svn path=/trunk/; revision=32654
2008-03-11 04:42:54 +00:00
Aleksey Bragin
3e82239919 - intrin.h should not be included. Fixes MSVC compiling.
svn path=/trunk/; revision=32571
2008-03-05 16:13:16 +00:00
ReactOS Portable Systems Group
34e64ee87b We now define KUSER_SHARED_DATA per architecture, since the address isn't portable. Now SharedUserData works on ARM.
Implemented KeAcquireInSTackQueuedSpinLock, KeAcquireInStackQueuedSpinLockRaiseToSYnc and KeReleaseInStackQueuedSpinLock based on x86 UP versions.
On ARM, the PCR is fully exposed, so some APIs are always-inlined direct-memory-access (unlike x86 which has the fs selector, and undocumented parts of the PCR). This means we can define several macros -- fixed the headers to allow this, by defining the previous stuff for x86 only.
Setup registry data in the ARM loader block.
The ARM port boots all the way through ExpInitializeExecutive until reaching MmInit1. The boot-registry is correctly loaded and parsed, as are NLS files!

svn path=/trunk/; revision=32379
2008-02-15 19:01:45 +00:00
ReactOS Portable Systems Group
a177849941 HalInitializeProcessor has no work to do on ARM
svn path=/trunk/; revision=32340
2008-02-13 05:11:35 +00:00
ReactOS Portable Systems Group
93970a965e Added cache sweeping code into the HAL, for ARM926EJ-S and ARM1026EJ-S CPUs.
Finished implementation of KiSystemStartup.
Copied KiInitializeKernel from x86 to ARM, removing irrelevant parts. This is our current checkpoint.

svn path=/trunk/; revision=32333
2008-02-12 20:32:23 +00:00
ReactOS Portable Systems Group
0237c83496 QEMU doesn't support TLB Lockdown, so we now use a hack for QEMU and broken CPUs [albeit a portable one ;-)]. PCR access in usermode/kernelmode works.
We now have HalSweepI/Dcache APIs exported and stubbed in the ARM HAL (great, since UNIMPLEMENTED macro now works).
We now setup more of the PCR, including all the cache values required, then we call the HAL sweep functions (TBD).

svn path=/trunk/; revision=32330
2008-02-12 19:01:48 +00:00