[ros-diffs] [tkreuzer] 49408: [HAL] Make systimer.S ML compatible. Replace most hardcoded numerical values with proper symbolic constants.

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Mon Nov 1 16:42:54 UTC 2010


Author: tkreuzer
Date: Mon Nov  1 16:42:53 2010
New Revision: 49408

URL: http://svn.reactos.org/svn/reactos?rev=49408&view=rev
Log:
[HAL]
Make systimer.S ML compatible. Replace most hardcoded numerical values with proper symbolic constants.

Modified:
    branches/cmake-bringup/hal/halx86/generic/i386/systimer.S

Modified: branches/cmake-bringup/hal/halx86/generic/i386/systimer.S
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/hal/halx86/generic/i386/systimer.S?rev=49408&r1=49407&r2=49408&view=diff
==============================================================================
--- branches/cmake-bringup/hal/halx86/generic/i386/systimer.S [iso-8859-1] (original)
+++ branches/cmake-bringup/hal/halx86/generic/i386/systimer.S [iso-8859-1] Mon Nov  1 16:42:53 2010
@@ -7,12 +7,41 @@
 
 /* INCLUDES ******************************************************************/
 
-#include <asm.h>
-.intel_syntax noprefix
+#include <reactos/asm.h>
+#include <ndk/asm.h>
+
+EXTERN _HalpAcquireSystemHardwareSpinLock at 0:PROC
+EXTERN _HalpReleaseCmosSpinLock at 0:PROC
+EXTERN _DbgBreakPoint at 0:PROC
+EXTERN _HalpCurrentRollOver:DWORD
+EXTERN _HalpPerfCounterCutoff:DWORD
+
+#define PIC1_BASE         HEX(20) /* IO base address for master PIC */
+#define PIC2_BASE         HEX(A0) /* IO base address for slave PIC */
+#define PIC1_COMMAND      PIC1_BASE
+#define PIC1_DATA         (PIC1_BASE+1)
+#define PIC2_COMMAND      PIC2_BASE
+#define PIC2_DATA         (PIC2_BASE+1)
+#define PIC_EOI           HEX(20)
+#define PIC_SPECIFIC_EOI2 HEX(62)
+
+#define CMOS_ADDR HEX(70)
+#define CMOS_DATA HEX(71)
+#define CMOS_REGISTER_A HEX(0A)
+#define CMOS_REGISTER_B HEX(0B)
+#define CMOS_REGISTER_C HEX(0C)
+#define CMOS_REGISTER_D HEX(0D)
+
+#define PIT_CH0    HEX(40)
+#define PIT_MODE   HEX(43)
+#define SYSTEM_CTRL_PORT_A HEX(92)
 
 /* GLOBALS *******************************************************************/
 
-.globl _HalpPerfCounter
+.data
+ASSUME CS:NOTHING, DS:NOTHING, ES:NOTHING, FS:NOTHING, GS:NOTHING
+
+PUBLIC _HalpPerfCounter
 _HalpLastPerfCounterLow:    .long 0
 _HalpLastPerfCounterHigh:   .long 0
 _HalpPerfCounter:
@@ -22,8 +51,8 @@
 
 /* FUNCTIONS *****************************************************************/
 
-.global _HalpCalibrateStallExecution at 0
-.func HalpCalibrateStallExecution at 0
+.code
+PUBLIC _HalpCalibrateStallExecution at 0
 _HalpCalibrateStallExecution at 0:
 
     /* Setup the stack frame */
@@ -37,27 +66,27 @@
     
     /* Get the current interrupt mask on the PICs */
     xor eax, eax
-    in al, 0xA1
+    in al, PIC2_DATA
     shl eax, 8
-    in al, 0x21
+    in al, PIC1_DATA
     
     /* Save it */
     push eax
     
     /* Now mask everything except the RTC and PIC 2 chain-interrupt */
-    mov eax, ~((1 << 2) | (1 << 8))
+    mov eax, NOT (HEX(04) OR HEX(100))
     
     /* Program the PICs */
-    out 0x21, al
+    out PIC1_DATA, al
     shr eax, 8
