Skip to content

Commit 657e769

Browse files
committed
Add CARD_GetMemSize
1 parent aed8b0f commit 657e769

2 files changed

Lines changed: 51 additions & 36 deletions

File tree

gc/ogc/card.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -229,15 +229,15 @@ s32 CARD_Init(const char *gamecode,const char *company);
229229
s32 CARD_Probe(s32 chn);
230230

231231

232-
/*! \fn s32 CARD_ProbeEx(s32 chn,s32 *mem_size,s32 *sect_size)
232+
/*! \fn s32 CARD_ProbeEx(s32 chn,s32 *mem_size,s32 *sector_size)
233233
\brief Performs a check against the desired EXI channel if a memory card is inserted or mounted
234234
\param[in] chn CARD slot
235235
\param[out] mem_size pointer to a integer variable, ready to take the resulting value (this param is optional and can be NULL)
236-
\param[out] sect_size pointer to a integer variable, ready to take the resulting value (this param is optional and can be NULL)
236+
\param[out] sector_size pointer to a integer variable, ready to take the resulting value (this param is optional and can be NULL)
237237
238238
\return \ref card_errors "card error codes"
239239
*/
240-
s32 CARD_ProbeEx(s32 chn,s32 *mem_size,s32 *sect_size);
240+
s32 CARD_ProbeEx(s32 chn,s32 *mem_size,s32 *sector_size);
241241

242242

243243
/*! \fn s32 CARD_Mount(s32 chn,void *workarea,cardcallback detach_cb)
@@ -482,7 +482,8 @@ s32 CARD_FindNext(card_dir *dir);
482482
\return \ref card_errors "card error codes"
483483
*/
484484
s32 CARD_GetDirectory(s32 chn, card_dir *dir_entries, s32 *count, bool showall);
485-
485+
486+
s32 CARD_GetMemSize(s32 chn,u16 *mem_size);
486487

487488
/*! \fn s32 CARD_GetSectorSize(s32 chn,u32 *sector_size)
488489
\brief Returns the next directory entry from the memory cards directory structure.
@@ -494,14 +495,14 @@ s32 CARD_GetDirectory(s32 chn, card_dir *dir_entries, s32 *count, bool showall);
494495
s32 CARD_GetSectorSize(s32 chn,u32 *sector_size);
495496

496497

497-
/*! \fn s32 CARD_GetBlockCount(s32 chn,u32 *block_count)
498+
/*! \fn s32 CARD_GetBlockCount(s32 chn,u16 *block_count)
498499
\brief Returns the next directory entry from the memory cards directory structure.
499500
\param[in] chn CARD slot.
500-
\param[out] sector_size pointer to receive the result.
501+
\param[out] block_count pointer to receive the result.
501502
502503
\return \ref card_errors "card error codes"
503504
*/
504-
s32 CARD_GetBlockCount(s32 chn,u32 *block_count);
505+
s32 CARD_GetBlockCount(s32 chn,u16 *block_count);
505506

506507

