mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
The ISSEI (Intel Silicon Security Engine Interface) subsystem provides a communication channel between the host and the Silicon Security Engine. Prepare basic driver functions and character device for user-space communication. Add DMA access routines for ISSEI HECI devices. Add of DMA-related structures and implementation of routines for setting up DMA, as well as reading and writing DMA buffers. Reviewed-by: Karol Wachowski <karol.wachowski@linux.intel.com> Co-developed-by: Vitaly Lubart <lubvital@gmail.com> Signed-off-by: Vitaly Lubart <lubvital@gmail.com> Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com> Link: https://patch.msgid.link/20260513-issei-for-upstream-v1-1-f590038678f9@intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
164 lines
4.3 KiB
C
164 lines
4.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* Copyright (C) 2023-2026 Intel Corporation */
|
|
#ifndef _ISSEI_HW_MSG_H_
|
|
#define _ISSEI_HW_MSG_H_
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/uuid.h>
|
|
|
|
#define HAM_CB_MESSAGE_ID_REQ 0x8086cafe
|
|
#define HAM_CB_MESSAGE_ID_RES 0xcafe8086
|
|
#define HAM_CB_MESSAGE_VER 0x1
|
|
|
|
/**
|
|
* struct ham_setup_shared_memory_req - shared memory setup request
|
|
* @msg_id: message id, should be %HAM_CB_MESSAGE_ID_REQ
|
|
* @ver: message version (%HAM_CB_MESSAGE_VER)
|
|
* @reserved: reserved
|
|
* @buffer_physical_address: physical address of DMA buffer
|
|
* @host_to_fw_section_length: memory size for host to fw communication
|
|
* @fw_to_host_section_length: memory size for fw to host communication
|
|
* @control_length: memory size for control buffer
|
|
*/
|
|
struct ham_setup_shared_memory_req {
|
|
u32 msg_id;
|
|
u16 ver;
|
|
u16 reserved;
|
|
u64 buffer_physical_address;
|
|
u32 host_to_fw_section_length;
|
|
u32 fw_to_host_section_length;
|
|
u32 control_length;
|
|
} __packed __aligned(4);
|
|
|
|
/**
|
|
* struct ham_setup_shared_memory_res - shared memory setup response
|
|
* @msg_id: message id, should be %HAM_CB_MESSAGE_ID_RES
|
|
* @status: operation status
|
|
*/
|
|
struct ham_setup_shared_memory_res {
|
|
u32 msg_id;
|
|
u32 status;
|
|
};
|
|
|
|
/**
|
|
* struct control_buffer - control buffer structure
|
|
* @h2f_counter_wr: write counter host to fw
|
|
* @h2f_counter_rd: read counter host to fw
|
|
* @f2h_counter_wr: write counter fw to host
|
|
* @f2h_counter_rd: read counter fw to host
|
|
*/
|
|
struct control_buffer {
|
|
u32 h2f_counter_wr;
|
|
u32 h2f_counter_rd;
|
|
u32 f2h_counter_wr;
|
|
u32 f2h_counter_rd;
|
|
};
|
|
|
|
/* HAM messages over DMA */
|
|
|
|
/**
|
|
* struct ham_message_header - message header over DMA
|
|
* @length: message length (payload only, not including header)
|
|
* @fw_id: firmware client id (0 means Bus Message)
|
|
* @host_id: host client id (0 means Bus Message)
|
|
* @flags: message flags
|
|
* @status: operation status
|
|
* @reserved: reserved
|
|
*/
|
|
struct ham_message_header {
|
|
u32 length;
|
|
u16 fw_id;
|
|
u16 host_id;
|
|
u32 flags;
|
|
u32 status;
|
|
u32 reserved;
|
|
};
|
|
|
|
/* Bus Commands */
|
|
#define HAM_BUS_CMD_START_REQ 0x00
|
|
#define HAM_BUS_CMD_START_RSP 0x80
|
|
#define HAM_BUS_CMD_CLIENT_REQ 0x01
|
|
#define HAM_BUS_CMD_CLIENT_RSP 0x81
|
|
|
|
/**
|
|
* struct ham_bus_message - bus message header
|
|
* @cmd: command code
|
|
*/
|
|
struct ham_bus_message {
|
|
u32 cmd;
|
|
};
|
|
|
|
#define HAM_SUPPORTED_VERSION 0x01
|
|
|
|
/**
|
|
* struct ham_start_message_req - start message
|
|
* @header: bus message header (%HAM_BUS_CMD_START_REQ)
|
|
* @supported_version: supported protocol version
|
|
* @heci_capabilities_length: protocol capabilities length in bytes
|
|
* @heci_capabilities: protocol capabilities data
|
|
*/
|
|
struct ham_start_message_req {
|
|
struct ham_bus_message header;
|
|
u16 supported_version;
|
|
u8 heci_capabilities_length;
|
|
u8 heci_capabilities[] __counted_by(heci_capabilities_length);
|
|
} __packed;
|
|
|
|
/**
|
|
* struct ham_start_message_res - start message response
|
|
* @header: bus message header (%HAM_BUS_CMD_START_RSP)
|
|
* @fw_version: firmware version (four u16 blocks)
|
|
* @supported_version: supported protocol version
|
|
* @heci_capabilities_length: protocol capabilities length in bytes
|
|
* @heci_capabilities: protocol capabilities data
|
|
*/
|
|
struct ham_start_message_res {
|
|
struct ham_bus_message header;
|
|
u16 fw_version[4];
|
|
u16 supported_version;
|
|
u8 heci_capabilities_length;
|
|
u8 heci_capabilities[] __counted_by(heci_capabilities_length);
|
|
} __packed;
|
|
|
|
/**
|
|
* struct ham_get_clients_req - clients list request
|
|
* @header: bus message header (%HAM_BUS_CMD_CLIENT_REQ)
|
|
*/
|
|
struct ham_get_clients_req {
|
|
struct ham_bus_message header;
|
|
};
|
|
|
|
/**
|
|
* struct ham_client_properties - single client properties
|
|
* @client_number: client id in firmware
|
|
* @protocol_ver: client protocol version
|
|
* @reserved: reserved
|
|
* @client_uuid: protocol name (UUID)
|
|
* @client_mtu: max message length supported by client
|
|
* @flags: client flags
|
|
*/
|
|
struct ham_client_properties {
|
|
u16 client_number;
|
|
u8 protocol_ver;
|
|
u8 reserved;
|
|
uuid_t client_uuid;
|
|
u32 client_mtu;
|
|
u32 flags;
|
|
};
|
|
|
|
/**
|
|
* struct ham_get_clients_res - client properties response
|
|
* @header: bus message header (%HAM_BUS_CMD_CLIENT_RSP)
|
|
* @client_count: number of clients in firmware
|
|
* @reserved: reserved
|
|
* @clients_props: list of client properties
|
|
*/
|
|
struct ham_get_clients_res {
|
|
struct ham_bus_message header;
|
|
u16 client_count;
|
|
u16 reserved;
|
|
struct ham_client_properties clients_props[] __counted_by(client_count);
|
|
};
|
|
|
|
#endif /* _ISSEI_HW_MSG_H_ */
|