-    out 0xA1, al
+    out PIC2_DATA, al
     
     /* Now get the IDT */
     sidt [ebp-8]
     mov ecx, [ebp-6]
     
     /* Get the IDT entry for the RTC */
-    mov eax, 0x38
+    mov eax, HEX(38)
     shl eax, 3
     add ecx, eax
     
@@ -70,7 +99,7 @@
     mov eax, offset OnlyOnePersonCanWriteHalCode
     mov [ecx], ax
     mov word ptr [ecx+2], KGDT_R0_CODE
-    mov word ptr [ecx+4], 0x8E00
+    mov word ptr [ecx+4], HEX(08E00)
     shr eax, 16
     mov [ecx+6], ax
 
@@ -81,18 +110,18 @@
     call _HalpAcquireSystemHardwareSpinLock at 0
     
     /* Now initialize register A on the CMOS */
-    mov ax, (0x2D << 8) | 0xA
-    out 0x70, al
+    mov ax, HEX(2D00) OR CMOS_REGISTER_A
+    out CMOS_ADDR, al
     jmp $+2
     mov al, ah
-    out 0x71, al
+    out CMOS_DATA, al
     jmp $+2
     
     /* Read register B */
-    mov ax, 0xB
-    out 0x70, al
-    jmp $+2
-    in al, 0x71
+    mov ax, CMOS_REGISTER_B
+    out CMOS_ADDR, al
+    jmp $+2
+    in al, CMOS_DATA
     jmp $+2
     
     /* Don't touch the LastKnownGoodConfig hack */
@@ -100,28 +129,28 @@
     mov ah, al
     
     /* Enable the interrupt */
-    or ah, 0x42
+    or ah, HEX(42)
     
     /* Now write the register B */
-    mov al, 0xB
-    out 0x70, al
+    mov al, CMOS_REGISTER_B
+    out CMOS_ADDR, al
     jmp $+2
     mov al, ah
-    out 0x71, al
+    out CMOS_DATA, al
     jmp $+2
     
     /* Read register C */
-    mov al, 0xC
-    out 0x70, al
-    jmp $+2
-    in al, 0x71
+    mov al, CMOS_REGISTER_C
+    out CMOS_ADDR, al
+    jmp $+2
+    in al, CMOS_DATA
     jmp $+2
     
     /* Read register D */
-    mov al, 0xD
-    out 0x70, al
-    jmp $+2
-    in al, 0x71
+    mov al, CMOS_REGISTER_D
+    out CMOS_ADDR, al
+    jmp $+2
+    in al, CMOS_DATA
     jmp $+2
     
     /* Release CMOS lock */
@@ -169,18 +198,18 @@
     call _HalpAcquireSystemHardwareSpinLock at 0
     
     /* Now initialize register A on the CMOS */
-    mov ax, (0x2D << 8) | 0xA
-    out 0x70, al
+    mov ax, HEX(2D00) OR CMOS_REGISTER_A
+    out CMOS_ADDR, al
     jmp $+2
     mov al, ah
-    out 0x71, al
+    out CMOS_DATA, al
     jmp $+2
     
     /* Read register B */
-    mov ax, 0xB
-    out 0x70, al
-    jmp $+2
-    in al, 0x71
+    mov ax, CMOS_REGISTER_B
+    out CMOS_ADDR, al
+    jmp $+2
+    in al, CMOS_DATA
     jmp $+2
     
     /* Don't touch the LastKnownGoodConfig hack */
@@ -188,38 +217,38 @@
     mov ah, al
     
     /* Enable the interrupt */
-    or ah, 0x42
+    or ah, HEX(42)
     
     /* Now write the register B */
-    mov al, 0xB
-    out 0x70, al
+    mov al, CMOS_REGISTER_B
+    out CMOS_ADDR, al
     jmp $+2
     mov al, ah
-    out 0x71, al
+    out CMOS_DATA, al
     jmp $+2
     
     /* Read register C */
-    mov al, 0xC
-    out 0x70, al
-    jmp $+2
-    in al, 0x71
+    mov al, CMOS_REGISTER_C
+    out CMOS_ADDR, al
+    jmp $+2
+    in al, CMOS_DATA
     jmp $+2
     
     /* Read register D */
