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
asu_get_unique_id(uint32_t header)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
asu_create_header(uint8_t cmd_id,uint8_t unique_id,uint8_t module_id,uint8_t command_len)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