1 /* 2 * ntfs.h - Defines for NTFS Linux kernel driver. 3 * 4 * Copyright (c) 2001-2014 Anton Altaparmakov and Tuxera Inc. 5 * Copyright (C) 2002 Richard Russon 6 * 7 * This program/include file is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License as published 9 * by the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program/include file is distributed in the hope that it will be 13 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program (in the main directory of the Linux-NTFS 19 * distribution in the file COPYING); if not, write to the Free Software 20 * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 */ 22 23 #ifndef _LINUX_NTFS_H 24 #define _LINUX_NTFS_H 25 26 #include <linux/stddef.h> 27 #include <linux/kernel.h> 28 #include <linux/module.h> 29 #include <linux/compiler.h> 30 #include <linux/fs.h> 31 #include <linux/nls.h> 32 #include <linux/smp.h> 33 #include <linux/pagemap.h> 34 35 #include "types.h" 36 #include "volume.h" 37 #include "layout.h" 38 39 typedef enum { 40 NTFS_BLOCK_SIZE = 512, 41 NTFS_BLOCK_SIZE_BITS = 9, 42 NTFS_SB_MAGIC = 0x5346544e, /* 'NTFS' */ 43 NTFS_MAX_NAME_LEN = 255, 44 NTFS_MAX_ATTR_NAME_LEN = 255, 45 NTFS_MAX_CLUSTER_SIZE = 64 * 1024, /* 64kiB */ 46 NTFS_MAX_PAGES_PER_CLUSTER = NTFS_MAX_CLUSTER_SIZE / PAGE_SIZE, 47 } NTFS_CONSTANTS; 48 49 /* Global variables. */ 50 51 /* Slab caches (from super.c). */ 52 extern struct kmem_cache *ntfs_name_cache; 53 extern struct kmem_cache *ntfs_inode_cache; 54 extern struct kmem_cache *ntfs_big_inode_cache; 55 extern struct kmem_cache *ntfs_attr_ctx_cache; 56 extern struct kmem_cache *ntfs_index_ctx_cache; 57 58 /* The various operations structs defined throughout the driver files. */ 59 extern const struct address_space_operations ntfs_normal_aops; 60 extern const struct address_space_operations ntfs_compressed_aops; 61 extern const struct address_space_operations ntfs_mst_aops; 62 63 extern const struct file_operations ntfs_file_ops; 64 extern const struct inode_operations ntfs_file_inode_ops; 65 66 extern const struct file_operations ntfs_dir_ops; 67 extern const struct inode_operations ntfs_dir_inode_ops; 68 69 extern const struct file_operations ntfs_empty_file_ops; 70 extern const struct inode_operations ntfs_empty_inode_ops; 71 72 extern const struct export_operations ntfs_export_ops; 73 74 /** 75 * NTFS_SB - return the ntfs volume given a vfs super block 76 * @sb: VFS super block 77 * 78 * NTFS_SB() returns the ntfs volume associated with the VFS super block @sb. 79 */ 80 static inline ntfs_volume *NTFS_SB(struct super_block *sb) 81 { 82 return sb->s_fs_info; 83 } 84 85 /* Declarations of functions and global variables. */ 86 87 /* From fs/ntfs/compress.c */ 88 extern int ntfs_read_compressed_block(struct page *page); 89 extern int allocate_compression_buffers(void); 90 extern void free_compression_buffers(void); 91 92 /* From fs/ntfs/super.c */ 93 #define default_upcase_len 0x10000 94 extern struct mutex ntfs_lock; 95 96 typedef struct { 97 int val; 98 char *str; 99 } option_t; 100 extern const option_t on_errors_arr[]; 101 102 /* From fs/ntfs/mst.c */ 103 extern int post_read_mst_fixup(NTFS_RECORD *b, const u32 size); 104 extern int pre_write_mst_fixup(NTFS_RECORD *b, const u32 size); 105 extern void post_write_mst_fixup(NTFS_RECORD *b); 106 107 /* From fs/ntfs/unistr.c */ 108 extern bool ntfs_are_names_equal(const ntfschar *s1, size_t s1_len, 109 const ntfschar *s2, size_t s2_len, 110 const IGNORE_CASE_BOOL ic, 111 const ntfschar *upcase, const u32 upcase_size); 112 extern int ntfs_collate_names(const ntfschar *name1, const u32 name1_len, 113 const ntfschar *name2, const u32 name2_len, 114 const int err_val, const IGNORE_CASE_BOOL ic, 115 const ntfschar *upcase, const u32 upcase_len); 116 extern int ntfs_ucsncmp(const ntfschar *s1, const ntfschar *s2, size_t n); 117 extern int ntfs_ucsncasecmp(const ntfschar *s1, const ntfschar *s2, size_t n, 118 const ntfschar *upcase, const u32 upcase_size); 119 extern void ntfs_upcase_name(ntfschar *name, u32 name_len, 120 const ntfschar *upcase, const u32 upcase_len); 121 extern void ntfs_file_upcase_value(FILE_NAME_ATTR *file_name_attr, 122 const ntfschar *upcase, const u32 upcase_len); 123 extern int ntfs_file_compare_values(FILE_NAME_ATTR *file_name_attr1, 124 FILE_NAME_ATTR *file_name_attr2, 125 const int err_val, const IGNORE_CASE_BOOL ic, 126 const ntfschar *upcase, const u32 upcase_len); 127 extern int ntfs_nlstoucs(const ntfs_volume *vol, const char *ins, 128 const int ins_len, ntfschar **outs); 129 extern int ntfs_ucstonls(const ntfs_volume *vol, const ntfschar *ins, 130 const int ins_len, unsigned char **outs, int outs_len); 131 132 /* From fs/ntfs/upcase.c */ 133 extern ntfschar *generate_default_upcase(void); 134 135 static inline int ntfs_ffs(int x) 136 { 137 int r = 1; 138 139 if (!x) 140 return 0; 141 if (!(x & 0xffff)) { 142 x >>= 16; 143 r += 16; 144 } 145 if (!(x & 0xff)) { 146 x >>= 8; 147 r += 8; 148 } 149 if (!(x & 0xf)) { 150 x >>= 4; 151 r += 4; 152 } 153 if (!(x & 3)) { 154 x >>= 2; 155 r += 2; 156 } 157 if (!(x & 1)) { 158 x >>= 1; 159 r += 1; 160 } 161 return r; 162 } 163 164 #endif /* _LINUX_NTFS_H */ 165