-    mov al, 0xD
-    out 0x70, al
-    jmp $+2
-    in al, 0x71
+    mov al, CMOS_REGISTER_D
+    out CMOS_ADDR, al
+    jmp $+2
+    in al, CMOS_DATA
     jmp $+2
     
     /* Release CMOS lock */
     call _HalpReleaseCmosSpinLock at 0
     
     /* Dismiss the interrupt */
-    mov al, 0x20
-    out 0xA0, al
-    mov al, 0x62
-    out 0x20, al
+    mov al, PIC_EOI
+    out PIC2_COMMAND, al
+    mov al, PIC_SPECIFIC_EOI2
+    out PIC1_COMMAND, al
     
     /* Reset the counter and return back to the looper */
     xor eax, eax
@@ -248,24 +277,24 @@
     /* Prepare for interrupt return */
     pop eax
     push offset AndItsNotYou
-    mov eax, 0x13
+    mov eax, HEX(13)
     
     /* Acquire CMOS lock */
     call _HalpAcquireSystemHardwareSpinLock at 0
     
     /* Now initialize register A on the CMOS */
-    mov ax, (0x2D << 8) | 0xA
-    out 0x70, al
+    mov ax, HEX(2D00) OR CMOS_REGISTER_A
+    out CMOS_ADDR, al
     jmp $+2
     mov al, ah
-    out 0x71, al
+    out CMOS_DATA, al
     jmp $+2
     
     /* Read register B */
-    mov ax, 0xB
-    out 0x70, al
-    jmp $+2
-    in al, 0x71
+    mov ax, CMOS_REGISTER_B
+    out CMOS_ADDR, al
+    jmp $+2
+    in al, CMOS_DATA
     jmp $+2
     
     /* Don't touch the LastKnownGoodConfig hack */
@@ -273,34 +302,34 @@
     mov ah, al
     
     /* Disable the interrupt */
-    or ah, 0x2
+    or ah, 2
     
     /* Now write the register B */
-    mov al, 0xB
-    out 0x70, al
+    mov al, CMOS_REGISTER_B
+    out CMOS_ADDR, al
     jmp $+2
     mov al, ah
-    out 0x71, al
+    out CMOS_DATA, al
     jmp $+2
     
     /* Read register C */
-    mov al, 0xC
-    out 0x70, al
-    jmp $+2
-    in al, 0x71
+    mov al, CMOS_REGISTER_C
+    out CMOS_ADDR, al
+    jmp $+2
+    in al, CMOS_DATA
     jmp $+2
     
     /* Release CMOS lock */
     call _HalpReleaseCmosSpinLock at 0
     
     /* Dismiss the interrupt */
-    mov al, 0x20
-    out 0xA0, al
-    mov al, 0x62
-    out 0x20, al
+    mov al, PIC_EOI
+    out PIC2_COMMAND, al
+    mov al, PIC_SPECIFIC_EOI2
+    out PIC1_COMMAND, al
     
     /* Disable interrupts on return */
-    and word ptr [esp+8], ~EFLAGS_INTERRUPT_MASK
+    and word ptr [esp+8], NOT EFLAGS_INTERRUPT_MASK
     iretd
     
     /************************* WE ARE BACK FROM RTC ***************************/
@@ -313,9 +342,9 @@
     
     /* Restore the mask */
     pop eax
-    out 0x21, al
+    out PIC1_DATA, al
     shr eax, 8
-    out 0xA1, al
+    out PIC2_DATA, al
     
     /* Restore EFLAGS */
     popf
@@ -324,11 +353,10 @@
     mov esp, ebp
     pop ebp
     ret
-.endfunc
+
 
 #ifndef _MINIHAL_
-.globl _KeStallExecutionProcessor at 4
-.func KeStallExecutionProcessor at 4
+PUBLIC _KeStallExecutionProcessor at 4
 _KeStallExecutionProcessor at 4:
 
     /* Get the number of microseconds required */
@@ -356,11 +384,9 @@
 Done:
     /* Return */
     ret 4
-.endfunc
 #endif
 
-.global _KeQueryPerformanceCounter at 4
-.func KeQueryPerformanceCounter at 4
+PUBLIC _KeQueryPerformanceCounter at 4
 _KeQueryPerformanceCounter at 4:
 
     /* Check if we were called too early */
