Exemple #1
0
void
ps2mcfs_cleanup()
{
	TRACE("ps2mcfs_cleanup()\n");

	ps2sif_lock(ps2mcfs_lock, "mcfs cleanup");
#ifdef PS2MCFS_DEBUG
	if (ps2mcfs_debug & DBG_LOCK)
		ps2sif_setlockflags(ps2mcfs_lock, oldflags);
#endif

	/*
	 * un-hook block device read/write routine
	 */
	if (ps2mc_blkrw_hook == ps2mcfs_blkrw)
		ps2mc_blkrw_hook = NULL;

	/*
	 * stop the thread
	 */
	if (thread_task != NULL) {
            send_sig(SIGKILL, thread_task, 1);
	    wait_for_completion(&thread_comp);	/* wait the thread exit */
	}

	unregister_filesystem(&ps2mcfs_fs_type);
	ps2mcfs_exit_root();
	ps2mcfs_exit_pathcache();
	ps2mcfs_exit_fdcache();
	ps2mcfs_exit_filebuf();
	ps2sif_unlock(ps2mcfs_lock);
}
Exemple #2
0
static int
ps2cdvd_drive_status(struct cdrom_device_info *cdi, int arg)
{
	int res;

	/* spinup and re-check disc if the state is in IDLE */
	ps2cdvd_ready();

	if (ps2sif_lock(ps2cdvd_lock, "cdvd_drive_status") != 0)
		return CDS_NO_INFO;

	switch (ps2cdvd_state) {
	case STAT_WAIT_DISC:
	case STAT_INVALID_DISC:
		DPRINT(DBG_INFO, "drive_status=NO_DISC\n");
		res = CDS_NO_DISC;
		break;

	case STAT_READY:
	case STAT_READ:
	case STAT_READ_ERROR_CHECK:
		DPRINT(DBG_INFO, "drive_status=DISC_OK\n");
		res = CDS_DISC_OK;
		break;

	case STAT_ERROR:
	default:
		DPRINT(DBG_INFO, "drive_status=NO_INFO\n");
		res = CDS_NO_INFO;
		break;
	}
	ps2sif_unlock(ps2cdvd_lock);

	return res;
}
Exemple #3
0
static int
ps2cdvd_reset(struct cdrom_device_info *cdi)
{
	unsigned long flags;

	save_flags(flags);
	cli();
	ps2sif_lock(ps2cdvd_lock, "cdvd_reset");
	RESET_TIMER();
#ifdef CONFIG_PS2_SBIOS_VER_CHECK
	if (0x0201 <= sbios(SB_GETVER, NULL))
		ps2cdvdcall_reset();
#else
	ps2cdvdcall_reset();
#endif
	invalidate_discinfo();
	ps2cdvd_state = ps2cdvd_enter(STAT_WAIT_DISC);
	ps2sif_unlock(ps2cdvd_lock);
	restore_flags(flags);
	return 0;
}
Exemple #4
0
static void
ps2cdvd_cleanup()
{

	DPRINT(DBG_VERBOSE, "cleanup\n");

	ps2sif_lock(ps2cdvd_lock, "cdvd_cleanup");
	RESET_TIMER();

	if (initialized & INIT_LABELBUF) {
		DPRINT(DBG_VERBOSE, "free labelbuf %p\n", labelbuf);
		kfree(labelbuf);
	}

	if (initialized & INIT_DATABUF) {
		DPRINT(DBG_VERBOSE, "free databuf %p\n", ps2cdvd_databufx);
		kfree(ps2cdvd_databufx);
	}

#if 0
	if (initialized & INIT_IOPSIDE) 
		ps2cdvd_cleanupiop();
#endif

	if (initialized & INIT_BLKDEV) {
		DPRINT(DBG_VERBOSE, "unregister block device\n");
		unregister_blkdev(MAJOR_NR, "ps2cdvd");
	}

	if (initialized & INIT_CDROM) {
		DPRINT(DBG_VERBOSE, "unregister cdrom\n");
		unregister_cdrom(&ps2cdvd_info);
	}

	blksize_size[MAJOR_NR] = NULL;

	initialized = 0;
	ps2sif_unlock(ps2cdvd_lock);
}