xref: /OK3568_Linux_fs/u-boot/include/optee_include/OpteeClientRPC.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright 2017, Rockchip Electronics Co., Ltd
3*4882a593Smuzhiyun  * hisping lin, <hisping.lin@rock-chips.com>
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun #ifndef _OPTEE_CLIENT_RPC_H_
8*4882a593Smuzhiyun #define _OPTEE_CLIENT_RPC_H_
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #include <optee_include/tee_base_types.h>
11*4882a593Smuzhiyun #include <optee_include/OpteeClientApiLib.h>
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun typedef struct{
14*4882a593Smuzhiyun 	unsigned int Arg0;
15*4882a593Smuzhiyun 	unsigned int Arg1;
16*4882a593Smuzhiyun 	unsigned int Arg2;
17*4882a593Smuzhiyun 	unsigned int Arg3;
18*4882a593Smuzhiyun 	unsigned int Arg4;
19*4882a593Smuzhiyun 	unsigned int Arg5;
20*4882a593Smuzhiyun 	unsigned int Arg6;
21*4882a593Smuzhiyun 	unsigned int Arg7;
22*4882a593Smuzhiyun } ARM_SMC_ARGS;
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #define RPMB_PACKET_DATA_TO_UINT16(d) ((d[0] << 8) + (d[1]))
25*4882a593Smuzhiyun #define RPMB_PACKET_DATA_TO_UINT16(d) ((d[0] << 8) + (d[1]))
26*4882a593Smuzhiyun #define RPMB_STUFF_DATA_SIZE                        196
27*4882a593Smuzhiyun #define RPMB_KEY_MAC_SIZE                           32
28*4882a593Smuzhiyun #define RPMB_DATA_SIZE                              256
29*4882a593Smuzhiyun #define RPMB_NONCE_SIZE                             16
30*4882a593Smuzhiyun #define RPMB_DATA_FRAME_SIZE                        512
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun typedef struct rpmb_data_frame {
33*4882a593Smuzhiyun 	unsigned char stuff_bytes[RPMB_STUFF_DATA_SIZE];
34*4882a593Smuzhiyun 	unsigned char key_mac[RPMB_KEY_MAC_SIZE];
35*4882a593Smuzhiyun 	unsigned char data[RPMB_DATA_SIZE];
36*4882a593Smuzhiyun 	unsigned char nonce[RPMB_NONCE_SIZE];
37*4882a593Smuzhiyun 	unsigned char write_counter[4];
38*4882a593Smuzhiyun 	unsigned char address[2];
39*4882a593Smuzhiyun 	unsigned char block_count[2];
40*4882a593Smuzhiyun 	unsigned char op_result[2];
41*4882a593Smuzhiyun 	unsigned char msg_type[2];
42*4882a593Smuzhiyun } EFI_RK_RPMB_DATA_PACKET;
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun typedef struct s_rpmb_back {
45*4882a593Smuzhiyun 	unsigned char stuff[RPMB_STUFF_DATA_SIZE];
46*4882a593Smuzhiyun 	unsigned char mac[RPMB_KEY_MAC_SIZE];
47*4882a593Smuzhiyun 	unsigned char data[RPMB_DATA_SIZE];
48*4882a593Smuzhiyun 	unsigned char nonce[RPMB_NONCE_SIZE];
49*4882a593Smuzhiyun 	unsigned int write_counter;
50*4882a593Smuzhiyun 	unsigned short address;
51*4882a593Smuzhiyun 	unsigned short block_count;
52*4882a593Smuzhiyun 	unsigned short result;
53*4882a593Smuzhiyun 	unsigned short request;
54*4882a593Smuzhiyun } EFI_RK_RPMB_DATA_PACKET_BACK;
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun TEEC_Result OpteeRpcCallback(ARM_SMC_ARGS *ArmSmcArgs);
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun #endif /*_OPTEE_CLIENT_RPC_H_*/
59