1 /* SPDX-License-Identifier: BSD-2-Clause */ 2 /* 3 * Copyright (c) 2024-2026, Advanced Micro Devices, Inc. All Rights Reserved. 4 * 5 */ 6 7 #ifndef __ASU_CLIENT_H_ 8 #define __ASU_CLIENT_H_ 9 10 #include <drivers/amd/asu_sharedmem.h> 11 #include <tee_api_types.h> 12 #include <util.h> 13 14 #define ASU_PRIORITY_LOW 1 15 #define ASU_PRIORITY_HIGH 0 16 #define ASU_MODULE_SHA2_ID 1U 17 #define ASU_MODULE_SHA3_ID 2U 18 19 struct asu_client_params { 20 TEE_Result (*cbhandler)(void *cbrefptr, struct asu_resp_buf *resp); 21 void *cbptr; 22 uint8_t priority; 23 }; 24 25 static inline uint8_t asu_get_unique_id(uint32_t header) 26 { 27 return (uint8_t)((header & ASU_UNIQUE_REQ_ID_MASK) >> 28 ASU_UNIQUE_REQ_ID_SHIFT); 29 } 30 31 static inline uint32_t asu_create_header(uint8_t cmd_id, 32 uint8_t unique_id, 33 uint8_t module_id, 34 uint8_t command_len) 35 { 36 uint32_t header = 0; 37 38 header = (cmd_id & ASU_COMMAND_ID_MASK) | 39 SHIFT_U32(unique_id, ASU_UNIQUE_REQ_ID_SHIFT) | 40 SHIFT_U32(module_id, ASU_MODULE_ID_SHIFT) | 41 SHIFT_U32(command_len, ASU_COMMAND_LENGTH_SHIFT); 42 43 return header; 44 } 45 46 TEE_Result asu_update_queue_buffer_n_send_ipi(struct asu_client_params *param, 47 void *req_buffer, 48 uint32_t size, 49 uint32_t header, 50 uint32_t *status); 51 uint8_t asu_reg_callback_n_get_unique_id(struct asu_client_params *param, 52 uint8_t *resp_buffer_ptr, 53 uint32_t size); 54 void asu_update_callback_details(uint8_t unique_id, 55 uint8_t *resp_buffer_ptr, 56 uint32_t size); 57 uint8_t asu_alloc_unique_id(void); 58 void asu_free_unique_id(uint8_t uniqueid); 59 #endif /* __ASU_CLIENT_H_ */ 60