]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/boot/i386/btx/lib/btxv86.h
Re-sync loader.mk and ficl.mk to where they should be
[FreeBSD/FreeBSD.git] / sys / boot / i386 / btx / lib / btxv86.h
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$
18  */
19
20 #ifndef _BTXV86_H_
21 #define _BTXV86_H_
22
23 #include <sys/types.h>
24 #include <machine/psl.h>
25
26 /*
27  * Memory buffer space for real mode IO.
28  * Just one page is not much, but the space is rather limited.
29  * See ../btx/btx.S for details.
30  */
31 #define V86_IO_BUFFER           0x8000
32 #define V86_IO_BUFFER_SIZE      0x1000
33
34 #define V86_ADDR   0x10000      /* Segment:offset address */
35 #define V86_CALLF  0x20000      /* Emulate far call */
36 #define V86_FLAGS  0x40000      /* Return flags */
37
38 struct __v86 {
39     uint32_t ctl;               /* Control flags */
40     uint32_t addr;              /* Interrupt number or address */
41     uint32_t es;                /* V86 ES register */
42     uint32_t ds;                /* V86 DS register */
43     uint32_t fs;                /* V86 FS register */
44     uint32_t gs;                /* V86 GS register */
45     uint32_t eax;               /* V86 EAX register */
46     uint32_t ecx;               /* V86 ECX register */
47     uint32_t edx;               /* V86 EDX register */
48     uint32_t ebx;               /* V86 EBX register */
49     uint32_t efl;               /* V86 eflags register */
50     uint32_t ebp;               /* V86 EBP register */
51     uint32_t esi;               /* V86 ESI register */
52     uint32_t edi;               /* V86 EDI register */
53 };
54
55 extern struct __v86 __v86;      /* V86 interface structure */
56 void __v86int(void);
57
58 #define v86     __v86
59 #define v86int  __v86int
60
61 extern u_int32_t        __base;
62 extern u_int32_t        __args;
63
64 #define PTOV(pa)        ((caddr_t)(pa) - __base)
65 #define VTOP(va)        ((vm_offset_t)(va) + __base)
66 #define VTOPSEG(va)     (u_int16_t)(VTOP((caddr_t)va) >> 4)
67 #define VTOPOFF(va)     (u_int16_t)(VTOP((caddr_t)va) & 0xf)
68
69 #define V86_CY(x)       ((x) & PSL_C)
70 #define V86_ZR(x)       ((x) & PSL_Z)
71
72 void __exit(int) __attribute__((__noreturn__));
73 void __exec(caddr_t, ...);
74
75 #endif /* !_BTXV86_H_ */