| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #ifndef __LINUX_UDF_SB_H | 
|  | 2 | #define __LINUX_UDF_SB_H | 
|  | 3 |  | 
|  | 4 | /* Since UDF 2.01 is ISO 13346 based... */ | 
|  | 5 | #define UDF_SUPER_MAGIC			0x15013346 | 
|  | 6 |  | 
|  | 7 | #define UDF_MAX_READ_VERSION		0x0201 | 
|  | 8 | #define UDF_MAX_WRITE_VERSION		0x0201 | 
|  | 9 |  | 
|  | 10 | #define UDF_FLAG_USE_EXTENDED_FE	0 | 
|  | 11 | #define UDF_VERS_USE_EXTENDED_FE	0x0200 | 
|  | 12 | #define UDF_FLAG_USE_STREAMS		1 | 
|  | 13 | #define UDF_VERS_USE_STREAMS		0x0200 | 
|  | 14 | #define UDF_FLAG_USE_SHORT_AD		2 | 
|  | 15 | #define UDF_FLAG_USE_AD_IN_ICB		3 | 
|  | 16 | #define UDF_FLAG_USE_FILE_CTIME_EA	4 | 
|  | 17 | #define UDF_FLAG_STRICT			5 | 
|  | 18 | #define UDF_FLAG_UNDELETE		6 | 
|  | 19 | #define UDF_FLAG_UNHIDE			7 | 
|  | 20 | #define UDF_FLAG_VARCONV		8 | 
|  | 21 | #define UDF_FLAG_NLS_MAP		9 | 
|  | 22 | #define UDF_FLAG_UTF8			10 | 
| Phillip Susi | 4d6660e | 2006-03-07 21:55:24 -0800 | [diff] [blame] | 23 | #define UDF_FLAG_UID_FORGET     11    /* save -1 for uid to disk */ | 
|  | 24 | #define UDF_FLAG_UID_IGNORE     12    /* use sb uid instead of on disk uid */ | 
|  | 25 | #define UDF_FLAG_GID_FORGET     13 | 
|  | 26 | #define UDF_FLAG_GID_IGNORE     14 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 27 |  | 
|  | 28 | #define UDF_PART_FLAG_UNALLOC_BITMAP	0x0001 | 
|  | 29 | #define UDF_PART_FLAG_UNALLOC_TABLE	0x0002 | 
|  | 30 | #define UDF_PART_FLAG_FREED_BITMAP	0x0004 | 
|  | 31 | #define UDF_PART_FLAG_FREED_TABLE	0x0008 | 
|  | 32 | #define UDF_PART_FLAG_READ_ONLY		0x0010 | 
|  | 33 | #define UDF_PART_FLAG_WRITE_ONCE	0x0020 | 
|  | 34 | #define UDF_PART_FLAG_REWRITABLE	0x0040 | 
|  | 35 | #define UDF_PART_FLAG_OVERWRITABLE	0x0080 | 
|  | 36 |  | 
|  | 37 | static inline struct udf_sb_info *UDF_SB(struct super_block *sb) | 
|  | 38 | { | 
|  | 39 | return sb->s_fs_info; | 
|  | 40 | } | 
|  | 41 |  | 
|  | 42 | #define UDF_SB_FREE(X)\ | 
|  | 43 | {\ | 
|  | 44 | if (UDF_SB(X))\ | 
|  | 45 | {\ | 
| Jesper Juhl | f99d49a | 2005-11-07 01:01:34 -0800 | [diff] [blame] | 46 | kfree(UDF_SB_PARTMAPS(X));\ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 47 | UDF_SB_PARTMAPS(X) = NULL;\ | 
|  | 48 | }\ | 
|  | 49 | } | 
|  | 50 |  | 
|  | 51 | #define UDF_SB_ALLOC_PARTMAPS(X,Y)\ | 
|  | 52 | {\ | 
|  | 53 | UDF_SB_PARTMAPS(X) = kmalloc(sizeof(struct udf_part_map) * Y, GFP_KERNEL);\ | 
|  | 54 | if (UDF_SB_PARTMAPS(X) != NULL)\ | 
|  | 55 | {\ | 
|  | 56 | UDF_SB_NUMPARTS(X) = Y;\ | 
|  | 57 | memset(UDF_SB_PARTMAPS(X), 0x00, sizeof(struct udf_part_map) * Y);\ | 
|  | 58 | }\ | 
|  | 59 | else\ | 
|  | 60 | {\ | 
|  | 61 | UDF_SB_NUMPARTS(X) = 0;\ | 
|  | 62 | udf_error(X, __FUNCTION__, "Unable to allocate space for %d partition maps", Y);\ | 
|  | 63 | }\ | 
|  | 64 | } | 
|  | 65 |  | 
|  | 66 | #define UDF_SB_ALLOC_BITMAP(X,Y,Z)\ | 
|  | 67 | {\ | 
|  | 68 | int nr_groups = ((UDF_SB_PARTLEN((X),(Y)) + (sizeof(struct spaceBitmapDesc) << 3) +\ | 
|  | 69 | ((X)->s_blocksize * 8) - 1) / ((X)->s_blocksize * 8));\ | 
|  | 70 | int size = sizeof(struct udf_bitmap) + (sizeof(struct buffer_head *) * nr_groups);\ | 
|  | 71 | if (size <= PAGE_SIZE)\ | 
|  | 72 | UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap = kmalloc(size, GFP_KERNEL);\ | 
|  | 73 | else\ | 
|  | 74 | UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap = vmalloc(size);\ | 
|  | 75 | if (UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap != NULL)\ | 
|  | 76 | {\ | 
|  | 77 | memset(UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap, 0x00, size);\ | 
|  | 78 | UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap->s_block_bitmap =\ | 
|  | 79 | (struct buffer_head **)(UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap + 1);\ | 
|  | 80 | UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap->s_nr_groups = nr_groups;\ | 
|  | 81 | }\ | 
|  | 82 | else\ | 
|  | 83 | {\ | 
|  | 84 | udf_error(X, __FUNCTION__, "Unable to allocate space for bitmap and %d buffer_head pointers", nr_groups);\ | 
|  | 85 | }\ | 
|  | 86 | } | 
|  | 87 |  | 
|  | 88 | #define UDF_SB_FREE_BITMAP(X,Y,Z)\ | 
|  | 89 | {\ | 
|  | 90 | int i;\ | 
|  | 91 | int nr_groups = UDF_SB_BITMAP_NR_GROUPS(X,Y,Z);\ | 
|  | 92 | int size = sizeof(struct udf_bitmap) + (sizeof(struct buffer_head *) * nr_groups);\ | 
|  | 93 | for (i=0; i<nr_groups; i++)\ | 
|  | 94 | {\ | 
|  | 95 | if (UDF_SB_BITMAP(X,Y,Z,i))\ | 
|  | 96 | udf_release_data(UDF_SB_BITMAP(X,Y,Z,i));\ | 
|  | 97 | }\ | 
|  | 98 | if (size <= PAGE_SIZE)\ | 
|  | 99 | kfree(UDF_SB_PARTMAPS(X)[Y].Z.s_bitmap);\ | 
|  | 100 | else\ | 
|  | 101 | vfree(UDF_SB_PARTMAPS(X)[Y].Z.s_bitmap);\ | 
|  | 102 | } | 
|  | 103 |  | 
|  | 104 | #define UDF_QUERY_FLAG(X,Y)			( UDF_SB(X)->s_flags & ( 1 << (Y) ) ) | 
|  | 105 | #define UDF_SET_FLAG(X,Y)			( UDF_SB(X)->s_flags |= ( 1 << (Y) ) ) | 
|  | 106 | #define UDF_CLEAR_FLAG(X,Y)			( UDF_SB(X)->s_flags &= ~( 1 << (Y) ) ) | 
|  | 107 |  | 
|  | 108 | #define UDF_UPDATE_UDFREV(X,Y)			( ((Y) > UDF_SB_UDFREV(X)) ? UDF_SB_UDFREV(X) = (Y) : UDF_SB_UDFREV(X) ) | 
|  | 109 |  | 
|  | 110 | #define UDF_SB_PARTMAPS(X)			( UDF_SB(X)->s_partmaps ) | 
|  | 111 | #define UDF_SB_PARTTYPE(X,Y)			( UDF_SB_PARTMAPS(X)[(Y)].s_partition_type ) | 
|  | 112 | #define UDF_SB_PARTROOT(X,Y)			( UDF_SB_PARTMAPS(X)[(Y)].s_partition_root ) | 
|  | 113 | #define UDF_SB_PARTLEN(X,Y)			( UDF_SB_PARTMAPS(X)[(Y)].s_partition_len ) | 
|  | 114 | #define UDF_SB_PARTVSN(X,Y)			( UDF_SB_PARTMAPS(X)[(Y)].s_volumeseqnum ) | 
|  | 115 | #define UDF_SB_PARTNUM(X,Y)			( UDF_SB_PARTMAPS(X)[(Y)].s_partition_num ) | 
|  | 116 | #define UDF_SB_TYPESPAR(X,Y)			( UDF_SB_PARTMAPS(X)[(Y)].s_type_specific.s_sparing ) | 
|  | 117 | #define UDF_SB_TYPEVIRT(X,Y)			( UDF_SB_PARTMAPS(X)[(Y)].s_type_specific.s_virtual ) | 
|  | 118 | #define UDF_SB_PARTFUNC(X,Y)			( UDF_SB_PARTMAPS(X)[(Y)].s_partition_func ) | 
|  | 119 | #define UDF_SB_PARTFLAGS(X,Y)			( UDF_SB_PARTMAPS(X)[(Y)].s_partition_flags ) | 
|  | 120 | #define UDF_SB_BITMAP(X,Y,Z,I)			( UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap->s_block_bitmap[I] ) | 
|  | 121 | #define UDF_SB_BITMAP_NR_GROUPS(X,Y,Z)		( UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap->s_nr_groups ) | 
|  | 122 |  | 
|  | 123 | #define UDF_SB_VOLIDENT(X)			( UDF_SB(X)->s_volident ) | 
|  | 124 | #define UDF_SB_NUMPARTS(X)			( UDF_SB(X)->s_partitions ) | 
|  | 125 | #define UDF_SB_PARTITION(X)			( UDF_SB(X)->s_partition ) | 
|  | 126 | #define UDF_SB_SESSION(X)			( UDF_SB(X)->s_session ) | 
|  | 127 | #define UDF_SB_ANCHOR(X)			( UDF_SB(X)->s_anchor ) | 
|  | 128 | #define UDF_SB_LASTBLOCK(X)			( UDF_SB(X)->s_lastblock ) | 
|  | 129 | #define UDF_SB_LVIDBH(X)			( UDF_SB(X)->s_lvidbh ) | 
|  | 130 | #define UDF_SB_LVID(X)				( (struct logicalVolIntegrityDesc *)UDF_SB_LVIDBH(X)->b_data ) | 
|  | 131 | #define UDF_SB_LVIDIU(X)			( (struct logicalVolIntegrityDescImpUse *)&(UDF_SB_LVID(X)->impUse[le32_to_cpu(UDF_SB_LVID(X)->numOfPartitions) * 2 * sizeof(uint32_t)/sizeof(uint8_t)]) ) | 
|  | 132 |  | 
|  | 133 | #define UDF_SB_UMASK(X)				( UDF_SB(X)->s_umask ) | 
|  | 134 | #define UDF_SB_GID(X)				( UDF_SB(X)->s_gid ) | 
|  | 135 | #define UDF_SB_UID(X)				( UDF_SB(X)->s_uid ) | 
|  | 136 | #define UDF_SB_RECORDTIME(X)			( UDF_SB(X)->s_recordtime ) | 
|  | 137 | #define UDF_SB_SERIALNUM(X)			( UDF_SB(X)->s_serialnum ) | 
|  | 138 | #define UDF_SB_UDFREV(X)			( UDF_SB(X)->s_udfrev ) | 
|  | 139 | #define UDF_SB_FLAGS(X)				( UDF_SB(X)->s_flags ) | 
|  | 140 | #define UDF_SB_VAT(X)				( UDF_SB(X)->s_vat ) | 
|  | 141 |  | 
|  | 142 | #endif /* __LINUX_UDF_SB_H */ |