Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/usr.sbin/bhyve/amd64/inout.h
107609 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2011 NetApp, Inc.
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
*
16
* THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND
17
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
* ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE
20
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26
* SUCH DAMAGE.
27
*/
28
29
#ifndef _INOUT_H_
30
#define _INOUT_H_
31
32
#include <sys/linker_set.h>
33
34
struct vcpu;
35
struct vmctx;
36
struct vm_exit;
37
38
/*
39
* inout emulation handlers return 0 on success and -1 on failure.
40
*/
41
typedef int (*inout_func_t)(struct vmctx *ctx, int in, int port,
42
int bytes, uint32_t *eax, void *arg);
43
44
struct inout_port {
45
const char *name;
46
int port;
47
int size;
48
int flags;
49
inout_func_t handler;
50
void *arg;
51
};
52
#define IOPORT_F_IN 0x1
53
#define IOPORT_F_OUT 0x2
54
#define IOPORT_F_INOUT (IOPORT_F_IN | IOPORT_F_OUT)
55
56
/*
57
* The following flags are used internally and must not be used by
58
* device models.
59
*/
60
#define IOPORT_F_DEFAULT 0x80000000 /* claimed by default handler */
61
62
#define INOUT_PORT(name, port, flags, handler) \
63
static struct inout_port __CONCAT(__inout_port, __LINE__) = { \
64
#name, \
65
(port), \
66
1, \
67
(flags), \
68
(handler), \
69
0 \
70
}; \
71
DATA_SET(inout_port_set, __CONCAT(__inout_port, __LINE__))
72
73
void init_inout(void);
74
int emulate_inout(struct vmctx *ctx, struct vcpu *vcpu, struct vm_exit *vmexit);
75
int register_inout(struct inout_port *iop);
76
int unregister_inout(struct inout_port *iop);
77
78
#endif /* _INOUT_H_ */
79
80