File: /usr/src/linux/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_store(struct super_block *sb, struct ViceFid *fid, int flags,
43     		struct coda_cred *);
44     int venus_release(struct super_block *sb, struct ViceFid *fid, int flags);
45     int venus_close(struct super_block *sb, struct ViceFid *fid, int flags,
46     		struct coda_cred *);
47     int venus_open(struct super_block *sb, struct ViceFid *fid,
48     		int flags, struct file **f);
49     int venus_mkdir(struct super_block *sb, struct ViceFid *dirfid, 
50     			  const char *name, int length, 
51     			  struct ViceFid *newfid, struct coda_vattr *attrs);
52     int venus_create(struct super_block *sb, struct ViceFid *dirfid, 
53     		    const char *name, int length, int excl, int mode, int rdev,
54     		    struct ViceFid *newfid, struct coda_vattr *attrs) ;
55     int venus_rmdir(struct super_block *sb, struct ViceFid *dirfid, 
56     		    const char *name, int length);
57     int venus_remove(struct super_block *sb, struct ViceFid *dirfid, 
58     		 const char *name, int length);
59     int venus_readlink(struct super_block *sb, struct ViceFid *fid, 
60     		   char *buffer, int *length);
61     int venus_rename(struct super_block *, struct ViceFid *new_fid, 
62     		 struct ViceFid *old_fid, size_t old_length, 
63     		 size_t new_length, const char *old_name, 
64     		 const char *new_name);
65     int venus_link(struct super_block *sb, struct ViceFid *fid, 
66     		  struct ViceFid *dirfid, const char *name, int len );
67     int venus_symlink(struct super_block *sb, struct ViceFid *fid,
68     		  const char *name, int len, const char *symname, int symlen);
69     int venus_access(struct super_block *sb, struct ViceFid *fid, int mask);
70     int venus_pioctl(struct super_block *sb, struct ViceFid *fid,
71     		 unsigned int cmd, struct PioctlData *data);
72     int coda_downcall(int opcode, union outputArgs *out, struct super_block *sb);
73     int venus_fsync(struct super_block *sb, struct ViceFid *fid);
74     int venus_statfs(struct super_block *sb, struct statfs *sfs);
75     
76     
77     /* messages between coda filesystem in kernel and Venus */
78     extern int coda_hard;
79     extern unsigned long coda_timeout;
80     struct upc_req {
81     	struct list_head    uc_chain;
82     	caddr_t	            uc_data;
83     	u_short	            uc_flags;
84     	u_short             uc_inSize;  /* Size is at most 5000 bytes */
85     	u_short	            uc_outSize;
86     	u_short	            uc_opcode;  /* copied from data to save lookup */
87     	int		    uc_unique;
88     	wait_queue_head_t   uc_sleep;   /* process' wait queue */
89     	unsigned long       uc_posttime;
90     };
91     
92     #define REQ_ASYNC  0x1
93     #define REQ_READ   0x2
94     #define REQ_WRITE  0x4
95     #define REQ_ABORT  0x8
96     
97     
98     /*
99      * Statistics
100      */
101     struct coda_upcallstats {
102     	int	ncalls;			/* client requests */
103     	int	nbadcalls;		/* upcall failures */
104     	int	reqs[CODA_NCALLS];	/* count of each request */
105     } ;
106     
107     extern struct coda_upcallstats coda_callstats;
108     extern struct venus_comm coda_comms[];
109     
110     static inline void clstats(int opcode)
111     {
112         coda_callstats.ncalls++;
113         if ( (0 <= opcode) && (opcode <= CODA_NCALLS) )
114     	coda_callstats.reqs[opcode]++;
115         else
116     	printk("clstats called with bad opcode %d\n", opcode); 
117     }
118     
119     static inline void badclstats(void)
120     {
121         coda_callstats.nbadcalls++;
122     }
123     
124     #endif
125