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

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/fs/puffs/puffs_msgif.h between version 1.47 and 1.47.4.8

version 1.47, 2007/07/30 09:04:58 version 1.47.4.8, 2007/12/09 19:38:10
Line 1 
Line 1 
 /*      $NetBSD$        */  /*      $NetBSD$        */
   
 /*  /*
  * Copyright (c) 2005, 2006  Antti Kantee.  All Rights Reserved.   * Copyright (c) 2005, 2006, 2007  Antti Kantee.  All Rights Reserved.
  *   *
  * Development of this software was supported by the   * Development of this software was supported by the
  * Google Summer of Code program and the Ulla Tuominen Foundation.   * Google Summer of Code program and the Ulla Tuominen Foundation.
Line 29 
Line 29 
  * SUCH DAMAGE.   * SUCH DAMAGE.
  */   */
   
 #ifndef _PUFFS_MSGIF_H_  #ifndef _FS_PUFFS_PUFFS_MSGIF_H_
 #define _PUFFS_MSGIF_H_  #define _FS_PUFFS_PUFFS_MSGIF_H_
   
 #include <sys/param.h>  #include <sys/param.h>
 #include <sys/time.h>  #include <sys/time.h>
Line 42 
Line 42 
 #include <sys/dirent.h>  #include <sys/dirent.h>
 #include <sys/fcntl.h>  #include <sys/fcntl.h>
   
   #include <dev/putter/putter.h>
   
 #include <uvm/uvm_prot.h>  #include <uvm/uvm_prot.h>
   
 #define PUFFSOP_VFS     1  #define PUFFSOP_VFS             0x01    /* kernel-> */
 #define PUFFSOP_VN      2  #define PUFFSOP_VN              0x02    /* kernel-> */
 #define PUFFSOP_CACHE   3  #define PUFFSOP_CACHE           0x03    /* only kernel-> */
 #define PUFFSOPFLAG_FAF 0x10    /* fire-and-forget */  #define PUFFSOP_ERROR           0x04    /* only kernel-> */
   #define PUFFSOP_FLUSH           0x05    /* ->kernel */
   #define PUFFSOP_SUSPEND         0x06    /* ->kernel */
   
   #define PUFFSOPFLAG_FAF         0x10    /* fire-and-forget */
   #define PUFFSOPFLAG_ISRESPONSE  0x20    /* req is actually a resp */
   
 #define PUFFSOP_OPCMASK         0x03  #define PUFFSOP_OPCMASK         0x07
 #define PUFFSOP_OPCLASS(a)      ((a) & PUFFSOP_OPCMASK)  #define PUFFSOP_OPCLASS(a)      ((a) & PUFFSOP_OPCMASK)
 #define PUFFSOP_WANTREPLY(a)    (((a) & PUFFSOPFLAG_FAF) == 0)  #define PUFFSOP_WANTREPLY(a)    (((a) & PUFFSOPFLAG_FAF) == 0)
   
Line 84  enum {
Line 91  enum {
 };  };
 #define PUFFS_VN_MAX PUFFS_VN_SETEXTATTR  #define PUFFS_VN_MAX PUFFS_VN_SETEXTATTR
   
   /*
    * These signal invalid parameters the file system returned.
    */
   enum {
           PUFFS_ERR_MAKENODE,     PUFFS_ERR_LOOKUP,       PUFFS_ERR_READDIR,
           PUFFS_ERR_READLINK,     PUFFS_ERR_READ,         PUFFS_ERR_WRITE,
           PUFFS_ERR_VPTOFH,       PUFFS_ERR_ERROR
   };
   #define PUFFS_ERR_MAX PUFFS_ERR_VPTOFH
   
 #define PUFFSDEVELVERS  0x80000000  #define PUFFSDEVELVERS  0x80000000
 #define PUFFSVERSION    16  #define PUFFSVERSION    26
 #define PUFFSNAMESIZE   32  #define PUFFSNAMESIZE   32
   
 #define PUFFS_TYPEPREFIX "puffs|"  #define PUFFS_TYPEPREFIX "puffs|"
