WiiFlow_Lite/source/loader/frag.h
fix94.1 4932949a3a -fixed booting wii games from disc
-moved a few debug prints, also added disc id check for wii games
playing from a wbfs partition (before it just checked on fat32,
ntfs and ext2 if the readed in disc is correctly opened from cIOS)
-made ogg lib using MEM2 only (as we did in the previous update
with the sound buffers)
2012-08-05 16:10:32 +00:00

52 lines
1.4 KiB
C

// worst case wbfs fragmentation scenario:
// 9GB (dual layer) / 2mb (wbfs sector size) = 4608
#define MAX_FRAG 20000
// max that ehcmodule_frag will allow at the moment is about:
// 40000/4/3-1 = 21844
#ifdef __cplusplus
extern "C" {
#endif
#include "gctypes.h"
typedef struct
{
u32 offset; // file offset, in sectors unit
u32 sector;
u32 count;
} Fragment;
typedef struct
{
u32 size; // num sectors
u32 num; // num fragments
u32 maxnum;
Fragment frag[MAX_FRAG];
} FragList;
typedef int (*frag_append_t)(void *ff, u32 offset, u32 sector, u32 count);
//int _FAT_get_fragments (const char *path, _frag_append_t append_fragment, void *callback_data);
void frag_init(FragList *ff, int maxnum);
void frag_dump(FragList *ff);
int frag_append(FragList *ff, u32 offset, u32 sector, u32 count);
int _frag_append(void *ff, u32 offset, u32 sector, u32 count);
int frag_concat(FragList *ff, FragList *src);
// in case a sparse block is requested,
// the returned poffset might not be equal to requested offset
// the difference should be filled with 0
int frag_get(FragList *ff, u32 offset, u32 count,
u32 *poffset, u32 *psector, u32 *pcount);
int frag_remap(FragList *ff, FragList *log, FragList *phy);
int get_frag_list(u8 *id, char *path, const u32 hdd_sector_size);
int set_frag_list();
#ifdef __cplusplus
}
#endif