2 * This file is part of the Palacios Virtual Machine Monitor developed
3 * by the V3VEE Project with funding from the United States National
4 * Science Foundation and the Department of Energy.
6 * The V3VEE Project is a joint project between Northwestern University
7 * and the University of New Mexico. You can find out more at
10 * Copyright (c) 2008, Peter Dinda <pdinda@northwestern.edu>
11 * Copyright (c) 2008, Jack Lange <jarusl@cs.northwestern.edu>
12 * Copyright (c) 2008, The V3VEE Project <http://www.v3vee.org>
13 * All rights reserved.
15 * Author: Peter Dinda <pdinda@northwestern.edu>
16 * Author: Jack Lange <jarusl@cs.northwestern.edu>
18 * This is free software. You are permitted to use,
19 * redistribute, and modify it as specified in the file "V3VEE_LICENSE".
23 #ifndef __DEVICES_GENERIC_H__
24 #define __DEVICES_GENERIC_H__
30 #include <palacios/vm_dev.h>
33 // The generic device simply hooks ranges of ports, addresses, and irqs
34 // if they are not already hooked
36 // for each hooked port, it simply executes reads and writes and the same physical port,
37 // for each hooked memory range, it simply executes reads and writes on the same
38 // physical memory addresses
39 // for each hooked irq, it simply injects the irq into the VM
41 // These operations are also logged to serial (optionaly)
43 // If you attach a generic device *last*, you can capture all ops that are not
44 // already hooked, and capture a log of VM activity with respect to them.
46 // The effects of using the generic device should be identical to
47 // doing passthrough I/O, but with logging, and, of course, slower
51 #define GENERIC_PRINT_AND_PASSTHROUGH 0
52 #define GENERIC_PRINT_AND_IGNORE 1
55 int v3_generic_add_port_range(struct vm_device * dev, uint_t start, uint_t end, uint_t type);
56 int v3_generic_add_mem_range(struct vm_device * dev, void * start, void * end, uint_t type);
57 int v3_generic_add_irq_range(struct vm_device * dev, uint_t start, uint_t end, uint_t type);
59 // The lists given are null terminated
60 struct vm_device * v3_create_generic();