34#include <file/port_s.h>
35#include <file/udefs.h>
42#define FS_MAXDENAME 13
49 W_CHAR lname[FS_MAXDENAME];
55 unsigned short sector;
56 unsigned short dirnum;
70#define FS_MAXLFN ((sizeof(FS_DIRENTRY) - sizeof(FS_DIRENTRY_LFN)) >> 1)
72#define FS_MAXLNAME (FS_MAXDENAME + 4 * FS_MAXLFN)
76#define FS_ATTR_DE 0x01
77#define FS_ATTR_DIR 0x02
78#define FS_ATTR_LFN1 0x04
79#define FS_ATTR_LFN2 0x08
80#define FS_ATTR_LFN1NXT 0x10
81#define FS_ATTR_LFN1NXTTOP 0x20
82#define FS_ATTR_LFN2NXT 0x40
83#define FS_ATTR_LFN2NXTTOP 0x80
85#define FS_ATTR_ALLLFN1 (FS_ATTR_LFN1 | FS_ATTR_LFN1NXT | FS_ATTR_LFN1NXTTOP)
86#define FS_ATTR_ALLLFN2 (FS_ATTR_LFN2 | FS_ATTR_LFN2NXT | FS_ATTR_LFN2NXTTOP)
89#define FSSEC_ATTR_ARC (0x20UL << (31 - 6))
90#define FSSEC_ATTR_DIR (0x10UL << (31 - 6))
91#define FSSEC_ATTR_VOLUME (0x08UL << (31 - 6))
92#define FSSEC_ATTR_SYSTEM (0x04UL << (31 - 6))
93#define FSSEC_ATTR_HIDDEN (0x02UL << (31 - 6))
94#define FSSEC_ATTR_READONLY (0x01UL << (31 - 6))
96#define FS_CTIME_SEC_SHIFT 0
97#define FS_CTIME_SEC_MASK 0x001f
98#define FS_CTIME_MIN_SHIFT 5
99#define FS_CTIME_MIN_MASK 0x07e0
100#define FS_CTIME_HOUR_SHIFT 11
101#define FS_CTIME_HOUR_MASK 0xf800
105#define FS_CDATE_DAY_SHIFT 0
106#define FS_CDATE_DAY_MASK 0x001f
107#define FS_CDATE_MONTH_SHIFT 5
108#define FS_CDATE_MONTH_MASK 0x01e0
109#define FS_CDATE_YEAR_SHIFT 9
110#define FS_CDATE_YEAR_MASK 0xfe00
114#define FS_DIR_ROOT ((unsigned short)0xffff)
115#define FS_DIR_LABEL ((unsigned short)0xfff0)
130 W_CHAR path[FS_MAXPATH];
131 W_CHAR lname[FS_MAXPATH];
132 unsigned short dirnum;
140 char filename[FS_MAXPATH];
142 unsigned short ctime;
143 unsigned short cdate;
147 unsigned long secure;
150 unsigned short findpos;
157 W_CHAR filename[FS_MAXPATH];
159 unsigned short ctime;
160 unsigned short cdate;
164 unsigned long secure;
167 unsigned short findpos;
183 FS_DIRENTRY *direntry;
191 unsigned short *sector;
192 unsigned short sectorstart;
194 unsigned short *discard;
195 unsigned short discardstart;
202#define FS_FILE_CLOSE 0
209#define FS_FILE_ABORT 7
213 typedef int (*FS_PHYREAD)(
void *data,
long block,
long blockrel,
long datalen);
214 typedef int (*FS_PHYERASE)(
long block);
215 typedef int (*FS_PHYWRITE)(
void *data,
long block,
long relsector,
long size,
long sdata);
216 typedef int (*FS_PHYVERIFY)(
void *data,
long block,
long relsector,
long size,
long sdata);
217 typedef int (*FS_PHYCHECK)(
long block);
218 typedef long (*FS_PHYSIGN)(
long block);
219 typedef int (*FS_PHYCACHE)(
void *data,
long block,
long page,
long pagenum,
long sdata);
220 typedef int (*FS_PHYBLKCPY)(
long destblock,
long soublock);
238 FS_PHYREAD ReadFlash;
239 FS_PHYERASE EraseFlash;
240 FS_PHYWRITE WriteFlash;
241 FS_PHYVERIFY VerifyFlash;
242 FS_PHYCHECK CheckBadBlock;
243 FS_PHYSIGN GetBlockSignature;
244 FS_PHYCACHE WriteVerifyPage;
245 FS_PHYBLKCPY BlockCopy;
246 unsigned char *chkeraseblk;
249 typedef int (*FS_PHYGETID)(FS_FLASH *flash);
256 unsigned long reference;
258 unsigned long dircrc32;
266 unsigned long reference;
280 unsigned short *fatmirror;
284 unsigned int maxdirentry;
285 FS_DIRENTRY *direntries;
292 unsigned char *zerosector;
300 unsigned short *blockindex;
317 W_CHAR cwd[FS_MAXPATH];
318 } fs_vols[FS_MAXVOLUME];
320 FS_MUTEX_TYPE *pmutex;
325 extern void fl_releaseFS(
long ID);
327 extern long fs_gettaskID(
void);
331 typedef int (*FS_DRVFUNC1)(FS_VOLUMEINFO *vi);
332 typedef int (*FS_DRVFUNC2)(FS_VOLUMEINFO *vi, FS_FILEINT *file,
void *data,
long datalen);
333 typedef int (*FS_DRVFUNC4)(FS_VOLUMEINFO *vi,
long secnum,
void *data,
long offset,
long datalen);
339 FS_DRVFUNC1 storefat;
340 FS_DRVFUNC2 storesector;
341 FS_DRVFUNC4 getsector;
350#define FS_VOL_NOTMOUNT 1
351#define FS_VOL_NOTFORMATTED 2
352#define FS_VOL_NOMEMORY 3
353#define FS_VOL_NOMORE 4
354#define FS_VOL_DRVERROR 5
358 typedef int (*FS_DRVMOUNT)(FS_VOLUMEDESC *vd, FS_PHYGETID phyfunc);
364 FS_VOLUMEDESC vd[FS_MAXVOLUME];
369#define FS_FAT_FREE ((unsigned short)0x0FFFF)
370#define FS_FAT_EOF ((unsigned short)0x0FFF0)
371#define FS_FAT_NOTUSED ((unsigned short)0x0FFF1)
372#define FS_FAT_DISCARD ((unsigned short)0x0FFF2)
373#define FS_FAT_CHBLK ((unsigned short)0x0FFF3)
374#define FS_FAT_DIR ((unsigned short)0x0FFF8)
378#define FS_CRCINIT 0xffffffffL
382 extern void *fsm_allocdata(FS_VOLUMEINFO *vi,
long size);
383 extern int fsm_checkname(W_CHAR *lname);
384 extern int fsm_checknamewc(
const W_CHAR *lname);
385 extern long fsm_setnameext(
char *s,
char *name,
char *ext);
386 extern int fsm_setmaxfile(FS_VOLUMEINFO *vi,
long maxfile);
387 extern int fsm_setsectorsize(FS_VOLUMEINFO *vi,
long sectorsize);
388 extern void fsm_memcpy(
void *d,
void *s,
long len);
389 extern unsigned long fsm_calccrc32(
unsigned long dwcrc,
const void *vbuf,
unsigned long dwlen);
390 extern int fsm_findfreeblock(FS_VOLUMEINFO *vi,
unsigned short *sector);
391 extern void fsm_memset(
void *d,
unsigned char fill,
long len);
392 extern int fsm_findfreesector(FS_VOLUMEINFO *vi,
unsigned short *badsector);
393 extern void fsm_swapbadblock(FS_VOLUMEINFO *vi,
unsigned short badsector);
394 extern void fsm_wearleveling(FS_VOLUMEINFO *vi);
395 extern void fsm_addsectorchain(FS_VOLUMEINFO *vi, FS_FILEINT *file,
unsigned short sector);
396 extern long fsm_checksectorfree(FS_VOLUMEINFO *vi,
long sector);
397 extern long fsm_checksectorbad(FS_VOLUMEINFO *vi,
long sector);
398 extern unsigned long _fs_checkfreeblocks(FS_VOLUMEINFO *vi,
unsigned long sbnum);
399 extern W_CHAR _fsm_toupper(W_CHAR ch);
401 extern W_CHAR *_fsm_towchar(W_CHAR *nconv,
const char *s);
402 extern void _fsm_fromwchar(
char *d, W_CHAR *s);