void diag_usb_read_complete_hsic_fn(struct work_struct *w) { struct diag_bridge_dev *bridge_struct = container_of(w, struct diag_bridge_dev, usb_read_complete_work); diagfwd_read_complete_bridge(diag_bridge[bridge_struct->id].usb_read_ptr); }
static int diagfwd_read_complete_bridge(struct diag_request *diag_read_ptr) { driver->in_busy_hsic_read_on_device = 0; driver->read_len_mdm = diag_read_ptr->actual; if (driver->diag_smux_enabled) { diagfwd_read_complete_smux(); return 0; } if (!driver->hsic_ch) { pr_err("DIAG in %s: driver->hsic_ch == 0\n", __func__); return 0; } #if DIAG_XPST && defined(CONFIG_DIAG_BRIDGE_CODE) if (!driver->in_busy_hsic_write && driver->usb_buf_mdm_out && (driver->read_len_mdm > 0) && !driver->nohdlc) { #else if (!driver->in_busy_hsic_write && driver->usb_buf_mdm_out && (driver->read_len_mdm > 0)) { #endif int err; driver->in_busy_hsic_write = 1; err = diag_bridge_write(driver->usb_buf_mdm_out, driver->read_len_mdm); if (err) { pr_err_ratelimited("diag: mdm data on hsic write err: %d\n", err); if ((-ENODEV) != err) driver->in_busy_hsic_write = 0; } } if (!driver->in_busy_hsic_write) queue_work(driver->diag_bridge_wq, &driver->diag_read_mdm_work); return 0; } static void diagfwd_bridge_notifier(void *priv, unsigned event, struct diag_request *d_req) { switch (event) { case USB_DIAG_CONNECT: diagfwd_connect_bridge(1); break; case USB_DIAG_DISCONNECT: queue_work(driver->diag_bridge_wq, &driver->diag_disconnect_work); break; case USB_DIAG_READ_DONE: queue_work(driver->diag_bridge_wq, &driver->diag_usb_read_complete_work); break; case USB_DIAG_WRITE_DONE: if (driver->hsic_device_enabled) diagfwd_write_complete_hsic(d_req); else if (driver->diag_smux_enabled) diagfwd_write_complete_smux(); break; default: pr_err("diag: in %s: Unknown event from USB diag:%u\n", __func__, event); break; } } static void diag_usb_read_complete_fn(struct work_struct *w) { diagfwd_read_complete_bridge(driver->usb_read_mdm_ptr); }
void diag_usb_read_complete_hsic_fn(struct work_struct *w) { diagfwd_read_complete_bridge(diag_bridge[HSIC].usb_read_ptr); }
static void diag_usb_read_complete_fn(struct work_struct *w) { diagfwd_read_complete_bridge(driver->usb_read_mdm_ptr); }
void diag_usb_read_complete_smux_fn(struct work_struct *w) { diagfwd_read_complete_bridge(diag_bridge[SMUX].usb_read_ptr); }