12e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/**
22e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * Copyright(c) 2011 Trusted Logic.   All rights reserved.
32e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley *
42e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * Redistribution and use in source and binary forms, with or without
52e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * modification, are permitted provided that the following conditions
62e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * are met:
72e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley *
82e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley *  * Redistributions of source code must retain the above copyright
92e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley *    notice, this list of conditions and the following disclaimer.
102e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley *  * Redistributions in binary form must reproduce the above copyright
112e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley *    notice, this list of conditions and the following disclaimer in
122e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley *    the documentation and/or other materials provided with the
132e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley *    distribution.
142e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley *  * Neither the name Trusted Logic nor the names of its
152e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley *    contributors may be used to endorse or promote products derived
162e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley *    from this software without specific prior written permission.
172e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley *
182e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
192e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
202e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
212e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
222e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
232e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
242e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
252e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
262e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
272e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
282e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
292e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley */
302e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley
312e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/*
322e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * This header file contains extensions to the TEE Client API that are
332e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * specific to the Trusted Foundations implementations
342e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley */
352e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#ifndef   __TEE_CLIENT_API_EX_H__
362e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define   __TEE_CLIENT_API_EX_H__
372e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley
382e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/* Implementation defined Login types  */
392e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define TEEC_LOGIN_AUTHENTICATION      0x80000000
402e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define TEEC_LOGIN_PRIVILEGED          0x80000002
412e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley
422e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/* Type definitions */
432e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley
442e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckleytypedef struct
452e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley{
462e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   uint32_t x;
472e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   uint32_t y;
482e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley}
492e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan BuckleyTEEC_TimeLimit;
502e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley
512e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckleytypedef struct
522e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley{
532e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   char apiDescription[65];
542e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   char commsDescription[65];
552e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   char TEEDescription[65];
562e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley}
572e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan BuckleyTEEC_ImplementationInfo;
582e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley
592e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckleytypedef struct
602e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley{
612e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   uint32_t pageSize;
622e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   uint32_t tmprefMaxSize;
632e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   uint32_t sharedMemMaxSize;
642e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   uint32_t nReserved3;
652e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   uint32_t nReserved4;
662e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   uint32_t nReserved5;
672e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   uint32_t nReserved6;
682e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   uint32_t nReserved7;
692e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley}
702e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan BuckleyTEEC_ImplementationLimits;
712e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley
722e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckleyvoid TEEC_EXPORT TEEC_GetImplementationInfo(
732e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   TEEC_Context*            context,
742e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   TEEC_ImplementationInfo* description);
752e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley
762e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckleyvoid TEEC_EXPORT TEEC_GetImplementationLimits(
772e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   TEEC_ImplementationLimits* limits);
782e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley
792e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckleyvoid TEEC_EXPORT TEEC_GetTimeLimit(
802e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley    TEEC_Context*    context,
812e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley    uint32_t         timeout,
822e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley    TEEC_TimeLimit*  timeLimit);
832e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley
842e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan BuckleyTEEC_Result TEEC_EXPORT TEEC_OpenSessionEx (
852e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley    TEEC_Context*         context,
862e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley    TEEC_Session*         session,
872e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley    const TEEC_TimeLimit* timeLimit,
882e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley    const TEEC_UUID*      destination,
892e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley    uint32_t              connectionMethod,
902e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley    void*                 connectionData,
912e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley    TEEC_Operation*       operation,
922e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley    uint32_t*             errorOrigin);
932e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley
942e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan BuckleyTEEC_Result TEEC_EXPORT TEEC_InvokeCommandEx(
952e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley    TEEC_Session*         session,
962e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley    const TEEC_TimeLimit* timeLimit,
972e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley    uint32_t              commandID,
982e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley    TEEC_Operation*       operation,
992e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley    uint32_t*             errorOrigin);
1002e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley
1012e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan BuckleyTEEC_Result TEEC_EXPORT TEEC_ReadSignatureFile(
1022e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   void**    ppSignatureFile,
1032e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley   uint32_t* pnSignatureFileLength);
1042e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley
1052e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#endif /* __TEE_CLIENT_API_EX_H__ */
106