Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


fixed CLGI window
[palacios.git] / palacios / src / devices / README
1 This is how devices are hooked into the system:
2 This is very similar to Linux Modules and device drivers.
3
4
5 Devices are kept in their own directory structure: 
6 SOURCE => src/devices
7 HEADERS => include/devices
8
9
10 Each device implements the following:
11  * a create_[device] function that returns a (struct vm_device *).
12  * a set of operations found in (struct vm_device_ops).
13         (currently only init and deinit are called, the rest are not fully thought out...)
14
15 The control flow goes like this:
16
17 1. The VMM calls create_[device]() which returns a (struct vm_device *). 
18
19 2. This function calls create_device(char *name, struct vm_device_ops * ops, void * private_data);
20  * The arguments are device specific, and the pointer is returned to the VMM. No instance 
21         specific initialization should be done here
22
23 3. The VMM then calls attach_device(struct guest_info * vm, struct vm_device * dev) to associate the 
24         device with a virtual machine
25
26 4. attach_device then calls the ops->init() function found in the (struct vm_device *)
27  * This init function is where all the instance specific initialization is done. A pointer to the virtual machine
28         the device is associated with is stored in vm_device->vm.
29  * Any event hooks should be done here.
30
31
32
33 Disconnection goes like this: 
34
35 1. The VMM calls unattach_device(struct vm_device * dev)
36
37 2. unattach_device calls the ops->deinit() function found in the (struct vm_device *)
38  * All the instance specific deinitialization should be done here
39  * Any event hooks that were taken should be released
40
41 3. The VMM then calls free_device(struct vm_device * dev);