xref: /dragonfly/stand/boot/pc32/btx/lib/btxv86.h (revision 479ab7f0492f2a51b48e8537e4f1dc686fc6014b)
1 /*
2  * Copyright (c) 1998 Robert Nordier
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are freely
6  * permitted provided that the above copyright notice and this
7  * paragraph and the following disclaimer are duplicated in all
8  * such forms.
9  *
10  * This software is provided "AS IS" and without any express or
11  * implied warranties, including, without limitation, the implied
12  * warranties of merchantability and fitness for a particular
13  * purpose.
14  */
15 
16 /*
17  * $FreeBSD: src/sys/boot/i386/btx/lib/btxv86.h,v 1.5 1999/08/28 00:40:08 peter Exp $
18  */
19 
20 #ifndef _BTXV86_H_
21 #define _BTXV86_H_
22 
23 #include <sys/types.h>
24 #include <machine/types.h>    /* XXX for vm_offset_t */
25 
26 #define V86_ADDR   0x10000    /* Segment:offset address */
27 #define V86_CALLF  0x20000    /* Emulate far call */
28 #define V86_FLAGS  0x40000    /* Return flags */
29 
30 struct __v86 {
31     uint32_t ctl;             /* Control flags */
32     uint32_t addr;            /* Interrupt number or address */
33     uint32_t es;              /* V86 ES register */
34     uint32_t ds;              /* V86 DS register */
35     uint32_t fs;              /* V86 FS register */
36     uint32_t gs;              /* V86 GS register */
37     uint32_t eax;             /* V86 EAX register */
38     uint32_t ecx;             /* V86 ECX register */
39     uint32_t edx;             /* V86 EDX register */
40     uint32_t ebx;             /* V86 EBX register */
41     uint32_t efl;             /* V86 eflags register */
42     uint32_t ebp;             /* V86 EBP register */
43     uint32_t esi;             /* V86 ESI register */
44     uint32_t edi;             /* V86 EDI register */
45 };
46 
47 extern struct __v86 __v86;    /* V86 interface structure */
48 void __v86int(void);
49 
50 #define v86         __v86
51 #define v86int      __v86int
52 
53 extern u_int32_t    __base;
54 extern u_int32_t    __args;
55 
56 #define   PTOV(pa)  ((caddr_t)(pa) - __base)
57 #define   VTOP(va)  ((vm_offset_t)(va) + __base)
58 #define   VTOPSEG(va)         (u_int16_t)(VTOP((caddr_t)va) >> 4)
59 #define   VTOPOFF(va)         (u_int16_t)(VTOP((caddr_t)va) & 0xf)
60 
61 void __exit(int) __attribute__((__noreturn__));
62 void __exec(caddr_t, ...);
63 
64 #endif /* !_BTXV86_H_ */
65