Blame view
include/fat.h
6.72 KB
71f951180 * Fix CONFIG_NET_... |
1 2 3 4 5 6 |
/* * R/O (V)FAT 12/16/32 filesystem implementation by Marcus Sundberg * * 2002-07-28 - rjones@nexus-tech.net - ported to ppcboot v1.1.6 * 2003-03-10 - kharris@nexus-tech.net - ported to u-boot * |
1a4596601 Add GPL-2.0+ SPDX... |
7 |
* SPDX-License-Identifier: GPL-2.0+ |
71f951180 * Fix CONFIG_NET_... |
8 9 10 11 |
*/ #ifndef _FAT_H_ #define _FAT_H_ |
5cf91d6bd * Modify KUP4X bo... |
12 |
#include <asm/byteorder.h> |
89191d626 fat/fs: move ls t... |
13 |
#include <fs.h> |
5cf91d6bd * Modify KUP4X bo... |
14 |
|
3831530dc VFAT: fix process... |
15 16 17 |
/* Maximum Long File Name length supported here is 128 UTF-16 code units */ #define VFAT_MAXLEN_BYTES 256 /* Maximum LFN buffer in bytes */ #define VFAT_MAXSEQ 9 /* Up to 9 of 13 2-byte UTF-16 entries */ |
025421eab fat: replace LINE... |
18 |
#define PREFETCH_BLOCKS 2 |
71f951180 * Fix CONFIG_NET_... |
19 |
|
4f0d1a2ae fat: Define MAX_C... |
20 |
#define MAX_CLUSTSIZE CONFIG_FS_FAT_MAX_CLUSTSIZE |
ac4977719 fat: fix crash wi... |
21 22 23 |
#define DIRENTSPERBLOCK (mydata->sect_size / sizeof(dir_entry)) #define DIRENTSPERCLUST ((mydata->clust_size * mydata->sect_size) / \ sizeof(dir_entry)) |
71f951180 * Fix CONFIG_NET_... |
24 25 |
#define FATBUFBLOCKS 6 |
ac4977719 fat: fix crash wi... |
26 |
#define FATBUFSIZE (mydata->sect_size * FATBUFBLOCKS) |
cd37d9e6e * Patch by Jian Z... |
27 |
#define FAT12BUFSIZE ((FATBUFSIZE*2)/3) |
71f951180 * Fix CONFIG_NET_... |
28 29 |
#define FAT16BUFSIZE (FATBUFSIZE/2) #define FAT32BUFSIZE (FATBUFSIZE/4) |
7aa1a6b71 fs/fat/fatwrite: ... |
30 31 |
/* Maximum number of entry for long file name according to spec */ #define MAX_LFN_SLOT 20 |
71f951180 * Fix CONFIG_NET_... |
32 33 34 35 36 37 38 39 |
/* Filesystem identifiers */ #define FAT12_SIGN "FAT12 " #define FAT16_SIGN "FAT16 " #define FAT32_SIGN "FAT32 " #define SIGNLEN 8 /* File attributes */ |
7385c28e9 fs/fat: Big code ... |
40 41 42 43 44 45 |
#define ATTR_RO 1 #define ATTR_HIDDEN 2 #define ATTR_SYS 4 #define ATTR_VOLUME 8 #define ATTR_DIR 16 #define ATTR_ARCH 32 |
71f951180 * Fix CONFIG_NET_... |
46 |
|
7385c28e9 fs/fat: Big code ... |
47 |
#define ATTR_VFAT (ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME) |
71f951180 * Fix CONFIG_NET_... |
48 49 |
#define DELETED_FLAG ((char)0xe5) /* Marks deleted files when in name[0] */ |
3c2c2f427 Remove non-ascii ... |
50 |
#define aRING 0x05 /* Used as special character in name[0] */ |
71f951180 * Fix CONFIG_NET_... |
51 |
|
7385c28e9 fs/fat: Big code ... |
52 53 |
/* * Indicates that the entry is the last long entry in a set of long |
2d1a537d8 * Patch by Thomas... |
54 55 56 |
* dir entries */ #define LAST_LONG_ENTRY_MASK 0x40 |
71f951180 * Fix CONFIG_NET_... |
57 |
|
7385c28e9 fs/fat: Big code ... |
58 |
#define ISDIRDELIM(c) ((c) == '/' || (c) == '\\') |
71f951180 * Fix CONFIG_NET_... |
59 60 61 62 63 64 65 |
#define FSTYPE_NONE (-1) #if defined(__linux__) && defined(__KERNEL__) #define FAT2CPU16 le16_to_cpu #define FAT2CPU32 le32_to_cpu #else |
9fd5e31fe * Patch by Pierre... |
66 |
#if __LITTLE_ENDIAN |
71f951180 * Fix CONFIG_NET_... |
67 68 69 70 71 |
#define FAT2CPU16(x) (x) #define FAT2CPU32(x) (x) #else #define FAT2CPU16(x) ((((x) & 0x00ff) << 8) | (((x) & 0xff00) >> 8)) #define FAT2CPU32(x) ((((x) & 0x000000ff) << 24) | \ |
53677ef18 Big white-space c... |
72 |
(((x) & 0x0000ff00) << 8) | \ |
71f951180 * Fix CONFIG_NET_... |
73 74 75 76 |
(((x) & 0x00ff0000) >> 8) | \ (((x) & 0xff000000) >> 24)) #endif #endif |
71f951180 * Fix CONFIG_NET_... |
77 78 79 |
#define START(dent) (FAT2CPU16((dent)->start) \ + (mydata->fatsize != 32 ? 0 : \ (FAT2CPU16((dent)->starthi) << 16))) |
2e98f7088 fs: fat_write: fi... |
80 81 82 |
#define IS_LAST_CLUST(x, fatsize) ((x) >= ((fatsize) != 32 ? \ ((fatsize) != 16 ? 0xff8 : 0xfff8) : \ 0xffffff8)) |
8ce4e5c2c Fix checking fat3... |
83 |
#define CHECK_CLUST(x, fatsize) ((x) <= 1 || \ |
06118973e fs/fat: add fat12... |
84 85 86 |
(x) >= ((fatsize) != 32 ? \ ((fatsize) != 16 ? 0xff0 : 0xfff0) : \ 0xffffff0)) |
71f951180 * Fix CONFIG_NET_... |
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
typedef struct boot_sector { __u8 ignored[3]; /* Bootstrap code */ char system_id[8]; /* Name of fs */ __u8 sector_size[2]; /* Bytes/sector */ __u8 cluster_size; /* Sectors/cluster */ __u16 reserved; /* Number of reserved sectors */ __u8 fats; /* Number of FATs */ __u8 dir_entries[2]; /* Number of root directory entries */ __u8 sectors[2]; /* Number of sectors */ __u8 media; /* Media code */ __u16 fat_length; /* Sectors/FAT */ __u16 secs_track; /* Sectors/track */ __u16 heads; /* Number of heads */ __u32 hidden; /* Number of hidden sectors */ __u32 total_sect; /* Number of sectors (if sectors == 0) */ /* FAT32 only */ __u32 fat32_length; /* Sectors/FAT */ __u16 flags; /* Bit 8: fat mirroring, low 4: active fat */ __u8 version[2]; /* Filesystem version */ __u32 root_cluster; /* First cluster in root directory */ __u16 info_sector; /* Filesystem info sector */ __u16 backup_boot; /* Backup boot sector */ __u16 reserved2[6]; /* Unused */ } boot_sector; typedef struct volume_info { __u8 drive_number; /* BIOS drive number */ __u8 reserved; /* Unused */ __u8 ext_boot_sign; /* 0x29 if fields below exist (DOS 3.3+) */ __u8 volume_id[4]; /* Volume ID number */ char volume_label[11]; /* Volume label */ char fs_type[8]; /* Typically FAT12, FAT16, or FAT32 */ /* Boot code comes next, all but 2 bytes to fill up sector */ /* Boot sign comes last, 2 bytes */ } volume_info; |
21a24c3bf fs/fat: fix case ... |
125 126 127 |
/* see dir_entry::lcase: */ #define CASE_LOWER_BASE 8 /* base (name) is lower case */ #define CASE_LOWER_EXT 16 /* extension is lower case */ |
71f951180 * Fix CONFIG_NET_... |
128 129 130 |
typedef struct dir_entry { char name[8],ext[3]; /* Name and extension */ __u8 attr; /* Attribute bits */ |
21a24c3bf fs/fat: fix case ... |
131 |
__u8 lcase; /* Case for name and ext (CASE_LOWER_x) */ |
71f951180 * Fix CONFIG_NET_... |
132 133 134 135 136 137 138 139 140 141 |
__u8 ctime_ms; /* Creation time, milliseconds */ __u16 ctime; /* Creation time */ __u16 cdate; /* Creation date */ __u16 adate; /* Last access date */ __u16 starthi; /* High 16 bits of cluster in FAT32 */ __u16 time,date,start;/* Time, date and first cluster */ __u32 size; /* File size in bytes */ } dir_entry; typedef struct dir_slot { |
7385c28e9 fs/fat: Big code ... |
142 143 144 145 146 147 148 149 |
__u8 id; /* Sequence number for slot */ __u8 name0_4[10]; /* First 5 characters in name */ __u8 attr; /* Attribute byte */ __u8 reserved; /* Unused */ __u8 alias_checksum;/* Checksum for 8.3 alias */ __u8 name5_10[12]; /* 6 more characters in name */ __u16 start; /* Unused */ __u8 name11_12[4]; /* Last 2 characters in name */ |
71f951180 * Fix CONFIG_NET_... |
150 |
} dir_slot; |
7385c28e9 fs/fat: Big code ... |
151 152 |
/* * Private filesystem parameters |
80f0c0f58 Fix fatload comma... |
153 154 155 156 |
* * Note: FAT buffer has to be 32 bit aligned * (see FAT32 accesses) */ |
71f951180 * Fix CONFIG_NET_... |
157 |
typedef struct { |
ac4977719 fat: fix crash wi... |
158 |
__u8 *fatbuf; /* Current FAT buffer */ |
71f951180 * Fix CONFIG_NET_... |
159 |
int fatsize; /* Size of FAT in bits */ |
1d90c3b45 fat: fix FAT sect... |
160 |
__u32 fatlength; /* Length of FAT in sectors */ |
71f951180 * Fix CONFIG_NET_... |
161 |
__u16 fat_sect; /* Starting sector of the FAT */ |
3c0ed9c3a fs/fat: Do not wr... |
162 |
__u8 fat_dirty; /* Set if fatbuf has been modified */ |
1d90c3b45 fat: fix FAT sect... |
163 |
__u32 rootdir_sect; /* Start sector of root directory */ |
ac4977719 fat: fix crash wi... |
164 |
__u16 sect_size; /* Size of sectors in bytes */ |
71f951180 * Fix CONFIG_NET_... |
165 |
__u16 clust_size; /* Size of clusters in sectors */ |
1d90c3b45 fat: fix FAT sect... |
166 |
int data_begin; /* The sector of the first cluster, can be negative */ |
71f951180 * Fix CONFIG_NET_... |
167 |
int fatbufnum; /* Used by get_fatent, init to -1 */ |
45449980f fs/fat: split out... |
168 |
int rootdir_size; /* Size of root dir for non-FAT32 */ |
c6e3baa56 fs/fat: introduce... |
169 |
__u32 root_cluster; /* First cluster of root dir for FAT32 */ |
71f951180 * Fix CONFIG_NET_... |
170 |
} fsdata; |
c6e3baa56 fs/fat: introduce... |
171 172 173 174 |
static inline u32 clust_to_sect(fsdata *fsdata, u32 clust) { return fsdata->data_begin + clust * fsdata->clust_size; } |
615283d0e MLK-20668-1 fs: f... |
175 |
static inline u32 sect_to_clust(fsdata *fsdata, int sect) |
265edc03d fs/fat: Clean up ... |
176 177 178 |
{ return (sect - fsdata->data_begin) / fsdata->clust_size; } |
71f951180 * Fix CONFIG_NET_... |
179 |
int file_fat_detectfs(void); |
b7b5f3195 fat: implement ex... |
180 |
int fat_exists(const char *filename); |
d455d8789 fs: API changes e... |
181 |
int fat_size(const char *filename, loff_t *size); |
1ad0b98a0 fat: Prepare API ... |
182 183 184 |
int file_fat_read_at(const char *filename, loff_t pos, void *buffer, loff_t maxsize, loff_t *actread); int file_fat_read(const char *filename, void *buffer, int maxsize); |
4101f6879 dm: Drop the bloc... |
185 186 |
int fat_set_blk_dev(struct blk_desc *rbdd, disk_partition_t *info); int fat_register_device(struct blk_desc *dev_desc, int part_no); |
71f951180 * Fix CONFIG_NET_... |
187 |
|
1ad0b98a0 fat: Prepare API ... |
188 189 |
int file_fat_write(const char *filename, void *buf, loff_t offset, loff_t len, loff_t *actwrite); |
d455d8789 fs: API changes e... |
190 191 |
int fat_read_file(const char *filename, void *buf, loff_t offset, loff_t len, loff_t *actread); |
89191d626 fat/fs: move ls t... |
192 193 194 |
int fat_opendir(const char *filename, struct fs_dir_stream **dirsp); int fat_readdir(struct fs_dir_stream *dirs, struct fs_dirent **dentp); void fat_closedir(struct fs_dir_stream *dirs); |
e6d524153 fs: Move ls and r... |
195 |
void fat_close(void); |
71f951180 * Fix CONFIG_NET_... |
196 |
#endif /* _FAT_H_ */ |