]>
git.saurik.com Git - apple/boot.git/blob - i386/libsaio/ntfs_private.h
2 * Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
8 * This file contains Original Code and/or Modifications of Original Code
9 * as defined in and that are subject to the Apple Public Source License
10 * Version 2.0 (the 'License'). You may not use this file except in
11 * compliance with the License. Please obtain a copy of the License at
12 * http://www.opensource.apple.com/apsl/ and read it before using this
15 * The Original Code and all software distributed under the License are
16 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
17 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
18 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
20 * Please see the License for the specific language governing rights and
21 * limitations under the License.
23 * @APPLE_LICENSE_HEADER_END@
25 /* $NetBSD: ntfs.h,v 1.9 1999/10/31 19:45:26 jdolecek Exp $ */
28 * Copyright (c) 1998, 1999 Semen Ustimenko
29 * All rights reserved.
31 * Redistribution and use in source and binary forms, with or without
32 * modification, are permitted provided that the following conditions
34 * 1. Redistributions of source code must retain the above copyright
35 * notice, this list of conditions and the following disclaimer.
36 * 2. Redistributions in binary form must reproduce the above copyright
37 * notice, this list of conditions and the following disclaimer in the
38 * documentation and/or other materials provided with the distribution.
40 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
41 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
43 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
44 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
45 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
46 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
48 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
52 * $FreeBSD: src/sys/fs/ntfs/ntfs.h,v 1.14 2001/11/27 00:18:33 jhb Exp $
55 /*#define NTFS_DEBUG 1*/
58 /* We're using FreeBSD style byte order macros in the source. */
59 #include <libkern/OSByteOrder.h>
60 #define le16toh(x) OSSwapLittleToHostInt16(x)
61 #define le32toh(x) OSSwapLittleToHostInt32(x)
62 #define le64toh(x) OSSwapLittleToHostInt64(x)
64 /* FreeBSD mutexes correspond to Darwin's simple locks */
65 #define mtx_lock(lock) simple_lock(lock)
66 #define mtx_unlock(lock) simple_unlock(lock)
67 #define mtx_destroy(lock) /* Nothing. */
69 #define lockdestroy(lock) /* Nothing. */
73 typedef u_int64_t cn_t
;
74 typedef u_int16_t wchar
;
78 #define BBOFF ((off_t)(0))
79 #define BBLOCK ((daddr_t)(0))
81 #define NTFS_VOLUMEINO 3
82 #define NTFS_ATTRDEFINO 4
83 #define NTFS_ROOTINO 5
84 #define NTFS_BITMAPINO 6
85 #define NTFS_BOOTINO 7
86 #define NTFS_BADCLUSINO 8
87 #define NTFS_UPCASEINO 10
88 #define NTFS_MAXFILENAME 255
96 #define NTFS_AF_INRUN 0x00000001
104 u_int8_t a_compression
;
108 #define NTFS_A_STD 0x10
109 #define NTFS_A_ATTRLIST 0x20
110 #define NTFS_A_NAME 0x30
111 #define NTFS_A_VOLUMENAME 0x60
112 #define NTFS_A_DATA 0x80
113 #define NTFS_A_INDXROOT 0x90
114 #define NTFS_A_INDX 0xA0
115 #define NTFS_A_INDXBITMAP 0xB0
117 #define NTFS_MAXATTRNAME 255
119 struct attrhdr a_hdr
;
131 u_int16_t a_compressalg
;
133 u_int64_t a_allocated
;
135 u_int64_t a_initialized
;
139 #define a_r a_S.a_S_r
140 #define a_nr a_S.a_S_nr
145 u_int64_t t_mftwrite
;
149 #define NTFS_FFLAG_RDONLY 0x01LL
150 #define NTFS_FFLAG_HIDDEN 0x02LL
151 #define NTFS_FFLAG_SYSTEM 0x04LL
152 #define NTFS_FFLAG_ARCHIVE 0x20LL
153 #define NTFS_FFLAG_COMPRESSED 0x0800LL
154 #define NTFS_FFLAG_DIR 0x10000000LL
157 u_int32_t n_pnumber
; /* Parent ntnode */
159 ntfs_times_t n_times
;
168 #define NTFS_IRFLAG_INDXALLOC 0x00000001
169 struct attr_indexroot
{
170 u_int32_t ir_unkn1
; /* attribute type (0x30 for $FILE_NAME) */
171 u_int32_t ir_unkn2
; /* collation rule (0x01 for file names) */
172 u_int32_t ir_size
; /* size of index allocation entry */
173 u_int32_t ir_unkn3
; /* clusters per index record, and 3 bytes padding */
174 u_int32_t ir_unkn4
; /* (offset to first index entry?) always 0x10 */
175 u_int32_t ir_datalen
; /* (total size of index enties?) sizeof something */
176 u_int32_t ir_allocated
; /* (allocated size of index entries?) */
177 u_int8_t ir_flag
; /* 1=index allocation needed (large index) */
178 u_int8_t ir_pad1
; /* padding */
179 u_int16_t ir_pad2
; /* padding */
182 struct attr_attrlist
{
183 u_int32_t al_type
; /* Attribute type */
184 u_int16_t reclen
; /* length of this entry */
185 u_int8_t al_namelen
; /* Attribute name len */
186 u_int8_t al_nameoff
; /* Name offset from entry start */
187 u_int64_t al_vcnstart
; /* VCN number */
188 u_int32_t al_inumber
; /* Parent ntnode */
190 u_int16_t al_index
; /* Attribute index in MFT record */
191 u_int16_t al_name
[1]; /* Name */
194 #define NTFS_INDXMAGIC (u_int32_t)(0x58444E49)
195 struct attr_indexalloc
{
196 struct fixuphdr ia_fixup
;
199 u_int16_t ia_hdrsize
;
202 u_int32_t ia_allocated
;
205 #define NTFS_IEFLAG_SUBNODE 0x00000001
206 #define NTFS_IEFLAG_LAST 0x00000002
208 struct attr_indexentry
{
213 u_int32_t ie_flag
;/* 1 - has subnodes, 2 - last */
214 u_int32_t ie_fpnumber
;
216 ntfs_times_t ie_ftimes
;
217 u_int64_t ie_fallocated
;
220 u_int32_t unknown3
; /* used by reparse points and external attributes? */
221 u_int8_t ie_fnamelen
;
222 u_int8_t ie_fnametype
;
223 wchar ie_fname
[NTFS_MAXFILENAME
];
224 /* cn_t ie_bufcn; buffer with subnodes */
227 #define NTFS_FILEMAGIC (u_int32_t)(0x454C4946)
228 #define NTFS_FRFLAG_DIR 0x0002
230 struct fixuphdr fr_fixup
;
231 u_int8_t reserved
[8];
232 u_int16_t fr_seqnum
; /* Sequence number */
234 u_int16_t fr_attroff
; /* offset to attributes */
235 u_int16_t fr_flags
; /* 1-nonresident attr, 2-directory */
236 u_int32_t fr_size
;/* hdr + attributes */
237 u_int32_t fr_allocated
; /* allocated length of record */
238 u_int64_t fr_mainrec
; /* main record */
239 u_int16_t fr_attrnum
; /* maximum attr number + 1 ??? */
242 #define NTFS_ATTRNAME_MAXLEN 0x40
243 #define NTFS_ADFLAG_NONRES 0x0080 /* Attrib can be non resident */
244 #define NTFS_ADFLAG_INDEX 0x0002 /* Attrib can be indexed */
246 wchar ad_name
[NTFS_ATTRNAME_MAXLEN
];
248 u_int32_t reserved1
[2];
251 u_int64_t ad_maxlen
; /* -1 for nonlimited */
260 #define NTFS_BBID "NTFS "
261 #define NTFS_BBIDLEN 8
263 u_int8_t reserved1
[3]; /* asm jmp near ... */
264 u_int8_t bf_sysid
[8]; /* 'NTFS ' */
265 u_int16_t bf_bps
; /* bytes per sector */
266 u_int8_t bf_spc
; /* sectors per cluster */
267 u_int8_t reserved2
[7]; /* unused (zeroed) */
268 u_int8_t bf_media
; /* media desc. (0xF8) */
269 u_int8_t reserved3
[2];
270 u_int16_t bf_spt
; /* sectors per track */
271 u_int16_t bf_heads
; /* number of heads */
272 u_int8_t reserver4
[12];
273 u_int64_t bf_spv
; /* sectors per volume */
274 cn_t bf_mftcn
; /* $MFT cluster number */
275 cn_t bf_mftmirrcn
; /* $MFTMirr cn */
276 u_int8_t bf_mftrecsz
; /* MFT record size (clust) */
277 /* 0xF6 inducates 1/4 */
278 u_int32_t bf_ibsz
; /* index buffer size */
279 u_int32_t bf_volsn
; /* volume ser. num. */
283 * Darwin's ntfs.util needs to include this file to get definitions
284 * for the on-disk structures. It doesn't need the ntfsmount structure.
285 * In fact, since it doesn't #define KERNEL, the struct netexport below
288 * So, I'm using #ifdef KERNEL around the things that are only relevant
289 * to the in-kernel implementation.
291 *¥¥ I don't know if FreeBSD defines KERNEL, or if I need to use or
292 * invent a different conditional here.
296 #define NTFS_SYSNODESNUM 0x0B
298 struct mount
*ntm_mountp
; /* filesystem vfs structure */
299 struct bootfile ntm_bootfile
;
300 dev_t ntm_dev
; /* device mounted */
301 struct vnode
*ntm_devvp
; /* block device mounted vnode */
302 struct vnode
*ntm_sysvn
[NTFS_SYSNODESNUM
];
303 u_int32_t ntm_bpmftrec
;
309 struct ntvattrdef
*ntm_ad
; /* attribute names are stored in native byte order */
311 wchar
* ntm_82u
; /* 8bit to Unicode */
312 char ** ntm_u28
; /* Unicode to 8 bit */
314 struct netexport ntm_export
; /* NFS export information */
318 #define ntm_mftcn ntm_bootfile.bf_mftcn
319 #define ntm_mftmirrcn ntm_bootfile.bf_mftmirrcn
320 #define ntm_mftrecsz ntm_bootfile.bf_mftrecsz
321 #define ntm_spc ntm_bootfile.bf_spc
322 #define ntm_bps ntm_bootfile.bf_bps
326 #define NTFS_NEXTREC(s, type) ((type)(((caddr_t) s) + le16toh((s)->reclen)))
328 /* Convert mount ptr to ntfsmount ptr. */
329 #define VFSTONTFS(mp) ((struct ntfsmount *)((mp)->mnt_data))
330 #define VTONT(v) FTONT(VTOF(v))
331 #define VTOF(v) ((struct fnode *)((v)->v_data))
332 #define FTOV(f) ((f)->f_vp)
333 #define FTONT(f) ((f)->f_ip)
334 #define ntfs_cntobn(cn) ((daddr_t)(cn) * (ntmp->ntm_spc))
335 #define ntfs_cntob(cn) ((off_t)(cn) * (ntmp)->ntm_spc * (ntmp)->ntm_bps)
336 #define ntfs_btocn(off) (cn_t)((off) / ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
337 #define ntfs_btocl(off) (cn_t)((off + ntfs_cntob(1) - 1) / ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
338 #define ntfs_btocnoff(off) (off_t)((off) % ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
339 #define ntfs_bntob(bn) (daddr_t)((bn) * (ntmp)->ntm_bps)
341 #define ntfs_bpbl (daddr_t)((ntmp)->ntm_bps)
343 #ifdef MALLOC_DECLARE
344 MALLOC_DECLARE(M_NTFSMNT
);
345 MALLOC_DECLARE(M_NTFSNTNODE
);
346 MALLOC_DECLARE(M_NTFSFNODE
);
347 MALLOC_DECLARE(M_NTFSDIR
);
348 MALLOC_DECLARE(M_NTFSNTHASH
);
352 #define M_NTFSMNT M_TEMP
355 #define M_NTFSNTNODE M_TEMP
358 #define M_NTFSFNODE M_TEMP
361 #define M_NTFSDIR M_TEMP
364 #define M_NTFSNTHASH M_TEMP
367 #define M_NTFSRUN M_TEMP
370 #define M_NTFSRDATA M_TEMP
372 #ifndef M_NTFSNTVATTR
373 #define M_NTFSNTVATTR M_TEMP
376 #define M_NTFSDECOMP M_TEMP
378 #define VT_NTFS VT_OTHER
380 #if defined(NTFS_DEBUG)
381 #define dprintf(a) printf a
383 #define ddprintf(a) printf a
393 typedef int vop_t(void *);
396 extern vop_t
**ntfs_vnodeop_p
;