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.


Minor PMU bugfix
[palacios.git] / linux_module / palacios.h
index 11d3314..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
 
 
 #define V3_VM_KSTREAM_USER_CONNECT 11245
 
-// KERN_EMERG    "<0>"  /* system is unusable               */
-// KERN_ALERT    "<1>"  /* action must be taken immediately */
-// KERN_CRIT     "<2>"  /* critical conditions              */
-// KERN_ERR      "<3>"  /* error conditions                 */
-// KERN_WARNING  "<4>"  /* warning conditions               */
-// KERN_NOTICE   "<5>"  /* normal but significant condition */
-// KERN_INFO     "<6>"  /* informational                    */
-// KERN_DEBUG    "<7>"  /* debug-level messages             */
-
-// All 'printk's should be changed to one of these macros, for easier control
-#define ERROR(fmt, args...) printk((KERN_ERR "palacios: " fmt), ##args)
-#define WARNING(fmt, args...) printk((KERN_WARNING "palacios: " fmt), ##args)
-#define NOTICE(fmt, args...) printk((KERN_NOTICE "palacios: " fmt), ##args)
-#define INFO(fmt, args...) printk((KERN_INFO "palacios: " fmt), ##args)
-#define DEBUG(fmt, args...) printk((KERN_DEBUG "palacios: " fmt), ##args)
-
-// Turn this on for unprefaced output
-#define V3_PRINTK_OLD_STYLE_OUTPUT 0
-// Maximum length output from printk
-#define V3_PRINTK_BUF_SIZE 1024
 
 struct v3_guest_img {
     unsigned long long size;
@@ -70,7 +57,12 @@ struct v3_mem_region {
     unsigned long long num_pages;
 } __attribute__((packed));
 
-struct v3_core_move_cmd{
+struct v3_debug_cmd {
+    unsigned int core; 
+    unsigned int cmd;
+} __attribute__((packed));
+
+struct v3_core_move_cmd {
     unsigned short vcore_id;
     unsigned short pcore_id;
 } __attribute__((packed));
@@ -81,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);
@@ -109,9 +114,59 @@ struct v3_guest {
 
 
 
-int palacios_vmm_init( void );
+int palacios_vmm_init( char *options );
 int palacios_vmm_exit( void );
 
 
+// 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);
+
+
+
+// Palacios Printing Support
+
+// These macros affect how palacios_print will generate output
+// Turn this on for unprefaced output from palacios_print
+#define V3_PRINTK_OLD_STYLE_OUTPUT 0
+// Maximum length output from palacios_print
+#define V3_PRINTK_BUF_SIZE 1024
+// Turn this on to check if new-style output for palacios_print  contains only 7-bit chars
+#define V3_PRINTK_CHECK_7BIT 1
+
+//
+// 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) %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)
+#define DEBUG(fmt, args...) printk((KERN_DEBUG "palacios (pcore %u): " fmt), palacios_get_cpu(), ##args)
+
 
 #endif