[VIDEOPRT] Call IntInt10CallBios from VideoPortInt10, instead of code duplication
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Sun, 11 Feb 2018 12:49:14 +0000 (13:49 +0100)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Thu, 15 Aug 2019 12:13:54 +0000 (14:13 +0200)
win32ss/drivers/videoprt/int10.c

index 82f3774..dd6526a 100644 (file)
@@ -356,58 +356,26 @@ VideoPortInt10(
     IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments)
 {
 #if defined(_M_IX86)
-    CONTEXT BiosContext;
-    NTSTATUS Status;
-    PKPROCESS CallingProcess = (PKPROCESS)PsGetCurrentProcess();
-    KAPC_STATE ApcState;
+    INT10_BIOS_ARGUMENTS Int10BiosArguments;
+    VP_STATUS Status;
 
     if (!CsrssInitialized)
     {
         return ERROR_INVALID_PARAMETER;
     }
 
-    /* Attach to CSRSS */
-    IntAttachToCSRSS(&CallingProcess, &ApcState);
-
-    /* Clear the context */
-    RtlZeroMemory(&BiosContext, sizeof(CONTEXT));
-
-    /* Fill out the bios arguments */
-    BiosContext.Eax = BiosArguments->Eax;
-    BiosContext.Ebx = BiosArguments->Ebx;
-    BiosContext.Ecx = BiosArguments->Ecx;
-    BiosContext.Edx = BiosArguments->Edx;
-    BiosContext.Esi = BiosArguments->Esi;
-    BiosContext.Edi = BiosArguments->Edi;
-    BiosContext.Ebp = BiosArguments->Ebp;
-
-    /* Do the ROM BIOS call */
-    (void)KeWaitForMutexObject(&VideoPortInt10Mutex,
-                               Executive,
-                               KernelMode,
-                               FALSE,
-                               NULL);
-    Status = Ke386CallBios(0x10, &BiosContext);
-    KeReleaseMutex(&VideoPortInt10Mutex, FALSE);
-
-    /* Return the arguments */
-    BiosArguments->Eax = BiosContext.Eax;
-    BiosArguments->Ebx = BiosContext.Ebx;
-    BiosArguments->Ecx = BiosContext.Ecx;
-    BiosArguments->Edx = BiosContext.Edx;
-    BiosArguments->Esi = BiosContext.Esi;
-    BiosArguments->Edi = BiosContext.Edi;
-    BiosArguments->Ebp = BiosContext.Ebp;
+    /* Copy arguments to other format */
+    RtlCopyMemory(&Int10BiosArguments, BiosArguments, sizeof(BiosArguments));
+    Int10BiosArguments.SegDs = 0;
+    Int10BiosArguments.SegEs = 0;
 
-    /* Detach from CSRSS */
-    IntDetachFromCSRSS(&CallingProcess, &ApcState);
+    /* Do the BIOS call */
+    Status = IntInt10CallBios(NULL, &Int10BiosArguments);
 
-    if (NT_SUCCESS(Status))
-    {
-        return NO_ERROR;
-    }
+    /* Copy results back */
+    RtlCopyMemory(BiosArguments, &Int10BiosArguments, sizeof(BiosArguments));
 
-    return ERROR_INVALID_PARAMETER;
+    return Status;
 #else
     /* Not implemented for anything else than X86*/
     DPRINT1("Int10 not available on non-x86!\n");