| Bartlomiej Zolnierkiewicz | f879048 | 2008-10-13 21:39:45 +0200 | [diff] [blame] | 1 | #include <linux/kernel.h> | 
|  | 2 | #include <linux/ide.h> | 
|  | 3 | #include <linux/hdreg.h> | 
| Arnd Bergmann | 2a48fc0 | 2010-06-02 14:28:52 +0200 | [diff] [blame] | 4 | #include <linux/mutex.h> | 
| Bartlomiej Zolnierkiewicz | f879048 | 2008-10-13 21:39:45 +0200 | [diff] [blame] | 5 |  | 
|  | 6 | #include "ide-disk.h" | 
|  | 7 |  | 
| Arnd Bergmann | 2a48fc0 | 2010-06-02 14:28:52 +0200 | [diff] [blame] | 8 | static DEFINE_MUTEX(ide_disk_ioctl_mutex); | 
| Bartlomiej Zolnierkiewicz | f879048 | 2008-10-13 21:39:45 +0200 | [diff] [blame] | 9 | static const struct ide_ioctl_devset ide_disk_ioctl_settings[] = { | 
|  | 10 | { HDIO_GET_ADDRESS,	HDIO_SET_ADDRESS,   &ide_devset_address   }, | 
|  | 11 | { HDIO_GET_MULTCOUNT,	HDIO_SET_MULTCOUNT, &ide_devset_multcount }, | 
|  | 12 | { HDIO_GET_NOWERR,	HDIO_SET_NOWERR,    &ide_devset_nowerr	  }, | 
|  | 13 | { HDIO_GET_WCACHE,	HDIO_SET_WCACHE,    &ide_devset_wcache	  }, | 
|  | 14 | { HDIO_GET_ACOUSTIC,	HDIO_SET_ACOUSTIC,  &ide_devset_acoustic  }, | 
|  | 15 | { 0 } | 
|  | 16 | }; | 
|  | 17 |  | 
| Al Viro | badf808 | 2008-10-16 10:23:20 -0400 | [diff] [blame] | 18 | int ide_disk_ioctl(ide_drive_t *drive, struct block_device *bdev, fmode_t mode, | 
| Bartlomiej Zolnierkiewicz | f879048 | 2008-10-13 21:39:45 +0200 | [diff] [blame] | 19 | unsigned int cmd, unsigned long arg) | 
|  | 20 | { | 
| Bartlomiej Zolnierkiewicz | f879048 | 2008-10-13 21:39:45 +0200 | [diff] [blame] | 21 | int err; | 
|  | 22 |  | 
| Arnd Bergmann | 2a48fc0 | 2010-06-02 14:28:52 +0200 | [diff] [blame] | 23 | mutex_lock(&ide_disk_ioctl_mutex); | 
| Bartlomiej Zolnierkiewicz | f879048 | 2008-10-13 21:39:45 +0200 | [diff] [blame] | 24 | err = ide_setting_ioctl(drive, bdev, cmd, arg, ide_disk_ioctl_settings); | 
|  | 25 | if (err != -EOPNOTSUPP) | 
| Arnd Bergmann | 8a6cfeb | 2010-07-08 10:18:46 +0200 | [diff] [blame] | 26 | goto out; | 
| Bartlomiej Zolnierkiewicz | f879048 | 2008-10-13 21:39:45 +0200 | [diff] [blame] | 27 |  | 
| Arnd Bergmann | 8a6cfeb | 2010-07-08 10:18:46 +0200 | [diff] [blame] | 28 | err = generic_ide_ioctl(drive, bdev, cmd, arg); | 
|  | 29 | out: | 
| Arnd Bergmann | 2a48fc0 | 2010-06-02 14:28:52 +0200 | [diff] [blame] | 30 | mutex_unlock(&ide_disk_ioctl_mutex); | 
| Arnd Bergmann | 8a6cfeb | 2010-07-08 10:18:46 +0200 | [diff] [blame] | 31 | return err; | 
| Bartlomiej Zolnierkiewicz | f879048 | 2008-10-13 21:39:45 +0200 | [diff] [blame] | 32 | } |