[BACK]Return to puffs_msgif.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / fs / puffs

Annotation of src/sys/fs/puffs/puffs_msgif.h, Revision 1.65.10.2

1.65.10.2! yamt        1: /*     $NetBSD: puffs_msgif.h,v 1.65.10.1 2009/05/04 08:13:43 yamt Exp $       */
1.1       pooka       2:
                      3: /*
1.56      pooka       4:  * Copyright (c) 2005, 2006, 2007  Antti Kantee.  All Rights Reserved.
1.1       pooka       5:  *
                      6:  * Development of this software was supported by the
                      7:  * Google Summer of Code program and the Ulla Tuominen Foundation.
                      8:  * The Google SoC project was mentored by Bill Studenmund.
                      9:  *
                     10:  * Redistribution and use in source and binary forms, with or without
                     11:  * modification, are permitted provided that the following conditions
                     12:  * are met:
                     13:  * 1. Redistributions of source code must retain the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer.
                     15:  * 2. Redistributions in binary form must reproduce the above copyright
                     16:  *    notice, this list of conditions and the following disclaimer in the
                     17:  *    documentation and/or other materials provided with the distribution.
                     18:  *
                     19:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
                     20:  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
                     21:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
                     22:  * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
                     23:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     24:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
                     25:  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     26:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     27:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     28:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     29:  * SUCH DAMAGE.
                     30:  */
                     31:
1.48      pooka      32: #ifndef _FS_PUFFS_PUFFS_MSGIF_H_
                     33: #define _FS_PUFFS_PUFFS_MSGIF_H_
1.1       pooka      34:
                     35: #include <sys/param.h>
                     36: #include <sys/time.h>
                     37: #include <sys/ioccom.h>
                     38: #include <sys/uio.h>
                     39: #include <sys/vnode.h>
                     40: #include <sys/ucred.h>
                     41: #include <sys/statvfs.h>
                     42: #include <sys/dirent.h>
                     43: #include <sys/fcntl.h>
                     44:
1.60      pooka      45: #include <dev/putter/putter.h>
                     46:
1.46      pooka      47: #include <uvm/uvm_prot.h>
                     48:
1.62      pooka      49: #define PUFFSOP_VFS            0x01    /* kernel-> */
                     50: #define PUFFSOP_VN             0x02    /* kernel-> */
                     51: #define PUFFSOP_CACHE          0x03    /* only kernel-> */
                     52: #define PUFFSOP_ERROR          0x04    /* only kernel-> */
                     53: #define PUFFSOP_FLUSH          0x05    /* ->kernel */
                     54: #define PUFFSOP_SUSPEND                0x06    /* ->kernel */
1.65.10.2! yamt       55: #define PUFFSOP_UNMOUNT                0x07    /* ->kernel */
1.62      pooka      56:
1.56      pooka      57: #define PUFFSOPFLAG_FAF                0x10    /* fire-and-forget */
1.62      pooka      58: #define PUFFSOPFLAG_ISRESPONSE 0x20    /* req is actually a resp */
1.5       pooka      59:
1.51      pooka      60: #define PUFFSOP_OPCMASK                0x07
1.5       pooka      61: #define PUFFSOP_OPCLASS(a)     ((a) & PUFFSOP_OPCMASK)
1.6       pooka      62: #define PUFFSOP_WANTREPLY(a)   (((a) & PUFFSOPFLAG_FAF) == 0)
1.1       pooka      63:
1.9       pooka      64: /* XXX: we don't need everything */
1.1       pooka      65: enum {
                     66:        PUFFS_VFS_MOUNT,        PUFFS_VFS_START,        PUFFS_VFS_UNMOUNT,
                     67:        PUFFS_VFS_ROOT,         PUFFS_VFS_STATVFS,      PUFFS_VFS_SYNC,
                     68:        PUFFS_VFS_VGET,         PUFFS_VFS_FHTOVP,       PUFFS_VFS_VPTOFH,
                     69:        PUFFS_VFS_INIT,         PUFFS_VFS_DONE,         PUFFS_VFS_SNAPSHOT,
1.19      pooka      70:        PUFFS_VFS_EXTATTCTL,    PUFFS_VFS_SUSPEND
1.1       pooka      71: };
                     72: #define PUFFS_VFS_MAX PUFFS_VFS_EXTATTCTL
                     73:
