[439] | 1 | /**************************************************************************** |
---|
| 2 | * This file defines the implementation of a simplified FAT32 file system * |
---|
| 3 | * supported by the ALMOS-MKH boot-loader. * |
---|
| 4 | * * |
---|
| 5 | * This implementation only supports block devices with block (sector) * |
---|
| 6 | * size of 512 bytes (value stored in BPB_BYTSPERSEC, see below). The * |
---|
| 7 | * max size for a single file is 4Gb - 1. * |
---|
| 8 | * * |
---|
| 9 | * A cluster is a smallest storage allocatable unit on the block device: * |
---|
| 10 | * any file (or directory) occupies at least one cluster, and a given * |
---|
| 11 | * cluster cannot be shared by 2 different files. This implementation * |
---|
| 12 | * supports cluster size of 4Kb (8 sectors, value stored in * |
---|
| 13 | * BPB_SECPERCLUS, see below). * |
---|
| 14 | * * |
---|
| 15 | * For partitioned devices such as hard drives, the first sector of the * |
---|
| 16 | * drive is the Master Boot Record defining partitions, while the first * |
---|
| 17 | * sector of partitions formatted with a FAT file system is the boot * |
---|
| 18 | * sector (Volume Boot Record). * |
---|
| 19 | * * |
---|
| 20 | * Here is the layout of a partition formatted with a FAT32 file system: * |
---|
| 21 | * +--------------------------------------------------------------------+ * |
---|
| 22 | * | Reserved Region, composed of: | * |
---|
| 23 | * | - Boot Sector (i.e VBR, logical sector 0), | * |
---|
| 24 | * | - FS Information Sector (logical sector 1, value stored in | * |
---|
| 25 | * | BPB_FSINFO, see below), | * |
---|
| 26 | * | - Other reserved sectors (optional). | * |
---|
| 27 | * |--------------------------------------------------------------------| * |
---|
| 28 | * | FAT Region: contains the File Allocation Table which are maps | * |
---|
| 29 | * | of the Data Region, indicating which clusters are used by files | * |
---|
| 30 | * | and directories. | * |
---|
| 31 | * | This may contains two copies of the FAT data structure (value | * |
---|
| 32 | * | stored in BPB_NUMFATS, see below) for the sake of redundancy | * |
---|
| 33 | * | checking, although rarely used. | * |
---|
| 34 | * |--------------------------------------------------------------------| * |
---|
| 35 | * | Data Region: this is where the actual file and directory data | * |
---|
| 36 | * | stored. The Root Directory Table is stored in the first cluster | * |
---|
| 37 | * | of the Data Region (value stored in BPB_ROOTCLUS, see below). | * |
---|
| 38 | * +--------------------------------------------------------------------+ * |
---|
| 39 | ****************************************************************************/ |
---|
| 40 | |
---|
| 41 | #ifndef BOOT_FAT32_H |
---|
| 42 | #define BOOT_FAT32_H |
---|
| 43 | |
---|
| 44 | /**************************************************************************** |
---|
| 45 | * Various signature values. * |
---|
| 46 | * Warning: don't forget that little-endian representation must be assumed * |
---|
| 47 | ****************************************************************************/ |
---|
| 48 | |
---|
| 49 | #define BOOT_SIGNATURE 0xAA55 |
---|
| 50 | #define FSI_SIGNATURE1 0x41615252 |
---|
| 51 | #define FSI_SIGNATURE2 0x61417272 |
---|
| 52 | #define FSI_SIGNATURE3 0xAA550000 |
---|
| 53 | |
---|
| 54 | /**************************************************************************** |
---|
| 55 | * Master Boot Record structure. * |
---|
| 56 | ****************************************************************************/ |
---|
| 57 | |
---|
| 58 | /* Boot code (first 446 bytes). */ |
---|
| 59 | |
---|
| 60 | /* Partition table (64 bytes). */ |
---|
| 61 | /* offset | size (both in bytes) */ |
---|
| 62 | #define FIRST_ENTRY_ACTIVE 446, 1 /* Status of first partition. */ |
---|
| 63 | #define FIRST_ENTRY_CHSFRST 447, 3 /* CHS address of first sector. */ |
---|
| 64 | #define FIRST_ENTRY_TYPE 450, 1 /* First partition type. */ |
---|
| 65 | #define FIRST_ENTRY_CHSLST 451, 3 /* CHS address of last sector. */ |
---|
| 66 | #define FIRST_ENTRY_LBAFRST 454, 4 /* LBA of first sector. */ |
---|
| 67 | #define FIRST_ENTRY_SIZE 458, 4 /* Count of sectors in partition. */ |
---|
| 68 | |
---|
| 69 | #define SECOND_ENTRY_ACTIVE 462, 1 /* Status of second partition. */ |
---|
| 70 | #define SECOND_ENTRY_CHSFRST 463, 3 /* CHS address of first sector. */ |
---|
| 71 | #define SECOND_ENTRY_TYPE 466, 1 /* Second partition type. */ |
---|
| 72 | #define SECOND_ENTRY_CHSLST 467, 3 /* CHS address of last sector. */ |
---|
| 73 | #define SECOND_ENTRY_LBAFRST 470, 4 /* LBA of first sector. */ |
---|
| 74 | #define SECOND_ENTRY_SIZE 474, 4 /* Count of sectors in partition. */ |
---|
| 75 | |
---|
| 76 | #define THIRD_ENTRY_ACTIVE 478, 1 /* Status of third partition. */ |
---|
| 77 | #define THIRD_ENTRY_CHSFRST 479, 3 /* CHS address of first sector. */ |
---|
| 78 | #define THIRD_ENTRY_TYPE 482, 1 /* Third partition type. */ |
---|
| 79 | #define THIRD_ENTRY_CHSLST 483, 3 /* CHS address of last sector. */ |
---|
| 80 | #define THIRD_ENTRY_LBAFRST 486, 4 /* LBA of first sector. */ |
---|
| 81 | #define THIRD_ENTRY_SIZE 490, 4 /* Count of sectors in partition. */ |
---|
| 82 | |
---|
| 83 | #define FOURTH_ENTRY_ACTIVE 494, 1 /* Status of fourth partition. */ |
---|
| 84 | #define FOURTH_ENTRY_CHSFRST 495, 3 /* CHS address of first sector. */ |
---|
| 85 | #define FOURTH_ENTRY_TYPE 498, 1 /* Fourth partition type. */ |
---|
| 86 | #define FOURTH_ENTRY_CHSLST 499, 3 /* CHS address of last sector. */ |
---|
| 87 | #define FOURTH_ENTRY_LBAFRST 502, 4 /* LBA of first sector. */ |
---|
| 88 | #define FOURTH_ENTRY_SIZE 506, 4 /* Count of sectors in partition. */ |
---|
| 89 | |
---|
| 90 | /* Signature (last 2 bytes). */ |
---|
| 91 | /* offset | size (both in bytes) */ |
---|
| 92 | #define MBR_SIGNATURE_POS 510, 2 /* Boot signature. */ |
---|
| 93 | |
---|
| 94 | /**************************************************************************** |
---|
| 95 | * Boot Sector structure. * |
---|
| 96 | ****************************************************************************/ |
---|
| 97 | |
---|
| 98 | /* First 11 bytes. */ |
---|
| 99 | /* offset | size (both in bytes) */ |
---|
| 100 | #define BS_JMPBOOT 0, 3 /* Jump instruction to boot code. */ |
---|
| 101 | #define BS_OEMNAME 3, 8 /* OEM identifier (meaningless). */ |
---|
| 102 | |
---|
| 103 | /* BIOS Parameter Block (next 25 bytes). */ |
---|
| 104 | /* offset | size (both in bytes) */ |
---|
| 105 | #define BPB_BYTSPERSEC 11, 2 /* Bytes per logical sector. */ |
---|
| 106 | #define BPB_SECPERCLUS 13, 1 /* Logical sectors per cluster. */ |
---|
| 107 | #define BPB_RSVDSECCNT 14, 2 /* Count of reserved sectors. */ |
---|
| 108 | #define BPB_NUMFATS 16, 1 /* Count of File Allocation Tables. */ |
---|
| 109 | #define BPB_ROOTENTCNT 17, 2 /* Must be 0 for FAT32. */ |
---|
| 110 | #define BPB_TOTSEC16 19, 2 /* Total sectors count on 16 bits. */ |
---|
| 111 | #define BPB_MEDIA 21, 1 /* Media descriptor. */ |
---|
| 112 | #define BPB_FATSZ16 22, 2 /* Must be 0 for FAT32. */ |
---|
| 113 | #define BPB_SECPERTRK 24, 2 /* Sectors per track for INT 0x13. */ |
---|
| 114 | #define BPB_NUMHEADS 26, 2 /* Number of heads for INT 0x13. */ |
---|
| 115 | #define BPB_HIDDSEC 28, 2 /* Hidden sectors preceding the |
---|
| 116 | partition that contains this FAT |
---|
| 117 | volume. */ |
---|
| 118 | #define BPB_TOTSEC32 32, 4 /* Total sectors count on 32 bits. */ |
---|
| 119 | |
---|
| 120 | /* FAT32 Extended BIOS Parameter Block (next 28 bytes). */ |
---|
| 121 | /* offset | size (both in bytes) */ |
---|
| 122 | #define BPB_FATSZ32 36, 4 /* Sectors per FAT on 32 bits. */ |
---|
| 123 | #define BPB_EXTFLAGS 40, 2 /* Mirroring flags. */ |
---|
| 124 | #define BPB_FSVER 42, 2 /* Version. */ |
---|
| 125 | #define BPB_ROOTCLUS 44, 4 /* Number of first cluster of the |
---|
| 126 | root directory. */ |
---|
| 127 | #define BPB_FSINFO 48, 2 /* Logical sector number of FS |
---|
| 128 | Information Sector. */ |
---|
| 129 | #define BPB_BKBOOTSEC 50, 2 /* Logical sector of Backup Boot |
---|
| 130 | Sector. */ |
---|
| 131 | #define BPB_RESERVED 52, 12 /* Reserved for future expansion. */ |
---|
| 132 | |
---|
| 133 | /* FAT12/FAT16 Extended BIOS Parameter Block (next 26 bytes). */ |
---|
| 134 | /* offset | size (both in bytes) */ |
---|
| 135 | #define BS_DRVNUM 64, 1 /* INT 0x13 drive number. */ |
---|
| 136 | #define BS_RESERVED1 65, 1 /* Reserved. */ |
---|
| 137 | #define BS_BOOTSIG 66, 1 /* Extended boot signature. */ |
---|
| 138 | #define BS_VOLID 67, 4 /* Volume ID (serial number). */ |
---|
| 139 | #define BS_VOLLAB 71, 11 /* Volume label. */ |
---|
| 140 | #define BS_FILSYSTYPE 82, 8 /* File system type: "FAT12 ", |
---|
| 141 | "FAT16 " or "FAT " */ |
---|
| 142 | |
---|
| 143 | /* File system and operating system specific boot code (next 420 bytes). */ |
---|
| 144 | /* offset | size (both in bytes) */ |
---|
| 145 | #define BS_CODE 90, 420 /* Executable code. */ |
---|
| 146 | |
---|
| 147 | /* Signature (last 2 bytes). */ |
---|
| 148 | /* offset | size (both in bytes) */ |
---|
| 149 | #define BS_SIGNATURE 510, 2 /* Boot signature. */ |
---|
| 150 | |
---|
| 151 | /**************************************************************************** |
---|
| 152 | * FS Information Sector structure. * |
---|
| 153 | * This sector is used for speeding up access times of certain operations. * |
---|
| 154 | ****************************************************************************/ |
---|
| 155 | |
---|
| 156 | /* offset | size (both in bytes) */ |
---|
| 157 | #define FSI_LEADSIG 0, 4 /* Lead signature. */ |
---|
| 158 | #define FSI_RESERVED1 4, 480 /* Reserved. */ |
---|
| 159 | #define FSI_STRUCSIG 484, 4 /* Another signature. */ |
---|
| 160 | #define FSI_FREE_COUNT 488, 4 /* Number of free clusters. */ |
---|
| 161 | #define FSI_NXT_FREE 492, 4 /* Most recently allocated cluster. */ |
---|
| 162 | #define FSI_RESERVED2 496, 12 /* Reserved. */ |
---|
| 163 | #define FSI_TRAILSIG 508, 4 /* Trail signature. */ |
---|
| 164 | |
---|
| 165 | /**************************************************************************** |
---|
| 166 | * File Allocation Table. * |
---|
| 167 | * The File Allocation Table is a table that indicates the status and * |
---|
| 168 | * location of all data clusters on the disk. It can be * |
---|
| 169 | * considered the "table of contents" of a disk. The cluster may be * |
---|
| 170 | * available for use, it may be reserved by the operating system, it may * |
---|
| 171 | * be unavailable due to a bad sector on the disk, or it may be in use * |
---|
| 172 | * by a file. The clusters of a file need not to be right next to each * |
---|
| 173 | * other on the disk. The FAT allows the operating system to follow the * |
---|
| 174 | * chain of clusters in a file. * |
---|
| 175 | * * |
---|
| 176 | * Since the first cluster of the Data Region is cluster #2, the first 2 * |
---|
| 177 | * entries of the FAT are unused. * |
---|
| 178 | * * |
---|
| 179 | * Note that despite its name FAT32 uses only 28 bits of the 32 possible * |
---|
| 180 | * bits to address the clusters on the disk: the upper 4 bits should be * |
---|
| 181 | * left untouched. * |
---|
| 182 | ****************************************************************************/ |
---|
| 183 | |
---|
| 184 | #define FAT_ENTRY_SIZE 4 /* Size of a FAT entry (in bytes) */ |
---|
| 185 | |
---|
| 186 | /* FAT entry values. */ |
---|
| 187 | #define FREE 0x00000000 /* Free cluster. */ |
---|
| 188 | #define RESERVED 0x00000001 /* Reserved for internal purposes. */ |
---|
| 189 | #define BAD 0x0FFFFFF7 /* Bad sector in cluster. */ |
---|
| 190 | |
---|
| 191 | // Value in this range should be interpreted as next cluster number. |
---|
| 192 | #define USED_MIN 0x00000002 /* Minimum value to be considered |
---|
| 193 | as used for data clusters. */ |
---|
| 194 | #define USED_MAX 0x0FFFFFEF /* Maximum value to be considered |
---|
| 195 | as used for data clusters. */ |
---|
| 196 | |
---|
| 197 | // Value in this range means this is the last cluster in file. |
---|
| 198 | #define EOC_MIN 0x0FFFFFF8 /* Minimum value to be considered |
---|
| 199 | as end-of-chain marker. */ |
---|
| 200 | #define EOC_MAX 0x0FFFFFFF /* Maximum value to be considered |
---|
| 201 | as end-of-chain marker. */ |
---|
| 202 | |
---|
| 203 | /**************************************************************************** |
---|
| 204 | * Directory table. * |
---|
| 205 | * A directory table is a special type of file that represents a directory. * |
---|
| 206 | * Each file or subdirectory stored within it is represented by a 32-byte * |
---|
| 207 | * entry in the table. All directory tables are stored in the Data Region. * |
---|
| 208 | * The actual number of entries in a directory stored in the Data Region * |
---|
| 209 | * can grow by adding another cluster to the chain in the FAT. * |
---|
| 210 | * * |
---|
| 211 | * A directory entry simply stores the information needed to know where * |
---|
| 212 | * a file's data or a folder's children are stored on the disk. * |
---|
| 213 | * * |
---|
| 214 | * The only special directory which must always be present is the root * |
---|
| 215 | * directory. For FAT32, it can be of variable size and is a cluster, * |
---|
| 216 | * just like any other directory is (this is not true for FAT12/FAT16). * |
---|
| 217 | * The first cluster of the root directory on a FAT32 volume is stored in * |
---|
| 218 | * BPB_ROOTCLUS. * |
---|
| 219 | * * |
---|
| 220 | * Each entry can be preceded by "fake entries" to support a VFAT long * |
---|
| 221 | * filename (LFN, see further below). When such a directory entry is * |
---|
| 222 | * encountered, it is given special treatment by the file system. * |
---|
| 223 | ****************************************************************************/ |
---|
| 224 | |
---|
| 225 | #define DIR_ENTRY_SIZE 32 /* Directory entry size (in bytes) */ |
---|
| 226 | #define PATH_MAX_SIZE 260 /* Max file path length (bytes) */ |
---|
| 227 | #define NAME_MAX_SIZE 256 /* Max file/dir name length (bytes) */ |
---|
| 228 | |
---|
| 229 | /**************************************************************************** |
---|
| 230 | * Standard 8.3 format. * |
---|
| 231 | * For a classic 8.3 filename entry, the DIR_NAME field is actually broken * |
---|
| 232 | * in 2 parts: the 8-characters main part of the name and the 3-characters * |
---|
| 233 | * extension. These 2 parts are "trailing space padded". * |
---|
| 234 | * * |
---|
| 235 | * Furthermore, all classic 8.3 filenames are uppercase. * |
---|
| 236 | ****************************************************************************/ |
---|
| 237 | |
---|
| 238 | /* offset | size (both in bytes) */ |
---|
| 239 | #define DIR_NAME 0, 11 /* Short file name. */ |
---|
| 240 | #define DIR_ATTR 11, 1 /* File attributes. */ |
---|
| 241 | #define DIR_NTRES 12, 1 /* Reserved for use by WINDOWS NT. */ |
---|
| 242 | #define DIR_CRTTIMETENTH 13, 1 /* Millisecond stamp at file |
---|
| 243 | creation time. */ |
---|
| 244 | #define DIR_CRTTIME 14, 2 /* Time file was created. */ |
---|
| 245 | #define DIR_CRTDATE 16, 2 /* Date file was created. */ |
---|
| 246 | #define DIR_LSTACCDATE 18, 2 /* Last access date. */ |
---|
| 247 | #define DIR_FSTCLUSHI 20, 2 /* High 16 bits of this entry's |
---|
| 248 | first cluster number. */ |
---|
| 249 | #define DIR_WRTTIME 22, 2 /* Time of last write. */ |
---|
| 250 | #define DIR_WRTDATE 24, 2 /* Date of last write. */ |
---|
| 251 | #define DIR_FSTCLUSLO 26, 2 /* Low 16 bits of this entry's |
---|
| 252 | first cluster number. */ |
---|
| 253 | #define DIR_FILESIZE 28, 4 /* This file's size in bytes. */ |
---|
| 254 | |
---|
| 255 | /* File attributes (DIR_ATTR values). */ |
---|
| 256 | #define ATTR_READ_ONLY 0x01 /* Writes to file should fail. */ |
---|
| 257 | #define ATTR_HIDDEN 0x02 /* Normal directory listings should |
---|
| 258 | not show this file. */ |
---|
| 259 | #define ATTR_SYSTEM 0x04 /* File belongs to the system, must |
---|
| 260 | not be physically moved. */ |
---|
| 261 | #define ATTR_VOLUME_ID 0x08 /* Volume label. */ |
---|
| 262 | #define ATTR_DIRECTORY 0x10 /* Container for other files. */ |
---|
| 263 | #define ATTR_ARCHIVE 0x20 /* Archive (file marked as dirty). */ |
---|
| 264 | #define ATTR_LONG_NAME 0x0F /* The file is part of the long |
---|
| 265 | long entry for some other file. */ |
---|
| 266 | |
---|
| 267 | /* Special values of the first byte DIR_NAME[0] of a FAT directory entry. */ |
---|
| 268 | #define FREE_ENTRY 0xE5 /* Directory entry is free. */ |
---|
| 269 | #define LAST_ENTRY 0x00 /* No subsequent entry in use. */ |
---|
| 270 | |
---|
| 271 | /**************************************************************************** |
---|
| 272 | * Long File Name format. * |
---|
| 273 | * Long File Names are stored on FAT file system using a trick: adding * |
---|
| 274 | * (possibly multiple) additional entries to the directory before the * |
---|
| 275 | * normal file entry. This means that long file name entries is always * |
---|
| 276 | * associated with a regular 8.3 entry that they always immediately * |
---|
| 277 | * precede (this because only short directory entries are visible to * |
---|
| 278 | * previous versions of MS-DOS). * |
---|
| 279 | * * |
---|
| 280 | * Note 1: every member of a set of long entries is uniquely numbered and * |
---|
| 281 | * the LDIR_ORD field of the last member of the set is or'd with a flag * |
---|
| 282 | * indicating that it is in fact the last member of the set. On the other * |
---|
| 283 | * hand, this field cannot have values of 0xE5 or 0x00 (see above). * |
---|
| 284 | * * |
---|
| 285 | * Note 2: an 8-bit checksum is computed on the name contained in the * |
---|
| 286 | * short directory entry at the time the short and long directory entries * |
---|
| 287 | * are created. This checksum is then placed in every long entry. All 11 * |
---|
| 288 | * characters of the name in the short entry are used in the checksum * |
---|
| 289 | * calculation. * |
---|
| 290 | * * |
---|
| 291 | * Note 3: if there are multiple LFN entries, firstly comes the LAST LFN * |
---|
| 292 | * entry (the last part of the file name). * |
---|
| 293 | ****************************************************************************/ |
---|
| 294 | |
---|
| 295 | /* offset | size (both in bytes) */ |
---|
| 296 | #define LDIR_ORD 0, 1 /* Order of this entry in the |
---|
| 297 | sequence of long directory |
---|
| 298 | entries. */ |
---|
| 299 | #define LDIR_NAME1 1, 10 /* Characters 1-5 of the long name |
---|
| 300 | sub-component in this entry. */ |
---|
| 301 | #define LDIR_ATTR 11, 1 /* Must be ATTR_LONG_NAME. */ |
---|
| 302 | #define LDIR_TYPE 12, 1 /* Always 0. */ |
---|
| 303 | #define LDIR_CHKSUM 13, 1 /* Checksum of name in the short |
---|
| 304 | directory entry at the end of |
---|
| 305 | the long directory set. */ |
---|
| 306 | #define LDIR_NAME2 14, 12 /* Characters 6-11 of the long name |
---|
| 307 | sub-component in this entry. */ |
---|
| 308 | #define LDIR_FSTCLUSLO 26, 2 /* Must be 0. */ |
---|
| 309 | #define LDIR_NAME3 28, 4 /* Characters 12-13 of the long name |
---|
| 310 | sub-component in this entry. */ |
---|
| 311 | |
---|
| 312 | /* Last long directory entry mask. */ |
---|
| 313 | #define LAST_LONG_ENTRY 0x40 |
---|
| 314 | |
---|
| 315 | |
---|
| 316 | /**************************************************************************** |
---|
| 317 | * This structure defines a FAT32 File System descriptor. * |
---|
| 318 | ****************************************************************************/ |
---|
| 319 | |
---|
[457] | 320 | #include <hal_kernel_types.h> |
---|
[439] | 321 | |
---|
| 322 | typedef struct fat_desc_s |
---|
| 323 | { |
---|
| 324 | unsigned char block_buffer[512]; /* Buffer for FS Information. */ |
---|
| 325 | uint32_t block_buffer_lba; /* LBA of block_buffer. */ |
---|
| 326 | uint32_t initialized; /* Status of the FAT32 File System. */ |
---|
| 327 | uint32_t sector_size; /* Must be 512 bytes. */ |
---|
| 328 | uint32_t cluster_size; /* Must be 4096 bytes. */ |
---|
| 329 | uint32_t fat_sectors; /* Count of sectors in FAT Region. */ |
---|
| 330 | uint32_t fat_lba; /* LBA of first FAT sector. */ |
---|
| 331 | uint32_t data_sectors; /* Count of sectors in Data Region. */ |
---|
| 332 | uint32_t data_lba; /* LBA of first data sector. */ |
---|
| 333 | uint32_t root_cluster; /* first cluster of root directory. */ |
---|
| 334 | uint32_t fsi_lba; /* LBA of FS Information. */ |
---|
| 335 | uint32_t free_cluster_hint; /* Start point for free cluster */ |
---|
| 336 | uint32_t free_clusters_nr; /* Total number of free clusters. */ |
---|
| 337 | } |
---|
| 338 | fat_desc_t; |
---|
| 339 | |
---|
| 340 | /**************************************************************************** |
---|
| 341 | * Basic operations of FAT32 File System. * |
---|
| 342 | ****************************************************************************/ |
---|
| 343 | |
---|
| 344 | extern fat_desc_t boot_fat; |
---|
| 345 | |
---|
| 346 | /**************************************************************************** |
---|
| 347 | * This function initializes the FAT32 File System. * |
---|
| 348 | * * |
---|
| 349 | * @ returns 0 on success, -1 on error. * |
---|
| 350 | ****************************************************************************/ |
---|
| 351 | int boot_fat32_init(); |
---|
| 352 | |
---|
| 353 | /**************************************************************************** |
---|
| 354 | * This function loads the 'pathname' file into the memory buffer at base * |
---|
| 355 | * address 'buff_addr' of 'buff_size'. It uses the 512-byte buffer defined * |
---|
| 356 | * in the FAT32 descriptor. * |
---|
| 357 | * @ pathname : file to be loaded pathname. * |
---|
| 358 | * @ buff_addr : memory address of file containing buffer. * |
---|
| 359 | * @ buff_size : size of file containing buffer (in bytes). * |
---|
| 360 | * * |
---|
| 361 | * @ returns 0 on success, -1 on error. * |
---|
| 362 | ****************************************************************************/ |
---|
| 363 | int boot_fat32_load( char* pathname, |
---|
| 364 | uint32_t buff_addr, |
---|
| 365 | uint32_t buff_size ); |
---|
| 366 | |
---|
| 367 | #endif // BOOT_FAT32_H |
---|