1eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/*
2eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * Copyright (C) 2015-2016 The Android Open Source Project
3eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *
4eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * Licensed under the Apache License, Version 2.0 (the "License");
5eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * you may not use this file except in compliance with the License.
6eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * You may obtain a copy of the License at
7eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *
8eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *		http://www.apache.org/licenses/LICENSE-2.0
9eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *
10eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * Unless required by applicable law or agreed to in writing, software
11eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * distributed under the License is distributed on an "AS IS" BASIS,
12eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * See the License for the specific language governing permissions and
14eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * limitations under the License.
15eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
16eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
17eb970794dc225e67144695352a93ce31827dbb7eAndres Morales#pragma once
18eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
19eb970794dc225e67144695352a93ce31827dbb7eAndres Morales#include <stdint.h>
20eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
21eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/*
22eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * Storage port names
23eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_CLIENT_TD_PORT:     Port used by clients that require tamper and
24eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                              rollback detection.
25eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_CLIENT_TDEA_PORT:   Port used by clients that require storage before
26eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                              the non-secure os has booted.
27eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_CLIENT_TP_PORT:     Port used by clients that require tamper proof
28eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                              storage. Note that non-secure code can prevent
29eb970794dc225e67144695352a93ce31827dbb7eAndres Morales                                read and write operations from succeeding, but
30eb970794dc225e67144695352a93ce31827dbb7eAndres Morales                                it cannot modify on-disk data.
31eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_DISK_PROXY_PORT:    Port used by non-secure proxy server
32eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
33eb970794dc225e67144695352a93ce31827dbb7eAndres Morales#define STORAGE_CLIENT_TD_PORT     "com.android.trusty.storage.client.td"
34eb970794dc225e67144695352a93ce31827dbb7eAndres Morales#define STORAGE_CLIENT_TDEA_PORT   "com.android.trusty.storage.client.tdea"
35eb970794dc225e67144695352a93ce31827dbb7eAndres Morales#define STORAGE_CLIENT_TP_PORT     "com.android.trusty.storage.client.tp"
36eb970794dc225e67144695352a93ce31827dbb7eAndres Morales#define STORAGE_DISK_PROXY_PORT    "com.android.trusty.storage.proxy"
37eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
38eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesenum storage_cmd {
39eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_REQ_SHIFT = 1,
40eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_RESP_BIT  = 1,
41eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
42eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_RESP_MSG_ERR   = STORAGE_RESP_BIT,
43eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
44eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_FILE_DELETE    = 1 << STORAGE_REQ_SHIFT,
45eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_FILE_OPEN      = 2 << STORAGE_REQ_SHIFT,
46eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_FILE_CLOSE     = 3 << STORAGE_REQ_SHIFT,
47eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_FILE_READ      = 4 << STORAGE_REQ_SHIFT,
48eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_FILE_WRITE     = 5 << STORAGE_REQ_SHIFT,
49eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_FILE_GET_SIZE  = 6 << STORAGE_REQ_SHIFT,
50eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_FILE_SET_SIZE  = 7 << STORAGE_REQ_SHIFT,
51eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
52eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_RPMB_SEND      = 8 << STORAGE_REQ_SHIFT,
53eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
54eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	/* transaction support */
55eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_END_TRANSACTION = 9 << STORAGE_REQ_SHIFT,
56eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
57eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
58eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
59eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * enum storage_err - error codes for storage protocol
60eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_NO_ERROR:           all OK
61eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_ERR_GENERIC:        unknown error. Can occur when there's an internal server
62eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                              error, e.g. the server runs out of memory or is in a bad state.
63eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_ERR_NOT_VALID:      input not valid. May occur if the arguments passed
64eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                              into the command are not valid, for example if the file handle
65eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                              passed in is not a valid one.
66eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_ERR_UNIMPLEMENTED:  the command passed in is not recognized
67eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_ERR_ACCESS:         the file is not accessible in the requested mode
68eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_ERR_NOT_FOUND:      the file was not found
69eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_ERR_EXIST           the file exists when it shouldn't as in with OPEN_CREATE | OPEN_EXCLUSIVE.
70eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_ERR_TRANSACT        returned by various operations to indicate that current transaction
71eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                              is in error state. Such state could be only cleared by sending
72eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                              STORAGE_END_TRANSACTION message.
73eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
74eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesenum storage_err {
75eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_NO_ERROR          = 0,
76eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_ERR_GENERIC       = 1,
77eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_ERR_NOT_VALID     = 2,
78eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_ERR_UNIMPLEMENTED = 3,
79eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_ERR_ACCESS        = 4,
80eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_ERR_NOT_FOUND     = 5,
81eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_ERR_EXIST         = 6,
82eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_ERR_TRANSACT      = 7,
83eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
84eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
85eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
86eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * storage_delete_flag - flags for controlling delete semantics
87eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
88eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesenum storage_file_delete_flag {
89eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_FILE_DELETE_MASK = 0,
90eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
91eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
92eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
93eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * storage_file_flag - Flags to control 'open' semantics.
94eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_FILE_OPEN_CREATE:           if this file does not exist, create it.
95eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_FILE_OPEN_CREATE_EXCLUSIVE: causes STORAGE_FILE_OPEN_CREATE to fail if the file
96eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                                      already exists. Only meaningful if used in combination
97eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                                      with STORAGE_FILE_OPEN_CREATE.
98eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_FILE_OPEN_TRUNCATE:         if this file already exists, discard existing content
99eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                                      and open it as a new file. No change in semantics if the
100eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                                      file does not exist.
101eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_FILE_OPEN_MASK:             mask for all open flags supported in current protocol.
102eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                                      All other bits must be set to 0.
103eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
104eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesenum storage_file_open_flag {
105eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_FILE_OPEN_CREATE             = (1 << 0),
106eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_FILE_OPEN_CREATE_EXCLUSIVE   = (1 << 1),
107eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_FILE_OPEN_TRUNCATE           = (1 << 2),
108eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_FILE_OPEN_MASK               = STORAGE_FILE_OPEN_CREATE |
109eb970794dc225e67144695352a93ce31827dbb7eAndres Morales					       STORAGE_FILE_OPEN_TRUNCATE |
110eb970794dc225e67144695352a93ce31827dbb7eAndres Morales					       STORAGE_FILE_OPEN_CREATE_EXCLUSIVE,
111eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
112eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
113eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
114eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * enum storage_msg_flag - protocol-level flags in struct storage_msg
115eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_MSG_FLAG_BATCH:             if set, command belongs to a batch transaction.
116eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                                      No response will be sent by the server until
117eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                                      it receives a command with this flag unset, at
118eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                                      which point a cummulative result for all messages
119eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                                      sent with STORAGE_MSG_FLAG_BATCH will be sent.
120eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                                      This is only supported by the non-secure disk proxy
121eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                                      server.
122eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_MSG_FLAG_PRE_COMMIT:        if set, indicates that server need to commit
123eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                                      pending changes before processing this message.
124eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_MSG_FLAG_POST_COMMIT:       if set, indicates that server need to commit
125eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                                      pending changes after processing this message.
126eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @STORAGE_MSG_FLAG_TRANSACT_COMPLETE: if set, indicates that server need to commit
127eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                                      current transaction after processing this message.
128eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                                      It is an alias for STORAGE_MSG_FLAG_POST_COMMIT.
129eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
130eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesenum storage_msg_flag {
131eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_MSG_FLAG_BATCH = 0x1,
132eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_MSG_FLAG_PRE_COMMIT = 0x2,
133eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_MSG_FLAG_POST_COMMIT = 0x4,
134eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	STORAGE_MSG_FLAG_TRANSACT_COMPLETE = STORAGE_MSG_FLAG_POST_COMMIT,
135eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
136eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
137eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/*
138eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * The following declarations are the message-specific contents of
139eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * the 'payload' element inside struct storage_msg.
140eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
141eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
142eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
143eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * struct storage_file_delete_req - request format for STORAGE_FILE_DELETE
144eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @flags: currently unused, must be set to 0.
145eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @name:  the name of the file
146eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
147eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesstruct storage_file_delete_req {
148eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t flags;
149eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	char name[0];
150eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
151eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
152eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
153eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * struct storage_file_open_req - request format for STORAGE_FILE_OPEN
154eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @flags: any of enum storage_file_flag or'ed together
155eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @name:  the name of the file
156eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
157eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesstruct storage_file_open_req {
158eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t flags;
159eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	char     name[0];
160eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
161eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
162eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
163eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * struct storage_file_open_resp - response format for STORAGE_FILE_OPEN
164eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @handle: opaque handle to the opened file. Only present on success.
165eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
166eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesstruct storage_file_open_resp {
167eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t handle;
168eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
169eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
170eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
171eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * struct storage_file_close_req - request format for STORAGE_FILE_CLOSE
172eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @handle: the handle for the file to close
173eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
174eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesstruct storage_file_close_req {
175eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t handle;
176eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
177eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
178eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
179eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * struct storage_file_read_req - request format for STORAGE_FILE_READ
180eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @handle: the handle for the file from which to read
181eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @size:   the quantity of bytes to read from the file
182eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @offset: the offset in the file from whence to read
183eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
184eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesstruct storage_file_read_req {
185eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t handle;
186eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t size;
187eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint64_t offset;
188eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
189eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
190eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
191eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * struct storage_file_read_resp - response format for STORAGE_FILE_READ
192eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @data: beginning of data retrieved from file
193eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
194eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesstruct storage_file_read_resp {
195eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint8_t data[0];
196eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
197eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
198eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
199eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * struct storage_file_write_req - request format for STORAGE_FILE_WRITE
200eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @handle:     the handle for the file to write to
201eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @offset:     the offset in the file from whence to write
202eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @__reserved: unused, must be set to 0.
203eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @data:       beginning of the data to be written
204eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
205eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesstruct storage_file_write_req {
206eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint64_t offset;
207eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t handle;
208eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t __reserved;
209eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint8_t  data[0];
210eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
211eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
212eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
213eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * struct storage_file_get_size_req - request format for STORAGE_FILE_GET_SIZE
214eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @handle: handle for which the size is requested
215eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
216eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesstruct storage_file_get_size_req {
217eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t handle;
218eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
219eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
220eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
221eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * struct storage_file_get_size_resp - response format for STORAGE_FILE_GET_SIZE
222eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @size:   the size of the file
223eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
224eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesstruct storage_file_get_size_resp {
225eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint64_t size;
226eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
227eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
228eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
229eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * struct storage_file_set_size_req - request format for STORAGE_FILE_SET_SIZE
230eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @handle: the file handle
231eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @size:   the desired size of the file
232eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
233eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesstruct storage_file_set_size_req {
234eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint64_t size;
235eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t handle;
236eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
237eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
238eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
239eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * struct storage_rpmb_send_req - request format for STORAGE_RPMB_SEND
240eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @reliable_write_size:        size in bytes of reliable write region
241eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @write_size:                 size in bytes of write region
242eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @read_size:                  number of bytes to read for a read request
243eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @__reserved:                 unused, must be set to 0
244eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @payload:                    start of reliable write region, followed by
245eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *                              write region.
246eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *
247eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * Only used in proxy<->server interface.
248eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
249eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesstruct storage_rpmb_send_req {
250eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t reliable_write_size;
251eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t write_size;
252eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t read_size;
253eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t __reserved;
254eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint8_t  payload[0];
255eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
256eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
257eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
258eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * struct storage_rpmb_send_resp: response type for STORAGE_RPMB_SEND
259eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @data: the data frames frames retrieved from the MMC.
260eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
261eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesstruct storage_rpmb_send_resp {
262eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint8_t data[0];
263eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
264eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
265eb970794dc225e67144695352a93ce31827dbb7eAndres Morales/**
266eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * struct storage_msg - generic req/resp format for all storage commands
267eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @cmd:        one of enum storage_cmd
268eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @op_id:      client chosen operation identifier for an instance
269eb970794dc225e67144695352a93ce31827dbb7eAndres Morales *              of a command or atomic grouping of commands (transaction).
270eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @flags:      one or many of enum storage_msg_flag or'ed together.
271eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @size:       total size of the message including this header
272eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @result:     one of enum storage_err
273eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @__reserved: unused, must be set to 0.
274eb970794dc225e67144695352a93ce31827dbb7eAndres Morales * @payload:    beginning of command specific message format
275eb970794dc225e67144695352a93ce31827dbb7eAndres Morales */
276eb970794dc225e67144695352a93ce31827dbb7eAndres Moralesstruct storage_msg {
277eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t cmd;
278eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t op_id;
279eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t flags;
280eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t size;
281eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	int32_t  result;
282eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint32_t __reserved;
283eb970794dc225e67144695352a93ce31827dbb7eAndres Morales	uint8_t  payload[0];
284eb970794dc225e67144695352a93ce31827dbb7eAndres Morales};
285eb970794dc225e67144695352a93ce31827dbb7eAndres Morales
286