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

Commit f91e8e39 authored by Hemant Kumar's avatar Hemant Kumar
Browse files

usb: gadget: f_gsi: Add QTI_CTRL_DATA_BUF_INFO ioctl



QTI needs to provide IN and OUT gsi endpoint request buffer length
and total size of the buffer length used by the driver to remote
subsystem. Hence add new ioctl to pass this information.

Change-Id: I4663a8f5f50c0888db142787e17852ebf6e64606
Signed-off-by: default avatarHemant Kumar <hemantk@codeaurora.org>
parent 55c3d32b
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
@@ -1173,6 +1173,7 @@ static long gsi_ctrl_dev_ioctl(struct file *fp, unsigned int cmd,
	struct f_gsi *gsi;
	struct gsi_ctrl_pkt *cpkt;
	struct ep_info info;
	struct data_buf_info data_info;
	enum ipa_usb_teth_prot prot_id =
		*(enum ipa_usb_teth_prot *)(fp->private_data);
	struct gsi_inst_status *inst_cur = &inst_status[prot_id];
@@ -1302,6 +1303,36 @@ static long gsi_ctrl_dev_ioctl(struct file *fp, unsigned int cmd,
		log_event_dbg("Sent NTB datagrams count %d",
			gsi->d_port.ntb_info.ntb_max_datagrams);
		break;
	case QTI_CTRL_DATA_BUF_INFO:
		if (gsi->d_port.out_ep) {
			data_info.epout_buf_len =
				gsi->d_port.out_request.buf_len;
			data_info.epout_total_buf_len =
				gsi->d_port.out_request.buf_len *
				gsi->d_port.out_request.num_bufs;
			log_event_dbg("prot id :%d OUT: buf_len:%u total_len: %u",
				gsi->prot_id, data_info.epout_buf_len,
				data_info.epout_total_buf_len);
		}

		if (gsi->d_port.in_ep) {
			data_info.epin_buf_len =
				gsi->d_port.in_request.buf_len;
			data_info.epin_total_buf_len =
				gsi->d_port.in_request.buf_len *
				gsi->d_port.in_request.num_bufs;
			log_event_dbg("prot id :%d IN: buf_len:%u total_len:%u\n",
				gsi->prot_id, data_info.epin_buf_len,
				data_info.epin_total_buf_len);
		}

		ret = copy_to_user((void __user *)arg, &data_info,
			sizeof(data_info));
		if (ret) {
			log_event_err("QTI_CTRL_DATA_BUF_INFO: copy_to_user failed");
			ret = -EFAULT;
		}
		break;
	default:
		log_event_err("wrong parameter");
		ret = -EINVAL;
+9 −1
Original line number Diff line number Diff line
@@ -11,6 +11,8 @@
#define QTI_CTRL_EP_LOOKUP _IOR(QTI_CTRL_IOCTL_MAGIC, 3, struct ep_info)
#define QTI_CTRL_MODEM_OFFLINE _IO(QTI_CTRL_IOCTL_MAGIC, 4)
#define QTI_CTRL_MODEM_ONLINE _IO(QTI_CTRL_IOCTL_MAGIC, 5)
#define QTI_CTRL_DATA_BUF_INFO \
	_IOR(QTI_CTRL_IOCTL_MAGIC, 6, struct data_buf_info)

enum peripheral_ep_type {
	DATA_EP_TYPE_RESERVED	= 0x0,
@@ -37,5 +39,11 @@ struct ep_info {

};

#endif
struct data_buf_info {
	__u32 epout_buf_len;
	__u32 epout_total_buf_len;
	__u32 epin_buf_len;
	__u32 epin_total_buf_len;
};

#endif