1.9       pooka      74: /* moreXXX: we don't need everything here either */
1.1       pooka      75: enum {
                     76:        PUFFS_VN_LOOKUP,        PUFFS_VN_CREATE,        PUFFS_VN_MKNOD,
                     77:        PUFFS_VN_OPEN,          PUFFS_VN_CLOSE,         PUFFS_VN_ACCESS,
                     78:        PUFFS_VN_GETATTR,       PUFFS_VN_SETATTR,       PUFFS_VN_READ,
                     79:        PUFFS_VN_WRITE,         PUFFS_VN_IOCTL,         PUFFS_VN_FCNTL,
                     80:        PUFFS_VN_POLL,          PUFFS_VN_KQFILTER,      PUFFS_VN_REVOKE,
                     81:        PUFFS_VN_MMAP,          PUFFS_VN_FSYNC,         PUFFS_VN_SEEK,
                     82:        PUFFS_VN_REMOVE,        PUFFS_VN_LINK,          PUFFS_VN_RENAME,
                     83:        PUFFS_VN_MKDIR,         PUFFS_VN_RMDIR,         PUFFS_VN_SYMLINK,
                     84:        PUFFS_VN_READDIR,       PUFFS_VN_READLINK,      PUFFS_VN_ABORTOP,
                     85:        PUFFS_VN_INACTIVE,      PUFFS_VN_RECLAIM,       PUFFS_VN_LOCK,
                     86:        PUFFS_VN_UNLOCK,        PUFFS_VN_BMAP,          PUFFS_VN_STRATEGY,
                     87:        PUFFS_VN_PRINT,         PUFFS_VN_ISLOCKED,      PUFFS_VN_PATHCONF,
                     88:        PUFFS_VN_ADVLOCK,       PUFFS_VN_LEASE,         PUFFS_VN_WHITEOUT,
                     89:        PUFFS_VN_GETPAGES,      PUFFS_VN_PUTPAGES,      PUFFS_VN_GETEXTATTR,
                     90:        PUFFS_VN_LISTEXTATTR,   PUFFS_VN_OPENEXTATTR,   PUFFS_VN_DELETEEXTATTR,
                     91:        PUFFS_VN_SETEXTATTR
                     92: };
                     93: #define PUFFS_VN_MAX PUFFS_VN_SETEXTATTR
                     94:
1.54      pooka      95: /*
                     96:  * These signal invalid parameters the file system returned.
                     97:  */
1.51      pooka      98: enum {
                     99:        PUFFS_ERR_MAKENODE,     PUFFS_ERR_LOOKUP,       PUFFS_ERR_READDIR,
                    100:        PUFFS_ERR_READLINK,     PUFFS_ERR_READ,         PUFFS_ERR_WRITE,
1.53      pooka     101:        PUFFS_ERR_VPTOFH,       PUFFS_ERR_ERROR
1.51      pooka     102: };
                    103: #define PUFFS_ERR_MAX PUFFS_ERR_VPTOFH
                    104:
1.14      pooka     105: #define PUFFSDEVELVERS 0x80000000
1.65.10.2! yamt      106: #define PUFFSVERSION   29
1.1       pooka     107: #define PUFFSNAMESIZE  32
1.42      pooka     108:
1.47      pooka     109: #define PUFFS_TYPEPREFIX "puffs|"
                    110:
1.43      pooka     111: #define PUFFS_TYPELEN (_VFS_NAMELEN - (sizeof(PUFFS_TYPEPREFIX)+1))
                    112: #define PUFFS_NAMELEN (_VFS_MNAMELEN-1)
1.42      pooka     113:
1.65      pooka     114: /*
                    115:  * Just a weak typedef for code clarity.  Additionally, we have a
                    116:  * more appropriate vanity type for puffs:
                    117:  * <uep> it should be croissant, not cookie.
                    118:  */
                    119: typedef void *puffs_cookie_t;
                    120: typedef puffs_cookie_t puffs_croissant_t;
                    121:
