summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRohith Seelaboyina <rseelaboyina@nvidia.com>2014-03-05 16:10:00 +0530
committerRohith Seelaboyina <rseelaboyina@nvidia.com>2014-03-17 23:33:20 -0700
commitc4367afe1d2bc3eca18ba8b83001869351fd30f1 (patch)
treeca2503c07677936442b24fa4aba4c82984c549dc
parent1dd32f36c0244eb8a09fe035558b66f29c254514 (diff)
usb: gadget: mtp: add new ioctl for compat
Define a new ioctl for MTP_SEND_EVENT, as its ioctl numbers depends on the size of struct mtp_event, which varies in ARCH32 and ARCH64. Bug 1466403 Change-Id: I1d172aae422ca483b00c6dd59e739166f40c53ce Signed-off-by: Rohith Seelaboyina <rseelaboyina@nvidia.com> Reviewed-on: http://git-master/r/377800 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Venkat Moganty <vmoganty@nvidia.com>
-rw-r--r--drivers/usb/gadget/f_mtp.c21
-rw-r--r--include/uapi/linux/usb/f_mtp.h12
2 files changed, 31 insertions, 2 deletions
diff --git a/drivers/usb/gadget/f_mtp.c b/drivers/usb/gadget/f_mtp.c
index dbfa6d70f37b..4de200a6c491 100644
--- a/drivers/usb/gadget/f_mtp.c
+++ b/drivers/usb/gadget/f_mtp.c
@@ -880,7 +880,7 @@ static int mtp_send_event(struct mtp_dev *dev, struct mtp_event *event)
return ret;
}
-static long mtp_ioctl(struct file *fp, unsigned code, u32 value)
+static long mtp_ioctl(struct file *fp, unsigned code, unsigned long value)
{
struct mtp_dev *dev = fp->private_data;
struct file *filp = NULL;
@@ -968,6 +968,25 @@ static long mtp_ioctl(struct file *fp, unsigned code, u32 value)
ret = mtp_send_event(dev, &event);
goto out;
}
+#ifdef CONFIG_COMPAT
+ case MTP_SEND_EVENT_32:
+ {
+ struct mtp_event_32 event_32;
+ struct mtp_event event;
+ /* return here so we don't change dev->state below,
+ * which would interfere with bulk transfer state.
+ */
+ if (copy_from_user(&event_32, (void __user *)value,
+ sizeof(event_32)))
+ ret = -EFAULT;
+ else {
+ event.length = event_32.length;
+ event.data = &(event_32.data);
+ ret = mtp_send_event(dev, &event);
+ }
+ goto out;
+ }
+#endif
}
fail:
diff --git a/include/uapi/linux/usb/f_mtp.h b/include/uapi/linux/usb/f_mtp.h
index 503291855abd..8200730648e6 100644
--- a/include/uapi/linux/usb/f_mtp.h
+++ b/include/uapi/linux/usb/f_mtp.h
@@ -4,6 +4,8 @@
* Copyright (C) 2010 Google, Inc.
* Author: Mike Lockwood <lockwood@android.com>
*
+ * Copyright (C) 2014, NVIDIA CORPORATION. All rights reserved.
+ *
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
@@ -44,7 +46,15 @@ struct mtp_event {
/* event data to send */
void *data;
};
-
+#ifdef CONFIG_COMPAT
+struct mtp_event_32 {
+ /* size of the event */
+ u32 length;
+ /* event data to send */
+ u32 data;
+};
+#define MTP_SEND_EVENT_32 _IOW('M', 3, struct mtp_event_32)
+#endif
/* Sends the specified file range to the host */
#define MTP_SEND_FILE _IOW('M', 0, struct mtp_file_range)
/* Receives data from the host and writes it to a file.