[Linux-kernel-mentees] [PATCH] Documentation: misc-devices: mei: Convert mei txt files to reST

Shreeya Patel shreeya.patel23498 at gmail.com
Tue Jul 2 19:57:52 UTC 2019


On Sun, 2019-06-30 at 06:23 +0000, Winkler, Tomas wrote:
> > -----Original Message-----
> > From: Shreeya Patel [mailto:shreeya.patel23498 at gmail.com]
> > Sent: Sunday, June 30, 2019 00:32
> > To: skhan at linuxfoundation.org; corbet at lwn.net; Winkler, Tomas
> > <tomas.winkler at intel.com>; linux-doc at vger.kernel.org; linux-
> > kernel at vger.kernel.org; 
> > linux-kernel-mentees at lists.linuxfoundation.org
> > Subject: [PATCH] Documentation: misc-devices: mei: Convert mei txt
> > files to
> > reST
> > 
> > Convert the MEI misc device's documentation files from .txt to
> > reStructuredText format. Make a minor change of correcting the
> > wrong macro
> > name MEI_CONNECT_CLIENT_IOCTL to IOCTL_MEI_CONNECT_CLIENT.
> > Add an index file in mei as there are two sections for it in the
> > documentation.
> > 
> > Signed-off-by: Shreeya Patel <shreeya.patel23498 at gmail.com>
> > ---
> 
> Sorry you are late, we've already done that, it should be merged via
> Greg's char-misc tree.
> Thanks
> Tomas
> 
Oh okay.
Thanks
> 
> 
> > I am not sure if I have placed the Documentation in the right place
> > so I would
> > like to get some suggestions from the MAINTAINERS on this part.
> > 
> >  Documentation/misc-devices/index.rst          |   1 +
> >  Documentation/misc-devices/mei/index.rst      |  15 +
> >  .../misc-devices/mei/mei-client-bus.rst       | 151 +++++++++
> >  .../misc-devices/mei/mei-client-bus.txt       | 141 ---------
> >  Documentation/misc-devices/mei/mei.rst        | 289
> > ++++++++++++++++++
> >  Documentation/misc-devices/mei/mei.txt        | 266 --------------
> > --
> >  6 files changed, 456 insertions(+), 407 deletions(-)  create mode
> > 100644
> > Documentation/misc-devices/mei/index.rst
> >  create mode 100644 Documentation/misc-devices/mei/mei-client-
> > bus.rst
> >  delete mode 100644 Documentation/misc-devices/mei/mei-client-
> > bus.txt
> >  create mode 100644 Documentation/misc-devices/mei/mei.rst
> >  delete mode 100644 Documentation/misc-devices/mei/mei.txt
> > 
> > diff --git a/Documentation/misc-devices/index.rst
> > b/Documentation/misc-
> > devices/index.rst
> > index dfd1f45a3127..e788a12b2b19 100644
> > --- a/Documentation/misc-devices/index.rst
> > +++ b/Documentation/misc-devices/index.rst
> > @@ -15,3 +15,4 @@ fit into other categories.
> >     :maxdepth: 2
> > 
> >     ibmvmc
> > +   mei/index
> > diff --git a/Documentation/misc-devices/mei/index.rst
> > b/Documentation/misc-
> > devices/mei/index.rst
> > new file mode 100644
> > index 000000000000..3018098ad075
> > --- /dev/null
> > +++ b/Documentation/misc-devices/mei/index.rst
> > @@ -0,0 +1,15 @@
> > +.. SPDX-License-Identifier: GPL-2.0
> > +
> > +===============================================================
> > ==
> > +Intel(R) Management Engine Interface Kernel Driver (Intel(R) MEI)
> > +===============================================================
> > ==
> > +
> > +.. class:: toc-title
> > +
> > +           Table of contents
> > +
> > +.. toctree::
> > +   :maxdepth: 2
> > +
> > +   mei
> > +   mei-client-bus
> > diff --git a/Documentation/misc-devices/mei/mei-client-bus.rst
> > b/Documentation/misc-devices/mei/mei-client-bus.rst
> > new file mode 100644
> > index 000000000000..82d455afae78
> > --- /dev/null
> > +++ b/Documentation/misc-devices/mei/mei-client-bus.rst
> > @@ -0,0 +1,151 @@
> > +.. SPDX-License-Identifier: GPL-2.0
> > +
> > +==============================================
> > +Intel(R) Management Engine (ME) Client bus API
> > +==============================================
> > +
> > +
> > +Rationale
> > +=========
> > +
> > +MEI misc character device is useful for dedicated applications to
> > send
> > +and receive data to the many FW appliance found in Intel's ME from
> > the user
> > space.
> > +However for some of the ME functionalities it make sense to
> > leverage
> > +existing software stack and expose them through existing kernel
> > subsystems.
> > +
> > +In order to plug seamlessly into the kernel device driver model we
> > add
> > +kernel virtual bus abstraction on top of the MEI driver. This
> > allows
> > +implementing linux kernel drivers for the various MEI features as
> > a stand
> > alone entities found in their respective subsystem.
> > +Existing device drivers can even potentially be re-used by adding
> > an
> > +MEI CL bus layer to the existing code.
> > +
> > +
> > +MEI CL bus API
> > +==============
> > +
> > +A driver implementation for an MEI Client is very similar to
> > existing
> > +bus based device drivers. The driver registers itself as an MEI CL
> > bus
> > +driver through the :c:type:`mei_cl_driver` structure:
> > +
> > +::
> > +
> > +        struct mei_cl_driver {
> > +	        struct device_driver driver;
> > +	        const char *name;
> > +
> > +	        const struct mei_cl_device_id *id_table;
> > +
> > +	        int (*probe)(struct mei_cl_device *dev, const struct
> > mei_cl_id
> > *id);
> > +	        int (*remove)(struct mei_cl_device *dev);
> > +        };
> > +
> > +        struct mei_cl_id {
> > +	        char name[MEI_NAME_SIZE];
> > +	        kernel_ulong_t driver_info;
> > +        };
> > +
> > +
> > +The :c:type:`mei_cl_id` structure allows the driver to bind itself
> > against a
> > device name.
> > +
> > +To actually register a driver on the ME Client bus one must call
> > the
> > +:c:func:`mei_cl_add_driver()` API. This is typically called at
> > module init time.
> > +
> > +Once registered on the ME Client bus, a driver will typically try
> > to do
> > +some I/O on this bus and this should be done through the
> > +:c:func:`mei_cl_send()` and :c:func:`mei_cl_recv()` routines. The
> > latter is
> > synchronous (blocks and sleeps until data shows up).
> > +In order for drivers to be notified of pending events waiting for
> > them (e.g.
> > +an Rx event) they can register an event handler through the
> > +:c:func:`mei_cl_register_event_cb()` routine. Currently only the
> > +:c:macro:`MEI_EVENT_RX` event will trigger an event handler call
> > and
> > +the driver implementation is supposed to call :c:func:`mei_recv()`
> > from
> > +the event handler in order to fetch the pending received buffers.
> > +
> > +
> > +Example
> > +=======
> > +
> > +As a theoretical example let's pretend the ME comes with a
> > "contact" NFC IP.
> > +The driver init and exit routines for this device would look like:
> > +
> > +::
> > +
> > +        #define CONTACT_DRIVER_NAME "contact"
> > +
> > +        static struct mei_cl_device_id contact_mei_cl_tbl[] = {
> > +	        { CONTACT_DRIVER_NAME, },
> > +	        /* required last entry */
> > +	        { }
> > +        };
> > +        MODULE_DEVICE_TABLE(mei_cl, contact_mei_cl_tbl);
> > +
> > +        static struct mei_cl_driver contact_driver = {
> > +	        .id_table = contact_mei_tbl,
> > +	        .name = CONTACT_DRIVER_NAME,
> > +	        .probe = contact_probe,
> > +	        .remove = contact_remove,
> > +        };
> > +
> > +        static int contact_init(void)
> > +        {
> > +	        int r;
> > +
> > +	        r = mei_cl_driver_register(&contact_driver);
> > +	        if (r) {
> > +		        pr_err(CONTACT_DRIVER_NAME ": driver
> > registration
> > failed\n");
> > +		        return r;
> > +	        }
> > +
> > +	        return 0;
> > +        }
> > +
> > +        static void __exit contact_exit(void)
> > +        {
> > +	        mei_cl_driver_unregister(&contact_driver);
> > +        }
> > +
> > +        module_init(contact_init);
> > +        module_exit(contact_exit);
> > +
> > +And the driver's simplified probe routine would look like that:
> > +
> > +::
> > +
> > +        int contact_probe(struct mei_cl_device *dev, struct
> > mei_cl_device_id
> > *id)
> > +        {
> > +	        struct contact_driver *contact;
> > +
> > +	        [...]
> > +	        mei_cl_enable_device(dev);
> > +
> > +	        mei_cl_register_event_cb(dev, contact_event_cb,
> > contact);
> > +
> > +	        return 0;
> > +        }
> > +
> > +In the probe routine the driver first enable the MEI device and
> > then
> > +registers an ME bus event handler which is as close as it can get
> > to
> > +registering a threaded IRQ handler.
> > +The handler implementation will typically call some I/O routine
> > +depending on the pending events:
> > +
> > +::
> > +
> > +        #define MAX_NFC_PAYLOAD 128
> > +
> > +        static void contact_event_cb(struct mei_cl_device *dev,
> > u32 events,
> > +                                     void *context)
> > +        {
> > +	        struct contact_driver *contact = context;
> > +
> > +	        if (events & BIT(MEI_EVENT_RX)) {
> > +		        u8 payload[MAX_NFC_PAYLOAD];
> > +		        int payload_size;
> > +
> > +		        payload_size = mei_recv(dev, payload,
> > MAX_NFC_PAYLOAD);
> > +		        if (payload_size <= 0)
> > +			        return;
> > +
> > +		        /* Hook to the NFC subsystem */
> > +		        nfc_hci_recv_frame(contact->hdev, payload,
> > payload_size);
> > +	        }
> > +        }
> > diff --git a/Documentation/misc-devices/mei/mei-client-bus.txt
> > b/Documentation/misc-devices/mei/mei-client-bus.txt
> > deleted file mode 100644
> > index 743be4ec8989..000000000000
> > --- a/Documentation/misc-devices/mei/mei-client-bus.txt
> > +++ /dev/null
> > @@ -1,141 +0,0 @@
> > -Intel(R) Management Engine (ME) Client bus API -
> > ==============================================
> > -
> > -
> > -Rationale
> > -=========
> > -
> > -MEI misc character device is useful for dedicated applications to
> > send and
> > receive -data to the many FW appliance found in Intel's ME from the
> > user
> > space.
> > -However for some of the ME functionalities it make sense to
> > leverage existing
> > software -stack and expose them through existing kernel subsystems.
> > -
> > -In order to plug seamlessly into the kernel device driver model we
> > add kernel
> > virtual -bus abstraction on top of the MEI driver. This allows
> > implementing linux
> > kernel drivers -for the various MEI features as a stand alone
> > entities found in
> > their respective subsystem.
> > -Existing device drivers can even potentially be re-used by adding
> > an MEI CL
> > bus layer to -the existing code.
> > -
> > -
> > -MEI CL bus API
> > -==============
> > -
> > -A driver implementation for an MEI Client is very similar to
> > existing bus -based
> > device drivers. The driver registers itself as an MEI CL bus driver
> > through -the
> > mei_cl_driver structure:
> > -
> > -struct mei_cl_driver {
> > -	struct device_driver driver;
> > -	const char *name;
> > -
> > -	const struct mei_cl_device_id *id_table;
> > -
> > -	int (*probe)(struct mei_cl_device *dev, const struct mei_cl_id
> > *id);
> > -	int (*remove)(struct mei_cl_device *dev);
> > -};
> > -
> > -struct mei_cl_id {
> > -	char name[MEI_NAME_SIZE];
> > -	kernel_ulong_t driver_info;
> > -};
> > -
> > -The mei_cl_id structure allows the driver to bind itself against a
> > device name.
> > -
> > -To actually register a driver on the ME Client bus one must call
> > the
> > mei_cl_add_driver() -API. This is typically called at module init
> > time.
> > -
> > -Once registered on the ME Client bus, a driver will typically try
> > to do some I/O
> > on -this bus and this should be done through the mei_cl_send() and
> > mei_cl_recv() -routines. The latter is synchronous (blocks and
> > sleeps until data
> > shows up).
> > -In order for drivers to be notified of pending events waiting for
> > them (e.g.
> > -an Rx event) they can register an event handler through the
> > -mei_cl_register_event_cb() routine. Currently only the
> > MEI_EVENT_RX event -
> > will trigger an event handler call and the driver implementation is
> > supposed -to
> > call mei_recv() from the event handler in order to fetch the
> > pending -received
> > buffers.
> > -
> > -
> > -Example
> > -=======
> > -
> > -As a theoretical example let's pretend the ME comes with a
> > "contact" NFC IP.
> > -The driver init and exit routines for this device would look like:
> > -
> > -#define CONTACT_DRIVER_NAME "contact"
> > -
> > -static struct mei_cl_device_id contact_mei_cl_tbl[] = {
> > -	{ CONTACT_DRIVER_NAME, },
> > -
> > -	/* required last entry */
> > -	{ }
> > -};
> > -MODULE_DEVICE_TABLE(mei_cl, contact_mei_cl_tbl);
> > -
> > -static struct mei_cl_driver contact_driver = {
> > -	.id_table = contact_mei_tbl,
> > -	.name = CONTACT_DRIVER_NAME,
> > -
> > -	.probe = contact_probe,
> > -	.remove = contact_remove,
> > -};
> > -
> > -static int contact_init(void)
> > -{
> > -	int r;
> > -
> > -	r = mei_cl_driver_register(&contact_driver);
> > -	if (r) {
> > -		pr_err(CONTACT_DRIVER_NAME ": driver registration
> > failed\n");
> > -		return r;
> > -	}
> > -
> > -	return 0;
> > -}
> > -
> > -static void __exit contact_exit(void)
> > -{
> > -	mei_cl_driver_unregister(&contact_driver);
> > -}
> > -
> > -module_init(contact_init);
> > -module_exit(contact_exit);
> > -
> > -And the driver's simplified probe routine would look like that:
> > -
> > -int contact_probe(struct mei_cl_device *dev, struct
> > mei_cl_device_id *id) -{
> > -	struct contact_driver *contact;
> > -
> > -	[...]
> > -	mei_cl_enable_device(dev);
> > -
> > -	mei_cl_register_event_cb(dev, contact_event_cb, contact);
> > -
> > -	return 0;
> > -}
> > -
> > -In the probe routine the driver first enable the MEI device and
> > then registers -
> > an ME bus event handler which is as close as it can get to
> > registering a -
> > threaded IRQ handler.
> > -The handler implementation will typically call some I/O routine
> > depending on -
> > the pending events:
> > -
> > -#define MAX_NFC_PAYLOAD 128
> > -
> > -static void contact_event_cb(struct mei_cl_device *dev, u32
> > events,
> > -			     void *context)
> > -{
> > -	struct contact_driver *contact = context;
> > -
> > -	if (events & BIT(MEI_EVENT_RX)) {
> > -		u8 payload[MAX_NFC_PAYLOAD];
> > -		int payload_size;
> > -
> > -		payload_size = mei_recv(dev, payload, MAX_NFC_PAYLOAD);
> > -		if (payload_size <= 0)
> > -			return;
> > -
> > -		/* Hook to the NFC subsystem */
> > -		nfc_hci_recv_frame(contact->hdev, payload,
> > payload_size);
> > -	}
> > -}
> > diff --git a/Documentation/misc-devices/mei/mei.rst
> > b/Documentation/misc-
> > devices/mei/mei.rst
> > new file mode 100644
> > index 000000000000..e91ac2570b4d
> > --- /dev/null
> > +++ b/Documentation/misc-devices/mei/mei.rst
> > @@ -0,0 +1,289 @@
> > +.. SPDX-License-Identifier: GPL-2.0
> > +
> > +====================================
> > +Intel(R) Management Engine Interface
> > +====================================
> > +
> > +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 :file:`/dev/mei`.
> > +
> > +An application maintains communication with an Intel ME feature
> > while
> > +:file:`/dev/mei` is open. The binding to a specific feature is
> > +performed by calling :c:macro:`IOCTL_MEI_CONNECT_CLIENT`, 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:
> > +
> > +
> > +:c:macro:`IOCTL_MEI_CONNECT_CLIENT`
> > +-------------------------------------
> > +Connect to firmware Feature (client)
> > +
> > +**Usage:**
> > +
> > +::
> > +
> > +        struct mei_connect_client_data clientData;
> > +        ioctl(fd, IOCTL_MEI_CONNECT_CLIENT, &clientData);
> > +
> > +**Inputs:**
> > +        :c:type:`mei_connect_client_data` - structure contain the
> > following
> > +        input field.
> > +
> > +        :c:data:`in_client_uuid` - UUID of the FW Feature that
> > needs to connect
> > to.
> > +
> > +**Outputs:**
> > +        :c:data:`out_client_properties` - Client Properties: MTU
> > and Protocol
> > Version.
> > +
> > +**Error returns:**
> > +        | :c:macro:`EINVAL` -  Wrong IOCTL Number.
> > +        | :c:macro:`ENODEV` -  Device or Connection is not
> > initialized or ready.
> > (e.g. Wrong UUID).
> > +        | :c:macro:`ENOMEM` - Unable to allocate memory to client
> > internal
> > data.
> > +        | :c:macro:`EFAULT` -  Fatal Error (e.g. Unable to access
> > user input data).
> > +        | :c:macro:`EBUSY` -  Connection Already Open.
> > +
> > +**Notes:**
> > +        :c:data:`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).
> > +
> > +
> > +:c:macro:`IOCTL_MEI_NOTIFY_SET`
> > +-------------------------------
> > +Enable or disable event notifications
> > +
> > +**Usage:**
> > +
> > +::
> > +
> > +        uint32_t enable;
> > +        ioctl(fd, IOCTL_MEI_NOTIFY_SET, &enable);
> > +
> > +**Inputs:**
> > +        | :c:data:`uint32_t enable = 1;`
> > +        | or
> > +        | :c:data:`uint32_t enable[disable] = 0;`
> > +
> > +**Error returns:**
> > +        | :c:macro:`EINVAL` - Wrong IOCTL Number.
> > +        | :c:macro:`ENODEV` - Device  is not initialized or the
> > client not
> > connected.
> > +        | :c:macro:`ENOMEM` - Unable to allocate memory to client
> > internal
> > data.
> > +        | :c:macro:`EFAULT` - Fatal Error (e.g. Unable to access
> > user input data).
> > +        | :c:macro:`EOPNOTSUPP` - if the device doesn't support
> > the feature.
> > +
> > +**Notes:**
> > +        The client must be connected in order to enable
> > notification events.
> > +
> > +
> > +:c:macro:`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:**
> > +        | :c:macro:`EINVAL` - Wrong IOCTL Number.
> > +        | :c:macro:`ENODEV` - Device is not initialized or the
> > client not
> > connected.
> > +        | :c:macro:`ENOMEM` - Unable to allocate memory to client
> > internal
> > data.
> > +        | :c:macro:`EFAULT` - Fatal Error (e.g. Unable to access
> > user input data).
> > +        | :c:macro:`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_Re
> > ference_Guide>`_
> > +        Under "About Intel AMT" => "Local Access"
> > +
> > +        For downloading Intel LMS:
> > +
> > + `<
> > http://software.intel.com/en-us/articles/download-the-latest-intel-a
> > + mt-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_Ref
> > erence_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_Re
> > ference_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,	impleme
> > nting a local
> > agent
> > +        that accesses the Intel MEI driver, can be found here:
> > +
> > + `<
> > http://software.intel.com/en-us/articles/download-the-latest-intel-a
> > + mt-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 at linux.intel.com
> > diff --git a/Documentation/misc-devices/mei/mei.txt
> > b/Documentation/misc-
> > devices/mei/mei.txt
> > deleted file mode 100644
> > index 2b80a0cd621f..000000000000
> > --- a/Documentation/misc-devices/mei/mei.txt
> > +++ /dev/null
> > @@ -1,266 +0,0 @@
> > -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_Refe
> > rence_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_Refe
> > rence_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_Refe
> > rence_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_Refe
> > rence_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,	implementin
> > g 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 at linux.intel.com
> > --
> > 2.17.1
> 
> 



More information about the Linux-kernel-mentees mailing list