1*df538e29SHisping Lin /* 2*df538e29SHisping Lin * Copyright (c) 2016, Fuzhou Rockchip Electronics Co.,Ltd. 3*df538e29SHisping Lin * All rights reserved. 4*df538e29SHisping Lin * 5*df538e29SHisping Lin * Redistribution and use in source and binary forms, with or without 6*df538e29SHisping Lin * modification, are permitted provided that the following conditions are met: 7*df538e29SHisping Lin * 8*df538e29SHisping Lin * 1. Redistributions of source code must retain the above copyright notice, 9*df538e29SHisping Lin * this list of conditions and the following disclaimer. 10*df538e29SHisping Lin * 11*df538e29SHisping Lin * 2. Redistributions in binary form must reproduce the above copyright notice, 12*df538e29SHisping Lin * this list of conditions and the following disclaimer in the documentation 13*df538e29SHisping Lin * and/or other materials provided with the distribution. 14*df538e29SHisping Lin * 15*df538e29SHisping Lin * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16*df538e29SHisping Lin * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17*df538e29SHisping Lin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18*df538e29SHisping Lin * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 19*df538e29SHisping Lin * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20*df538e29SHisping Lin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21*df538e29SHisping Lin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22*df538e29SHisping Lin * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23*df538e29SHisping Lin * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24*df538e29SHisping Lin * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25*df538e29SHisping Lin * POSSIBILITY OF SUCH DAMAGE. 26*df538e29SHisping Lin */ 27*df538e29SHisping Lin #ifndef TEE_SUPP_RK_FS_H 28*df538e29SHisping Lin #define TEE_SUPP_RK_FS_H 29*df538e29SHisping Lin 30*df538e29SHisping Lin /* 31*df538e29SHisping Lin * Operations and defines shared with TEE. 32*df538e29SHisping Lin */ 33*df538e29SHisping Lin #define OPTEE_MRF_OPEN 0 34*df538e29SHisping Lin #define OPTEE_MRF_CREATE 1 35*df538e29SHisping Lin #define OPTEE_MRF_CLOSE 2 36*df538e29SHisping Lin #define OPTEE_MRF_READ 3 37*df538e29SHisping Lin #define OPTEE_MRF_WRITE 4 38*df538e29SHisping Lin #define OPTEE_MRF_TRUNCATE 5 39*df538e29SHisping Lin #define OPTEE_MRF_REMOVE 6 40*df538e29SHisping Lin #define OPTEE_MRF_RENAME 7 41*df538e29SHisping Lin #define OPTEE_MRF_OPENDIR 8 42*df538e29SHisping Lin #define OPTEE_MRF_CLOSEDIR 9 43*df538e29SHisping Lin #define OPTEE_MRF_READDIR 10 44*df538e29SHisping Lin 45*df538e29SHisping Lin /* 46*df538e29SHisping Lin * Open flags, defines shared with TEE. 47*df538e29SHisping Lin */ 48*df538e29SHisping Lin #define TEE_FS_O_RDONLY 0x1 49*df538e29SHisping Lin #define TEE_FS_O_WRONLY 0x2 50*df538e29SHisping Lin #define TEE_FS_O_RDWR 0x4 51*df538e29SHisping Lin #define TEE_FS_O_CREAT 0x8 52*df538e29SHisping Lin #define TEE_FS_O_EXCL 0x10 53*df538e29SHisping Lin #define TEE_FS_O_APPEND 0x20 54*df538e29SHisping Lin 55*df538e29SHisping Lin /* 56*df538e29SHisping Lin * Seek flags, defines shared with TEE. 57*df538e29SHisping Lin */ 58*df538e29SHisping Lin #define TEE_FS_SEEK_SET 0x1 59*df538e29SHisping Lin #define TEE_FS_SEEK_END 0x2 60*df538e29SHisping Lin #define TEE_FS_SEEK_CUR 0x4 61*df538e29SHisping Lin 62*df538e29SHisping Lin /* 63*df538e29SHisping Lin * Mkdir flags, defines shared with TEE. 64*df538e29SHisping Lin */ 65*df538e29SHisping Lin #define TEE_FS_S_IWUSR 0x1 66*df538e29SHisping Lin #define TEE_FS_S_IRUSR 0x2 67*df538e29SHisping Lin 68*df538e29SHisping Lin /* 69*df538e29SHisping Lin * Access flags, X_OK not supported, defines shared with TEE. 70*df538e29SHisping Lin */ 71*df538e29SHisping Lin #define TEE_FS_R_OK 0x1 72*df538e29SHisping Lin #define TEE_FS_W_OK 0x2 73*df538e29SHisping Lin #define TEE_FS_F_OK 0x4 74*df538e29SHisping Lin 75*df538e29SHisping Lin #define RK_FS_R 0x1 76*df538e29SHisping Lin #define RK_FS_W 0x2 77*df538e29SHisping Lin #define RK_FS_D 0x8 78*df538e29SHisping Lin 79*df538e29SHisping Lin #define TEE_IOCTL_PARAM_ATTR_TYPE_MASK 0xff 80*df538e29SHisping Lin #define TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT 1 81*df538e29SHisping Lin #define TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_OUTPUT 2 82*df538e29SHisping Lin #define TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INOUT 3 /* input and output */ 83*df538e29SHisping Lin 84*df538e29SHisping Lin #define TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT 5 85*df538e29SHisping Lin #define TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_OUTPUT 6 86*df538e29SHisping Lin #define TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INOUT 7 /* input and output */ 87*df538e29SHisping Lin 88*df538e29SHisping Lin struct tee_ioctl_param_memref { 89*df538e29SHisping Lin uint64_t shm_offs; 90*df538e29SHisping Lin uint64_t size; 91*df538e29SHisping Lin int64_t shm_id; 92*df538e29SHisping Lin }; 93*df538e29SHisping Lin 94*df538e29SHisping Lin struct tee_ioctl_param_value { 95*df538e29SHisping Lin uint64_t a; 96*df538e29SHisping Lin uint64_t b; 97*df538e29SHisping Lin uint64_t c; 98*df538e29SHisping Lin }; 99*df538e29SHisping Lin 100*df538e29SHisping Lin struct tee_ioctl_param { 101*df538e29SHisping Lin uint64_t attr; 102*df538e29SHisping Lin union { 103*df538e29SHisping Lin struct tee_ioctl_param_memref memref; 104*df538e29SHisping Lin struct tee_ioctl_param_value value; 105*df538e29SHisping Lin } u; 106*df538e29SHisping Lin }; 107*df538e29SHisping Lin 108*df538e29SHisping Lin /* Function Defines */ 109*df538e29SHisping Lin #define UNREFERENCED_PARAMETER(P) (P = P) 110*df538e29SHisping Lin #define CHECKFLAG(flags, flag) (flags & flag) 111*df538e29SHisping Lin #define ADDFLAG(flags, flag) (flags | flag) 112*df538e29SHisping Lin 113*df538e29SHisping Lin #define RKSS_VERSION_V1 1 114*df538e29SHisping Lin #define RKSS_VERSION_V2 2 115*df538e29SHisping Lin #define RKSS_VERSION_ERR 100 116*df538e29SHisping Lin 117*df538e29SHisping Lin int tee_supp_rk_fs_init_v1(void); 118*df538e29SHisping Lin 119*df538e29SHisping Lin int tee_supp_rk_fs_process_v1(size_t num_params, 120*df538e29SHisping Lin struct tee_ioctl_param *params); 121*df538e29SHisping Lin 122*df538e29SHisping Lin int tee_supp_rk_fs_init_v2(void); 123*df538e29SHisping Lin 124*df538e29SHisping Lin int tee_supp_rk_fs_process_v2(size_t num_params, 125*df538e29SHisping Lin struct tee_ioctl_param *params); 126*df538e29SHisping Lin 127*df538e29SHisping Lin int OpteeClientRkFsInit(void); 128*df538e29SHisping Lin 129*df538e29SHisping Lin int OpteeClientRkFsProcess(size_t num_params, 130*df538e29SHisping Lin struct tee_ioctl_param *params); 131*df538e29SHisping Lin 132*df538e29SHisping Lin #endif 133