int diagfwd_disconnect_bridge(int process_cable)
{
	DIAGFWD_INFO("diag: In %s, process_cable: %d\n", __func__, process_cable);

	
	if (process_cable) {
		driver->usb_mdm_connected = 0;
		driver->qxdmusb_drop = 1;
		usb_diag_free_req(driver->mdm_ch);
	}

	if (driver->hsic_device_enabled &&
			driver->logging_mode != MEMORY_DEVICE_MODE) {
#if 0
		driver->in_busy_hsic_read_on_device = 1;
		driver->in_busy_hsic_write = 1;
		
		return diag_hsic_close();
#endif
	} else if (driver->diag_smux_enabled &&
			driver->logging_mode == USB_MODE) {
		driver->in_busy_smux = 1;
		driver->lcid = LCID_INVALID;
#if 0
		driver->smux_connected = 0;
#endif
		
		msm_smux_close(LCID_VALID);
	}
	return 0;
}
/*
 * diagfwd_disconnect_bridge is called when the USB mdm channel
 * is disconnected
 */
int diagfwd_disconnect_bridge(int process_cable)
{
    pr_debug("DIAG in %s\n", __func__);

    /* If the usb cable is being disconnected */
    if (process_cable) {
        driver->usb_mdm_connected = 0;
        usb_diag_free_req(driver->mdm_ch);
    }

    if (driver->logging_mode != MEMORY_DEVICE_MODE) {
        if (driver->hsic_device_enabled) {
            driver->in_busy_hsic_write_on_device = 1;
            driver->in_busy_hsic_read_on_device = 1;
            driver->in_busy_hsic_write = 1;
            driver->in_busy_hsic_read = 1;
            /* Turn off communication over usb mdm and hsic */
            return diag_hsic_close();
        } else if (driver->diag_smux_enabled) {
            driver->in_busy_smux = 1;
            driver->lcid = LCID_INVALID;
            /* Turn off communication over usb mdm and smux */
            msm_smux_close(LCID_VALID);
        }
    }
    return 0;
}
Beispiel #3
0
int diagfwd_disconnect(void)
{

	DIAGFWD_INFO("%s\n", __func__);
	driver->in_busy_1 = 1;
	driver->in_busy_2 = 1;
	driver->in_busy_qdsp_1 = 1;
	driver->in_busy_qdsp_2 = 1;
	driver->debug_flag = 1;
	if (driver->usb_connected)
		usb_diag_free_req(driver->legacy_ch);

#if defined(CONFIG_MACH_MECHA)
	driver->in_busy_mdm_1 = 1;
	driver->in_busy_mdm_2 = 1;
#endif
#if defined(CONFIG_ARCH_MSM8X60_LTE)
	if (diag_ch_sdio) {
		if (driver->legacy_ch && !IS_ERR(driver->legacy_ch))
			diagfwd_disconnect_sdio();
	} else {
		if (driver->usb_connected && driver->mdm_ch && !IS_ERR(driver->mdm_ch))
			diagfwd_disconnect_sdio();
	}
#endif
	driver->usb_connected = 0;
	/* TBD - notify and flow control SMD */
	return 0;
}
Beispiel #4
0
int diagfwd_disconnect_sdio(void)
{
    /* Clear variable to Flush remaining data from SDIO channel */
    driver->in_busy_sdio = 0;
    usb_diag_free_req(driver->mdm_ch);
    return 0;
}
void diagfwd_bridge_exit(void)
{
	pr_debug("diag: in %s\n", __func__);

	if (driver->hsic_device_enabled) {
		diag_hsic_close();
		driver->hsic_device_enabled = 0;
		diagmem_exit(driver, POOL_TYPE_ALL);
	}
	if (driver->diag_smux_enabled) {
		driver->lcid = LCID_INVALID;
		kfree(driver->buf_in_smux);
		driver->diag_smux_enabled = 0;
	}
	platform_driver_unregister(&msm_hsic_ch_driver);
	platform_driver_unregister(&msm_diagfwd_smux_driver);
	
#ifdef CONFIG_DIAG_OVER_USB
	if (driver->usb_mdm_connected)
		usb_diag_free_req(driver->mdm_ch);
	usb_diag_close(driver->mdm_ch);
#endif
	kfree(driver->usb_buf_mdm_out);
	kfree(driver->hsic_buf_tbl);
	kfree(driver->write_ptr_mdm);
	kfree(driver->usb_read_mdm_ptr);
	destroy_workqueue(driver->diag_bridge_wq);
}
Beispiel #6
0
void diagfwd_sdio_exit(void)
{
#ifdef CONFIG_DIAG_OVER_USB
#ifdef CONFIG_SH_USB_CUST
//	if (driver->usb_connected)
//		diag_close();
#else /* CONFIG_SH_USB_CUST */
	if (driver->usb_connected)
		usb_diag_free_req(driver->mdm_ch);
#endif /* CONFIG_SH_USB_CUST */
#endif
	platform_driver_unregister(&msm_sdio_ch_driver);
#ifdef CONFIG_DIAG_OVER_USB
#ifdef CONFIG_SH_USB_CUST
//	diag_usb_unregister();
#else /* CONFIG_SH_USB_CUST */
	usb_diag_close(driver->mdm_ch);
#endif /* CONFIG_SH_USB_CUST */
#endif
	kfree(driver->buf_in_sdio);
	kfree(driver->usb_buf_mdm_out);
	kfree(driver->write_ptr_mdm);
	kfree(driver->usb_read_mdm_ptr);
	destroy_workqueue(driver->diag_sdio_wq);
}
Beispiel #7
0
void diagfwd_exit(void)
{
	int i;

	for (i = 0; i < NUM_SMD_DATA_CHANNELS; i++)
		diag_smd_destructor(&driver->smd_data[i]);

#ifdef CONFIG_DIAG_OVER_USB
	if (driver->usb_connected)
		usb_diag_free_req(driver->legacy_ch);
	usb_diag_close(driver->legacy_ch);
#endif
	platform_driver_unregister(&msm_smd_ch1_driver);
	platform_driver_unregister(&msm_diag_dci_driver);
	platform_driver_unregister(&diag_smd_lite_driver);

	kfree(driver->buf_msg_mask_update);
	kfree(driver->buf_log_mask_update);
	kfree(driver->buf_event_mask_update);
	kfree(driver->usb_buf_out);
	kfree(driver->hdlc_buf);
	kfree(driver->client_map);
	kfree(driver->buf_tbl);
	kfree(driver->data_ready);
	kfree(driver->table);
	kfree(driver->pkt_buf);
	kfree(driver->usb_read_ptr);
	kfree(driver->apps_rsp_buf);
	kfree(driver->user_space_data);
	destroy_workqueue(driver->diag_wq);
}
Beispiel #8
0
int diagfwd_disconnect_sdio(void)
{
	driver->in_busy_sdio = 1;
	usb_diag_free_req(driver->mdm_ch);
	if (driver->sdio_ch && (driver->logging_mode == USB_MODE))
		diag_sdio_close();
	return 0;
}
Beispiel #9
0
int diagfwd_disconnect_sdio(void)
{
	driver->in_busy_sdio = 1;
#ifdef CONFIG_SH_USB_CUST
//	diag_close();
#else /* CONFIG_SH_USB_CUST */
	usb_diag_free_req(driver->mdm_ch);
#endif /* CONFIG_SH_USB_CUST */
	return 0;
}
int diagfwd_disconnect_sdio(void)
{
	DIAG_INFO("%s \n", __func__);

	/* Clear variable to Flush remaining data from SDIO channel */
	driver->in_busy_sdio_1 = 0;
	driver->in_busy_sdio_2 = 0;
	if (!strcmp(DIAG_MDM, usb_ch_name)) {
		usb_diag_free_req(driver->mdm_ch);
	}
	return 0;
}
Beispiel #11
0
void diagfwd_exit(void)
{
	smd_close(driver->ch);
	smd_close(driver->chqdsp);
	driver->ch = 0;		/*SMD can make this NULL */
	driver->chqdsp = 0;
#ifdef CONFIG_DIAG_OVER_USB
	if (driver->usb_connected)
		usb_diag_free_req(driver->legacy_ch);
#endif
	platform_driver_unregister(&msm_smd_ch1_driver);
#ifdef CONFIG_DIAG_OVER_USB
	usb_diag_close(driver->legacy_ch);
#endif

	kfree(driver->buf_in_1);
	kfree(driver->buf_in_2);
	kfree(driver->buf_in_qdsp_1);
	kfree(driver->buf_in_qdsp_2);
#if defined(CONFIG_MACH_MECHA) //|| defined(CONFIG_ARCH_MSM8X60_LTE)
	kfree(driver->buf_in_mdm_1);
	kfree(driver->buf_in_mdm_2);
#endif
	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
	destroy_workqueue(driver->diag_wq);
}
Beispiel #12
0
int diagfwd_disconnect(void)
{
	printk(KERN_DEBUG "diag: USB disconnected\n");
	driver->usb_connected = 0;
	driver->in_busy_1 = 1;
	driver->in_busy_2 = 1;
	driver->in_busy_qdsp_1 = 1;
	driver->in_busy_qdsp_2 = 1;
	driver->debug_flag = 1;
	usb_diag_free_req(driver->legacy_ch);
	/* TBD - notify and flow control SMD */
	return 0;
}
Beispiel #13
0
/*
 * diagfwd_disconnect_hsic is called when the USB mdm channel
 * is disconnected
 */
