static int select_card(int card_no)
{
    mutex_lock(&mmc_mutex);
    led(true);
    last_disk_activity = current_tick;

    mmc_enable_int_flash_clock(card_no == 0);

    if (!card_info[card_no].initialized)
    {
        setup_sci1(7); /* Initial rate: 375 kbps (need <= 400 per mmc specs) */
        write_transfer(dummy, 10); /* allow the card to synchronize */
        while (!(SSR1 & SCI_TEND));
    }

    if (card_no == 0)             /* internal */
        and_b(~0x04, &PADRH);     /* assert CS */
    else                          /* external */
        and_b(~0x02, &PADRH);     /* assert CS */

    if (card_info[card_no].initialized)
    {
        setup_sci1(card_info[card_no].bitrate_register);
        return 0;
    }
    else
    {
        return initialize_card(card_no);
    }
}
int deviceHandler_CARD_readDir(file_handle* ffile, file_handle** dir, unsigned int type){	

	int num_entries = 1, ret = 0, i = 1, slot = ffile->fileBase>>24;
	card_dir *memcard_dir = NULL;
  
	if(!card_init[slot]) { //if some error
		ret = initialize_card(slot);
		if(ret != CARD_ERROR_READY) {
			return -1; //fail
		}
	}
  
	memcard_dir = (card_dir*)memalign(32,sizeof(card_dir));
	memset(memcard_dir, 0, sizeof(card_dir));
 	
	/* Convert the Memory Card "file" data to fileBrowser_files */
	*dir = malloc( num_entries * sizeof(file_handle) );
	// Virtual Entry for entire card.
	memset(&(*dir)[0], 0, sizeof(file_handle));
	sprintf((*dir)[0].name,"RAW Image");
	(*dir)[0].fileAttrib = IS_SPECIAL;
	(*dir)[0].fileBase     = ffile->fileBase;

	int usedSpace = 0;
	ret = CARD_FindFirst (slot, memcard_dir, true);
	while (CARD_ERROR_NOFILE != ret) {
		// Make sure we have room for this one
		if(i == num_entries){
			++num_entries;
			*dir = realloc( *dir, num_entries * sizeof(file_handle) ); 
		}
		memset(&(*dir)[i], 0, sizeof(file_handle));
		strcpy( (*dir)[i].name, (char*)memcard_dir->filename);
		(*dir)[i].name[CARD_FILENAMELEN] = '\0';
		strcat( (*dir)[i].name, ".gci");
		(*dir)[i].name[CARD_FILENAMELEN+4] = '\0';
		(*dir)[i].fileAttrib = IS_FILE;
		(*dir)[i].size     = memcard_dir->filelen + sizeof(GCI);
		(*dir)[i].fileBase     = ffile->fileBase | (memcard_dir->fileno & 0xFFFFFF);
		ret = CARD_FindNext (memcard_dir);
		++i;
		usedSpace += memcard_dir->filelen;
	}
	free(memcard_dir);
	
	usedSpace >>= 10;
	initial_CARD_info.freeSpaceInKB = initial_CARD_info.totalSpaceInKB-usedSpace;

	return num_entries;
}
Esempio n. 3
0
s32 deviceHandler_CARD_init(file_handle* file){
	int slot = (!strncmp((const char*)initial_CARDB.name, file->name, 7));
	file->status = initialize_card(slot);
	s32 memSize = 0, sectSize = 0;
	int ret = CARD_ProbeEx(slot,&memSize,&sectSize);
	if(ret==CARD_ERROR_READY) {
		initial_CARD_info.totalSpaceInKB = (memSize<<7);
	} else {
		print_gecko("CARD_ProbeEx failed %i\r\n", ret);
	}
	initial_CARD_info.freeSpaceInKB = 0;
	
	return file->status == CARD_ERROR_READY ? 1 : 0;
}
Esempio n. 4
0
s32 deviceHandler_CARD_readDir(file_handle* ffile, file_handle** dir, u32 type){	

	int num_entries = 1, ret = 0, i = 0, slot = (!strncmp((const char*)initial_CARDB.name, ffile->name, 7));
	card_dir *memcard_dir = NULL;
  
	if(!card_init[slot]) { //if some error
		ret = initialize_card(slot);
		if(ret != CARD_ERROR_READY) {
			return -1; //fail
		}
	}
	CARD_SetGameAndCompany();
  
	memcard_dir = (card_dir*)memalign(32,sizeof(card_dir));
	memset(memcard_dir, 0, sizeof(card_dir));
 	
	/* Convert the Memory Card "file" data to fileBrowser_files */
	*dir = malloc( num_entries * sizeof(file_handle) );

	int usedSpace = 0;
	ret = CARD_FindFirst (slot, memcard_dir, true);
	while (CARD_ERROR_NOFILE != ret) {
		// Make sure we have room for this one
		if(i == num_entries){
			++num_entries;
			*dir = realloc( *dir, num_entries * sizeof(file_handle) ); 
		}
		memset(&(*dir)[i], 0, sizeof(file_handle));
		strcpy((*dir)[i].name, ffile->name);
		strncat((*dir)[i].name, (char*)memcard_dir->filename, CARD_FILENAMELEN);
		(*dir)[i].fileAttrib = IS_FILE;
		(*dir)[i].size     = memcard_dir->filelen;
		memcpy( (*dir)[i].other, memcard_dir, sizeof(card_dir));
		usedSpace += memcard_dir->filelen;
		ret = CARD_FindNext (memcard_dir);
		++i;
	}
	free(memcard_dir);
	
	usedSpace >>= 10;
	initial_CARD_info.freeSpaceInKB = initial_CARD_info.totalSpaceInKB-usedSpace;

	return num_entries;
}
Esempio n. 5
0
// Checks if devices are available, prints name of device being detected for slow init devices
void populateDeviceAvailability() {
	DrawFrameStart();
	DrawMessageBox(D_INFO, "Detecting devices ...\nThis can be skipped by holding B next time");
	DrawFrameFinish();
	if(PAD_ButtonsHeld(0) & PAD_BUTTON_B) {
		deviceHandler_setAllDevicesAvailable();
		return;
	}
	const DISC_INTERFACE* carda = &__io_gcsda;
	const DISC_INTERFACE* cardb = &__io_gcsdb;
	// DVD
	deviceHandler_setDeviceAvailable(DVD_DISC, swissSettings.hasDVDDrive);
	// SD Gecko
	DrawFrameStart();
	DrawMessageBox(D_INFO, "Detecting devices [SD] ...\nThis can be skipped by holding B next time");
	DrawFrameFinish();
	deviceHandler_setDeviceAvailable(SD_CARD, carda->isInserted() || cardb->isInserted());
	// IDE-EXI
	DrawFrameStart();
	DrawMessageBox(D_INFO, "Detecting devices [IDE-EXI] ...\nThis can be skipped by holding B next time");
	DrawFrameFinish();
	deviceHandler_setDeviceAvailable(IDEEXI, ide_exi_inserted(0) || ide_exi_inserted(1));
	// Qoob
	deviceHandler_setDeviceAvailable(QOOB_FLASH, 0);	// Hidden by default, add auto detect at some point
	// WODE
	deviceHandler_setDeviceAvailable(WODE, 0);	// Hidden by default, add auto detect at some point
	// Memory card
	DrawFrameStart();
	DrawMessageBox(D_INFO, "Detecting devices [Memory Card] ...\nThis can be skipped by holding B next time");
	DrawFrameFinish();
	deviceHandler_setDeviceAvailable(MEMCARD, (initialize_card(0)==CARD_ERROR_READY) || (initialize_card(1)==CARD_ERROR_READY));
	// WKF/WASP
	DrawFrameStart();
	DrawMessageBox(D_INFO, "Detecting devices [WKF/WASP] ...\nThis can be skipped by holding B next time");
	DrawFrameFinish();
	deviceHandler_setDeviceAvailable(WKF, swissSettings.hasDVDDrive && (__wkfSpiReadId() != 0 && __wkfSpiReadId() != 0xFFFFFFFF));
	// USB Gecko
	deviceHandler_setDeviceAvailable(USBGECKO, usb_isgeckoalive(1));
	// BBA/SAMBA
	deviceHandler_setDeviceAvailable(SAMBA, exi_bba_exists());
	// System, always there
	deviceHandler_setDeviceAvailable(SYS, 1);
}
Esempio n. 6
0
bool deviceHandler_CARD_test_b() {
	s32 memSize = 0, sectSize = 0;
	return ((initialize_card(1)==CARD_ERROR_READY) && (CARD_ProbeEx(1, &memSize,&sectSize)==CARD_ERROR_READY));
}