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: stable/11/stand/i386/btx/lib/btxv86.h 332154 2018-04-06 21:37:25Z kevans $
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
38struct __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
55extern struct __v86 __v86;	/* V86 interface structure */
56void __v86int(void);
57
58#define v86	__v86
59#define v86int	__v86int
60
61extern uint32_t		__base;
62extern uint32_t		__args;
63
64#define	PTOV(pa)	((caddr_t)(pa) - __base)
65#define	VTOP(va)	((vm_offset_t)(va) + __base)
66#define	VTOPSEG(va)	(uint16_t)(VTOP((caddr_t)va) >> 4)
67#define	VTOPOFF(va)	(uint16_t)(VTOP((caddr_t)va) & 0xf)
68
69#define	V86_CY(x)	((x) & PSL_C)
70#define	V86_ZR(x)	((x) & PSL_Z)
71
72void __exit(int) __attribute__((__noreturn__));
73void __exec(caddr_t, ...);
74
75#endif /* !_BTXV86_H_ */
76