Blame view
include/fat.h
6.34 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> |
71f951180 * Fix CONFIG_NET_... |
13 |
#define CONFIG_SUPPORT_VFAT |
3831530dc VFAT: fix process... |
14 15 16 |
/* 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... |
17 |
#define PREFETCH_BLOCKS 2 |
71f951180 * Fix CONFIG_NET_... |
18 19 |
#define MAX_CLUSTSIZE 65536 |
ac4977719 fat: fix crash wi... |
20 21 22 |
#define DIRENTSPERBLOCK (mydata->sect_size / sizeof(dir_entry)) #define DIRENTSPERCLUST ((mydata->clust_size * mydata->sect_size) / \ sizeof(dir_entry)) |
71f951180 * Fix CONFIG_NET_... |
23 24 |
#define FATBUFBLOCKS 6 |
ac4977719 fat: fix crash wi... |
25 |
#define FATBUFSIZE (mydata->sect_size * FATBUFBLOCKS) |
cd37d9e6e * Patch by Jian Z... |
26 |
#define FAT12BUFSIZE ((FATBUFSIZE*2)/3) |
71f951180 * Fix CONFIG_NET_... |
27 28 29 30 31 32 33 34 35 36 37 |
#define FAT16BUFSIZE (FATBUFSIZE/2) #define FAT32BUFSIZE (FATBUFSIZE/4) /* Filesystem identifiers */ #define FAT12_SIGN "FAT12 " #define FAT16_SIGN "FAT16 " #define FAT32_SIGN "FAT32 " #define SIGNLEN 8 /* File attributes */ |
7385c28e9 fs/fat: Big code ... |
38 39 40 41 42 43 |
#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_... |
44 |
|
7385c28e9 fs/fat: Big code ... |
45 |
#define ATTR_VFAT (ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME) |
71f951180 * Fix CONFIG_NET_... |
46 47 |
#define DELETED_FLAG ((char)0xe5) /* Marks deleted files when in name[0] */ |
3c2c2f427 Remove non-ascii ... |
48 |
#define aRING 0x05 /* Used as special character in name[0] */ |
71f951180 * Fix CONFIG_NET_... |
49 |
|
7385c28e9 fs/fat: Big code ... |
50 51 |
/* * Indicates that the entry is the last long entry in a set of long |
2d1a537d8 * Patch by Thomas... |
52 53 54 |
* dir entries */ #define LAST_LONG_ENTRY_MASK 0x40 |
71f951180 * Fix CONFIG_NET_... |
55 56 |
/* Flags telling whether we should read a file or list a directory */ |
7385c28e9 fs/fat: Big code ... |
57 58 59 60 |
#define LS_NO 0 #define LS_YES 1 #define LS_DIR 1 #define LS_ROOT 2 |
71f951180 * Fix CONFIG_NET_... |
61 |
|
7385c28e9 fs/fat: Big code ... |
62 |
#define ISDIRDELIM(c) ((c) == '/' || (c) == '\\') |
71f951180 * Fix CONFIG_NET_... |
63 64 65 66 67 68 69 |
#define FSTYPE_NONE (-1) #if defined(__linux__) && defined(__KERNEL__) #define FAT2CPU16 le16_to_cpu #define FAT2CPU32 le32_to_cpu #else |
9fd5e31fe * Patch by Pierre... |
70 |
#if __LITTLE_ENDIAN |
71f951180 * Fix CONFIG_NET_... |
71 72 73 74 75 |
#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... |
76 |
(((x) & 0x0000ff00) << 8) | \ |
71f951180 * Fix CONFIG_NET_... |
77 78 79 80 |
(((x) & 0x00ff0000) >> 8) | \ (((x) & 0xff000000) >> 24)) #endif #endif |
71f951180 * Fix CONFIG_NET_... |
81 82 83 |
#define START(dent) (FAT2CPU16((dent)->start) \ + (mydata->fatsize != 32 ? 0 : \ (FAT2CPU16((dent)->starthi) << 16))) |
8ce4e5c2c Fix checking fat3... |
84 85 |
#define CHECK_CLUST(x, fatsize) ((x) <= 1 || \ (x) >= ((fatsize) != 32 ? 0xfff0 : 0xffffff0)) |
71f951180 * Fix CONFIG_NET_... |
86 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 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
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; typedef struct dir_entry { char name[8],ext[3]; /* Name and extension */ __u8 attr; /* Attribute bits */ __u8 lcase; /* Case for base and extension */ __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 ... |
139 140 141 142 143 144 145 146 |
__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_... |
147 |
} dir_slot; |
7385c28e9 fs/fat: Big code ... |
148 149 |
/* * Private filesystem parameters |
80f0c0f58 Fix fatload comma... |
150 151 152 153 |
* * Note: FAT buffer has to be 32 bit aligned * (see FAT32 accesses) */ |
71f951180 * Fix CONFIG_NET_... |
154 |
typedef struct { |
ac4977719 fat: fix crash wi... |
155 |
__u8 *fatbuf; /* Current FAT buffer */ |
71f951180 * Fix CONFIG_NET_... |
156 |
int fatsize; /* Size of FAT in bits */ |
1d90c3b45 fat: fix FAT sect... |
157 |
__u32 fatlength; /* Length of FAT in sectors */ |
71f951180 * Fix CONFIG_NET_... |
158 |
__u16 fat_sect; /* Starting sector of the FAT */ |
1d90c3b45 fat: fix FAT sect... |
159 |
__u32 rootdir_sect; /* Start sector of root directory */ |
ac4977719 fat: fix crash wi... |
160 |
__u16 sect_size; /* Size of sectors in bytes */ |
71f951180 * Fix CONFIG_NET_... |
161 |
__u16 clust_size; /* Size of clusters in sectors */ |
1d90c3b45 fat: fix FAT sect... |
162 |
int data_begin; /* The sector of the first cluster, can be negative */ |
71f951180 * Fix CONFIG_NET_... |
163 164 165 166 167 168 169 170 171 |
int fatbufnum; /* Used by get_fatent, init to -1 */ } fsdata; typedef int (file_detectfs_func)(void); typedef int (file_ls_func)(const char *dir); typedef long (file_read_func)(const char *filename, void *buffer, unsigned long maxsize); struct filesystem { |
7385c28e9 fs/fat: Big code ... |
172 173 174 175 |
file_detectfs_func *detect; file_ls_func *ls; file_read_func *read; const char name[12]; |
71f951180 * Fix CONFIG_NET_... |
176 177 178 179 180 181 182 183 184 185 186 |
}; /* FAT tables */ file_detectfs_func file_fat_detectfs; file_ls_func file_fat_ls; file_read_func file_fat_read; /* Currently this doesn't check if the dir exists or is valid... */ int file_cd(const char *path); int file_fat_detectfs(void); int file_fat_ls(const char *dir); |
b7b5f3195 fat: implement ex... |
187 |
int fat_exists(const char *filename); |
1170e634d FAT: Make it poss... |
188 189 |
long file_fat_read_at(const char *filename, unsigned long pos, void *buffer, unsigned long maxsize); |
71f951180 * Fix CONFIG_NET_... |
190 191 |
long file_fat_read(const char *filename, void *buffer, unsigned long maxsize); const char *file_getfsname(int idx); |
5e8f98319 FAT: implement fa... |
192 |
int fat_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info); |
7205e4075 * Patches by Deni... |
193 |
int fat_register_device(block_dev_desc_t *dev_desc, int part_no); |
71f951180 * Fix CONFIG_NET_... |
194 |
|
c30a15e59 FAT: Add FAT writ... |
195 |
int file_fat_write(const char *filename, void *buffer, unsigned long maxsize); |
e6d524153 fs: Move ls and r... |
196 197 |
int fat_read_file(const char *filename, void *buf, int offset, int len); void fat_close(void); |
71f951180 * Fix CONFIG_NET_... |
198 |
#endif /* _FAT_H_ */ |