1 /* (c) 2008, Peter Dinda <pdinda@northwestern.edu> */
2 /* (c) 2008, Jack Lange <jarusl@northwestern.edu> */
3 /* (c) 2008, The V3VEE Project <http://www.v3vee.org> */
9 #include <palacios/vm_dev.h>
12 // The generic device simply hooks ranges of ports, addresses, and irqs
13 // if they are not already hooked
15 // for each hooked port, it simply executes reads and writes and the same physical port,
16 // for each hooked memory range, it simply executes reads and writes on the same
17 // physical memory addresses
18 // for each hooked irq, it simply injects the irq into the VM
20 // These operations are also logged to serial (optionaly)
22 // If you attach a generic device *last*, you can capture all ops that are not
23 // already hooked, and capture a log of VM activity with respect to them.
25 // The effects of using the generic device should be identical to
26 // doing passthrough I/O, but with logging, and, of course, slower
30 #define GENERIC_PRINT_AND_PASSTHROUGH 0
31 #define GENERIC_PRINT_AND_IGNORE 1
34 int v3_generic_add_port_range(struct vm_device * dev, uint_t start, uint_t end, uint_t type);
35 int v3_generic_add_mem_range(struct vm_device * dev, void * start, void * end, uint_t type);
36 int v3_generic_add_irq_range(struct vm_device * dev, uint_t start, uint_t end, uint_t type);
38 // The lists given are null terminated
39 struct vm_device * create_generic();