Intel MEI
=======================

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

The Intel Management Engine (Intel ME) is an isolated and
protected computing resource (Coprocessor) residing inside
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 ME feature.

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

[place holder to URL to protocol definitions]

Prominent usage of the Interface is to communicate with
Intel 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 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/HTTPS or WS-Management protocol
over HTTP and HTTPS 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/WordDocuments/aboutintelamt.htm


MEI Driver
=======================

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

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


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

The driver is oblivious to data that are passed between

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

A Code snippet for application communicating with 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);

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. which means that some Intel AMT feature can be access
	from a local application using same Network interface as for
	remote application.

	When a local application sends a message addressed to the local
	Intel AMT host name, the Local Manageability Service (LMS),
	which listens for traffic directed to the host name, intercepts
	the message and routes it to the Intel Management Engine Interface.
	For more information:
	http://software.intel.com/sites/manageability/AMT_Implementation_and_
	Reference_Guide/WordDocuments/localaccess1.htm

	The LMS opens a connection using the MEI driver to the LMS
	FW feature using a defined UUID and then communicates with the
	feature using a protocol
	called Intel(R) AMT Port Forwarding Protocol (APF protocol).
	The protocol is used to maintain multiple sessions with
	Intel AMT from a single application.
	See the protocol specification in
	the Intel(R) AMT Implementation and Reference Guide
	http://software.intel.com/sites/manageability/AMT_Implementation_and_Reference_Guide/HTMLDocuments/MPSDocuments/Intel%20AMT%20Port%20Forwarding%20Protocol%20Reference%20Manual.pdf

  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/WordDocuments/remoteconfigurationwithalocalagent.htm

	How the Local Agent Works (including Command structs):
	http://software.intel.com/sites/manageability/AMT_Implementation_and_Reference_Guide/WordDocuments/howthelocalagentsampleworks.htm

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 whoever subscribed to this event. This mechanism means that
IT knows when a platform crashes even when there is a hard failure
on the host.
The AMT Watchdog is composed of two parts:
	1) FW Feature - that receives the heartbeats
	   and sends an event when the heartbeats stop.
	2) MEI driver – connects to the watchdog (WD) feature,
	   configures the watchdog and sends the heartbeats.

The MEI driver configures the Watchdog to expire by default
every 120sec unless set by the user using module parameters.
The Driver then sends heartbeats every 2sec.

If WD feature does not exist (i.e. the connection failed),
the MEI driver will disable the sending of heartbeats.

Module Parameters
=================
watchdog_timeout - the user can use this module parameter
to change the watchdog timeout setting.

This value sets the Intel AMT watchdog timeout interval in seconds;
the default value is 120sec.
in order to disable the watchdog activites set the value to 0.
Normal values should be between 120 and 65535

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