1.25      pooka     122: struct puffs_kargs {
1.14      pooka     123:        unsigned int    pa_vers;
1.1       pooka     124:        int             pa_fd;
1.54      pooka     125:
1.9       pooka     126:        uint32_t        pa_flags;
1.26      pooka     127:
1.56      pooka     128:        size_t          pa_maxmsglen;
1.27      pooka     129:        int             pa_nhashbuckets;
                    130:
1.26      pooka     131:        size_t          pa_fhsize;
1.27      pooka     132:        int             pa_fhflags;
1.26      pooka     133:
1.65      pooka     134:        puffs_cookie_t  pa_root_cookie;
1.30      pooka     135:        enum vtype      pa_root_vtype;
                    136:        voff_t          pa_root_vsize;
                    137:        dev_t           pa_root_rdev;
                    138:
                    139:        struct statvfs  pa_svfsb;
1.54      pooka     140:
1.43      pooka     141:        char            pa_typename[_VFS_NAMELEN];
1.42      pooka     142:        char            pa_mntfromname[_VFS_MNAMELEN];
                    143:
1.9       pooka     144:        uint8_t         pa_vnopmask[PUFFS_VN_MAX];
1.1       pooka     145: };
1.34      pooka     146: #define PUFFS_KFLAG_NOCACHE_NAME       0x01    /* don't use name cache     */
                    147: #define PUFFS_KFLAG_NOCACHE_PAGE       0x02    /* don't use page cache     */
1.35      pooka     148: #define PUFFS_KFLAG_NOCACHE            0x03    /* no cache whatsoever      */
1.34      pooka     149: #define PUFFS_KFLAG_ALLOPS             0x04    /* ignore pa_vnopmask       */
                    150: #define PUFFS_KFLAG_WTCACHE            0x08    /* write-through page cache */
                    151: #define PUFFS_KFLAG_IAONDEMAND         0x10    /* inactive only on demand  */
1.38      pooka     152: #define PUFFS_KFLAG_LOOKUP_FULLPNBUF   0x20    /* full pnbuf in lookup     */
1.41      pooka     153: #define PUFFS_KFLAG_MASK               0x3f
1.27      pooka     154:
1.50      pooka     155: #define PUFFS_FHFLAG_DYNAMIC           0x01
                    156: #define PUFFS_FHFLAG_NFSV2             0x02
                    157: #define PUFFS_FHFLAG_NFSV3             0x04
                    158: #define PUFFS_FHFLAG_PROTOMASK         0x06
                    159: #define PUFFS_FHFLAG_PASSTHROUGH       0x08
                    160: #define PUFFS_FHFLAG_MASK              0x0f
1.27      pooka     161:
                    162: #define PUFFS_FHSIZE_MAX       1020    /* XXX: FHANDLE_SIZE_MAX - 4 */
1.1       pooka     163:
1.56      pooka     164: struct puffs_req {
1.60      pooka     165:        struct putter_hdr       preq_pth;
1.56      pooka     166:
                    167:        uint64_t                preq_id;
1.65      pooka     168:        puffs_cookie_t          preq_cookie;
1.56      pooka     169:
1.60      pooka     170:        uint16_t                preq_opclass;
                    171:        uint16_t                preq_optype;
1.56      pooka     172:        int                     preq_rv;
                    173:
                    174:        uint32_t                preq_setbacks;
                    175:
1.59      pooka     176:        /* Who is making the call?  Eventually host id is also needed. */
                    177:        pid_t                   preq_pid;
                    178:        lwpid_t                 preq_lid;
                    179:
1.56      pooka     180:        /*
                    181:         * the following helper pads the struct size to md alignment
                    182:         * multiple (should size_t not cut it).  it makes sure that
                    183:         * whatever comes after this struct is aligned
                    184:         */
                    185:        size_t                  preq_buflen;
                    186:        uint8_t preq_buf[0] __aligned(ALIGNBYTES+1);
                    187: };
                    188:
1.29      pooka     189: #define PUFFS_SETBACK_INACT_N1 0x01    /* set VOP_INACTIVE for node 1 */
                    190: #define PUFFS_SETBACK_INACT_N2 0x02    /* set VOP_INACTIVE for node 2 */
1.32      pooka     191: #define PUFFS_SETBACK_NOREF_N1 0x04    /* set pn PN_NOREFS for node 1 */
                    192: #define PUFFS_SETBACK_NOREF_N2 0x08    /* set pn PN_NOREFS for node 2 */
                    193: #define PUFFS_SETBACK_MASK     0x0f
