111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/**************************************************************************** 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert **************************************************************************** 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** This header was automatically generated from a Linux kernel header 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** of the same name, to make information necessary for userspace to 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** call into the kernel available to libc. It contains only constants, 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** structures, and macros generated from the original header, and thus, 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** contains no copyrightable information. 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert **************************************************************************** 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************/ 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _LINUX_MSDOS_FS_H 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _LINUX_MSDOS_FS_H 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/magic.h> 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <asm/byteorder.h> 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SECTOR_SIZE 512 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SECTOR_BITS 9 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MSDOS_DPB (MSDOS_DPS) 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MSDOS_DPB_BITS 4 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MSDOS_DPS (SECTOR_SIZE / sizeof(struct msdos_dir_entry)) 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MSDOS_DPS_BITS 4 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CF_LE_W(v) le16_to_cpu(v) 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CF_LE_L(v) le32_to_cpu(v) 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CT_LE_W(v) cpu_to_le16(v) 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CT_LE_L(v) cpu_to_le32(v) 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MSDOS_ROOT_INO 1 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MSDOS_DIR_BITS 5 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FAT_MAX_DIR_ENTRIES (65536) 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FAT_MAX_DIR_SIZE (FAT_MAX_DIR_ENTRIES << MSDOS_DIR_BITS) 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ATTR_NONE 0 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ATTR_RO 1 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ATTR_HIDDEN 2 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ATTR_SYS 4 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ATTR_VOLUME 8 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ATTR_DIR 16 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ATTR_ARCH 32 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ATTR_UNUSED (ATTR_VOLUME | ATTR_ARCH | ATTR_SYS | ATTR_HIDDEN) 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ATTR_EXT (ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME) 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CASE_LOWER_BASE 8 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CASE_LOWER_EXT 16 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DELETED_FLAG 0xe5 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define IS_FREE(n) (!*(n) || *(n) == DELETED_FLAG) 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MSDOS_VALID_MODE (S_IFREG | S_IFDIR | S_IRWXU | S_IRWXG | S_IRWXO) 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MSDOS_MKMODE(a, m) (m & (a & ATTR_RO ? S_IRUGO|S_IXUGO : S_IRWXUGO)) 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MSDOS_NAME 11 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MSDOS_LONGNAME 256 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MSDOS_SLOTS 21 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MSDOS_DOT ". " 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MSDOS_DOTDOT ".. " 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FAT_VALID_MEDIA(x) ((0xF8 <= (x) && (x) <= 0xFF) || (x) == 0xF0) 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FAT_FIRST_ENT(s, x) ((MSDOS_SB(s)->fat_bits == 32 ? 0x0FFFFF00 : MSDOS_SB(s)->fat_bits == 16 ? 0xFF00 : 0xF00) | (x)) 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FAT_START_ENT 2 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MAX_FAT12 0xFF4 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MAX_FAT16 0xFFF4 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MAX_FAT32 0x0FFFFFF6 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MAX_FAT(s) (MSDOS_SB(s)->fat_bits == 32 ? MAX_FAT32 : MSDOS_SB(s)->fat_bits == 16 ? MAX_FAT16 : MAX_FAT12) 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define BAD_FAT12 0xFF7 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define BAD_FAT16 0xFFF7 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define BAD_FAT32 0x0FFFFFF7 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EOF_FAT12 0xFFF 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EOF_FAT16 0xFFFF 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EOF_FAT32 0x0FFFFFFF 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FAT_ENT_FREE (0) 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FAT_ENT_BAD (BAD_FAT32) 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FAT_ENT_EOF (EOF_FAT32) 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FAT_FSINFO_SIG1 0x41615252 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FAT_FSINFO_SIG2 0x61417272 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define IS_FSINFO(x) (le32_to_cpu((x)->signature1) == FAT_FSINFO_SIG1 && le32_to_cpu((x)->signature2) == FAT_FSINFO_SIG2) 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define VFAT_IOCTL_READDIR_BOTH _IOR('r', 1, struct dirent [2]) 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define VFAT_IOCTL_READDIR_SHORT _IOR('r', 2, struct dirent [2]) 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FAT_IOCTL_GET_ATTRIBUTES _IOR('r', 0x10, __u32) 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FAT_IOCTL_SET_ATTRIBUTES _IOW('r', 0x11, __u32) 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define VFAT_IOCTL_GET_VOLUME_ID _IOR('r', 0x12, __u32) 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define VFAT_SFN_DISPLAY_LOWER 0x0001 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define VFAT_SFN_DISPLAY_WIN95 0x0002 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define VFAT_SFN_DISPLAY_WINNT 0x0004 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define VFAT_SFN_CREATE_WIN95 0x0100 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define VFAT_SFN_CREATE_WINNT 0x0200 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct fat_boot_sector { 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 ignored[3]; 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 system_id[8]; 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 sector_size[2]; 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 sec_per_clus; 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le16 reserved; 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 fats; 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 dir_entries[2]; 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 sectors[2]; 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 media; 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le16 fat_length; 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le16 secs_track; 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le16 heads; 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le32 hidden; 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le32 total_sect; 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le32 fat32_length; 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le16 flags; 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 version[2]; 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le32 root_cluster; 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le16 info_sector; 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le16 backup_boot; 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le16 reserved2[6]; 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct fat_boot_fsinfo { 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le32 signature1; 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le32 reserved1[120]; 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le32 signature2; 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le32 free_clusters; 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le32 next_cluster; 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le32 reserved2[4]; 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct fat_boot_bsx { 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 drive; 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 reserved1; 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 signature; 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 vol_id[4]; 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 vol_label[11]; 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 type[8]; 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FAT16_BSX_OFFSET 36 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FAT32_BSX_OFFSET 64 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct msdos_dir_entry { 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 name[MSDOS_NAME]; 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 attr; 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 lcase; 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 ctime_cs; 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le16 ctime; 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le16 cdate; 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le16 adate; 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le16 starthi; 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le16 time,date,start; 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le32 size; 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct msdos_dir_slot { 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 id; 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 name0_4[10]; 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 attr; 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 reserved; 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 alias_checksum; 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 name5_10[12]; 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __le16 start; 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 name11_12[4]; 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct fat_slot_info { 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert loff_t i_pos; 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert loff_t slot_off; 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int nr_slots; 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct msdos_dir_entry *de; 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct buffer_head *bh; 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 181