#define DENTRY_SIZE_BITS 5
/* exFAT allows 8388608(256MB) directory entries */
#define MAX_EXFAT_DENTRIES 8388608
+#define MIN_FILE_DENTRIES 3
+#define MAX_NAME_DENTRIES 17
+#define MAX_EXT_DENTRIES 0xFF
/* dentry types */
#define MSDOS_DELETED 0xE5 /* deleted mark */
#define MSDOS_UNUSED 0x00 /* end of directory */
-#define EXFAT_UNUSED 0x00 /* end of directory */
+#define EXFAT_LAST 0x00 /* end of directory */
#define EXFAT_DELETE ~(0x80)
#define IS_EXFAT_DELETED(x) ((x) < 0x80) /* deleted file (0x01~0x7F) */
#define EXFAT_INVAL 0x80 /* invalid value */
#define EXFAT_STREAM 0xC0 /* stream entry */
#define EXFAT_NAME 0xC1 /* file name entry */
#define EXFAT_ACL 0xC2 /* stream entry */
+#define EXFAT_VENDOR_EXT 0xE0
+#define EXFAT_VENDOR_ALLOC 0xE1
/* checksum types */
#define CS_DIR_ENTRY 0
#define EXFAT_BAD_CLUSTER (0xFFFFFFF7U)
#define EXFAT_FREE_CLUSTER (0)
#define EXFAT_FIRST_CLUSTER (2)
-#define EXFAT_REVERVED_CLUSTERS (2)
+#define EXFAT_RESERVED_CLUSTERS (2)
/* EXFAT BIOS parameter block (64 bytes) */
__le16 signature;
};
-/* Extended Boot Sector */
-struct exbs {
- __u8 zero[510];
- __le16 signature;
-};
-
-/* Extended Boot Record (8 sectors) */
-struct expbr {
- struct exbs eb[8];
-};
-
#define VOLUME_LABEL_MAX_LEN 11
+#define EXFAT_GUID_LEN 16
#define ENTRY_NAME_MAX 15
struct exfat_dentry {
__le16 access_date;
__u8 create_time_ms;
__u8 modify_time_ms;
- __u8 access_time_ms;
- __u8 reserved2[9];
+ __u8 create_tz;
+ __u8 modify_tz;
+ __u8 access_tz;
+ __u8 reserved2[7];
} __attribute__((packed)) file; /* file directory entry */
struct {
__u8 flags;
__le32 start_clu;
__le64 size;
} __attribute__((packed)) upcase; /* up-case table directory entry */
+ struct {
+ __u8 num_ext;
+ __le16 checksum;
+ __u16 flags;
+ __u8 guid[EXFAT_GUID_LEN];
+ __u8 reserved[10];
+ } __attribute__((packed)) guid; /* volume GUID directory entry */
+ struct {
+ __u8 flags;
+ __u8 guid[EXFAT_GUID_LEN];
+ __u8 vendor_defined[14];
+ } __attribute__((packed)) vendor_ext ; /* vendor extension entry */
+ struct {
+ __u8 flags;
+ __u8 guid[EXFAT_GUID_LEN];
+ __u8 vendor_defined[2];
+ __le32 start_clu;
+ __le64 size;
+ } __attribute__((packed)) vendor_alloc; /* vendor allocation entry */
+
} __attribute__((packed)) dentry;
} __attribute__((packed));