Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 04b773be authored by Ravi Aravamudhan's avatar Ravi Aravamudhan
Browse files

diag: Fix for sending responses in all modes



Diag was sending the responses only to USB with the change
9d92106b - 'diag: Create separate
buffer for command responses'. Make changes to send responses
to user space clients in non-USB modes and to USB in USB mode.

Change-Id: I6e36da23cb4ec99774fb5e4d72e4ab7cb1acb575
Signed-off-by: default avatarRavi Aravamudhan <aravamud@codeaurora.org>
parent 97d5ac84
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -1390,6 +1390,27 @@ static ssize_t diagchar_read(struct file *file, char __user *buf, size_t count,
		/* place holder for number of data field */
		ret += 4;

		spin_lock_irqsave(&driver->rsp_buf_busy_lock, flags);
		if (driver->rsp_write_ptr->length > 0) {
			if (copy_to_user(buf+ret,
			    (void *)&(driver->rsp_write_ptr->length),
			    sizeof(int)))
				goto drop_rsp;
			ret += sizeof(int);
			if (copy_to_user(buf+ret,
			    (void *)(driver->rsp_write_ptr->buf),
			    driver->rsp_write_ptr->length)) {
				ret -= sizeof(int);
				goto drop_rsp;
			}
			num_data++;
			ret += driver->rsp_write_ptr->length;
drop_rsp:
			driver->rsp_write_ptr->length = 0;
			driver->rsp_buf_busy = 0;
		}
		spin_unlock_irqrestore(&driver->rsp_buf_busy_lock, flags);

		for (i = 0; i < driver->buf_tbl_size; i++) {
			if (driver->buf_tbl[i].length > 0) {
#ifdef DIAG_DEBUG
+3 −1
Original line number Diff line number Diff line
@@ -879,7 +879,8 @@ void encode_rsp_and_send(int buf_length)
	diag_hdlc_encode(&send, &enc);
	driver->rsp_write_ptr->buf = rsp_ptr;
	driver->rsp_write_ptr->length =  (int)(enc.dest - (void *)rsp_ptr);
	err = diag_write_to_usb(driver->legacy_ch, driver->rsp_write_ptr);
	/* Set data type as Modem Data as the flow is guaranteed */
	err = diag_device_write(rsp_ptr, MODEM_DATA, driver->rsp_write_ptr);
	if (err) {
		pr_err("diag: In %s, Unable to write to device, err: %d\n",
			__func__, err);
@@ -2061,6 +2062,7 @@ int diagfwd_write_complete(struct diag_request *diag_write_ptr)
		found_it = 1;
		spin_lock_irqsave(&driver->rsp_buf_busy_lock, flags);
		driver->rsp_buf_busy = 0;
		driver->rsp_write_ptr->length = 0;
		spin_unlock_irqrestore(&driver->rsp_buf_busy_lock, flags);
	}