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