Loading drivers/usb/gadget/function/f_qdss.c +50 −3 Original line number Diff line number Diff line Loading @@ -24,11 +24,13 @@ #include "u_qdss.c" #include "usb_gadget_xport.h" #include "u_data_ipa.h" #include "u_rmnet.h" static unsigned int nr_qdss_ports; static unsigned int no_data_bam_ports; static unsigned int data_hsic_ports_no; static unsigned int no_ipa_ports; static unsigned int no_bam_dmux_ports; static struct qdss_ports { enum transport_type data_xport; Loading @@ -38,6 +40,7 @@ static struct qdss_ports { unsigned char port_num; struct f_qdss *port; struct gadget_ipa_port ipa_port; struct grmnet bam_dmux_port; } qdss_ports[NR_QDSS_PORTS]; Loading Loading @@ -539,6 +542,10 @@ static void usb_qdss_disconnect_work(struct work_struct *work) gp = &qdss_ports[qdss->port_num].ipa_port; ipa_data_disconnect(gp, qdss->port_num); break; case USB_GADGET_XPORT_BAM_DMUX: gbam_disconnect(&qdss_ports[qdss->port_num].bam_dmux_port, portno, USB_GADGET_XPORT_BAM); break; case USB_GADGET_XPORT_HSIC: pr_debug("usb_qdss_disconnect_work: HSIC transport\n"); ghsic_data_disconnect(&qdss->port, portno); Loading Loading @@ -582,6 +589,7 @@ static void qdss_disable(struct usb_function *f) qdss->usb_connected = 0; switch (dxport) { case USB_GADGET_XPORT_BAM2BAM_IPA: case USB_GADGET_XPORT_BAM_DMUX: spin_unlock_irqrestore(&qdss->lock, flags); usb_qdss_disconnect_work(&qdss->disconnect_w); return; Loading Loading @@ -717,6 +725,16 @@ static void usb_qdss_connect_work(struct work_struct *work) } qdss->data_enabled = 1; break; case USB_GADGET_XPORT_BAM_DMUX: qdss_ports[qdss->port_num].bam_dmux_port.gadget = qdss->cdev->gadget; qdss_ports[qdss->port_num].bam_dmux_port.in = qdss->port.data; status = gbam_connect(&qdss_ports[qdss->port_num].bam_dmux_port, port_num, USB_GADGET_XPORT_BAM, 0, 0); if (status) pr_err("BAM_DMUX connect failed with %d\n", status); break; case USB_GADGET_XPORT_HSIC: pr_debug("usb_qdss_connect_work: HSIC transport\n"); status = ghsic_data_connect(&qdss->port, port_num); Loading Loading @@ -770,7 +788,8 @@ static int qdss_set_alt(struct usb_function *f, unsigned intf, unsigned alt) goto fail; } if (dxport == USB_GADGET_XPORT_BAM2BAM_IPA) { if (dxport == USB_GADGET_XPORT_BAM2BAM_IPA || dxport == USB_GADGET_XPORT_BAM_DMUX) { qdss->usb_connected = 1; usb_qdss_connect_work(&qdss->connect_w); return 0; Loading Loading @@ -1163,6 +1182,9 @@ static int qdss_init_port(const char *ctrl_name, const char *data_name, return -EINVAL; } pr_debug("ctrl name = %s data_name %s port_name %s\n", ctrl_name, data_name, port_name); pr_debug("%s: port#:%d, data port: %s\n", __func__, nr_qdss_ports, data_name); Loading Loading @@ -1211,6 +1233,11 @@ static int qdss_init_port(const char *ctrl_name, const char *data_name, qdss_port->data_xport_num = data_hsic_ports_no; data_hsic_ports_no++; break; case USB_GADGET_XPORT_BAM_DMUX: qdss_port->data_xport_num = no_bam_dmux_ports; no_bam_dmux_ports++; pr_debug("USB_GADGET_XPORT_BAM_DMUX %u\n", no_bam_dmux_ports); break; case USB_GADGET_XPORT_NONE: break; default: Loading @@ -1230,6 +1257,7 @@ fail_probe: no_data_bam_ports = 0; data_hsic_ports_no = 0; no_ipa_ports = 0; no_bam_dmux_ports = 0; return ret; } Loading @@ -1238,9 +1266,9 @@ static int qdss_gport_setup(void) int port_idx; int i; pr_debug("%s: bam ports: %u data hsic ports: %u nr_qdss_ports: %u ipa_ports:%u\n", pr_debug("%s: bam ports: %u data hsic ports: %u ipa_ports:%u bam_dmux_port:%u nr_qdss_ports:%u\n", __func__, no_data_bam_ports, data_hsic_ports_no, nr_qdss_ports, no_ipa_ports); no_ipa_ports, no_bam_dmux_ports, nr_qdss_ports); if (data_hsic_ports_no) { pr_debug("%s: go to setup hsic data\n", __func__); Loading Loading @@ -1279,5 +1307,24 @@ static int qdss_gport_setup(void) } } if (no_bam_dmux_ports) { port_idx = gbam_setup(no_bam_dmux_ports); if (port_idx < 0) { pr_err("%s(): gbam_setup failed with %d\n", __func__, port_idx); return port_idx; } for (i = 0; i < no_bam_dmux_ports; i++) { if (qdss_ports[i].data_xport == USB_GADGET_XPORT_BAM_DMUX) { qdss_ports[i].data_xport_num = port_idx; pr_debug("%s: BAM-DMUX data_xport_num = %d\n", __func__, qdss_ports[i].data_xport_num); port_idx++; } } } return 0; } drivers/usb/gadget/function/f_rmnet.c +33 −9 Original line number Diff line number Diff line Loading @@ -65,6 +65,7 @@ static unsigned int no_ctrl_smd_ports; static unsigned int no_ctrl_qti_ports; static unsigned int no_ctrl_hsic_ports; static unsigned int no_ctrl_hsuart_ports; static unsigned int no_data_bam_ports; static unsigned int no_data_bam2bam_ports; static unsigned int no_data_hsic_ports; static unsigned int no_data_hsuart_ports; Loading Loading @@ -310,16 +311,22 @@ static int rmnet_gport_setup(void) int i; u8 base; pr_debug("%s: bam2bam ports: %u data hsic ports: %u data hsuart ports: %u" pr_debug("%s: bam ports: %u bam2bam ports: %u data hsic ports: %u data hsuart ports: %u" " smd ports: %u ctrl hsic ports: %u ctrl hsuart ports: %u" " nr_rmnet_ports: %u\n", __func__, no_data_bam2bam_ports, no_data_hsic_ports, no_data_hsuart_ports, no_ctrl_smd_ports, no_ctrl_hsic_ports, no_ctrl_hsuart_ports, nr_rmnet_ports); __func__, no_data_bam_ports, no_data_bam2bam_ports, no_data_hsic_ports, no_data_hsuart_ports, no_ctrl_smd_ports, no_ctrl_hsic_ports, no_ctrl_hsuart_ports, nr_rmnet_ports); if (no_data_bam_ports) { ret = gbam_setup(no_data_bam_ports); if (ret < 0) return ret; } if (no_data_bam2bam_ports) { ret = gbam_setup(no_data_bam2bam_ports); if (ret) ret = gbam2bam_setup(no_data_bam2bam_ports); if (ret < 0) return ret; } Loading Loading @@ -429,6 +436,16 @@ static int gport_rmnet_connect(struct f_rmnet *dev, unsigned intf) gsmd_ctrl_disconnect(&dev->port, port_num); return -EINVAL; } case USB_GADGET_XPORT_BAM: ret = gbam_connect(&dev->port, port_num, dxport, src_connection_idx, dst_connection_idx); if (ret) { pr_err("%s: gbam_connect failed: err:%d\n", __func__, ret); gsmd_ctrl_disconnect(&dev->port, port_num); return ret; } break; case USB_GADGET_XPORT_BAM2BAM_IPA: src_connection_idx = usb_bam_get_connection_idx(gadget->name, IPA_P_BAM, USB_TO_PEER_PERIPHERAL, USB_BAM_DEVICE, Loading Loading @@ -482,7 +499,6 @@ static int gport_rmnet_connect(struct f_rmnet *dev, unsigned intf) break; case USB_GADGET_XPORT_NONE: break; case USB_GADGET_XPORT_BAM: default: pr_err("%s: Un-supported transport: %s\n", __func__, xport_to_str(dxport)); Loading Loading @@ -523,6 +539,7 @@ static int gport_rmnet_disconnect(struct f_rmnet *dev) port_num = rmnet_ports[dev->port_num].data_xport_num; switch (dxport) { case USB_GADGET_XPORT_BAM: case USB_GADGET_XPORT_BAM2BAM: case USB_GADGET_XPORT_BAM2BAM_IPA: gbam_disconnect(&dev->port, port_num, dxport); Loading @@ -535,7 +552,6 @@ static int gport_rmnet_disconnect(struct f_rmnet *dev) break; case USB_GADGET_XPORT_NONE: break; case USB_GADGET_XPORT_BAM: default: pr_err("%s: Un-supported transport: %s\n", __func__, xport_to_str(dxport)); Loading Loading @@ -601,6 +617,8 @@ static void frmnet_suspend(struct usb_function *f) port_num = rmnet_ports[dev->port_num].data_xport_num; switch (dxport) { case USB_GADGET_XPORT_BAM: break; case USB_GADGET_XPORT_BAM2BAM: case USB_GADGET_XPORT_BAM2BAM_IPA: if (remote_wakeup_allowed) { Loading Loading @@ -654,6 +672,8 @@ static void frmnet_resume(struct usb_function *f) port_num = rmnet_ports[dev->port_num].data_xport_num; switch (dxport) { case USB_GADGET_XPORT_BAM: break; case USB_GADGET_XPORT_BAM2BAM: case USB_GADGET_XPORT_BAM2BAM_IPA: if (remote_wakeup_allowed) { Loading Loading @@ -1327,6 +1347,7 @@ static void frmnet_cleanup(void) for (i = 0; i < nr_rmnet_ports; i++) kfree(rmnet_ports[i].port); gbam_cleanup(); nr_rmnet_ports = 0; no_ctrl_smd_ports = 0; no_ctrl_qti_ports = 0; Loading Loading @@ -1399,6 +1420,10 @@ static int frmnet_init_port(const char *ctrl_name, const char *data_name, } switch (rmnet_port->data_xport) { case USB_GADGET_XPORT_BAM: rmnet_port->data_xport_num = no_data_bam_ports; no_data_bam_ports++; break; case USB_GADGET_XPORT_BAM2BAM: case USB_GADGET_XPORT_BAM2BAM_IPA: rmnet_port->data_xport_num = no_data_bam2bam_ports; Loading @@ -1416,7 +1441,6 @@ static int frmnet_init_port(const char *ctrl_name, const char *data_name, case USB_GADGET_XPORT_ETHER: case USB_GADGET_XPORT_NONE: break; case USB_GADGET_XPORT_BAM: default: pr_err("%s: Un-supported transport: %u\n", __func__, rmnet_port->data_xport); Loading drivers/usb/gadget/function/u_bam.c +878 −135 File changed.Preview size limit exceeded, changes collapsed. Show changes drivers/usb/gadget/function/u_ctrl_qti.c +8 −9 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ #include <linux/poll.h> #include <linux/usb/usb_ctrl_qti.h> #include <soc/qcom/bam_dmux.h> #include "u_rmnet.h" #include "usb_gadget_xport.h" Loading Loading @@ -169,7 +170,6 @@ gqti_ctrl_notify_modem(void *gptr, u8 portno, int val) qti_ctrl_queue_notify(port); } #define BAM_DMUX_CHANNEL_ID 8 int gqti_ctrl_connect(void *gr, u8 port_num, unsigned intf, enum transport_type dxport, enum gadget_type gtype) { Loading @@ -192,22 +192,21 @@ int gqti_ctrl_connect(void *gr, u8 port_num, unsigned intf, spin_lock_irqsave(&port->lock, flags); port->gtype = gtype; if (dxport == USB_GADGET_XPORT_BAM) { if (dxport == USB_GADGET_XPORT_BAM || dxport == USB_GADGET_XPORT_BAM_DMUX) { /* * BAM-DMUX data transport is used for RMNET * BAM-DMUX data transport is used for RMNET and DPL * on some targets where IPA is not available. * Set endpoint type as BAM-DMUX and interface * id as channel number. This information is * sent to user space via EP_LOOKUP ioctl. * * The BAM data transport driver supports only * 1 BAM channel and the number is fixed so far * on all targets. This number needs to be same * as the bam_ch_ids defined in u_bam.c. * */ port->ep_type = DATA_EP_TYPE_BAM_DMUX; port->intf = BAM_DMUX_CHANNEL_ID; port->intf = (gtype == USB_GADGET_RMNET) ? BAM_DMUX_USB_RMNET_0 : BAM_DMUX_USB_DPL; port->ipa_prod_idx = 0; port->ipa_cons_idx = 0; } else { Loading drivers/usb/gadget/function/u_rmnet.h +3 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,9 @@ enum ctrl_client { NR_CTRL_CLIENTS }; int gbam_setup(unsigned int no_bam2bam_port); int gbam_setup(unsigned int no_bam_port); int gbam2bam_setup(unsigned int no_bam2bam_port); void gbam_cleanup(void); int gbam_connect(struct grmnet *gr, u8 port_num, enum transport_type trans, u8 src_connection_idx, u8 dst_connection_idx); Loading Loading
drivers/usb/gadget/function/f_qdss.c +50 −3 Original line number Diff line number Diff line Loading @@ -24,11 +24,13 @@ #include "u_qdss.c" #include "usb_gadget_xport.h" #include "u_data_ipa.h" #include "u_rmnet.h" static unsigned int nr_qdss_ports; static unsigned int no_data_bam_ports; static unsigned int data_hsic_ports_no; static unsigned int no_ipa_ports; static unsigned int no_bam_dmux_ports; static struct qdss_ports { enum transport_type data_xport; Loading @@ -38,6 +40,7 @@ static struct qdss_ports { unsigned char port_num; struct f_qdss *port; struct gadget_ipa_port ipa_port; struct grmnet bam_dmux_port; } qdss_ports[NR_QDSS_PORTS]; Loading Loading @@ -539,6 +542,10 @@ static void usb_qdss_disconnect_work(struct work_struct *work) gp = &qdss_ports[qdss->port_num].ipa_port; ipa_data_disconnect(gp, qdss->port_num); break; case USB_GADGET_XPORT_BAM_DMUX: gbam_disconnect(&qdss_ports[qdss->port_num].bam_dmux_port, portno, USB_GADGET_XPORT_BAM); break; case USB_GADGET_XPORT_HSIC: pr_debug("usb_qdss_disconnect_work: HSIC transport\n"); ghsic_data_disconnect(&qdss->port, portno); Loading Loading @@ -582,6 +589,7 @@ static void qdss_disable(struct usb_function *f) qdss->usb_connected = 0; switch (dxport) { case USB_GADGET_XPORT_BAM2BAM_IPA: case USB_GADGET_XPORT_BAM_DMUX: spin_unlock_irqrestore(&qdss->lock, flags); usb_qdss_disconnect_work(&qdss->disconnect_w); return; Loading Loading @@ -717,6 +725,16 @@ static void usb_qdss_connect_work(struct work_struct *work) } qdss->data_enabled = 1; break; case USB_GADGET_XPORT_BAM_DMUX: qdss_ports[qdss->port_num].bam_dmux_port.gadget = qdss->cdev->gadget; qdss_ports[qdss->port_num].bam_dmux_port.in = qdss->port.data; status = gbam_connect(&qdss_ports[qdss->port_num].bam_dmux_port, port_num, USB_GADGET_XPORT_BAM, 0, 0); if (status) pr_err("BAM_DMUX connect failed with %d\n", status); break; case USB_GADGET_XPORT_HSIC: pr_debug("usb_qdss_connect_work: HSIC transport\n"); status = ghsic_data_connect(&qdss->port, port_num); Loading Loading @@ -770,7 +788,8 @@ static int qdss_set_alt(struct usb_function *f, unsigned intf, unsigned alt) goto fail; } if (dxport == USB_GADGET_XPORT_BAM2BAM_IPA) { if (dxport == USB_GADGET_XPORT_BAM2BAM_IPA || dxport == USB_GADGET_XPORT_BAM_DMUX) { qdss->usb_connected = 1; usb_qdss_connect_work(&qdss->connect_w); return 0; Loading Loading @@ -1163,6 +1182,9 @@ static int qdss_init_port(const char *ctrl_name, const char *data_name, return -EINVAL; } pr_debug("ctrl name = %s data_name %s port_name %s\n", ctrl_name, data_name, port_name); pr_debug("%s: port#:%d, data port: %s\n", __func__, nr_qdss_ports, data_name); Loading Loading @@ -1211,6 +1233,11 @@ static int qdss_init_port(const char *ctrl_name, const char *data_name, qdss_port->data_xport_num = data_hsic_ports_no; data_hsic_ports_no++; break; case USB_GADGET_XPORT_BAM_DMUX: qdss_port->data_xport_num = no_bam_dmux_ports; no_bam_dmux_ports++; pr_debug("USB_GADGET_XPORT_BAM_DMUX %u\n", no_bam_dmux_ports); break; case USB_GADGET_XPORT_NONE: break; default: Loading @@ -1230,6 +1257,7 @@ fail_probe: no_data_bam_ports = 0; data_hsic_ports_no = 0; no_ipa_ports = 0; no_bam_dmux_ports = 0; return ret; } Loading @@ -1238,9 +1266,9 @@ static int qdss_gport_setup(void) int port_idx; int i; pr_debug("%s: bam ports: %u data hsic ports: %u nr_qdss_ports: %u ipa_ports:%u\n", pr_debug("%s: bam ports: %u data hsic ports: %u ipa_ports:%u bam_dmux_port:%u nr_qdss_ports:%u\n", __func__, no_data_bam_ports, data_hsic_ports_no, nr_qdss_ports, no_ipa_ports); no_ipa_ports, no_bam_dmux_ports, nr_qdss_ports); if (data_hsic_ports_no) { pr_debug("%s: go to setup hsic data\n", __func__); Loading Loading @@ -1279,5 +1307,24 @@ static int qdss_gport_setup(void) } } if (no_bam_dmux_ports) { port_idx = gbam_setup(no_bam_dmux_ports); if (port_idx < 0) { pr_err("%s(): gbam_setup failed with %d\n", __func__, port_idx); return port_idx; } for (i = 0; i < no_bam_dmux_ports; i++) { if (qdss_ports[i].data_xport == USB_GADGET_XPORT_BAM_DMUX) { qdss_ports[i].data_xport_num = port_idx; pr_debug("%s: BAM-DMUX data_xport_num = %d\n", __func__, qdss_ports[i].data_xport_num); port_idx++; } } } return 0; }
drivers/usb/gadget/function/f_rmnet.c +33 −9 Original line number Diff line number Diff line Loading @@ -65,6 +65,7 @@ static unsigned int no_ctrl_smd_ports; static unsigned int no_ctrl_qti_ports; static unsigned int no_ctrl_hsic_ports; static unsigned int no_ctrl_hsuart_ports; static unsigned int no_data_bam_ports; static unsigned int no_data_bam2bam_ports; static unsigned int no_data_hsic_ports; static unsigned int no_data_hsuart_ports; Loading Loading @@ -310,16 +311,22 @@ static int rmnet_gport_setup(void) int i; u8 base; pr_debug("%s: bam2bam ports: %u data hsic ports: %u data hsuart ports: %u" pr_debug("%s: bam ports: %u bam2bam ports: %u data hsic ports: %u data hsuart ports: %u" " smd ports: %u ctrl hsic ports: %u ctrl hsuart ports: %u" " nr_rmnet_ports: %u\n", __func__, no_data_bam2bam_ports, no_data_hsic_ports, no_data_hsuart_ports, no_ctrl_smd_ports, no_ctrl_hsic_ports, no_ctrl_hsuart_ports, nr_rmnet_ports); __func__, no_data_bam_ports, no_data_bam2bam_ports, no_data_hsic_ports, no_data_hsuart_ports, no_ctrl_smd_ports, no_ctrl_hsic_ports, no_ctrl_hsuart_ports, nr_rmnet_ports); if (no_data_bam_ports) { ret = gbam_setup(no_data_bam_ports); if (ret < 0) return ret; } if (no_data_bam2bam_ports) { ret = gbam_setup(no_data_bam2bam_ports); if (ret) ret = gbam2bam_setup(no_data_bam2bam_ports); if (ret < 0) return ret; } Loading Loading @@ -429,6 +436,16 @@ static int gport_rmnet_connect(struct f_rmnet *dev, unsigned intf) gsmd_ctrl_disconnect(&dev->port, port_num); return -EINVAL; } case USB_GADGET_XPORT_BAM: ret = gbam_connect(&dev->port, port_num, dxport, src_connection_idx, dst_connection_idx); if (ret) { pr_err("%s: gbam_connect failed: err:%d\n", __func__, ret); gsmd_ctrl_disconnect(&dev->port, port_num); return ret; } break; case USB_GADGET_XPORT_BAM2BAM_IPA: src_connection_idx = usb_bam_get_connection_idx(gadget->name, IPA_P_BAM, USB_TO_PEER_PERIPHERAL, USB_BAM_DEVICE, Loading Loading @@ -482,7 +499,6 @@ static int gport_rmnet_connect(struct f_rmnet *dev, unsigned intf) break; case USB_GADGET_XPORT_NONE: break; case USB_GADGET_XPORT_BAM: default: pr_err("%s: Un-supported transport: %s\n", __func__, xport_to_str(dxport)); Loading Loading @@ -523,6 +539,7 @@ static int gport_rmnet_disconnect(struct f_rmnet *dev) port_num = rmnet_ports[dev->port_num].data_xport_num; switch (dxport) { case USB_GADGET_XPORT_BAM: case USB_GADGET_XPORT_BAM2BAM: case USB_GADGET_XPORT_BAM2BAM_IPA: gbam_disconnect(&dev->port, port_num, dxport); Loading @@ -535,7 +552,6 @@ static int gport_rmnet_disconnect(struct f_rmnet *dev) break; case USB_GADGET_XPORT_NONE: break; case USB_GADGET_XPORT_BAM: default: pr_err("%s: Un-supported transport: %s\n", __func__, xport_to_str(dxport)); Loading Loading @@ -601,6 +617,8 @@ static void frmnet_suspend(struct usb_function *f) port_num = rmnet_ports[dev->port_num].data_xport_num; switch (dxport) { case USB_GADGET_XPORT_BAM: break; case USB_GADGET_XPORT_BAM2BAM: case USB_GADGET_XPORT_BAM2BAM_IPA: if (remote_wakeup_allowed) { Loading Loading @@ -654,6 +672,8 @@ static void frmnet_resume(struct usb_function *f) port_num = rmnet_ports[dev->port_num].data_xport_num; switch (dxport) { case USB_GADGET_XPORT_BAM: break; case USB_GADGET_XPORT_BAM2BAM: case USB_GADGET_XPORT_BAM2BAM_IPA: if (remote_wakeup_allowed) { Loading Loading @@ -1327,6 +1347,7 @@ static void frmnet_cleanup(void) for (i = 0; i < nr_rmnet_ports; i++) kfree(rmnet_ports[i].port); gbam_cleanup(); nr_rmnet_ports = 0; no_ctrl_smd_ports = 0; no_ctrl_qti_ports = 0; Loading Loading @@ -1399,6 +1420,10 @@ static int frmnet_init_port(const char *ctrl_name, const char *data_name, } switch (rmnet_port->data_xport) { case USB_GADGET_XPORT_BAM: rmnet_port->data_xport_num = no_data_bam_ports; no_data_bam_ports++; break; case USB_GADGET_XPORT_BAM2BAM: case USB_GADGET_XPORT_BAM2BAM_IPA: rmnet_port->data_xport_num = no_data_bam2bam_ports; Loading @@ -1416,7 +1441,6 @@ static int frmnet_init_port(const char *ctrl_name, const char *data_name, case USB_GADGET_XPORT_ETHER: case USB_GADGET_XPORT_NONE: break; case USB_GADGET_XPORT_BAM: default: pr_err("%s: Un-supported transport: %u\n", __func__, rmnet_port->data_xport); Loading
drivers/usb/gadget/function/u_bam.c +878 −135 File changed.Preview size limit exceeded, changes collapsed. Show changes
drivers/usb/gadget/function/u_ctrl_qti.c +8 −9 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ #include <linux/poll.h> #include <linux/usb/usb_ctrl_qti.h> #include <soc/qcom/bam_dmux.h> #include "u_rmnet.h" #include "usb_gadget_xport.h" Loading Loading @@ -169,7 +170,6 @@ gqti_ctrl_notify_modem(void *gptr, u8 portno, int val) qti_ctrl_queue_notify(port); } #define BAM_DMUX_CHANNEL_ID 8 int gqti_ctrl_connect(void *gr, u8 port_num, unsigned intf, enum transport_type dxport, enum gadget_type gtype) { Loading @@ -192,22 +192,21 @@ int gqti_ctrl_connect(void *gr, u8 port_num, unsigned intf, spin_lock_irqsave(&port->lock, flags); port->gtype = gtype; if (dxport == USB_GADGET_XPORT_BAM) { if (dxport == USB_GADGET_XPORT_BAM || dxport == USB_GADGET_XPORT_BAM_DMUX) { /* * BAM-DMUX data transport is used for RMNET * BAM-DMUX data transport is used for RMNET and DPL * on some targets where IPA is not available. * Set endpoint type as BAM-DMUX and interface * id as channel number. This information is * sent to user space via EP_LOOKUP ioctl. * * The BAM data transport driver supports only * 1 BAM channel and the number is fixed so far * on all targets. This number needs to be same * as the bam_ch_ids defined in u_bam.c. * */ port->ep_type = DATA_EP_TYPE_BAM_DMUX; port->intf = BAM_DMUX_CHANNEL_ID; port->intf = (gtype == USB_GADGET_RMNET) ? BAM_DMUX_USB_RMNET_0 : BAM_DMUX_USB_DPL; port->ipa_prod_idx = 0; port->ipa_cons_idx = 0; } else { Loading
drivers/usb/gadget/function/u_rmnet.h +3 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,9 @@ enum ctrl_client { NR_CTRL_CLIENTS }; int gbam_setup(unsigned int no_bam2bam_port); int gbam_setup(unsigned int no_bam_port); int gbam2bam_setup(unsigned int no_bam2bam_port); void gbam_cleanup(void); int gbam_connect(struct grmnet *gr, u8 port_num, enum transport_type trans, u8 src_connection_idx, u8 dst_connection_idx); Loading