static void __exit mcdx_exit(void)
{
	int i;

	xinfo("cleanup_module called\n");

	for (i = 0; i < MCDX_NDRIVES; i++) {
		struct s_drive_stuff *stuffp = mcdx_stuffp[i];
		if (!stuffp)
			continue;
		del_gendisk(stuffp->disk);
		if (unregister_cdrom(&stuffp->info)) {
			printk(KERN_WARNING "Can't unregister cdrom mcdx\n");
			continue;
		}
		put_disk(stuffp->disk);
		release_region(stuffp->wreg_data, MCDX_IO_SIZE);
		free_irq(stuffp->irq, NULL);
		if (stuffp->toc) {
			xtrace(MALLOC, "cleanup_module() free toc @ %p\n",
			       stuffp->toc);
			kfree(stuffp->toc);
		}
		xtrace(MALLOC, "cleanup_module() free stuffp @ %p\n",
		       stuffp);
		mcdx_stuffp[i] = NULL;
		kfree(stuffp);
	}

	if (unregister_blkdev(MAJOR_NR, "mcdx") != 0) {
		xwarn("cleanup() unregister_blkdev() failed\n");
	}
	blk_cleanup_queue(mcdx_queue);
#if !MCDX_QUIET
	else
Beispiel #2
0
void __exit mcdx_exit(void)
{
    int i;

	xinfo("cleanup_module called\n");

    for (i = 0; i < MCDX_NDRIVES; i++) {
		struct s_drive_stuff *stuffp;
        	if (unregister_cdrom(&mcdx_info)) {
			printk(KERN_WARNING "Can't unregister cdrom mcdx\n");
			return;
		}
		stuffp = mcdx_stuffp[i];
		if (!stuffp) continue;
		release_region((unsigned long) stuffp->wreg_data, MCDX_IO_SIZE);
		free_irq(stuffp->irq, NULL);
		if (stuffp->toc) {
			xtrace(MALLOC, "cleanup_module() free toc @ %p\n", stuffp->toc);
			kfree(stuffp->toc);
		}
		xtrace(MALLOC, "cleanup_module() free stuffp @ %p\n", stuffp);
		mcdx_stuffp[i] = NULL;
		kfree(stuffp);
    }

    if (devfs_unregister_blkdev(MAJOR_NR, "mcdx") != 0) {
        xwarn("cleanup() unregister_blkdev() failed\n");
    }
	blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR));
#if !MCDX_QUIET
	else xinfo("cleanup() succeeded\n");
Beispiel #3
0
void __exit mcd_exit(void)
{
	del_gendisk(mcd_gendisk);
	put_disk(mcd_gendisk);
	if (unregister_cdrom(&mcd_info)) {
		printk(KERN_WARNING "Can't unregister cdrom mcd\n");
		return;
	}
	free_irq(mcd_irq, NULL);
	release_region(mcd_port, 4);
	if (unregister_blkdev(MAJOR_NR, "mcd")) {
		printk(KERN_WARNING "Can't unregister major mcd\n");
		return;
	}
	blk_cleanup_queue(mcd_queue);
	del_timer_sync(&mcd_timer);
}
Beispiel #4
0
/* This routine gets called during initialization if things go wrong,
 * and is used in cleanup_module as well. */
static void cleanup(int level)
{
  switch (level) {
  case 3:
    if (unregister_cdrom(&mcd_info)) {
      printk(KERN_WARNING "Can't unregister cdrom mcd\n");
      return;
    }
    free_irq(mcd_irq, NULL);
  case 2:
    release_region(mcd_port,4);
  case 1:
    if (unregister_blkdev(MAJOR_NR, "mcd")) {
      printk(KERN_WARNING "Can't unregister major mcd\n");
      return;
    }
  default:
  }
}
Beispiel #5
0
/* This routine gets called during initialization if things go wrong,
 * and is used in mcd_exit as well. */
static void cleanup(int level)
{
	switch (level) {
	case 3:
		if (unregister_cdrom(&mcd_info)) {
			printk(KERN_WARNING "Can't unregister cdrom mcd\n");
			return;
		}
		free_irq(mcd_irq, NULL);
	case 2:
		release_region(mcd_port, 4);
	case 1:
		if (devfs_unregister_blkdev(MAJOR_NR, "mcd")) {
			printk(KERN_WARNING "Can't unregister major mcd\n");
			return;
		}
		blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR));
	default:;
	}
}
Beispiel #6
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);
}