Viewing file: vm86.h (2.13 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _ASM_X86_VM86_H #define _ASM_X86_VM86_H
#include <asm/ptrace.h> #include <uapi/asm/vm86.h>
/* * This is the (kernel) stack-layout when we have done a "SAVE_ALL" from vm86 * mode - the main change is that the old segment descriptors aren't * useful any more and are forced to be zero by the kernel (and the * hardware when a trap occurs), and the real segment descriptors are * at the end of the structure. Look at ptrace.h to see the "normal" * setup. For user space layout see 'struct vm86_regs' above. */
struct kernel_vm86_regs { /* * normal regs, with special meaning for the segment descriptors.. */ struct pt_regs pt; /* * these are specific to v86 mode: */ unsigned short es, __esh; unsigned short ds, __dsh; unsigned short fs, __fsh; unsigned short gs, __gsh; };
struct vm86 { struct vm86plus_struct __user *user_vm86; struct pt_regs regs32; unsigned long veflags; unsigned long veflags_mask; unsigned long saved_sp0;
unsigned long flags; unsigned long cpu_type; struct revectored_struct int_revectored; struct revectored_struct int21_revectored; struct vm86plus_info_struct vm86plus; };
#ifdef CONFIG_VM86
void handle_vm86_fault(struct kernel_vm86_regs *, long); int handle_vm86_trap(struct kernel_vm86_regs *, long, int); void save_v86_state(struct kernel_vm86_regs *, int);
struct task_struct;
#define free_vm86(t) do { \ struct thread_struct *__t = (t); \ if (__t->vm86 != NULL) { \ kfree(__t->vm86); \ __t->vm86 = NULL; \ } \ } while (0)
/* * Support for VM86 programs to request interrupts for * real mode hardware drivers: */ #define FIRST_VM86_IRQ 3 #define LAST_VM86_IRQ 15
static inline int invalid_vm86_irq(int irq) { return irq < FIRST_VM86_IRQ || irq > LAST_VM86_IRQ; }
void release_vm86_irqs(struct task_struct *);
#else
#define handle_vm86_fault(a, b) #define release_vm86_irqs(a)
static inline int handle_vm86_trap(struct kernel_vm86_regs *a, long b, int c) { return 0; }
static inline void save_v86_state(struct kernel_vm86_regs *a, int b) { }
#define free_vm86(t) do { } while(0)
#endif /* CONFIG_VM86 */
#endif /* _ASM_X86_VM86_H */
|