507508
/*! \fn s32 CARD_GetStatus(s32 chn,s32 fileno,card_stat *stats)

libogc/card.c

Lines changed: 43 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -114,13 +114,13 @@ typedef struct _card_block {
114114
u8 cmd[9];
115115
u32 cmd_len;
116116
u32 cmd_mode;
117-
u32 cmd_blck_cnt;
117+
u32 cmd_block_cnt;
118118
u32 cmd_sector_addr;
119119
u32 cmd_retries;
120120
u32 attached;
121121
s32 result;
122122
u32 cid;
123-
u16 card_size;
123+
u16 mem_size;
124124
u32 mount_step;
125125
u32 format_step;
126126
u32 sector_size;
@@ -1358,7 +1358,7 @@ static void __blockwritecallback(s32 chn,s32 result)
13581358
card->transfer_cnt += 128;
13591359
card->cmd_sector_addr += 128;
13601360
card->cmd_usr_buf += 128;
1361-
if((--card->cmd_blck_cnt)>0) {
1361+
if((--card->cmd_block_cnt)>0) {
13621362
if((ret=__card_writepage(chn,__blockwritecallback))>=CARD_ERROR_READY) return;
13631363
}
13641364
}
@@ -1385,7 +1385,7 @@ static void __blockreadcallback(s32 chn,s32 result)
13851385
card->transfer_cnt += CARD_READSIZE;
13861386
card->cmd_sector_addr += CARD_READSIZE;
13871387
card->cmd_usr_buf += CARD_READSIZE;
1388-
if((--card->cmd_blck_cnt)>0) {
1388+
if((--card->cmd_block_cnt)>0) {
13891389
if((ret=__card_readsegment(chn,__blockreadcallback))>=CARD_ERROR_READY) return;
13901390
}
13911391
}
@@ -1622,7 +1622,7 @@ static s32 __card_write(s32 chn,u32 address,u32 block_len,void *buffer,cardcallb
16221622

16231623
if(!card->attached) return CARD_ERROR_NOCARD;
16241624

1625-
card->cmd_blck_cnt = block_len>>7;
1625+
card->cmd_block_cnt = block_len>>7;
16261626
card->cmd_sector_addr = address;
16271627
card->cmd_usr_buf = buffer;
16281628
card->card_xfer_cb = callback;
@@ -1642,7 +1642,7 @@ static s32 __card_read(s32 chn,u32 address,u32 block_len,void *buffer,cardcallba
16421642
card = &cardmap[chn];
16431643

16441644
card->cmd_sector_addr = address;
1645-
card->cmd_blck_cnt = block_len>>9;
1645+
card->cmd_block_cnt = block_len>>9;
16461646
card->cmd_usr_buf = buffer;
16471647
card->card_xfer_cb = callback;
16481648
ret = __card_readsegment(chn,__blockreadcallback);
@@ -1700,7 +1700,7 @@ static s32 __card_formatregion(s32 chn,u16 encode,cardcallback callback)
17001700
*(u64*)&(header->serial[3]) = time;
17011701
header->serial[7] = tmp;
17021702
header->device_id = 0;
1703-
header->size = card->card_size;
1703+
header->size = card->mem_size;
17041704
__card_checksum((u16*)header,508,&header->chksum1,&header->chksum2);
17051705

17061706
cnt = 0;
@@ -1942,14 +1942,14 @@ static s32 __card_domount(s32 chn)
19421942

19431943
if(ret<0) goto exit;
19441944
card->cid = id;
1945-
card->card_size = (id&0xfc);
1945+
card->mem_size = id&0xfc;
19461946
#ifdef _CARD_DEBUG
1947-
printf("__card_domount(card_type = %08x,%08x,%08x)\n",card->card_size,card->cid,id);
1947+
printf("__card_domount(card_type = %08x,%08x,%08x)\n",card->mem_size,card->cid,id);
19481948
#endif
1949-
if(card->card_size) {
1949+
if(card->mem_size) {
19501950
idx = _ROTL(id,23)&0x1c;
19511951
card->sector_size = card_sector_size[idx>>2];
1952-
card->blocks = ((card->card_size<<20)>>3)/card->sector_size;
1952+
card->blocks = ((card->mem_size<<20)>>3)/card->sector_size;
19531953

19541954
if(card->blocks>0x0008) {
19551955
idx = _ROTL(id,26)&0x1c;
@@ -2469,13 +2469,13 @@ s32 CARD_Probe(s32 chn)
24692469
return EXI_Probe(chn);
24702470
}
24712471

2472-
s32 CARD_ProbeEx(s32 chn,s32 *mem_size,s32 *sect_size)
2472+
s32 CARD_ProbeEx(s32 chn,s32 *mem_size,s32 *sector_size)
24732473
{
24742474
s32 ret;
24752475
u32 level,card_id;
24762476
card_block *card = NULL;
24772477
#ifdef _CARD_DEBUG
2478-
printf("CARD_ProbeEx(%d,%p,%p)\n",chn,mem_size,sect_size);
2478+
printf("CARD_ProbeEx(%d,%p,%p)\n",chn,mem_size,sector_size);
24792479
#endif
24802480
if(chn<EXI_CHANNEL_0 || chn>=EXI_CHANNEL_2) return CARD_ERROR_FATAL_ERROR;
24812481
card = &cardmap[chn];
@@ -2494,8 +2494,8 @@ s32 CARD_ProbeEx(s32 chn,s32 *mem_size,s32 *sect_size)
24942494
_CPU_ISR_Restore(level);
24952495
return CARD_ERROR_BUSY;
24962496
}
2497-
if(mem_size) *mem_size = card->card_size;
2498-
if(sect_size) *sect_size = card->sector_size;
2497+
if(mem_size) *mem_size = card->mem_size;
2498+
if(sector_size) *sector_size = card->sector_size;
24992499

25002500
_CPU_ISR_Restore(level);
25012501
return CARD_ERROR_READY;
@@ -2507,10 +2507,10 @@ s32 CARD_ProbeEx(s32 chn,s32 *mem_size,s32 *sect_size)
25072507
if(EXI_GetID(chn,EXI_DEVICE_0,&card_id)) {
25082508
if(!__card_iscard(card_id)) ret = CARD_ERROR_WRONGDEVICE;
25092509
else {
2510-
if(mem_size) *mem_size = card_id&0xFC;
2511-
if(sect_size) {
2510+
if(mem_size) *mem_size = card_id&0xfc;
2511+
if(sector_size) {
25122512
u32 idx = _ROTL(card_id,23)&0x1c;
2513-
*sect_size = card_sector_size[idx>>2];
2513+
*sector_size = card_sector_size[idx>>2];
25142514
}
25152515
ret = CARD_ERROR_READY;
25162516
}
@@ -3108,30 +3108,44 @@ s32 CARD_GetDirectory(s32 chn,card_dir *dir_entries,s32 *count,bool showall)
31083108
return ret;
31093109
}
31103110

3111+
s32 CARD_GetMemSize(s32 chn,u16 *mem_size)
3112+
{
3113+
s32 ret;
3114+
card_block *card = NULL;
3115+
3116+
if(chn<EXI_CHANNEL_0 || chn>=EXI_CHANNEL_2) return CARD_ERROR_NOCARD;
3117+
if((ret=__card_getcntrlblock(chn,&card))<0) return ret;
3118+
3119+
*mem_size = card->mem_size;
3120+
ret = __card_putcntrlblock(card,CARD_ERROR_READY);
3121+
3122+
return ret;
3123+
}
3124+
31113125
s32 CARD_GetSectorSize(s32 chn,u32 *sector_size)
31123126
{
3113-
s32 ret;
3114-
card_block *card = NULL;
3127+
s32 ret;
3128+
card_block *card = NULL;
31153129

3116-
if(chn<EXI_CHANNEL_0 || chn>=EXI_CHANNEL_2) return CARD_ERROR_NOCARD;
3117-
if((ret=__card_getcntrlblock(chn,&card))<0) return ret;
3130+
if(chn<EXI_CHANNEL_0 || chn>=EXI_CHANNEL_2) return CARD_ERROR_NOCARD;
3131+
if((ret=__card_getcntrlblock(chn,&card))<0) return ret;
31183132

31193133
*sector_size = card->sector_size;
3120-
ret = __card_putcntrlblock(card,CARD_ERROR_READY);
3134+
ret = __card_putcntrlblock(card,CARD_ERROR_READY);
31213135

31223136
return ret;
31233137
}
31243138

3125-
s32 CARD_GetBlockCount(s32 chn,u32 *block_count)
3139+
s32 CARD_GetBlockCount(s32 chn,u16 *block_count)
31263140
{
3127-
s32 ret;
3128-
card_block *card = NULL;
3141+
s32 ret;
3142+
card_block *card = NULL;
31293143

3130-
if(chn<EXI_CHANNEL_0 || chn>=EXI_CHANNEL_2) return CARD_ERROR_NOCARD;
3131-
if((ret=__card_getcntrlblock(chn,&card))<0) return ret;
3144+
if(chn<EXI_CHANNEL_0 || chn>=EXI_CHANNEL_2) return CARD_ERROR_NOCARD;
3145+
if((ret=__card_getcntrlblock(chn,&card))<0) return ret;
31323146

31333147
*block_count = card->blocks;
3134-
ret = __card_putcntrlblock(card,CARD_ERROR_READY);
3148+
ret = __card_putcntrlblock(card,CARD_ERROR_READY);
31353149

31363150
return ret;
31373151
}

0 commit comments

Comments
 (0)