Intel(R) Management Engine Interface (Intel(R) MEI)
===================================================

Introduction
============

The Intel Management Engine (Intel ME) is an isolated and protected computing
resource (Co-processor) residing inside certain Intel chipsets. The Intel ME
provides support for computer/IT management features. The feature set
depends on the Intel chipset SKU.

The Intel Management Engine Interface (Intel MEI, previously known as HECI)
is the interface between the Host and Intel ME. This interface is exposed
to the host as a PCI device. The Intel MEI Driver is in charge of the
communication channel between a host application and the Intel ME feature.

Each Intel ME feature (Intel ME Client) is addressed by a GUID/UUID and
each client has its own protocol. The protocol is message-based with a
header and payload up to 512 bytes.

Prominent usage of the Intel ME Interface is to communicate with Intel(R)
Active Management Technology (Intel AMT) implemented in firmware running on
the Intel ME.

Intel AMT provides the ability to manage a host remotely out-of-band (OOB)
even when the operating system running on the host processor has crashed or
is in a sleep state.

Some examples of Intel AMT usage are:
   - Monitoring hardware state and platform components
   - Remote power off/on (useful for green computing or overnight IT
     maintenance)
   - OS updates
   - Storage of useful platform information such as software assets
   - Built-in hardware KVM
   - Selective network isolation of Ethernet and IP protocol flows based
     on policies set by a remote management console
   - IDE device redirection from remote management console

Intel AMT (OOB) communication is based on SOAP (deprecated
starting with Release 6.0) over HTTP/S or WS-Management protocol over
HTTP/S that are received from a remote management console application.

For more information about Intel AMT:
http://software.intel.com/sites/manageability/AMT_Implementation_and_Reference_Guide


Intel MEI Driver
================

The driver exposes a misc device called /dev/mei.

An application maintains communication with an Intel ME feature while
/dev/mei is open. The binding to a specific feature is performed by calling
MEI_CONNECT_CLIENT_IOCTL, which passes the desired UUID.
The number of instances of an Intel ME feature that can be opened
at the same time depends on the Intel ME feature, but most of the
features allow only a single instance.

The Intel AMT Host Interface (Intel AMTHI) feature supports multiple
simultaneous user connected applications. The Intel MEI driver
handles this internally by maintaining request queues for the applications.

The driver is transparent to data that are passed between firmware feature
and host application.

Because some of the Intel ME features can change the system
configuration, the driver by default allows only a privileged
user to access it.

A code snippet for an application communicating with Intel AMTHI client:

	struct mei_connect_client_data data;
	fd = open(MEI_DEVICE);

	data.d.in_client_uuid = AMTHI_UUID;

	ioctl(fd, IOCTL_MEI_CONNECT_CLIENT, &data);

	printf("Ver=%d, MaxLen=%ld\n",
			data.d.in_client_uuid.protocol_version,
			data.d.in_client_uuid.max_msg_length);

	[...]

	write(fd, amthi_req_data, amthi_req_data_len);

	[...]

	read(fd, &amthi_res_data, amthi_res_data_len);

	[...]
	close(fd);


IOCTL
=====

The Intel MEI Driver supports the following IOCTL commands:
	IOCTL_MEI_CONNECT_CLIENT	Connect to firmware Feature (client).

	usage:
		struct mei_connect_client_data clientData;
		ioctl(fd, IOCTL_MEI_CONNECT_CLIENT, &clientData);

	inputs:
		mei_connect_client_data struct contain the following
		input field:

		in_client_uuid -	UUID of the FW Feature that needs
					to connect to.
	outputs:
		out_client_properties - Client Properties: MTU and Protocol Version.

	error returns:
		EINVAL	Wrong IOCTL Number
		ENODEV	Device or Connection is not initialized or ready.
			(e.g. Wrong UUID)
		ENOMEM	Unable to allocate memory to client internal data.
		EFAULT	Fatal Error (e.g. Unable to access user input data)
		EBUSY	Connection Already Open

	Notes:
        max_msg_length (MTU) in client properties describes the maximum
        data that can be sent or received. (e.g. if MTU=2K, can send
        requests up to bytes 2k and received responses up to 2k bytes).

	IOCTL_MEI_NOTIFY_SET: enable or disable event notifications

	Usage:
		uint32_t enable;
		ioctl(fd, IOCTL_MEI_NOTIFY_SET, &enable);

	Inputs:
		uint32_t enable = 1;
		or
		uint32_t enable[disable] = 0;

	Error returns:
		EINVAL	Wrong IOCTL Number
		ENODEV	Device  is not initialized or the client not connected
		ENOMEM	Unable to allocate memory to client internal data.
		EFAULT	Fatal Error (e.g. Unable to access user input data)
		EOPNOTSUPP if the device doesn't support the feature

	Notes:
	The client must be connected in order to enable notification events


	IOCTL_MEI_NOTIFY_GET : retrieve event

	Usage:
		uint32_t event;
		ioctl(fd, IOCTL_MEI_NOTIFY_GET, &event);

	Outputs:
		1 - if an event is pending
		0 - if there is no even pending

	Error returns:
		EINVAL	Wrong IOCTL Number
		ENODEV	Device is not initialized or the client not connected
		ENOMEM	Unable to allocate memory to client internal data.
		EFAULT	Fatal Error (e.g. Unable to access user input data)
		EOPNOTSUPP if the device doesn't support the feature

	Notes:
	The client must be connected and event notification has to be enabled
	in order to receive an event


