139165Srnordier/*
239165Srnordier * Copyright (c) 1998 Robert Nordier
339165Srnordier * All rights reserved.
439165Srnordier *
539165Srnordier * Redistribution and use in source and binary forms are freely
639165Srnordier * permitted provided that the above copyright notice and this
739165Srnordier * paragraph and the following disclaimer are duplicated in all
839165Srnordier * such forms.
939165Srnordier *
1039165Srnordier * This software is provided "AS IS" and without any express or
1139165Srnordier * implied warranties, including, without limitation, the implied
1239165Srnordier * warranties of merchantability and fitness for a particular
1339165Srnordier * purpose.
1439165Srnordier */
1539165Srnordier
1639165Srnordier/*
1750477Speter * $FreeBSD: stable/11/stand/i386/btx/lib/btxv86.h 332154 2018-04-06 21:37:25Z kevans $
1839165Srnordier */
1939165Srnordier
2039165Srnordier#ifndef _BTXV86_H_
2139165Srnordier#define _BTXV86_H_
2239165Srnordier
2339165Srnordier#include <sys/types.h>
24226746Sjhb#include <machine/psl.h>
2539165Srnordier
26329099Skevans/*
27329099Skevans * Memory buffer space for real mode IO.
28329099Skevans * Just one page is not much, but the space is rather limited.
29329099Skevans * See ../btx/btx.S for details.
30329099Skevans */
31329099Skevans#define	V86_IO_BUFFER		0x8000
32329099Skevans#define	V86_IO_BUFFER_SIZE	0x1000
33329099Skevans
3439165Srnordier#define V86_ADDR   0x10000	/* Segment:offset address */
3539165Srnordier#define V86_CALLF  0x20000	/* Emulate far call */
3639165Srnordier#define V86_FLAGS  0x40000	/* Return flags */
3739165Srnordier
3839165Srnordierstruct __v86 {
3939165Srnordier    uint32_t ctl;		/* Control flags */
4039165Srnordier    uint32_t addr;		/* Interrupt number or address */
4139165Srnordier    uint32_t es;		/* V86 ES register */
4239165Srnordier    uint32_t ds;		/* V86 DS register */
4339165Srnordier    uint32_t fs;		/* V86 FS register */
4439165Srnordier    uint32_t gs;		/* V86 GS register */
4539165Srnordier    uint32_t eax;		/* V86 EAX register */
4639165Srnordier    uint32_t ecx;		/* V86 ECX register */
4739165Srnordier    uint32_t edx;		/* V86 EDX register */
4839165Srnordier    uint32_t ebx;		/* V86 EBX register */
4939165Srnordier    uint32_t efl;		/* V86 eflags register */
5039165Srnordier    uint32_t ebp;		/* V86 EBP register */
5139165Srnordier    uint32_t esi;		/* V86 ESI register */
5239165Srnordier    uint32_t edi;		/* V86 EDI register */
5339165Srnordier};
5439165Srnordier
5539165Srnordierextern struct __v86 __v86;	/* V86 interface structure */
5639441Smsmithvoid __v86int(void);
5739165Srnordier
5839441Smsmith#define v86	__v86
5939441Smsmith#define v86int	__v86int
6039441Smsmith
61332154Skevansextern uint32_t		__base;
62332154Skevansextern uint32_t		__args;
6339441Smsmith
6439901Smsmith#define	PTOV(pa)	((caddr_t)(pa) - __base)
6539901Smsmith#define	VTOP(va)	((vm_offset_t)(va) + __base)
66332154Skevans#define	VTOPSEG(va)	(uint16_t)(VTOP((caddr_t)va) >> 4)
67332154Skevans#define	VTOPOFF(va)	(uint16_t)(VTOP((caddr_t)va) & 0xf)
6839441Smsmith
69226746Sjhb#define	V86_CY(x)	((x) & PSL_C)
70226746Sjhb#define	V86_ZR(x)	((x) & PSL_Z)
71226746Sjhb
7239895Smsmithvoid __exit(int) __attribute__((__noreturn__));
7339165Srnordiervoid __exec(caddr_t, ...);
7439165Srnordier
7539165Srnordier#endif /* !_BTXV86_H_ */
76