/**
 * Copyright(c) 2011 Trusted Logic.   All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *  * Neither the name Trusted Logic nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef __SCHANNEL6_PROTOCOL_H__
#define __SCHANNEL6_PROTOCOL_H__

#include "s_type.h"

/**
 * Time representation.
 */
typedef uint64_t SCTIME;

#define SCTIME_IMMEDIATE ((uint64_t) 0x0000000000000000ULL)
#define SCTIME_INFINITE  ((uint64_t) 0xFFFFFFFFFFFFFFFFULL)

/*
 * Message types
 */
#define SCX_CREATE_DEVICE_CONTEXT   0x02
#define SCX_DESTROY_DEVICE_CONTEXT  0xFD
#define SCX_REGISTER_SHARED_MEMORY  0xF7
#define SCX_RELEASE_SHARED_MEMORY   0xF9
#define SCX_OPEN_CLIENT_SESSION     0xF0
#define SCX_CLOSE_CLIENT_SESSION    0xF2
#define SCX_INVOKE_CLIENT_COMMAND   0xF5
#define SCX_CANCEL_CLIENT_OPERATION 0xF4
#define SCX_MANAGEMENT              0xFE

/*
 * Shared mem flags
 */
#define SCX_SHARED_MEM_FLAG_INPUT   1
#define SCX_SHARED_MEM_FLAG_OUTPUT  2
#define SCX_SHARED_MEM_FLAG_INOUT   3

/*
 * Parameter types
 */
#define SCX_PARAM_TYPE_NONE                     0x0
#define SCX_PARAM_TYPE_VALUE_INPUT              0x1
#define SCX_PARAM_TYPE_VALUE_OUTPUT             0x2
#define SCX_PARAM_TYPE_VALUE_INOUT              0x3
#define SCX_PARAM_TYPE_MEMREF_TEMP_INPUT        0x5
#define SCX_PARAM_TYPE_MEMREF_TEMP_OUTPUT       0x6
#define SCX_PARAM_TYPE_MEMREF_TEMP_INOUT        0x7
#define SCX_PARAM_TYPE_MEMREF_INPUT             0xD
#define SCX_PARAM_TYPE_MEMREF_OUTPUT            0xE
#define SCX_PARAM_TYPE_MEMREF_INOUT             0xF

#define SCX_PARAM_TYPE_INPUT_FLAG                0x1
#define SCX_PARAM_TYPE_OUTPUT_FLAG               0x2
#define SCX_PARAM_TYPE_MEMREF_FLAG               0x4
#define SCX_PARAM_TYPE_REGISTERED_MEMREF_FLAG    0x8

#define SCX_PARAM_TYPE_IS_TMPREF(nParamType) (((nParamType) & (SCX_PARAM_TYPE_MEMREF_FLAG | SCX_PARAM_TYPE_REGISTERED_MEMREF_FLAG)) == SCX_PARAM_TYPE_MEMREF_FLAG)

#define SCX_MAKE_PARAM_TYPES(t0, t1, t2, t3) ((t0) | ((t1) << 4) | ((t2) << 8) | ((t3) << 12))
#define SCX_GET_PARAM_TYPE(t, i) (((t) >> (4*i)) & 0xF)

/*
 * return origins
 */
#define SCX_ORIGIN_COMMS       2
#define SCX_ORIGIN_TEE         3
#define SCX_ORIGIN_TRUSTED_APP 4

/*
 * Login types
 */
#include "schannel6_logins.h"

/*
 * Limits and sizes
 */

/* Maximum number of L1 descriptors covered by a registered shared memory block.
   Must be kept in synch with TF_MAX_COARSE_PAGES in tf_protocol.h
   in the Linux kernel driver. */
#define SCHANNEL6_MAX_DESCRIPTORS_PER_REGISTERED_SHARED_MEM 128

/**
 * Command parameters.
 */
typedef struct
{
   uint32_t    a;
   uint32_t    b;
}SCHANNEL6_COMMAND_PARAM_VALUE;

