diff --git a/reactos/drivers/video/videoprt/int10.c b/reactos/drivers/video/videoprt/int10.c index e42db44c650..a41bce646c8 100644 --- a/reactos/drivers/video/videoprt/int10.c +++ b/reactos/drivers/video/videoprt/int10.c @@ -199,48 +199,48 @@ IntInt10CallBios( VP_STATUS NTAPI VideoPortInt10( - IN PVOID HwDeviceExtension, - IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments) + IN PVOID HwDeviceExtension, + IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments) { - KV86M_REGISTERS Regs; - NTSTATUS Status; - PKPROCESS CallingProcess = (PKPROCESS)PsGetCurrentProcess(); - KAPC_STATE ApcState; + CONTEXT BiosContext; + NTSTATUS Status; + PKPROCESS CallingProcess = (PKPROCESS)PsGetCurrentProcess(); + KAPC_STATE ApcState; - TRACE_(VIDEOPRT, "VideoPortInt10\n"); + if (!CsrssInitialized) + { + return ERROR_INVALID_PARAMETER; + } - if (!CsrssInitialized) - { - return ERROR_INVALID_PARAMETER; - } + /* Attach to CSRSS */ + IntAttachToCSRSS(&CallingProcess, &ApcState); - IntAttachToCSRSS(&CallingProcess, &ApcState); + /* Clear the context */ + RtlZeroMemory(&BiosContext, sizeof(CONTEXT)); - memset(&Regs, 0, sizeof(Regs)); - INFO_(VIDEOPRT, "- Input register Eax: %x\n", BiosArguments->Eax); - Regs.Eax = BiosArguments->Eax; - INFO_(VIDEOPRT, "- Input register Ebx: %x\n", BiosArguments->Ebx); - Regs.Ebx = BiosArguments->Ebx; - INFO_(VIDEOPRT, "- Input register Ecx: %x\n", BiosArguments->Ecx); - Regs.Ecx = BiosArguments->Ecx; - INFO_(VIDEOPRT, "- Input register Edx: %x\n", BiosArguments->Edx); - Regs.Edx = BiosArguments->Edx; - INFO_(VIDEOPRT, "- Input register Esi: %x\n", BiosArguments->Esi); - Regs.Esi = BiosArguments->Esi; - INFO_(VIDEOPRT, "- Input register Edi: %x\n", BiosArguments->Edi); - Regs.Edi = BiosArguments->Edi; - INFO_(VIDEOPRT, "- Input register Ebp: %x\n", BiosArguments->Ebp); - Regs.Ebp = BiosArguments->Ebp; - Status = Ke386CallBios(0x10, (PCONTEXT)&Regs); - BiosArguments->Eax = Regs.Eax; - BiosArguments->Ebx = Regs.Ebx; - BiosArguments->Ecx = Regs.Ecx; - BiosArguments->Edx = Regs.Edx; - BiosArguments->Esi = Regs.Esi; - BiosArguments->Edi = Regs.Edi; - BiosArguments->Ebp = Regs.Ebp; + /* 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; - IntDetachFromCSRSS(&CallingProcess, &ApcState); + /* Do the ROM BIOS call */ + Status = Ke386CallBios(0x10, &BiosContext); - return Status; + /* 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; + + /* Detach from CSRSS */ + IntDetachFromCSRSS(&CallingProcess, &ApcState); + + return Status; }