@@ -380,20 +406,20 @@
 LoopPostInt:
 
     /* Get the current value */
-    mov ebx, _HalpPerfCounterLow
-    mov esi, _HalpPerfCounterHigh
+    mov ebx, dword ptr _HalpPerfCounterLow
+    mov esi, dword ptr _HalpPerfCounterHigh
 
     /* Read 8254 timer */
-    mov al, 0
-    out 0x43, al
-    in al, 0x92
-    or al, _HalpPerfCounterCutoff
-    out 0x92, al
-    jmp $+2
-    in al, 0x40
+    mov al, 0 /* Interrupt on terminal count */
+    out PIT_MODE, al
+    in al, SYSTEM_CTRL_PORT_A
+    or al, byte ptr _HalpPerfCounterCutoff
+    out SYSTEM_CTRL_PORT_A, al
+    jmp $+2
+    in al, PIT_CH0
     jmp $+2
     movzx ecx, al
-    in al, 0x40
+    in al, PIT_CH0
     mov ch, al
 
     /* Enable interrupts and do a short wait */
@@ -406,8 +432,8 @@
     cli
 
     /* Get the counter value again */
-    mov eax, _HalpPerfCounterLow
-    mov edx, _HalpPerfCounterHigh
+    mov eax, dword ptr _HalpPerfCounterLow
+    mov edx, dword ptr _HalpPerfCounterHigh
 
     /* Check if someone updated the counter */
     cmp eax, ebx
@@ -417,7 +443,7 @@
 
     /* Check if the current 8254 value causes rollover */
     neg ecx
-    add ecx, _HalpCurrentRollOver
+    add ecx, dword ptr _HalpCurrentRollOver
     jnb DoRollOver
 
 SetSum:
@@ -427,19 +453,19 @@
     adc edx, 0
 
     /* Check if we're above or below the last high value */
-    cmp edx, _HalpLastPerfCounterHigh
+    cmp edx, dword ptr _HalpLastPerfCounterHigh
     jb short BelowHigh
     jnz short BelowLow
 
     /* Check if we're above or below the last low value */
-    cmp eax, _HalpLastPerfCounterLow
+    cmp eax, dword ptr _HalpLastPerfCounterLow
     jb BelowHigh
 
 BelowLow:
 
     /* Update the last value and bring back interrupts */
-    mov _HalpLastPerfCounterLow, eax
-    mov _HalpLastPerfCounterHigh, edx
+    mov dword ptr _HalpLastPerfCounterLow, eax
+    mov dword ptr _HalpLastPerfCounterHigh, edx
     popf
 
     /* Check if caller wants frequency */
@@ -469,7 +495,7 @@
 
     /* We might have an incoming interrupt, save EFLAGS and reset rollover */
     mov esi, [esp]
-    mov ecx, _HalpCurrentRollOver
+    mov ecx, dword ptr _HalpCurrentRollOver
     popf
 
     /* Check if interrupts were enabled and try again */
@@ -483,8 +509,8 @@
 BelowHigh:
 
     /* Get the last counter values */
-    mov ebx, _HalpLastPerfCounterLow
-    mov esi, _HalpLastPerfCounterHigh
+    mov ebx, dword ptr _HalpLastPerfCounterLow
+    mov esi, dword ptr _HalpLastPerfCounterHigh
 
     /* Check if the previous value was 0 and go back if yes */
     mov ecx, ebx
@@ -495,7 +521,7 @@
     sub ebx, eax
     sbb esi, edx
     jnz InvalidCount
-    cmp ebx, _HalpCurrentRollOver
+    cmp ebx, dword ptr _HalpCurrentRollOver
     jg InvalidCount
 
     /* Fixup the count with the last known value */
@@ -517,7 +543,8 @@
 InvalidCount:
     popf
     xor eax, eax
-    mov _HalpLastPerfCounterLow, eax
-    mov _HalpLastPerfCounterHigh, eax
+    mov dword ptr _HalpLastPerfCounterLow, eax
+    mov dword ptr _HalpLastPerfCounterHigh, eax
     jmp LoopPreInt
-.endfunc
+
+END




More information about the Ros-diffs mailing list