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