brintos

brintos / linux-shallow public Read only

0
0
Text · 5.0 KiB · 971a1cc Raw
191 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd.4 */5 6#ifndef _EXFAT_RAW_H7#define _EXFAT_RAW_H8 9#include <linux/types.h>10 11#define BOOT_SIGNATURE		0xAA5512#define EXBOOT_SIGNATURE	0xAA55000013#define STR_EXFAT		"EXFAT   "	/* size should be 8 */14 15#define EXFAT_MAX_FILE_LEN	25516 17#define VOLUME_DIRTY		0x000218#define MEDIA_FAILURE		0x000419 20#define EXFAT_EOF_CLUSTER	0xFFFFFFFFu21#define EXFAT_BAD_CLUSTER	0xFFFFFFF7u22#define EXFAT_FREE_CLUSTER	023/* Cluster 0, 1 are reserved, the first cluster is 2 in the cluster heap. */24#define EXFAT_RESERVED_CLUSTERS	225#define EXFAT_FIRST_CLUSTER	226#define EXFAT_DATA_CLUSTER_COUNT(sbi)	\27	((sbi)->num_clusters - EXFAT_RESERVED_CLUSTERS)28 29/* AllocationPossible and NoFatChain field in GeneralSecondaryFlags Field */30#define ALLOC_POSSIBLE		0x0131#define ALLOC_FAT_CHAIN		0x0132#define ALLOC_NO_FAT_CHAIN	0x0333 34#define DENTRY_SIZE		32 /* directory entry size */35#define DENTRY_SIZE_BITS	536/* exFAT allows 8388608(256MB) directory entries */37#define MAX_EXFAT_DENTRIES	838860838 39/* dentry types */40#define EXFAT_UNUSED		0x00	/* end of directory */41#define EXFAT_DELETE		(~0x80)42#define IS_EXFAT_DELETED(x)	((x) < 0x80) /* deleted file (0x01~0x7F) */43#define EXFAT_INVAL		0x80	/* invalid value */44#define EXFAT_BITMAP		0x81	/* allocation bitmap */45#define EXFAT_UPCASE		0x82	/* upcase table */46#define EXFAT_VOLUME		0x83	/* volume label */47#define EXFAT_FILE		0x85	/* file or dir */48#define EXFAT_GUID		0xA049#define EXFAT_PADDING		0xA150#define EXFAT_ACLTAB		0xA251#define EXFAT_STREAM		0xC0	/* stream entry */52#define EXFAT_NAME		0xC1	/* file name entry */53#define EXFAT_ACL		0xC2	/* stream entry */54#define EXFAT_VENDOR_EXT	0xE0	/* vendor extension entry */55#define EXFAT_VENDOR_ALLOC	0xE1	/* vendor allocation entry */56 57#define IS_EXFAT_CRITICAL_PRI(x)	(x < 0xA0)58#define IS_EXFAT_BENIGN_PRI(x)		(x < 0xC0)59#define IS_EXFAT_CRITICAL_SEC(x)	(x < 0xE0)60 61/* checksum types */62#define CS_DIR_ENTRY		063#define CS_BOOT_SECTOR		164#define CS_DEFAULT		265 66/* file attributes */67#define EXFAT_ATTR_READONLY	0x000168#define EXFAT_ATTR_HIDDEN	0x000269#define EXFAT_ATTR_SYSTEM	0x000470#define EXFAT_ATTR_VOLUME	0x000871#define EXFAT_ATTR_SUBDIR	0x001072#define EXFAT_ATTR_ARCHIVE	0x002073 74#define EXFAT_ATTR_RWMASK	(EXFAT_ATTR_HIDDEN | EXFAT_ATTR_SYSTEM | \75				 EXFAT_ATTR_VOLUME | EXFAT_ATTR_SUBDIR | \76				 EXFAT_ATTR_ARCHIVE)77 78#define BOOTSEC_JUMP_BOOT_LEN		379#define BOOTSEC_FS_NAME_LEN		880#define BOOTSEC_OLDBPB_LEN		5381 82#define EXFAT_FILE_NAME_LEN		1583 84#define EXFAT_MIN_SECT_SIZE_BITS		985#define EXFAT_MAX_SECT_SIZE_BITS		1286#define EXFAT_MAX_SECT_PER_CLUS_BITS(x)		(25 - (x)->sect_size_bits)87 88/* EXFAT: Main and Backup Boot Sector (512 bytes) */89struct boot_sector {90	__u8	jmp_boot[BOOTSEC_JUMP_BOOT_LEN];91	__u8	fs_name[BOOTSEC_FS_NAME_LEN];92	__u8	must_be_zero[BOOTSEC_OLDBPB_LEN];93	__le64	partition_offset;94	__le64	vol_length;95	__le32	fat_offset;96	__le32	fat_length;97	__le32	clu_offset;98	__le32	clu_count;99	__le32	root_cluster;100	__le32	vol_serial;101	__u8	fs_revision[2];102	__le16	vol_flags;103	__u8	sect_size_bits;104	__u8	sect_per_clus_bits;105	__u8	num_fats;106	__u8	drv_sel;107	__u8	percent_in_use;108	__u8	reserved[7];109	__u8	boot_code[390];110	__le16	signature;111} __packed;112 113struct exfat_dentry {114	__u8 type;115	union {116		struct {117			__u8 num_ext;118			__le16 checksum;119			__le16 attr;120			__le16 reserved1;121			__le16 create_time;122			__le16 create_date;123			__le16 modify_time;124			__le16 modify_date;125			__le16 access_time;126			__le16 access_date;127			__u8 create_time_cs;128			__u8 modify_time_cs;129			__u8 create_tz;130			__u8 modify_tz;131			__u8 access_tz;132			__u8 reserved2[7];133		} __packed file; /* file directory entry */134		struct {135			__u8 flags;136			__u8 reserved1;137			__u8 name_len;138			__le16 name_hash;139			__le16 reserved2;140			__le64 valid_size;141			__le32 reserved3;142			__le32 start_clu;143			__le64 size;144		} __packed stream; /* stream extension directory entry */145		struct {146			__u8 flags;147			__le16 unicode_0_14[EXFAT_FILE_NAME_LEN];148		} __packed name; /* file name directory entry */149		struct {150			__u8 flags;151			__u8 reserved[18];152			__le32 start_clu;153			__le64 size;154		} __packed bitmap; /* allocation bitmap directory entry */155		struct {156			__u8 reserved1[3];157			__le32 checksum;158			__u8 reserved2[12];159			__le32 start_clu;160			__le64 size;161		} __packed upcase; /* up-case table directory entry */162		struct {163			__u8 flags;164			__u8 vendor_guid[16];165			__u8 vendor_defined[14];166		} __packed vendor_ext; /* vendor extension directory entry */167		struct {168			__u8 flags;169			__u8 vendor_guid[16];170			__u8 vendor_defined[2];171			__le32 start_clu;172			__le64 size;173		} __packed vendor_alloc; /* vendor allocation directory entry */174		struct {175			__u8 flags;176			__u8 custom_defined[18];177			__le32 start_clu;178			__le64 size;179		} __packed generic_secondary; /* generic secondary directory entry */180	} __packed dentry;181} __packed;182 183#define EXFAT_TZ_VALID		(1 << 7)184 185/* Jan 1 GMT 00:00:00 1980 */186#define EXFAT_MIN_TIMESTAMP_SECS    315532800LL187/* Dec 31 GMT 23:59:59 2107 */188#define EXFAT_MAX_TIMESTAMP_SECS    4354819199LL189 190#endif /* !_EXFAT_RAW_H */191