root/arch/x86/include/asm/vm86.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. invalid_vm86_irq
  2. handle_vm86_trap
  3. save_v86_state

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _ASM_X86_VM86_H
   3 #define _ASM_X86_VM86_H
   4 
   5 #include <asm/ptrace.h>
   6 #include <uapi/asm/vm86.h>
   7 
   8 /*
   9  * This is the (kernel) stack-layout when we have done a "SAVE_ALL" from vm86
  10  * mode - the main change is that the old segment descriptors aren't
  11  * useful any more and are forced to be zero by the kernel (and the
  12  * hardware when a trap occurs), and the real segment descriptors are
  13  * at the end of the structure. Look at ptrace.h to see the "normal"
  14  * setup. For user space layout see 'struct vm86_regs' above.
  15  */
  16 
  17 struct kernel_vm86_regs {
  18 /*
  19  * normal regs, with special meaning for the segment descriptors..
  20  */
  21         struct pt_regs pt;
  22 /*
  23  * these are specific to v86 mode:
  24  */
  25         unsigned short es, __esh;
  26         unsigned short ds, __dsh;
  27         unsigned short fs, __fsh;
  28         unsigned short gs, __gsh;
  29 };
  30 
  31 struct vm86 {
  32         struct vm86plus_struct __user *user_vm86;
  33         struct pt_regs regs32;
  34         unsigned long veflags;
  35         unsigned long veflags_mask;
  36         unsigned long saved_sp0;
  37 
  38         unsigned long flags;
  39         unsigned long screen_bitmap;
  40         unsigned long cpu_type;
  41         struct revectored_struct int_revectored;
  42         struct revectored_struct int21_revectored;
  43         struct vm86plus_info_struct vm86plus;
  44 };
  45 
  46 #ifdef CONFIG_VM86
  47 
  48 void handle_vm86_fault(struct kernel_vm86_regs *, long);
  49 int handle_vm86_trap(struct kernel_vm86_regs *, long, int);
  50 void save_v86_state(struct kernel_vm86_regs *, int);
  51 
  52 struct task_struct;
  53 
  54 #define free_vm86(t) do {                               \
  55         struct thread_struct *__t = (t);                \
  56         if (__t->vm86 != NULL) {                        \
  57                 kfree(__t->vm86);                       \
  58                 __t->vm86 = NULL;                       \
  59         }                                               \
  60 } while (0)
  61 
  62 /*
  63  * Support for VM86 programs to request interrupts for
  64  * real mode hardware drivers:
  65  */
  66 #define FIRST_VM86_IRQ           3
  67 #define LAST_VM86_IRQ           15
  68 
  69 static inline int invalid_vm86_irq(int irq)
  70 {
  71         return irq < FIRST_VM86_IRQ || irq > LAST_VM86_IRQ;
  72 }
  73 
  74 void release_vm86_irqs(struct task_struct *);
  75 
  76 #else
  77 
  78 #define handle_vm86_fault(a, b)
  79 #define release_vm86_irqs(a)
  80 
  81 static inline int handle_vm86_trap(struct kernel_vm86_regs *a, long b, int c)
  82 {
  83         return 0;
  84 }
  85 
  86 static inline void save_v86_state(struct kernel_vm86_regs *a, int b) { }
  87 
  88 #define free_vm86(t) do { } while(0)
  89 
  90 #endif /* CONFIG_VM86 */
  91 
  92 #endif /* _ASM_X86_VM86_H */

/* [<][>][^][v][top][bottom][index][help] */