11#ifndef __MCMAN_INTERNAL_H__
12#define __MCMAN_INTERNAL_H__
14#ifndef MCMAN_ENABLE_EXTENDED_DEV_OPS
15#if defined(BUILDING_VMCMAN)
16#define MCMAN_ENABLE_EXTENDED_DEV_OPS 1
18#define MCMAN_ENABLE_EXTENDED_DEV_OPS 0
27#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
32#if MCMAN_ENABLE_EXTENDED_DEV_OPS
44#ifndef BUILDING_VMCMAN
45#ifdef BUILDING_XFROMMAN
60#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
61#define MODNAME "mcman_cex"
62#elif defined(BUILDING_VMCMAN)
63#define MODNAME "vmcman"
64#elif defined(BUILDING_XFROMMAN)
65#define MODNAME "xfromman"
66#elif defined(BUILDING_DONGLEMAN)
67#define MODNAME "dongleman"
71#ifndef MCMAN_ENTRYPOINT
73#define MCMAN_ENTRYPOINT _start
75#define MCMAN_ENTRYPOINT mcman_start
82 #define DPRINTF(format, args...) \
83 sio_printf(MODNAME ": " format, ##args)
86 #define DPRINTF(format, args...) \
87 printf(MODNAME ": " format, ##args)
89 #define DPRINTF(format, args...)
101#define CF_USE_ECC 0x01
102#define CF_BAD_BLOCK 0x08
103#define CF_ERASE_ZEROES 0x10
105#ifdef BUILDING_VMCMAN
106#define MCMAN_MAXSLOT 10
108#define MCMAN_MAXSLOT 4
110#define MCMAN_CLUSTERSIZE 1024
111#define MCMAN_CLUSTERFATENTRIES 256
114 int entry[MCMAN_CLUSTERFATENTRIES];
117#define MAX_CACHEENTRY 0x24
120 int entry[1 + (MCMAN_CLUSTERFATENTRIES * 2)];
123#define MAX_CACHEDIRENTRY 0x3
146#define MAX_FDHANDLES 3
148#if MCMAN_ENABLE_EXTENDED_DEV_OPS
149#define MC_IO_DEV_T iomanX_iop_device_t
150#define MC_IO_FIL_T iomanX_iop_file_t
151#define MC_IO_DRE_T iox_dirent_t
152#define MC_IO_STA_T iox_stat_t
153#define MC_IO_OPS_T iomanX_iop_device_ops_t
156#define MC_IO_S_RD (FIO_S_IRUSR | FIO_S_IRGRP | FIO_S_IROTH)
157#define MC_IO_S_WR (FIO_S_IWUSR | FIO_S_IWGRP | FIO_S_IWOTH)
158#define MC_IO_S_EX (FIO_S_IXUSR | FIO_S_IXGRP | FIO_S_IXOTH)
159#define MC_IO_S_FL FIO_S_IFREG
160#define MC_IO_S_DR FIO_S_IFDIR
162#define MC_IO_CST_ATTR FIO_CST_ATTR
163#define MC_IO_CST_MODE FIO_CST_MODE
164#define MC_IO_CST_CT FIO_CST_CT
165#define MC_IO_CST_MT FIO_CST_MT
167#define MC_IO_DEV_T iop_device_t
168#define MC_IO_FIL_T iop_file_t
169#define MC_IO_DRE_T io_dirent_t
170#define MC_IO_STA_T io_stat_t
171#define MC_IO_OPS_T iop_device_ops_t
173#define MC_IO_S_RD SCE_STM_R
174#define MC_IO_S_WR SCE_STM_W
175#define MC_IO_S_EX SCE_STM_X
176#define MC_IO_S_FL SCE_STM_F
177#define MC_IO_S_DR SCE_STM_D
179#define MC_IO_CST_ATTR SCE_CST_ATTR
180#define MC_IO_CST_MODE SCE_CST_MODE
181#define MC_IO_CST_CT SCE_CST_CT
182#define MC_IO_CST_MT SCE_CST_MT
186#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
189extern void long_multiply(u32 v1, u32 v2, u32 *HI, u32 *LO);
190extern int mcman_chrpos(
const char *str,
int chr);
191extern void mcman_wmemset(
void *buf,
int size,
int value);
192extern int mcman_calcEDC(
void *buf,
int size);
193extern int mcman_checkpath(
const char *str);
194extern int mcman_checkdirpath(
const char *str1,
const char *str2);
195extern void mcman_invhandles(
int port,
int slot);
196extern int McCloseAll(
void);
197extern int mcman_detectcard(
int port,
int slot);
198extern int mcman_dread(
int fd, MC_IO_DRE_T *dirent);
199extern int mcman_getstat(
int port,
int slot,
const char *filename, MC_IO_STA_T *stat);
201extern void mcman_initPS2com(
void);
202extern void mcman_deinitPS2com(
void);
203#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
204extern void sio2packet_add(
int port,
int slot,
int cmd, u8 *buf);
206extern int mcman_eraseblock(
int port,
int slot,
int block,
void **pagebuf,
void *eccbuf);
207extern int mcman_readpage(
int port,
int slot,
int page,
void *buf,
void *eccbuf);
208extern int mcman_cardchanged(
int port,
int slot);
209extern int mcman_resetauth(
int port,
int slot);
210extern int mcman_probePS2Card2(
int port,
int slot);
211extern int mcman_probePS2Card(
int port,
int slot);
212#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
215extern int mcman_getcnum (
int port,
int slot);
216extern int mcman_correctdata(
void *buf,
void *ecc);
217extern int mcman_sparesize(
int port,
int slot);
218extern int mcman_setdevspec(
int port,
int slot);
219extern int mcman_reportBadBlocks(
int port,
int slot);
220extern int mcman_setdevinfos(
int port,
int slot);
221extern int mcman_format2(
int port,
int slot);
222extern int mcman_fatRseek(
int fd);
223extern int mcman_fatWseek(
int fd);
224extern int mcman_findfree2(
int port,
int slot,
int reserve);
225extern int mcman_dread2(
int fd, MC_IO_DRE_T *dirent);
226extern int mcman_getstat2(
int port,
int slot,
const char *filename, MC_IO_STA_T *stat);
227extern int mcman_setinfo2(
int port,
int slot,
const char *filename,
sceMcTblGetDir *
info,
int flags);
228extern int mcman_read2(
int fd,
void *buffer,
int nbyte);
229extern int mcman_write2(
int fd,
void *buffer,
int nbyte);
230extern int mcman_close2(
int fd);
231extern int mcman_getentspace(
int port,
int slot,
const char *dirname);
232extern int mcman_cachedirentry(
int port,
int slot,
const char *filename,
McCacheDir *pcacheDir,
McFsEntry **pfse,
int unknown_flag);
233extern int mcman_getdirinfo(
int port,
int slot,
McFsEntry *pfse,
const char *filename,
McCacheDir *pcd,
int unknown_flag);
234extern int mcman_open2(
int port,
int slot,
const char *filename,
int flags);
235extern int mcman_chdir(
int port,
int slot,
const char *newdir,
char *currentdir);
236extern int mcman_writecluster(
int port,
int slot,
int cluster,
int flag);
237extern int mcman_getdir2(
int port,
int slot,
const char *dirname,
int flags,
int maxent,
sceMcTblGetDir *
info);
238extern int mcman_delete2(
int port,
int slot,
const char *filename,
int flags);
239extern int mcman_checkBackupBlocks(
int port,
int slot);
240extern int mcman_unformat2(
int port,
int slot);
241extern void mcman_initPS1PDAcom(
void);
242extern void mcman_deinitPS1PDAcom(
void);
243extern int mcman_probePS1Card2(
int port,
int slot);
244extern int mcman_probePS1Card(
int port,
int slot);
245extern int mcman_probePDACard(
int port,
int slot);
246extern int mcman_setPS1devinfos(
int port,
int slot);
247extern int mcman_format1(
int port,
int slot);
248extern int mcman_open1(
int port,
int slot,
const char *filename,
int flags);
249extern int mcman_read1(
int fd,
void *buffer,
int nbyte);
250extern int mcman_write1(
int fd,
void *buffer,
int nbyte);
251extern int mcman_getPS1direntry(
int port,
int slot,
const char *filename,
McFsEntryPS1 **pfse,
int flag);
252extern int mcman_dread1(
int fd, MC_IO_DRE_T *dirent);
253extern int mcman_getstat1(
int port,
int slot,
const char *filename, MC_IO_STA_T *stat);
254extern int mcman_setinfo1(
int port,
int slot,
const char *filename,
sceMcTblGetDir *
info,
int flags);
255extern int mcman_getdir1(
int port,
int slot,
const char *dirname,
int flags,
int maxent,
sceMcTblGetDir *
info);
256extern int mcman_clearPS1direntry(
int port,
int slot,
int cluster,
int flags);
257extern int mcman_delete1(
int port,
int slot,
const char *filename,
int flags);
258extern int mcman_close1(
int fd);
259extern int mcman_findfree1(
int port,
int slot,
int reserve);
260extern int mcman_fatRseekPS1(
int fd);
261extern int mcman_fatWseekPS1(
int fd);
262extern int mcman_FNC8ca4(
int port,
int slot,
MC_FHANDLE *fh);
263extern int mcman_PS1pagetest(
int port,
int slot,
int page);
264extern int mcman_unformat1(
int port,
int slot);
265extern int mcman_cachePS1dirs(
int port,
int slot);
266extern int mcman_fillPS1backuparea(
int port,
int slot,
int block);
267extern void mcman_initcache(
void);
268extern int mcman_clearcache(
int port,
int slot);
269extern McCacheEntry *mcman_getcacheentry(
int port,
int slot,
int cluster);
270extern void mcman_freecluster(
int port,
int slot,
int cluster);
271extern int mcman_getFATindex(
int port,
int slot,
int num);
275extern int mcman_readdirentryPS1(
int port,
int slot,
int cluster,
McFsEntryPS1 **pfse);
276extern int mcman_readclusterPS1(
int port,
int slot,
int cluster,
McCacheEntry **pmce);
277extern int mcman_replaceBackupBlock(
int port,
int slot,
int block);
278extern int mcman_fillbackupblock1(
int port,
int slot,
int block,
void **pagedata,
void *eccdata);
279extern int mcman_clearsuperblock(
int port,
int slot);
280extern int mcman_ioerrcode(
int errcode);
281extern int mcman_modloadcb(
const char *filename,
int *port,
int *slot);
282extern void mcman_unit2card(u32 unit);
283extern int mcman_initdev(
void);
284extern void mcman_deinitdev(
void);
286#if defined(BUILDING_VMCMAN)
287extern int mcman_iomanx_backing_mount(
int port,
int slot,
const char *filename);
288extern int mcman_iomanx_backing_umount(
int port,
int slot);
289extern int mcman_iomanx_backing_getcardspec(
int port,
int slot, s16 *pagesize, u16 *blocksize,
int *cardsize, u8 *flags);
290extern int mcman_iomanx_backing_erase(
int port,
int slot,
int page);
291extern int mcman_iomanx_backing_write(
int port,
int slot,
int page,
void *pagebuf,
void *eccbuf);
292extern int mcman_iomanx_backing_read(
int port,
int slot,
int page,
void *pagebuf,
void *eccbuf);
299 u16 pages_per_cluster;
302 u32 clusters_per_card;
310 int bad_block_list[32];
315 u32 FATentries_per_cluster;
316 u32 clusters_per_block;
318 u32 rootdir_cluster2;
321 u32 max_allocatable_clusters;
328 u32 word[1056/
sizeof(u32)];
329 u8
byte[1056/
sizeof(u8)];
330 char magic[1056/
sizeof(char)];
334 u32 word[128/
sizeof(u32)];
335 u16 half[128/
sizeof(u16)];
336 u8
byte[128/
sizeof(u8)];
341extern char SUPERBLOCK_MAGIC[];
342extern char SUPERBLOCK_VERSION[];
344extern int mcman_wr_port;
345extern int mcman_wr_slot;
346extern int mcman_wr_block;
347extern int mcman_wr_flag3;
348extern int mcman_curdircluster;
353#ifndef BUILDING_XFROMMAN
356extern int PS1CardFlag;
358extern McFsEntry mcman_dircache[MAX_CACHEDIRENTRY];
360extern MC_FHANDLE mcman_fdhandles[MAX_FDHANDLES];
361extern MCDevInfo mcman_devinfos[4][MCMAN_MAXSLOT];
363extern u8 mcman_eccdata[512];
366extern u8 mcman_sio2outbufs_PS1PDA[0x90];
368#ifdef BUILDING_DONGLEMAN
369extern int sema_hakama_id;
371#define HAKAMA_SIGNALSEMA()
372#define HAKAMA_WAITSEMA()
374#define HAKAMA_SIGNALSEMA()
375#define HAKAMA_WAITSEMA()