7676#define IOCTL_SDIO_GETOCR 0x0C
7777#define IOCTL_SDIO_READDATA 0x0D
7878#define IOCTL_SDIO_WRITEDATA 0x0E
79-
80- #define SDIOCMD_TYPE_BC 1
81- #define SDIOCMD_TYPE_BCR 2
82- #define SDIOCMD_TYPE_AC 3
83- #define SDIOCMD_TYPE_ADTC 4
79+
80+ #define SDIOCMD_TYPE_NODATA 0
81+ #define SDIOCMD_TYPE_READ 1
82+ #define SDIOCMD_TYPE_WRITE 2
83+ #define SDIOCMD_TYPE_TRANSFER 3
8484
8585#define SDIO_RESPONSE_NONE 0
8686#define SDIO_RESPONSE_R1 1
@@ -184,12 +184,12 @@ static s32 __sdio_sendcommandimpl(u32 cmd,u32 cmd_type,u32 rsp_type,u32 arg,u32
184184
185185 return ret ;
186186}
187- //There is an IOS bug where it doesn't enable the DMA interrupt on cmd_type SDIOCMD_TYPE_BC
187+ //There is an IOS bug where it doesn't enable the DMA interrupt on cmd_type SDIOCMD_TYPE_READ
188188//this makes it so if a buffer crosses a 4k boundary it will hang
189189#define __sdio_sendcommand (cmd , cmd_type , rsp_type ,arg , blk_cnt , blk_size , buffer , reply , rlen ) \
190190 ({ \
191- _Static_assert((cmd_type) != SDIOCMD_TYPE_BC || ((blk_cnt)*(blk_size) <= 0x1000 && (blk_cnt)*(blk_size) <= __alignof__(buffer)), \
192- "SDIOCMD_TYPE_BC transfer may cross a 4K boundary: align the buffer"); \
191+ _Static_assert((cmd_type) != SDIOCMD_TYPE_READ || ((blk_cnt)*(blk_size) <= 0x1000 && (blk_cnt)*(blk_size) <= __alignof__(buffer)), \
192+ "SDIOCMD_TYPE_READ transfer may cross a 4K boundary: align the buffer"); \
193193 __sdio_sendcommandimpl(cmd, cmd_type, rsp_type,arg, blk_cnt, blk_size, buffer, reply, rlen); \
194194 })
195195
@@ -305,7 +305,7 @@ static s32 __sd0_getstatus(void)
305305 s32 ret ;
306306 u32 status = 0 ;
307307
308- ret = __sdio_sendcommand (SDIO_CMD_SENDSTATUS ,SDIOCMD_TYPE_AC ,SDIO_RESPONSE_R1 ,(__sd0_rca <<16 ),0 ,0 ,NULL ,& status ,sizeof (u32 ));
308+ ret = __sdio_sendcommand (SDIO_CMD_SENDSTATUS ,SDIOCMD_TYPE_TRANSFER ,SDIO_RESPONSE_R1 ,(__sd0_rca <<16 ),0 ,0 ,NULL ,& status ,sizeof (u32 ));
309309 if (ret < 0 ) return ret ;
310310
311311 return status ;
@@ -317,7 +317,7 @@ static s32 __sd0_getrca(void)
317317 s32 ret ;
318318 u32 rca ;
319319
320- ret = __sdio_sendcommand (SDIO_CMD_SENDRCA ,0 ,SDIO_RESPONSE_R5 ,0 ,0 ,0 ,NULL ,& rca ,sizeof (rca ));
320+ ret = __sdio_sendcommand (SDIO_CMD_SENDRCA ,SDIOCMD_TYPE_NODATA ,SDIO_RESPONSE_R5 ,0 ,0 ,0 ,NULL ,& rca ,sizeof (rca ));
321321 if (ret < 0 ) return ret ;
322322
323323 __sd0_rca = (u16 )(rca >>16 );
@@ -328,7 +328,7 @@ static s32 __sd0_select(void)
328328{
329329 s32 ret ;
330330
331- ret = __sdio_sendcommand (SDIO_CMD_SELECT ,SDIOCMD_TYPE_AC ,SDIO_RESPONSE_R1B ,(__sd0_rca <<16 ),0 ,0 ,NULL ,NULL ,0 );
331+ ret = __sdio_sendcommand (SDIO_CMD_SELECT ,SDIOCMD_TYPE_TRANSFER ,SDIO_RESPONSE_R1B ,(__sd0_rca <<16 ),0 ,0 ,NULL ,NULL ,0 );
332332
333333 return ret ;
334334}
@@ -337,7 +337,7 @@ static s32 __sd0_deselect(void)
337337{
338338 s32 ret ;
339339
340- ret = __sdio_sendcommand (SDIO_CMD_DESELECT ,SDIOCMD_TYPE_AC ,SDIO_RESPONSE_R1B ,0 ,0 ,0 ,NULL ,NULL ,0 );
340+ ret = __sdio_sendcommand (SDIO_CMD_DESELECT ,SDIOCMD_TYPE_TRANSFER ,SDIO_RESPONSE_R1B ,0 ,0 ,0 ,NULL ,NULL ,0 );
341341
342342 return ret ;
343343}
@@ -346,7 +346,7 @@ static s32 __sd0_setblocklength(u32 blk_len)
346346{
347347 s32 ret ;
348348
349- ret = __sdio_sendcommand (SDIO_CMD_SETBLOCKLEN ,SDIOCMD_TYPE_AC ,SDIO_RESPONSE_R1 ,blk_len ,0 ,0 ,NULL ,NULL ,0 );
349+ ret = __sdio_sendcommand (SDIO_CMD_SETBLOCKLEN ,SDIOCMD_TYPE_TRANSFER ,SDIO_RESPONSE_R1 ,blk_len ,0 ,0 ,NULL ,NULL ,0 );
350350
351351 return ret ;
352352}
@@ -359,10 +359,10 @@ static s32 __sd0_setbuswidth(u32 bus_width)
359359 val = 0x0000 ;
360360 if (bus_width == 4 ) val = 0x0002 ;
361361
362- ret = __sdio_sendcommand (SDIO_CMD_APPCMD ,SDIOCMD_TYPE_AC ,SDIO_RESPONSE_R1 ,(__sd0_rca <<16 ),0 ,0 ,NULL ,NULL ,0 );
362+ ret = __sdio_sendcommand (SDIO_CMD_APPCMD ,SDIOCMD_TYPE_TRANSFER ,SDIO_RESPONSE_R1 ,(__sd0_rca <<16 ),0 ,0 ,NULL ,NULL ,0 );
363363 if (ret < 0 ) return ret ;
364364
365- ret = __sdio_sendcommand (SDIO_ACMD_SETBUSWIDTH ,SDIOCMD_TYPE_AC ,SDIO_RESPONSE_R1 ,val ,0 ,0 ,NULL ,NULL ,0 );
365+ ret = __sdio_sendcommand (SDIO_ACMD_SETBUSWIDTH ,SDIOCMD_TYPE_TRANSFER ,SDIO_RESPONSE_R1 ,val ,0 ,0 ,NULL ,NULL ,0 );
366366 if (ret < 0 ) return ret ;
367367
368368 return __sdio_setbuswidth (bus_width == 4 , SDIOHCR_HOSTCONTROL_4BIT );
@@ -372,7 +372,7 @@ static s32 __sd0_getcsd(void)
372372{
373373 s32 ret ;
374374
375- ret = __sdio_sendcommand (SDIO_CMD_SENDCSD ,SDIOCMD_TYPE_AC ,SDIO_RESPONSE_R2 ,(__sd0_rca <<16 ),0 ,0 ,NULL ,__sd0_csd ,sizeof (__sd0_csd ));
375+ ret = __sdio_sendcommand (SDIO_CMD_SENDCSD ,SDIOCMD_TYPE_TRANSFER ,SDIO_RESPONSE_R2 ,(__sd0_rca <<16 ),0 ,0 ,NULL ,__sd0_csd ,sizeof (__sd0_csd ));
376376
377377 return ret ;
378378}
@@ -381,7 +381,7 @@ static s32 __sd0_getcid(void)
381381{
382382 s32 ret ;
383383
384- ret = __sdio_sendcommand (SDIO_CMD_ALL_SENDCID ,0 ,SDIO_RESPONSE_R2 ,(__sd0_rca <<16 ),0 ,0 ,NULL ,__sd0_cid ,sizeof (__sd0_cid ));
384+ ret = __sdio_sendcommand (SDIO_CMD_ALL_SENDCID ,SDIOCMD_TYPE_NODATA ,SDIO_RESPONSE_R2 ,(__sd0_rca <<16 ),0 ,0 ,NULL ,__sd0_cid ,sizeof (__sd0_cid ));
385385
386386 return ret ;
387387}
@@ -440,18 +440,18 @@ static bool __sd0_initio(void)
440440 if (ret < 0 ) goto fail ;
441441
442442 // standard SDHC initialization process
443- ret = __sdio_sendcommand (SDIO_CMD_GOIDLE , 0 , 0 , 0 , 0 , 0 , NULL , NULL , 0 );
443+ ret = __sdio_sendcommand (SDIO_CMD_GOIDLE , SDIOCMD_TYPE_NODATA , 0 , 0 , 0 , 0 , NULL , NULL , 0 );
444444 if (ret < 0 ) goto fail ;
445- ret = __sdio_sendcommand (SDIO_CMD_SENDIFCOND , 0 , SDIO_RESPONSE_R6 , 0x1aa , 0 , 0 , NULL , & resp , sizeof (resp ));
445+ ret = __sdio_sendcommand (SDIO_CMD_SENDIFCOND , SDIOCMD_TYPE_NODATA , SDIO_RESPONSE_R6 , 0x1aa , 0 , 0 , NULL , & resp , sizeof (resp ));
446446 if (ret < 0 ) goto fail ;
447447 if ((resp .rsp_fields [0 ] & 0xff ) != 0xaa ) goto fail ;
448448
449449 tries = 10 ;
450450 while (tries -- > 0 )
451451 {
452- ret = __sdio_sendcommand (SDIO_CMD_APPCMD , SDIOCMD_TYPE_AC ,SDIO_RESPONSE_R1 ,0 ,0 ,0 ,NULL ,NULL ,0 );
452+ ret = __sdio_sendcommand (SDIO_CMD_APPCMD , SDIOCMD_TYPE_TRANSFER ,SDIO_RESPONSE_R1 ,0 ,0 ,0 ,NULL ,NULL ,0 );
453453 if (ret < 0 ) goto fail ;
454- ret = __sdio_sendcommand (SDIO_ACMD_SENDOPCOND , 0 , SDIO_RESPONSE_R3 , 0x40300000 , 0 , 0 , NULL , & resp , sizeof (resp ));
454+ ret = __sdio_sendcommand (SDIO_ACMD_SENDOPCOND , SDIOCMD_TYPE_NODATA , SDIO_RESPONSE_R3 , 0x40300000 , 0 , 0 , NULL , & resp , sizeof (resp ));
455455 if (ret < 0 ) goto fail ;
456456 if (resp .rsp_fields [0 ] & (1 << 31 )) break ;
457457
@@ -494,14 +494,14 @@ static bool __sd0_initio(void)
494494 }
495495
496496 if (CCC & (1 << 10 )) {
497- ret = __sdio_sendcommand (SDIO_CMD_SWITCHFUNC , SDIOCMD_TYPE_BC , SDIO_RESPONSE_R1 , 0x00fffff0 , 1 , sizeof (sd0_functions ), sd0_functions , NULL , 0 );
497+ ret = __sdio_sendcommand (SDIO_CMD_SWITCHFUNC , SDIOCMD_TYPE_READ , SDIO_RESPONSE_R1 , 0x00fffff0 , 1 , sizeof (sd0_functions ), sd0_functions , NULL , 0 );
498498 if (ret < 0 ) {
499499 __sd0_deselect ();
500500 return false;
501501 }
502502
503503 if (((u16 * )sd0_functions )[6 ] & (1 << 1 )) {
504- ret = __sdio_sendcommand (SDIO_CMD_SWITCHFUNC , SDIOCMD_TYPE_BC , SDIO_RESPONSE_R1 , 0x80fffff1 , 1 , sizeof (sd0_functions ), sd0_functions , NULL , 0 );
504+ ret = __sdio_sendcommand (SDIO_CMD_SWITCHFUNC , SDIOCMD_TYPE_READ , SDIO_RESPONSE_R1 , 0x80fffff1 , 1 , sizeof (sd0_functions ), sd0_functions , NULL , 0 );
505505 if (ret < 0 ) {
506506 __sd0_deselect ();
507507 return false;
@@ -600,7 +600,7 @@ static bool sdio_ReadSectors(sec_t sector, sec_t numSectors,void* buffer)
600600 else blk_off = sector ;
601601 if (numSectors > 8 )secs_to_read = 8 ;
602602 else secs_to_read = numSectors ;
603- ret = __sdio_sendcommand (SDIO_CMD_READMULTIBLOCK ,SDIOCMD_TYPE_AC ,SDIO_RESPONSE_R1 ,blk_off ,secs_to_read ,PAGE_SIZE512 ,rw_buffer ,NULL ,0 );
603+ ret = __sdio_sendcommand (SDIO_CMD_READMULTIBLOCK ,SDIOCMD_TYPE_TRANSFER ,SDIO_RESPONSE_R1 ,blk_off ,secs_to_read ,PAGE_SIZE512 ,rw_buffer ,NULL ,0 );
604604 if (ret >=0 ) {
605605 memcpy (ptr ,rw_buffer ,PAGE_SIZE512 * secs_to_read );
606606 ptr += PAGE_SIZE512 * secs_to_read ;
@@ -611,7 +611,7 @@ static bool sdio_ReadSectors(sec_t sector, sec_t numSectors,void* buffer)
611611 }
612612 } else {
613613 if (__sd0_sdhc == 0 ) sector *= PAGE_SIZE512 ;
614- ret = __sdio_sendcommand (SDIO_CMD_READMULTIBLOCK ,SDIOCMD_TYPE_AC ,SDIO_RESPONSE_R1 ,sector ,numSectors ,PAGE_SIZE512 ,buffer ,NULL ,0 );
614+ ret = __sdio_sendcommand (SDIO_CMD_READMULTIBLOCK ,SDIOCMD_TYPE_TRANSFER ,SDIO_RESPONSE_R1 ,sector ,numSectors ,PAGE_SIZE512 ,buffer ,NULL ,0 );
615615 }
616616
617617 __sd0_deselect ();
@@ -640,7 +640,7 @@ static bool sdio_WriteSectors(sec_t sector, sec_t numSectors,const void* buffer)
640640 if (numSectors > 8 )secs_to_write = 8 ;
641641 else secs_to_write = numSectors ;
642642 memcpy (rw_buffer ,ptr ,PAGE_SIZE512 * secs_to_write );
643- ret = __sdio_sendcommand (SDIO_CMD_WRITEMULTIBLOCK ,SDIOCMD_TYPE_AC ,SDIO_RESPONSE_R1 ,blk_off ,secs_to_write ,PAGE_SIZE512 ,rw_buffer ,NULL ,0 );
643+ ret = __sdio_sendcommand (SDIO_CMD_WRITEMULTIBLOCK ,SDIOCMD_TYPE_TRANSFER ,SDIO_RESPONSE_R1 ,blk_off ,secs_to_write ,PAGE_SIZE512 ,rw_buffer ,NULL ,0 );
644644 if (ret >=0 ) {
645645 ptr += PAGE_SIZE512 * secs_to_write ;
646646 sector += secs_to_write ;
@@ -650,7 +650,7 @@ static bool sdio_WriteSectors(sec_t sector, sec_t numSectors,const void* buffer)
650650 }
651651 } else {
652652 if (__sd0_sdhc == 0 ) sector *= PAGE_SIZE512 ;
653- ret = __sdio_sendcommand (SDIO_CMD_WRITEMULTIBLOCK ,SDIOCMD_TYPE_AC ,SDIO_RESPONSE_R1 ,sector ,numSectors ,PAGE_SIZE512 ,(char * )buffer ,NULL ,0 );
653+ ret = __sdio_sendcommand (SDIO_CMD_WRITEMULTIBLOCK ,SDIOCMD_TYPE_TRANSFER ,SDIO_RESPONSE_R1 ,sector ,numSectors ,PAGE_SIZE512 ,(char * )buffer ,NULL ,0 );
654654 }
655655
656656 __sd0_deselect ();
0 commit comments