node-drivers/base-driver/drivers/vca/plx87xx/plx_hw_ops_vca_csm.c
static void plx_stop(struct vca_csm_device *cdev, bool force)
{
	struct plx_device *xdev = vca_csmdev_to_xdev(cdev);
	struct vca_bootparam * boot_params = xdev->dp;
#ifdef SCIF_ENABLED
	if (xdev->scdev) {
		scif_unregister_device(xdev->scdev);
		xdev->scdev = 0;
	}
#endif

	if(xdev->vpdev) {
		vop_unregister_device(xdev->vpdev);
		xdev->vpdev = 0;
		plx_clear_dma_mapped_mem(xdev,
			&boot_params->net_config_dma_addr,
			&boot_params->net_config_size,
			&cdev->net_config_va);
		plx_clear_dma_mapped_mem(xdev,
			&boot_params->net_config_windows_dma_addr,
			&boot_params->net_config_windows_size,
			&cdev->net_config_windows_va);
		plx_clear_dma_mapped_mem(xdev,
			&boot_params->sys_config_dma_addr,
			&boot_params->sys_config_size,
			&cdev->sys_config_va);
	}

	if(xdev->blockio.be_dev)
	{
		int rc;
		vcablkbe_unregister_f2b_callback(xdev->blockio.be_dev);
		if (!xdev->link_side) {
			/* Refresh doorbell */
			xdev->blockio.ftb_db = plx_next_db(xdev);
		}
		rc = vcablkbe_register_f2b_callback(xdev->blockio.be_dev);
		if (rc)
		{
			pr_err("%s: failed blockio initialization, rc=%d\n", __func__, rc);
		}
	}
	plx_bootparam_init(xdev);
}
/**
 * plx_stop - Prepare the VCA for reset and trigger reset.
 * @xdev: pointer to plx_device instance
 * @force: force a VCA to reset even if it is already offline.
 *
 * RETURNS: None.
 */
Prepare the VCA for reset and trigger reset.
@xdev: pointer to plx_device instance
@force: force a VCA to reset even if it is already offline.

None.
Prepare the VCA for reset and trigger reset . @xdev : pointer to plx_device instance @force : force a VCA to reset even if it is already offline . None .
static void plx_stop(struct vca_csm_device *cdev, bool force)
{
	struct plx_device *xdev = vca_csmdev_to_xdev(cdev);
	struct vca_bootparam * boot_params = xdev->dp;
#ifdef SCIF_ENABLED
	if (xdev->scdev) {
		scif_unregister_device(xdev->scdev);
		xdev->scdev = 0;
	}
#endif
	if(xdev->vpdev) {
		vop_unregister_device(xdev->vpdev);
		xdev->vpdev = 0;
		plx_clear_dma_mapped_mem(xdev,
			&boot_params->net_config_dma_addr,
			&boot_params->net_config_size,
			&cdev->net_config_va);
		plx_clear_dma_mapped_mem(xdev,
			&boot_params->net_config_windows_dma_addr,
			&boot_params->net_config_windows_size,
			&cdev->net_config_windows_va);
		plx_clear_dma_mapped_mem(xdev,
			&boot_params->sys_config_dma_addr,
			&boot_params->sys_config_size,
			&cdev->sys_config_va);
	}
	if(xdev->blockio.be_dev)
	{
		int rc;
		vcablkbe_unregister_f2b_callback(xdev->blockio.be_dev);
		if (!xdev->link_side) {
			xdev->blockio.ftb_db = plx_next_db(xdev);
		}
		rc = vcablkbe_register_f2b_callback(xdev->blockio.be_dev);
		if (rc)
		{
			pr_err("%s: failed blockio initialization, rc=%d\n", __func__, rc);
		}
	}
	plx_bootparam_init(xdev);
}
static void plx_stop ( struct vca_csm_device * cdev , bool force ) { struct plx_device * xdev = vca_csmdev_to_xdev ( cdev ) ; struct vca_bootparam * boot_params = xdev -> dp ; #ifdef SCIF_ENABLED if ( xdev -> scdev ) { scif_unregister_device ( xdev -> scdev ) ; xdev -> scdev = 0 ; } #endif if ( xdev -> vpdev ) { vop_unregister_device ( xdev -> vpdev ) ; xdev -> vpdev = 0 ; plx_clear_dma_mapped_mem ( xdev , & boot_params -> net_config_dma_addr , & boot_params -> net_config_size , & cdev -> net_config_va ) ; plx_clear_dma_mapped_mem ( xdev , & boot_params -> net_config_windows_dma_addr , & boot_params -> net_config_windows_size , & cdev -> net_config_windows_va ) ; plx_clear_dma_mapped_mem ( xdev , & boot_params -> sys_config_dma_addr , & boot_params -> sys_config_size , & cdev -> sys_config_va ) ; } if ( xdev -> blockio . be_dev ) { int rc ; vcablkbe_unregister_f2b_callback ( xdev -> blockio . be_dev ) ; if ( ! xdev -> link_side ) { xdev -> blockio . ftb_db = plx_next_db ( xdev ) ; } rc = vcablkbe_register_f2b_callback ( xdev -> blockio . be_dev ) ; if ( rc ) { pr_err ( " \n " , __func__ , rc ) ; } } plx_bootparam_init ( xdev ) ; }
plx_stop - Prepare the VCA for reset and trigger reset.
plx_stop - Prepare the VCA for reset and trigger reset .
/* Refresh doorbell */