Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/usr.sbin/bhyve/mem.h
105241 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2012 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 _MEM_H_
30
#define _MEM_H_
31
32
#include <sys/linker_set.h>
33
34
struct vcpu;
35
36
typedef int (*mem_func_t)(struct vcpu *vcpu, int dir, uint64_t addr,
37
int size, uint64_t *val, void *arg1, long arg2);
38
39
struct mem_range {
40
const char *name;
41
int flags;
42
mem_func_t handler;
43
void *arg1;
44
long arg2;
45
uint64_t base;
46
uint64_t size;
47
};
48
#define MEM_F_READ 0x1
49
#define MEM_F_WRITE 0x2
50
#define MEM_F_RW 0x3
51
#define MEM_F_IMMUTABLE 0x4 /* mem_range cannot be unregistered */
52
53
void init_mem(int ncpu);
54
int emulate_mem(struct vcpu *vcpu, uint64_t paddr, struct vie *vie,
55
struct vm_guest_paging *paging);
56
int mmio_handle_non_backed_mem(struct vcpu *vcpu __unused, uint64_t paddr,
57
struct mem_range **mr_paramp);
58
59
int read_mem(struct vcpu *vpu, uint64_t gpa, uint64_t *rval, int size);
60
int register_mem(struct mem_range *memp);
61
int register_mem_fallback(struct mem_range *memp);
62
int unregister_mem(struct mem_range *memp);
63
int write_mem(struct vcpu *vcpu, uint64_t gpa, uint64_t wval, int size);
64
65
#endif /* _MEM_H_ */
66
67