Intel ME Applications
=====================

	1) Intel Local Management Service (Intel LMS)

	   Applications running locally on the platform communicate with Intel AMT Release
	   2.0 and later releases in the same way that network applications do via SOAP
	   over HTTP (deprecated starting with Release 6.0) or with WS-Management over
	   SOAP over HTTP. This means that some Intel AMT features can be accessed from a
	   local application using the same network interface as a remote application
	   communicating with Intel AMT over the network.

	   When a local application sends a message addressed to the local Intel AMT host
	   name, the Intel LMS, which listens for traffic directed to the host name,
	   intercepts the message and routes it to the Intel MEI.
	   For more information:
	   http://software.intel.com/sites/manageability/AMT_Implementation_and_Reference_Guide
	   Under "About Intel AMT" => "Local Access"

	   For downloading Intel LMS:
	   http://software.intel.com/en-us/articles/download-the-latest-intel-amt-open-source-drivers/

	   The Intel LMS opens a connection using the Intel MEI driver to the Intel LMS
	   firmware feature using a defined UUID and then communicates with the feature
	   using a protocol called Intel AMT Port Forwarding Protocol (Intel APF protocol).
	   The protocol is used to maintain multiple sessions with Intel AMT from a
	   single application.

	   See the protocol specification in the Intel AMT Software Development Kit (SDK)
	   http://software.intel.com/sites/manageability/AMT_Implementation_and_Reference_Guide
	   Under "SDK Resources" => "Intel(R) vPro(TM) Gateway (MPS)"
	   => "Information for Intel(R) vPro(TM) Gateway Developers"
	   => "Description of the Intel AMT Port Forwarding (APF) Protocol"

	2) Intel AMT Remote configuration using a Local Agent

	   A Local Agent enables IT personnel to configure Intel AMT out-of-the-box
	   without requiring installing additional data to enable setup. The remote
	   configuration process may involve an ISV-developed remote configuration
	   agent that runs on the host.
	   For more information:
	   http://software.intel.com/sites/manageability/AMT_Implementation_and_Reference_Guide
	   Under "Setup and Configuration of Intel AMT" =>
	   "SDK Tools Supporting Setup and Configuration" =>
	   "Using the Local Agent Sample"

	   An open source Intel AMT configuration utility,	implementing a local agent
	   that accesses the Intel MEI driver, can be found here:
	   http://software.intel.com/en-us/articles/download-the-latest-intel-amt-open-source-drivers/


Intel AMT OS Health Watchdog
============================

The Intel AMT Watchdog is an OS Health (Hang/Crash) watchdog.
Whenever the OS hangs or crashes, Intel AMT will send an event
to any subscriber to this event. This mechanism means that
IT knows when a platform crashes even when there is a hard failure on the host.

The Intel AMT Watchdog is composed of two parts:
	1) Firmware feature - receives the heartbeats
	   and sends an event when the heartbeats stop.
	2) Intel MEI iAMT watchdog driver - connects to the watchdog feature,
	   configures the watchdog and sends the heartbeats.

The Intel iAMT watchdog MEI driver uses the kernel watchdog API to configure
the Intel AMT Watchdog and to send heartbeats to it. The default timeout of the
watchdog is 120 seconds.

If the Intel AMT is not enabled in the firmware then the watchdog client won't enumerate
on the me client bus and watchdog devices won't be exposed.


Supported Chipsets
==================

7 Series Chipset Family
6 Series Chipset Family
5 Series Chipset Family
4 Series Chipset Family
Mobile 4 Series Chipset Family
ICH9
82946GZ/GL
82G35 Express
82Q963/Q965
82P965/G965
Mobile PM965/GM965
Mobile GME965/GLE960
82Q35 Express
82G33/G31/P35/P31 Express
82Q33 Express
82X38/X48 Express

---
linux-mei@linux.intel.com
