int diagfwd_write_complete(struct diag_request *diag_write_ptr) { unsigned char *buf = diag_write_ptr->buf; /*Determine if the write complete is for data from arm9/apps/q6 */ /* Need a context variable here instead */ if (buf == (void *)driver->buf_in_1) { driver->in_busy_1 = 0; APPEND_DEBUG('o'); queue_work(driver->diag_wq, &(driver->diag_read_smd_work)); } else if (buf == (void *)driver->buf_in_2) { driver->in_busy_2 = 0; APPEND_DEBUG('O'); queue_work(driver->diag_wq, &(driver->diag_read_smd_work)); } else if (buf == (void *)driver->buf_in_qdsp_1) { driver->in_busy_qdsp_1 = 0; APPEND_DEBUG('p'); queue_work(driver->diag_wq, &(driver->diag_read_smd_qdsp_work)); } else if (buf == (void *)driver->buf_in_qdsp_2) { driver->in_busy_qdsp_2 = 0; APPEND_DEBUG('P'); queue_work(driver->diag_wq, &(driver->diag_read_smd_qdsp_work)); } else if (driver->in_busy_dmrounter == 1) { driver->in_busy_dmrounter = 0; } #if defined(CONFIG_ARCH_MSM8X60_LTE) else if (buf == (void *)driver->buf_in_sdio) { diagfwd_write_complete_sdio(); } #endif #if defined(CONFIG_MACH_MECHA) else if (buf == (void *)driver->buf_in_mdm_1) { driver->in_busy_mdm_1 = 0; queue_work(driver->mdm_diag_workqueue, &(driver->diag_read_smd_mdm_work)); } else if (buf == (void *)driver->buf_in_mdm_2) { driver->in_busy_mdm_2 = 0; queue_work(driver->mdm_diag_workqueue, &(driver->diag_read_smd_mdm_work)); } #endif else { diagmem_free(driver, (unsigned char *)buf, POOL_TYPE_HDLC); diagmem_free(driver, (unsigned char *)diag_write_ptr, POOL_TYPE_WRITE_STRUCT); APPEND_DEBUG('q'); } return 0; }
int diagfwd_write_complete(struct diag_request *diag_write_ptr) { unsigned char *buf = diag_write_ptr->buf; int found_it = 0; int i; /* Determine if the write complete is for data from modem/apps/q6 */ /* Need a context variable here instead */ for (i = 0; i < NUM_SMD_DATA_CHANNELS; i++) { struct diag_smd_info *data = &(driver->smd_data[i]); if (buf == (void *)data->buf_in_1) { data->in_busy_1 = 0; queue_work(driver->diag_wq, &(data->diag_read_smd_work)); found_it = 1; break; } else if (buf == (void *)data->buf_in_2) { data->in_busy_2 = 0; queue_work(driver->diag_wq, &(data->diag_read_smd_work)); found_it = 1; break; } } #ifdef CONFIG_DIAG_SDIO_PIPE if (!found_it) { if (buf == (void *)driver->buf_in_sdio) { if (machine_is_msm8x60_fusion() || machine_is_msm8x60_fusn_ffa()) diagfwd_write_complete_sdio(); else pr_err("diag: Incorrect buffer pointer while WRITE"); found_it = 1; } } #endif if (!found_it) { diagmem_free(driver, (unsigned char *)buf, POOL_TYPE_HDLC); diagmem_free(driver, (unsigned char *)diag_write_ptr, POOL_TYPE_WRITE_STRUCT); } return 0; }
int diagfwd_write_complete(struct diag_request *diag_write_ptr) { unsigned char *buf = diag_write_ptr->buf; /*Determine if the write complete is for data from modem/apps/q6 */ /* Need a context variable here instead */ if (buf == (void *)driver->buf_in_1) { driver->in_busy_1 = 0; APPEND_DEBUG('o'); queue_work(driver->diag_wq, &(driver->diag_read_smd_work)); } else if (buf == (void *)driver->buf_in_2) { driver->in_busy_2 = 0; APPEND_DEBUG('O'); queue_work(driver->diag_wq, &(driver->diag_read_smd_work)); } else if (buf == (void *)driver->buf_in_qdsp_1) { driver->in_busy_qdsp_1 = 0; APPEND_DEBUG('p'); queue_work(driver->diag_wq, &(driver->diag_read_smd_qdsp_work)); } else if (buf == (void *)driver->buf_in_qdsp_2) { driver->in_busy_qdsp_2 = 0; APPEND_DEBUG('P'); queue_work(driver->diag_wq, &(driver->diag_read_smd_qdsp_work)); } else if (buf == (void *)driver->buf_in_wcnss) { driver->in_busy_wcnss = 0; APPEND_DEBUG('R'); queue_work(driver->diag_wq, &(driver->diag_read_smd_wcnss_work)); } #ifdef CONFIG_DIAG_SDIO_PIPE else if (buf == (void *)driver->buf_in_sdio) if (machine_is_msm8x60_fusion() || machine_is_msm8x60_fusn_ffa()) diagfwd_write_complete_sdio(); else pr_err("diag: Incorrect buffer pointer while WRITE"); #endif else { diagmem_free(driver, (unsigned char *)buf, POOL_TYPE_HDLC); diagmem_free(driver, (unsigned char *)diag_write_ptr, POOL_TYPE_WRITE_STRUCT); APPEND_DEBUG('q'); } return 0; }