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