Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /* Things the lguest guest needs to know.  Note: like all lguest interfaces,
  2  * this is subject to wild and random change between versions. */
  3 #ifndef _LINUX_LGUEST_H
  4 #define _LINUX_LGUEST_H
  5 
  6 #ifndef __ASSEMBLY__
  7 #include <linux/time.h>
  8 #include <asm/irq.h>
  9 #include <asm/lguest_hcall.h>
 10 
 11 #define LG_CLOCK_MIN_DELTA      100UL
 12 #define LG_CLOCK_MAX_DELTA      ULONG_MAX
 13 
 14 /*G:032 The second method of communicating with the Host is to via "struct
 15  * lguest_data".  Once the Guest's initialization hypercall tells the Host where
 16  * this is, the Guest and Host both publish information in it. :*/
 17 struct lguest_data
 18 {
 19         /* 512 == enabled (same as eflags in normal hardware).  The Guest
 20          * changes interrupts so often that a hypercall is too slow. */
 21         unsigned int irq_enabled;
 22         /* Fine-grained interrupt disabling by the Guest */
 23         DECLARE_BITMAP(blocked_interrupts, LGUEST_IRQS);
 24 
 25         /* The Host writes the virtual address of the last page fault here,
 26          * which saves the Guest a hypercall.  CR2 is the native register where
 27          * this address would normally be found. */
 28         unsigned long cr2;
 29 
 30         /* Wallclock time set by the Host. */
 31         struct timespec time;
 32 
 33         /* Async hypercall ring.  Instead of directly making hypercalls, we can
 34          * place them in here for processing the next time the Host wants.
 35          * This batching can be quite efficient. */
 36 
 37         /* 0xFF == done (set by Host), 0 == pending (set by Guest). */
 38         u8 hcall_status[LHCALL_RING_SIZE];
 39         /* The actual registers for the hypercalls. */
 40         struct hcall_args hcalls[LHCALL_RING_SIZE];
 41 
 42 /* Fields initialized by the Host at boot: */
 43         /* Memory not to try to access */
 44         unsigned long reserve_mem;
 45         /* KHz for the TSC clock. */
 46         u32 tsc_khz;
 47         /* Page where the top-level pagetable is */
 48         unsigned long pgdir;
 49 
 50 /* Fields initialized by the Guest at boot: */
 51         /* Instruction range to suppress interrupts even if enabled */
 52         unsigned long noirq_start, noirq_end;
 53         /* Address above which page tables are all identical. */
 54         unsigned long kernel_address;
 55         /* The vector to try to use for system calls (0x40 or 0x80). */
 56         unsigned int syscall_vec;
 57 };
 58 extern struct lguest_data lguest_data;
 59 #endif /* __ASSEMBLY__ */
 60 #endif  /* _LINUX_LGUEST_H */
 61 
  This page was automatically generated by the LXR engine.