Skip to content

Commit c0a95d8

Browse files
committed
Retry until we read the same ID twice
1 parent 0e3b824 commit c0a95d8

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

libogc/exi.c

+11-3
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,7 @@ s32 EXI_GetID(s32 nChn,s32 nDev,u32 *nId)
604604
{
605605
u64 idtime = 0;
606606
s32 ret,lck;
607-
u32 level;
607+
u32 level,cnt,id;
608608
exibus_priv *exi = &eximap[nChn];
609609

610610
if(nChn==EXI_CHANNEL_0 && nDev==EXI_DEVICE_2 && exi_id_serport1!=0) {
@@ -642,7 +642,14 @@ s32 EXI_GetID(s32 nChn,s32 nDev,u32 *nId)
642642
else ret = EXI_Lock(nChn,nDev,NULL);
643643

644644
if(ret) {
645-
ret = EXI_GetIDEx(nChn,nDev,nId);
645+
id = 0xffffffff;
646+
cnt = 0;
647+
while(cnt<10) {
648+
if((ret=EXI_GetIDEx(nChn,nDev,nId))==0) break;
649+
if(id==*nId) break;
650+
id = *nId;
651+
cnt++;
652+
}
646653
EXI_Unlock(nChn);
647654
}
648655

@@ -680,9 +687,10 @@ s32 EXI_GetIDEx(s32 nChn,s32 nDev,u32 *nId)
680687

681688
ret = 0;
682689
reg = 0;
690+
*nId = 0;
683691
if(EXI_Imm(nChn,&reg,2,EXI_WRITE,NULL)==0) ret |= 0x01;
684692
if(EXI_Sync(nChn)==0) ret |= 0x02;
685-
if(EXI_Imm(nChn,nId,4,EXI_READ,NULL)==0) ret |= 0x04;
693+
if(EXI_Imm(nChn,nId,4,EXI_READWRITE,NULL)==0) ret |= 0x04;
686694
if(EXI_Sync(nChn)==0) ret |= 0x08;
687695
if(EXI_Deselect(nChn)==0) ret |= 0x10;
688696

libogc/sdgecko_io.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -1196,11 +1196,10 @@ static bool __card_check(s32 drv_no)
11961196
s32 ret;
11971197

11981198
if(drv_no<0 || drv_no>=MAX_DRIVE) return FALSE;
1199-
if(drv_no==2) return TRUE;
12001199
#ifdef _CARDIO_DEBUG
12011200
printf("__card_check(%d)\n",drv_no);
12021201
#endif
1203-
if(_ioCardSelect[drv_no]!=EXI_DEVICE_0) {
1202+
if(drv_no==2 || _ioCardSelect[drv_no]!=EXI_DEVICE_0) {
12041203
if(EXI_GetID(drv_no,_ioCardSelect[drv_no],&id)==0) return FALSE;
12051204
if(id!=0xffffffff) return FALSE;
12061205
return TRUE;

0 commit comments

Comments
 (0)