Commit 9ce178e5 authored by Oren Weil's avatar Oren Weil Committed by Greg Kroah-Hartman
Browse files

staging: mei: registering the MEI driver with the kernel watchdog core interface



Adding kernel watchdog interface (/dev/watchdog) to the MEI Driver to support AMT Watchdog feature.
This patch and the following one will replace MEI Driver self management of the AMT watchdog
with the standard kernel watchdog interface.

Signed-off-by: default avatarOren Weil <oren.jer.weil@intel.com>
Acked-by: default avatarTomas Winkler <tomas.winkler@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 92eb4013
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -133,6 +133,7 @@ struct mei_device *mei_device_init(struct pci_dev *pdev)
	init_waitqueue_head(&dev->wait_stop_wd);
	dev->mei_state = MEI_INITIALIZING;
	dev->iamthif_state = MEI_IAMTHIF_IDLE;
	dev->wd_interface_reg = false;


	mei_io_list_init(&dev->read_list);
+3 −1
Original line number Diff line number Diff line
@@ -23,7 +23,9 @@
#include "mei_dev.h"


#define AMT_WD_VALUE 120	/* seconds */
#define AMT_WD_DEFAULT_TIMEOUT 120	/* seconds */
#define AMT_WD_MIN_TIMEOUT 120	/* seconds */
#define AMT_WD_MAX_TIMEOUT 65535	/* seconds */

#define MEI_WATCHDOG_DATA_SIZE         16
#define MEI_START_WD_DATA_SIZE         20
+12 −0
Original line number Diff line number Diff line
@@ -396,6 +396,18 @@ static void mei_client_connect_response(struct mei_device *dev,
		dev->wd_due_counter = (dev->wd_timeout) ? 1 : 0;

		dev_dbg(&dev->pdev->dev, "successfully connected to WD client.\n");

		/* Registering watchdog interface device once we got connection
		   to the WD Client
		*/
		if (watchdog_register_device(&amt_wd_dev)) {
			printk(KERN_ERR "mei: unable to register watchdog device.\n");
			dev->wd_interface_reg = false;
		} else {
			dev_dbg(&dev->pdev->dev, "successfully register watchdog interface.\n");
			dev->wd_interface_reg = true;
		}

		mei_host_init_iamthif(dev);
		return;
	}
+4 −0
Original line number Diff line number Diff line
@@ -241,6 +241,10 @@ static void __devexit mei_remove(struct pci_dev *pdev)
		mei_disconnect_host_client(dev, &dev->wd_cl);
	}

	/* Unregistering watchdog device */
	if (dev->wd_interface_reg)
		watchdog_unregister_device(&amt_wd_dev);

	/* remove entry if already in list */
	dev_dbg(&pdev->dev, "list del iamthif and wd file list.\n");
	mei_remove_client_from_file_list(dev, dev->wd_cl.host_client_id);
+9 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#define _MEI_DEV_H_

#include <linux/types.h>
#include <linux/watchdog.h>
#include "mei.h"
#include "hw.h"

@@ -36,6 +37,12 @@
#define MEI_WD_PARAMS_SIZE             4
#define MEI_WD_STATE_INDEPENDENCE_MSG_SENT       (1 << 0)

/*
 * AMT Watchdog Device
 */
#define INTEL_AMT_WATCHDOG_ID "INTCAMT"
extern struct watchdog_device amt_wd_dev;

/*
 * AMTHI Client UUID
 */
@@ -258,6 +265,8 @@ struct mei_device {
	bool iamthif_flow_control_pending;
	bool iamthif_ioctl;
	bool iamthif_canceled;

	bool wd_interface_reg;
};


Loading