3 * This file is part of the Palacios Virtual Machine Monitor developed
4 * by the V3VEE Project with funding from the United States National
5 * Science Foundation and the Department of Energy.
7 * The V3VEE Project is a joint project between Northwestern University
8 * and the University of New Mexico. You can find out more at
11 * Copyright (c) 2008, Peter Dinda <pdinda@northwestern.edu>
12 * Copyright (c) 2008, Jack Lange <jarusl@cs.northwestern.edu>
13 * Copyright (c) 2008, The V3VEE Project <http://www.v3vee.org>
14 * All rights reserved.
16 * Author: Peter Dinda <pdinda@northwestern.edu>
17 * Author: Jack Lange <jarusl@cs.northwestern.edu>
19 * This is free software. You are permitted to use,
20 * redistribute, and modify it as specified in the file "V3VEE_LICENSE".
27 #include <palacios/vm_dev.h>
30 // The generic device simply hooks ranges of ports, addresses, and irqs
31 // if they are not already hooked
33 // for each hooked port, it simply executes reads and writes and the same physical port,
34 // for each hooked memory range, it simply executes reads and writes on the same
35 // physical memory addresses
36 // for each hooked irq, it simply injects the irq into the VM
38 // These operations are also logged to serial (optionaly)
40 // If you attach a generic device *last*, you can capture all ops that are not
41 // already hooked, and capture a log of VM activity with respect to them.
43 // The effects of using the generic device should be identical to
44 // doing passthrough I/O, but with logging, and, of course, slower
48 #define GENERIC_PRINT_AND_PASSTHROUGH 0
49 #define GENERIC_PRINT_AND_IGNORE 1
51 // A port range is low..high, inclusive, third value is one of the above
52 typedef uint_t generic_port_range_type[3];
53 // A memory range is low..high, inclusive, flags
54 typedef void *generic_address_range_type[3];
55 // An interrupt ory map range is low..high, inclusive, flags
56 typedef uint_t generic_irq_range_type[3];
58 // The lists given are null terminated
59 struct vm_device *create_generic(generic_port_range_type port_ranges[],
60 generic_address_range_type addess_ranges[],
61 generic_irq_range_type irq_ranges[]);