Line 96  enum {
Line 113  enum {
 struct puffs_kargs {  struct puffs_kargs {
         unsigned int    pa_vers;          unsigned int    pa_vers;
         int             pa_fd;          int             pa_fd;
   
         uint32_t        pa_flags;          uint32_t        pa_flags;
   
         size_t          pa_maxreqlen;          size_t          pa_maxmsglen;
         int             pa_nhashbuckets;          int             pa_nhashbuckets;
   
         size_t          pa_fhsize;          size_t          pa_fhsize;
Line 110  struct puffs_kargs {
Line 128  struct puffs_kargs {
         dev_t           pa_root_rdev;          dev_t           pa_root_rdev;
   
         struct statvfs  pa_svfsb;          struct statvfs  pa_svfsb;
   
         char            pa_typename[_VFS_NAMELEN];          char            pa_typename[_VFS_NAMELEN];
         char            pa_mntfromname[_VFS_MNAMELEN];          char            pa_mntfromname[_VFS_MNAMELEN];
   
Line 125  struct puffs_kargs {
Line 143  struct puffs_kargs {
 #define PUFFS_KFLAG_LOOKUP_FULLPNBUF    0x20    /* full pnbuf in lookup     */  #define PUFFS_KFLAG_LOOKUP_FULLPNBUF    0x20    /* full pnbuf in lookup     */
 #define PUFFS_KFLAG_MASK                0x3f  #define PUFFS_KFLAG_MASK                0x3f
   
 #define PUFFS_FHFLAG_DYNAMIC    0x01  #define PUFFS_FHFLAG_DYNAMIC            0x01
 #define PUFFS_FHFLAG_NFSV2      0x02  #define PUFFS_FHFLAG_NFSV2              0x02
 #define PUFFS_FHFLAG_NFSV3      0x04  #define PUFFS_FHFLAG_NFSV3              0x04
 #define PUFFS_FHFLAG_PROTOMASK  0x06  #define PUFFS_FHFLAG_PROTOMASK          0x06
   #define PUFFS_FHFLAG_PASSTHROUGH        0x08
   #define PUFFS_FHFLAG_MASK               0x0f
   
 #define PUFFS_FHSIZE_MAX        1020    /* XXX: FHANDLE_SIZE_MAX - 4 */  #define PUFFS_FHSIZE_MAX        1020    /* XXX: FHANDLE_SIZE_MAX - 4 */
   
 /*  struct puffs_req {
  * This is the device minor number for the cloning device.  Make it          struct putter_hdr       preq_pth;
  * a high number "just in case", even though we don't want to open  
  * any specific devices currently.  
  */  
 #define PUFFS_CLONER 0x7ffff  
   
 struct puffs_reqh_get {  
         void    *phg_buf;       /* user buffer          */  
         size_t  phg_buflen;     /* user buffer length   */  
   
         int     phg_nops;       /* max ops user wants / number delivered */  
         int     phg_more;       /* advisory: more ops available? */  
 };  
   
 struct puffs_reqh_put {          uint64_t                preq_id;
         int             php_nops;       /* ops available / ops handled */          void                    *preq_cookie;
   
         /* these describe the first request */          uint16_t                preq_opclass;
         uint64_t        php_id;         /* request id */          uint16_t                preq_optype;
         void            *php_buf;       /* user buffer address */          int                     preq_rv;
         size_t          php_buflen;     /* user buffer length, hdr NOT incl. */  
 };  
   
 /*          uint32_t                preq_setbacks;
  * The requests work as follows:  
  *  
  *  + GETOP: When fetching operations from the kernel, the user server  
  *           supplies a flat buffer into which operations are written.  
  *           The number of operations written to the buffer is  
  *           MIN(prhg_nops, requests waiting, space in buffer).  
  *  
  *           Operations follow each other and each one is described  
  *           by the puffs_req structure, which is immediately followed  
  *           by the aligned request data buffer in preq_buf.  The next  
  *           puffs_req can be found at preq + preq_buflen.  
  *  
  *           Visually, the server should expect:  
  *  
  *           |<-- preq_buflen -->|  
  *           ---------------------------------------------------------------  
  *           |hdr|  buffer |align|hdr| buffer |hdr| ....   |buffer|        |  
  *           ---------------------------------------------------------------  
  *           ^ start       ^ unaligned        ^ aligned    ^ always aligned  
  *  
  *           The server is allowed to modify the contents of the buffers.  
  *           Since the headers are the same size for both get and put, it  
  *           is possible to handle all operations simply by doing in-place  
  *           modification.  Where more input is expected that what was put  
  *           out, the kernel leaves a hole in the buffer.  This hole size  
  *           is derived from the operational semantics known by the vnode  
  *           layer.  The hole size is included in preq_buflen.  The  
  *           amount of relevant information in the buffer is call-specific  
  *           and can be deduced by the server from the call type.  
  *  
  *  + PUTOP: When returning the results of an operation to the kernel, the  
  *           user server is allowed to input results in a scatter-gather  
  *           fashion.  Each request is made up of a header and the buffer.  
  *           The header describes the *NEXT* request for copyin, *NOT* the  
  *           current one.  The first request is described in puffs_reqh_put  
  *           and the last one is left uninterpreted.  This is to halve the  
  *           amount of copyin's required.  
  *  
  *           Fans of my ascii art, rejoice:  
  *               /-------------------->| preq_buflen     |  
  *           ---^----------------------------------------------------------  
  *           |hdr|buffer| empty spaces |hdr|    buffer   |                |  
  *           --v-----------------------^-v---------------------------------  
  *             \------- preq_buf -----/  \------- preq_buf ....  
  *  
  *           This scheme also allows for better in-place modification of the  
  *           request buffer when handling requests.  The vision is that  
  *           operations which can be immediately satisfied will be edited  
  *           in-place while ones which can't will be left blank.  Also,  
  *           requests from async operations which have been satisfied  
  *           meanwhile can be included.  
  *  
  *           The total number of operations is given by the ioctl control  
  *           structure puffs_reqh.  The values in the header in the final  
  *           are not used.  
  */  
 struct puffs_req {  
         uint64_t        preq_id;                /* get: cur, put: next */  
   
         union u {          /* Who is making the call?  Eventually host id is also needed. */
                 struct {          pid_t                   preq_pid;
                         uint8_t opclass;        /* cur */          lwpid_t                 preq_lid;
                         uint8_t optype;         /* cur */  
   
                         /*  
                          * preq_cookie is the node cookie associated with  
                          * the request.  It always maps 1:1 to a vnode  
                          * and could map to a userspace struct puffs_node.  
                          * The cookie usually describes the first  
                          * vnode argument of the VOP_POP() in question.  
                          */  
   
                         void    *cookie;        /* cur */  
                 } out;  
                 struct {  
                         int     rv;             /* cur */  
                         int     setbacks;       /* cur */  
                         void    *buf;           /* next */  
                 } in;  
         } u;  
   
         size_t  preq_buflen;                    /* get: cur, put: next */  
         /*          /*
          * the following helper pads the struct size to md alignment           * the following helper pads the struct size to md alignment
          * multiple (should size_t not cut it).  it makes sure that           * multiple (should size_t not cut it).  it makes sure that
          * whatever comes after this struct is aligned           * whatever comes after this struct is aligned
          */           */
           size_t                  preq_buflen;
         uint8_t preq_buf[0] __aligned(ALIGNBYTES+1);          uint8_t preq_buf[0] __aligned(ALIGNBYTES+1);
 };  };
 #define preq_opclass    u.out.opclass  
 #define preq_optype     u.out.optype  
 #define preq_cookie     u.out.cookie  
 #define preq_rv         u.in.rv  
 #define preq_setbacks   u.in.setbacks  
 #define preq_nextbuf    u.in.buf  
   
 #define PUFFS_SETBACK_INACT_N1  0x01    /* set VOP_INACTIVE for node 1 */  #define PUFFS_SETBACK_INACT_N1  0x01    /* set VOP_INACTIVE for node 1 */
 #define PUFFS_SETBACK_INACT_N2  0x02    /* set VOP_INACTIVE for node 2 */  #define PUFFS_SETBACK_INACT_N2  0x02    /* set VOP_INACTIVE for node 2 */
Line 260  struct puffs_req {
Line 184  struct puffs_req {
 #define PUFFS_SETBACK_MASK      0x0f  #define PUFFS_SETBACK_MASK      0x0f
   
 /*  /*
  * Some operations have unknown size requirements.  So as the first  
  * stab at handling it, do an extra bounce between the kernel and  
  * userspace.  
  */  
 struct puffs_sizeop {  
         uint64_t        pso_reqid;  
   
         uint8_t         *pso_userbuf;  
         size_t          pso_bufsize;  
 };  
   
 /*  
  * Flush operation.  This can be used to invalidate:   * Flush operation.  This can be used to invalidate:
  * 1) name cache for one node   * 1) name cache for one node
  * 2) name cache for all children   * 2) name cache for all children
Line 286  struct puffs_sizeop {
Line 198  struct puffs_sizeop {
   
 /* XXX: needs restructuring */  /* XXX: needs restructuring */
 struct puffs_flush {  struct puffs_flush {
         void            *pf_cookie;          struct puffs_req        pf_req;
   
           void                    *pf_cookie;
   
         int             pf_op;          int                     pf_op;
         off_t           pf_start;          off_t                   pf_start;
         off_t           pf_end;          off_t                   pf_end;
 };  };
 #define PUFFS_INVAL_NAMECACHE_NODE              0  #define PUFFS_INVAL_NAMECACHE_NODE              0
 #define PUFFS_INVAL_NAMECACHE_DIR               1  #define PUFFS_INVAL_NAMECACHE_DIR               1
Line 298  struct puffs_flush {
Line 212  struct puffs_flush {
 #define PUFFS_INVAL_PAGECACHE_NODE_RANGE        3  #define PUFFS_INVAL_PAGECACHE_NODE_RANGE        3
 #define PUFFS_FLUSH_PAGECACHE_NODE_RANGE        4  #define PUFFS_FLUSH_PAGECACHE_NODE_RANGE        4
   
   /* keep this for now */
 /*  #define PUFFSREQSIZEOP          _IOR ('p', 1, size_t)
  * Available ioctl operations  
  */  
 #define PUFFSGETOP              _IOWR('p', 1, struct puffs_reqh_get)  
 #define PUFFSPUTOP              _IOWR('p', 2, struct puffs_reqh_put)  
 #define PUFFSSIZEOP             _IOWR('p', 3, struct puffs_sizeop)  
 #define PUFFSFLUSHOP            _IOW ('p', 4, struct puffs_flush)  
 #if 0  
 #define PUFFSFLUSHMULTIOP       _IOW ('p', 5, struct puffs_flushmulti)  
 #endif  
 #define PUFFSSUSPENDOP          _IO  ('p', 6)  
 #define PUFFSREQSIZEOP          _IOR ('p', 7, size_t)  
   
   
 /*  /*
  * Credentials for an operation.  Can be either struct uucred for   * Credentials for an operation.  Can be either struct uucred for
Line 333  struct puffs_kcred {
Line 235  struct puffs_kcred {
  * 2*MAXPHYS is the max size the system will attempt to copy,   * 2*MAXPHYS is the max size the system will attempt to copy,
  * else treated as garbage   * else treated as garbage
  */   */
 #define PUFFS_REQ_MAXSIZE       2*MAXPHYS  #define PUFFS_MSG_MAXSIZE       2*MAXPHYS
 #define PUFFS_REQSTRUCT_MAX     4096 /* XXX: approxkludge */  #define PUFFS_MSGSTRUCT_MAX     4096 /* XXX: approxkludge */
   
 #define PUFFS_TOMOVE(a,b) (MIN((a), b->pmp_req_maxsize - PUFFS_REQSTRUCT_MAX))  
   
 /* caller id */  #define PUFFS_TOMOVE(a,b) (MIN((a), b->pmp_msg_maxsize - PUFFS_MSGSTRUCT_MAX))
 struct puffs_kcid {  
         int     pkcid_type;  
         pid_t   pkcid_pid;  
         lwpid_t pkcid_lwpid;  
 };  
 #define PUFFCID_TYPE_REAL       1  
 #define PUFFCID_TYPE_FAKE       2  
   
 /* puffs struct componentname built by kernel */  /* puffs struct componentname built by kernel */
 struct puffs_kcn {  struct puffs_kcn {
         /* args */          /* args */
         u_long                  pkcn_nameiop;   /* namei operation      */          uint32_t                pkcn_nameiop;   /* namei operation      */
         u_long                  pkcn_flags;     /* flags                */          uint32_t                pkcn_flags;     /* flags                */
   
         char pkcn_name[MAXPATHLEN];     /* nulterminated path component */          char pkcn_name[MAXPATHLEN];     /* nulterminated path component */
         long pkcn_namelen;              /* current component length     */          size_t pkcn_namelen;            /* current component length     */
         long pkcn_consume;              /* IN: extra chars server ate   */          size_t pkcn_consume;            /* IN: extra chars server ate   */
 };  };
   
 /*  
  * XXX: figure out what to do with these, copied from namei.h for now  
  */  
 #define PUFFSLOOKUP_LOOKUP      0       /* perform name lookup only */  
 #define PUFFSLOOKUP_CREATE      1       /* setup for file creation */  
 #define PUFFSLOOKUP_DELETE      2       /* setup for file deletion */  
 #define PUFFSLOOKUP_RENAME      3       /* setup for file renaming */  
 #define PUFFSLOOKUP_OPMASK      3       /* mask for operation */  
   
 #define PUFFSLOOKUP_FOLLOW      0x00004 /* follow final symlink */  
 #define PUFFSLOOKUP_NOFOLLOW    0x00008 /* don't follow final symlink */  
 #define PUFFSLOOKUP_ISLASTCN    0x08000 /* is last component of lookup */  
 #define PUFFSLOOKUP_REQUIREDIR  0x80000 /* must be directory */  
   
   
 /*  /*
  * Next come the individual requests.  They are all subclassed from   * Next come the individual requests.  They are all subclassed from
Line 387  struct puffs_kcn {
Line 266  struct puffs_kcn {
 /*  /*
  * aux structures for vfs operations.   * aux structures for vfs operations.
  */   */
 struct puffs_vfsreq_unmount {  struct puffs_vfsmsg_unmount {
         struct puffs_req        pvfsr_pr;          struct puffs_req        pvfsr_pr;
   
         int                     pvfsr_flags;          int                     pvfsr_flags;
         struct puffs_kcid       pvfsr_cid;  
 };  };
   
 struct puffs_vfsreq_statvfs {  struct puffs_vfsmsg_statvfs {
         struct puffs_req        pvfsr_pr;          struct puffs_req        pvfsr_pr;
   
         struct statvfs          pvfsr_sb;          struct statvfs          pvfsr_sb;
         struct puffs_kcid       pvfsr_cid;  
 };  };
   
 struct puffs_vfsreq_sync {  struct puffs_vfsmsg_sync {
         struct puffs_req        pvfsr_pr;          struct puffs_req        pvfsr_pr;
   
         struct puffs_kcred      pvfsr_cred;          struct puffs_kcred      pvfsr_cred;
         struct puffs_kcid       pvfsr_cid;  
         int                     pvfsr_waitfor;          int                     pvfsr_waitfor;
 };  };
   
 struct puffs_vfsreq_fhtonode {  struct puffs_vfsmsg_fhtonode {
         struct puffs_req        pvfsr_pr;          struct puffs_req        pvfsr_pr;
   
         void                    *pvfsr_fhcookie;        /* IN   */          void                    *pvfsr_fhcookie;        /* IN   */
Line 422  struct puffs_vfsreq_fhtonode {
Line 298  struct puffs_vfsreq_fhtonode {
                                     __aligned(ALIGNBYTES+1);                                      __aligned(ALIGNBYTES+1);
 };  };
   
 struct puffs_vfsreq_nodetofh {  struct puffs_vfsmsg_nodetofh {
         struct puffs_req        pvfsr_pr;          struct puffs_req        pvfsr_pr;
   
         void                    *pvfsr_fhcookie;        /* OUT  */          void                    *pvfsr_fhcookie;        /* OUT  */
Line 432  struct puffs_vfsreq_nodetofh {
Line 308  struct puffs_vfsreq_nodetofh {
                                     __aligned(ALIGNBYTES+1);                                      __aligned(ALIGNBYTES+1);
 };  };
   
 struct puffs_vfsreq_suspend {  struct puffs_vfsmsg_suspend {
         struct puffs_req        pvfsr_pr;          struct puffs_req        pvfsr_pr;
   
         int                     pvfsr_status;          int                     pvfsr_status;
Line 446  struct puffs_vfsreq_suspend {
Line 322  struct puffs_vfsreq_suspend {
  * aux structures for vnode operations.   * aux structures for vnode operations.
  */   */
   
 struct puffs_vnreq_lookup {  struct puffs_vnmsg_lookup {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcn        pvnr_cn;                /* OUT  */          struct puffs_kcn        pvnr_cn;                /* OUT  */
         struct puffs_kcred      pvnr_cn_cred;           /* OUT  */          struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
         struct puffs_kcid       pvnr_cn_cid;            /* OUT  */  
   
         void                    *pvnr_newnode;          /* IN   */          void                    *pvnr_newnode;          /* IN   */
         enum vtype              pvnr_vtype;             /* IN   */          enum vtype              pvnr_vtype;             /* IN   */
Line 459  struct puffs_vnreq_lookup {
Line 334  struct puffs_vnreq_lookup {
         dev_t                   pvnr_rdev;              /* IN   */          dev_t                   pvnr_rdev;              /* IN   */
 };  };
   
 struct puffs_vnreq_create {  struct puffs_vnmsg_create {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcn        pvnr_cn;                /* OUT  */          struct puffs_kcn        pvnr_cn;                /* OUT  */
         struct puffs_kcred      pvnr_cn_cred;           /* OUT  */          struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
         struct puffs_kcid       pvnr_cn_cid;            /* OUT  */  
   
         struct vattr            pvnr_va;                /* OUT  */          struct vattr            pvnr_va;                /* OUT  */
         void                    *pvnr_newnode;          /* IN   */          void                    *pvnr_newnode;          /* IN   */
 };  };
   
 struct puffs_vnreq_mknod {  struct puffs_vnmsg_mknod {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcn        pvnr_cn;                /* OUT  */          struct puffs_kcn        pvnr_cn;                /* OUT  */
         struct puffs_kcred      pvnr_cn_cred;           /* OUT  */          struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
         struct puffs_kcid       pvnr_cn_cid;            /* OUT  */  
   
         struct vattr            pvnr_va;                /* OUT  */          struct vattr            pvnr_va;                /* OUT  */
         void                    *pvnr_newnode;          /* IN   */          void                    *pvnr_newnode;          /* IN   */
 };  };
   
 struct puffs_vnreq_open {  struct puffs_vnmsg_open {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcred      pvnr_cred;              /* OUT  */          struct puffs_kcred      pvnr_cred;              /* OUT  */
         struct puffs_kcid       pvnr_cid;               /* OUT  */  
         int                     pvnr_mode;              /* OUT  */          int                     pvnr_mode;              /* OUT  */
 };  };
   
 struct puffs_vnreq_close {  struct puffs_vnmsg_close {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcred      pvnr_cred;              /* OUT  */          struct puffs_kcred      pvnr_cred;              /* OUT  */
         struct puffs_kcid       pvnr_cid;               /* OUT  */  
         int                     pvnr_fflag;             /* OUT  */          int                     pvnr_fflag;             /* OUT  */
 };  };
   
 struct puffs_vnreq_access {  struct puffs_vnmsg_access {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcred      pvnr_cred;              /* OUT  */          struct puffs_kcred      pvnr_cred;              /* OUT  */
         struct puffs_kcid       pvnr_cid;               /* OUT  */  
         int                     pvnr_mode;              /* OUT  */          int                     pvnr_mode;              /* OUT  */
 };  };
   
 #define puffs_vnreq_setattr puffs_vnreq_setgetattr  #define puffs_vnmsg_setattr puffs_vnmsg_setgetattr
 #define puffs_vnreq_getattr puffs_vnreq_setgetattr  #define puffs_vnmsg_getattr puffs_vnmsg_setgetattr
 struct puffs_vnreq_setgetattr {  struct puffs_vnmsg_setgetattr {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcred      pvnr_cred;              /* OUT  */          struct puffs_kcred      pvnr_cred;              /* OUT  */
         struct puffs_kcid       pvnr_cid;               /* OUT  */  
         struct vattr            pvnr_va;                /* IN/OUT (op depend) */          struct vattr            pvnr_va;                /* IN/OUT (op depend) */
 };  };
   
 #define puffs_vnreq_read puffs_vnreq_readwrite  #define puffs_vnmsg_read puffs_vnmsg_rw
 #define puffs_vnreq_write puffs_vnreq_readwrite  #define puffs_vnmsg_write puffs_vnmsg_rw
 struct puffs_vnreq_readwrite {  struct puffs_vnmsg_rw {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcred      pvnr_cred;              /* OUT    */          struct puffs_kcred      pvnr_cred;              /* OUT    */
Line 528  struct puffs_vnreq_readwrite {
Line 397  struct puffs_vnreq_readwrite {
         uint8_t                 pvnr_data[0];           /* IN/OUT (wr/rd) */          uint8_t                 pvnr_data[0];           /* IN/OUT (wr/rd) */
 };  };
   
 #define puffs_vnreq_ioctl puffs_vnreq_fcnioctl  #define puffs_vnmsg_ioctl puffs_vnreq_fcnioctl
 #define puffs_vnreq_fcntl puffs_vnreq_fcnioctl  #define puffs_vnmsg_fcntl puffs_vnreq_fcnioctl
 struct puffs_vnreq_fcnioctl {  struct puffs_vnmsg_fcnioctl {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcred      pvnr_cred;          struct puffs_kcred      pvnr_cred;
Line 543  struct puffs_vnreq_fcnioctl {
Line 412  struct puffs_vnreq_fcnioctl {
         int                     pvnr_copyback;          int                     pvnr_copyback;
 };  };
   
 struct puffs_vnreq_poll {  struct puffs_vnmsg_poll {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         int                     pvnr_events;            /* IN/OUT */          int                     pvnr_events;            /* IN/OUT */
         struct puffs_kcid       pvnr_cid;               /* OUT    */  
 };  };
   
 struct puffs_vnreq_fsync {  struct puffs_vnmsg_fsync {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcred      pvnr_cred;              /* OUT  */          struct puffs_kcred      pvnr_cred;              /* OUT  */
         struct puffs_kcid       pvnr_cid;               /* OUT  */  
         off_t                   pvnr_offlo;             /* OUT  */          off_t                   pvnr_offlo;             /* OUT  */
         off_t                   pvnr_offhi;             /* OUT  */          off_t                   pvnr_offhi;             /* OUT  */
         int                     pvnr_flags;             /* OUT  */          int                     pvnr_flags;             /* OUT  */
 };  };
   
 struct puffs_vnreq_seek {  struct puffs_vnmsg_seek {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcred      pvnr_cred;              /* OUT  */          struct puffs_kcred      pvnr_cred;              /* OUT  */
Line 568  struct puffs_vnreq_seek {
Line 435  struct puffs_vnreq_seek {
         off_t                   pvnr_newoff;            /* OUT  */          off_t                   pvnr_newoff;            /* OUT  */
 };  };
   
 struct puffs_vnreq_remove {  struct puffs_vnmsg_remove {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcn        pvnr_cn;                /* OUT  */          struct puffs_kcn        pvnr_cn;                /* OUT  */
         struct puffs_kcred      pvnr_cn_cred;           /* OUT  */          struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
         struct puffs_kcid       pvnr_cn_cid;            /* OUT  */  
   
         void                    *pvnr_cookie_targ;      /* OUT  */          void                    *pvnr_cookie_targ;      /* OUT  */
 };  };
   
 struct puffs_vnreq_mkdir {  struct puffs_vnmsg_mkdir {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcn        pvnr_cn;                /* OUT  */          struct puffs_kcn        pvnr_cn;                /* OUT  */
         struct puffs_kcred      pvnr_cn_cred;           /* OUT  */          struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
         struct puffs_kcid       pvnr_cn_cid;            /* OUT  */  
   
         struct vattr            pvnr_va;                /* OUT  */          struct vattr            pvnr_va;                /* OUT  */
         void                    *pvnr_newnode;          /* IN   */          void                    *pvnr_newnode;          /* IN   */
 };  };
   
 struct puffs_vnreq_rmdir {  struct puffs_vnmsg_rmdir {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcn        pvnr_cn;                /* OUT  */          struct puffs_kcn        pvnr_cn;                /* OUT  */
         struct puffs_kcred      pvnr_cn_cred;           /* OUT  */          struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
         struct puffs_kcid       pvnr_cn_cid;            /* OUT  */  
   
         void                    *pvnr_cookie_targ;      /* OUT  */          void                    *pvnr_cookie_targ;      /* OUT  */
 };  };
   
 struct puffs_vnreq_link {  struct puffs_vnmsg_link {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcn        pvnr_cn;                /* OUT  */          struct puffs_kcn        pvnr_cn;                /* OUT  */
         struct puffs_kcred      pvnr_cn_cred;           /* OUT  */          struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
         struct puffs_kcid       pvnr_cn_cid;            /* OUT  */  
   
         void                    *pvnr_cookie_targ;      /* OUT  */          void                    *pvnr_cookie_targ;      /* OUT  */
 };  };
   
 struct puffs_vnreq_rename {  struct puffs_vnmsg_rename {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcn        pvnr_cn_src;            /* OUT  */          struct puffs_kcn        pvnr_cn_src;            /* OUT  */
         struct puffs_kcred      pvnr_cn_src_cred;       /* OUT  */          struct puffs_kcred      pvnr_cn_src_cred;       /* OUT  */
         struct puffs_kcid       pvnr_cn_src_cid;        /* OUT  */  
         struct puffs_kcn        pvnr_cn_targ;           /* OUT  */          struct puffs_kcn        pvnr_cn_targ;           /* OUT  */
         struct puffs_kcred      pvnr_cn_targ_cred;      /* OUT  */          struct puffs_kcred      pvnr_cn_targ_cred;      /* OUT  */
         struct puffs_kcid       pvnr_cn_targ_cid;       /* OUT  */  
   
         void                    *pvnr_cookie_src;       /* OUT  */          void                    *pvnr_cookie_src;       /* OUT  */
         void                    *pvnr_cookie_targ;      /* OUT  */          void                    *pvnr_cookie_targ;      /* OUT  */
         void                    *pvnr_cookie_targdir;   /* OUT  */          void                    *pvnr_cookie_targdir;   /* OUT  */
 };  };
   
 struct puffs_vnreq_symlink {  struct puffs_vnmsg_symlink {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcn        pvnr_cn;                /* OUT  */          struct puffs_kcn        pvnr_cn;                /* OUT  */
         struct puffs_kcred      pvnr_cn_cred;           /* OUT  */          struct puffs_kcred      pvnr_cn_cred;           /* OUT  */
         struct puffs_kcid       pvnr_cn_cid;            /* OUT  */  
   
         struct vattr            pvnr_va;                /* OUT  */          struct vattr            pvnr_va;                /* OUT  */
         void                    *pvnr_newnode;          /* IN   */          void                    *pvnr_newnode;          /* IN   */
         char                    pvnr_link[MAXPATHLEN];  /* OUT  */          char                    pvnr_link[MAXPATHLEN];  /* OUT  */
 };  };
   
 struct puffs_vnreq_readdir {  struct puffs_vnmsg_readdir {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcred      pvnr_cred;              /* OUT    */          struct puffs_kcred      pvnr_cred;              /* OUT    */
Line 650  struct puffs_vnreq_readdir {
Line 510  struct puffs_vnreq_readdir {
                                     __aligned(ALIGNBYTES+1);                                      __aligned(ALIGNBYTES+1);
 };  };
   
 struct puffs_vnreq_readlink {  struct puffs_vnmsg_readlink {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcred      pvnr_cred;              /* OUT */          struct puffs_kcred      pvnr_cred;              /* OUT */
Line 658  struct puffs_vnreq_readlink {
Line 518  struct puffs_vnreq_readlink {
         char                    pvnr_link[MAXPATHLEN];  /* IN, XXX  */          char                    pvnr_link[MAXPATHLEN];  /* IN, XXX  */
 };  };
   
 struct puffs_vnreq_reclaim {  struct puffs_vnmsg_reclaim {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcid       pvnr_cid;               /* OUT  */  
 };  };
   
 struct puffs_vnreq_inactive {  struct puffs_vnmsg_inactive {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct puffs_kcid       pvnr_cid;               /* OUT  */  
 };  };
   
 struct puffs_vnreq_print {  struct puffs_vnmsg_print {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         /* empty */          /* empty */
 };  };
   
 struct puffs_vnreq_pathconf {  struct puffs_vnmsg_pathconf {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         int                     pvnr_name;              /* OUT  */          int                     pvnr_name;              /* OUT  */
         int                     pvnr_retval;            /* IN   */          int                     pvnr_retval;            /* IN   */
 };  };
   
 struct puffs_vnreq_advlock {  struct puffs_vnmsg_advlock {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         struct flock            pvnr_fl;                /* OUT  */          struct flock            pvnr_fl;                /* OUT  */
Line 692  struct puffs_vnreq_advlock {
Line 548  struct puffs_vnreq_advlock {
         int                     pvnr_flags;             /* OUT  */          int                     pvnr_flags;             /* OUT  */
 };  };
   
 struct puffs_vnreq_mmap {  struct puffs_vnmsg_mmap {
         struct puffs_req        pvn_pr;          struct puffs_req        pvn_pr;
   
         vm_prot_t               pvnr_prot;              /* OUT  */          vm_prot_t               pvnr_prot;              /* OUT  */
         struct puffs_kcred      pvnr_cred;              /* OUT  */          struct puffs_kcred      pvnr_cred;              /* OUT  */
         struct puffs_kcid       pvnr_cid;               /* OUT  */  
 };  };
   
   
Line 721  struct puffs_cacheinfo {
Line 576  struct puffs_cacheinfo {
 #define PCACHE_TYPE_READ        0  #define PCACHE_TYPE_READ        0
 #define PCACHE_TYPE_WRITE       1  #define PCACHE_TYPE_WRITE       1
   
 /* notyet */  /*
 #if 0   * Error notification.  Always outgoing, no response, no remorse.
 struct puffs_vnreq_kqfilter { };   */
 struct puffs_vnreq_islocked { };  struct puffs_error {
 #endif          struct puffs_req        perr_pr;
 struct puffs_vnreq_getextattr { };  
 struct puffs_vnreq_setextattr { };          int                     perr_error;
 struct puffs_vnreq_listextattr { };          char                    perr_str[256];
   };
 #ifdef _KERNEL  
 #define PUFFS_VFSREQ(a)                                                 \  
         struct puffs_vfsreq_##a a##_arg;                                \  
         memset(&a##_arg, 0, sizeof(struct puffs_vfsreq_##a))  
   
 #define PUFFS_VNREQ(a)                                                  \  
         struct puffs_vnreq_##a a##_arg;                                 \  
         memset(&a##_arg, 0, sizeof(struct puffs_vnreq_##a))  
 #endif  
   
 #endif /* _PUFFS_MSGIF_H_ */  #endif /* _FS_PUFFS_PUFFS_MSGIF_H_ */

Legend:
Removed from v.1.47  
changed lines
  Added in v.1.47.4.8

CVSweb <webmaster@jp.NetBSD.org>