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; }
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; }