typedef struct
{
   uint32_t    nDescriptor;
   uint32_t    nSize;
   uint32_t    nOffset;     /* Socket: 4 weak bits of the address (for alignement checks) */

}SCHANNEL6_COMMAND_PARAM_TEMP_MEMREF;

typedef struct
{
   S_HANDLE    hBlock;
   uint32_t    nSize;
   uint32_t    nOffset;

}SCHANNEL6_COMMAND_PARAM_MEMREF;

typedef union
{
   SCHANNEL6_COMMAND_PARAM_VALUE        sValue;
   SCHANNEL6_COMMAND_PARAM_TEMP_MEMREF  sTempMemref;
   SCHANNEL6_COMMAND_PARAM_MEMREF       sMemref;

} SCHANNEL6_COMMAND_PARAM;

typedef struct
{
   uint32_t a;
   uint32_t b;
} SCHANNEL6_ANSWER_PARAM_VALUE;

typedef struct
{
   uint32_t _ignored;
   uint32_t nSize;
} SCHANNEL6_ANSWER_PARAM_SIZE;

typedef union
{
   SCHANNEL6_ANSWER_PARAM_SIZE  sSize;
   SCHANNEL6_ANSWER_PARAM_VALUE sValue;
} SCHANNEL6_ANSWER_PARAM;

/**
 * Command messages.
 */
 typedef struct
{
   uint8_t                       nMessageSize;
   uint8_t                       nMessageType;
   uint16_t                      nMessageInfo;
   uint32_t                      nOperationID; /* an opaque Normal World identifier for the operation */
}SCHANNEL6_COMMAND_HEADER;

typedef struct
{
   uint8_t                       nMessageSize;
   uint8_t                       nMessageType;
   uint16_t                      nMessageInfo_RFU;
   uint32_t                      nOperationID; /* an opaque Normal World identifier for the operation */
   uint32_t                      nDeviceContextID; /* an opaque Normal World identifier for the device context */
}SCHANNEL6_CREATE_DEVICE_CONTEXT_COMMAND;

typedef struct
{
   uint8_t                       nMessageSize;
   uint8_t                       nMessageType;
   uint16_t                      nParamTypes;
   uint32_t                      nOperationID; /* an opaque Normal World identifier for the operation */
   S_HANDLE                      hDeviceContext;
   S_HANDLE                      hClientSession;
   uint64_t                      sTimeout;
   uint32_t                      nCancellationID;
   uint32_t                      nClientCommandIdentifier;
   SCHANNEL6_COMMAND_PARAM       sParams[4];
}SCHANNEL6_INVOKE_CLIENT_COMMAND_COMMAND;

typedef struct
{
   uint8_t                       nMessageSize;
   uint8_t                       nMessageType;
   uint16_t                      nParamTypes;
   uint32_t                      nOperationID; /* an opaque Normal World identifier for the operation */
   S_HANDLE                      hDeviceContext;
   uint32_t                      nCancellationID;
   SCTIME                        sTimeout;
   S_UUID                        sDestinationUUID;
   SCHANNEL6_COMMAND_PARAM       sParams[4];
   uint32_t                      nLoginType;
   uint8_t                       sLoginData[20]; /* Size depends on the login type. */

}SCHANNEL6_OPEN_CLIENT_SESSION_COMMAND;

typedef struct
{
   uint8_t                       nMessageSize;
   uint8_t                       nMessageType;
   uint16_t                      nMemoryFlags;
   uint32_t                      nOperationID; /* an opaque Normal World identifier for the operation */
   S_HANDLE                      hDeviceContext;
   uint32_t                      nBlockID;
   uint32_t                      nSharedMemSize;
   uint32_t                      nSharedMemStartOffset;
   uint32_t                      nSharedMemDescriptors[SCHANNEL6_MAX_DESCRIPTORS_PER_REGISTERED_SHARED_MEM];

}SCHANNEL6_REGISTER_SHARED_MEMORY_COMMAND;

typedef struct
{
   uint8_t                       nMessageSize;
   uint8_t                       nMessageType;
   uint16_t                      nMessageInfo_RFU;
   uint32_t                      nOperationID; /* an opaque Normal World identifier for the operation */
   S_HANDLE                      hDeviceContext;
   S_HANDLE                      hBlock;

}SCHANNEL6_RELEASE_SHARED_MEMORY_COMMAND;

