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