1.29      pooka     194:
1.1       pooka     195: /*
1.16      pooka     196:  * Flush operation.  This can be used to invalidate:
                    197:  * 1) name cache for one node
                    198:  * 2) name cache for all children
                    199:  * 3) name cache for the entire mount
                    200:  * 4) page cache for a set of ranges in one node
                    201:  * 5) page cache for one entire node
                    202:  *
                    203:  * It can be used to flush:
                    204:  * 1) page cache for a set of ranges in one node
                    205:  * 2) page cache for one entire node
                    206:  */
                    207:
1.20      pooka     208: /* XXX: needs restructuring */
1.16      pooka     209: struct puffs_flush {
1.60      pooka     210:        struct puffs_req        pf_req;
1.16      pooka     211:
1.65      pooka     212:        puffs_cookie_t          pf_cookie;
1.56      pooka     213:
                    214:        int                     pf_op;
                    215:        off_t                   pf_start;
                    216:        off_t                   pf_end;
1.16      pooka     217: };
                    218: #define PUFFS_INVAL_NAMECACHE_NODE             0
                    219: #define PUFFS_INVAL_NAMECACHE_DIR              1
                    220: #define PUFFS_INVAL_NAMECACHE_ALL              2
                    221: #define PUFFS_INVAL_PAGECACHE_NODE_RANGE       3
1.23      pooka     222: #define PUFFS_FLUSH_PAGECACHE_NODE_RANGE       4
1.16      pooka     223:
1.57      pooka     224: /* keep this for now */
1.56      pooka     225: #define PUFFSREQSIZEOP         _IOR ('p', 1, size_t)
1.16      pooka     226:
                    227: /*
1.1       pooka     228:  * Credentials for an operation.  Can be either struct uucred for
                    229:  * ops called from a credential context or NOCRED/FSCRED for ops
                    230:  * called from within the kernel.  It is up to the implementation
                    231:  * if it makes a difference between these two and the super-user.
                    232:  */
1.36      pooka     233: struct puffs_kcred {
                    234:        struct uucred   pkcr_uuc;
                    235:        uint8_t         pkcr_type;
                    236:        uint8_t         pkcr_internal;
1.1       pooka     237: };
                    238: #define PUFFCRED_TYPE_UUC      1
                    239: #define PUFFCRED_TYPE_INTERNAL 2
                    240: #define PUFFCRED_CRED_NOCRED   1
                    241: #define PUFFCRED_CRED_FSCRED   2
                    242:
                    243: /*
1.22      pooka     244:  * 2*MAXPHYS is the max size the system will attempt to copy,
1.1       pooka     245:  * else treated as garbage
                    246:  */
1.56      pooka     247: #define PUFFS_MSG_MAXSIZE      2*MAXPHYS
                    248: #define PUFFS_MSGSTRUCT_MAX    4096 /* XXX: approxkludge */
1.1       pooka     249:
1.56      pooka     250: #define PUFFS_TOMOVE(a,b) (MIN((a), b->pmp_msg_maxsize - PUFFS_MSGSTRUCT_MAX))
1.1       pooka     251:
1.13      pooka     252: /* puffs struct componentname built by kernel */
                    253: struct puffs_kcn {
1.1       pooka     254:        /* args */
1.49      pooka     255:        uint32_t                pkcn_nameiop;   /* namei operation      */
                    256:        uint32_t                pkcn_flags;     /* flags                */
1.13      pooka     257:
1.38      pooka     258:        char pkcn_name[MAXPATHLEN];     /* nulterminated path component */
1.49      pooka     259:        size_t pkcn_namelen;            /* current component length     */
                    260:        size_t pkcn_consume;            /* IN: extra chars server ate   */
1.1       pooka     261: };
                    262:
1.24      pooka     263:
1.11      pooka     264: /*
                    265:  * Next come the individual requests.  They are all subclassed from
                    266:  * puffs_req and contain request-specific fields in addition.  Note
                    267:  * that there are some requests which have to handle arbitrary-length
                    268:  * buffers.
                    269:  *
                    270:  * The division is the following: puffs_req is to be touched only
                    271:  * by generic routines while the other stuff is supposed to be
                    272:  * modified only by specific routines.
                    273:  */
