xref: /openbmc/linux/fs/ntfs/ntfs.h (revision 4e5e529a)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  * ntfs.h - Defines for NTFS Linux kernel driver. Part of the Linux-NTFS
31da177e4SLinus Torvalds  *	    project.
41da177e4SLinus Torvalds  *
5bb3cf335SAnton Altaparmakov  * Copyright (c) 2001-2005 Anton Altaparmakov
61da177e4SLinus Torvalds  * Copyright (C) 2002 Richard Russon
71da177e4SLinus Torvalds  *
81da177e4SLinus Torvalds  * This program/include file is free software; you can redistribute it and/or
91da177e4SLinus Torvalds  * modify it under the terms of the GNU General Public License as published
101da177e4SLinus Torvalds  * by the Free Software Foundation; either version 2 of the License, or
111da177e4SLinus Torvalds  * (at your option) any later version.
121da177e4SLinus Torvalds  *
131da177e4SLinus Torvalds  * This program/include file is distributed in the hope that it will be
141da177e4SLinus Torvalds  * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
151da177e4SLinus Torvalds  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
161da177e4SLinus Torvalds  * GNU General Public License for more details.
171da177e4SLinus Torvalds  *
181da177e4SLinus Torvalds  * You should have received a copy of the GNU General Public License
191da177e4SLinus Torvalds  * along with this program (in the main directory of the Linux-NTFS
201da177e4SLinus Torvalds  * distribution in the file COPYING); if not, write to the Free Software
211da177e4SLinus Torvalds  * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
221da177e4SLinus Torvalds  */
231da177e4SLinus Torvalds 
241da177e4SLinus Torvalds #ifndef _LINUX_NTFS_H
251da177e4SLinus Torvalds #define _LINUX_NTFS_H
261da177e4SLinus Torvalds 
271da177e4SLinus Torvalds #include <linux/stddef.h>
281da177e4SLinus Torvalds #include <linux/kernel.h>
291da177e4SLinus Torvalds #include <linux/module.h>
301da177e4SLinus Torvalds #include <linux/compiler.h>
311da177e4SLinus Torvalds #include <linux/fs.h>
321da177e4SLinus Torvalds #include <linux/nls.h>
331da177e4SLinus Torvalds #include <linux/smp.h>
347fafb8b6SAnton Altaparmakov #include <linux/pagemap.h>
351da177e4SLinus Torvalds 
361da177e4SLinus Torvalds #include "types.h"
371da177e4SLinus Torvalds #include "volume.h"
381da177e4SLinus Torvalds #include "layout.h"
391da177e4SLinus Torvalds 
401da177e4SLinus Torvalds typedef enum {
411da177e4SLinus Torvalds 	NTFS_BLOCK_SIZE		= 512,
421da177e4SLinus Torvalds 	NTFS_BLOCK_SIZE_BITS	= 9,
431da177e4SLinus Torvalds 	NTFS_SB_MAGIC		= 0x5346544e,	/* 'NTFS' */
441da177e4SLinus Torvalds 	NTFS_MAX_NAME_LEN	= 255,
45bb3cf335SAnton Altaparmakov 	NTFS_MAX_ATTR_NAME_LEN	= 255,
467fafb8b6SAnton Altaparmakov 	NTFS_MAX_CLUSTER_SIZE	= 64 * 1024,	/* 64kiB */
477fafb8b6SAnton Altaparmakov 	NTFS_MAX_PAGES_PER_CLUSTER = NTFS_MAX_CLUSTER_SIZE / PAGE_CACHE_SIZE,
481da177e4SLinus Torvalds } NTFS_CONSTANTS;
491da177e4SLinus Torvalds 
501da177e4SLinus Torvalds /* Global variables. */
511da177e4SLinus Torvalds 
521da177e4SLinus Torvalds /* Slab caches (from super.c). */
5364419d93SPekka Enberg extern struct kmem_cache *ntfs_name_cache;
5464419d93SPekka Enberg extern struct kmem_cache *ntfs_inode_cache;
5564419d93SPekka Enberg extern struct kmem_cache *ntfs_big_inode_cache;
5664419d93SPekka Enberg extern struct kmem_cache *ntfs_attr_ctx_cache;
5764419d93SPekka Enberg extern struct kmem_cache *ntfs_index_ctx_cache;
581da177e4SLinus Torvalds 
591da177e4SLinus Torvalds /* The various operations structs defined throughout the driver files. */
601da177e4SLinus Torvalds extern struct address_space_operations ntfs_aops;
611da177e4SLinus Torvalds extern struct address_space_operations ntfs_mst_aops;
621da177e4SLinus Torvalds 
631da177e4SLinus Torvalds extern struct  file_operations ntfs_file_ops;
641da177e4SLinus Torvalds extern struct inode_operations ntfs_file_inode_ops;
651da177e4SLinus Torvalds 
661da177e4SLinus Torvalds extern struct  file_operations ntfs_dir_ops;
671da177e4SLinus Torvalds extern struct inode_operations ntfs_dir_inode_ops;
681da177e4SLinus Torvalds 
691da177e4SLinus Torvalds extern struct  file_operations ntfs_empty_file_ops;
701da177e4SLinus Torvalds extern struct inode_operations ntfs_empty_inode_ops;
711da177e4SLinus Torvalds 
7241382686SAnton Altaparmakov extern struct export_operations ntfs_export_ops;
7341382686SAnton Altaparmakov 
741da177e4SLinus Torvalds /**
751da177e4SLinus Torvalds  * NTFS_SB - return the ntfs volume given a vfs super block
761da177e4SLinus Torvalds  * @sb:		VFS super block
771da177e4SLinus Torvalds  *
781da177e4SLinus Torvalds  * NTFS_SB() returns the ntfs volume associated with the VFS super block @sb.
791da177e4SLinus Torvalds  */
801da177e4SLinus Torvalds static inline ntfs_volume *NTFS_SB(struct super_block *sb)
811da177e4SLinus Torvalds {
821da177e4SLinus Torvalds 	return sb->s_fs_info;
831da177e4SLinus Torvalds }
841da177e4SLinus Torvalds 
851da177e4SLinus Torvalds /* Declarations of functions and global variables. */
861da177e4SLinus Torvalds 
871da177e4SLinus Torvalds /* From fs/ntfs/compress.c */
881da177e4SLinus Torvalds extern int ntfs_read_compressed_block(struct page *page);
891da177e4SLinus Torvalds extern int allocate_compression_buffers(void);
901da177e4SLinus Torvalds extern void free_compression_buffers(void);
911da177e4SLinus Torvalds 
921da177e4SLinus Torvalds /* From fs/ntfs/super.c */
931da177e4SLinus Torvalds #define default_upcase_len 0x10000
944e5e529aSIngo Molnar extern struct mutex ntfs_lock;
951da177e4SLinus Torvalds 
961da177e4SLinus Torvalds typedef struct {
971da177e4SLinus Torvalds 	int val;
981da177e4SLinus Torvalds 	char *str;
991da177e4SLinus Torvalds } option_t;
1001da177e4SLinus Torvalds extern const option_t on_errors_arr[];
1011da177e4SLinus Torvalds 
1021da177e4SLinus Torvalds /* From fs/ntfs/mst.c */
1031da177e4SLinus Torvalds extern int post_read_mst_fixup(NTFS_RECORD *b, const u32 size);
1041da177e4SLinus Torvalds extern int pre_write_mst_fixup(NTFS_RECORD *b, const u32 size);
1051da177e4SLinus Torvalds extern void post_write_mst_fixup(NTFS_RECORD *b);
1061da177e4SLinus Torvalds 
1071da177e4SLinus Torvalds /* From fs/ntfs/unistr.c */
1081da177e4SLinus Torvalds extern BOOL ntfs_are_names_equal(const ntfschar *s1, size_t s1_len,
1091da177e4SLinus Torvalds 		const ntfschar *s2, size_t s2_len,
1101da177e4SLinus Torvalds 		const IGNORE_CASE_BOOL ic,
1111da177e4SLinus Torvalds 		const ntfschar *upcase, const u32 upcase_size);
1121da177e4SLinus Torvalds extern int ntfs_collate_names(const ntfschar *name1, const u32 name1_len,
1131da177e4SLinus Torvalds 		const ntfschar *name2, const u32 name2_len,
1141da177e4SLinus Torvalds 		const int err_val, const IGNORE_CASE_BOOL ic,
1151da177e4SLinus Torvalds 		const ntfschar *upcase, const u32 upcase_len);
1161da177e4SLinus Torvalds extern int ntfs_ucsncmp(const ntfschar *s1, const ntfschar *s2, size_t n);
1171da177e4SLinus Torvalds extern int ntfs_ucsncasecmp(const ntfschar *s1, const ntfschar *s2, size_t n,
1181da177e4SLinus Torvalds 		const ntfschar *upcase, const u32 upcase_size);
1191da177e4SLinus Torvalds extern void ntfs_upcase_name(ntfschar *name, u32 name_len,
1201da177e4SLinus Torvalds 		const ntfschar *upcase, const u32 upcase_len);
1211da177e4SLinus Torvalds extern void ntfs_file_upcase_value(FILE_NAME_ATTR *file_name_attr,
1221da177e4SLinus Torvalds 		const ntfschar *upcase, const u32 upcase_len);
1231da177e4SLinus Torvalds extern int ntfs_file_compare_values(FILE_NAME_ATTR *file_name_attr1,
1241da177e4SLinus Torvalds 		FILE_NAME_ATTR *file_name_attr2,
1251da177e4SLinus Torvalds 		const int err_val, const IGNORE_CASE_BOOL ic,
1261da177e4SLinus Torvalds 		const ntfschar *upcase, const u32 upcase_len);
1271da177e4SLinus Torvalds extern int ntfs_nlstoucs(const ntfs_volume *vol, const char *ins,
1281da177e4SLinus Torvalds 		const int ins_len, ntfschar **outs);
1291da177e4SLinus Torvalds extern int ntfs_ucstonls(const ntfs_volume *vol, const ntfschar *ins,
1301da177e4SLinus Torvalds 		const int ins_len, unsigned char **outs, int outs_len);
1311da177e4SLinus Torvalds 
1321da177e4SLinus Torvalds /* From fs/ntfs/upcase.c */
1331da177e4SLinus Torvalds extern ntfschar *generate_default_upcase(void);
1341da177e4SLinus Torvalds 
1351da177e4SLinus Torvalds #endif /* _LINUX_NTFS_H */
136