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>
This commit is contained in:
Rohith Seelaboyina 2014-03-05 16:10:00 +05:30 committed by Huang, Tao
parent 0c278cf19c
commit 1aab3d20ef
2 changed files with 32 additions and 0 deletions

View File

@ -938,6 +938,25 @@ static long mtp_ioctl(struct file *fp, unsigned code, unsigned long 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 = (void *)(unsigned long)event_32.data;
ret = mtp_send_event(dev, &event);
}
goto out;
}
#endif
}
fail:

View File

@ -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.
@ -45,6 +47,17 @@ struct mtp_event {
void *data;
};
#ifdef CONFIG_COMPAT
struct mtp_event_32 {
/* size of the event */
compat_size_t length;
/* event data to send */
compat_uptr_t 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.