static int set_qdss_data_connection(struct usb_gadget *gadget,
	struct usb_ep *data_ep, u8 data_addr, int enable)
{
	int res = 0;
	u8 idx;

	pr_debug("set_qdss_data_connection\n");

	/* There is only one qdss pipe, so the pipe number can be set to 0 */
	idx = usb_bam_get_connection_idx(gadget->name, QDSS_P_BAM,
		PEER_PERIPHERAL_TO_USB, 0);
	if (idx < 0) {
		pr_err("%s: usb_bam_get_connection_idx failed\n", __func__);
		return idx;
	}

	if (enable) {
		res = usb_bam_connect(idx, &(bam_info.usb_bam_pipe_idx));
		bam_info.data_fifo =
			kzalloc(sizeof(struct sps_mem_buffer), GFP_KERNEL);
		if (!bam_info.data_fifo) {
			pr_err("qdss_data_connection: memory alloc failed\n");
			return -ENOMEM;
		}
		usb_bam_set_qdss_core(gadget->name);
		get_bam2bam_connection_info(idx,
			&bam_info.usb_bam_handle,
			&bam_info.usb_bam_pipe_idx, &bam_info.peer_pipe_idx,
			NULL, bam_info.data_fifo);

		msm_data_fifo_config(data_ep, bam_info.data_fifo->phys_base,
			bam_info.data_fifo->size, bam_info.usb_bam_pipe_idx);
	} else {
		kfree(bam_info.data_fifo);
		res = usb_bam_disconnect_pipe(idx);
		if (res) {
			pr_err("usb_bam_disconnection error\n");
			return res;
		}
	}

	return res;
}
Example #2
0
int set_qdss_data_connection(struct usb_ep *data_ep, u8 data_addr, int enable)
{
	int res = 0;

	pr_debug("set_qdss_data_connection\n");

	if (enable) {
		res = usb_bam_connect(BAM_CONNC_IDX, NULL,
			&(bam_info.usb_bam_pipe_idx));
		if (res) {
			pr_err("usb_bam_connection error\n");
			return res;
		}

		bam_info.data_fifo =
			kzalloc(sizeof(struct sps_mem_buffer *), GFP_KERNEL);
		if (!bam_info.data_fifo) {
			pr_err("qdss_data_connection: memory alloc failed\n");
			return -ENOMEM;
		}
		get_bam2bam_connection_info(BAM_CONNC_IDX,
			PEER_PERIPHERAL_TO_USB, &bam_info.usb_bam_handle,
			&bam_info.usb_bam_pipe_idx, &bam_info.peer_pipe_idx,
			NULL, bam_info.data_fifo);

		msm_data_fifo_config(data_ep, bam_info.data_fifo->phys_base,
			bam_info.data_fifo->size, bam_info.usb_bam_pipe_idx);
	} else {
		kfree(bam_info.data_fifo);
		res = usb_bam_disconnect_pipe(BAM_CONNC_IDX);
		if (res) {
			pr_err("usb_bam_disconnection error\n");
			return res;
		}

	}
	return res;
}