1c02697cbSDavid Zhang /* SPDX-License-Identifier: GPL-2.0 */ 2c02697cbSDavid Zhang /* 3c02697cbSDavid Zhang * Copyright (C) 2026, Advanced Micro Devices, Inc. 4c02697cbSDavid Zhang */ 5c02697cbSDavid Zhang 6c02697cbSDavid Zhang #ifndef _AIE4_MSG_PRIV_H_ 7c02697cbSDavid Zhang #define _AIE4_MSG_PRIV_H_ 8c02697cbSDavid Zhang 9*c0069781SNishad Saraf #include <linux/sizes.h> 10c02697cbSDavid Zhang #include <linux/types.h> 11c02697cbSDavid Zhang 12c02697cbSDavid Zhang enum aie4_msg_opcode { 13c02697cbSDavid Zhang AIE4_MSG_OP_SUSPEND = 0x10003, 14*c0069781SNishad Saraf AIE4_MSG_OP_ATTACH_WORK_BUFFER = 0x1000D, 15c02697cbSDavid Zhang 16c02697cbSDavid Zhang AIE4_MSG_OP_CREATE_VFS = 0x20001, 17c02697cbSDavid Zhang AIE4_MSG_OP_DESTROY_VFS = 0x20002, 18ce9414d0SDavid Zhang 19ce9414d0SDavid Zhang AIE4_MSG_OP_CREATE_PARTITION = 0x30001, 20ce9414d0SDavid Zhang AIE4_MSG_OP_DESTROY_PARTITION = 0x30002, 2119361279SDavid Zhang AIE4_MSG_OP_CREATE_HW_CONTEXT = 0x30003, 2219361279SDavid Zhang AIE4_MSG_OP_DESTROY_HW_CONTEXT = 0x30004, 230b087e06SDavid Zhang AIE4_MSG_OP_AIE_TILE_INFO = 0x30006, 24c02697cbSDavid Zhang }; 25c02697cbSDavid Zhang 26c02697cbSDavid Zhang enum aie4_msg_status { 27c02697cbSDavid Zhang AIE4_MSG_STATUS_SUCCESS = 0x0, 28c02697cbSDavid Zhang AIE4_MSG_STATUS_ERROR = 0x1, 29c02697cbSDavid Zhang AIE4_MSG_STATUS_NOTSUPP = 0x2, 30c02697cbSDavid Zhang MAX_AIE4_MSG_STATUS_CODE = 0x4, 31c02697cbSDavid Zhang }; 32c02697cbSDavid Zhang 33c02697cbSDavid Zhang struct aie4_msg_suspend_req { 34c02697cbSDavid Zhang __u32 rsvd; 35c02697cbSDavid Zhang } __packed; 36c02697cbSDavid Zhang 37c02697cbSDavid Zhang struct aie4_msg_suspend_resp { 38c02697cbSDavid Zhang enum aie4_msg_status status; 39c02697cbSDavid Zhang } __packed; 40c02697cbSDavid Zhang 41c02697cbSDavid Zhang struct aie4_msg_create_vfs_req { 42c02697cbSDavid Zhang __u32 vf_cnt; 43c02697cbSDavid Zhang } __packed; 44c02697cbSDavid Zhang 45c02697cbSDavid Zhang struct aie4_msg_create_vfs_resp { 46c02697cbSDavid Zhang enum aie4_msg_status status; 47c02697cbSDavid Zhang } __packed; 48c02697cbSDavid Zhang 49c02697cbSDavid Zhang struct aie4_msg_destroy_vfs_req { 50c02697cbSDavid Zhang __u32 rsvd; 51c02697cbSDavid Zhang } __packed; 52c02697cbSDavid Zhang 53c02697cbSDavid Zhang struct aie4_msg_destroy_vfs_resp { 54c02697cbSDavid Zhang enum aie4_msg_status status; 55c02697cbSDavid Zhang } __packed; 56c02697cbSDavid Zhang 57ce9414d0SDavid Zhang struct aie4_msg_create_partition_req { 58ce9414d0SDavid Zhang __u32 partition_col_start; 59ce9414d0SDavid Zhang __u32 partition_col_count; 60ce9414d0SDavid Zhang } __packed; 61ce9414d0SDavid Zhang 62ce9414d0SDavid Zhang struct aie4_msg_create_partition_resp { 63ce9414d0SDavid Zhang enum aie4_msg_status status; 64ce9414d0SDavid Zhang __u32 partition_id; 65ce9414d0SDavid Zhang } __packed; 66ce9414d0SDavid Zhang 67ce9414d0SDavid Zhang struct aie4_msg_destroy_partition_req { 68ce9414d0SDavid Zhang __u32 partition_id; 69ce9414d0SDavid Zhang } __packed; 70ce9414d0SDavid Zhang 71ce9414d0SDavid Zhang struct aie4_msg_destroy_partition_resp { 72ce9414d0SDavid Zhang enum aie4_msg_status status; 73ce9414d0SDavid Zhang } __packed; 74ce9414d0SDavid Zhang 7519361279SDavid Zhang struct aie4_msg_create_hw_context_req { 7619361279SDavid Zhang __u32 partition_id; 7719361279SDavid Zhang __u32 request_num_tiles; 7819361279SDavid Zhang __u32 hsa_addr_high; 7919361279SDavid Zhang __u32 hsa_addr_low; 8019361279SDavid Zhang #define AIE4_MSG_PASID GENMASK(19, 0) 8119361279SDavid Zhang #define AIE4_MSG_PASID_VLD GENMASK(31, 31) 8219361279SDavid Zhang __u32 pasid; 8319361279SDavid Zhang __u32 priority_band; 8419361279SDavid Zhang } __packed; 8519361279SDavid Zhang 8619361279SDavid Zhang struct aie4_msg_create_hw_context_resp { 8719361279SDavid Zhang enum aie4_msg_status status; 8819361279SDavid Zhang __u32 hw_context_id; 8919361279SDavid Zhang __u32 doorbell_offset; 9019361279SDavid Zhang __u32 job_complete_msix_idx; 9119361279SDavid Zhang } __packed; 9219361279SDavid Zhang 9319361279SDavid Zhang struct aie4_msg_destroy_hw_context_req { 9419361279SDavid Zhang __u32 hw_context_id; 9519361279SDavid Zhang __u32 resvd1; 9619361279SDavid Zhang } __packed; 9719361279SDavid Zhang 9819361279SDavid Zhang struct aie4_msg_destroy_hw_context_resp { 9919361279SDavid Zhang enum aie4_msg_status status; 10019361279SDavid Zhang } __packed; 10119361279SDavid Zhang 1020b087e06SDavid Zhang struct aie4_tile_info { 1030b087e06SDavid Zhang __u32 size; 1040b087e06SDavid Zhang __u16 major; 1050b087e06SDavid Zhang __u16 minor; 1060b087e06SDavid Zhang __u16 cols; 1070b087e06SDavid Zhang __u16 rows; 1080b087e06SDavid Zhang __u16 core_rows; 1090b087e06SDavid Zhang __u16 mem_rows; 1100b087e06SDavid Zhang __u16 shim_rows; 1110b087e06SDavid Zhang __u16 core_row_start; 1120b087e06SDavid Zhang __u16 mem_row_start; 1130b087e06SDavid Zhang __u16 shim_row_start; 1140b087e06SDavid Zhang __u16 core_dma_channels; 1150b087e06SDavid Zhang __u16 mem_dma_channels; 1160b087e06SDavid Zhang __u16 shim_dma_channels; 1170b087e06SDavid Zhang __u16 core_locks; 1180b087e06SDavid Zhang __u16 mem_locks; 1190b087e06SDavid Zhang __u16 shim_locks; 1200b087e06SDavid Zhang __u16 core_events; 1210b087e06SDavid Zhang __u16 mem_events; 1220b087e06SDavid Zhang __u16 shim_events; 1230b087e06SDavid Zhang __u16 resvd; 1240b087e06SDavid Zhang } __packed; 1250b087e06SDavid Zhang 1260b087e06SDavid Zhang struct aie4_msg_aie4_tile_info_req { 1270b087e06SDavid Zhang __u32 resvd; 1280b087e06SDavid Zhang } __packed; 1290b087e06SDavid Zhang 1300b087e06SDavid Zhang struct aie4_msg_aie4_tile_info_resp { 1310b087e06SDavid Zhang enum aie4_msg_status status; 1320b087e06SDavid Zhang struct aie4_tile_info info; 1330b087e06SDavid Zhang } __packed; 1340b087e06SDavid Zhang 135*c0069781SNishad Saraf #define AIE4_WORK_BUFFER_MIN_SIZE SZ_4M 136*c0069781SNishad Saraf 137*c0069781SNishad Saraf struct aie4_msg_attach_work_buffer_req { 138*c0069781SNishad Saraf __u64 buff_addr; 139*c0069781SNishad Saraf __u32 reserved; 140*c0069781SNishad Saraf __u32 buff_size; 141*c0069781SNishad Saraf } __packed; 142*c0069781SNishad Saraf 143*c0069781SNishad Saraf struct aie4_msg_attach_work_buffer_resp { 144*c0069781SNishad Saraf enum aie4_msg_status status; 145*c0069781SNishad Saraf } __packed; 146*c0069781SNishad Saraf 147c02697cbSDavid Zhang #endif /* _AIE4_MSG_PRIV_H_ */ 148