int diagfwd_init(void) { diag_debug_buf_idx = 0; driver->read_len_legacy = 0; if (driver->buf_in_1 == NULL) driver->buf_in_1 = kzalloc(IN_BUF_SIZE, GFP_KERNEL); if (driver->buf_in_1 == NULL) goto err; if (driver->buf_in_2 == NULL) driver->buf_in_2 = kzalloc(IN_BUF_SIZE, GFP_KERNEL); if (driver->buf_in_2 == NULL) goto err; if (driver->buf_in_qdsp_1 == NULL) driver->buf_in_qdsp_1 = kzalloc(IN_BUF_SIZE, GFP_KERNEL); if (driver->buf_in_qdsp_1 == NULL) goto err; if (driver->buf_in_qdsp_2 == NULL) driver->buf_in_qdsp_2 = kzalloc(IN_BUF_SIZE, GFP_KERNEL); if (driver->buf_in_qdsp_2 == NULL) goto err; if (driver->usb_buf_out == NULL && (driver->usb_buf_out = kzalloc(USB_MAX_OUT_BUF, GFP_KERNEL)) == NULL) goto err; if (driver->hdlc_buf == NULL && (driver->hdlc_buf = kzalloc(HDLC_MAX, GFP_KERNEL)) == NULL) goto err; if (driver->msg_masks == NULL && (driver->msg_masks = kzalloc(MSG_MASK_SIZE, GFP_KERNEL)) == NULL) goto err; if (driver->log_masks == NULL && (driver->log_masks = kzalloc(LOG_MASK_SIZE, GFP_KERNEL)) == NULL) goto err; driver->log_masks_length = 8*MAX_EQUIP_ID; if (driver->event_masks == NULL && (driver->event_masks = kzalloc(EVENT_MASK_SIZE, GFP_KERNEL)) == NULL) goto err; if (driver->client_map == NULL && (driver->client_map = kzalloc ((driver->num_clients) * sizeof(struct diag_client_map), GFP_KERNEL)) == NULL) goto err; #if defined(CONFIG_MACH_MECHA) //|| defined(CONFIG_ARCH_MSM8X60_LTE) if (driver->buf_in_mdm_1 == NULL) driver->buf_in_mdm_1 = kzalloc(IN_BUF_SIZE, GFP_KERNEL); if (driver->buf_in_mdm_1 == NULL) goto err; if (driver->buf_in_mdm_2 == NULL) driver->buf_in_mdm_2 = kzalloc(IN_BUF_SIZE, GFP_KERNEL); if (driver->buf_in_mdm_2 == NULL) goto err; #endif #if defined(CONFIG_MACH_MECHA) || defined(CONFIG_ARCH_MSM8X60_LTE) if (driver->mdmclient_map == NULL && (driver->mdmclient_map = kzalloc ((driver->num_mdmclients) * sizeof(struct diag_client_map), GFP_KERNEL)) == NULL) goto err; #endif if (driver->buf_tbl == NULL) driver->buf_tbl = kzalloc(buf_tbl_size * sizeof(struct diag_write_device), GFP_KERNEL); if (driver->buf_tbl == NULL) goto err; #if 0//defined(CONFIG_MACH_MECHA) || defined(CONFIG_ARCH_MSM8X60_LTE) if (driver->mdmbuf_tbl == NULL) driver->mdmbuf_tbl = kzalloc(buf_tbl_size * sizeof(struct diag_write_device), GFP_KERNEL); if (driver->mdmbuf_tbl == NULL) goto err; #endif if (driver->data_ready == NULL && (driver->data_ready = kzalloc(driver->num_clients * sizeof(int) , GFP_KERNEL)) == NULL) goto err; #if defined(CONFIG_MACH_MECHA) || defined(CONFIG_ARCH_MSM8X60_LTE) if (driver->mdmdata_ready == NULL && (driver->mdmdata_ready = kzalloc(driver->num_mdmclients * sizeof(struct diag_client_map), GFP_KERNEL)) == NULL) goto err; #endif if (driver->table == NULL && (driver->table = kzalloc(diag_max_registration* sizeof(struct diag_master_table), GFP_KERNEL)) == NULL) goto err; if (driver->write_ptr_1 == NULL) driver->write_ptr_1 = kzalloc( sizeof(struct diag_request), GFP_KERNEL); if (driver->write_ptr_1 == NULL) goto err; if (driver->write_ptr_2 == NULL) driver->write_ptr_2 = kzalloc( sizeof(struct diag_request), GFP_KERNEL); if (driver->write_ptr_2 == NULL) goto err; if (driver->write_ptr_qdsp_1 == NULL) driver->write_ptr_qdsp_1 = kzalloc( sizeof(struct diag_request), GFP_KERNEL); if (driver->write_ptr_qdsp_1 == NULL) goto err; if (driver->write_ptr_qdsp_2 == NULL) driver->write_ptr_qdsp_2 = kzalloc( sizeof(struct diag_request), GFP_KERNEL); if (driver->write_ptr_qdsp_2 == NULL) goto err; #if defined(CONFIG_MACH_MECHA) //|| defined(CONFIG_ARCH_MSM8X60_LTE) if (driver->write_ptr_mdm_1 == NULL) driver->write_ptr_mdm_1 = kzalloc( sizeof(struct diag_request), GFP_KERNEL); if (driver->write_ptr_mdm_1 == NULL) goto err; if (driver->write_ptr_mdm_2 == NULL) driver->write_ptr_mdm_2 = kzalloc( sizeof(struct diag_request), GFP_KERNEL); if (driver->write_ptr_mdm_2 == NULL) goto err; #endif if (driver->usb_read_ptr == NULL) driver->usb_read_ptr = kzalloc( sizeof(struct diag_request), GFP_KERNEL); if (driver->usb_read_ptr == NULL) goto err; if (driver->pkt_buf == NULL && (driver->pkt_buf = kzalloc(PKT_SIZE, GFP_KERNEL)) == NULL) goto err; #ifdef CONFIG_DIAG_NO_MODEM if (driver->apps_rsp_buf == NULL) driver->apps_rsp_buf = kzalloc(150, GFP_KERNEL); if (driver->apps_rsp_buf == NULL) goto err; #endif driver->diag_wq = create_singlethread_workqueue("diag_wq"); #ifdef CONFIG_DIAG_OVER_USB INIT_WORK(&(driver->diag_proc_hdlc_work), diag_process_hdlc_fn); INIT_WORK(&(driver->diag_read_work), diag_read_work_fn); diag_setup(); #ifndef CONFIG_ARCH_MSM8X60_LTE driver->legacy_ch = usb_diag_open(DIAG_LEGACY, driver, diag_usb_legacy_notifier); if (IS_ERR(driver->legacy_ch)) { DIAGFWD_ERR("Unable to open USB diag legacy channel\n"); goto err; } #endif #endif mutex_init(&driver->smd_lock); #ifdef CONFIG_ARCH_MSM8X60_LTE #if defined(CONFIG_USB_ANDROID_LTE_DIAG) diag_ch_sdio = 0; diagfwd_sdio_init(DIAG_MDM); #else diag_ch_sdio = 1; diagfwd_sdio_init(DIAG_LEGACY); #endif #endif platform_driver_register(&msm_smd_ch1_driver); DIAGFWD_INFO("\n diag_debug_buf %p %p\n", diag_debug_buf, &diag_debug_buf); DIAGFWD_INFO("\n diag_debug_buf_idx %p\n", &diag_debug_buf_idx); #if defined(CONFIG_MACH_MECHA) if (sdio_diag_init_enable) sdio_diag_init(); #endif return diag_ch_sdio; err: DIAGFWD_INFO("\n Could not initialize diag buffers\n"); kfree(driver->buf_in_1); kfree(driver->buf_in_2); kfree(driver->buf_in_qdsp_1); kfree(driver->buf_in_qdsp_2); kfree(driver->usb_buf_out); kfree(driver->hdlc_buf); kfree(driver->msg_masks); kfree(driver->log_masks); kfree(driver->event_masks); kfree(driver->client_map); kfree(driver->buf_tbl); kfree(driver->data_ready); #if defined(CONFIG_MACH_MECHA) //|| defined(CONFIG_ARCH_MSM8X60_LTE) kfree(driver->mdmclient_map); //kfree(driver->mdmbuf_tbl); kfree(driver->mdmdata_ready); #endif kfree(driver->table); kfree(driver->pkt_buf); kfree(driver->write_ptr_1); kfree(driver->write_ptr_2); kfree(driver->write_ptr_qdsp_1); kfree(driver->write_ptr_qdsp_2); #if defined(CONFIG_MACH_MECHA) //|| defined(CONFIG_ARCH_MSM8X60_LTE) kfree(driver->write_ptr_mdm_1); kfree(driver->write_ptr_mdm_2); #endif kfree(driver->usb_read_ptr); #ifdef CONFIG_DIAG_NO_MODEM kfree(driver->apps_rsp_buf); #endif if (driver->diag_wq) destroy_workqueue(driver->diag_wq); return 0; }
void diagfwd_init(void) { diag_debug_buf_idx = 0; if (driver->usb_buf_out == NULL && (driver->usb_buf_out = kzalloc(USB_MAX_OUT_BUF, GFP_KERNEL)) == NULL) goto err; if (driver->hdlc_buf == NULL && (driver->hdlc_buf = kzalloc(HDLC_MAX, GFP_KERNEL)) == NULL) goto err; if (driver->msg_masks == NULL && (driver->msg_masks = kzalloc(MSG_MASK_SIZE, GFP_KERNEL)) == NULL) goto err; if (driver->log_masks == NULL && (driver->log_masks = kzalloc(LOG_MASK_SIZE, GFP_KERNEL)) == NULL) goto err; if (driver->event_masks == NULL && (driver->event_masks = kzalloc(EVENT_MASK_SIZE, GFP_KERNEL)) == NULL) goto err; if (driver->client_map == NULL && (driver->client_map = kzalloc ((driver->num_clients) * sizeof(struct diag_client_map), GFP_KERNEL)) == NULL) goto err; if (driver->mdmclient_map == NULL && (driver->mdmclient_map = kzalloc ((driver->num_mdmclients) * sizeof(struct diag_client_map), GFP_KERNEL)) == NULL) goto err; if (driver->buf_tbl == NULL) driver->buf_tbl = kzalloc(buf_tbl_size * sizeof(struct diag_write_device), GFP_KERNEL); if (driver->buf_tbl == NULL) goto err; if (driver->mdmbuf_tbl == NULL) driver->mdmbuf_tbl = kzalloc(buf_tbl_size * sizeof(struct diag_write_device), GFP_KERNEL); if (driver->mdmbuf_tbl == NULL) goto err; if (driver->data_ready == NULL && (driver->data_ready = kzalloc(driver->num_clients * sizeof(struct diag_client_map), GFP_KERNEL)) == NULL) goto err; if (driver->mdmdata_ready == NULL && (driver->mdmdata_ready = kzalloc(driver->num_mdmclients * sizeof(struct diag_client_map), GFP_KERNEL)) == NULL) goto err; if (driver->table == NULL && (driver->table = kzalloc(diag_max_registration* sizeof(struct diag_master_table), GFP_KERNEL)) == NULL) goto err; if (driver->usb_write_ptr_1 == NULL) driver->usb_write_ptr_1 = kzalloc( sizeof(struct diag_request), GFP_KERNEL); if (driver->usb_write_ptr_1 == NULL) goto err; if (driver->usb_write_ptr_2 == NULL) driver->usb_write_ptr_2 = kzalloc( sizeof(struct diag_request), GFP_KERNEL); if (driver->usb_write_ptr_2 == NULL) goto err; if (driver->usb_write_ptr_qdsp_1 == NULL) driver->usb_write_ptr_qdsp_1 = kzalloc( sizeof(struct diag_request), GFP_KERNEL); if (driver->usb_write_ptr_qdsp_1 == NULL) goto err; if (driver->usb_write_ptr_qdsp_2 == NULL) driver->usb_write_ptr_qdsp_2 = kzalloc( sizeof(struct diag_request), GFP_KERNEL); if (driver->usb_write_ptr_qdsp_2 == NULL) goto err; if (driver->usb_write_ptr_mdm_1 == NULL) driver->usb_write_ptr_mdm_1 = kzalloc( sizeof(struct diag_request), GFP_KERNEL); if (driver->usb_write_ptr_mdm_1 == NULL) goto err; if (driver->usb_write_ptr_mdm_2 == NULL) driver->usb_write_ptr_mdm_2 = kzalloc( sizeof(struct diag_request), GFP_KERNEL); if (driver->usb_write_ptr_mdm_2 == NULL) goto err; if (driver->usb_read_ptr == NULL) driver->usb_read_ptr = kzalloc( sizeof(struct diag_request), GFP_KERNEL); if (driver->usb_read_ptr == NULL) goto err; if (driver->pkt_buf == NULL && (driver->pkt_buf = kzalloc(PKT_SIZE, GFP_KERNEL)) == NULL) goto err; driver->diag_wq = create_singlethread_workqueue("diag_wq"); INIT_WORK(&(driver->diag_read_work), diag_read_work_fn); platform_driver_register(&msm_smd_ch1_driver); mutex_init(&driver->smd_lock); driver->init_done = 1; diag_usb_register(&diagfwdops); /* for MDM9k */ sdio_diag_init(); return; err: printk(KERN_INFO "\n Could not initialize diag buffers\n"); kfree(driver->usb_buf_out); kfree(driver->hdlc_buf); kfree(driver->msg_masks); kfree(driver->log_masks); kfree(driver->event_masks); kfree(driver->client_map); kfree(driver->mdmclient_map); kfree(driver->buf_tbl); kfree(driver->mdmbuf_tbl); kfree(driver->data_ready); kfree(driver->mdmdata_ready); kfree(driver->table); kfree(driver->pkt_buf); kfree(driver->usb_write_ptr_1); kfree(driver->usb_write_ptr_2); kfree(driver->usb_write_ptr_qdsp_1); kfree(driver->usb_write_ptr_qdsp_2); kfree(driver->usb_write_ptr_mdm_1); kfree(driver->usb_write_ptr_mdm_2); kfree(driver->usb_read_ptr); }