Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  * Copyright (c) 2000-2001 Christoph Hellwig.
  3  * All rights reserved.
  4  *
  5  * Redistribution and use in source and binary forms, with or without
  6  * modification, are permitted provided that the following conditions
  7  * are met:
  8  * 1. Redistributions of source code must retain the above copyright
  9  *    notice, this list of conditions, and the following disclaimer,
 10  *    without modification.
 11  * 2. The name of the author may not be used to endorse or promote products
 12  *    derived from this software without specific prior written permission.
 13  *
 14  * Alternatively, this software may be distributed under the terms of the
 15  * GNU General Public License ("GPL").
 16  *
 17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 20  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
 21  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 27  * SUCH DAMAGE.
 28  *
 29  */
 30 #ifndef _VXFS_INODE_H_
 31 #define _VXFS_INODE_H_
 32 
 33 /*
 34  * Veritas filesystem driver - inode structure.
 35  *
 36  * This file contains the definition of the disk and core
 37  * inodes of the Veritas Filesystem.
 38  */
 39 
 40 
 41 #define VXFS_ISIZE              0x100           /* Inode size */
 42 
 43 #define VXFS_NDADDR             10              /* Number of direct addrs in inode */
 44 #define VXFS_NIADDR             2               /* Number of indirect addrs in inode */
 45 #define VXFS_NIMMED             96              /* Size of immediate data in inode */
 46 #define VXFS_NTYPED             6               /* Num of typed extents */
 47 
 48 #define VXFS_TYPED_OFFSETMASK   (0x00FFFFFFFFFFFFFFULL)
 49 #define VXFS_TYPED_TYPEMASK     (0xFF00000000000000ULL)
 50 #define VXFS_TYPED_TYPESHIFT    56
 51 
 52 #define VXFS_TYPED_PER_BLOCK(sbp) \
 53         ((sbp)->s_blocksize / sizeof(struct vxfs_typed))
 54 
 55 /*
 56  * Possible extent descriptor types for %VXFS_ORG_TYPED extents.
 57  */
 58 enum {
 59         VXFS_TYPED_INDIRECT             = 1,
 60         VXFS_TYPED_DATA                 = 2,
 61         VXFS_TYPED_INDIRECT_DEV4        = 3,
 62         VXFS_TYPED_DATA_DEV4            = 4,
 63 };
 64 
 65 /*
 66  * Data stored immediately in the inode.
 67  */
 68 struct vxfs_immed {
 69         u_int8_t        vi_immed[VXFS_NIMMED];
 70 };
 71 
 72 struct vxfs_ext4 {
 73         u_int32_t               ve4_spare;              /* ?? */
 74         u_int32_t               ve4_indsize;            /* Indirect extent size */
 75         vx_daddr_t              ve4_indir[VXFS_NIADDR]; /* Indirect extents */
 76         struct direct {                                 /* Direct extents */
 77                 vx_daddr_t      extent;                 /* Extent number */
 78                 int32_t         size;                   /* Size of extent */
 79         } ve4_direct[VXFS_NDADDR];
 80 };
 81 
 82 struct vxfs_typed {
 83         u_int64_t       vt_hdr;         /* Header, 0xTTOOOOOOOOOOOOOO; T=type,O=offs */
 84         vx_daddr_t      vt_block;       /* Extent block */
 85         int32_t         vt_size;        /* Size in blocks */
 86 };
 87 
 88 struct vxfs_typed_dev4 {
 89         u_int64_t       vd4_hdr;        /* Header, 0xTTOOOOOOOOOOOOOO; T=type,O=offs */
 90         u_int64_t       vd4_block;      /* Extent block */
 91         u_int64_t       vd4_size;       /* Size in blocks */
 92         int32_t         vd4_dev;        /* Device ID */
 93         u_int32_t       __pad1;
 94 };
 95 
 96 /*
 97  * The inode as contained on the physical device.
 98  */
 99 struct vxfs_dinode {
100         int32_t         vdi_mode;
101         u_int32_t       vdi_nlink;      /* Link count */
102         u_int32_t       vdi_uid;        /* UID */
103         u_int32_t       vdi_gid;        /* GID */
104         u_int64_t       vdi_size;       /* Inode size in bytes */
105         u_int32_t       vdi_atime;      /* Last time accessed - sec */
106         u_int32_t       vdi_autime;     /* Last time accessed - usec */
107         u_int32_t       vdi_mtime;      /* Last modify time - sec */
108         u_int32_t       vdi_mutime;     /* Last modify time - usec */
109         u_int32_t       vdi_ctime;      /* Create time - sec */
110         u_int32_t       vdi_cutime;     /* Create time - usec */
111         u_int8_t        vdi_aflags;     /* Allocation flags */
112         u_int8_t        vdi_orgtype;    /* Organisation type */
113         u_int16_t       vdi_eopflags;
114         u_int32_t       vdi_eopdata;
115         union {
116                 u_int32_t               rdev;
117                 u_int32_t               dotdot;
118                 struct {
119                         u_int32_t       reserved;
120                         u_int32_t       fixextsize;
121                 } i_regular;
122                 struct {
123                         u_int32_t       matchino;
124                         u_int32_t       fsetindex;
125                 } i_vxspec;
126                 u_int64_t               align;
127         } vdi_ftarea;
128         u_int32_t       vdi_blocks;     /* How much blocks does inode occupy */
129         u_int32_t       vdi_gen;        /* Inode generation */
130         u_int64_t       vdi_version;    /* Version */
131         union {
132                 struct vxfs_immed       immed;
133                 struct vxfs_ext4        ext4;
134                 struct vxfs_typed       typed[VXFS_NTYPED];
135         } vdi_org;
136         u_int32_t       vdi_iattrino;
137 };
138 
139 #define vdi_rdev        vdi_ftarea.rdev
140 #define vdi_dotdot      vdi_ftarea.dotdot
141 #define vdi_fixextsize  vdi_ftarea.regular.fixextsize
142 #define vdi_matchino    vdi_ftarea.vxspec.matchino
143 #define vdi_fsetindex   vdi_ftarea.vxspec.fsetindex
144 
145 #define vdi_immed       vdi_org.immed
146 #define vdi_ext4        vdi_org.ext4
147 #define vdi_typed       vdi_org.typed
148 
149 
150 /*
151  * The inode as represented in the main memory.
152  *
153  * TBD: This should become a separate structure...
154  */
155 #define vxfs_inode_info vxfs_dinode
156 
157 #define vii_mode        vdi_mode
158 #define vii_uid         vdi_uid
159 #define vii_gid         vdi_gid
160 #define vii_nlink       vdi_nlink
161 #define vii_size        vdi_size
162 #define vii_atime       vdi_atime
163 #define vii_ctime       vdi_ctime
164 #define vii_mtime       vdi_mtime
165 #define vii_blocks      vdi_blocks
166 #define vii_org         vdi_org
167 #define vii_orgtype     vdi_orgtype
168 #define vii_gen         vdi_gen
169 
170 #define vii_rdev        vdi_ftarea.rdev
171 #define vii_dotdot      vdi_ftarea.dotdot
172 #define vii_fixextsize  vdi_ftarea.regular.fixextsize
173 #define vii_matchino    vdi_ftarea.vxspec.matchino
174 #define vii_fsetindex   vdi_ftarea.vxspec.fsetindex
175 
176 #define vii_immed       vdi_org.immed
177 #define vii_ext4        vdi_org.ext4
178 #define vii_typed       vdi_org.typed
179 
180 #endif /* _VXFS_INODE_H_ */
181 
  This page was automatically generated by the LXR engine.