22#define PFS_OPT_H "pfs-opt.h"
28#define PFS_BLOCKSIZE 0x2000
29#define PFS_SUPER_MAGIC 0x50465300
30#define PFS_JOUNRNAL_MAGIC 0x5046534C
31#define PFS_SEGD_MAGIC 0x53454744
32#define PFS_SEGI_MAGIC 0x53454749
33#define PFS_MAX_SUBPARTS 64
34#define PFS_NAME_LEN 255
35#define PFS_FORMAT_VERSION 3
36#define PFS_INODE_MAX_BLOCKS 114
39#define PFS_FIO_ATTR_READABLE 0x0001
40#define PFS_FIO_ATTR_WRITEABLE 0x0002
41#define PFS_FIO_ATTR_EXECUTABLE 0x0004
42#define PFS_FIO_ATTR_COPYPROTECT 0x0008
43#define PFS_FIO_ATTR_UNK0010 0x0010
44#define PFS_FIO_ATTR_SUBDIR 0x0020
45#define PFS_FIO_ATTR_UNK0040 0x0040
46#define PFS_FIO_ATTR_CLOSED 0x0080
47#define PFS_FIO_ATTR_UNK0100 0x0100
48#define PFS_FIO_ATTR_UNK0200 0x0200
49#define PFS_FIO_ATTR_UNK0400 0x0400
50#define PFS_FIO_ATTR_PDA 0x0800
51#define PFS_FIO_ATTR_PSX 0x1000
52#define PFS_FIO_ATTR_UNK2000 0x2000
53#define PFS_FIO_ATTR_HIDDEN 0x4000
56#define PFS_CACHE_FLAG_DIRTY 0x01
57#define PFS_CACHE_FLAG_NOLOAD 0x02
58#define PFS_CACHE_FLAG_MASKSTATUS 0x0F
61#define PFS_CACHE_FLAG_NOTHING 0x00
62#define PFS_CACHE_FLAG_SEGD 0x10
63#define PFS_CACHE_FLAG_SEGI 0x20
64#define PFS_CACHE_FLAG_BITMAP 0x40
65#define PFS_CACHE_FLAG_MASKTYPE 0xF0
68#define PFS_FSCK_STAT_OK 0x00
69#define PFS_FSCK_STAT_WRITE_ERROR 0x01
70#define PFS_FSCK_STAT_ERRORS_FIXED 0x02
73#define PFS_MODE_SET_FLAG 0x00
74#define PFS_MODE_REMOVE_FLAG 0x01
75#define PFS_MODE_CHECK_FLAG 0x02
175 int (*transfer)(
int fd,
void *buffer, u32 sub, u32 sector, u32 size, u32 mode);
176 u32 (*getSubNumber)(
int fd);
177 u32 (*getSize)(
int fd, u32 sub);
178 void (*setPartitionError)(
int fd);
179 int (*flushCache)(
int fd);
228#define PFS_SUPER_SECTOR 8192
229#define PFS_SUPER_BACKUP_SECTOR 8193
231extern int pfsCheckZoneSize(u32 zone_size);
232#ifdef PFS_SUPPORT_BHDD
233extern int pfsCheckExtendedZoneSize(u32 zone_size);
235extern u32 pfsGetBitmapSizeSectors(
int zoneScale, u32 partSize);
236extern u32 pfsGetBitmapSizeBlocks(
int scale, u32 mainsize);
237extern int pfsFormatSub(
pfs_block_device_t *blockDev,
int fd, u32 sub, u32 reserved, u32 scale, u32 fragment);
238extern int pfsFormat(
pfs_block_device_t *blockDev,
int fd,
int zonesize,
int fragment);
240extern int pfsMountSuperBlock(
pfs_mount_t *pfsMount);
245extern void pfsCacheFree(pfs_cache_t *clink);
246extern void pfsCacheLink(pfs_cache_t *clink, pfs_cache_t *cnew);
247extern pfs_cache_t *pfsCacheUnLink(pfs_cache_t *clink);
248extern pfs_cache_t *pfsCacheUsedAdd(pfs_cache_t *clink);
249extern int pfsCacheTransfer(pfs_cache_t* clink,
int mode);
250extern void pfsCacheFlushAllDirty(
pfs_mount_t *pfsMount);
251extern pfs_cache_t *pfsCacheAlloc(
pfs_mount_t *pfsMount, u16 sub, u32 block,
int flags,
int *result);
252extern pfs_cache_t *pfsCacheGetData(
pfs_mount_t *pfsMount, u16 sub, u32 block,
int flags,
int *result);
253extern pfs_cache_t *pfsCacheAllocClean(
int *result);
254extern int pfsCacheIsFull(
void);
255extern int pfsCacheInit(u32 numBuf, u32 bufSize);
256extern int pfsCacheDeinit(
void);
258extern void pfsCacheMarkClean(
const pfs_mount_t *pfsMount, u32 subpart, u32 blockStart, u32 blockEnd);
263#define PFS_BITMAP_ALLOC 0
264#define PFS_BITMAP_FREE 1
272 u32 partitionRemainder;
276extern void pfsBitmapAllocFree(pfs_cache_t *clink, u32 operation, u32 subpart, u32 chunk, u32 index, u32 _bit, u32
count);
281extern int pfsBitmapCalcFreeZones(
pfs_mount_t *pfsMount,
int sub);
283extern void pfsBitmapFreeInodeBlocks(pfs_cache_t *clink);
288extern int pfsBlockSeekNextSegment(pfs_cache_t *clink,
pfs_blockpos_t *blockpos);
290extern int pfsBlockInitPos(pfs_cache_t *clink,
pfs_blockpos_t *blockpos, u64 position);
292extern int pfsBlockAllocNewSegment(pfs_cache_t *clink,
pfs_blockpos_t *blockpos, u32 blocks);
294extern pfs_cache_t *pfsBlockGetNextSegment(pfs_cache_t *clink,
int *result);
295extern pfs_cache_t *pfsBlockGetLastSegmentDescriptorInode(pfs_cache_t *clink,
int *result);
300extern pfs_cache_t *pfsGetDentry(pfs_cache_t *clink,
char *path,
pfs_dentry_t **dentry, u32 *size,
int option);
303extern pfs_cache_t *pfsDirAddEntry(pfs_cache_t *dir,
char *filename,
pfs_blockinfo_t *bi, u16 mode,
int *result);
304extern pfs_cache_t *pfsDirRemoveEntry(pfs_cache_t *clink,
char *path);
305extern int pfsCheckDirForFiles(pfs_cache_t *clink);
307extern pfs_cache_t* pfsSetDentryParent(pfs_cache_t *clink,
pfs_blockinfo_t *bi,
int *result);
308extern pfs_cache_t *pfsInodeGetFileInDir(pfs_cache_t *dirInode,
char *path,
int *result);
309extern pfs_cache_t *pfsInodeGetFile(
pfs_mount_t *pfsMount, pfs_cache_t *clink,
const char *name,
int *result);
310extern void pfsInodeFill(pfs_cache_t *ci,
pfs_blockinfo_t *bi, u16 mode, u16 uid, u16 gid);
311extern int pfsInodeRemove(pfs_cache_t *parent, pfs_cache_t *inode,
char *path);
312extern pfs_cache_t *pfsInodeGetParent(
pfs_mount_t *pfsMount, pfs_cache_t *clink,
const char *filename,
char *path,
int *result);
313extern pfs_cache_t *pfsInodeCreate(pfs_cache_t *clink, u16 mode, u16 uid, u16 gid,
int *result);
314extern int pfsCheckAccess(pfs_cache_t *clink,
int flags);
315extern char* pfsSplitPath(
char *filename,
char *path,
int *result);
318extern int pfsAllocZones(pfs_cache_t *clink,
int msize,
int mode);
319extern void pfsFreeZones(pfs_cache_t *pfree);
326extern void pfsInodeSetTime(pfs_cache_t *clink);
327extern void pfsInodeSetTimeParent(pfs_cache_t *parent, pfs_cache_t *self);
328extern pfs_cache_t *pfsInodeGetData(
pfs_mount_t *pfsMount, u16 sub, u32 inode,
int *result);
329extern int pfsInodeSync(
pfs_blockpos_t *blockpos, u64 size, u32 used_segments);
330extern pfs_cache_t *pfsGetDentriesChunk(
pfs_blockpos_t *position,
int *result);
331extern pfs_cache_t *pfsGetDentriesAtPos(pfs_cache_t *clink, u64 position,
int *offset,
int *result);
336extern int pfsJournalChecksum(
void *header);
337extern void pfsJournalWrite(
pfs_mount_t *pfsMount, pfs_cache_t *clink, u32 pfsCacheNumBuffers);
340extern int pfsJournalRestore(
pfs_mount_t *pfsMount);
348extern void *pfsAllocMem(
int size);
349extern void pfsFreeMem(
void *buffer);
351extern void pfsPrintBitmap(
const u32 *bitmap);
354extern u32 pfsGetScale(u32 num, u32 size);
355extern u32 pfsFixIndex(u32 index);
u32 count
start sector of fragmented bd/file