xref: /optee_os/core/include/drivers/amd/asu_client.h (revision 74ddb42edbe0ea886661c62476bac147ad3141aa)
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