1 /*
2 * Copyright (c) 2020, Texas Instruments Incorporated
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * * Neither the name of Texas Instruments Incorporated nor the names of
17 * its contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32 /**
33 * \file sciclient_dkek.c
34 *
35 * \brief File containing the SCICLIENT API interfaces to the DKEK DMSC
36 * services.
37 *
38 */
40 /* ========================================================================== */
41 /* Include Files */
42 /* ========================================================================== */
44 #include <stdint.h>
45 #include <ti/csl/csl_types.h>
46 #include <ti/drv/sciclient/sciclient.h>
47 #include <string.h>
49 #include <ti/csl/tistdtypes.h>
50 #include <ti/csl/soc.h>
51 #include <ti/csl/arch/csl_arch.h>
52 #include <ti/csl/hw_types.h>
54 /* ========================================================================== */
55 /* Macros & Typedefs */
56 /* ========================================================================== */
58 /* None */
60 /* ========================================================================== */
61 /* Structure Declarations */
62 /* ========================================================================== */
64 /* None */
66 /* ========================================================================== */
67 /* Function Declarations */
68 /* ========================================================================== */
70 /* None */
72 /* ========================================================================== */
73 /* Global Variables */
74 /* ========================================================================== */
76 /* None */
78 /* ========================================================================== */
79 /* Function Definitions */
80 /* ========================================================================== */
82 int32_t Sciclient_setDKEK(
83 const struct tisci_msg_sa2ul_set_dkek_req *req,
84 struct tisci_msg_sa2ul_set_dkek_resp *resp,
85 uint32_t timeout)
86 {
87 int32_t r;
88 Sciclient_ReqPrm_t sciReq;
89 sciReq.messageType = TISCI_MSG_SA2UL_SET_DKEK;
90 sciReq.flags = TISCI_MSG_FLAG_AOP;
91 sciReq.pReqPayload = (const uint8_t *) req;
92 sciReq.reqPayloadSize = (uint32_t) sizeof(*req);
93 sciReq.timeout = timeout;
95 Sciclient_RespPrm_t sciResp;
96 sciResp.flags = 0;
97 sciResp.pRespPayload = (uint8_t *) resp;
98 sciResp.respPayloadSize = (uint32_t) sizeof(*resp);
100 r = Sciclient_service(&sciReq, &sciResp);
101 if ((r != CSL_PASS) ||
102 ((sciResp.flags & TISCI_MSG_FLAG_ACK) != TISCI_MSG_FLAG_ACK)) {
103 r = CSL_EFAIL;
104 }
106 return r;
107 }
109 int32_t Sciclient_releaseDKEK(
110 const struct tisci_msg_sa2ul_release_dkek_req *req,
111 struct tisci_msg_sa2ul_release_dkek_resp *resp,
112 uint32_t timeout)
113 {
114 int32_t r;
115 Sciclient_ReqPrm_t sciReq;
116 sciReq.messageType = TISCI_MSG_SA2UL_RELEASE_DKEK;
117 sciReq.flags = TISCI_MSG_FLAG_AOP;
118 sciReq.pReqPayload = (const uint8_t *) req;
119 sciReq.reqPayloadSize = (uint32_t) sizeof(*req);
120 sciReq.timeout = timeout;
122 Sciclient_RespPrm_t sciResp;
123 sciResp.flags = 0;
124 sciResp.pRespPayload = (uint8_t *) resp;
125 sciResp.respPayloadSize = (uint32_t) sizeof(*resp);
127 r = Sciclient_service(&sciReq, &sciResp);
128 if ((r != CSL_PASS) ||
129 ((sciResp.flags & TISCI_MSG_FLAG_ACK) != TISCI_MSG_FLAG_ACK)) {
130 r = CSL_EFAIL;
131 }
133 return r;
134 }
136 int32_t Sciclient_getDKEK(
137 const struct tisci_msg_sa2ul_get_dkek_req *req,
138 struct tisci_msg_sa2ul_get_dkek_resp *resp,
139 uint32_t timeout)
140 {
141 int32_t r;
142 Sciclient_ReqPrm_t sciReq;
143 sciReq.messageType = TISCI_MSG_SA2UL_GET_DKEK;
144 sciReq.flags = TISCI_MSG_FLAG_AOP;
145 sciReq.pReqPayload = (const uint8_t *) req;
146 sciReq.reqPayloadSize = (uint32_t) sizeof(*req);
147 sciReq.timeout = timeout;
149 Sciclient_RespPrm_t sciResp;
150 sciResp.flags = 0;
151 sciResp.pRespPayload = (uint8_t *) resp;
152 sciResp.respPayloadSize = (uint32_t) sizeof(*resp);
154 r = Sciclient_service(&sciReq, &sciResp);
155 if ((r != CSL_PASS) ||
156 ((sciResp.flags & TISCI_MSG_FLAG_ACK) != TISCI_MSG_FLAG_ACK)) {
157 r = CSL_EFAIL;
158 }
160 return r;
161 }
164 /* -------------------------------------------------------------------------- */
165 /* Internal Function Definitions */
166 /* -------------------------------------------------------------------------- */
168 /* None */