1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef __CODA_PSDEV_H |
3 | #define __CODA_PSDEV_H |
4 | |
5 | #include <linux/backing-dev.h> |
6 | #include <linux/magic.h> |
7 | #include <linux/mutex.h> |
8 | |
9 | #define CODA_PSDEV_MAJOR 67 |
10 | #define MAX_CODADEVS 5 /* how many do we allow */ |
11 | |
12 | struct kstatfs; |
13 | |
14 | /* messages between coda filesystem in kernel and Venus */ |
15 | struct upc_req { |
16 | struct list_head uc_chain; |
17 | caddr_t uc_data; |
18 | u_short uc_flags; |
19 | u_short uc_inSize; /* Size is at most 5000 bytes */ |
20 | u_short uc_outSize; |
21 | u_short uc_opcode; /* copied from data to save lookup */ |
22 | int uc_unique; |
23 | wait_queue_head_t uc_sleep; /* process' wait queue */ |
24 | }; |
25 | |
26 | #define CODA_REQ_ASYNC 0x1 |
27 | #define CODA_REQ_READ 0x2 |
28 | #define CODA_REQ_WRITE 0x4 |
29 | #define CODA_REQ_ABORT 0x8 |
30 | |
31 | /* communication pending/processing queues */ |
32 | struct venus_comm { |
33 | u_long vc_seq; |
34 | wait_queue_head_t vc_waitq; /* Venus wait queue */ |
35 | struct list_head vc_pending; |
36 | struct list_head vc_processing; |
37 | int vc_inuse; |
38 | struct super_block *vc_sb; |
39 | struct mutex vc_mutex; |
40 | }; |
41 | |
42 | static inline struct venus_comm *coda_vcp(struct super_block *sb) |
43 | { |
44 | return (struct venus_comm *)((sb)->s_fs_info); |
45 | } |
46 | |
47 | /* upcalls */ |
48 | int venus_rootfid(struct super_block *sb, struct CodaFid *fidp); |
49 | int venus_getattr(struct super_block *sb, struct CodaFid *fid, |
50 | struct coda_vattr *attr); |
51 | int venus_setattr(struct super_block *, struct CodaFid *, struct coda_vattr *); |
52 | int venus_lookup(struct super_block *sb, struct CodaFid *fid, |
53 | const char *name, int length, int *type, |
54 | struct CodaFid *resfid); |
55 | int venus_close(struct super_block *sb, struct CodaFid *fid, int flags, |
56 | kuid_t uid); |
57 | int venus_open(struct super_block *sb, struct CodaFid *fid, int flags, |
58 | struct file **f); |
59 | int venus_mkdir(struct super_block *sb, struct CodaFid *dirfid, |
60 | const char *name, int length, |
61 | struct CodaFid *newfid, struct coda_vattr *attrs); |
62 | int venus_create(struct super_block *sb, struct CodaFid *dirfid, |
63 | const char *name, int length, int excl, int mode, |
64 | struct CodaFid *newfid, struct coda_vattr *attrs); |
65 | int venus_rmdir(struct super_block *sb, struct CodaFid *dirfid, |
66 | const char *name, int length); |
67 | int venus_remove(struct super_block *sb, struct CodaFid *dirfid, |
68 | const char *name, int length); |
69 | int venus_readlink(struct super_block *sb, struct CodaFid *fid, |
70 | char *buffer, int *length); |
71 | int venus_rename(struct super_block *sb, struct CodaFid *new_fid, |
72 | struct CodaFid *old_fid, size_t old_length, |
73 | size_t new_length, const char *old_name, |
74 | const char *new_name); |
75 | int venus_link(struct super_block *sb, struct CodaFid *fid, |
76 | struct CodaFid *dirfid, const char *name, int len ); |
77 | int venus_symlink(struct super_block *sb, struct CodaFid *fid, |
78 | const char *name, int len, const char *symname, int symlen); |
79 | int venus_access(struct super_block *sb, struct CodaFid *fid, int mask); |
80 | int venus_pioctl(struct super_block *sb, struct CodaFid *fid, |
81 | unsigned int cmd, struct PioctlData *data); |
82 | int coda_downcall(struct venus_comm *vcp, int opcode, union outputArgs *out, |
83 | size_t nbytes); |
84 | int venus_fsync(struct super_block *sb, struct CodaFid *fid); |
85 | int venus_statfs(struct dentry *dentry, struct kstatfs *sfs); |
86 | int venus_access_intent(struct super_block *sb, struct CodaFid *fid, |
87 | bool *access_intent_supported, |
88 | size_t count, loff_t ppos, int type); |
89 | |
90 | /* |
91 | * Statistics |
92 | */ |
93 | |
94 | extern struct venus_comm coda_comms[]; |
95 | #endif |
96 | |