@@ -42,6 +42,7 @@ distribution.
4242#include "cache.h"
4343#include "dsp.h"
4444#include "lwp.h"
45+ #include "lwp_watchdog.h"
4546#include "exi.h"
4647#include "card.h"
4748
@@ -82,7 +83,7 @@ struct card_bat {
8283 u16 updated ;
8384 u16 freeblocks ;
8485 u16 lastalloc ;
85- u16 fat [0xffc ];
86+ u16 fat [0xffb ];
8687};
8788
8889typedef struct _card_block {
@@ -198,7 +199,7 @@ static u32 card_latency[] =
198199 0x00000008 ,
199200 0x00000010 ,
200201 0x00000020 ,
201- 0x00000030 ,
202+ 0x00000040 ,
202203 0x00000080 ,
203204 0x00000100 ,
204205 0x00000200
@@ -241,8 +242,8 @@ static vu16* const _viReg = (u16*)0xCC002000;
241242static s32 __card_onreset (s32 final )
242243{
243244 if (final == FALSE) {
244- if (CARD_Unmount (CARD_SLOTA )== -1 ) return 0 ;
245- if (CARD_Unmount (CARD_SLOTB )== -1 ) return 0 ;
245+ if (CARD_Unmount (CARD_SLOTA )== CARD_ERROR_BUSY ) return 0 ;
246+ if (CARD_Unmount (CARD_SLOTB )== CARD_ERROR_BUSY ) return 0 ;
246247 }
247248 return 1 ;
248249}
@@ -509,7 +510,7 @@ static s32 __card_getfilenum(card_block *card,const char *filename,const char *g
509510 entries = dirblock -> entries ;
510511 for (i = 0 ;i < CARD_MAXFILES ;i ++ ) {
511512 if (entries [i ].gamecode [0 ]!= 0xff ) {
512- if (strcmp (filename ,(const char * )entries [i ].filename )== 0 ) {
513+ if (strncmp (filename ,(const char * )entries [i ].filename , CARD_FILENAMELEN )== 0 ) {
513514 if ((gamecode && gamecode [0 ]!= 0xff && memcmp (entries [i ].gamecode ,gamecode ,4 )!= 0 )
514515 || (company && company [0 ]!= 0xff && memcmp (entries [i ].company ,company ,2 )!= 0 )) continue ;
515516
@@ -550,7 +551,7 @@ static s32 __card_seek(card_file *file,s32 len,s32 offset,card_block **rcard)
550551#endif
551552 if (entry -> gamecode [0 ]!= 0xff ) {
552553 entry_len = entry -> length * card -> sector_size ;
553- if (entry_len < offset || entry_len < (offset + len )) {
554+ if (entry_len <= offset || entry_len < (offset + len )) {
554555 __card_putcntrlblock (card ,CARD_ERROR_LIMIT );
555556 return CARD_ERROR_LIMIT ;
556557 }
@@ -1017,9 +1018,9 @@ static void __setuptimeout(card_block *card)
10171018
10181019 if (card -> cmd [0 ]== 0xf1 || card -> cmd [0 ]== 0xf4 ) {
10191020#ifdef _CARD_DEBUG
1020- printf ("__setuptimeout(%02x, %dsec)\n" ,card -> cmd [0 ],1 * (card -> sector_size /8192 ));
1021+ printf ("__setuptimeout(%02x, %dsec)\n" ,card -> cmd [0 ],2 * (card -> sector_size /8192 ));
10211022#endif
1022- tb .tv_sec = 1 * (card -> sector_size /8192 );
1023+ tb .tv_sec = 2 * (card -> sector_size /8192 );
10231024 tb .tv_nsec = 0 ;
10241025 SYS_SetAlarm (card -> timeout_svc ,& tb ,__timeouthandler ,NULL );
10251026 } else if (card -> cmd [0 ]== 0xf2 ) {
@@ -1138,9 +1139,11 @@ static s32 __card_exthandler(s32 chn,s32 dev)
11381139 card = & cardmap [chn ];
11391140
11401141 if (card -> attached ) {
1142+ #ifdef _CARD_DEBUG
11411143 if (card -> card_tx_cb ) {
11421144 printf ("error: card->card_tx_cb!=NULL\n" );
11431145 }
1146+ #endif
11441147 card -> attached = 0 ;
11451148 EXI_RegisterEXICallback (chn ,NULL );
11461149 SYS_CancelAlarm (card -> timeout_svc );
@@ -1451,7 +1454,7 @@ static s32 __card_start(s32 chn,cardcallback tx_cb,cardcallback exi_cb)
14511454 _CPU_ISR_Restore (level );
14521455
14531456#ifdef _CARD_DEBUG
1454- printf ("__card_start(done CARD_ERROR_READY)\n" );
1457+ printf ("__card_start(done CARD_ERROR_READY)\n" );
14551458#endif
14561459 return CARD_ERROR_READY ;
14571460}
@@ -1535,8 +1538,8 @@ static void __card_fatwritecallback(s32 chn,s32 result)
15351538#endif
15361539 ret = result ;
15371540 if (ret >=0 ) {
1538- fat1 = (card -> workarea + 0x6000 );
1539- fat2 = (card -> workarea + 0x8000 );
1541+ fat1 = (card -> workarea + CARD_SYSBAT );
1542+ fat2 = (card -> workarea + CARD_SYSBAT_BACK );
15401543 if (card -> curr_fat == fat1 ) {
15411544 card -> curr_fat = fat2 ;
15421545 memcpy (fat2 ,fat1 ,8192 );
@@ -1567,8 +1570,8 @@ static void __card_dirwritecallback(s32 chn,s32 result)
15671570#endif
15681571 ret = result ;
15691572 if (ret >=0 ) {
1570- dir1 = (card -> workarea + 0x2000 );
1571- dir2 = (card -> workarea + 0x4000 );
1573+ dir1 = (card -> workarea + CARD_SYSDIR );
1574+ dir2 = (card -> workarea + CARD_SYSDIR_BACK );
15721575 if (card -> curr_dir == dir1 ) {
15731576 card -> curr_dir = dir2 ;
15741577 memcpy (dir2 ,dir1 ,8192 );
@@ -1706,7 +1709,7 @@ static s32 __card_formatregion(s32 chn,u32 encode,cardcallback callback)
17061709 if (!cb ) cb = __card_defaultapicallback ;
17071710 card -> card_api_cb = cb ;
17081711
1709- DCStoreRange (card -> workarea ,0xA000 );
1712+ DCStoreRange (card -> workarea ,CARD_WORKAREA_SIZE );
17101713
17111714 card -> format_step = 0 ;
17121715 if ((ret = ogc_card_sectorerase (chn ,(card -> sector_size * card -> format_step ),__format_callback ))>=0 ) return ret ;
@@ -1986,10 +1989,10 @@ static s32 __card_domount(s32 chn)
19861989 EXI_RegisterEXICallback (chn ,__card_exihandler );
19871990 EXI_Unlock (chn );
19881991
1989- DCInvalidateRange (card -> workarea ,0xA000 );
1992+ DCInvalidateRange (card -> workarea ,CARD_WORKAREA_SIZE );
19901993 }
19911994
1992- if ((ret = ogc_card_read (chn ,(card -> sector_size * (card -> mount_step - 2 )),card -> sector_size ,card -> workarea + ((card -> mount_step - 2 )<<13 ),__card_mountcallback ))< 0 ) goto exit ;
1995+ if ((ret = ogc_card_read (chn ,(card -> sector_size * (card -> mount_step - 2 )),8192 ,card -> workarea + ((card -> mount_step - 2 )<<13 ),__card_mountcallback ))< 0 ) goto exit ;
19931996 return ret ;
19941997
19951998exit :
@@ -2388,7 +2391,7 @@ static s32 __dounlock(s32 chn,u32 *key)
23882391 cipher1 [1 ] = e ;
23892392 workarea [0 ] = (u32 )cipher1 ;
23902393 workarea [1 ] = 8 ;
2391- #ifdef HW_RVL
2394+ #if defined( HW_RVL )
23922395 workarea [2 ] = 0x10000000 ; // use MEM2 base
23932396#else
23942397 workarea [2 ] = 0 ; // use ARAM base
@@ -2742,7 +2745,7 @@ s32 CARD_CreateEntryAsync(s32 chn,card_dir *direntry,card_file *file,cardcallbac
27422745#ifdef _CARD_DEBUG
27432746 printf ("CARD_CreateEntryAsync(%d,%p,%p,%p)\n" ,chn ,direntry ,file ,callback );
27442747#endif
2745- len = strlen (( const char * ) direntry -> filename );
2748+ len = strlen (direntry -> filename );
27462749 if (len > CARD_FILENAMELEN ) return CARD_ERROR_NAMETOOLONG ;
27472750
27482751 if ((ret = __card_getcntrlblock (chn ,& card ))< 0 ) return ret ;
@@ -2819,7 +2822,7 @@ s32 CARD_Open(s32 chn,const char *filename,card_file *file)
28192822 return ret ;
28202823 }
28212824 dirblock = __card_getdirblock (card );
2822- if (dirblock -> entries [fileno ].block < 5 || dirblock -> entries [fileno ].block >=card -> blocks ) {
2825+ if (dirblock -> entries [fileno ].block < CARD_SYSAREA || dirblock -> entries [fileno ].block >=card -> blocks ) {
28232826 __card_putcntrlblock (card ,CARD_ERROR_BROKEN );
28242827 return CARD_ERROR_BROKEN ;
28252828 }
@@ -2843,19 +2846,19 @@ s32 CARD_OpenEntry(s32 chn,card_dir *entry,card_file *file)
28432846
28442847 file -> filenum = -1 ;
28452848 if ((ret = __card_getcntrlblock (chn ,& card ))< 0 ) return ret ;
2846- if ((ret = __card_getfilenum (card ,( const char * ) entry -> filename ,(const char * )entry -> gamecode ,(const char * )entry -> company ,& fileno ))< 0 ) {
2849+ if ((ret = __card_getfilenum (card ,entry -> filename ,(const char * )entry -> gamecode ,(const char * )entry -> company ,& fileno ))< 0 ) {
28472850 __card_putcntrlblock (card ,ret );
28482851 return ret ;
28492852 }
28502853
28512854 dirblock = __card_getdirblock (card );
2852- if (dirblock -> entries [fileno ].block < 5 || dirblock -> entries [fileno ].block >=card -> blocks ) {
2855+ if (dirblock -> entries [fileno ].block < CARD_SYSAREA || dirblock -> entries [fileno ].block >=card -> blocks ) {
28532856 __card_putcntrlblock (card ,CARD_ERROR_BROKEN );
28542857 return CARD_ERROR_BROKEN ;
28552858 }
28562859
28572860 file -> chn = chn ;
2858- file -> filenum = entry -> fileno ;
2861+ file -> filenum = fileno ;
28592862 file -> offset = 0 ;
28602863 file -> len = dirblock -> entries [fileno ].length * card -> sector_size ;
28612864 file -> iblock = dirblock -> entries [fileno ].block ;
0 commit comments