^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #include <linux/kernel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #include <linux/ide.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #include <linux/hdreg.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #include <linux/mutex.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #include "ide-disk.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) static DEFINE_MUTEX(ide_disk_ioctl_mutex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) static const struct ide_ioctl_devset ide_disk_ioctl_settings[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) { HDIO_GET_ADDRESS, HDIO_SET_ADDRESS, &ide_devset_address },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) { HDIO_GET_MULTCOUNT, HDIO_SET_MULTCOUNT, &ide_devset_multcount },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) { HDIO_GET_NOWERR, HDIO_SET_NOWERR, &ide_devset_nowerr },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) { HDIO_GET_WCACHE, HDIO_SET_WCACHE, &ide_devset_wcache },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) { HDIO_GET_ACOUSTIC, HDIO_SET_ACOUSTIC, &ide_devset_acoustic },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) { 0 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) int ide_disk_ioctl(ide_drive_t *drive, struct block_device *bdev, fmode_t mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) unsigned int cmd, unsigned long arg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) mutex_lock(&ide_disk_ioctl_mutex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) err = ide_setting_ioctl(drive, bdev, cmd, arg, ide_disk_ioctl_settings);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) if (err != -EOPNOTSUPP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) goto out;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) err = generic_ide_ioctl(drive, bdev, cmd, arg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) out:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) mutex_unlock(&ide_disk_ioctl_mutex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) }