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