static int diagfwd_disconnect_hsic(void)
{
	pr_debug("DIAG in %s\n", __func__);

	driver->usb_mdm_connected = 0;
	usb_diag_free_req(driver->mdm_ch);
	driver->in_busy_hsic_write_on_mdm = 1;
	driver->in_busy_hsic_read_on_mdm = 1;
	driver->in_busy_hsic_write = 1;
	driver->in_busy_hsic_read = 1;

	/* Turn off communication over usb mdm and hsic */
	return diag_hsic_close();
}
Beispiel #14
0
void diagfwd_exit(void)
{
	smd_close(driver->ch);
	smd_close(driver->chqdsp);
	driver->ch = 0;		/*SMD can make this NULL */
	driver->chqdsp = 0;
#ifdef CONFIG_DIAG_OVER_USB
#ifdef CONFIG_SH_USB_CUST
	if (driver->usb_connected)
		diag_close();
#else /* CONFIG_SH_USB_CUST */
	if (driver->usb_connected)
		usb_diag_free_req(driver->legacy_ch);
#endif /* CONFIG_SH_USB_CUST */
#endif
	platform_driver_unregister(&msm_smd_ch1_driver);
#ifdef CONFIG_DIAG_OVER_USB
#ifdef CONFIG_SH_USB_CUST
	diag_usb_unregister();
#else /* CONFIG_SH_USB_CUST */
	usb_diag_close(driver->legacy_ch);
#endif /* CONFIG_SH_USB_CUST */
#endif


	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);
	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);
	kfree(driver->usb_read_ptr);
	kfree(driver->apps_rsp_buf);
