1*4d1e669cSPeter Grehan /*- 2*4d1e669cSPeter Grehan * Copyright (c) 2012 NetApp, Inc. 3*4d1e669cSPeter Grehan * All rights reserved. 4*4d1e669cSPeter Grehan * 5*4d1e669cSPeter Grehan * Redistribution and use in source and binary forms, with or without 6*4d1e669cSPeter Grehan * modification, are permitted provided that the following conditions 7*4d1e669cSPeter Grehan * are met: 8*4d1e669cSPeter Grehan * 1. Redistributions of source code must retain the above copyright 9*4d1e669cSPeter Grehan * notice, this list of conditions and the following disclaimer. 10*4d1e669cSPeter Grehan * 2. Redistributions in binary form must reproduce the above copyright 11*4d1e669cSPeter Grehan * notice, this list of conditions and the following disclaimer in the 12*4d1e669cSPeter Grehan * documentation and/or other materials provided with the distribution. 13*4d1e669cSPeter Grehan * 14*4d1e669cSPeter Grehan * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND 15*4d1e669cSPeter Grehan * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*4d1e669cSPeter Grehan * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*4d1e669cSPeter Grehan * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE 18*4d1e669cSPeter Grehan * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*4d1e669cSPeter Grehan * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*4d1e669cSPeter Grehan * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*4d1e669cSPeter Grehan * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*4d1e669cSPeter Grehan * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*4d1e669cSPeter Grehan * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*4d1e669cSPeter Grehan * SUCH DAMAGE. 25*4d1e669cSPeter Grehan * 26*4d1e669cSPeter Grehan * $FreeBSD$ 27*4d1e669cSPeter Grehan */ 28*4d1e669cSPeter Grehan 29*4d1e669cSPeter Grehan #ifndef _MEM_H_ 30*4d1e669cSPeter Grehan #define _MEM_H_ 31*4d1e669cSPeter Grehan 32*4d1e669cSPeter Grehan #include <sys/linker_set.h> 33*4d1e669cSPeter Grehan 34*4d1e669cSPeter Grehan struct vmctx; 35*4d1e669cSPeter Grehan 36*4d1e669cSPeter Grehan typedef int (*mem_func_t)(struct vmctx *ctx, int vcpu, int dir, uint64_t addr, 37*4d1e669cSPeter Grehan int size, uint64_t *val, void *arg1, long arg2); 38*4d1e669cSPeter Grehan 39*4d1e669cSPeter Grehan struct mem_range { 40*4d1e669cSPeter Grehan const char *name; 41*4d1e669cSPeter Grehan int flags; 42*4d1e669cSPeter Grehan mem_func_t handler; 43*4d1e669cSPeter Grehan void *arg1; 44*4d1e669cSPeter Grehan long arg2; 45*4d1e669cSPeter Grehan uint64_t base; 46*4d1e669cSPeter Grehan uint64_t size; 47*4d1e669cSPeter Grehan }; 48*4d1e669cSPeter Grehan #define MEM_F_READ 0x1 49*4d1e669cSPeter Grehan #define MEM_F_WRITE 0x2 50*4d1e669cSPeter Grehan #define MEM_F_RW 0x3 51*4d1e669cSPeter Grehan 52*4d1e669cSPeter Grehan void init_mem(void); 53*4d1e669cSPeter Grehan int emulate_mem(struct vmctx *, int vcpu, uint64_t paddr, uint64_t rip, 54*4d1e669cSPeter Grehan uint64_t cr3, int mode); 55*4d1e669cSPeter Grehan 56*4d1e669cSPeter Grehan int register_mem(struct mem_range *memp); 57*4d1e669cSPeter Grehan 58*4d1e669cSPeter Grehan #endif /* _MEM_H_ */ 59