15#ifndef __MCMAN_INTERNAL_H__
16#define __MCMAN_INTERNAL_H__
18#ifndef MCMAN_ENABLE_EXTENDED_DEV_OPS
19#if defined(BUILDING_VMCMAN)
20#define MCMAN_ENABLE_EXTENDED_DEV_OPS 1
22#define MCMAN_ENABLE_EXTENDED_DEV_OPS 0
31#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
36#if MCMAN_ENABLE_EXTENDED_DEV_OPS
48#ifndef BUILDING_VMCMAN
49#ifdef BUILDING_XFROMMAN
64#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
65#define MODNAME "mcman_cex"
66#elif defined(BUILDING_VMCMAN)
67#define MODNAME "vmcman"
68#elif defined(BUILDING_XFROMMAN)
69#define MODNAME "xfromman"
70#elif defined(BUILDING_DONGLEMAN)
71#define MODNAME "dongleman"
75#ifndef MCMAN_ENTRYPOINT
77#define MCMAN_ENTRYPOINT _start
79#define MCMAN_ENTRYPOINT mcman_start
86 #define DPRINTF(format, args...) \
87 sio_printf(MODNAME ": " format, ##args)
90 #define DPRINTF(format, args...) \
91 printf(MODNAME ": " format, ##args)
93 #define DPRINTF(format, args...)
105#define CF_USE_ECC 0x01
106#define CF_BAD_BLOCK 0x08
107#define CF_ERASE_ZEROES 0x10
109#ifdef BUILDING_VMCMAN
110#define MCMAN_MAXSLOT 10
112#define MCMAN_MAXSLOT 4
114#define MCMAN_CLUSTERSIZE 1024
115#define MCMAN_CLUSTERFATENTRIES 256
118 int entry[MCMAN_CLUSTERFATENTRIES];
121#define MAX_CACHEENTRY 0x24
124 int entry[1 + (MCMAN_CLUSTERFATENTRIES * 2)];
127#define MAX_CACHEDIRENTRY 0x3
150#define MAX_FDHANDLES 3
152#if MCMAN_ENABLE_EXTENDED_DEV_OPS
153#define MC_IO_DEV_T iomanX_iop_device_t
154#define MC_IO_FIL_T iomanX_iop_file_t
155#define MC_IO_DRE_T iox_dirent_t
156#define MC_IO_STA_T iox_stat_t
157#define MC_IO_OPS_T iomanX_iop_device_ops_t
160#define MC_IO_S_RD (FIO_S_IRUSR | FIO_S_IRGRP | FIO_S_IROTH)
161#define MC_IO_S_WR (FIO_S_IWUSR | FIO_S_IWGRP | FIO_S_IWOTH)
162#define MC_IO_S_EX (FIO_S_IXUSR | FIO_S_IXGRP | FIO_S_IXOTH)
163#define MC_IO_S_FL FIO_S_IFREG
164#define MC_IO_S_DR FIO_S_IFDIR
166#define MC_IO_CST_ATTR FIO_CST_ATTR
167#define MC_IO_CST_MODE FIO_CST_MODE
168#define MC_IO_CST_CT FIO_CST_CT
169#define MC_IO_CST_MT FIO_CST_MT
171#define MC_IO_DEV_T iop_device_t
172#define MC_IO_FIL_T iop_file_t
173#define MC_IO_DRE_T io_dirent_t
174#define MC_IO_STA_T io_stat_t
175#define MC_IO_OPS_T iop_device_ops_t
177#define MC_IO_S_RD SCE_STM_R
178#define MC_IO_S_WR SCE_STM_W
179#define MC_IO_S_EX SCE_STM_X
180#define MC_IO_S_FL SCE_STM_F
181#define MC_IO_S_DR SCE_STM_D
183#define MC_IO_CST_ATTR SCE_CST_ATTR
184#define MC_IO_CST_MODE SCE_CST_MODE
185#define MC_IO_CST_CT SCE_CST_CT
186#define MC_IO_CST_MT SCE_CST_MT
190#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
193extern void long_multiply(u32 v1, u32 v2, u32 *HI, u32 *LO);
194extern int mcman_chrpos(
const char *str,
int chr);
195extern void mcman_wmemset(
void *buf,
int size,
int value);
196extern int mcman_calcEDC(
void *buf,
int size);
197extern int mcman_checkpath(
const char *str);
198extern int mcman_checkdirpath(
const char *str1,
const char *str2);
199extern void mcman_invhandles(
int port,
int slot);
200extern int McCloseAll(
void);
201extern int mcman_detectcard(
int port,
int slot);
202extern int mcman_dread(
int fd, MC_IO_DRE_T *dirent);
203extern int mcman_getstat(
int port,
int slot,
const char *filename, MC_IO_STA_T *stat);
204extern int mcman_getmcrtime(sceMcStDateTime *tm);
205extern void mcman_initPS2com(
void);
206extern void mcman_deinitPS2com(
void);
207#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
208extern void sio2packet_add(
int port,
int slot,
int cmd, u8 *buf);
210extern int mcman_eraseblock(
int port,
int slot,
int block,
void **pagebuf,
void *eccbuf);
211extern int mcman_readpage(
int port,
int slot,
int page,
void *buf,
void *eccbuf);
212extern int mcman_cardchanged(
int port,
int slot);
213extern int mcman_resetauth(
int port,
int slot);
214extern int mcman_probePS2Card2(
int port,
int slot);
215extern int mcman_probePS2Card(
int port,
int slot);
216#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
219extern int mcman_getcnum (
int port,
int slot);
220extern int mcman_correctdata(
void *buf,
void *ecc);
221extern int mcman_sparesize(
int port,
int slot);
222extern int mcman_setdevspec(
int port,
int slot);
223extern int mcman_reportBadBlocks(
int port,
int slot);
224extern int mcman_setdevinfos(
int port,
int slot);
225extern int mcman_format2(
int port,
int slot);
226extern int mcman_fatRseek(
int fd);
227extern int mcman_fatWseek(
int fd);
228extern int mcman_findfree2(
int port,
int slot,
int reserve);
229extern int mcman_dread2(
int fd, MC_IO_DRE_T *dirent);
230extern int mcman_getstat2(
int port,
int slot,
const char *filename, MC_IO_STA_T *stat);
231extern int mcman_setinfo2(
int port,
int slot,
const char *filename, sceMcTblGetDir *info,
int flags);
232extern int mcman_read2(
int fd,
void *buffer,
int nbyte);
233extern int mcman_write2(
int fd,
void *buffer,
int nbyte);
234extern int mcman_close2(
int fd);
235extern int mcman_getentspace(
int port,
int slot,
const char *dirname);
236extern int mcman_cachedirentry(
int port,
int slot,
const char *filename, McCacheDir *pcacheDir,
McFsEntry **pfse,
int unknown_flag);
237extern int mcman_getdirinfo(
int port,
int slot,
McFsEntry *pfse,
const char *filename, McCacheDir *pcd,
int unknown_flag);
238extern int mcman_open2(
int port,
int slot,
const char *filename,
int flags);
239extern int mcman_chdir(
int port,
int slot,
const char *newdir,
char *currentdir);
240extern int mcman_writecluster(
int port,
int slot,
int cluster,
int flag);
241extern int mcman_getdir2(
int port,
int slot,
const char *dirname,
int flags,
int maxent, sceMcTblGetDir *info);
242extern int mcman_delete2(
int port,
int slot,
const char *filename,
int flags);
243extern int mcman_checkBackupBlocks(
int port,
int slot);
244extern int mcman_unformat2(
int port,
int slot);
245extern void mcman_initPS1PDAcom(
void);
246extern void mcman_deinitPS1PDAcom(
void);
247extern int mcman_probePS1Card2(
int port,
int slot);
248extern int mcman_probePS1Card(
int port,
int slot);
249extern int mcman_probePDACard(
int port,
int slot);
250extern int mcman_setPS1devinfos(
int port,
int slot);
251extern int mcman_format1(
int port,
int slot);
252extern int mcman_open1(
int port,
int slot,
const char *filename,
int flags);
253extern int mcman_read1(
int fd,
void *buffer,
int nbyte);
254extern int mcman_write1(
int fd,
void *buffer,
int nbyte);
255extern int mcman_getPS1direntry(
int port,
int slot,
const char *filename,
McFsEntryPS1 **pfse,
int flag);
256extern int mcman_dread1(
int fd, MC_IO_DRE_T *dirent);
257extern int mcman_getstat1(
int port,
int slot,
const char *filename, MC_IO_STA_T *stat);
258extern int mcman_setinfo1(
int port,
int slot,
const char *filename, sceMcTblGetDir *info,
int flags);
259extern int mcman_getdir1(
int port,
int slot,
const char *dirname,
int flags,
int maxent, sceMcTblGetDir *info);
260extern int mcman_clearPS1direntry(
int port,
int slot,
int cluster,
int flags);
261extern int mcman_delete1(
int port,
int slot,
const char *filename,
int flags);
262extern int mcman_close1(
int fd);
263extern int mcman_findfree1(
int port,
int slot,
int reserve);
264extern int mcman_fatRseekPS1(
int fd);
265extern int mcman_fatWseekPS1(
int fd);
266extern int mcman_FNC8ca4(
int port,
int slot,
MC_FHANDLE *fh);
267extern int mcman_PS1pagetest(
int port,
int slot,
int page);
268extern int mcman_unformat1(
int port,
int slot);
269extern int mcman_cachePS1dirs(
int port,
int slot);
270extern int mcman_fillPS1backuparea(
int port,
int slot,
int block);
271extern void mcman_initcache(
void);
272extern int mcman_clearcache(
int port,
int slot);
273extern McCacheEntry *mcman_getcacheentry(
int port,
int slot,
int cluster);
274extern void mcman_freecluster(
int port,
int slot,
int cluster);
275extern int mcman_getFATindex(
int port,
int slot,
int num);
276extern McCacheEntry *mcman_get1stcacheEntp(
void);
277extern void mcman_addcacheentry(McCacheEntry *mce);
278extern int mcman_flushcacheentry(McCacheEntry *mce);
279extern int mcman_readdirentryPS1(
int port,
int slot,
int cluster,
McFsEntryPS1 **pfse);
280extern int mcman_readclusterPS1(
int port,
int slot,
int cluster, McCacheEntry **pmce);
281extern int mcman_replaceBackupBlock(
int port,
int slot,
int block);
282extern int mcman_fillbackupblock1(
int port,
int slot,
int block,
void **pagedata,
void *eccdata);
283extern int mcman_clearsuperblock(
int port,
int slot);
284extern int mcman_ioerrcode(
int errcode);
285extern int mcman_modloadcb(
const char *filename,
int *port,
int *slot);
286extern void mcman_unit2card(u32 unit);
287extern int mcman_initdev(
void);
288extern void mcman_deinitdev(
void);
290#if defined(BUILDING_VMCMAN)
291extern int mcman_iomanx_backing_mount(
int port,
int slot,
const char *filename);
292extern int mcman_iomanx_backing_umount(
int port,
int slot);
293extern int mcman_iomanx_backing_getcardspec(
int port,
int slot, s16 *pagesize, u16 *blocksize,
int *cardsize, u8 *flags);
294extern int mcman_iomanx_backing_erase(
int port,
int slot,
int page);
295extern int mcman_iomanx_backing_write(
int port,
int slot,
int page,
void *pagebuf,
void *eccbuf);
296extern int mcman_iomanx_backing_read(
int port,
int slot,
int page,
void *pagebuf,
void *eccbuf);
303 u16 pages_per_cluster;
306 u32 clusters_per_card;
314 int bad_block_list[32];
319 u32 FATentries_per_cluster;
320 u32 clusters_per_block;
322 u32 rootdir_cluster2;
325 u32 max_allocatable_clusters;
332 u32 word[1056/
sizeof(u32)];
333 u8
byte[1056/
sizeof(u8)];
334 char magic[1056/
sizeof(char)];
338 u32 word[128/
sizeof(u32)];
339 u16 half[128/
sizeof(u16)];
340 u8
byte[128/
sizeof(u8)];
345extern char SUPERBLOCK_MAGIC[];
346extern char SUPERBLOCK_VERSION[];
348extern int mcman_wr_port;
349extern int mcman_wr_slot;
350extern int mcman_wr_block;
351extern int mcman_wr_flag3;
352extern int mcman_curdircluster;
357#ifndef BUILDING_XFROMMAN
360extern int PS1CardFlag;
362extern McFsEntry mcman_dircache[MAX_CACHEDIRENTRY];
364extern MC_FHANDLE mcman_fdhandles[MAX_FDHANDLES];
365extern MCDevInfo mcman_devinfos[4][MCMAN_MAXSLOT];
367extern u8 mcman_eccdata[512];
370extern u8 mcman_sio2outbufs_PS1PDA[0x90];
372#ifdef BUILDING_DONGLEMAN
373extern int sema_hakama_id;
375#define HAKAMA_SIGNALSEMA()
376#define HAKAMA_WAITSEMA()
378#define HAKAMA_SIGNALSEMA()
379#define HAKAMA_WAITSEMA()