X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=include%2Ffat.h;h=59de3fbec55bd434798e8906b73ba798879529cb;hb=5a7ddf4e1fb9347f783eb1473c30187d7a22bd81;hp=3f9c5f359edad2af1772e690b2937717492219fb;hpb=9fd5e31fe0245c44a11d35a8603bb6b25c97b5c8;p=platform%2Fkernel%2Fu-boot.git diff --git a/include/fat.h b/include/fat.h index 3f9c5f3..59de3fb 100644 --- a/include/fat.h +++ b/include/fat.h @@ -27,6 +27,8 @@ #ifndef _FAT_H_ #define _FAT_H_ +#include + #define CONFIG_SUPPORT_VFAT #define SECTOR_SIZE FS_BLOCK_SIZE @@ -43,7 +45,7 @@ #define FATBUFBLOCKS 6 #define FATBUFSIZE (FS_BLOCK_SIZE*FATBUFBLOCKS) -#define FAT12BUFSIZE ((FATBUFSIZE*3)/2) +#define FAT12BUFSIZE ((FATBUFSIZE*2)/3) #define FAT16BUFSIZE (FATBUFSIZE/2) #define FAT32BUFSIZE (FATBUFSIZE/4) @@ -67,6 +69,10 @@ #define DELETED_FLAG ((char)0xe5) /* Marks deleted files when in name[0] */ #define aRING 0x05 /* Used to represent 'å' in name[0] */ +/* Indicates that the entry is the last long entry in a set of long + * dir entries + */ +#define LAST_LONG_ENTRY_MASK 0x40 /* Flags telling whether we should read a file or list a directory */ #define LS_NO 0 @@ -95,7 +101,7 @@ #else #define FAT2CPU16(x) ((((x) & 0x00ff) << 8) | (((x) & 0xff00) >> 8)) #define FAT2CPU32(x) ((((x) & 0x000000ff) << 24) | \ - (((x) & 0x0000ff00) << 8) | \ + (((x) & 0x0000ff00) << 8) | \ (((x) & 0x00ff0000) >> 8) | \ (((x) & 0xff000000) >> 24)) #endif @@ -105,7 +111,8 @@ #define START(dent) (FAT2CPU16((dent)->start) \ + (mydata->fatsize != 32 ? 0 : \ (FAT2CPU16((dent)->starthi) << 16))) - +#define CHECK_CLUST(x, fatsize) ((x) <= 1 || \ + (x) >= ((fatsize) != 32 ? 0xfff0 : 0xffffff0)) typedef struct boot_sector { __u8 ignored[3]; /* Bootstrap code */ @@ -169,15 +176,19 @@ typedef struct dir_slot { __u8 name11_12[4]; /* Last 2 characters in name */ } dir_slot; -/* Private filesystem parameters */ +/* Private filesystem parameters + * + * Note: FAT buffer has to be 32 bit aligned + * (see FAT32 accesses) + */ typedef struct { + __u8 fatbuf[FATBUFSIZE]; /* Current FAT buffer */ int fatsize; /* Size of FAT in bits */ __u16 fatlength; /* Length of FAT in sectors */ __u16 fat_sect; /* Starting sector of the FAT */ __u16 rootdir_sect; /* Start sector of root directory */ __u16 clust_size; /* Size of clusters in sectors */ - __u16 data_begin; /* The sector of the first cluster */ - __u8 fatbuf[FATBUFSIZE]; /* Current FAT buffer */ + short data_begin; /* The sector of the first cluster, can be negative */ int fatbufnum; /* Used by get_fatent, init to -1 */ } fsdata;