Large partial cleanup of ntoskrnl internal headers, mostly to delete obsoleted or...
[reactos.git] / reactos / ntoskrnl / include / internal / v86m.h
index e9e5acb..e8a7d58 100644 (file)
@@ -1,34 +1,15 @@
 /*
- *  ReactOS kernel
- *  Copyright (C) 2000 David Welch <welch@cwcom.net>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/*
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS Kernel
  * FILE:            ntoskrnl/include/internal/v86m.h
- * PURPOSE:         V86 mode support
- * PROGRAMMER:      David Welch (welch@cwcom.net)
- * UPDATE HISTORY:
- *                  Created 10/12/00
+ * PURPOSE:         V86 Headers
+ * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)
  */
 
+/* INCLUDES ******************************************************************/
 #ifndef __NTOSKRNL_INCLUDE_INTERNAL_V86M_H
 #define __NTOSKRNL_INCLUDE_INTERNAL_V86M_H
 
-#ifndef __ASM__
-
 /* Emulate cli/sti instructions */
 #define KV86M_EMULATE_CLI_STI          (0x1)
 /* Allow the v86 mode code to access i/o ports */
 
 typedef struct _KV86M_REGISTERS
 {
-  /*
-   * General purpose registers
-   */
-
-  ULONG Ebp;
-  ULONG Edi;
-  ULONG Esi;
-  ULONG Edx;
-  ULONG Ecx;
-  ULONG Ebx;
-  ULONG Eax;
-  ULONG Ds;
-  ULONG Es;
-  ULONG Fs;
-  ULONG Gs;
+    /*
+     * General purpose registers
+     */
+    ULONG Ebp;
+    ULONG Edi;
+    ULONG Esi;
+    ULONG Edx;
+    ULONG Ecx;
+    ULONG Ebx;
+    ULONG Eax;
+    ULONG Ds;
+    ULONG Es;
+    ULONG Fs;
+    ULONG Gs;
 
-  /*
-   * Control registers
-   */
-  ULONG Eip;
-  ULONG Cs;
-  ULONG Eflags;
-  ULONG Esp;
-  ULONG Ss;
+    /*
+     * Control registers
+     */
+    ULONG Eip;
+    ULONG Cs;
+    ULONG Eflags;
+    ULONG Esp;
+    ULONG Ss;
 
-  /*
-   * Control structures
-   */
-  ULONG RecoveryAddress;
-  UCHAR RecoveryInstruction[4];
-  ULONG Vif;
-  ULONG Flags;
-  PNTSTATUS PStatus;
+    /*
+     * Control structures
+     */
+    ULONG RecoveryAddress;
+    UCHAR RecoveryInstruction[4];
+    ULONG Vif;
+    ULONG Flags;
+    PNTSTATUS PStatus;
 } KV86M_REGISTERS, *PKV86M_REGISTERS;
 
-NTSTATUS STDCALL
-Ke386CallBios(UCHAR Int, PKV86M_REGISTERS Regs);
+typedef struct _KV86M_TRAP_FRAME
+{
+    KTRAP_FRAME Tf;
 
-#else /* ASSEMBLER */
+    ULONG SavedExceptionStack;
 
-/*
- * Definitions for the offsets of members in the KV86M_REGISTERS
- */
-#define        KV86M_REGISTERS_EBP     (0x0)
-#define        KV86M_REGISTERS_EDI     (0x4)
-#define        KV86M_REGISTERS_ESI     (0x8)
-#define KV86M_REGISTERS_EDX    (0xC)
-#define        KV86M_REGISTERS_ECX     (0x10)
-#define KV86M_REGISTERS_EBX    (0x14)
-#define KV86M_REGISTERS_EAX    (0x18)
-#define        KV86M_REGISTERS_DS      (0x1C)
-#define KV86M_REGISTERS_ES     (0x20)
-#define KV86M_REGISTERS_FS     (0x24)
-#define KV86M_REGISTERS_GS     (0x28)
-#define KV86M_REGISTERS_EIP     (0x2C)
-#define KV86M_REGISTERS_CS      (0x30)
-#define KV86M_REGISTERS_EFLAGS  (0x34)
-#define        KV86M_REGISTERS_ESP     (0x38)
-#define KV86M_REGISTERS_SS     (0x3C)
+    /*
+     * These are put on the top of the stack by the routine that entered
+     * v86 mode so the exception handlers can find the control information
+     */
+    struct _KV86M_REGISTERS* regs;
+    ULONG orig_ebp;
+} KV86M_TRAP_FRAME, *PKV86M_TRAP_FRAME;
+
+NTSTATUS 
+STDCALL
+Ke386CallBios(
+    UCHAR Int, 
+    PKV86M_REGISTERS Regs
+);
 
-#endif /* ASSEMBLER */
+ULONG
+KeV86Exception(
+    ULONG ExceptionNr, 
+    PKTRAP_FRAME Tf, 
+    ULONG address
+);
 
 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_V86M_H */