1e656c62eSopenharmony_ci/*
2e656c62eSopenharmony_ci * Copyright (C) 2022 Huawei Technologies Co., Ltd.
3e656c62eSopenharmony_ci * Licensed under the Mulan PSL v2.
4e656c62eSopenharmony_ci * You can use this software according to the terms and conditions of the Mulan PSL v2.
5e656c62eSopenharmony_ci * You may obtain a copy of Mulan PSL v2 at:
6e656c62eSopenharmony_ci *     http://license.coscl.org.cn/MulanPSL2
7e656c62eSopenharmony_ci * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
8e656c62eSopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
9e656c62eSopenharmony_ci * PURPOSE.
10e656c62eSopenharmony_ci * See the Mulan PSL v2 for more details.
11e656c62eSopenharmony_ci */
12e656c62eSopenharmony_ci
13e656c62eSopenharmony_ci#ifndef _TC_NS_CLIENT_H_
14e656c62eSopenharmony_ci#define _TC_NS_CLIENT_H_
15e656c62eSopenharmony_ci#include "tee_client_type.h"
16e656c62eSopenharmony_ci#include "tee_ioctl_cmd.h"
17e656c62eSopenharmony_ci
18e656c62eSopenharmony_ci#ifndef ZERO_SIZE_PTR
19e656c62eSopenharmony_ci#define ZERO_SIZE_PTR       ((void *)16)
20e656c62eSopenharmony_ci#define ZERO_OR_NULL_PTR(x) ((unsigned long)(x) <= (unsigned long)ZERO_SIZE_PTR)
21e656c62eSopenharmony_ci#endif
22e656c62eSopenharmony_ci
23e656c62eSopenharmony_ci#define UUID_SIZE      16
24e656c62eSopenharmony_ci
25e656c62eSopenharmony_ci#define TC_NS_CLIENT_IOC_MAGIC 't'
26e656c62eSopenharmony_ci#define TC_NS_CLIENT_DEV       "tc_ns_client"
27e656c62eSopenharmony_ci#define TC_NS_CLIENT_DEV_NAME  "/dev/tc_ns_client"
28e656c62eSopenharmony_ci#define TC_PRIVATE_DEV_NAME  "/dev/tc_private"
29e656c62eSopenharmony_ci#define TUI_LISTEN_PATH "/sys/kernel/tui/c_state"
30e656c62eSopenharmony_ci
31e656c62eSopenharmony_cienum ConnectCmd {
32e656c62eSopenharmony_ci    GET_FD,
33e656c62eSopenharmony_ci    GET_TEEVERSION,
34e656c62eSopenharmony_ci};
35e656c62eSopenharmony_citypedef struct {
36e656c62eSopenharmony_ci    unsigned int method;
37e656c62eSopenharmony_ci    unsigned int mdata;
38e656c62eSopenharmony_ci} TC_NS_ClientLogin;
39e656c62eSopenharmony_ci
40e656c62eSopenharmony_citypedef union {
41e656c62eSopenharmony_ci    struct {
42e656c62eSopenharmony_ci        unsigned int buffer;
43e656c62eSopenharmony_ci        unsigned int buffer_h_addr;
44e656c62eSopenharmony_ci        unsigned int offset;
45e656c62eSopenharmony_ci        unsigned int h_offset;
46e656c62eSopenharmony_ci        unsigned int size_addr;
47e656c62eSopenharmony_ci        unsigned int size_h_addr;
48e656c62eSopenharmony_ci    } memref;
49e656c62eSopenharmony_ci    struct {
50e656c62eSopenharmony_ci        unsigned int a_addr;
51e656c62eSopenharmony_ci        unsigned int a_h_addr;
52e656c62eSopenharmony_ci        unsigned int b_addr;
53e656c62eSopenharmony_ci        unsigned int b_h_addr;
54e656c62eSopenharmony_ci    } value;
55e656c62eSopenharmony_ci} TC_NS_ClientParam;
56e656c62eSopenharmony_ci
57e656c62eSopenharmony_citypedef struct {
58e656c62eSopenharmony_ci    unsigned int code;
59e656c62eSopenharmony_ci    unsigned int origin;
60e656c62eSopenharmony_ci} TC_NS_ClientReturn;
61e656c62eSopenharmony_ci
62e656c62eSopenharmony_citypedef struct {
63e656c62eSopenharmony_ci    unsigned char uuid[UUID_SIZE];
64e656c62eSopenharmony_ci    unsigned int session_id;
65e656c62eSopenharmony_ci    unsigned int cmd_id;
66e656c62eSopenharmony_ci    TC_NS_ClientReturn returns;
67e656c62eSopenharmony_ci    TC_NS_ClientLogin login;
68e656c62eSopenharmony_ci    TC_NS_ClientParam params[TEEC_PARAM_NUM];
69e656c62eSopenharmony_ci    unsigned int paramTypes;
70e656c62eSopenharmony_ci    bool started;
71e656c62eSopenharmony_ci    unsigned int callingPid;
72e656c62eSopenharmony_ci    unsigned int file_size;
73e656c62eSopenharmony_ci    union {
74e656c62eSopenharmony_ci        char *file_buffer;
75e656c62eSopenharmony_ci        unsigned long long file_addr;
76e656c62eSopenharmony_ci    };
77e656c62eSopenharmony_ci} TC_NS_ClientContext;
78e656c62eSopenharmony_ci
79e656c62eSopenharmony_citypedef struct {
80e656c62eSopenharmony_ci    uint32_t seconds;
81e656c62eSopenharmony_ci    uint32_t millis;
82e656c62eSopenharmony_ci} TC_NS_Time;
83e656c62eSopenharmony_ci
84e656c62eSopenharmony_cienum SecFileType {
85e656c62eSopenharmony_ci    LOAD_TA = 0,
86e656c62eSopenharmony_ci    LOAD_SERVICE,
87e656c62eSopenharmony_ci    LOAD_LIB,
88e656c62eSopenharmony_ci    LOAD_DYNAMIC_DRV,
89e656c62eSopenharmony_ci};
90e656c62eSopenharmony_ci
91e656c62eSopenharmony_cistruct SecFileInfo {
92e656c62eSopenharmony_ci    enum SecFileType fileType;
93e656c62eSopenharmony_ci    uint32_t fileSize;
94e656c62eSopenharmony_ci    int32_t secLoadErr;
95e656c62eSopenharmony_ci};
96e656c62eSopenharmony_cistruct SecLoadIoctlStruct {
97e656c62eSopenharmony_ci    struct SecFileInfo secFileInfo;
98e656c62eSopenharmony_ci    TEEC_UUID uuid;
99e656c62eSopenharmony_ci    union {
100e656c62eSopenharmony_ci        char *fileBuffer;
101e656c62eSopenharmony_ci        struct {
102e656c62eSopenharmony_ci            uint32_t file_addr;
103e656c62eSopenharmony_ci            uint32_t file_h_addr;
104e656c62eSopenharmony_ci        } memref;
105e656c62eSopenharmony_ci    };
106e656c62eSopenharmony_ci}__attribute__((packed));
107e656c62eSopenharmony_ci
108e656c62eSopenharmony_cistruct AgentIoctlArgs {
109e656c62eSopenharmony_ci    uint32_t id;
110e656c62eSopenharmony_ci    uint32_t bufferSize;
111e656c62eSopenharmony_ci    union {
112e656c62eSopenharmony_ci        void *buffer;
113e656c62eSopenharmony_ci        unsigned long long addr;
114e656c62eSopenharmony_ci    };
115e656c62eSopenharmony_ci};
116e656c62eSopenharmony_ci
117e656c62eSopenharmony_ci#endif
118