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.


PMU Host Interface and initial implementation for Linux and AMD/Intel
[palacios.git] / linux_module / palacios.h
index e57fbd4..99ef5ef 100644 (file)
 #define V3_FREE_GUEST 13
 
 #define V3_ADD_MEMORY 50
+#define V3_RESET_MEMORY 51
+
+#define V3_ADD_PCI_HW_DEV 55
+#define V3_ADD_PCI_USER_DEV 56
 
 /* VM Specific IOCTLs */
 #define V3_VM_CONSOLE_CONNECT 20
@@ -31,6 +35,9 @@
 
 #define V3_VM_MOVE_CORE 33
 
+#define V3_VM_SEND    34
+#define V3_VM_RECEIVE 35
+
 #define V3_VM_FB_INPUT 257
 #define V3_VM_FB_QUERY 258
 
@@ -66,6 +73,19 @@ struct v3_chkpt_info {
 } __attribute__((packed));
 
 
+struct v3_hw_pci_dev {
+    char name[128];
+    unsigned int bus;
+    unsigned int dev;
+    unsigned int func;
+} __attribute__((packed));
+
+struct v3_user_pci_dev {
+    char name[128];
+    unsigned short vendor_id;
+    unsigned short dev_id;
+} __attribute__((packed));
+
 
 
 void * trace_malloc(size_t size, gfp_t flags);
@@ -94,13 +114,37 @@ struct v3_guest {
 
 
 
-int palacios_vmm_init( void );
+int palacios_vmm_init( char *options );
 int palacios_vmm_exit( void );
 
 
-// Exported stubs, for use in other palacios components, like vnet
-void         palacios_print(const char *fmt, ...);
+// This is how a component finds the proc dir we are using for global state
+struct proc_dir_entry *palacios_get_procdir(void);
+
+// Selected exported stubs, for use in other palacios components, like vnet
+// The idea is that everything uses the same stubs
+void  palacios_print_scoped(void *vm, int vcore, const char *fmt, ...);
+#define palacios_print(...) palacios_print_scoped(0,-1, __VA_ARGS__)
+void *palacios_allocate_pages(int num_pages, unsigned int alignment);
+void  palacios_free_pages(void *page_addr, int num_pages);
+void *palacios_alloc(unsigned int size);
+void *palacios_alloc_extended(unsigned int size, unsigned int flags);
+void  palacios_free(void *);
+void *palacios_vaddr_to_paddr(void *vaddr);
+void *palacios_paddr_to_vaddr(void *paddr);
+void *palacios_start_kernel_thread(int (*fn)(void * arg), void *arg, char *thread_name);
+void *palacios_start_thread_on_cpu(int cpu_id, int (*fn)(void * arg), void *arg, char *thread_name);
+int   palacios_move_thread_to_cpu(int new_cpu_id, void *thread_ptr);
+void  palacios_yield_cpu(void);
+void  palacios_yield_cpu_timed(unsigned int us);
 unsigned int palacios_get_cpu(void);
+unsigned int palacios_get_cpu_khz(void);
+void *palacios_mutex_alloc(void);
+void  palacios_mutex_free(void *mutex);
+void  palacios_mutex_lock(void *mutex, int must_spin);
+void  palacios_mutex_unlock(void *mutex);
+void *palacios_mutex_lock_irqsave(void *mutex, int must_spin);
+void  palacios_mutex_unlock_irqrestore(void *mutex, void *flags);
 
 
 
@@ -118,7 +162,7 @@ unsigned int palacios_get_cpu(void);
 // The following macros are for printing in the linux module itself, even before
 // Palacios is initialized and after it it deinitialized
 // All printk's in linux_module use these macros, for easier control
-#define ERROR(fmt, args...) printk((KERN_ERR "palacios (pcore %u): " fmt), palacios_get_cpu(), ##args)
+#define ERROR(fmt, args...) printk((KERN_ERR "palacios (pcore %u) %s(%d): " fmt), palacios_get_cpu(), __FILE__, __LINE__, ##args)
 #define WARNING(fmt, args...) printk((KERN_WARNING "palacios (pcore %u): " fmt), palacios_get_cpu(), ##args)
 #define NOTICE(fmt, args...) printk((KERN_NOTICE "palacios (pcore %u): " fmt), palacios_get_cpu(), ##args)
 #define INFO(fmt, args...) printk((KERN_INFO "palacios (pcore %u): " fmt), palacios_get_cpu(), ##args)