1.6       pooka     274:
1.1       pooka     275: /*
                    276:  * aux structures for vfs operations.
                    277:  */
1.56      pooka     278: struct puffs_vfsmsg_unmount {
1.11      pooka     279:        struct puffs_req        pvfsr_pr;
                    280:
1.1       pooka     281:        int                     pvfsr_flags;
                    282: };
                    283:
1.56      pooka     284: struct puffs_vfsmsg_statvfs {
1.11      pooka     285:        struct puffs_req        pvfsr_pr;
                    286:
1.1       pooka     287:        struct statvfs          pvfsr_sb;
                    288: };
                    289:
1.56      pooka     290: struct puffs_vfsmsg_sync {
1.11      pooka     291:        struct puffs_req        pvfsr_pr;
                    292:
1.36      pooka     293:        struct puffs_kcred      pvfsr_cred;
1.1       pooka     294:        int                     pvfsr_waitfor;
                    295: };
                    296:
1.56      pooka     297: struct puffs_vfsmsg_fhtonode {
1.24      pooka     298:        struct puffs_req        pvfsr_pr;
                    299:
                    300:        void                    *pvfsr_fhcookie;        /* IN   */
                    301:        enum vtype              pvfsr_vtype;            /* IN   */
                    302:        voff_t                  pvfsr_size;             /* IN   */
                    303:        dev_t                   pvfsr_rdev;             /* IN   */
                    304:
                    305:        size_t                  pvfsr_dsize;            /* OUT */
1.27      pooka     306:        uint8_t                 pvfsr_data[0]           /* OUT, XXX */
1.24      pooka     307:                                    __aligned(ALIGNBYTES+1);
                    308: };
                    309:
1.56      pooka     310: struct puffs_vfsmsg_nodetofh {
1.24      pooka     311:        struct puffs_req        pvfsr_pr;
                    312:
                    313:        void                    *pvfsr_fhcookie;        /* OUT  */
                    314:
                    315:        size_t                  pvfsr_dsize;            /* OUT/IN  */
1.27      pooka     316:        uint8_t                 pvfsr_data[0]           /* IN, XXX */
1.24      pooka     317:                                    __aligned(ALIGNBYTES+1);
                    318: };
                    319:
1.56      pooka     320: struct puffs_vfsmsg_suspend {
1.19      pooka     321:        struct puffs_req        pvfsr_pr;
                    322:
                    323:        int                     pvfsr_status;
                    324: };
                    325: #define PUFFS_SUSPEND_START    0
                    326: #define PUFFS_SUSPEND_SUSPENDED        1
                    327: #define PUFFS_SUSPEND_RESUME   2
                    328: #define PUFFS_SUSPEND_ERROR    3
                    329:
1.1       pooka     330: /*
                    331:  * aux structures for vnode operations.
                    332:  */
                    333:
1.56      pooka     334: struct puffs_vnmsg_lookup {
1.11      pooka     335:        struct puffs_req        pvn_pr;
                    336:
1.13      pooka     337:        struct puffs_kcn        pvnr_cn;                /* OUT  */
1.36      pooka     338:        struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
                    339:
1.65      pooka     340:        puffs_cookie_t          pvnr_newnode;           /* IN   */
1.1       pooka     341:        enum vtype              pvnr_vtype;             /* IN   */
1.5       pooka     342:        voff_t                  pvnr_size;              /* IN   */
1.4       pooka     343:        dev_t                   pvnr_rdev;              /* IN   */
1.1       pooka     344: };
                    345:
1.56      pooka     346: struct puffs_vnmsg_create {
1.11      pooka     347:        struct puffs_req        pvn_pr;
                    348:
1.13      pooka     349:        struct puffs_kcn        pvnr_cn;                /* OUT  */
1.36      pooka     350:        struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
                    351:
1.1       pooka     352:        struct vattr            pvnr_va;                /* OUT  */
1.65      pooka     353:        puffs_cookie_t          pvnr_newnode;           /* IN   */
1.1       pooka     354: };
                    355:
