Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) #ifndef _EXFAT_RAW_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) #define _EXFAT_RAW_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #define BOOT_SIGNATURE		0xAA55
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #define EXBOOT_SIGNATURE	0xAA550000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #define STR_EXFAT		"EXFAT   "	/* size should be 8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #define EXFAT_MAX_FILE_LEN	255
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) #define VOLUME_DIRTY		0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #define MEDIA_FAILURE		0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define EXFAT_EOF_CLUSTER	0xFFFFFFFFu
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) #define EXFAT_BAD_CLUSTER	0xFFFFFFF7u
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #define EXFAT_FREE_CLUSTER	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) /* Cluster 0, 1 are reserved, the first cluster is 2 in the cluster heap. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) #define EXFAT_RESERVED_CLUSTERS	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #define EXFAT_FIRST_CLUSTER	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #define EXFAT_DATA_CLUSTER_COUNT(sbi)	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	((sbi)->num_clusters - EXFAT_RESERVED_CLUSTERS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) /* AllocationPossible and NoFatChain field in GeneralSecondaryFlags Field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) #define ALLOC_FAT_CHAIN		0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) #define ALLOC_NO_FAT_CHAIN	0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) #define DENTRY_SIZE		32 /* directory entry size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) #define DENTRY_SIZE_BITS	5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) /* exFAT allows 8388608(256MB) directory entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) #define MAX_EXFAT_DENTRIES	8388608
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) /* dentry types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #define EXFAT_UNUSED		0x00	/* end of directory */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) #define EXFAT_DELETE		(~0x80)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) #define IS_EXFAT_DELETED(x)	((x) < 0x80) /* deleted file (0x01~0x7F) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) #define EXFAT_INVAL		0x80	/* invalid value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) #define EXFAT_BITMAP		0x81	/* allocation bitmap */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) #define EXFAT_UPCASE		0x82	/* upcase table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) #define EXFAT_VOLUME		0x83	/* volume label */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) #define EXFAT_FILE		0x85	/* file or dir */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) #define EXFAT_GUID		0xA0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #define EXFAT_PADDING		0xA1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #define EXFAT_ACLTAB		0xA2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) #define EXFAT_STREAM		0xC0	/* stream entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) #define EXFAT_NAME		0xC1	/* file name entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) #define EXFAT_ACL		0xC2	/* stream entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) #define IS_EXFAT_CRITICAL_PRI(x)	(x < 0xA0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) #define IS_EXFAT_BENIGN_PRI(x)		(x < 0xC0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) #define IS_EXFAT_CRITICAL_SEC(x)	(x < 0xE0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) /* checksum types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) #define CS_DIR_ENTRY		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) #define CS_BOOT_SECTOR		1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) #define CS_DEFAULT		2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) /* file attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) #define ATTR_READONLY		0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) #define ATTR_HIDDEN		0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) #define ATTR_SYSTEM		0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) #define ATTR_VOLUME		0x0008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) #define ATTR_SUBDIR		0x0010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) #define ATTR_ARCHIVE		0x0020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) #define ATTR_RWMASK		(ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 				 ATTR_SUBDIR | ATTR_ARCHIVE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) #define BOOTSEC_JUMP_BOOT_LEN		3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) #define BOOTSEC_FS_NAME_LEN		8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) #define BOOTSEC_OLDBPB_LEN		53
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) #define EXFAT_FILE_NAME_LEN		15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) #define EXFAT_MIN_SECT_SIZE_BITS		9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) #define EXFAT_MAX_SECT_SIZE_BITS		12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) #define EXFAT_MAX_SECT_PER_CLUS_BITS(x)		(25 - (x)->sect_size_bits)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) /* EXFAT: Main and Backup Boot Sector (512 bytes) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) struct boot_sector {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	__u8	jmp_boot[BOOTSEC_JUMP_BOOT_LEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	__u8	fs_name[BOOTSEC_FS_NAME_LEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	__u8	must_be_zero[BOOTSEC_OLDBPB_LEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	__le64	partition_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	__le64	vol_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	__le32	fat_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	__le32	fat_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	__le32	clu_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	__le32	clu_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	__le32	root_cluster;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	__le32	vol_serial;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	__u8	fs_revision[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	__le16	vol_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	__u8	sect_size_bits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	__u8	sect_per_clus_bits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	__u8	num_fats;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	__u8	drv_sel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	__u8	percent_in_use;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	__u8	reserved[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	__u8	boot_code[390];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	__le16	signature;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) struct exfat_dentry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	__u8 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 			__u8 num_ext;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 			__le16 checksum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 			__le16 attr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 			__le16 reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 			__le16 create_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 			__le16 create_date;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 			__le16 modify_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 			__le16 modify_date;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 			__le16 access_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 			__le16 access_date;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 			__u8 create_time_cs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 			__u8 modify_time_cs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 			__u8 create_tz;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 			__u8 modify_tz;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 			__u8 access_tz;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 			__u8 reserved2[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 		} __packed file; /* file directory entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 			__u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 			__u8 reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 			__u8 name_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 			__le16 name_hash;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 			__le16 reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 			__le64 valid_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 			__le32 reserved3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 			__le32 start_clu;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 			__le64 size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 		} __packed stream; /* stream extension directory entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 			__u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 			__le16 unicode_0_14[EXFAT_FILE_NAME_LEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 		} __packed name; /* file name directory entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 			__u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 			__u8 reserved[18];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 			__le32 start_clu;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 			__le64 size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 		} __packed bitmap; /* allocation bitmap directory entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 			__u8 reserved1[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 			__le32 checksum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 			__u8 reserved2[12];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 			__le32 start_clu;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 			__le64 size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 		} __packed upcase; /* up-case table directory entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	} __packed dentry;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) #define EXFAT_TZ_VALID		(1 << 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) /* Jan 1 GMT 00:00:00 1980 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) #define EXFAT_MIN_TIMESTAMP_SECS    315532800LL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) /* Dec 31 GMT 23:59:59 2107 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) #define EXFAT_MAX_TIMESTAMP_SECS    4354819199LL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) #endif /* !_EXFAT_RAW_H */