typedef struct
{
   uint8_t                       nMessageSize;
   uint8_t                       nMessageType;
   uint16_t                      nMessageInfo_RFU;
   uint32_t                      nOperationID; /* an opaque Normal World identifier for the operation */
   S_HANDLE                      hDeviceContext;
   S_HANDLE                      hClientSession;
   uint32_t                      nCancellationID;

}SCHANNEL6_CANCEL_CLIENT_OPERATION_COMMAND;

typedef struct
{
   uint8_t                       nMessageSize;
   uint8_t                       nMessageType;
   uint16_t                      nMessageInfo_RFU;
   uint32_t                      nOperationID; /* an opaque Normal World identifier for the operation */
   S_HANDLE                      hDeviceContext;
   S_HANDLE                      hClientSession;

}SCHANNEL6_CLOSE_CLIENT_SESSION_COMMAND;

typedef struct
{
   uint8_t                       nMessageSize;
   uint8_t                       nMessageType;
   uint16_t                      nMessageInfo_RFU;
   uint32_t                      nOperationID; /* an opaque Normal World identifier for the operation */
   S_HANDLE                      hDeviceContext;

}SCHANNEL6_DESTROY_DEVICE_CONTEXT_COMMAND;

#define SCHANNEL6_MANAGEMENT_COMMAND_HIBERNATE            1
#define SCHANNEL6_MANAGEMENT_COMMAND_SHUTDOWN             2
#define SCHANNEL6_MANAGEMENT_COMMAND_PREPARE_FOR_CORE_OFF 3
#define SCHANNEL6_MANAGEMENT_COMMAND_RESUME_FROM_CORE_OFF 4

typedef struct
{
   uint8_t                       nMessageSize;
   uint8_t                       nMessageType;
   uint16_t                      nCommand;
   uint32_t                      nOperationID; /* an opaque Normal World identifier for the operation */
   uint32_t                      nW3BSize;
   uint32_t                      nW3BStartOffset;
#ifdef SCHANNEL_TRUSTZONE
   uint32_t                      nSharedMemDescriptors[128];
#endif
}SCHANNEL6_MANAGEMENT_COMMAND;

typedef union
{
   SCHANNEL6_COMMAND_HEADER                            sHeader;
   SCHANNEL6_CREATE_DEVICE_CONTEXT_COMMAND             sCreateDeviceContext;
   SCHANNEL6_DESTROY_DEVICE_CONTEXT_COMMAND            sDestroyDeviceContext;
   SCHANNEL6_OPEN_CLIENT_SESSION_COMMAND               sOpenClientSession;
   SCHANNEL6_CLOSE_CLIENT_SESSION_COMMAND              sCloseClientSession;
   SCHANNEL6_REGISTER_SHARED_MEMORY_COMMAND            sRegisterSharedMemory;
   SCHANNEL6_RELEASE_SHARED_MEMORY_COMMAND             sReleaseSharedMemory;
   SCHANNEL6_INVOKE_CLIENT_COMMAND_COMMAND             sInvokeClientCommand;
   SCHANNEL6_CANCEL_CLIENT_OPERATION_COMMAND           sCancelClientOperation;
   SCHANNEL6_MANAGEMENT_COMMAND                        sManagement;

}SCHANNEL6_COMMAND;

/**
 * Answer messages.
 */
typedef struct
{
   uint8_t                   nMessageSize;
   uint8_t                   nMessageType;
   uint16_t                  nMessageInfo;
   uint32_t                  nOperationID;
   uint32_t                  nErrorCode;
}SCHANNEL6_ANSWER_HEADER;

typedef struct
{
   uint8_t                   nMessageSize;
   uint8_t                   nMessageType;
   uint16_t                  nMessageInfo_RFU;
   uint32_t                  nOperationID;
   uint32_t                  nErrorCode;
   S_HANDLE                  hDeviceContext;
}SCHANNEL6_CREATE_DEVICE_CONTEXT_ANSWER;

