Loading drivers/usb/gadget/u_bam.c +25 −23 Original line number Diff line number Diff line /* Copyright (c) 2011-2013, Linux Foundation. All rights reserved. /* Copyright (c) 2011-2014, Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -150,7 +150,6 @@ struct u_bam_data_connect_info { u32 usb_bam_pipe_idx; u32 peer_pipe_idx; u32 usb_bam_handle; struct sps_mem_buffer data_fifo; }; struct gbam_port *bam2bam_ports[BAM2BAM_N_PORTS]; Loading Loading @@ -807,6 +806,28 @@ static void gbam_connect_work(struct work_struct *w) pr_debug("%s: done\n", __func__); } /* * This function configured data fifo based on index passed to get bam2bam * configuration. */ static void configure_data_fifo(u8 idx, struct usb_ep *ep) { struct u_bam_data_connect_info bam_info; struct sps_mem_buffer data_fifo = {0}; get_bam2bam_connection_info(idx, &bam_info.usb_bam_handle, &bam_info.usb_bam_pipe_idx, &bam_info.peer_pipe_idx, NULL, &data_fifo); msm_data_fifo_config(ep, data_fifo.phys_base, data_fifo.size, bam_info.usb_bam_pipe_idx); } static void gbam2bam_connect_work(struct work_struct *w) { struct gbam_port *port = container_of(w, struct gbam_port, connect_w); Loading Loading @@ -860,8 +881,6 @@ static void gbam2bam_connect_work(struct work_struct *w) if (gadget && gadget_is_dwc3(gadget)) { u8 idx; struct u_bam_data_connect_info bam_info; idx = usb_bam_get_connection_idx(gadget->name, IPA_P_BAM, USB_TO_PEER_PERIPHERAL, USB_BAM_DEVICE, 0); Loading @@ -871,15 +890,7 @@ static void gbam2bam_connect_work(struct work_struct *w) return; } 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(port->port_usb->out, bam_info.data_fifo.phys_base, bam_info.data_fifo.size, bam_info.usb_bam_pipe_idx); configure_data_fifo(idx, port->port_usb->out); } Loading @@ -893,7 +904,6 @@ static void gbam2bam_connect_work(struct work_struct *w) if (gadget && gadget_is_dwc3(gadget)) { u8 idx; struct u_bam_data_connect_info bam_info; idx = usb_bam_get_connection_idx(gadget->name, IPA_P_BAM, PEER_PERIPHERAL_TO_USB, Loading @@ -904,15 +914,7 @@ static void gbam2bam_connect_work(struct work_struct *w) return; } 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(port->port_usb->in, bam_info.data_fifo.phys_base, bam_info.data_fifo.size, bam_info.usb_bam_pipe_idx); configure_data_fifo(idx, port->port_usb->in); } gqti_ctrl_update_ipa_pipes(port->port_usb, port->port_num, Loading drivers/usb/gadget/u_bam_data.c +41 −24 Original line number Diff line number Diff line /* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -82,7 +82,6 @@ struct usb_bam_data_connect_info { u32 usb_bam_pipe_idx; u32 peer_pipe_idx; u32 usb_bam_handle; struct sps_mem_buffer data_fifo; }; struct bam_data_port *bam2bam_data_ports[BAM2BAM_DATA_N_PORTS]; Loading Loading @@ -218,6 +217,27 @@ static void bam2bam_data_disconnect_work(struct work_struct *w) } } /* * This function configured data fifo based on index passed to get bam2bam * configuration. */ static void configure_usb_data_fifo(u8 idx, struct usb_ep *ep) { struct u_bam_data_connect_info bam_info; struct sps_mem_buffer data_fifo = {0}; get_bam2bam_connection_info(idx, &bam_info.usb_bam_handle, &bam_info.usb_bam_pipe_idx, &bam_info.peer_pipe_idx, NULL, &data_fifo); msm_data_fifo_config(ep, data_fifo.phys_base, data_fifo.size, bam_info.usb_bam_pipe_idx); } static void bam2bam_data_connect_work(struct work_struct *w) { Loading Loading @@ -268,7 +288,6 @@ static void bam2bam_data_connect_work(struct work_struct *w) d->func_type == USB_FUNC_ECM) && gadget_is_dwc3(gadget)) { u8 idx; struct usb_bam_data_connect_info bam_info; idx = usb_bam_get_connection_idx(gadget->name, IPA_P_BAM, USB_TO_PEER_PERIPHERAL, Loading @@ -278,15 +297,8 @@ static void bam2bam_data_connect_work(struct work_struct *w) __func__); return; } 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(port->port_usb->out, bam_info.data_fifo.phys_base, bam_info.data_fifo.size, bam_info.usb_bam_pipe_idx); configure_usb_data_fifo(idx, port->port_usb->out); } d->ipa_params.dir = PEER_PERIPHERAL_TO_USB; Loading @@ -308,7 +320,6 @@ static void bam2bam_data_connect_work(struct work_struct *w) d->func_type == USB_FUNC_ECM) && gadget_is_dwc3(gadget)) { u8 idx; struct usb_bam_data_connect_info bam_info; idx = usb_bam_get_connection_idx(gadget->name, IPA_P_BAM, PEER_PERIPHERAL_TO_USB, Loading @@ -318,15 +329,8 @@ static void bam2bam_data_connect_work(struct work_struct *w) __func__); return; } 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(port->port_usb->in, bam_info.data_fifo.phys_base, bam_info.data_fifo.size, bam_info.usb_bam_pipe_idx); configure_usb_data_fifo(idx, port->port_usb->in); } if (d->func_type == USB_FUNC_MBIM) { Loading Loading @@ -770,10 +774,17 @@ static void bam2bam_data_suspend_work(struct work_struct *w) struct bam_data_port *port = container_of(w, struct bam_data_port, suspend_w); struct bam_data_ch_info *d = &port->data_ch; int ret; pr_debug("%s: suspend work started\n", __func__); usb_bam_register_wake_cb(d->dst_connection_idx, bam_data_wake_cb, port); ret = usb_bam_register_wake_cb(d->dst_connection_idx, bam_data_wake_cb, port); if (ret) { pr_err("%s(): pipe is NULL.\n", __func__); return; } if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { usb_bam_register_start_stop_cbs(d->dst_connection_idx, bam_data_start, bam_data_stop, Loading @@ -787,10 +798,16 @@ static void bam2bam_data_resume_work(struct work_struct *w) struct bam_data_port *port = container_of(w, struct bam_data_port, resume_w); struct bam_data_ch_info *d = &port->data_ch; int ret; pr_debug("%s: resume work started\n", __func__); usb_bam_register_wake_cb(d->dst_connection_idx, NULL, NULL); ret = usb_bam_register_wake_cb(d->dst_connection_idx, NULL, NULL); if (ret) { pr_err("%s(): pipe is NULL.\n", __func__); return; } if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) usb_bam_resume(&d->ipa_params); } Loading Loading
drivers/usb/gadget/u_bam.c +25 −23 Original line number Diff line number Diff line /* Copyright (c) 2011-2013, Linux Foundation. All rights reserved. /* Copyright (c) 2011-2014, Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -150,7 +150,6 @@ struct u_bam_data_connect_info { u32 usb_bam_pipe_idx; u32 peer_pipe_idx; u32 usb_bam_handle; struct sps_mem_buffer data_fifo; }; struct gbam_port *bam2bam_ports[BAM2BAM_N_PORTS]; Loading Loading @@ -807,6 +806,28 @@ static void gbam_connect_work(struct work_struct *w) pr_debug("%s: done\n", __func__); } /* * This function configured data fifo based on index passed to get bam2bam * configuration. */ static void configure_data_fifo(u8 idx, struct usb_ep *ep) { struct u_bam_data_connect_info bam_info; struct sps_mem_buffer data_fifo = {0}; get_bam2bam_connection_info(idx, &bam_info.usb_bam_handle, &bam_info.usb_bam_pipe_idx, &bam_info.peer_pipe_idx, NULL, &data_fifo); msm_data_fifo_config(ep, data_fifo.phys_base, data_fifo.size, bam_info.usb_bam_pipe_idx); } static void gbam2bam_connect_work(struct work_struct *w) { struct gbam_port *port = container_of(w, struct gbam_port, connect_w); Loading Loading @@ -860,8 +881,6 @@ static void gbam2bam_connect_work(struct work_struct *w) if (gadget && gadget_is_dwc3(gadget)) { u8 idx; struct u_bam_data_connect_info bam_info; idx = usb_bam_get_connection_idx(gadget->name, IPA_P_BAM, USB_TO_PEER_PERIPHERAL, USB_BAM_DEVICE, 0); Loading @@ -871,15 +890,7 @@ static void gbam2bam_connect_work(struct work_struct *w) return; } 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(port->port_usb->out, bam_info.data_fifo.phys_base, bam_info.data_fifo.size, bam_info.usb_bam_pipe_idx); configure_data_fifo(idx, port->port_usb->out); } Loading @@ -893,7 +904,6 @@ static void gbam2bam_connect_work(struct work_struct *w) if (gadget && gadget_is_dwc3(gadget)) { u8 idx; struct u_bam_data_connect_info bam_info; idx = usb_bam_get_connection_idx(gadget->name, IPA_P_BAM, PEER_PERIPHERAL_TO_USB, Loading @@ -904,15 +914,7 @@ static void gbam2bam_connect_work(struct work_struct *w) return; } 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(port->port_usb->in, bam_info.data_fifo.phys_base, bam_info.data_fifo.size, bam_info.usb_bam_pipe_idx); configure_data_fifo(idx, port->port_usb->in); } gqti_ctrl_update_ipa_pipes(port->port_usb, port->port_num, Loading
drivers/usb/gadget/u_bam_data.c +41 −24 Original line number Diff line number Diff line /* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -82,7 +82,6 @@ struct usb_bam_data_connect_info { u32 usb_bam_pipe_idx; u32 peer_pipe_idx; u32 usb_bam_handle; struct sps_mem_buffer data_fifo; }; struct bam_data_port *bam2bam_data_ports[BAM2BAM_DATA_N_PORTS]; Loading Loading @@ -218,6 +217,27 @@ static void bam2bam_data_disconnect_work(struct work_struct *w) } } /* * This function configured data fifo based on index passed to get bam2bam * configuration. */ static void configure_usb_data_fifo(u8 idx, struct usb_ep *ep) { struct u_bam_data_connect_info bam_info; struct sps_mem_buffer data_fifo = {0}; get_bam2bam_connection_info(idx, &bam_info.usb_bam_handle, &bam_info.usb_bam_pipe_idx, &bam_info.peer_pipe_idx, NULL, &data_fifo); msm_data_fifo_config(ep, data_fifo.phys_base, data_fifo.size, bam_info.usb_bam_pipe_idx); } static void bam2bam_data_connect_work(struct work_struct *w) { Loading Loading @@ -268,7 +288,6 @@ static void bam2bam_data_connect_work(struct work_struct *w) d->func_type == USB_FUNC_ECM) && gadget_is_dwc3(gadget)) { u8 idx; struct usb_bam_data_connect_info bam_info; idx = usb_bam_get_connection_idx(gadget->name, IPA_P_BAM, USB_TO_PEER_PERIPHERAL, Loading @@ -278,15 +297,8 @@ static void bam2bam_data_connect_work(struct work_struct *w) __func__); return; } 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(port->port_usb->out, bam_info.data_fifo.phys_base, bam_info.data_fifo.size, bam_info.usb_bam_pipe_idx); configure_usb_data_fifo(idx, port->port_usb->out); } d->ipa_params.dir = PEER_PERIPHERAL_TO_USB; Loading @@ -308,7 +320,6 @@ static void bam2bam_data_connect_work(struct work_struct *w) d->func_type == USB_FUNC_ECM) && gadget_is_dwc3(gadget)) { u8 idx; struct usb_bam_data_connect_info bam_info; idx = usb_bam_get_connection_idx(gadget->name, IPA_P_BAM, PEER_PERIPHERAL_TO_USB, Loading @@ -318,15 +329,8 @@ static void bam2bam_data_connect_work(struct work_struct *w) __func__); return; } 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(port->port_usb->in, bam_info.data_fifo.phys_base, bam_info.data_fifo.size, bam_info.usb_bam_pipe_idx); configure_usb_data_fifo(idx, port->port_usb->in); } if (d->func_type == USB_FUNC_MBIM) { Loading Loading @@ -770,10 +774,17 @@ static void bam2bam_data_suspend_work(struct work_struct *w) struct bam_data_port *port = container_of(w, struct bam_data_port, suspend_w); struct bam_data_ch_info *d = &port->data_ch; int ret; pr_debug("%s: suspend work started\n", __func__); usb_bam_register_wake_cb(d->dst_connection_idx, bam_data_wake_cb, port); ret = usb_bam_register_wake_cb(d->dst_connection_idx, bam_data_wake_cb, port); if (ret) { pr_err("%s(): pipe is NULL.\n", __func__); return; } if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { usb_bam_register_start_stop_cbs(d->dst_connection_idx, bam_data_start, bam_data_stop, Loading @@ -787,10 +798,16 @@ static void bam2bam_data_resume_work(struct work_struct *w) struct bam_data_port *port = container_of(w, struct bam_data_port, resume_w); struct bam_data_ch_info *d = &port->data_ch; int ret; pr_debug("%s: resume work started\n", __func__); usb_bam_register_wake_cb(d->dst_connection_idx, NULL, NULL); ret = usb_bam_register_wake_cb(d->dst_connection_idx, NULL, NULL); if (ret) { pr_err("%s(): pipe is NULL.\n", __func__); return; } if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) usb_bam_resume(&d->ipa_params); } Loading