#ifndef CONFIG_SH_USB_CUST
	destroy_workqueue(driver->diag_wq);
#endif /* CONFIG_SH_USB_CUST */
}
/*
 * diagfwd_disconnect_bridge is called when the USB mdm channel
 * is disconnected. So disconnect should happen for all bridges
 */
int diagfwd_disconnect_bridge(int process_cable)
{
	int i;
	pr_debug("diag: In %s, process_cable: %d\n", __func__, process_cable);

	for (i = 0; i < MAX_BRIDGES; i++) {
		if (diag_bridge[i].enabled) {
			mutex_lock(&diag_bridge[i].bridge_mutex);
			/* If the usb cable is being disconnected */
			if (process_cable) {
				diag_bridge[i].usb_connected = 0;
				usb_diag_free_req(diag_bridge[i].ch);
				driver->qxdmusb_drop = 1;
			}

			if (i == SMUX) {
				if (driver->diag_smux_enabled &&
					driver->logging_mode == USB_MODE) {
					driver->in_busy_smux = 1;
					driver->lcid = LCID_INVALID;
					driver->smux_connected = 0;
					/*
					 * Turn off communication over usb
					 * and smux
					 */
					msm_smux_close(LCID_VALID);
				}
			}  else {
				if (diag_hsic[i].hsic_device_enabled &&
				     (driver->logging_mode != MEMORY_DEVICE_MODE
				     || !diag_hsic[i].hsic_data_requested)) {
#if !DIAG_XPST
					diag_hsic[i].
						in_busy_hsic_read_on_device = 1;
					diag_hsic[i].in_busy_hsic_write = 1;
					/* Turn off communication over usb
					 * and HSIC */
					diag_hsic_close(i);
#endif
				}
			}
			mutex_unlock(&diag_bridge[i].bridge_mutex);
		}
	}
	return 0;
}
Beispiel #16
0
int diagfwd_disconnect(void)
{
	printk(KERN_DEBUG "diag: USB disconnected\n");
	driver->usb_connected = 0;
	driver->in_busy_1 = 1;
	driver->in_busy_2 = 1;
	driver->in_busy_qdsp_1 = 1;
	driver->in_busy_qdsp_2 = 1;
	driver->debug_flag = 1;
	usb_diag_free_req(driver->legacy_ch);
#ifdef CONFIG_DIAG_SDIO_PIPE
	if (machine_is_msm8x60_charm_surf() || machine_is_msm8x60_charm_ffa())
		if (driver->mdm_ch && !IS_ERR(driver->mdm_ch))
			diagfwd_disconnect_sdio();
#endif
	/* TBD - notify and flow control SMD */
	return 0;
}
void diagfwd_sdio_exit(void)
{
#ifdef CONFIG_DIAG_OVER_USB
	if (driver->usb_connected)
		usb_diag_free_req(driver->mdm_ch);
#endif
	platform_driver_unregister(&msm_sdio_ch_driver);
#ifdef CONFIG_DIAG_OVER_USB
	usb_diag_close(driver->mdm_ch);
#endif
		kfree(driver->buf_in_sdio_1);
		kfree(driver->buf_in_sdio_2);
	kfree(driver->usb_buf_mdm_out);
		kfree(driver->write_ptr_mdm_1);
		kfree(driver->write_ptr_mdm_2);
	kfree(driver->usb_read_mdm_ptr);
	destroy_workqueue(driver->diag_sdio_wq);
}
/*
 * diagfwd_disconnect_hsic is called when the USB mdm channel
 * is disconnected
 */