typedef struct
{
   uint8_t                   nMessageSize;
   uint8_t                   nMessageType;
   uint8_t                   nReturnOrigin;
   uint8_t                   __nReserved;
   uint32_t                  nOperationID;
   uint32_t                  nErrorCode;
   SCHANNEL6_ANSWER_PARAM    sAnswers[4];

}SCHANNEL6_INVOKE_CLIENT_COMMAND_ANSWER;

typedef struct
{
   uint8_t                   nMessageSize;
   uint8_t                   nMessageType;
   uint8_t                   nReturnOrigin;
   uint8_t                   __nReserved;
   uint32_t                  nOperationID;
   uint32_t                  nErrorCode;
   S_HANDLE                  hClientSession;
   SCHANNEL6_ANSWER_PARAM    sAnswers[4];
}SCHANNEL6_OPEN_CLIENT_SESSION_ANSWER;

typedef struct
{
   uint8_t                   nMessageSize;
   uint8_t                   nMessageType;
   uint16_t                  nMessageInfo_RFU;
   uint32_t                  nOperationID;
   uint32_t                  nErrorCode;
}SCHANNEL6_CLOSE_CLIENT_SESSION_ANSWER;

typedef struct
{
   uint8_t                   nMessageSize;
   uint8_t                   nMessageType;
   uint16_t                  nMessageInfo_RFU;
   uint32_t                  nOperationID;
   uint32_t                  nErrorCode;
   S_HANDLE                  hBlock;

}SCHANNEL6_REGISTER_SHARED_MEMORY_ANSWER;

typedef struct
{
   uint8_t                   nMessageSize;
   uint8_t                   nMessageType;
   uint16_t                  nMessageInfo_RFU;
   uint32_t                  nOperationID;
   uint32_t                  nErrorCode;
   uint32_t                  nBlockID;

}SCHANNEL6_RELEASE_SHARED_MEMORY_ANSWER;

typedef struct
{
   uint8_t                   nMessageSize;
   uint8_t                   nMessageType;
   uint16_t                  nMessageInfo_RFU;
   uint32_t                  nOperationID;
   uint32_t                  nErrorCode;
   uint32_t                  nDeviceContextID;

}SCHANNEL6_DESTROY_DEVICE_CONTEXT_ANSWER;

typedef struct
{
   uint8_t                   nMessageSize;
   uint8_t                   nMessageType;
   uint16_t                  nMessageInfo_RFU;
   uint32_t                  nOperationID;
   uint32_t                  nErrorCode;

}SCHANNEL6_CANCEL_CLIENT_OPERATION_ANSWER;

typedef struct
{
   uint8_t                   nMessageSize;
   uint8_t                   nMessageType;
   uint16_t                  nMessageInfo_RFU;
   uint32_t                  nOperationID;
   uint32_t                  nErrorCode;

}SCHANNEL6_MANAGEMENT_ANSWER;

typedef union
{
   SCHANNEL6_ANSWER_HEADER                    sHeader;
   SCHANNEL6_CREATE_DEVICE_CONTEXT_ANSWER     sCreateDeviceContext;
   SCHANNEL6_OPEN_CLIENT_SESSION_ANSWER       sOpenClientSession;
   SCHANNEL6_REGISTER_SHARED_MEMORY_ANSWER    sRegisterSharedMemory;
   SCHANNEL6_RELEASE_SHARED_MEMORY_ANSWER     sReleaseSharedMemory;
   SCHANNEL6_INVOKE_CLIENT_COMMAND_ANSWER     sInvokeClientCommand;
   SCHANNEL6_DESTROY_DEVICE_CONTEXT_ANSWER    sDestroyDeviceContext;
   SCHANNEL6_CANCEL_CLIENT_OPERATION_ANSWER   sCancelClientOperation;
   SCHANNEL6_CLOSE_CLIENT_SESSION_ANSWER      sCloseClientSession;
   SCHANNEL6_MANAGEMENT_ANSWER                sManagement;

}SCHANNEL6_ANSWER;


#endif /* __SCHANNEL6_PROTOCOL_H__ */
