| /* 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_ */ |