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); }
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; }
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; }
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); }