Loading drivers/usb/gadget/function/f_qc_rndis.c +2 −6 Original line number Diff line number Diff line Loading @@ -984,7 +984,8 @@ rndis_qc_bind(struct usb_configuration *c, struct usb_function *f) rndis->port.open = rndis_qc_open; rndis->port.close = rndis_qc_close; status = rndis_register(rndis_qc_response_available, rndis); status = rndis_register(rndis_qc_response_available, rndis, bam_data_flow_control_enable); if (status < 0) goto fail; rndis->config = status; Loading Loading @@ -1082,11 +1083,6 @@ rndis_qc_unbind(struct usb_configuration *c, struct usb_function *f) spin_unlock_irqrestore(&rndis_lock, flags); } bool is_rndis_ipa_supported(void) { return rndis_ipa_supported; } void rndis_ipa_reset_trigger(void) { struct f_rndis_qc *rndis; Loading drivers/usb/gadget/function/f_rndis.c +2 −2 Original line number Diff line number Diff line Loading @@ -1010,7 +1010,7 @@ rndis_bind_config_vendor(struct usb_configuration *c, u8 ethaddr[ETH_ALEN], rndis->port.func.setup = rndis_setup; rndis->port.func.disable = rndis_disable; status = rndis_register(rndis_response_available, rndis); status = rndis_register(rndis_response_available, rndis, NULL); if (status < 0) { kfree(rndis); return status; Loading Loading @@ -1186,7 +1186,7 @@ static struct usb_function *rndis_alloc(struct usb_function_instance *fi) rndis->port.func.disable = rndis_disable; rndis->port.func.free_func = rndis_free; status = rndis_register(rndis_response_available, rndis); status = rndis_register(rndis_response_available, rndis, NULL); if (status < 0) { kfree(rndis); return ERR_PTR(status); Loading drivers/usb/gadget/function/rndis.c +29 −22 Original line number Diff line number Diff line Loading @@ -859,16 +859,17 @@ int rndis_msg_parser(u8 configNr, u8 *buf) pr_debug("%s: RNDIS_MSG_HALT\n", __func__); if (!is_rndis_ipa_supported()) { if (params->state == RNDIS_DATA_INITIALIZED) { if (params->flow_ctrl_enable) { params->flow_ctrl_enable(true); } else { if (params->dev) { netif_carrier_off(params->dev); netif_stop_queue(params->dev); } } else { if (params->state == RNDIS_DATA_INITIALIZED) u_bam_data_stop_rndis_ipa(); } params->state = RNDIS_UNINITIALIZED; } return 0; case RNDIS_MSG_QUERY: Loading Loading @@ -910,7 +911,8 @@ int rndis_msg_parser(u8 configNr, u8 *buf) } EXPORT_SYMBOL_GPL(rndis_msg_parser); int rndis_register(void (*resp_avail)(void *v), void *v) int rndis_register(void (*resp_avail)(void *v), void *v, void (*flow_ctrl_enable)(bool enable)) { u8 i; Loading @@ -921,6 +923,8 @@ int rndis_register(void (*resp_avail)(void *v), void *v) if (!rndis_per_dev_params[i].used) { rndis_per_dev_params[i].used = 1; rndis_per_dev_params[i].resp_avail = resp_avail; rndis_per_dev_params[i].flow_ctrl_enable = flow_ctrl_enable; rndis_per_dev_params[i].v = v; rndis_per_dev_params[i].max_pkt_per_xfer = 1; rndis_per_dev_params[i].pkt_alignment_factor = 0; Loading @@ -940,6 +944,7 @@ void rndis_deregister(int configNr) if (configNr >= RNDIS_MAX_CONFIGS) return; rndis_per_dev_params[configNr].used = 0; rndis_per_dev_params[configNr].flow_ctrl_enable = NULL; } EXPORT_SYMBOL_GPL(rndis_deregister); Loading Loading @@ -1027,23 +1032,25 @@ void rndis_flow_control(u8 confignr, bool enable_flow_control) params = &rndis_per_dev_params[confignr]; pr_debug("%s(): params->state:%x\n", __func__, params->state); if (enable_flow_control) { if (is_rndis_ipa_supported()) { if (params->state == RNDIS_DATA_INITIALIZED) u_bam_data_stop_rndis_ipa(); if (params->state == RNDIS_DATA_INITIALIZED) { if (params->flow_ctrl_enable) { params->flow_ctrl_enable(enable_flow_control); } else { netif_carrier_off(params->dev); netif_stop_queue(params->dev); } } params->state = RNDIS_INITIALIZED; } else { if (is_rndis_ipa_supported()) { if (params->state != RNDIS_DATA_INITIALIZED) u_bam_data_start_rndis_ipa(); if (params->state != RNDIS_DATA_INITIALIZED) { if (params->flow_ctrl_enable) { params->flow_ctrl_enable(enable_flow_control); } else { netif_carrier_on(params->dev); if (netif_running(params->dev)) netif_wake_queue(params->dev); } } params->state = RNDIS_DATA_INITIALIZED; } } Loading drivers/usb/gadget/function/rndis.h +4 −2 Original line number Diff line number Diff line Loading @@ -194,6 +194,8 @@ typedef struct rndis_params u8 pkt_alignment_factor; const char *vendorDescr; void (*resp_avail)(void *v); void (*flow_ctrl_enable)(bool enable); void *v; struct list_head resp_queue; spinlock_t lock; Loading @@ -205,7 +207,8 @@ typedef struct rndis_params /* RNDIS Message parser and other useless functions */ int rndis_msg_parser (u8 configNr, u8 *buf); int rndis_register(void (*resp_avail)(void *v), void *v); int rndis_register(void (*resp_avail)(void *v), void *v, void (*flow_ctrl_enable)(bool enable)); void rndis_deregister (int configNr); int rndis_set_param_dev (u8 configNr, struct net_device *dev, u16 *cdc_filter); Loading @@ -226,7 +229,6 @@ int rndis_signal_connect (int configNr); int rndis_signal_disconnect (int configNr); int rndis_state (int configNr); extern void rndis_set_host_mac (int configNr, const u8 *addr); extern bool is_rndis_ipa_supported(void); void rndis_flow_control(u8 confignr, bool enable_flow_control); #endif /* _LINUX_RNDIS_H */ drivers/usb/gadget/function/u_bam_data.c +8 −0 Original line number Diff line number Diff line Loading @@ -1282,6 +1282,14 @@ void u_bam_data_stop_rndis_ipa(void) } } void bam_data_flow_control_enable(bool enable) { if (enable) u_bam_data_stop_rndis_ipa(); else u_bam_data_start_rndis_ipa(); } static void bam_data_free_reqs(struct bam_data_port *port) { Loading Loading
drivers/usb/gadget/function/f_qc_rndis.c +2 −6 Original line number Diff line number Diff line Loading @@ -984,7 +984,8 @@ rndis_qc_bind(struct usb_configuration *c, struct usb_function *f) rndis->port.open = rndis_qc_open; rndis->port.close = rndis_qc_close; status = rndis_register(rndis_qc_response_available, rndis); status = rndis_register(rndis_qc_response_available, rndis, bam_data_flow_control_enable); if (status < 0) goto fail; rndis->config = status; Loading Loading @@ -1082,11 +1083,6 @@ rndis_qc_unbind(struct usb_configuration *c, struct usb_function *f) spin_unlock_irqrestore(&rndis_lock, flags); } bool is_rndis_ipa_supported(void) { return rndis_ipa_supported; } void rndis_ipa_reset_trigger(void) { struct f_rndis_qc *rndis; Loading
drivers/usb/gadget/function/f_rndis.c +2 −2 Original line number Diff line number Diff line Loading @@ -1010,7 +1010,7 @@ rndis_bind_config_vendor(struct usb_configuration *c, u8 ethaddr[ETH_ALEN], rndis->port.func.setup = rndis_setup; rndis->port.func.disable = rndis_disable; status = rndis_register(rndis_response_available, rndis); status = rndis_register(rndis_response_available, rndis, NULL); if (status < 0) { kfree(rndis); return status; Loading Loading @@ -1186,7 +1186,7 @@ static struct usb_function *rndis_alloc(struct usb_function_instance *fi) rndis->port.func.disable = rndis_disable; rndis->port.func.free_func = rndis_free; status = rndis_register(rndis_response_available, rndis); status = rndis_register(rndis_response_available, rndis, NULL); if (status < 0) { kfree(rndis); return ERR_PTR(status); Loading
drivers/usb/gadget/function/rndis.c +29 −22 Original line number Diff line number Diff line Loading @@ -859,16 +859,17 @@ int rndis_msg_parser(u8 configNr, u8 *buf) pr_debug("%s: RNDIS_MSG_HALT\n", __func__); if (!is_rndis_ipa_supported()) { if (params->state == RNDIS_DATA_INITIALIZED) { if (params->flow_ctrl_enable) { params->flow_ctrl_enable(true); } else { if (params->dev) { netif_carrier_off(params->dev); netif_stop_queue(params->dev); } } else { if (params->state == RNDIS_DATA_INITIALIZED) u_bam_data_stop_rndis_ipa(); } params->state = RNDIS_UNINITIALIZED; } return 0; case RNDIS_MSG_QUERY: Loading Loading @@ -910,7 +911,8 @@ int rndis_msg_parser(u8 configNr, u8 *buf) } EXPORT_SYMBOL_GPL(rndis_msg_parser); int rndis_register(void (*resp_avail)(void *v), void *v) int rndis_register(void (*resp_avail)(void *v), void *v, void (*flow_ctrl_enable)(bool enable)) { u8 i; Loading @@ -921,6 +923,8 @@ int rndis_register(void (*resp_avail)(void *v), void *v) if (!rndis_per_dev_params[i].used) { rndis_per_dev_params[i].used = 1; rndis_per_dev_params[i].resp_avail = resp_avail; rndis_per_dev_params[i].flow_ctrl_enable = flow_ctrl_enable; rndis_per_dev_params[i].v = v; rndis_per_dev_params[i].max_pkt_per_xfer = 1; rndis_per_dev_params[i].pkt_alignment_factor = 0; Loading @@ -940,6 +944,7 @@ void rndis_deregister(int configNr) if (configNr >= RNDIS_MAX_CONFIGS) return; rndis_per_dev_params[configNr].used = 0; rndis_per_dev_params[configNr].flow_ctrl_enable = NULL; } EXPORT_SYMBOL_GPL(rndis_deregister); Loading Loading @@ -1027,23 +1032,25 @@ void rndis_flow_control(u8 confignr, bool enable_flow_control) params = &rndis_per_dev_params[confignr]; pr_debug("%s(): params->state:%x\n", __func__, params->state); if (enable_flow_control) { if (is_rndis_ipa_supported()) { if (params->state == RNDIS_DATA_INITIALIZED) u_bam_data_stop_rndis_ipa(); if (params->state == RNDIS_DATA_INITIALIZED) { if (params->flow_ctrl_enable) { params->flow_ctrl_enable(enable_flow_control); } else { netif_carrier_off(params->dev); netif_stop_queue(params->dev); } } params->state = RNDIS_INITIALIZED; } else { if (is_rndis_ipa_supported()) { if (params->state != RNDIS_DATA_INITIALIZED) u_bam_data_start_rndis_ipa(); if (params->state != RNDIS_DATA_INITIALIZED) { if (params->flow_ctrl_enable) { params->flow_ctrl_enable(enable_flow_control); } else { netif_carrier_on(params->dev); if (netif_running(params->dev)) netif_wake_queue(params->dev); } } params->state = RNDIS_DATA_INITIALIZED; } } Loading
drivers/usb/gadget/function/rndis.h +4 −2 Original line number Diff line number Diff line Loading @@ -194,6 +194,8 @@ typedef struct rndis_params u8 pkt_alignment_factor; const char *vendorDescr; void (*resp_avail)(void *v); void (*flow_ctrl_enable)(bool enable); void *v; struct list_head resp_queue; spinlock_t lock; Loading @@ -205,7 +207,8 @@ typedef struct rndis_params /* RNDIS Message parser and other useless functions */ int rndis_msg_parser (u8 configNr, u8 *buf); int rndis_register(void (*resp_avail)(void *v), void *v); int rndis_register(void (*resp_avail)(void *v), void *v, void (*flow_ctrl_enable)(bool enable)); void rndis_deregister (int configNr); int rndis_set_param_dev (u8 configNr, struct net_device *dev, u16 *cdc_filter); Loading @@ -226,7 +229,6 @@ int rndis_signal_connect (int configNr); int rndis_signal_disconnect (int configNr); int rndis_state (int configNr); extern void rndis_set_host_mac (int configNr, const u8 *addr); extern bool is_rndis_ipa_supported(void); void rndis_flow_control(u8 confignr, bool enable_flow_control); #endif /* _LINUX_RNDIS_H */
drivers/usb/gadget/function/u_bam_data.c +8 −0 Original line number Diff line number Diff line Loading @@ -1282,6 +1282,14 @@ void u_bam_data_stop_rndis_ipa(void) } } void bam_data_flow_control_enable(bool enable) { if (enable) u_bam_data_stop_rndis_ipa(); else u_bam_data_start_rndis_ipa(); } static void bam_data_free_reqs(struct bam_data_port *port) { Loading