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.


*** empty log message ***
Jack Lange [Fri, 11 Apr 2008 22:46:46 +0000 (22:46 +0000)]
palacios/include/palacios/vmm_io.h
palacios/src/palacios/vmm_io.c

index df58367..14c2e76 100644 (file)
@@ -37,7 +37,7 @@ typedef struct vmm_io_map {
 
 void add_io_hook(vmm_io_map_t * io_map, vmm_io_hook_t * io_hook);
 
-
+void remove_io_hook(vmm_io_map_t * io_map, vmm_io_hook_t * io_hook);
 
 vmm_io_hook_t * get_io_hook(vmm_io_map_t * io_map, uint_t port);
 
@@ -48,6 +48,8 @@ void hook_io_port(vmm_io_map_t * io_map, uint_t port,
                  int (*write)(ushort_t port, void * src, uint_t length, void * priv_data), 
                  void * priv_data );
 
+int unhook_io_port(vmm_io_map_t * io_map, uint_t port);
+
 void init_vmm_io_map(vmm_io_map_t * io_map);
 
 void PrintDebugIOMap(vmm_io_map_t * io_map);
index bd5648d..350eb29 100644 (file)
@@ -51,6 +51,25 @@ void add_io_hook(vmm_io_map_t * io_map, vmm_io_hook_t * io_hook) {
   }
 }
 
+void remove_io_hook(vmm_io_map_t * io_map, vmm_io_hook_t * io_hook) {
+  if (io_map->head == io_hook) {
+    io_map->head = io_hook->next;
+  } else if (io_hook->prev) {
+    io_hook->prev->next = io_hook->next;
+  } else {
+    // data corruption failure
+  }
+  
+  if (io_hook->next) {
+    io_hook->next->prev = io_hook->prev;
+  }
+
+  io_map->num_ports--;
+
+  return;
+}
+
+
 void hook_io_port(vmm_io_map_t * io_map, uint_t port, 
                  int (*read)(ushort_t port, void * dst, uint_t length, void * priv_data),
                  int (*write)(ushort_t port, void * src, uint_t length, void * priv_data), 
@@ -70,6 +89,17 @@ void hook_io_port(vmm_io_map_t * io_map, uint_t port,
   return;
 }
 
+int unhook_io_port(vmm_io_map_t * io_map, uint_t port) {
+  vmm_io_hook_t * hook = get_io_hook(io_map, port);
+
+  if (hook == NULL) {
+    return -1;
+  }
+
+  remove_io_hook(io_map, hook);
+  return 0;
+}
+
 
 vmm_io_hook_t * get_io_hook(vmm_io_map_t * io_map, uint_t port) {
   vmm_io_hook_t * tmp_hook;