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