1.56      pooka     356: struct puffs_vnmsg_mknod {
1.11      pooka     357:        struct puffs_req        pvn_pr;
                    358:
1.13      pooka     359:        struct puffs_kcn        pvnr_cn;                /* OUT  */
1.36      pooka     360:        struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
                    361:
1.1       pooka     362:        struct vattr            pvnr_va;                /* OUT  */
1.65      pooka     363:        puffs_cookie_t          pvnr_newnode;           /* IN   */
1.1       pooka     364: };
                    365:
1.56      pooka     366: struct puffs_vnmsg_open {
1.11      pooka     367:        struct puffs_req        pvn_pr;
                    368:
1.36      pooka     369:        struct puffs_kcred      pvnr_cred;              /* OUT  */
1.1       pooka     370:        int                     pvnr_mode;              /* OUT  */
                    371: };
                    372:
1.56      pooka     373: struct puffs_vnmsg_close {
1.11      pooka     374:        struct puffs_req        pvn_pr;
                    375:
1.36      pooka     376:        struct puffs_kcred      pvnr_cred;              /* OUT  */
1.1       pooka     377:        int                     pvnr_fflag;             /* OUT  */
                    378: };
                    379:
1.56      pooka     380: struct puffs_vnmsg_access {
1.11      pooka     381:        struct puffs_req        pvn_pr;
                    382:
1.36      pooka     383:        struct puffs_kcred      pvnr_cred;              /* OUT  */
1.1       pooka     384:        int                     pvnr_mode;              /* OUT  */
                    385: };
                    386:
1.56      pooka     387: #define puffs_vnmsg_setattr puffs_vnmsg_setgetattr
                    388: #define puffs_vnmsg_getattr puffs_vnmsg_setgetattr
                    389: struct puffs_vnmsg_setgetattr {
1.11      pooka     390:        struct puffs_req        pvn_pr;
                    391:
1.36      pooka     392:        struct puffs_kcred      pvnr_cred;              /* OUT  */
1.1       pooka     393:        struct vattr            pvnr_va;                /* IN/OUT (op depend) */
                    394: };
                    395:
1.56      pooka     396: #define puffs_vnmsg_read puffs_vnmsg_rw
                    397: #define puffs_vnmsg_write puffs_vnmsg_rw
                    398: struct puffs_vnmsg_rw {
1.11      pooka     399:        struct puffs_req        pvn_pr;
                    400:
1.36      pooka     401:        struct puffs_kcred      pvnr_cred;              /* OUT    */
1.1       pooka     402:        off_t                   pvnr_offset;            /* OUT    */
                    403:        size_t                  pvnr_resid;             /* IN/OUT */
                    404:        int                     pvnr_ioflag;            /* OUT    */
                    405:
                    406:        uint8_t                 pvnr_data[0];           /* IN/OUT (wr/rd) */
                    407: };
                    408:
1.56      pooka     409: #define puffs_vnmsg_ioctl puffs_vnreq_fcnioctl
                    410: #define puffs_vnmsg_fcntl puffs_vnreq_fcnioctl
                    411: struct puffs_vnmsg_fcnioctl {
1.11      pooka     412:        struct puffs_req        pvn_pr;
                    413:
1.36      pooka     414:        struct puffs_kcred      pvnr_cred;
1.1       pooka     415:        u_long                  pvnr_command;
                    416:        pid_t                   pvnr_pid;
                    417:        int                     pvnr_fflag;
                    418:
                    419:        void                    *pvnr_data;
                    420:        size_t                  pvnr_datalen;
                    421:        int                     pvnr_copyback;
                    422: };
                    423:
1.56      pooka     424: struct puffs_vnmsg_poll {
1.11      pooka     425:        struct puffs_req        pvn_pr;
                    426:
1.31      pooka     427:        int                     pvnr_events;            /* IN/OUT */
1.1       pooka     428: };
                    429:
1.56      pooka     430: struct puffs_vnmsg_fsync {
1.11      pooka     431:        struct puffs_req        pvn_pr;
                    432:
1.36      pooka     433:        struct puffs_kcred      pvnr_cred;              /* OUT  */
1.1       pooka     434:        off_t                   pvnr_offlo;             /* OUT  */
                    435:        off_t                   pvnr_offhi;             /* OUT  */
                    436:        int                     pvnr_flags;             /* OUT  */
                    437: };
                    438:
