/* SPDX-License-Identifier: GPL-2.0 */ /* Copyright (C) 2023-2026 Intel Corporation */ #ifndef _ISSEI_HW_MSG_H_ #define _ISSEI_HW_MSG_H_ #include #include #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_ */