File: /usr/include/linux/coda_psdev.h

1     #ifndef __CODA_PSDEV_H
2     #define __CODA_PSDEV_H
3     
4     #define CODA_PSDEV_MAJOR 67
5     #define MAX_CODADEVS  5	   /* how many do we allow */
6     
7     #define CODA_SUPER_MAGIC	0x73757245
8     
9     struct coda_sb_info
10     {
11     	struct venus_comm * sbi_vcomm;
12     	struct super_block *sbi_sb;
13     	struct list_head    sbi_cihead;
14     };
15     
16     /* communication pending/processing queues */
17     struct venus_comm {
18     	u_long		    vc_seq;
19     	wait_queue_head_t   vc_waitq; /* Venus wait queue */
20     	struct list_head    vc_pending;
21     	struct list_head    vc_processing;
22     	int                 vc_inuse;
23     	struct super_block *vc_sb;
24     };
25     
26     
27     static inline struct coda_sb_info *coda_sbp(struct super_block *sb)
28     {
29         return ((struct coda_sb_info *)((sb)->u.generic_sbp));
30     }
31     
32     
33     /* upcalls */
34     int venus_rootfid(struct super_block *sb, ViceFid *fidp);
35     int venus_getattr(struct super_block *sb, struct ViceFid *fid, 
36     		     struct coda_vattr *attr);
37     int venus_setattr(struct super_block *, struct ViceFid *, 
38     		     struct coda_vattr *);
39     int venus_lookup(struct super_block *sb, struct ViceFid *fid, 
40     		    const char *name, int length, int *type, 
41     		    struct ViceFid *resfid);
42     int venus_release(struct super_block *sb, struct ViceFid *fid, int flags,
43     		  struct coda_cred *);
44     int venus_open(struct super_block *sb, struct ViceFid *fid,
45     		  int flags, ino_t *ino, dev_t *dev);
46     int venus_mkdir(struct super_block *sb, struct ViceFid *dirfid, 
47     			  const char *name, int length, 
48     			  struct ViceFid *newfid, struct coda_vattr *attrs);
49     int venus_create(struct super_block *sb, struct ViceFid *dirfid, 
50     		    const char *name, int length, int excl, int mode, int rdev,
51     		    struct ViceFid *newfid, struct coda_vattr *attrs) ;
52     int venus_rmdir(struct super_block *sb, struct ViceFid *dirfid, 
53     		    const char *name, int length);
54     int venus_remove(struct super_block *sb, struct ViceFid *dirfid, 
55     		 const char *name, int length);
56     int venus_readlink(struct super_block *sb, struct ViceFid *fid, 
57     		   char *buffer, int *length);
58     int venus_rename(struct super_block *, struct ViceFid *new_fid, 
59     		 struct ViceFid *old_fid, size_t old_length, 
60     		 size_t new_length, const char *old_name, 
61     		 const char *new_name);
62     int venus_link(struct super_block *sb, struct ViceFid *fid, 
63     		  struct ViceFid *dirfid, const char *name, int len );
64     int venus_symlink(struct super_block *sb, struct ViceFid *fid,
65     		  const char *name, int len, const char *symname, int symlen);
66     int venus_access(struct super_block *sb, struct ViceFid *fid, int mask);
67     int venus_pioctl(struct super_block *sb, struct ViceFid *fid,
68     		 unsigned int cmd, struct PioctlData *data);
69     int coda_downcall(int opcode, union outputArgs *out, struct super_block *sb);
70     int venus_fsync(struct super_block *sb, struct ViceFid *fid);
71     int venus_statfs(struct super_block *sb, struct statfs *sfs);
72     
73     
74     /* messages between coda filesystem in kernel and Venus */
75     extern int coda_hard;
76     extern unsigned long coda_timeout;
77     struct upc_req {
78     	struct list_head    uc_chain;
79     	caddr_t	            uc_data;
80     	u_short	            uc_flags;
81     	u_short             uc_inSize;  /* Size is at most 5000 bytes */
82     	u_short	            uc_outSize;
83     	u_short	            uc_opcode;  /* copied from data to save lookup */
84     	int		    uc_unique;
85     	wait_queue_head_t   uc_sleep;   /* process' wait queue */
86     	unsigned long       uc_posttime;
87     };
88     
89     #define REQ_ASYNC  0x1
90     #define REQ_READ   0x2
91     #define REQ_WRITE  0x4
92     #define REQ_ABORT  0x8
93     
94     
95     /*
96      * Statistics
97      */
98     struct coda_upcallstats {
99     	int	ncalls;			/* client requests */
100     	int	nbadcalls;		/* upcall failures */
101     	int	reqs[CODA_NCALLS];	/* count of each request */
102     } ;
103     
104     extern struct coda_upcallstats coda_callstats;
105     extern struct venus_comm coda_comms[];
106     
107     static inline void clstats(int opcode)
108     {
109         coda_callstats.ncalls++;
110         if ( (0 <= opcode) && (opcode <= CODA_NCALLS) )
111     	coda_callstats.reqs[opcode]++;
112         else
113     	printk("clstats called with bad opcode %d\n", opcode); 
114     }
115     
116     static inline void badclstats(void)
117     {
118         coda_callstats.nbadcalls++;
119     }
120     
121     #endif
122