/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (C) 2026, Advanced Micro Devices, Inc. */ #ifndef _AIE4_MSG_PRIV_H_ #define _AIE4_MSG_PRIV_H_ #include #include enum aie4_msg_opcode { AIE4_MSG_OP_SUSPEND = 0x10003, AIE4_MSG_OP_ATTACH_WORK_BUFFER = 0x1000D, AIE4_MSG_OP_CREATE_VFS = 0x20001, AIE4_MSG_OP_DESTROY_VFS = 0x20002, AIE4_MSG_OP_CREATE_PARTITION = 0x30001, AIE4_MSG_OP_DESTROY_PARTITION = 0x30002, AIE4_MSG_OP_CREATE_HW_CONTEXT = 0x30003, AIE4_MSG_OP_DESTROY_HW_CONTEXT = 0x30004, AIE4_MSG_OP_AIE_TILE_INFO = 0x30006, }; enum aie4_msg_status { AIE4_MSG_STATUS_SUCCESS = 0x0, AIE4_MSG_STATUS_ERROR = 0x1, AIE4_MSG_STATUS_NOTSUPP = 0x2, MAX_AIE4_MSG_STATUS_CODE = 0x4, }; struct aie4_msg_suspend_req { __u32 rsvd; } __packed; struct aie4_msg_suspend_resp { enum aie4_msg_status status; } __packed; struct aie4_msg_create_vfs_req { __u32 vf_cnt; } __packed; struct aie4_msg_create_vfs_resp { enum aie4_msg_status status; } __packed; struct aie4_msg_destroy_vfs_req { __u32 rsvd; } __packed; struct aie4_msg_destroy_vfs_resp { enum aie4_msg_status status; } __packed; struct aie4_msg_create_partition_req { __u32 partition_col_start; __u32 partition_col_count; } __packed; struct aie4_msg_create_partition_resp { enum aie4_msg_status status; __u32 partition_id; } __packed; struct aie4_msg_destroy_partition_req { __u32 partition_id; } __packed; struct aie4_msg_destroy_partition_resp { enum aie4_msg_status status; } __packed; struct aie4_msg_create_hw_context_req { __u32 partition_id; __u32 request_num_tiles; __u32 hsa_addr_high; __u32 hsa_addr_low; #define AIE4_MSG_PASID GENMASK(19, 0) #define AIE4_MSG_PASID_VLD GENMASK(31, 31) __u32 pasid; __u32 priority_band; } __packed; struct aie4_msg_create_hw_context_resp { enum aie4_msg_status status; __u32 hw_context_id; __u32 doorbell_offset; __u32 job_complete_msix_idx; } __packed; struct aie4_msg_destroy_hw_context_req { __u32 hw_context_id; __u32 resvd1; } __packed; struct aie4_msg_destroy_hw_context_resp { enum aie4_msg_status status; } __packed; struct aie4_tile_info { __u32 size; __u16 major; __u16 minor; __u16 cols; __u16 rows; __u16 core_rows; __u16 mem_rows; __u16 shim_rows; __u16 core_row_start; __u16 mem_row_start; __u16 shim_row_start; __u16 core_dma_channels; __u16 mem_dma_channels; __u16 shim_dma_channels; __u16 core_locks; __u16 mem_locks; __u16 shim_locks; __u16 core_events; __u16 mem_events; __u16 shim_events; __u16 resvd; } __packed; struct aie4_msg_aie4_tile_info_req { __u32 resvd; } __packed; struct aie4_msg_aie4_tile_info_resp { enum aie4_msg_status status; struct aie4_tile_info info; } __packed; #define AIE4_WORK_BUFFER_MIN_SIZE SZ_4M struct aie4_msg_attach_work_buffer_req { __u64 buff_addr; __u32 reserved; __u32 buff_size; } __packed; struct aie4_msg_attach_work_buffer_resp { enum aie4_msg_status status; } __packed; #endif /* _AIE4_MSG_PRIV_H_ */