1.56      pooka     439: struct puffs_vnmsg_seek {
1.11      pooka     440:        struct puffs_req        pvn_pr;
                    441:
1.36      pooka     442:        struct puffs_kcred      pvnr_cred;              /* OUT  */
1.1       pooka     443:        off_t                   pvnr_oldoff;            /* OUT  */
                    444:        off_t                   pvnr_newoff;            /* OUT  */
                    445: };
                    446:
1.56      pooka     447: struct puffs_vnmsg_remove {
1.11      pooka     448:        struct puffs_req        pvn_pr;
                    449:
1.13      pooka     450:        struct puffs_kcn        pvnr_cn;                /* OUT  */
1.36      pooka     451:        struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
                    452:
1.65      pooka     453:        puffs_cookie_t          pvnr_cookie_targ;       /* OUT  */
1.1       pooka     454: };
                    455:
1.56      pooka     456: struct puffs_vnmsg_mkdir {
1.11      pooka     457:        struct puffs_req        pvn_pr;
                    458:
1.13      pooka     459:        struct puffs_kcn        pvnr_cn;                /* OUT  */
1.36      pooka     460:        struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
                    461:
1.1       pooka     462:        struct vattr            pvnr_va;                /* OUT  */
1.65      pooka     463:        puffs_cookie_t          pvnr_newnode;           /* IN   */
1.1       pooka     464: };
                    465:
1.56      pooka     466: struct puffs_vnmsg_rmdir {
1.11      pooka     467:        struct puffs_req        pvn_pr;
                    468:
1.13      pooka     469:        struct puffs_kcn        pvnr_cn;                /* OUT  */
1.36      pooka     470:        struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
1.37      pooka     471:
1.65      pooka     472:        puffs_cookie_t          pvnr_cookie_targ;       /* OUT  */
1.1       pooka     473: };
                    474:
1.56      pooka     475: struct puffs_vnmsg_link {
1.11      pooka     476:        struct puffs_req        pvn_pr;
                    477:
1.36      pooka     478:        struct puffs_kcn        pvnr_cn;                /* OUT  */
                    479:        struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
1.37      pooka     480:
1.65      pooka     481:        puffs_cookie_t          pvnr_cookie_targ;       /* OUT  */
1.1       pooka     482: };
                    483:
1.56      pooka     484: struct puffs_vnmsg_rename {
1.11      pooka     485:        struct puffs_req        pvn_pr;
                    486:
1.13      pooka     487:        struct puffs_kcn        pvnr_cn_src;            /* OUT  */
1.36      pooka     488:        struct puffs_kcred      pvnr_cn_src_cred;       /* OUT  */
1.13      pooka     489:        struct puffs_kcn        pvnr_cn_targ;           /* OUT  */
1.36      pooka     490:        struct puffs_kcred      pvnr_cn_targ_cred;      /* OUT  */
                    491:
1.65      pooka     492:        puffs_cookie_t          pvnr_cookie_src;        /* OUT  */
                    493:        puffs_cookie_t          pvnr_cookie_targ;       /* OUT  */
                    494:        puffs_cookie_t          pvnr_cookie_targdir;    /* OUT  */
1.1       pooka     495: };
                    496:
1.56      pooka     497: struct puffs_vnmsg_symlink {
1.11      pooka     498:        struct puffs_req        pvn_pr;
                    499:
1.13      pooka     500:        struct puffs_kcn        pvnr_cn;                /* OUT  */
1.36      pooka     501:        struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
                    502:
1.1       pooka     503:        struct vattr            pvnr_va;                /* OUT  */
1.65      pooka     504:        puffs_cookie_t          pvnr_newnode;           /* IN   */
1.1       pooka     505:        char                    pvnr_link[MAXPATHLEN];  /* OUT  */
                    506: };
                    507:
