Commit 6a2900b6 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Linus Torvalds
Browse files

[PATCH] kill cdrom ->dev_ioctl method



Since early 2.4.x all cdrom drivers implement the block_device methods
themselves, so they can handle additional ioctls directly instead of going
through the cdrom layer.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Acked-by: default avatarJens Axboe <axboe@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent d2c5d4fc
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -407,7 +407,6 @@ int register_cdrom(struct cdrom_device_info *cdi)
	ENSURE(get_mcn, CDC_MCN);
	ENSURE(reset, CDC_RESET);
	ENSURE(audio_ioctl, CDC_PLAY_AUDIO);
	ENSURE(dev_ioctl, CDC_IOCTLS);
	ENSURE(generic_packet, CDC_GENERIC_PACKET);
	cdi->mc_flags = 0;
	cdo->n_minors = 0;
@@ -2776,12 +2775,6 @@ int cdrom_ioctl(struct file * file, struct cdrom_device_info *cdi,
		return cdrom_ioctl_audioctl(cdi, cmd);
	}

	/*
	 * Finally, do the device specific ioctls
	 */
	if (CDROM_CAN(CDC_IOCTLS))
		return cdi->ops->dev_ioctl(cdi, cmd, arg);

	return -ENOSYS;
}

+5 −3
Original line number Diff line number Diff line
@@ -2668,7 +2668,7 @@ static int scd_audio_ioctl(struct cdrom_device_info *cdi,
	return retval;
}

static int scd_dev_ioctl(struct cdrom_device_info *cdi,
static int scd_read_audio(struct cdrom_device_info *cdi,
			 unsigned int cmd, unsigned long arg)
{
	void __user *argp = (void __user *)arg;
@@ -2894,11 +2894,10 @@ static struct cdrom_device_ops scd_dops = {
	.get_mcn		= scd_get_mcn,
	.reset			= scd_reset,
	.audio_ioctl		= scd_audio_ioctl,
	.dev_ioctl		= scd_dev_ioctl,
	.capability		= CDC_OPEN_TRAY | CDC_CLOSE_TRAY | CDC_LOCK |
				  CDC_SELECT_SPEED | CDC_MULTI_SESSION |
				  CDC_MCN | CDC_MEDIA_CHANGED | CDC_PLAY_AUDIO |
				  CDC_RESET | CDC_IOCTLS | CDC_DRIVE_STATUS,
				  CDC_RESET | CDC_DRIVE_STATUS,
	.n_minors		= 1,
};

@@ -2936,6 +2935,9 @@ static int scd_block_ioctl(struct inode *inode, struct file *file,
		case CDROMCLOSETRAY:
			retval = scd_tray_move(&scd_info, 0);
			break;
		case CDROMREADAUDIO:
			retval = scd_read_audio(&scd_info, CDROMREADAUDIO, arg);
			break;
		default:
			retval = cdrom_ioctl(file, &scd_info, inode, cmd, arg);
	}
+16 −28
Original line number Diff line number Diff line
@@ -1157,32 +1157,6 @@ static int cm206_audio_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
	}
}

/* Ioctl. These ioctls are specific to the cm206 driver. I have made
   some driver statistics accessible through ioctl calls.
 */

static int cm206_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
		       unsigned long arg)
{
	switch (cmd) {
#ifdef STATISTICS
	case CM206CTL_GET_STAT:
		if (arg >= NR_STATS)
			return -EINVAL;
		else
			return cd->stats[arg];
	case CM206CTL_GET_LAST_STAT:
		if (arg >= NR_STATS)
			return -EINVAL;
		else
			return cd->last_stat[arg];
#endif
	default:
		debug(("Unknown ioctl call 0x%x\n", cmd));
		return -EINVAL;
	}
}

static int cm206_media_changed(struct cdrom_device_info *cdi, int disc_nr)
{
	if (cd != NULL) {
@@ -1321,11 +1295,10 @@ static struct cdrom_device_ops cm206_dops = {
	.get_mcn		= cm206_get_upc,
	.reset			= cm206_reset,
	.audio_ioctl		= cm206_audio_ioctl,
	.dev_ioctl		= cm206_ioctl,
	.capability		= CDC_CLOSE_TRAY | CDC_OPEN_TRAY | CDC_LOCK |
				  CDC_MULTI_SESSION | CDC_MEDIA_CHANGED |
				  CDC_MCN | CDC_PLAY_AUDIO | CDC_SELECT_SPEED |
				  CDC_IOCTLS | CDC_DRIVE_STATUS,
				  CDC_DRIVE_STATUS,
	.n_minors		= 1,
};

@@ -1350,6 +1323,21 @@ static int cm206_block_release(struct inode *inode, struct file *file)
static int cm206_block_ioctl(struct inode *inode, struct file *file,
				unsigned cmd, unsigned long arg)
{
	switch (cmd) {
#ifdef STATISTICS
	case CM206CTL_GET_STAT:
		if (arg >= NR_STATS)
			return -EINVAL;
		return cd->stats[arg];
	case CM206CTL_GET_LAST_STAT:
		if (arg >= NR_STATS)
			return -EINVAL;
		return cd->last_stat[arg];
#endif
	default:
		break;
	}

	return cdrom_ioctl(file, &cm206_info, inode, cmd, arg);
}

+941 −949

File changed.

Preview size limit exceeded, changes collapsed.

+1 −1
Original line number Diff line number Diff line
@@ -627,7 +627,7 @@ static struct cdrom_device_ops viocd_dops = {
	.media_changed = viocd_media_changed,
	.lock_door = viocd_lock_door,
	.generic_packet = viocd_packet,
	.capability = CDC_CLOSE_TRAY | CDC_OPEN_TRAY | CDC_LOCK | CDC_SELECT_SPEED | CDC_SELECT_DISC | CDC_MULTI_SESSION | CDC_MCN | CDC_MEDIA_CHANGED | CDC_PLAY_AUDIO | CDC_RESET | CDC_IOCTLS | CDC_DRIVE_STATUS | CDC_GENERIC_PACKET | CDC_CD_R | CDC_CD_RW | CDC_DVD | CDC_DVD_R | CDC_DVD_RAM | CDC_RAM
	.capability = CDC_CLOSE_TRAY | CDC_OPEN_TRAY | CDC_LOCK | CDC_SELECT_SPEED | CDC_SELECT_DISC | CDC_MULTI_SESSION | CDC_MCN | CDC_MEDIA_CHANGED | CDC_PLAY_AUDIO | CDC_RESET | CDC_DRIVE_STATUS | CDC_GENERIC_PACKET | CDC_CD_R | CDC_CD_RW | CDC_DVD | CDC_DVD_R | CDC_DVD_RAM | CDC_RAM
};

static int __init find_capability(const char *type)
Loading