1fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/*
2fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  Copyright (c) 2012, The Android Open Source Project
3fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
4fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  Licensed under the Apache License, Version 2.0 (the "License"); you
5fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  may not use this file except in compliance with the License.  You may
6fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  obtain a copy of the License at
7fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
8fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  http://www.apache.org/licenses/LICENSE-2.0
9fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
10fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  Unless required by applicable law or agreed to in writing, software
11fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  distributed under the License is distributed on an "AS IS" BASIS,
12fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  implied.  See the License for the specific language governing
14fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  permissions and limitations under the License.
15fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani */
16fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
17fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#ifndef __QSEECOMAPI_H_
18fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#define __QSEECOMAPI_H_
19fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
20fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
21fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/*----------------------------------------------------------------------------
22fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * Include Files
23fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani* -------------------------------------------------------------------------*/
24fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#include <stdint.h>
25fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#include <stdbool.h>
26fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
27fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#define QSEECOM_ALIGN_SIZE	0x40
28fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#define QSEECOM_ALIGN_MASK	(QSEECOM_ALIGN_SIZE - 1)
29fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#define QSEECOM_ALIGN(x)	\
30fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani	((x + QSEECOM_ALIGN_SIZE) & (~QSEECOM_ALIGN_MASK))
31fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
32fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#ifdef __cplusplus
33fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudaniextern "C" {
34fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#endif
35fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
36fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/*----------------------------------------------------------------------------
37fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * Preprocessor Definitions and Constants
38fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * -------------------------------------------------------------------------*/
39fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/** The memory is locked and non-pageable */
40fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#define MEM_LOCKED         0x00000001
41fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/** The memory is marked non-cacheable */
42fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#define MEM_NON_CACHED     0x00000002
43fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
44fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#define QSEECOM_APP_QUERY_FAILED       -6
45fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#define QSEECOM_APP_NOT_LOADED         -5
46fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#define QSEECOM_APP_ALREADY_LOADED     -4
47fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#define QSEECOM_LISTENER_UNREGISTERED	-3
48fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#define QSEECOM_LISTENER_ALREADY_REGISTERED	-2
49fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#define QSEECOM_LISTENER_REGISTER_FAIL		-1
50fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
51fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/*----------------------------------------------------------------------------
52fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * Type Declarations
53fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * -------------------------------------------------------------------------*/
54fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudanistruct QSEECom_handle {
55fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani	unsigned char *ion_sbuffer;
56fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani};
57fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
58fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudanistruct QSEECom_ion_fd_data {
59fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani	int32_t fd;
60fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani	uint32_t cmd_buf_offset;
61fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani};
62fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
63fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudanistruct QSEECom_ion_fd_info {
64fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani	struct QSEECom_ion_fd_data data[4];
65fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani};
66fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
67fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/*----------------------------------------------------------------------------
68fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * Function Declarations and Documentation
69fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * -------------------------------------------------------------------------*/
70fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/**
71fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @brief Open a handle to the  QSEECom device.
72fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
73fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * - Load a secure application. The application will be verified that it is
74fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *    secure by digital signature verification.
75fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * Allocate memory for sending requests to the QSAPP
76fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
77fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * Note/Comments:
78fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * There is a one-to-one relation for a HLOS client and a QSAPP;
79fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * meaning that only one app can communicate to a QSAPP at a time.
80fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
81fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * Please note that there is difference between an application and a listener
82fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * service. A QSAPP must be loaded at the request of the HLOS,
83fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * and all requests are orginated by the HLOS client.
84fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * A listener service on the otherhand is started during start-up by a
85fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * daemon, qseecomd.
86fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
87fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * A HLOS application may create mutiple handles to the QSAPP
88fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
89fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in/out] handle The device handle
90fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] fname The directory and filename to load.
91fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] sb_size Size of the shared buffer memory  for sending requests.
92fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @return Zero on success, negative on failure. errno will be set on
93fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  error.
94fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani */
95fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudaniint QSEECom_start_app(struct QSEECom_handle **clnt_handle, const char *path,
96fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani			const char *fname, uint32_t sb_size);
97fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
98fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/**
99fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @brief Close the application associated with the handle.
100fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
101fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * - Unload a secure application. The driver will verify if there exists
102fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *   any other applications that are communicating with the QSAPP to which
103fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *   the "handle" is tied.
104fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * - De-allocate memory for sending requests to QSAPP.
105fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
106fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] handle The device handle
107fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @return Zero on success, negative on failure. errno will be set on
108fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  error.
109fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani */
110fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudaniint QSEECom_shutdown_app(struct QSEECom_handle **handle);
111fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
112fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/**
113fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @brief Open a handle to the  QSEECom device.
114fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
115fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * - Load an external elf. The elf will be verified that it is
116fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *    secure by digital signature verification.
117fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
118fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * A HLOS application may create mutiple opens (only one is permitted for the
119fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * app, but each listener service can open a unique device in the same HLOS app
120fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * /executable.
121fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in/out] handle The device handle
122fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] fname The directory and filename to load.
123fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @return Zero on success, negative on failure. errno will be set on
124fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  error.
125fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani */
126fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudaniint QSEECom_load_external_elf(struct QSEECom_handle **clnt_handle, const char *path,
127fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani			const char *fname);
128fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
129fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/**
130fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @brief Close the external elf
131fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
132fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * - Unload an external elf.
133fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
134fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] handle The device handle
135fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
136fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @return Zero on success, negative on failure. errno will be set on
137fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  error.
138fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani */
139fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudaniint QSEECom_unload_external_elf(struct QSEECom_handle **handle);
140fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
141fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/**
142fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @brief Register an HLOS listener service. This allows messages from QSAPP
143fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * to be received.
144fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
145fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] handle The device handle
146fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] lstnr_id The listener service identifier. This ID must be uniquely
147fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * assigned to avoid any collisions.
148fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] sb_length Shared memory buffer between OS and QSE.
149fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] flags Provide the shared memory flags attributes.
150fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
151fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @return Zero on success, negative on failure. errno will be set on
152fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  error.
153fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
154fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani */
155fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudaniint QSEECom_register_listener(struct QSEECom_handle **handle,
156fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani			uint32_t lstnr_id, uint32_t sb_length, uint32_t flags);
157fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
158fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/**
159fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @brief Unregister a listener service.
160fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
161fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] handle The device handle
162fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
163fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @return Zero on success, negative on failure. errno will be set on
164fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  error.
165fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani */
166fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudaniint QSEECom_unregister_listener(struct QSEECom_handle *handle);
167fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
168fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
169fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/**
170fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @brief Send QSAPP a "user" defined buffer (may contain some message/
171fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * command request) and receives a response from QSAPP in receive buffer.
172fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * The HLOS client writes to the send_buf, where QSAPP writes to the rcv_buf.
173fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * This is a blocking call.
174fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
175fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] handle    The device handle
176fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] send_buf  The buffer to be sent.
177fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *                      If using ion_sbuffer, ensure this
178fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *                      QSEECOM_BUFFER_ALIGN'ed.
179fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] sbuf_len  The send buffer length
180fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *                      If using ion_sbuffer, ensure length is
181fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *                      multiple of QSEECOM_BUFFER_ALIGN.
182fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] rcv_buf   The QSEOS returned buffer.
183fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *                      If using ion_sbuffer, ensure this is
184fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *                      QSEECOM_BUFFER_ALIGN'ed.
185fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] rbuf_len  The returned buffer length.
186fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *                      If using ion_sbuffer, ensure length is
187fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *                      multiple of QSEECOM_BUFFER_ALIGN.
188fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] rbuf_len  The returned buffer length.
189fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
190fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @return Zero on success, negative on failure. errno will be set on
191fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  error.
192fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani */
193fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudaniint QSEECom_send_cmd(struct QSEECom_handle *handle, void *send_buf,
194fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani			uint32_t sbuf_len, void *rcv_buf, uint32_t rbuf_len);
195fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
196fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
197fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/**
198fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @brief Send QSAPP a "user" defined buffer (may contain some message/
199fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * command request) and receives a response from QSAPP in receive buffer.
200fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * This API is same as send_cmd except it takes in addition parameter,
201fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * "ifd_data".  This "ifd_data" holds information (ion fd handle and
202fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * cmd_buf_offset) used for modifying data in the message in send_buf
203fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * at an offset.  Essentailly, it has the ion fd handle information to
204fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * retrieve physical address and modify the message in send_buf at the
205fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * mentioned offset.
206fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
207fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * The HLOS client writes to the send_buf, where QSAPP writes to the rcv_buf.
208fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * This is a blocking call.
209fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
210fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] handle    The device handle
211fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] send_buf  The buffer to be sent.
212fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *                      If using ion_sbuffer, ensure this
213fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *                      QSEECOM_BUFFER_ALIGN'ed.
214fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] sbuf_len  The send buffer length
215fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *                      If using ion_sbuffer, ensure length is
216fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *                      multiple of QSEECOM_BUFFER_ALIGN.
217fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] rcv_buf   The QSEOS returned buffer.
218fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *                      If using ion_sbuffer, ensure this is
219fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *                      QSEECOM_BUFFER_ALIGN'ed.
220fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] rbuf_len  The returned buffer length.
221fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *                      If using ion_sbuffer, ensure length is
222fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *                      multiple of QSEECOM_BUFFER_ALIGN.
223fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] QSEECom_ion_fd_info  data related to memory allocated by ion.
224fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
225fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @return Zero on success, negative on failure. errno will be set on
226fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  error.
227fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani */
228fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudaniint QSEECom_send_modified_cmd(struct QSEECom_handle *handle, void *send_buf,
229fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani			uint32_t sbuf_len, void *resp_buf, uint32_t rbuf_len,
230fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani			struct QSEECom_ion_fd_info  *ifd_data);
231fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
232fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/**
233fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @brief Receive a service defined buffer.
234fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
235fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] handle    The device handle
236fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[out] buf      The buffer that is received
237fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] len       The receive buffer length
238fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
239fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @return Zero on success, negative on failure. errno will be set on
240fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  error.
241fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani */
242fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudaniint QSEECom_receive_req(struct QSEECom_handle *handle,
243fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani			void *buf, uint32_t len);
244fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
245fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/**
246fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @brief Send a response based on the previous QSEECom_receive_req.
247fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
248fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * This allows a listener service to receive a command (e.g. read file abc).
249fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * The service can then handle the request from QSEECom_receive_req, and provide
250fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * that information back to QSAPP.
251fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
252fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * This allows the HLOS to act as the server and QSAPP to behave as the client.
253fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
254fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] handle    The device handle
255fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[out] send_buf  The buffer to be returned back to QSAPP
256fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] len       The send buffer length
257fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
258fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @return Zero on success, negative on failure. errno will be set on
259fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  error.
260fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani */
261fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudaniint QSEECom_send_resp(struct QSEECom_handle *handle,
262fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani			void *send_buf, uint32_t len);
263fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
264fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/**
265fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @brief Set the bandwidth for QSEE.
266fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
267fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * This API resulst in improving the performance on the Crypto hardware
268fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * in QSEE. It should be called before issuing send_cmd/send_modified_cmd
269fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * for commands that requires using the crypto hardware on the QSEE.
270fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * Typically this API should be called before issuing the send request to
271fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * enable high performance mode and after completion of the send_cmd to
272fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * resume to low performance and hence to low power mode.
273fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
274fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * This allows the clients of QSEECom to set the QSEE cyptpo HW bus
275fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * bandwidth to high/low.
276fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
277fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] high    Set to 1 to enable bandwidth.
278fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
279fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @return Zero on success, negative on failure. errno will be set on
280fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *  error.
281fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani */
282fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudaniint QSEECom_set_bandwidth(struct QSEECom_handle *handle, bool high);
283fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
284fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani/**
285fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @brief Query QSEE to check if app is loaded.
286fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
287fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * This API queries QSEE to see if the app is loaded or not.
288fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
289fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @param[in] app_name  Name of the app.
290fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani *
291fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani * @return QSEECOM_APP_QUERY_FAILED/QSEECOM_APP_NOT_LOADED/QSEECOM_APP_LOADED.
292fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani */
293fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudaniint QSEECom_app_load_query(struct QSEECom_handle *handle, char *app_name);
294fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
295fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#ifdef __cplusplus
296fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani}
297fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#endif
298fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani
299fb5cdde80ba39d571e3281f3619717a3a5361cf0Ajay Dudani#endif
300