First version
[3rdparty/ote_partner/tlk.git] / include / lib / ote / ote_protocol.h
1 /*
2  * Copyright (c) 2012-2014, NVIDIA CORPORATION. All rights reserved
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining
5  * a copy of this software and associated documentation files
6  * (the "Software"), to deal in the Software without restriction,
7  * including without limitation the rights to use, copy, modify, merge,
8  * publish, distribute, sublicense, and/or sell copies of the Software,
9  * and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be
13  * included in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22  */
23
24 #ifndef __OTE_PROTOCOL_H
25 #define __OTE_PROTOCOL_H
26
27 /*
28  * Holds implementation structs/defines to be used only by the secure os
29  * the trusted application interface library (and should not be included
30  * by the trusted application directly).
31  */
32 #include <stddef.h>
33 #include "ote_types.h"
34 #include <common/ote_common.h>
35 #include <common/ote_error.h>
36 #include <service/ote_service.h>
37 #include <service/ote_storage.h>
38 #include <service/ote_manifest.h>
39 #include <ext_nv/ote_ext_nv.h>
40
41 /*
42  * Get property info
43  */
44 enum {
45         OTE_PROP_DATA_TYPE_UUID         = 1,
46         OTE_PROP_DATA_TYPE_IDENTITY     = 2,
47 };
48
49 /*
50  * The following describes the layout of the shared memory buffer
51  * used for SS-related communication between the NS and S worlds.
52  */
53 #define TE_SHMEM_DNAME_SZ       (64)
54 #define TE_SHMEM_FNAME_SZ       (128)
55 #define TE_SHMEM_DATA_SZ        (2048)
56
57 typedef struct {
58         char            dname[TE_SHMEM_DNAME_SZ];
59         char            fname[TE_SHMEM_FNAME_SZ];
60         uint32_t        flags;
61 } te_ss_create_params_t;
62
63 typedef struct {
64         char            dname[TE_SHMEM_DNAME_SZ];
65         char            fname[TE_SHMEM_FNAME_SZ];
66 } te_ss_delete_params_t;
67
68 typedef struct {
69         char            dname[TE_SHMEM_DNAME_SZ];
70         char            fname[TE_SHMEM_FNAME_SZ];
71         uint32_t        flags;
72         uint32_t        handle;
73 } te_ss_open_params_t;
74
75 typedef struct {
76         uint32_t        handle;
77 } te_ss_close_params_t;
78
79 typedef struct {
80         uint32_t        handle;
81         uint32_t        data_size;
82         char            data[TE_SHMEM_DATA_SZ];
83 } te_ss_write_params_t;
84
85 typedef struct {
86         uint32_t        handle;
87         uint32_t        data_size;
88         char            data[TE_SHMEM_DATA_SZ];
89 } te_ss_read_params_t;
90
91 typedef struct {
92         uint32_t        handle;
93         int32_t         offset;
94         uint32_t        whence;
95 } te_ss_seek_params_t;
96
97 typedef struct {
98         uint32_t        handle;
99         uint32_t        length;
100 } te_ss_trunc_params_t;
101
102 typedef struct {
103         uint32_t        handle;
104         uint32_t        size;
105 } te_ss_get_size_params_t;
106
107 typedef union {
108         te_ss_create_params_t           f_create;
109         te_ss_delete_params_t           f_delete;
110         te_ss_open_params_t             f_open;
111         te_ss_close_params_t            f_close;
112         te_ss_read_params_t             f_read;
113         te_ss_write_params_t            f_write;
114         te_ss_seek_params_t             f_seek;
115         te_ss_trunc_params_t            f_trunc;
116         te_ss_get_size_params_t         f_getsize;
117 } te_ss_req_params_t;
118
119 /*
120  * Parameter block exchanged on each file system operation request.
121  */
122 typedef struct {
123         uint32_t                type;
124         int32_t                 result;
125         uint32_t                params_size;
126         te_ss_req_params_t      params;
127 } te_ss_op_t;
128
129 #define DEVICE_UID_SIZE_WORDS   4
130
131 typedef struct {
132         uint32_t id[DEVICE_UID_SIZE_WORDS];
133 } te_device_id_args_t;
134
135 #endif /* __OTE_PROTOCOL_H */