1.56      pooka     508: struct puffs_vnmsg_readdir {
1.11      pooka     509:        struct puffs_req        pvn_pr;
                    510:
1.36      pooka     511:        struct puffs_kcred      pvnr_cred;              /* OUT    */
1.1       pooka     512:        off_t                   pvnr_offset;            /* IN/OUT */
                    513:        size_t                  pvnr_resid;             /* IN/OUT */
1.24      pooka     514:        size_t                  pvnr_ncookies;          /* IN/OUT */
                    515:        int                     pvnr_eofflag;           /* IN     */
1.1       pooka     516:
1.24      pooka     517:        size_t                  pvnr_dentoff;           /* OUT    */
                    518:        uint8_t                 pvnr_data[0]            /* IN     */
                    519:                                    __aligned(ALIGNBYTES+1);
1.1       pooka     520: };
                    521:
1.56      pooka     522: struct puffs_vnmsg_readlink {
1.11      pooka     523:        struct puffs_req        pvn_pr;
                    524:
1.36      pooka     525:        struct puffs_kcred      pvnr_cred;              /* OUT */
1.1       pooka     526:        size_t                  pvnr_linklen;           /* IN  */
                    527:        char                    pvnr_link[MAXPATHLEN];  /* IN, XXX  */
                    528: };
                    529:
1.56      pooka     530: struct puffs_vnmsg_reclaim {
1.11      pooka     531:        struct puffs_req        pvn_pr;
1.1       pooka     532: };
                    533:
1.56      pooka     534: struct puffs_vnmsg_inactive {
1.11      pooka     535:        struct puffs_req        pvn_pr;
1.3       pooka     536: };
                    537:
1.56      pooka     538: struct puffs_vnmsg_print {
1.11      pooka     539:        struct puffs_req        pvn_pr;
                    540:
1.1       pooka     541:        /* empty */
                    542: };
                    543:
1.56      pooka     544: struct puffs_vnmsg_pathconf {
1.11      pooka     545:        struct puffs_req        pvn_pr;
                    546:
1.1       pooka     547:        int                     pvnr_name;              /* OUT  */
                    548:        int                     pvnr_retval;            /* IN   */
                    549: };
                    550:
1.56      pooka     551: struct puffs_vnmsg_advlock {
1.11      pooka     552:        struct puffs_req        pvn_pr;
                    553:
1.1       pooka     554:        struct flock            pvnr_fl;                /* OUT  */
                    555:        void                    *pvnr_id;               /* OUT  */
                    556:        int                     pvnr_op;                /* OUT  */
                    557:        int                     pvnr_flags;             /* OUT  */
                    558: };
                    559:
1.56      pooka     560: struct puffs_vnmsg_mmap {
1.12      pooka     561:        struct puffs_req        pvn_pr;
                    562:
1.45      pooka     563:        vm_prot_t               pvnr_prot;              /* OUT  */
1.36      pooka     564:        struct puffs_kcred      pvnr_cred;              /* OUT  */
1.12      pooka     565: };
                    566:
1.65.10.2! yamt      567: struct puffs_vnmsg_abortop {
        !           568:        struct puffs_req        pvn_pr;
        !           569:
        !           570:        struct puffs_kcn        pvnr_cn;                /* OUT  */
        !           571:        struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
        !           572: };
        !           573:
1.20      pooka     574:
                    575: /*
                    576:  * For cache reports.  Everything is always out-out-out, no replies
                    577:  */
                    578:
                    579: struct puffs_cacherun {
                    580:        off_t                   pcache_runstart;
                    581:        off_t                   pcache_runend;
                    582: };
                    583:
                    584: /* cache info.  old used for write now */
                    585: struct puffs_cacheinfo {
                    586:        struct puffs_req        pcache_pr;
                    587:
                    588:        int                     pcache_type;
                    589:        size_t                  pcache_nruns;
                    590:        struct puffs_cacherun   pcache_runs[0];
                    591: };
                    592: #define PCACHE_TYPE_READ       0
                    593: #define PCACHE_TYPE_WRITE      1
                    594:
1.51      pooka     595: /*
                    596:  * Error notification.  Always outgoing, no response, no remorse.
                    597:  */
                    598: struct puffs_error {
                    599:        struct puffs_req        perr_pr;
                    600:
                    601:        int                     perr_error;
1.53      pooka     602:        char                    perr_str[256];
1.51      pooka     603: };
                    604:
1.48      pooka     605: #endif /* _FS_PUFFS_PUFFS_MSGIF_H_ */

CVSweb <webmaster@jp.NetBSD.org>