[BACK]Return to msdosfsmount.h CVS log [TXT][DIR] Up to [local] / sys / msdosfs

Annotation of sys/msdosfs/msdosfsmount.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: msdosfsmount.h,v 1.18 2006/12/16 12:44:05 krw Exp $   */
        !             2: /*     $NetBSD: msdosfsmount.h,v 1.16 1997/10/17 11:24:24 ws Exp $     */
        !             3:
        !             4: /*-
        !             5:  * Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank.
        !             6:  * Copyright (C) 1994, 1995, 1997 TooLs GmbH.
        !             7:  * All rights reserved.
        !             8:  * Original code by Paul Popelka (paulp@uts.amdahl.com) (see below).
        !             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:  * 3. All advertising materials mentioning features or use of this software
        !            19:  *    must display the following acknowledgement:
        !            20:  *     This product includes software developed by TooLs GmbH.
        !            21:  * 4. The name of TooLs GmbH may not be used to endorse or promote products
        !            22:  *    derived from this software without specific prior written permission.
        !            23:  *
        !            24:  * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
        !            25:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
        !            26:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
        !            27:  * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
        !            28:  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
        !            29:  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
        !            30:  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
        !            31:  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
        !            32:  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
        !            33:  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        !            34:  */
        !            35: /*
        !            36:  * Written by Paul Popelka (paulp@uts.amdahl.com)
        !            37:  *
        !            38:  * You can do anything you want with this software, just don't say you wrote
        !            39:  * it, and don't remove this notice.
        !            40:  *
        !            41:  * This software is provided "as is".
        !            42:  *
        !            43:  * The author supplies this software to be publicly redistributed on the
        !            44:  * understanding that the author is not responsible for the correct
        !            45:  * functioning of this software in any circumstances and is not liable for
        !            46:  * any damages caused by this software.
        !            47:  *
        !            48:  * October 1992
        !            49:  */
        !            50:
        !            51: /*
        !            52:  * Layout of the mount control block for a msdos file system.
        !            53:  */
        !            54: struct msdosfsmount {
        !            55:        struct mount *pm_mountp;/* vfs mount struct for this fs */
        !            56:        dev_t pm_dev;           /* block special device mounted */
        !            57:        uid_t pm_uid;           /* uid to set as owner of the files */
        !            58:        gid_t pm_gid;           /* gid to set as owner of the files */
        !            59:        mode_t pm_mask;         /* mask to and with file protection bits */
        !            60:        struct vnode *pm_devvp; /* vnode for block device mntd */
        !            61:        struct bpb50 pm_bpb;    /* BIOS parameter blk for this fs */
        !            62:        uint32_t pm_BlkPerSec;  /* # of DEV_BSIZE blocks in MSDOSFS sector */
        !            63:        uint32_t pm_FATsecs;    /* actual number of fat sectors */
        !            64:        uint32_t pm_fatblk;     /* block # of first FAT */
        !            65:        uint32_t pm_rootdirblk; /* block # (cluster # for FAT32) of root directory number */
        !            66:        uint32_t pm_rootdirsize;        /* size in blocks (not clusters) */
        !            67:        uint32_t pm_firstcluster;       /* block number of first cluster */
        !            68:        uint32_t pm_nmbrofclusters;     /* # of clusters in filesystem */
        !            69:        uint32_t pm_maxcluster; /* maximum cluster number */
        !            70:        uint32_t pm_freeclustercount;   /* number of free clusters */
        !            71:        uint32_t pm_cnshift;    /* shift file offset right this amount to get a cluster number */
        !            72:        uint32_t pm_crbomask;   /* and a file offset with this mask to get cluster rel offset */
        !            73:        uint32_t pm_bnshift;    /* shift file offset right this amount to get a block number */
        !            74:        uint32_t pm_bpcluster;  /* bytes per cluster */
        !            75:        uint32_t pm_fmod;               /* ~0 if fs is modified, this can rollover to 0 */
        !            76:        uint32_t pm_fatblocksize;       /* size of fat blocks in bytes */
        !            77:        uint32_t pm_fatblocksec;        /* size of fat blocks in sectors */
        !            78:        uint32_t pm_fatsize;    /* size of fat in bytes */
        !            79:        uint32_t pm_fatmask;    /* mask to use for fat numbers */
        !            80:        uint32_t pm_fsinfo;     /* fsinfo block number */
        !            81:        uint32_t pm_nxtfree;    /* next free cluster in fsinfo block */
        !            82:        u_int pm_fatmult;       /* these 2 values are used in fat */
        !            83:        u_int pm_fatdiv;        /*      offset computation */
        !            84:        u_int pm_curfat;        /* current fat for FAT32 (0 otherwise) */
        !            85:        u_int *pm_inusemap;     /* ptr to bitmap of in-use clusters */
        !            86:        u_int pm_flags;         /* see below */
        !            87:        struct netexport pm_export;     /* export information */
        !            88: };
        !            89: /* Byte offset in FAT on filesystem pmp, cluster cn */
        !            90: #define        FATOFS(pmp, cn) ((cn) * (pmp)->pm_fatmult / (pmp)->pm_fatdiv)
        !            91:
        !            92: /*
        !            93:  * Mount point flags:
        !            94:  */
        !            95: #if 0
        !            96:     /* Defined in <sys/mount.h> */
        !            97: #define        MSDOSFSMNT_SHORTNAME    0x01
        !            98: #define        MSDOSFSMNT_LONGNAME     0x02
        !            99: #define        MSDOSFSMNT_NOWIN95      0x04
        !           100: #define MSDOSFSMNT_ALLOWDIRX   0x10
        !           101: #endif
        !           102:
        !           103: /* All flags above: */
        !           104: #define        MSDOSFSMNT_MNTOPT \
        !           105:        (MSDOSFSMNT_SHORTNAME|MSDOSFSMNT_LONGNAME|MSDOSFSMNT_NOWIN95 \
        !           106:         |MSDOSFSMNT_ALLOWDIRX)
        !           107: #define        MSDOSFSMNT_RONLY        0x80000000      /* mounted read-only    */
        !           108: #define        MSDOSFSMNT_WAITONFAT    0x40000000      /* mounted synchronous  */
        !           109: #define        MSDOSFS_FATMIRROR       0x20000000      /* FAT is mirrored */
        !           110:
        !           111: #define        VFSTOMSDOSFS(mp)        ((struct msdosfsmount *)mp->mnt_data)
        !           112:
        !           113: /* Number of bits in one pm_inusemap item: */
        !           114: #define        N_INUSEBITS     (8 * sizeof(u_int))
        !           115:
        !           116: /*
        !           117:  * Shorthand for fields in the bpb contained in the msdosfsmount structure.
        !           118:  */
        !           119: #define        pm_BytesPerSec  pm_bpb.bpbBytesPerSec
        !           120: #define        pm_ResSectors   pm_bpb.bpbResSectors
        !           121: #define        pm_FATs         pm_bpb.bpbFATs
        !           122: #define        pm_RootDirEnts  pm_bpb.bpbRootDirEnts
        !           123: #define        pm_Sectors      pm_bpb.bpbSectors
        !           124: #define        pm_Media        pm_bpb.bpbMedia
        !           125: #define        pm_SecPerTrack  pm_bpb.bpbSecPerTrack
        !           126: #define        pm_Heads        pm_bpb.bpbHeads
        !           127: #define        pm_HiddenSects  pm_bpb.bpbHiddenSecs
        !           128: #define        pm_HugeSectors  pm_bpb.bpbHugeSectors
        !           129:
        !           130: /*
        !           131:  * Convert pointer to buffer -> pointer to direntry
        !           132:  */
        !           133: #define        bptoep(pmp, bp, dirofs) \
        !           134:        ((struct direntry *)(((bp)->b_data)     \
        !           135:         + ((dirofs) & (pmp)->pm_crbomask)))
        !           136:
        !           137: /*
        !           138:  * Convert block number to cluster number
        !           139:  */
        !           140: #define        de_bn2cn(pmp, bn) \
        !           141:        ((bn) >> ((pmp)->pm_cnshift - (pmp)->pm_bnshift))
        !           142:
        !           143: /*
        !           144:  * Convert cluster number to block number
        !           145:  */
        !           146: #define        de_cn2bn(pmp, cn) \
        !           147:        ((cn) << ((pmp)->pm_cnshift - (pmp)->pm_bnshift))
        !           148:
        !           149: /*
        !           150:  * Convert file offset to cluster number
        !           151:  */
        !           152: #define de_cluster(pmp, off) \
        !           153:        ((off) >> (pmp)->pm_cnshift)
        !           154:
        !           155: /*
        !           156:  * Clusters required to hold size bytes
        !           157:  */
        !           158: #define        de_clcount(pmp, size) \
        !           159:        (((size) + (pmp)->pm_bpcluster - 1) >> (pmp)->pm_cnshift)
        !           160:
        !           161: /*
        !           162:  * Convert file offset to block number
        !           163:  */
        !           164: #define de_blk(pmp, off) \
        !           165:        (de_cn2bn(pmp, de_cluster((pmp), (off))))
        !           166:
        !           167: /*
        !           168:  * Convert cluster number to file offset
        !           169:  */
        !           170: #define        de_cn2off(pmp, cn) \
        !           171:        ((cn) << (pmp)->pm_cnshift)
        !           172:
        !           173: /*
        !           174:  * Convert block number to file offset
        !           175:  */
        !           176: #define        de_bn2off(pmp, bn) \
        !           177:        ((bn) << (pmp)->pm_bnshift)
        !           178: /*
        !           179:  * Map a cluster number into a filesystem relative block number.
        !           180:  */
        !           181: #define        cntobn(pmp, cn) \
        !           182:        (de_cn2bn((pmp), (cn)-CLUST_FIRST) + (pmp)->pm_firstcluster)
        !           183:
        !           184: /*
        !           185:  * Calculate block number for directory entry in root dir, offset dirofs
        !           186:  */
        !           187: #define        roottobn(pmp, dirofs) \
        !           188:        (de_blk((pmp), (dirofs)) + (pmp)->pm_rootdirblk)
        !           189:
        !           190: /*
        !           191:  * Calculate block number for directory entry at cluster dirclu, offset
        !           192:  * dirofs
        !           193:  */
        !           194: #define        detobn(pmp, dirclu, dirofs) \
        !           195:        ((dirclu) == MSDOSFSROOT \
        !           196:         ? roottobn((pmp), (dirofs)) \
        !           197:         : cntobn((pmp), (dirclu)))
        !           198:
        !           199: /* Calculate size of fsinfo block */
        !           200: #define fsi_size(pmp) \
        !           201:        (1024 << ((pmp)->pm_BlkPerSec >> 2))
        !           202:
        !           203: /*
        !           204:  * Prototypes for MSDOSFS virtual filesystem operations
        !           205:  */
        !           206: int msdosfs_mount(struct mount *, const char *, void *, struct nameidata *, struct proc *);
        !           207: int msdosfs_start(struct mount *, int, struct proc *);
        !           208: int msdosfs_unmount(struct mount *, int, struct proc *);
        !           209: int msdosfs_root(struct mount *, struct vnode **);
        !           210: int msdosfs_quotactl(struct mount *, int, uid_t, caddr_t, struct proc *);
        !           211: int msdosfs_statfs(struct mount *, struct statfs *, struct proc *);
        !           212: int msdosfs_sync(struct mount *, int, struct ucred *, struct proc *);
        !           213: int msdosfs_fhtovp(struct mount *, struct fid *, struct vnode **);
        !           214: int msdosfs_vptofh(struct vnode *, struct fid *);
        !           215: int msdosfs_init(struct vfsconf *);

CVSweb