1/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
  2/*
  3 * Copyright(c) 2003-2015 Intel Corporation. All rights reserved.
  4 * Intel Management Engine Interface (Intel MEI) Linux driver
  5 * Intel MEI Interface Header
  6 */
  7#ifndef _LINUX_MEI_H
  8#define _LINUX_MEI_H
  9
 10#include <linux/mei_uuid.h>
 11
 12/*
 13 * This IOCTL is used to associate the current file descriptor with a
 14 * FW Client (given by UUID). This opens a communication channel
 15 * between a host client and a FW client. From this point every read and write
 16 * will communicate with the associated FW client.
 17 * Only in close() (file_operation release()) is the communication between
 18 * the clients disconnected.
 19 *
 20 * The IOCTL argument is a struct with a union that contains
 21 * the input parameter and the output parameter for this IOCTL.
 22 *
 23 * The input parameter is UUID of the FW Client.
 24 * The output parameter is the properties of the FW client
 25 * (FW protocol version and max message size).
 26 *
 27 */
 28#define IOCTL_MEI_CONNECT_CLIENT \
 29	_IOWR('H' , 0x01, struct mei_connect_client_data)
 30
 31/*
 32 * Intel MEI client information struct
 33 */
 34struct mei_client {
 35	__u32 max_msg_length;
 36	__u8 protocol_version;
 37	__u8 reserved[3];
 38};
 39
 40/*
 41 * IOCTL Connect Client Data structure
 42 */
 43struct mei_connect_client_data {
 44	union {
 45		uuid_le in_client_uuid;
 46		struct mei_client out_client_properties;
 47	};
 48};
 49
 50/**
 51 * DOC: set and unset event notification for a connected client
 52 *
 53 * The IOCTL argument is 1 for enabling event notification and 0 for
 54 * disabling the service.
 55 * Return:  -EOPNOTSUPP if the devices doesn't support the feature
 56 */
 57#define IOCTL_MEI_NOTIFY_SET _IOW('H', 0x02, __u32)
 58
 59/**
 60 * DOC: retrieve notification
 61 *
 62 * The IOCTL output argument is 1 if an event was pending and 0 otherwise.
 63 * The ioctl has to be called in order to acknowledge pending event.
 64 *
 65 * Return:  -EOPNOTSUPP if the devices doesn't support the feature
 66 */
 67#define IOCTL_MEI_NOTIFY_GET _IOR('H', 0x03, __u32)
 68
 69/**
 70 * struct mei_connect_client_vtag - mei client information struct with vtag
 71 *
 72 * @in_client_uuid: UUID of client to connect
 73 * @vtag: virtual tag
 74 * @reserved: reserved for future use
 75 */
 76struct mei_connect_client_vtag {
 77	uuid_le in_client_uuid;
 78	__u8 vtag;
 79	__u8 reserved[3];
 80};
 81
 82/**
 83 * struct mei_connect_client_data_vtag - IOCTL connect data union
 84 *
 85 * @connect: input connect data
 86 * @out_client_properties: output client data
 87 */
 88struct mei_connect_client_data_vtag {
 89	union {
 90		struct mei_connect_client_vtag connect;
 91		struct mei_client out_client_properties;
 92	};
 93};
 94
 95/**
 96 * DOC:
 97 * This IOCTL is used to associate the current file descriptor with a
 98 * FW Client (given by UUID), and virtual tag (vtag).
 99 * The IOCTL opens a communication channel between a host client and
100 * a FW client on a tagged channel. From this point on, every read
101 * and write will communicate with the associated FW client
102 * on the tagged channel.
103 * Upon close() the communication is terminated.
104 *
105 * The IOCTL argument is a struct with a union that contains
106 * the input parameter and the output parameter for this IOCTL.
107 *
108 * The input parameter is UUID of the FW Client, a vtag [0,255].
109 * The output parameter is the properties of the FW client
110 * (FW protocol version and max message size).
111 *
112 * Clients that do not support tagged connection
113 * will respond with -EOPNOTSUPP.
114 */
115#define IOCTL_MEI_CONNECT_CLIENT_VTAG \
116	_IOWR('H', 0x04, struct mei_connect_client_data_vtag)
117
118#endif /* _LINUX_MEI_H  */