ANDROID: usb: gadget: f_mtp: Set 0xFFFFFFFF in mtp header ContainerLength field

Value 0xFFFFFFFF should be set according specification
of MTP for large files when fileSize + mtpHeader is greater
than 0xFFFFFFFF.
MTP Specification, Appendix H - USB Optimizations

Patchset: mtp

Change-Id: I6213de052914350be2f87b73f8135f9c0cd05d7c
Signed-off-by: Witold Sciuk <witold.sciuk@intel.com>
Signed-off-by: Konrad Leszczynski <konrad.leszczynski@intel.com>
Signed-off-by: Russ Weight <russell.h.weight@intel.com>
This commit is contained in:
Witold Sciuk
2016-02-13 11:08:37 +01:00
committed by Dmitry Shmidt
parent e88bb963b8
commit 6db5c3eae7

View File

@@ -43,6 +43,7 @@
#define MTP_BULK_BUFFER_SIZE 16384
#define INTR_BUFFER_SIZE 28
#define MAX_INST_NAME_LEN 40
#define MTP_MAX_FILE_SIZE 0xFFFFFFFFL
/* String IDs */
#define INTERFACE_STRING_INDEX 0
@@ -766,7 +767,12 @@ static void send_file_work(struct work_struct *data)
if (hdr_size) {
/* prepend MTP data header */
header = (struct mtp_data_header *)req->buf;
header->length = __cpu_to_le32(count);
/*
* set file size with header according to
* MTP Specification v1.0
*/
header->length = (count > MTP_MAX_FILE_SIZE) ?
MTP_MAX_FILE_SIZE : __cpu_to_le32(count);
header->type = __cpu_to_le16(2); /* data packet */
header->command = __cpu_to_le16(dev->xfer_command);
header->transaction_id =