ide-disk: move all ioctl handling to ide-disk_ioctl.c

While at it:
- idedisk_ioctl() -> ide_disk_ioctl()
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent b9103da4
...@@ -36,6 +36,7 @@ obj-$(CONFIG_IDE_H8300) += h8300/ ...@@ -36,6 +36,7 @@ obj-$(CONFIG_IDE_H8300) += h8300/
obj-$(CONFIG_IDE_GENERIC) += ide-generic.o obj-$(CONFIG_IDE_GENERIC) += ide-generic.o
obj-$(CONFIG_BLK_DEV_IDEPNP) += ide-pnp.o obj-$(CONFIG_BLK_DEV_IDEPNP) += ide-pnp.o
ide-disk_mod-y += ide-disk.o ide-disk_ioctl.o
ide-cd_mod-y += ide-cd.o ide-cd_ioctl.o ide-cd_verbose.o ide-cd_mod-y += ide-cd.o ide-cd_ioctl.o ide-cd_verbose.o
ide-floppy_mod-y += ide-floppy.o ide-floppy_ioctl.o ide-floppy_mod-y += ide-floppy.o ide-floppy_ioctl.o
...@@ -43,7 +44,7 @@ ifeq ($(CONFIG_IDE_PROC_FS), y) ...@@ -43,7 +44,7 @@ ifeq ($(CONFIG_IDE_PROC_FS), y)
ide-floppy_mod-y += ide-floppy_proc.o ide-floppy_mod-y += ide-floppy_proc.o
endif endif
obj-$(CONFIG_BLK_DEV_IDEDISK) += ide-disk.o obj-$(CONFIG_BLK_DEV_IDEDISK) += ide-disk_mod.o
obj-$(CONFIG_BLK_DEV_IDECD) += ide-cd_mod.o obj-$(CONFIG_BLK_DEV_IDECD) += ide-cd_mod.o
obj-$(CONFIG_BLK_DEV_IDEFLOPPY) += ide-floppy_mod.o obj-$(CONFIG_BLK_DEV_IDEFLOPPY) += ide-floppy_mod.o
obj-$(CONFIG_BLK_DEV_IDETAPE) += ide-tape.o obj-$(CONFIG_BLK_DEV_IDETAPE) += ide-tape.o
......
...@@ -45,21 +45,12 @@ ...@@ -45,21 +45,12 @@
#define IDE_DISK_MINORS 0 #define IDE_DISK_MINORS 0
#endif #endif
struct ide_disk_obj { #include "ide-disk.h"
ide_drive_t *drive;
ide_driver_t *driver;
struct gendisk *disk;
struct kref kref;
unsigned int openers; /* protected by BKL for now */
};
static DEFINE_MUTEX(idedisk_ref_mutex); static DEFINE_MUTEX(idedisk_ref_mutex);
#define to_ide_disk(obj) container_of(obj, struct ide_disk_obj, kref) #define to_ide_disk(obj) container_of(obj, struct ide_disk_obj, kref)
#define ide_disk_g(disk) \
container_of((disk)->private_data, struct ide_disk_obj, driver)
static void ide_disk_release(struct kref *); static void ide_disk_release(struct kref *);
static struct ide_disk_obj *ide_disk_get(struct gendisk *disk) static struct ide_disk_obj *ide_disk_get(struct gendisk *disk)
...@@ -722,12 +713,12 @@ static int set_addressing(ide_drive_t *drive, int arg) ...@@ -722,12 +713,12 @@ static int set_addressing(ide_drive_t *drive, int arg)
return 0; return 0;
} }
ide_devset_rw(acoustic, acoustic); ide_ext_devset_rw(acoustic, acoustic);
ide_devset_rw(address, addressing); ide_ext_devset_rw(address, addressing);
ide_devset_rw(multcount, multcount); ide_ext_devset_rw(multcount, multcount);
ide_devset_rw(wcache, wcache); ide_ext_devset_rw(wcache, wcache);
ide_devset_rw_sync(nowerr, nowerr); ide_ext_devset_rw_sync(nowerr, nowerr);
#ifdef CONFIG_IDE_PROC_FS #ifdef CONFIG_IDE_PROC_FS
ide_devset_rw_field(bios_cyl, bios_cyl); ide_devset_rw_field(bios_cyl, bios_cyl);
...@@ -1025,30 +1016,6 @@ static int idedisk_getgeo(struct block_device *bdev, struct hd_geometry *geo) ...@@ -1025,30 +1016,6 @@ static int idedisk_getgeo(struct block_device *bdev, struct hd_geometry *geo)
return 0; return 0;
} }
static const struct ide_ioctl_devset ide_disk_ioctl_settings[] = {
{ HDIO_GET_ADDRESS, HDIO_SET_ADDRESS, &ide_devset_address },
{ HDIO_GET_MULTCOUNT, HDIO_SET_MULTCOUNT, &ide_devset_multcount },
{ HDIO_GET_NOWERR, HDIO_SET_NOWERR, &ide_devset_nowerr },
{ HDIO_GET_WCACHE, HDIO_SET_WCACHE, &ide_devset_wcache },
{ HDIO_GET_ACOUSTIC, HDIO_SET_ACOUSTIC, &ide_devset_acoustic },
{ 0 }
};
static int idedisk_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg)
{
struct block_device *bdev = inode->i_bdev;
struct ide_disk_obj *idkp = ide_disk_g(bdev->bd_disk);
ide_drive_t *drive = idkp->drive;
int err;
err = ide_setting_ioctl(drive, bdev, cmd, arg, ide_disk_ioctl_settings);
if (err != -EOPNOTSUPP)
return err;
return generic_ide_ioctl(drive, file, bdev, cmd, arg);
}
static int idedisk_media_changed(struct gendisk *disk) static int idedisk_media_changed(struct gendisk *disk)
{ {
struct ide_disk_obj *idkp = ide_disk_g(disk); struct ide_disk_obj *idkp = ide_disk_g(disk);
...@@ -1075,7 +1042,7 @@ static struct block_device_operations idedisk_ops = { ...@@ -1075,7 +1042,7 @@ static struct block_device_operations idedisk_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = idedisk_open, .open = idedisk_open,
.release = idedisk_release, .release = idedisk_release,
.ioctl = idedisk_ioctl, .ioctl = ide_disk_ioctl,
.getgeo = idedisk_getgeo, .getgeo = idedisk_getgeo,
.media_changed = idedisk_media_changed, .media_changed = idedisk_media_changed,
.revalidate_disk = idedisk_revalidate_disk .revalidate_disk = idedisk_revalidate_disk
...@@ -1151,6 +1118,7 @@ static int __init idedisk_init(void) ...@@ -1151,6 +1118,7 @@ static int __init idedisk_init(void)
} }
MODULE_ALIAS("ide:*m-disk*"); MODULE_ALIAS("ide:*m-disk*");
MODULE_ALIAS("ide-disk");
module_init(idedisk_init); module_init(idedisk_init);
module_exit(idedisk_exit); module_exit(idedisk_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
#ifndef __IDE_DISK_H
#define __IDE_DISK_H
struct ide_disk_obj {
ide_drive_t *drive;
ide_driver_t *driver;
struct gendisk *disk;
struct kref kref;
unsigned int openers; /* protected by BKL for now */
};
#define ide_disk_g(disk) \
container_of((disk)->private_data, struct ide_disk_obj, driver)
/* ide-disk.c */
ide_decl_devset(address);
ide_decl_devset(multcount);
ide_decl_devset(nowerr);
ide_decl_devset(wcache);
ide_decl_devset(acoustic);
/* ide-disk_ioctl.c */
int ide_disk_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
#endif /* __IDE_DISK_H */
#include <linux/kernel.h>
#include <linux/ide.h>
#include <linux/hdreg.h>
#include "ide-disk.h"
static const struct ide_ioctl_devset ide_disk_ioctl_settings[] = {
{ HDIO_GET_ADDRESS, HDIO_SET_ADDRESS, &ide_devset_address },
{ HDIO_GET_MULTCOUNT, HDIO_SET_MULTCOUNT, &ide_devset_multcount },
{ HDIO_GET_NOWERR, HDIO_SET_NOWERR, &ide_devset_nowerr },
{ HDIO_GET_WCACHE, HDIO_SET_WCACHE, &ide_devset_wcache },
{ HDIO_GET_ACOUSTIC, HDIO_SET_ACOUSTIC, &ide_devset_acoustic },
{ 0 }
};
int ide_disk_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg)
{
struct block_device *bdev = inode->i_bdev;
struct ide_disk_obj *idkp = ide_disk_g(bdev->bd_disk);
ide_drive_t *drive = idkp->drive;
int err;
err = ide_setting_ioctl(drive, bdev, cmd, arg, ide_disk_ioctl_settings);
if (err != -EOPNOTSUPP)
return err;
return generic_ide_ioctl(drive, file, bdev, cmd, arg);
}
...@@ -392,13 +392,10 @@ static int set_unmaskirq(ide_drive_t *drive, int arg) ...@@ -392,13 +392,10 @@ static int set_unmaskirq(ide_drive_t *drive, int arg)
return 0; return 0;
} }
#define ide_gen_devset_rw(_name, _func) \ ide_ext_devset_rw_sync(io_32bit, io_32bit);
__IDE_DEVSET(_name, DS_SYNC, get_##_func, set_##_func) ide_ext_devset_rw_sync(keepsettings, ksettings);
ide_ext_devset_rw_sync(unmaskirq, unmaskirq);
ide_gen_devset_rw(io_32bit, io_32bit); ide_ext_devset_rw_sync(using_dma, using_dma);
ide_gen_devset_rw(keepsettings, ksettings);
ide_gen_devset_rw(unmaskirq, unmaskirq);
ide_gen_devset_rw(using_dma, using_dma);
__IDE_DEVSET(pio_mode, DS_SYNC, NULL, set_pio_mode); __IDE_DEVSET(pio_mode, DS_SYNC, NULL, set_pio_mode);
static int generic_ide_suspend(struct device *dev, pm_message_t mesg) static int generic_ide_suspend(struct device *dev, pm_message_t mesg)
......
...@@ -946,8 +946,11 @@ IDE_DEVSET(_name, 0, get_##_func, set_##_func) ...@@ -946,8 +946,11 @@ IDE_DEVSET(_name, 0, get_##_func, set_##_func)
#define ide_devset_w(_name, _func) \ #define ide_devset_w(_name, _func) \
IDE_DEVSET(_name, 0, NULL, set_##_func) IDE_DEVSET(_name, 0, NULL, set_##_func)
#define ide_devset_rw_sync(_name, _func) \ #define ide_ext_devset_rw(_name, _func) \
IDE_DEVSET(_name, DS_SYNC, get_##_func, set_##_func) __IDE_DEVSET(_name, 0, get_##_func, set_##_func)
#define ide_ext_devset_rw_sync(_name, _func) \
__IDE_DEVSET(_name, DS_SYNC, get_##_func, set_##_func)
#define ide_decl_devset(_name) \ #define ide_decl_devset(_name) \
extern const struct ide_devset ide_devset_##_name extern const struct ide_devset ide_devset_##_name
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment