- Fix function definitions to match header changes
authorStefan Ginsberg <stefanginsberg@gmail.com>
Sun, 26 Oct 2008 14:45:13 +0000 (14:45 +0000)
committerStefan Ginsberg <stefanginsberg@gmail.com>
Sun, 26 Oct 2008 14:45:13 +0000 (14:45 +0000)
- Don't use x86 fiber assembly for amd64, just stub it out completely
- Use AMD64 definitions in BasepInitializeContext, and add a broken KGDT_64_R3_TEB

svn path=/branches/ros-amd64-bringup/; revision=36990

reactos/dll/win32/kernel32/misc/utils.c
reactos/dll/win32/kernel32/process/proc.c
reactos/dll/win32/kernel32/thread/amd64/fiber.S
reactos/include/ndk/amd64/ketypes.h

index 49c52e6..0a61194 100644 (file)
@@ -386,11 +386,11 @@ BasepInitializeContext(IN PCONTEXT Context,
     /* The other registers are undefined */
 
     /* Setup the Segments */
-    Context->SegFs = KGDT_R3_TEB | RPL_MASK;
-    Context->SegEs = KGDT_R3_DATA | RPL_MASK;
-    Context->SegDs = KGDT_R3_DATA | RPL_MASK;
-    Context->SegCs = KGDT_R3_CODE | RPL_MASK;
-    Context->SegSs = KGDT_R3_DATA | RPL_MASK;
+    Context->SegFs = KGDT_64_R3_TEB | RPL_MASK;
+    Context->SegEs = KGDT_64_DATA | RPL_MASK;
+    Context->SegDs = KGDT_64_DATA | RPL_MASK;
+    Context->SegCs = KGDT_64_R3_CODE | RPL_MASK;
+    Context->SegSs = KGDT_64_DATA | RPL_MASK;
     Context->SegGs = 0;
 
     /* Set the EFLAGS */
index 7fe90e6..f86cf80 100644 (file)
@@ -33,8 +33,8 @@ RegisterWaitForInputIdle(WaitForInputIdleType lpfnRegisterWaitForInputIdle);
  */
 BOOL STDCALL
 GetProcessAffinityMask (HANDLE hProcess,
-                       LPDWORD lpProcessAffinityMask,
-                       LPDWORD lpSystemAffinityMask)
+                       PDWORD_PTR lpProcessAffinityMask,
+                       PDWORD_PTR lpSystemAffinityMask)
 {
   PROCESS_BASIC_INFORMATION ProcessInfo;
   SYSTEM_BASIC_INFORMATION SystemInfo;
@@ -73,7 +73,7 @@ GetProcessAffinityMask (HANDLE hProcess,
  */
 BOOL STDCALL
 SetProcessAffinityMask (HANDLE hProcess,
-                       DWORD dwProcessAffinityMask)
+                       DWORD_PTR dwProcessAffinityMask)
 {
   NTSTATUS Status;
 
index 233174b..ed500c6 100644 (file)
@@ -9,116 +9,9 @@
 
 #include <ndk/asm.h>
 
-#define CONTEXT_FULL                    0x10007
-#define CONTEXT_FLOATING_POINT          0xF
-
 .globl _SwitchToFiber
 .intel_syntax noprefix
 
 _SwitchToFiber:
-    /* Get the TEB */
-    mov edx, fs:[KGDT_R3_TEB]
-    
-    /* Get the Fiber */
-    mov eax, [edx+TEB_FIBER_DATA]
-    
-    /* Save the non-volatile registers */
-    mov [eax+FIBER_CONTEXT_EBX], ebx
-    mov [eax+FIBER_CONTEXT_ESI], esi
-    mov [eax+FIBER_CONTEXT_EDI], edi
-    mov [eax+FIBER_CONTEXT_EBP], ebp
-    
-    /* Check if we're to save FPU State */
-    cmp dword ptr [eax+FIBER_CONTEXT_FLAGS], CONTEXT_FULL + CONTEXT_FLOATING_POINT
-    jnz NoFpuStateSave
-    
-    /* Save the FPU State (Status and Control)*/
-    fstsw [eax+FIBER_CONTEXT_FLOAT_SAVE_STATUS_WORD]
-    fstcw [eax+FIBER_CONTEXT_FLOAT_SAVE_CONTROL_WORD]
-    
-    /* Check if the CPU supports SIMD MXCSR State Save */
-    cmp byte ptr ds:[PROCESSOR_FEATURE_FXSR], 0
-    jnz NoFpuStateSave
-    stmxcsr [eax+FIBER_CONTEXT_DR6]
-    
-NoFpuStateSave:
-
-    /* Save stack since we're not touching it anymore */
-    mov [eax+FIBER_CONTEXT_ESP], esp
-    
-    /* Transfer some data from the TEB */
-    mov ecx, [edx+TEB_FLS_DATA]
-    mov [eax+FIBER_FLS_DATA], ecx
-    mov ecx, [edx+TEB_ACTIVATION_CONTEXT_STACK_POINTER]
-    mov [eax+FIBER_ACTIVATION_CONTEXT_STACK], ecx
-    
-    /* Transfer some data related to the Stack */
-    mov ecx, [edx+TEB_EXCEPTION_LIST]
-    mov [eax+FIBER_EXCEPTION_LIST], ecx
-    mov ecx, [edx+TEB_STACK_LIMIT]
-    mov [eax+FIBER_STACK_LIMIT], ecx
-    mov ecx, [edx+TEB_GUARANTEED_STACK_BYTES]
-    mov [eax+FIBER_GUARANTEED_STACK_BYTES], ecx
-    
-    /* Switch to the new fiber */
-    mov ecx, [esp+4]
-    mov [edx+TEB_FIBER_DATA], ecx
-    
-    /* Switch Fiber Data */
-    mov esi, [ecx+FIBER_EXCEPTION_LIST]
-    mov [edx+TEB_EXCEPTION_LIST], esi
-    mov esi, [ecx+FIBER_STACK_BASE]
-    mov [edx+TEB_STACK_BASE], esi
-    mov esi, [ecx+FIBER_STACK_LIMIT]
-    mov [edx+TEB_STACK_LIMIT], esi
-    mov esi, [ecx+FIBER_DEALLOCATION_STACK]
-    mov [edx+TEB_DEALLOCATION_STACK], esi
-    mov esi, [ecx+FIBER_GUARANTEED_STACK_BYTES]
-    mov [edx+TEB_GUARANTEED_STACK_BYTES], esi
-    mov esi, [ecx+FIBER_ACTIVATION_CONTEXT_STACK]
-    mov [edx+TEB_ACTIVATION_CONTEXT_STACK_POINTER], esi
-    
-    /* Restore FPU State */
-    cmp dword ptr [eax+FIBER_CONTEXT_FLAGS], CONTEXT_FULL + CONTEXT_FLOATING_POINT
-    jnz NoFpuStateRestore
-    
-    /* Check if the Status Word Changed */
-    mov esi, [eax+FIBER_CONTEXT_FLOAT_SAVE_STATUS_WORD]
-    cmp si, word ptr [ecx+FIBER_CONTEXT_FLOAT_SAVE_STATUS_WORD]
-    jnz StatusWordChanged
-    
-    /* Check if the Control Word Changed */
-    mov esi, [eax+FIBER_CONTEXT_FLOAT_SAVE_CONTROL_WORD]
-    cmp si, word ptr [ecx+FIBER_CONTEXT_FLOAT_SAVE_CONTROL_WORD]
-    jz ControlWordEqual
-    
-StatusWordChanged:
-
-    /* Load the new one */
-    mov word ptr [ecx+FIBER_CONTEXT_FLOAT_SAVE_TAG_WORD], 0xFFFF
-    fldenv [ecx+FIBER_CONTEXT_FLOAT_SAVE_CONTROL_WORD]
-    
-ControlWordEqual:
-
-    /* Load the new one */
-    cmp byte ptr ds:[PROCESSOR_FEATURE_FXSR], 0
-    jnz NoFpuStateRestore
-    ldmxcsr [ecx+FIBER_CONTEXT_DR6]
-    
-NoFpuStateRestore:
-
-    /* Restore non-volatile registers */
-    mov esi, [ecx+FIBER_CONTEXT_ESI]
-    mov edi, [ecx+FIBER_CONTEXT_EDI]
-    mov ebx, [ecx+FIBER_CONTEXT_EBX]
-    mov ebp, [ecx+FIBER_CONTEXT_EBP]
-    mov esp, [ecx+FIBER_CONTEXT_ESP]
-    
-    /* Restore FLS Data */
-    mov eax, [ecx+FIBER_FLS_DATA]
-    mov [edx+TEB_FLS_DATA], eax
-
-    /* Return */
+    /* FIXME: TODO */
     ret 4
-    
-/* EOF */
index 583669c..69db15d 100644 (file)
@@ -64,6 +64,7 @@ Author:
 #define KGDT_64_R3_CODE         0x0030 // 33
 #define KGDT_TSS                0x0040
 #define KGDT_32_R3_TEB          0x0050 // 53
+#define KGDT_64_R3_TEB          0x0000 // FIXME
 
 
 //