mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 13:26:17 +00:00
- Implement VidResetDisplay in BootVid-arm.
- Implement KiSaveProcessorControlState and make the appropriate changes to KPROCESSOR_STATE and KSPECIAL_REGISTERS on ARM to support this, as well as moving the ARM Register definitions from ntos to NDK. - Implement RtlCaptureContext. - With these changes, BSODs now work, but because of missing palette code, they are actually R(Red)SODs, which is awesome. - Remove debug prints from system call code -- this ends up somehow corrupting the return values *sigh*. More work to be done there, defintely. We have now regressed but we have an RSOD. svn path=/trunk/; revision=34120
This commit is contained in:
parent
64a20b3ace
commit
7675e2b8be
8 changed files with 322 additions and 203 deletions
|
@ -23,6 +23,7 @@
|
|||
#define WRITE_REGISTER_USHORT(r, v) (*(volatile USHORT *)(r) = (v))
|
||||
|
||||
PUSHORT VgaArmBase;
|
||||
PHYSICAL_ADDRESS VgaPhysical;
|
||||
BOOLEAN NextLine = FALSE;
|
||||
UCHAR VidpTextColor = 0xF;
|
||||
ULONG VidpCurrentX = 0;
|
||||
|
@ -244,38 +245,15 @@ PreserveRow(IN ULONG CurrentTop,
|
|||
}
|
||||
}
|
||||
|
||||
/* PUBLIC FUNCTIONS **********************************************************/
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
BOOLEAN
|
||||
VOID
|
||||
NTAPI
|
||||
VidInitialize(IN BOOLEAN SetMode)
|
||||
{
|
||||
PHYSICAL_ADDRESS Physical;
|
||||
DPRINT1("bv-arm v0.1\n");
|
||||
|
||||
//
|
||||
// Allocate framebuffer
|
||||
// 600kb works out to 640x480@16bpp
|
||||
//
|
||||
Physical.QuadPart = -1;
|
||||
VgaArmBase = MmAllocateContiguousMemory(600 * 1024, Physical);
|
||||
if (!VgaArmBase) return FALSE;
|
||||
|
||||
//
|
||||
// Get physical address
|
||||
//
|
||||
Physical = MmGetPhysicalAddress(VgaArmBase);
|
||||
if (!Physical.QuadPart) return FALSE;
|
||||
DPRINT1("[BV-ARM] Frame Buffer @ 0x%p 0p%p\n", VgaArmBase, Physical.LowPart);
|
||||
|
||||
VidpInitializeDisplay(VOID)
|
||||
{
|
||||
//
|
||||
// Set framebuffer address
|
||||
//
|
||||
WRITE_REGISTER_ULONG(PL110_LCDUPBASE, Physical.LowPart);
|
||||
WRITE_REGISTER_ULONG(PL110_LCDLPBASE, Physical.LowPart);
|
||||
WRITE_REGISTER_ULONG(PL110_LCDUPBASE, VgaPhysical.LowPart);
|
||||
WRITE_REGISTER_ULONG(PL110_LCDLPBASE, VgaPhysical.LowPart);
|
||||
|
||||
//
|
||||
// Initialize timings to 640x480
|
||||
|
@ -291,7 +269,7 @@ VidInitialize(IN BOOLEAN SetMode)
|
|||
LCDCONTROL_LCDTFT |
|
||||
LCDCONTROL_LCDPWR |
|
||||
LCDCONTROL_LCDBPP(4));
|
||||
|
||||
|
||||
#if DBG
|
||||
//
|
||||
// Draw an RGB test pattern
|
||||
|
@ -308,7 +286,39 @@ VidInitialize(IN BOOLEAN SetMode)
|
|||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* PUBLIC FUNCTIONS **********************************************************/
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
BOOLEAN
|
||||
NTAPI
|
||||
VidInitialize(IN BOOLEAN SetMode)
|
||||
{
|
||||
DPRINT1("bv-arm v0.1\n");
|
||||
|
||||
//
|
||||
// Allocate framebuffer
|
||||
// 600kb works out to 640x480@16bpp
|
||||
//
|
||||
VgaPhysical.QuadPart = -1;
|
||||
VgaArmBase = MmAllocateContiguousMemory(600 * 1024, VgaPhysical);
|
||||
if (!VgaArmBase) return FALSE;
|
||||
|
||||
//
|
||||
// Get physical address
|
||||
//
|
||||
VgaPhysical = MmGetPhysicalAddress(VgaArmBase);
|
||||
if (!VgaPhysical.QuadPart) return FALSE;
|
||||
DPRINT1("[BV-ARM] Frame Buffer @ 0x%p 0p%p\n", VgaArmBase, VgaPhysical.LowPart);
|
||||
|
||||
//
|
||||
// Setup the display
|
||||
//
|
||||
VidpInitializeDisplay();
|
||||
|
||||
//
|
||||
// We are done!
|
||||
//
|
||||
|
@ -322,8 +332,22 @@ VOID
|
|||
NTAPI
|
||||
VidResetDisplay(IN BOOLEAN HalReset)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
while (TRUE);
|
||||
//
|
||||
// Clear the current position
|
||||
//
|
||||
VidpCurrentX = 0;
|
||||
VidpCurrentY = 0;
|
||||
|
||||
//
|
||||
// Re-initialize the VGA Display
|
||||
//
|
||||
VidpInitializeDisplay();
|
||||
|
||||
//
|
||||
// Re-initialize the palette and fill the screen black
|
||||
//
|
||||
//InitializePalette();
|
||||
VidSolidColorFill(0, 0, 639, 479, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -108,12 +108,179 @@ typedef struct _KEXCEPTION_FRAME
|
|||
// ULONG SwapReturn;
|
||||
} KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
|
||||
|
||||
//
|
||||
// ARM Internal Registers
|
||||
//
|
||||
typedef union _ARM_TTB_REGISTER
|
||||
{
|
||||
struct
|
||||
{
|
||||
ULONG Reserved:14;
|
||||
ULONG BaseAddress:18;
|
||||
};
|
||||
ULONG AsUlong;
|
||||
} ARM_TTB_REGISTER;
|
||||
|
||||
typedef union _ARM_STATUS_REGISTER
|
||||
{
|
||||
|
||||
struct
|
||||
{
|
||||
ULONG Mode:5;
|
||||
ULONG State:1;
|
||||
ULONG FiqDisable:1;
|
||||
ULONG IrqDisable:1;
|
||||
ULONG ImpreciseAbort:1;
|
||||
ULONG Endianness:1;
|
||||
ULONG Sbz:6;
|
||||
ULONG GreaterEqual:4;
|
||||
ULONG Sbz1:4;
|
||||
ULONG Java:1;
|
||||
ULONG Sbz2:2;
|
||||
ULONG StickyOverflow:1;
|
||||
ULONG Overflow:1;
|
||||
ULONG CarryBorrowExtend:1;
|
||||
ULONG Zero:1;
|
||||
ULONG NegativeLessThan:1;
|
||||
};
|
||||
ULONG AsUlong;
|
||||
} ARM_STATUS_REGISTER;
|
||||
|
||||
typedef union _ARM_DOMAIN_REGISTER
|
||||
{
|
||||
struct
|
||||
{
|
||||
ULONG Domain0:2;
|
||||
ULONG Domain1:2;
|
||||
ULONG Domain2:2;
|
||||
ULONG Domain3:2;
|
||||
ULONG Domain4:2;
|
||||
ULONG Domain5:2;
|
||||
ULONG Domain6:2;
|
||||
ULONG Domain7:2;
|
||||
ULONG Domain8:2;
|
||||
ULONG Domain9:2;
|
||||
ULONG Domain10:2;
|
||||
ULONG Domain11:2;
|
||||
ULONG Domain12:2;
|
||||
ULONG Domain13:2;
|
||||
ULONG Domain14:2;
|
||||
ULONG Domain15:2;
|
||||
};
|
||||
ULONG AsUlong;
|
||||
} ARM_DOMAIN_REGISTER;
|
||||
|
||||
typedef union _ARM_CONTROL_REGISTER
|
||||
{
|
||||
struct
|
||||
{
|
||||
ULONG MmuEnabled:1;
|
||||
ULONG AlignmentFaultsEnabled:1;
|
||||
ULONG DCacheEnabled:1;
|
||||
ULONG Sbo:4;
|
||||
ULONG BigEndianEnabled:1;
|
||||
ULONG System:1;
|
||||
ULONG Rom:1;
|
||||
ULONG Sbz:2;
|
||||
ULONG ICacheEnabled:1;
|
||||
ULONG HighVectors:1;
|
||||
ULONG RoundRobinReplacementEnabled:1;
|
||||
ULONG Armv4Compat:1;
|
||||
ULONG Sbo1:1;
|
||||
ULONG Sbz1:1;
|
||||
ULONG Sbo2:1;
|
||||
ULONG Reserved:14;
|
||||
};
|
||||
ULONG AsUlong;
|
||||
} ARM_CONTROL_REGISTER, *PARM_CONTROL_REGISTER;
|
||||
|
||||
typedef union _ARM_ID_CODE_REGISTER
|
||||
{
|
||||
struct
|
||||
{
|
||||
ULONG Revision:4;
|
||||
ULONG PartNumber:12;
|
||||
ULONG Architecture:4;
|
||||
ULONG Variant:4;
|
||||
ULONG Identifier:8;
|
||||
};
|
||||
ULONG AsUlong;
|
||||
} ARM_ID_CODE_REGISTER, *PARM_ID_CODE_REGISTER;
|
||||
|
||||
typedef union _ARM_CACHE_REGISTER
|
||||
{
|
||||
struct
|
||||
{
|
||||
ULONG ILength:2;
|
||||
ULONG IMultipler:1;
|
||||
ULONG IAssociativty:3;
|
||||
ULONG ISize:4;
|
||||
ULONG IReserved:2;
|
||||
ULONG DLength:2;
|
||||
ULONG DMultipler:1;
|
||||
ULONG DAssociativty:3;
|
||||
ULONG DSize:4;
|
||||
ULONG DReserved:2;
|
||||
ULONG Separate:1;
|
||||
ULONG CType:4;
|
||||
ULONG Reserved:3;
|
||||
};
|
||||
ULONG AsUlong;
|
||||
} ARM_CACHE_REGISTER, *PARM_CACHE_REGISTER;
|
||||
|
||||
typedef union _ARM_LOCKDOWN_REGISTER
|
||||
{
|
||||
struct
|
||||
{
|
||||
ULONG Preserve:1;
|
||||
ULONG Ignored:25;
|
||||
ULONG Victim:3;
|
||||
ULONG Reserved:3;
|
||||
};
|
||||
ULONG AsUlong;
|
||||
} ARM_LOCKDOWN_REGISTER, *PARM_LOCKDOWN_REGISTER;
|
||||
|
||||
//
|
||||
// ARM Domains
|
||||
//
|
||||
typedef enum _ARM_DOMAINS
|
||||
{
|
||||
Domain0,
|
||||
Domain1,
|
||||
Domain2,
|
||||
Domain3,
|
||||
Domain4,
|
||||
Domain5,
|
||||
Domain6,
|
||||
Domain7,
|
||||
Domain8,
|
||||
Domain9,
|
||||
Domain10,
|
||||
Domain11,
|
||||
Domain12,
|
||||
Domain13,
|
||||
Domain14,
|
||||
Domain15
|
||||
} ARM_DOMAINS;
|
||||
|
||||
//
|
||||
// Special Registers Structure (outside of CONTEXT)
|
||||
//
|
||||
typedef struct _KSPECIAL_REGISTERS
|
||||
{
|
||||
ARM_CONTROL_REGISTER ControlRegister;
|
||||
ARM_LOCKDOWN_REGISTER LockdownRegister;
|
||||
ARM_CACHE_REGISTER CacheRegister;
|
||||
ARM_STATUS_REGISTER StatusRegister;
|
||||
} KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;
|
||||
|
||||
//
|
||||
// Processor State
|
||||
//
|
||||
typedef struct _KPROCESSOR_STATE
|
||||
{
|
||||
struct _CONTEXT ContextFrame;
|
||||
struct _KSPECIAL_REGISTERS SpecialRegisters;
|
||||
} KPROCESSOR_STATE, *PKPROCESSOR_STATE;
|
||||
|
||||
//
|
||||
|
|
|
@ -1,18 +1,59 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS Run-Time Library
|
||||
* PURPOSE: Debug Routines
|
||||
* FILE: lib/rtl/arm/debug_asm.S
|
||||
* PROJECT: ReactOS Kernel
|
||||
* LICENSE: GPL - See COPYING in the top level directory
|
||||
* FILE: rtl/arm/debug_asm.S
|
||||
* PURPOSE: Cross-privilege Debugging and Exception Support for ARM
|
||||
* PROGRAMMERS: ReactOS Portable Systems Group
|
||||
*/
|
||||
|
||||
/* GLOBALS ********************************************************************/
|
||||
.title "ARM Kernel/User NT Debugging and Exception"
|
||||
.include "ntoskrnl/include/internal/arm/kxarm.h"
|
||||
.include "ntoskrnl/include/internal/arm/ksarm.h"
|
||||
|
||||
.globl DbgBreakPoint
|
||||
|
||||
/* FUNCTIONS ******************************************************************/
|
||||
|
||||
.func DbgBreakPoint
|
||||
DbgBreakPoint:
|
||||
TEXTAREA
|
||||
NESTED_ENTRY DbgBreakPoint
|
||||
PROLOG_END DbgBreakPoint
|
||||
|
||||
//
|
||||
// Do a breakpoint and return
|
||||
//
|
||||
bkpt 3
|
||||
bx lr
|
||||
.endfunc
|
||||
ENTRY_END DbgBreakPoint
|
||||
|
||||
NESTED_ENTRY RtlCaptureContext
|
||||
PROLOG_END RtlCaptureContext
|
||||
|
||||
//
|
||||
// FIXME: Change to stmdb later
|
||||
//
|
||||
str r0, [a1, #CsR0]
|
||||
str r1, [a1, #CsR1]
|
||||
str r2, [a1, #CsR2]
|
||||
str r3, [a1, #CsR3]
|
||||
str r4, [a1, #CsR4]
|
||||
str r5, [a1, #CsR5]
|
||||
str r6, [a1, #CsR6]
|
||||
str r7, [a1, #CsR7]
|
||||
str r8, [a1, #CsR8]
|
||||
str r9, [a1, #CsR9]
|
||||
str r10, [a1, #CsR10]
|
||||
str r11, [a1, #CsR11]
|
||||
str r12, [a1, #CsR12]
|
||||
str sp, [a1, #CsSp]
|
||||
str lr, [a1, #CsLr]
|
||||
str pc, [a1, #CsPc]
|
||||
mrs ip, spsr
|
||||
str ip, [a1, #CsPsr]
|
||||
|
||||
//
|
||||
// Set flags
|
||||
//
|
||||
mov ip, #CONTEXT_FULL
|
||||
str ip, [a1, #CsContextFlags]
|
||||
|
||||
//
|
||||
// Return
|
||||
//
|
||||
bx lr
|
||||
ENTRY_END RtlCaptureContext
|
||||
|
|
|
@ -14,155 +14,6 @@
|
|||
|
||||
#define KeArchHaltProcessor() KeArmHaltProcessor()
|
||||
|
||||
typedef union _ARM_TTB_REGISTER
|
||||
{
|
||||
struct
|
||||
{
|
||||
ULONG Reserved:14;
|
||||
ULONG BaseAddress:18;
|
||||
};
|
||||
ULONG AsUlong;
|
||||
} ARM_TTB_REGISTER;
|
||||
|
||||
typedef union _ARM_STATUS_REGISTER
|
||||
{
|
||||
|
||||
struct
|
||||
{
|
||||
ULONG Mode:5;
|
||||
ULONG State:1;
|
||||
ULONG FiqDisable:1;
|
||||
ULONG IrqDisable:1;
|
||||
ULONG ImpreciseAbort:1;
|
||||
ULONG Endianness:1;
|
||||
ULONG Sbz:6;
|
||||
ULONG GreaterEqual:4;
|
||||
ULONG Sbz1:4;
|
||||
ULONG Java:1;
|
||||
ULONG Sbz2:2;
|
||||
ULONG StickyOverflow:1;
|
||||
ULONG Overflow:1;
|
||||
ULONG CarryBorrowExtend:1;
|
||||
ULONG Zero:1;
|
||||
ULONG NegativeLessThan:1;
|
||||
};
|
||||
ULONG AsUlong;
|
||||
} ARM_STATUS_REGISTER;
|
||||
|
||||
typedef union _ARM_DOMAIN_REGISTER
|
||||
{
|
||||
struct
|
||||
{
|
||||
ULONG Domain0:2;
|
||||
ULONG Domain1:2;
|
||||
ULONG Domain2:2;
|
||||
ULONG Domain3:2;
|
||||
ULONG Domain4:2;
|
||||
ULONG Domain5:2;
|
||||
ULONG Domain6:2;
|
||||
ULONG Domain7:2;
|
||||
ULONG Domain8:2;
|
||||
ULONG Domain9:2;
|
||||
ULONG Domain10:2;
|
||||
ULONG Domain11:2;
|
||||
ULONG Domain12:2;
|
||||
ULONG Domain13:2;
|
||||
ULONG Domain14:2;
|
||||
ULONG Domain15:2;
|
||||
};
|
||||
ULONG AsUlong;
|
||||
} ARM_DOMAIN_REGISTER;
|
||||
|
||||
typedef union _ARM_CONTROL_REGISTER
|
||||
{
|
||||
struct
|
||||
{
|
||||
ULONG MmuEnabled:1;
|
||||
ULONG AlignmentFaultsEnabled:1;
|
||||
ULONG DCacheEnabled:1;
|
||||
ULONG Sbo:4;
|
||||
ULONG BigEndianEnabled:1;
|
||||
ULONG System:1;
|
||||
ULONG Rom:1;
|
||||
ULONG Sbz:2;
|
||||
ULONG ICacheEnabled:1;
|
||||
ULONG HighVectors:1;
|
||||
ULONG RoundRobinReplacementEnabled:1;
|
||||
ULONG Armv4Compat:1;
|
||||
ULONG Sbo1:1;
|
||||
ULONG Sbz1:1;
|
||||
ULONG Sbo2:1;
|
||||
ULONG Reserved:14;
|
||||
};
|
||||
ULONG AsUlong;
|
||||
} ARM_CONTROL_REGISTER, *PARM_CONTROL_REGISTER;
|
||||
|
||||
typedef union _ARM_ID_CODE_REGISTER
|
||||
{
|
||||
struct
|
||||
{
|
||||
ULONG Revision:4;
|
||||
ULONG PartNumber:12;
|
||||
ULONG Architecture:4;
|
||||
ULONG Variant:4;
|
||||
ULONG Identifier:8;
|
||||
};
|
||||
ULONG AsUlong;
|
||||
} ARM_ID_CODE_REGISTER, *PARM_ID_CODE_REGISTER;
|
||||
|
||||
typedef union _ARM_CACHE_REGISTER
|
||||
{
|
||||
struct
|
||||
{
|
||||
ULONG ILength:2;
|
||||
ULONG IMultipler:1;
|
||||
ULONG IAssociativty:3;
|
||||
ULONG ISize:4;
|
||||
ULONG IReserved:2;
|
||||
ULONG DLength:2;
|
||||
ULONG DMultipler:1;
|
||||
ULONG DAssociativty:3;
|
||||
ULONG DSize:4;
|
||||
ULONG DReserved:2;
|
||||
ULONG Separate:1;
|
||||
ULONG CType:4;
|
||||
ULONG Reserved:3;
|
||||
};
|
||||
ULONG AsUlong;
|
||||
} ARM_CACHE_REGISTER, *PARM_CACHE_REGISTER;
|
||||
|
||||
typedef union _ARM_LOCKDOWN_REGISTER
|
||||
{
|
||||
struct
|
||||
{
|
||||
ULONG Preserve:1;
|
||||
ULONG Ignored:25;
|
||||
ULONG Victim:3;
|
||||
ULONG Reserved:3;
|
||||
};
|
||||
ULONG AsUlong;
|
||||
} ARM_LOCKDOWN_REGISTER, *PARM_LOCKDOWN_REGISTER;
|
||||
|
||||
typedef enum _ARM_DOMAINS
|
||||
{
|
||||
Domain0,
|
||||
Domain1,
|
||||
Domain2,
|
||||
Domain3,
|
||||
Domain4,
|
||||
Domain5,
|
||||
Domain6,
|
||||
Domain7,
|
||||
Domain8,
|
||||
Domain9,
|
||||
Domain10,
|
||||
Domain11,
|
||||
Domain12,
|
||||
Domain13,
|
||||
Domain14,
|
||||
Domain15
|
||||
} ARM_DOMAINS;
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KeArmInitThreadWithContext(
|
||||
|
|
|
@ -60,6 +60,29 @@
|
|||
*/
|
||||
.equ ThKernelStack, 0x20
|
||||
|
||||
/*
|
||||
* CONTEXT Offsets
|
||||
*/
|
||||
.equ CONTEXT_FULL, 0x43
|
||||
.equ CsContextFlags, 0x00
|
||||
.equ CsR0, 0x04
|
||||
.equ CsR1, 0x08
|
||||
.equ CsR2, 0x0C
|
||||
.equ CsR3, 0x10
|
||||
.equ CsR4, 0x14
|
||||
.equ CsR5, 0x18
|
||||
.equ CsR6, 0x1C
|
||||
.equ CsR7, 0x20
|
||||
.equ CsR8, 0x24
|
||||
.equ CsR9, 0x28
|
||||
.equ CsR10, 0x2C
|
||||
.equ CsR11, 0x30
|
||||
.equ CsR12, 0x34
|
||||
.equ CsSp, 0x38
|
||||
.equ CsLr, 0x3C
|
||||
.equ CsPc, 0x40
|
||||
.equ CsPsr, 0x44
|
||||
|
||||
#else
|
||||
|
||||
/*
|
||||
|
|
|
@ -115,3 +115,16 @@ KeFlushTb(VOID)
|
|||
//
|
||||
KeArmFlushTlb();
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KiSaveProcessorControlState(OUT PKPROCESSOR_STATE ProcessorState)
|
||||
{
|
||||
//
|
||||
// Save some critical stuff we use
|
||||
//
|
||||
ProcessorState->SpecialRegisters.ControlRegister = KeArmControlRegisterGet();
|
||||
ProcessorState->SpecialRegisters.LockdownRegister = KeArmLockdownRegisterGet();
|
||||
ProcessorState->SpecialRegisters.CacheRegister = KeArmCacheRegisterGet();
|
||||
ProcessorState->SpecialRegisters.StatusRegister = KeArmStatusRegisterGet();
|
||||
}
|
||||
|
|
|
@ -37,7 +37,6 @@ GENERATE_ARM_STUB RtlInitializeContext
|
|||
//
|
||||
// Internal Ke Arch-Specific Helpers
|
||||
//
|
||||
GENERATE_ARM_STUB KiSaveProcessorControlState
|
||||
GENERATE_ARM_STUB KiInitializeUserApc
|
||||
GENERATE_ARM_STUB KeDisableInterrupts
|
||||
GENERATE_ARM_STUB KiDispatchException
|
||||
|
@ -51,7 +50,6 @@ GENERATE_ARM_STUB KiApcInterrupt
|
|||
GENERATE_ARM_STUB KiPassiveRelease
|
||||
GENERATE_ARM_STUB KiInterruptTemplate
|
||||
GENERATE_ARM_STUB KiUnexpectedInterrupt
|
||||
GENERATE_ARM_STUB RtlCaptureContext
|
||||
GENERATE_ARM_STUB RtlGetCallersAddress
|
||||
GENERATE_ARM_STUB RtlUnwind
|
||||
GENERATE_ARM_STUB RtlpGetExceptionAddress
|
||||
|
|
|
@ -402,15 +402,19 @@ KiDataAbortHandler(IN PKTRAP_FRAME TrapFrame)
|
|||
//
|
||||
// Check if this is a page fault
|
||||
//
|
||||
if (KeArmFaultStatusRegisterGet() == 21 || KeArmFaultStatusRegisterGet() == 23)
|
||||
if ((KeArmFaultStatusRegisterGet() == 21) ||
|
||||
(KeArmFaultStatusRegisterGet() == 23))
|
||||
{
|
||||
Status = MmAccessFault(FALSE,
|
||||
Address,
|
||||
KernelMode,
|
||||
TrapFrame);
|
||||
//
|
||||
// Handle the fault
|
||||
//
|
||||
Status = MmAccessFault(FALSE, Address, KernelMode, TrapFrame);
|
||||
if (Status == STATUS_SUCCESS) return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// We don't handle this yet
|
||||
//
|
||||
UNIMPLEMENTED;
|
||||
while (TRUE);
|
||||
return STATUS_SUCCESS;
|
||||
|
@ -439,7 +443,7 @@ KiSystemService(IN PKTHREAD Thread,
|
|||
// Get the system call ID
|
||||
//
|
||||
Id = Instruction & 0xFFFFF;
|
||||
DPRINT1("[SWI] (%x) %p (%d) \n", Id, Thread, Thread->PreviousMode);
|
||||
//DPRINT1("[SWI] (%x) %p (%d) \n", Id, Thread, Thread->PreviousMode);
|
||||
|
||||
//
|
||||
// Get the descriptor table
|
||||
|
@ -495,7 +499,6 @@ KiSystemService(IN PKTHREAD Thread,
|
|||
//
|
||||
// Copy them into the kernel stack
|
||||
//
|
||||
DPRINT1("Argument: %p\n", *Argument);
|
||||
Arguments[i] = *Argument;
|
||||
Argument++;
|
||||
}
|
||||
|
@ -536,7 +539,6 @@ KiSystemService(IN PKTHREAD Thread,
|
|||
//
|
||||
// Copy into kernel stack
|
||||
//
|
||||
DPRINT1("Argument: %p\n", *Argument);
|
||||
Arguments[i] = *Argument;
|
||||
Argument++;
|
||||
}
|
||||
|
@ -546,7 +548,7 @@ KiSystemService(IN PKTHREAD Thread,
|
|||
// Do the system call and save result in EAX
|
||||
//
|
||||
TrapFrame->R0 = KiSystemCall(SystemCall, Arguments, ArgumentCount);
|
||||
DPRINT1("Returned: %lx\n", TrapFrame->R0);
|
||||
//DPRINT1("Returned: %lx\n", TrapFrame->R0);
|
||||
}
|
||||
|
||||
VOID
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue