/**
 * host_init_wd - mei initialization wd.
 *
 * @dev: the device structure
 */
bool mei_wd_host_init(struct mei_device *dev)
{
	bool ret = false;

	mei_cl_init(&dev->wd_cl, dev);

	/* look for WD client and connect to it */
	dev->wd_cl.state = MEI_FILE_DISCONNECTED;
	dev->wd_timeout = AMT_WD_DEFAULT_TIMEOUT;

	/* find ME WD client */
	mei_find_me_client_update_filext(dev, &dev->wd_cl,
				&mei_wd_guid, MEI_WD_HOST_CLIENT_ID);

	dev_dbg(&dev->pdev->dev, "check wd_cl\n");
	if (MEI_FILE_CONNECTING == dev->wd_cl.state) {
		if (mei_connect(dev, &dev->wd_cl)) {
			dev_dbg(&dev->pdev->dev, "Failed to connect to WD client\n");
			dev->wd_cl.state = MEI_FILE_DISCONNECTED;
			dev->wd_cl.host_client_id = 0;
			ret = false;
			goto end;
		} else {
			dev->wd_cl.timer_count = CONNECT_TIMEOUT;
		}
	} else {
		dev_dbg(&dev->pdev->dev, "Failed to find WD client\n");
		ret = false;
		goto end;
	}

end:
	return ret;
}
Example #2
0
/**
 * host_init_wd - mei initialization wd.
 *
 * @dev: the device structure
 * returns -ENENT if wd client cannot be found
 *         -EIO if write has failed
 */
int mei_wd_host_init(struct mei_device *dev)
{
	mei_cl_init(&dev->wd_cl, dev);

	/* look for WD client and connect to it */
	dev->wd_cl.state = MEI_FILE_DISCONNECTED;
	dev->wd_timeout = AMT_WD_DEFAULT_TIMEOUT;

	/* find ME WD client */
	mei_find_me_client_update_filext(dev, &dev->wd_cl,
				&mei_wd_guid, MEI_WD_HOST_CLIENT_ID);

	dev_dbg(&dev->pdev->dev, "wd: check client\n");
	if (MEI_FILE_CONNECTING != dev->wd_cl.state) {
		dev_info(&dev->pdev->dev, "wd: failed to find the client\n");
		return -ENOENT;
	}

	if (mei_connect(dev, &dev->wd_cl)) {
		dev_err(&dev->pdev->dev, "wd: failed to connect to the client\n");
		dev->wd_cl.state = MEI_FILE_DISCONNECTED;
		dev->wd_cl.host_client_id = 0;
		return -EIO;
	}
	dev->wd_cl.timer_count = CONNECT_TIMEOUT;

	return 0;
}
Example #3
0
/**
 * host_init_wd - mei initialization wd.
 *
 * @dev: the device structure
 */
void mei_wd_host_init(struct mei_device *dev)
{
	mei_cl_init(&dev->wd_cl, dev);

	/* look for WD client and connect to it */
	dev->wd_cl.state = MEI_FILE_DISCONNECTED;
	dev->wd_timeout = watchdog_timeout;

	if (dev->wd_timeout > 0) {
		mei_wd_start_setup(dev);
		/* find ME WD client */
		mei_find_me_client_update_filext(dev, &dev->wd_cl,
					&mei_wd_guid, MEI_WD_HOST_CLIENT_ID);

		dev_dbg(&dev->pdev->dev, "check wd_cl\n");
		if (MEI_FILE_CONNECTING == dev->wd_cl.state) {
			if (!mei_connect(dev, &dev->wd_cl)) {
				dev_dbg(&dev->pdev->dev, "Failed to connect to WD client\n");
				dev->wd_cl.state = MEI_FILE_DISCONNECTED;
				dev->wd_cl.host_client_id = 0;
				mei_host_init_iamthif(dev) ;
			} else {
				dev->wd_cl.timer_count = CONNECT_TIMEOUT;
			}
		} else {
			dev_dbg(&dev->pdev->dev, "Failed to find WD client\n");
			mei_host_init_iamthif(dev) ;
		}
	} else {
		dev->wd_bypass = true;
		dev_dbg(&dev->pdev->dev, "WD requested to be disabled\n");
		mei_host_init_iamthif(dev) ;
	}
}