The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/fs/adosfs/adosfs.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: adosfs.h,v 1.2.4.1 2004/05/23 10:45:17 tron Exp $      */
    2 
    3 /*
    4  * Copyright (c) 1994 Christian E. Hopps
    5  * Copyright (c) 1996 Matthias Scheler
    6  * All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in the
   15  *    documentation and/or other materials provided with the distribution.
   16  * 3. All advertising materials mentioning features or use of this software
   17  *    must display the following acknowledgement:
   18  *      This product includes software developed by Christian E. Hopps.
   19  * 4. The name of the author may not be used to endorse or promote products
   20  *    derived from this software without specific prior written permission
   21  *
   22  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   23  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   24  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   25  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   27  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   28  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   29  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   30  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   31  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   32  */
   33 
   34 /*
   35  * Arguments to mount amigados filesystems.
   36  */
   37 struct adosfs_args {
   38         char    *fspec;         /* blocks special holding the fs to mount */
   39         struct  export_args export;     /* network export information */
   40         uid_t   uid;            /* uid that owns adosfs files */
   41         gid_t   gid;            /* gid that owns adosfs files */
   42         mode_t  mask;           /* mask to be applied for adosfs perms */
   43 };
   44 
   45 #ifdef _KERNEL
   46 #include <sys/mallocvar.h>
   47 #include <miscfs/genfs/genfs_node.h>
   48 
   49 MALLOC_DECLARE(M_ANODE);
   50 
   51 /*
   52  * Amigados datestamp. (from 1/1/1978 00:00:00 local)
   53  */
   54 struct datestamp {
   55         u_int32_t days;
   56         u_int32_t mins;
   57         u_int32_t ticks;        /* 20000 * (ticks % 50) = useconds */
   58                                 /* ticks / 50 = seconds */
   59 };
   60 
   61 enum anode_type { AROOT, ADIR, AFILE, ALDIR, ALFILE, ASLINK };
   62 
   63 /* 
   64  * similar to inode's, we use to represent:
   65  * the root dir, reg dirs, reg files and extension blocks
   66  * note the ``tab'' is a hash table for r/d, and a data block
   67  * table for f/e. it is always ANODETABSZ(ap) bytes in size.
   68  */
   69 struct anode {
   70         struct genfs_node gnode;
   71         LIST_ENTRY(anode) link;
   72         enum anode_type type;
   73         char name[31];          /* (r/d/f) name for object */
   74         struct datestamp mtimev;        /* (r) volume modified */
   75         struct datestamp created;       /* (r) volume created */
   76         struct datestamp mtime; /* (r/d/f) last modified */
   77         struct adosfsmount *amp;        /* owner file system */
   78         struct vnode *vp;       /* owner vnode */
   79         u_long fsize;           /* (f) size of file in bytes */
   80         u_long block;           /* block num */
   81         u_long pblock;          /* (d/f/e) parent block */
   82         u_long hashf;           /* (d/f) hash forward */
   83         u_long extb;            /* (f/e) extension block number */
   84         u_long linkto;          /* (hd/hf) header this link points at */
   85         u_long linknext;        /* (d/f/hd/hf) next link (or head) in chain */
   86         u_long lastlindblk;     /* (f/hf) last logical indirect block */
   87         u_long lastindblk;      /* (f/hf) last indirect block read */
   88         u_long *tab;            /* (r/d) hash table */
   89         int *tabi;              /* (r/d) table info */
   90         int ntabent;            /* (r/d) number of entries in table */
   91         int nwords;             /* size of blocks in long words */
   92         int adprot;             /* (d/f) amigados protection bits */
   93         uid_t  uid;             /* (d/f) uid of directory/file */
   94         gid_t  gid;             /* (d/f) gid of directory/file */
   95         int flags;              /* misc flags */ 
   96         char *slinkto;          /* name of file or dir */
   97 };
   98 #define VTOA(vp)                ((struct anode *)(vp)->v_data)
   99 #define ATOV(ap)                ((ap)->vp)
  100 #define ANODETABSZ(ap)          (((ap)->nwords - 56) * sizeof(long))
  101 #define ANODETABENT(ap)         ((ap)->nwords - 56)
  102 #define ANODENDATBLKENT(ap)     ((ap)->nwords - 56)
  103 
  104 /*
  105  * mount data 
  106  */
  107 #define ANODEHASHSZ (512)
  108 
  109 struct adosfsmount {
  110         LIST_HEAD(anodechain, anode) anodetab[ANODEHASHSZ];
  111         struct mount *mp;       /* owner mount */
  112         u_int32_t dostype;      /* type of volume */
  113         u_long rootb;           /* root block number */
  114         u_long secsperblk;      /* sectors per block */
  115         u_long bsize;           /* size of blocks */
  116         u_long nwords;          /* size of blocks in long words */
  117         u_long dbsize;          /* data bytes per block */
  118         uid_t  uid;             /* uid of mounting user */
  119         gid_t  gid;             /* gid of mounting user */
  120         u_long mask;            /* mode mask */
  121         struct vnode *devvp;    /* blk device mounted on */
  122         struct vnode *rootvp;   /* out root vnode */
  123         struct netexport export;
  124         u_long *bitmap;         /* allocation bitmap */
  125         u_long numblks;         /* number of usable blocks */
  126         u_long freeblks;        /* number of free blocks */
  127 };
  128 
  129 #define VFSTOADOSFS(mp) ((struct adosfsmount *)(mp)->mnt_data)
  130 
  131 #define IS_FFS(amp)     ((amp)->dostype & 1)
  132 #define IS_INTER(amp)   (((amp)->dostype & 7) > 1)
  133 
  134 /*
  135  * AmigaDOS block stuff.
  136  */
  137 #define BBOFF           (0)
  138 
  139 #define BPT_SHORT       ((u_int32_t)2)
  140 #define BPT_DATA        ((u_int32_t)8)
  141 #define BPT_LIST        ((u_int32_t)16)
  142 
  143 #define BST_RDIR        ((u_int32_t)1)
  144 #define BST_UDIR        ((u_int32_t)2)
  145 #define BST_SLINK       ((u_int32_t)3)
  146 #define BST_LDIR        ((u_int32_t)4)
  147 #define BST_FILE        ((u_int32_t)-3)
  148 #define BST_LFILE       ((u_int32_t)-4)
  149 
  150 #define OFS_DATA_OFFSET (24)
  151 
  152 extern struct pool adosfs_node_pool;
  153 
  154 /*
  155  * utility protos
  156  */
  157 #if BYTE_ORDER != BIG_ENDIAN
  158 u_int32_t adoswordn __P((struct buf *, int));
  159 #else
  160 #define adoswordn(bp,wn) (*((u_int32_t *)(bp)->b_data + (wn)))
  161 #endif
  162 
  163 u_int32_t adoscksum __P((struct buf *, int));
  164 int adoscaseequ __P((const u_char *, const u_char *, int, int));
  165 int adoshash __P((const u_char *, int, int, int));
  166 int adunixprot __P((int));
  167 int adosfs_getblktype __P((struct adosfsmount *, struct buf *));
  168 
  169 struct vnode *adosfs_ahashget __P((struct mount *, ino_t));
  170 void adosfs_ainshash __P((struct adosfsmount *, struct anode *));
  171 void adosfs_aremhash __P((struct anode *));
  172 
  173 int adosfs_lookup __P((void *));
  174 
  175 extern int (**adosfs_vnodeop_p) __P((void *));
  176 
  177 #ifdef SYSCTL_SETUP_PROTO
  178 SYSCTL_SETUP_PROTO(sysctl_vfs_adosfs_setup);
  179 #endif /* SYSCTL_SETUP_PROTO */
  180 #endif /* _KERNEL */

Cache object: 7a6428895f6d7641c6fab7ef9482c918


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.