1a189d0aeSWenhui Sheng /*
2a189d0aeSWenhui Sheng  * Copyright 2020 Advanced Micro Devices, Inc.
3a189d0aeSWenhui Sheng  *
4a189d0aeSWenhui Sheng  * Permission is hereby granted, free of charge, to any person obtaining a
5a189d0aeSWenhui Sheng  * copy of this software and associated documentation files (the "Software"),
6a189d0aeSWenhui Sheng  * to deal in the Software without restriction, including without limitation
7a189d0aeSWenhui Sheng  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8a189d0aeSWenhui Sheng  * and/or sell copies of the Software, and to permit persons to whom the
9a189d0aeSWenhui Sheng  * Software is furnished to do so, subject to the following conditions:
10a189d0aeSWenhui Sheng  *
11a189d0aeSWenhui Sheng  * The above copyright notice and this permission notice shall be included in
12a189d0aeSWenhui Sheng  * all copies or substantial portions of the Software.
13a189d0aeSWenhui Sheng  *
14a189d0aeSWenhui Sheng  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15a189d0aeSWenhui Sheng  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16a189d0aeSWenhui Sheng  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17a189d0aeSWenhui Sheng  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18a189d0aeSWenhui Sheng  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19a189d0aeSWenhui Sheng  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20a189d0aeSWenhui Sheng  * OTHER DEALINGS IN THE SOFTWARE.
21a189d0aeSWenhui Sheng  *
22a189d0aeSWenhui Sheng  */
23a189d0aeSWenhui Sheng 
24a189d0aeSWenhui Sheng #ifndef _TA_RAP_IF_H
25a189d0aeSWenhui Sheng #define _TA_RAP_IF_H
26a189d0aeSWenhui Sheng 
27a189d0aeSWenhui Sheng /* Responses have bit 31 set */
28a189d0aeSWenhui Sheng #define RSP_ID_MASK (1U << 31)
29a189d0aeSWenhui Sheng #define RSP_ID(cmdId) (((uint32_t)(cmdId)) | RSP_ID_MASK)
30a189d0aeSWenhui Sheng 
31a189d0aeSWenhui Sheng enum ta_rap_status {
32a189d0aeSWenhui Sheng 	TA_RAP_STATUS__SUCCESS                              = 1,
33a189d0aeSWenhui Sheng 	TA_RAP_STATUS__ERROR_GENERIC_FAILURE                = 2,
34a189d0aeSWenhui Sheng 	TA_RAP_STATUS__ERROR_CMD_NOT_SUPPORTED              = 3,
35a189d0aeSWenhui Sheng 	TA_RAP_STATUS__ERROR_INVALID_VALIDATION_METHOD      = 4,
36a189d0aeSWenhui Sheng 	TA_RAP_STATUS__ERROR_NULL_POINTER                   = 5,
37a189d0aeSWenhui Sheng 	TA_RAP_STATUS__ERROR_NOT_INITIALIZED                = 6,
38a189d0aeSWenhui Sheng 	TA_RAP_STATUS__ERROR_VALIDATION_FAILED              = 7,
39a189d0aeSWenhui Sheng 	TA_RAP_STATUS__ERROR_ASIC_NOT_SUPPORTED             = 8,
40a189d0aeSWenhui Sheng 	TA_RAP_STATUS__ERROR_OPERATION_NOT_PERMISSABLE      = 9,
41a189d0aeSWenhui Sheng 	TA_RAP_STATUS__ERROR_ALREADY_INIT                   = 10,
42a189d0aeSWenhui Sheng };
43a189d0aeSWenhui Sheng 
44a189d0aeSWenhui Sheng enum ta_rap_cmd {
45a189d0aeSWenhui Sheng 	TA_CMD_RAP__INITIALIZE              = 1,
46a189d0aeSWenhui Sheng 	TA_CMD_RAP__VALIDATE_L0             = 2,
47a189d0aeSWenhui Sheng };
48a189d0aeSWenhui Sheng 
49a189d0aeSWenhui Sheng enum ta_rap_validation_method {
50a189d0aeSWenhui Sheng 	METHOD_A           = 1,
51a189d0aeSWenhui Sheng };
52a189d0aeSWenhui Sheng 
53a189d0aeSWenhui Sheng struct ta_rap_cmd_input_data {
54a189d0aeSWenhui Sheng 	uint8_t reserved[8];
55a189d0aeSWenhui Sheng };
56a189d0aeSWenhui Sheng 
57a189d0aeSWenhui Sheng struct ta_rap_cmd_output_data {
58a189d0aeSWenhui Sheng 	uint32_t    last_subsection;
59a189d0aeSWenhui Sheng 	uint32_t    num_total_validate;
60a189d0aeSWenhui Sheng 	uint32_t    num_valid;
61a189d0aeSWenhui Sheng 	uint32_t    last_validate_addr;
62a189d0aeSWenhui Sheng 	uint32_t    last_validate_val;
63a189d0aeSWenhui Sheng 	uint32_t    last_validate_val_exptd;
64a189d0aeSWenhui Sheng };
65a189d0aeSWenhui Sheng 
66a189d0aeSWenhui Sheng union ta_rap_cmd_input {
67a189d0aeSWenhui Sheng 	struct ta_rap_cmd_input_data input;
68a189d0aeSWenhui Sheng };
69a189d0aeSWenhui Sheng 
70a189d0aeSWenhui Sheng union ta_rap_cmd_output {
71a189d0aeSWenhui Sheng 	struct ta_rap_cmd_output_data output;
72a189d0aeSWenhui Sheng };
73a189d0aeSWenhui Sheng 
74a189d0aeSWenhui Sheng struct ta_rap_shared_memory {
75a189d0aeSWenhui Sheng 	uint32_t                    cmd_id;
76a189d0aeSWenhui Sheng 	uint32_t                    validation_method_id;
77a189d0aeSWenhui Sheng 	uint32_t                    resp_id;
78a189d0aeSWenhui Sheng 	enum ta_rap_status          rap_status;
79a189d0aeSWenhui Sheng 	union ta_rap_cmd_input      rap_in_message;
80a189d0aeSWenhui Sheng 	union ta_rap_cmd_output     rap_out_message;
81a189d0aeSWenhui Sheng 	uint8_t                     reserved[64];
82a189d0aeSWenhui Sheng };
83a189d0aeSWenhui Sheng 
84a189d0aeSWenhui Sheng #endif  // #define _TA_RAP_IF_H
85