Loading drivers/platform/msm/usb_bam.c +10 −0 Original line number Diff line number Diff line Loading @@ -3195,6 +3195,16 @@ int usb_bam_get_qdss_idx(u8 num) } EXPORT_SYMBOL(usb_bam_get_qdss_idx); bool usb_bam_get_prod_granted(u8 idx) { struct usb_bam_pipe_connect *pipe_connect = &usb_bam_connections[idx]; enum usb_bam cur_bam = pipe_connect->bam_type; return (info[cur_bam].cur_prod_state == IPA_RM_RESOURCE_GRANTED); } EXPORT_SYMBOL(usb_bam_get_prod_granted); void usb_bam_set_qdss_core(const char *qdss_core) { strlcpy(ctx.qdss_core_name, qdss_core, USB_BAM_MAX_STR_LEN); Loading drivers/usb/gadget/u_bam.c +13 −2 Original line number Diff line number Diff line Loading @@ -455,7 +455,8 @@ static void gbam_data_write_tobam(struct work_struct *w) return; } while (d->pending_with_bam < bam_pending_limit) { while (d->pending_with_bam < bam_pending_limit && usb_bam_get_prod_granted(d->dst_connection_idx)) { skb = __skb_dequeue(&d->rx_skb_q); if (!skb) break; Loading Loading @@ -568,8 +569,14 @@ gbam_epout_complete(struct usb_ep *ep, struct usb_request *req) } spin_lock(&port->port_lock_ul); if (queue) { __skb_queue_tail(&d->rx_skb_q, skb); if (!usb_bam_get_prod_granted(d->dst_connection_idx)) { list_add_tail(&req->list, &d->rx_idle); spin_unlock(&port->port_lock_ul); return; } else queue_work(gbam_wq, &d->write_tobam_w); } Loading Loading @@ -686,6 +693,10 @@ static void gbam_start_rx(struct gbam_port *port) break; } } /* If this function was called from resume, send pending skbs to BAM */ queue_work(gbam_wq, &d->write_tobam_w); spin_unlock_irqrestore(&port->port_lock_ul, flags); } Loading drivers/usb/gadget/u_bam_data.c +11 −2 Original line number Diff line number Diff line Loading @@ -255,6 +255,9 @@ static void bam_data_start_rx(struct bam_data_port *port) } } /* If this function was called from resume, send pending skbs to BAM */ queue_work(bam_data_wq, &d->write_tobam_w); spin_unlock_irqrestore(&port->port_lock_ul, flags); } Loading Loading @@ -288,6 +291,11 @@ static void bam_data_epout_complete(struct usb_ep *ep, struct usb_request *req) spin_lock(&port->port_lock_ul); if (queue) { __skb_queue_tail(&d->rx_skb_q, skb); if (!usb_bam_get_prod_granted(d->dst_connection_idx)) { list_add_tail(&req->list, &d->rx_idle); spin_unlock(&port->port_lock_ul); return; } else queue_work(bam_data_wq, &d->write_tobam_w); } Loading Loading @@ -373,7 +381,8 @@ static void bam_data_write_toipa(struct work_struct *w) return; } while (d->pending_with_bam < BAM_PENDING_LIMIT) { while (d->pending_with_bam < BAM_PENDING_LIMIT && usb_bam_get_prod_granted(d->dst_connection_idx)) { skb = __skb_dequeue(&d->rx_skb_q); if (!skb) break; Loading include/linux/usb_bam.h +14 −0 Original line number Diff line number Diff line Loading @@ -388,6 +388,14 @@ int usb_bam_get_connection_idx(const char *name, enum peer_bam client, * @return 0 on success, negative value on error */ int usb_bam_get_pipe_type(u8 idx, enum usb_bam_pipe_type *type); /** * Indicates whether USB producer is granted to IPA resource manager. * * @return true when producer granted, false when prodcuer is released. */ bool usb_bam_get_prod_granted(u8 idx); #else static inline int usb_bam_connect(u8 idx, u32 *bam_pipe_idx) { Loading Loading @@ -487,5 +495,11 @@ static inline int usb_bam_get_pipe_type(u8 idx, enum usb_bam_pipe_type *type) { return -ENODEV; } static inline bool usb_bam_get_prod_granted(u8 idx) { return false; } #endif #endif /* _USB_BAM_H_ */ Loading
drivers/platform/msm/usb_bam.c +10 −0 Original line number Diff line number Diff line Loading @@ -3195,6 +3195,16 @@ int usb_bam_get_qdss_idx(u8 num) } EXPORT_SYMBOL(usb_bam_get_qdss_idx); bool usb_bam_get_prod_granted(u8 idx) { struct usb_bam_pipe_connect *pipe_connect = &usb_bam_connections[idx]; enum usb_bam cur_bam = pipe_connect->bam_type; return (info[cur_bam].cur_prod_state == IPA_RM_RESOURCE_GRANTED); } EXPORT_SYMBOL(usb_bam_get_prod_granted); void usb_bam_set_qdss_core(const char *qdss_core) { strlcpy(ctx.qdss_core_name, qdss_core, USB_BAM_MAX_STR_LEN); Loading
drivers/usb/gadget/u_bam.c +13 −2 Original line number Diff line number Diff line Loading @@ -455,7 +455,8 @@ static void gbam_data_write_tobam(struct work_struct *w) return; } while (d->pending_with_bam < bam_pending_limit) { while (d->pending_with_bam < bam_pending_limit && usb_bam_get_prod_granted(d->dst_connection_idx)) { skb = __skb_dequeue(&d->rx_skb_q); if (!skb) break; Loading Loading @@ -568,8 +569,14 @@ gbam_epout_complete(struct usb_ep *ep, struct usb_request *req) } spin_lock(&port->port_lock_ul); if (queue) { __skb_queue_tail(&d->rx_skb_q, skb); if (!usb_bam_get_prod_granted(d->dst_connection_idx)) { list_add_tail(&req->list, &d->rx_idle); spin_unlock(&port->port_lock_ul); return; } else queue_work(gbam_wq, &d->write_tobam_w); } Loading Loading @@ -686,6 +693,10 @@ static void gbam_start_rx(struct gbam_port *port) break; } } /* If this function was called from resume, send pending skbs to BAM */ queue_work(gbam_wq, &d->write_tobam_w); spin_unlock_irqrestore(&port->port_lock_ul, flags); } Loading
drivers/usb/gadget/u_bam_data.c +11 −2 Original line number Diff line number Diff line Loading @@ -255,6 +255,9 @@ static void bam_data_start_rx(struct bam_data_port *port) } } /* If this function was called from resume, send pending skbs to BAM */ queue_work(bam_data_wq, &d->write_tobam_w); spin_unlock_irqrestore(&port->port_lock_ul, flags); } Loading Loading @@ -288,6 +291,11 @@ static void bam_data_epout_complete(struct usb_ep *ep, struct usb_request *req) spin_lock(&port->port_lock_ul); if (queue) { __skb_queue_tail(&d->rx_skb_q, skb); if (!usb_bam_get_prod_granted(d->dst_connection_idx)) { list_add_tail(&req->list, &d->rx_idle); spin_unlock(&port->port_lock_ul); return; } else queue_work(bam_data_wq, &d->write_tobam_w); } Loading Loading @@ -373,7 +381,8 @@ static void bam_data_write_toipa(struct work_struct *w) return; } while (d->pending_with_bam < BAM_PENDING_LIMIT) { while (d->pending_with_bam < BAM_PENDING_LIMIT && usb_bam_get_prod_granted(d->dst_connection_idx)) { skb = __skb_dequeue(&d->rx_skb_q); if (!skb) break; Loading
include/linux/usb_bam.h +14 −0 Original line number Diff line number Diff line Loading @@ -388,6 +388,14 @@ int usb_bam_get_connection_idx(const char *name, enum peer_bam client, * @return 0 on success, negative value on error */ int usb_bam_get_pipe_type(u8 idx, enum usb_bam_pipe_type *type); /** * Indicates whether USB producer is granted to IPA resource manager. * * @return true when producer granted, false when prodcuer is released. */ bool usb_bam_get_prod_granted(u8 idx); #else static inline int usb_bam_connect(u8 idx, u32 *bam_pipe_idx) { Loading Loading @@ -487,5 +495,11 @@ static inline int usb_bam_get_pipe_type(u8 idx, enum usb_bam_pipe_type *type) { return -ENODEV; } static inline bool usb_bam_get_prod_granted(u8 idx) { return false; } #endif #endif /* _USB_BAM_H_ */