Merge to Fedora kernel-2.6.18-1.2224_FC5 patched with stable patch-2.6.18.1-vs2.0...
[linux-2.6.git] / drivers / xen / tpmback / common.h
1 /******************************************************************************
2  * drivers/xen/tpmback/common.h
3  */
4
5 #ifndef __NETIF__BACKEND__COMMON_H__
6 #define __NETIF__BACKEND__COMMON_H__
7
8 #include <linux/version.h>
9 #include <linux/module.h>
10 #include <linux/interrupt.h>
11 #include <linux/slab.h>
12 #include <xen/evtchn.h>
13 #include <xen/driver_util.h>
14 #include <xen/interface/grant_table.h>
15 #include <xen/interface/io/tpmif.h>
16 #include <asm/io.h>
17 #include <asm/pgalloc.h>
18
19 #define DPRINTK(_f, _a...)                      \
20         pr_debug("(file=%s, line=%d) " _f,      \
21                  __FILE__ , __LINE__ , ## _a )
22
23 struct backend_info;
24
25 typedef struct tpmif_st {
26         struct list_head tpmif_list;
27         /* Unique identifier for this interface. */
28         domid_t domid;
29         unsigned int handle;
30
31         /* Physical parameters of the comms window. */
32         unsigned int evtchn;
33         unsigned int irq;
34
35         /* The shared rings and indexes. */
36         tpmif_tx_interface_t *tx;
37         struct vm_struct *tx_area;
38
39         /* Miscellaneous private stuff. */
40         enum { DISCONNECTED, DISCONNECTING, CONNECTED } status;
41         int active;
42
43         struct tpmif_st *hash_next;
44         struct list_head list;  /* scheduling list */
45         atomic_t refcnt;
46
47         struct backend_info *bi;
48
49         grant_handle_t shmem_handle;
50         grant_ref_t shmem_ref;
51         struct page **mmap_pages;
52
53         char devname[20];
54 } tpmif_t;
55
56 void tpmif_disconnect_complete(tpmif_t * tpmif);
57 tpmif_t *tpmif_find(domid_t domid, struct backend_info *bi);
58 void tpmif_interface_init(void);
59 void tpmif_interface_exit(void);
60 void tpmif_schedule_work(tpmif_t * tpmif);
61 void tpmif_deschedule_work(tpmif_t * tpmif);
62 void tpmif_xenbus_init(void);
63 void tpmif_xenbus_exit(void);
64 int tpmif_map(tpmif_t *tpmif, unsigned long shared_page, unsigned int evtchn);
65 irqreturn_t tpmif_be_int(int irq, void *dev_id, struct pt_regs *regs);
66
67 long int tpmback_get_instance(struct backend_info *bi);
68
69 int vtpm_release_packets(tpmif_t * tpmif, int send_msgs);
70
71
72 #define tpmif_get(_b) (atomic_inc(&(_b)->refcnt))
73 #define tpmif_put(_b)                                   \
74         do {                                            \
75                 if (atomic_dec_and_test(&(_b)->refcnt)) \
76                         tpmif_disconnect_complete(_b);  \
77         } while (0)
78
79 extern int num_frontends;
80
81 static inline unsigned long idx_to_kaddr(tpmif_t *t, unsigned int idx)
82 {
83         return (unsigned long)pfn_to_kaddr(page_to_pfn(t->mmap_pages[idx]));
84 }
85
86 #endif /* __TPMIF__BACKEND__COMMON_H__ */