int diagfwd_disconnect_hsic(int process_cable)
{
	pr_debug("diag: In %s, process_cable: %d\n", __func__, process_cable);

	/* If the usb cable is being disconnected */
	if (process_cable) {
		driver->usb_mdm_connected = 0;
		usb_diag_free_req(driver->mdm_ch);
	}

	if (driver->logging_mode != MEMORY_DEVICE_MODE) {
		if (driver->hsic_device_enabled) {
			driver->in_busy_hsic_read_on_device = 1;
			driver->in_busy_hsic_write = 1;
			/* Turn off communication over usb mdm and hsic */
			return diag_hsic_close();
		}
	}
	return 0;
}
void diagfwd_exit(void)
{
	smd_close(driver->ch);
	smd_close(driver->chqdsp);
	smd_close(driver->ch_wcnss);
	driver->ch = 0;		/* SMD can make this NULL */
	driver->chqdsp = 0;
	driver->ch_wcnss = 0;
	smd_diag_initialized = 0;
#ifdef CONFIG_DIAG_OVER_USB
	if (driver->usb_connected)
		usb_diag_free_req(driver->legacy_ch);
	usb_diag_close(driver->legacy_ch);
#endif
	platform_driver_unregister(&msm_smd_ch1_driver);
	platform_driver_unregister(&diag_smd_lite_driver);
	kfree(driver->buf_in_1);
	kfree(driver->buf_in_2);
	kfree(driver->buf_in_qdsp_1);
	kfree(driver->buf_in_qdsp_2);
	kfree(driver->buf_in_wcnss);
	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);
	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);
	kfree(driver->write_ptr_wcnss);
	kfree(driver->usb_read_ptr);
	kfree(driver->apps_rsp_buf);
	kfree(driver->user_space_data);
	destroy_workqueue(driver->diag_wq);
}
int diagfwd_disconnect(void)
{
	printk(KERN_DEBUG "diag: USB disconnected\n");
	driver->usb_connected = 0;
	driver->debug_flag = 1;
	usb_diag_free_req(driver->legacy_ch);
	if (driver->logging_mode == USB_MODE) {
		driver->in_busy_1 = 1;
		driver->in_busy_2 = 1;
		driver->in_busy_qdsp_1 = 1;
		driver->in_busy_qdsp_2 = 1;
		driver->in_busy_wcnss = 1;
	}
#ifdef CONFIG_DIAG_SDIO_PIPE
	if (diag_support_mdm9k)
		if (driver->mdm_ch && !IS_ERR(driver->mdm_ch))
			diagfwd_disconnect_sdio();
#endif
	/* TBD - notify and flow control SMD */
	return 0;
}
void diagfwd_bridge_exit(void)
{
	int i;
	pr_debug("diag: in %s\n", __func__);

	for (i = 0; i < MAX_HSIC_CH; i++) {
		if (diag_hsic[i].hsic_device_enabled) {
			diag_hsic_close(i);
			diag_hsic[i].hsic_device_enabled = 0;
			diag_bridge[i].enabled = 0;
		}
		diag_hsic[i].hsic_inited = 0;
		kfree(diag_hsic[i].hsic_buf_tbl);
	}
	diagmem_exit(driver, POOL_TYPE_ALL);
	if (driver->diag_smux_enabled) {
		driver->lcid = LCID_INVALID;
		kfree(driver->buf_in_smux);
		driver->diag_smux_enabled = 0;
		diag_bridge[SMUX].enabled = 0;
	}
	platform_driver_unregister(&msm_hsic_ch_driver);
	platform_driver_unregister(&msm_diagfwd_smux_driver);
	/* destroy USB MDM specific variables */
	for (i = 0; i < MAX_BRIDGES; i++) {
		if (diag_bridge[i].enabled) {
#ifdef CONFIG_DIAG_OVER_USB
			if (diag_bridge[i].usb_connected)
				usb_diag_free_req(diag_bridge[i].ch);
			usb_diag_close(diag_bridge[i].ch);
#endif
			kfree(diag_bridge[i].usb_buf_out);
			kfree(diag_bridge[i].usb_read_ptr);
			destroy_workqueue(diag_bridge[i].wq);
			diag_bridge[i].enabled = 0;
		}
	}
	kfree(driver->write_ptr_mdm);
}
Beispiel #22
0
int diagfwd_disconnect(void)
{
	int i;

	printk(KERN_DEBUG "diag: USB disconnected\n");
	driver->usb_connected = 0;
	driver->debug_flag = 1;
	usb_diag_free_req(driver->legacy_ch);
	if (driver->logging_mode == USB_MODE) {
		for (i = 0; i < NUM_SMD_DATA_CHANNELS; i++) {
			driver->smd_data[i].in_busy_1 = 1;
			driver->smd_data[i].in_busy_2 = 1;
		}
	}
#ifdef CONFIG_DIAG_SDIO_PIPE
	if (machine_is_msm8x60_fusion() || machine_is_msm8x60_fusn_ffa())
		if (driver->mdm_ch && !IS_ERR(driver->mdm_ch))
			diagfwd_disconnect_sdio();
#endif
	/* TBD - notify and flow control SMD */
	return 0;
}
void diagfwd_hsic_exit(void)
{
	pr_debug("diag: in %s\n", __func__);

	if (driver->hsic_initialized)
		diag_hsic_close();
	diagmem_exit(driver, POOL_TYPE_ALL);
	/* destroy USB MDM specific variables */
#ifdef CONFIG_DIAG_OVER_USB
	if (driver->usb_mdm_connected)
		usb_diag_free_req(driver->mdm_ch);
#endif
	platform_driver_unregister(&msm_hsic_ch_driver);
#ifdef CONFIG_DIAG_OVER_USB
	usb_diag_close(driver->mdm_ch);
#endif
	kfree(driver->usb_buf_mdm_out);
	kfree(driver->hsic_buf_tbl);
	kfree(driver->usb_read_mdm_ptr);
	destroy_workqueue(driver->diag_hsic_wq);

	driver->hsic_device_enabled = 0;
}
Beispiel #24
0
void __exit diagfwd_hsic_exit(void)
{
	pr_debug("DIAG in %s\n", __func__);

	if (driver->hsic_initialized)
		diag_hsic_close();

#ifdef CONFIG_DIAG_OVER_USB
	if (driver->usb_mdm_connected)
		usb_diag_free_req(driver->mdm_ch);
#endif
	platform_driver_unregister(&msm_hsic_ch_driver);
#ifdef CONFIG_DIAG_OVER_USB
	usb_diag_close(driver->mdm_ch);
#endif
	kfree(driver->buf_in_hsic);
	kfree(driver->usb_buf_mdm_out);
	kfree(driver->write_ptr_mdm);
	kfree(driver->usb_read_mdm_ptr);
	destroy_workqueue(driver->diag_hsic_wq);

	driver->hsic_device_enabled = 0;
}
int diagfwd_disconnect_bridge(int process_cable)
{
	int i;
	pr_debug("diag: In %s, process_cable: %d\n", __func__, process_cable);

	for (i = 0; i < MAX_BRIDGES; i++) {
		if (diag_bridge[i].enabled) {
			mutex_lock(&diag_bridge[i].bridge_mutex);
			
			if (process_cable) {
				diag_bridge[i].usb_connected = 0;
				usb_diag_free_req(diag_bridge[i].ch);
				driver->qxdmusb_drop = 1;
			}

			if (i == HSIC && driver->hsic_device_enabled &&
				 driver->logging_mode != MEMORY_DEVICE_MODE) {
#if !DIAG_XPST
				driver->in_busy_hsic_read_on_device = 1;
				driver->in_busy_hsic_write = 1;
				
				diag_hsic_close();
#endif
			} else if (i == SMUX && driver->diag_smux_enabled &&
					driver->logging_mode == USB_MODE) {
				driver->in_busy_smux = 1;
				driver->lcid = LCID_INVALID;
				driver->smux_connected = 0;
				
				msm_smux_close(LCID_VALID);
			}
			mutex_unlock(&diag_bridge[i].bridge_mutex);
		}
	}
	return 0;
}
int diagfwd_disconnect_sdio(void)
{
    driver->in_busy_sdio = 1;
    usb_diag_free_req(driver->mdm_ch);
    return 0;
}