Home | History | Annotate | Download | only in lib
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #pragma once
     18 
     19 #include <stdint.h>
     20 #include <trusty/interface/storage.h>
     21 
     22 #define STORAGE_MAX_NAME_LENGTH_BYTES 159
     23 
     24 __BEGIN_DECLS
     25 
     26 typedef uint32_t storage_session_t;
     27 typedef uint64_t file_handle_t;
     28 typedef uint64_t storage_off_t;
     29 
     30 #define STORAGE_INVALID_SESSION ((storage_session_t)-1)
     31 
     32 /**
     33  * storage_ops_flags - storage related operation flags
     34  * @STORAGE_OP_COMPLETE: forces to commit current transaction
     35  */
     36 enum storage_ops_flags {
     37     STORAGE_OP_COMPLETE = 0x1,
     38 };
     39 
     40 /**
     41  * storage_open_session() - Opens a storage session.
     42  * @device:    device node for talking with Trusty
     43  * @session_p: pointer to location in which to store session handle
     44  *             in case of success.
     45  *
     46  * Return: 0 on success, or an error code < 0 on failure.
     47  */
     48 int storage_open_session(const char *device, storage_session_t *session_p, const char *port);
     49 
     50 /**
     51  * storage_close_session() - Closes the session.
     52  * @session: the session to close
     53  */
     54 void storage_close_session(storage_session_t session);
     55 
     56 /**
     57  * storage_open_file() - Opens a file
     58  * @session:  the storage_session_t returned from a call to storage_open_session
     59  * @handle_p: pointer to location in which to store file handle in case of success
     60  * @name:     a null-terminated string identifier of the file to open.
     61  *            Cannot be more than STORAGE_MAX_NAME_LENGTH_BYTES in length.
     62  * @flags:    A bitmask consisting any storage_file_flag value or'ed together:
     63  * - STORAGE_FILE_OPEN_CREATE:           if this file does not exist, create it.
     64  * - STORAGE_FILE_OPEN_CREATE_EXCLUSIVE: when specified, opening file with
     65  *                                       STORAGE_OPEN_FILE_CREATE flag will
     66  *                                       fail if the file already exists.
     67  *                                       Only meaningful if used in combination
     68  *                                       with STORAGE_FILE_OPEN_CREATE flag.
     69  * - STORAGE_FILE_OPEN_TRUNCATE: if this file already exists, discard existing
     70  *                               content and open it as a new file. No change
     71  *                               in semantics if the  file does not exist.
     72  * @opflags: a combination of @storage_op_flags
     73  *
     74  * Return: 0 on success, or an error code < 0 on failure.
     75  */
     76 int storage_open_file(storage_session_t session, file_handle_t *handle_p,
     77                       const char *name, uint32_t flags, uint32_t opflags);
     78 
     79 /**
     80  * storage_close_file() - Closes a file.
     81  * @handle: the file_handle_t retrieved from storage_open_file
     82  */
     83 void storage_close_file(file_handle_t handle);
     84 
     85 /**
     86  * storage_delete_file - Deletes a file.
     87  * @session: the storage_session_t returned from a call to storage_open_session
     88  * @name: the name of the file to delete
     89  * @opflags: a combination of @storage_op_flags
     90  *
     91  * Return: 0 on success, or an error code < 0 on failure.
     92  */
     93 int storage_delete_file(storage_session_t session, const char *name,
     94                         uint32_t opflags);
     95 
     96 /**
     97  * storage_read() - Reads a file at a given offset.
     98  * @handle: the file_handle_t retrieved from storage_open_file
     99  * @off: the start offset from whence to read in the file
    100  * @buf: the buffer in which to write the data read
    101  * @size: the size of buf and number of bytes to read
    102  *
    103  * Return: the number of bytes read on success, negative error code on failure
    104  */
    105 ssize_t storage_read(file_handle_t handle,
    106                      storage_off_t off, void *buf, size_t size);
    107 
    108 /**
    109  * storage_write() - Writes to a file at a given offset. Grows the file if necessary.
    110  * @handle: the file_handle_t retrieved from storage_open_file
    111  * @off: the start offset from whence to write in the file
    112  * @buf: the buffer containing the data to write
    113  * @size: the size of buf and number of bytes to write
    114  * @opflags: a combination of @storage_op_flags
    115  *
    116  * Return: the number of bytes written on success, negative error code on failure
    117  */
    118 ssize_t storage_write(file_handle_t handle,
    119                       storage_off_t off, const void *buf, size_t size,
    120                       uint32_t opflags);
    121 
    122 /**
    123  * storage_set_file_size() - Sets the size of the file.
    124  * @handle: the file_handle_t retrieved from storage_open_file
    125  * @off: the number of bytes to set as the new size of the file
    126  * @opflags: a combination of @storage_op_flags
    127  *
    128  * Return: 0 on success, negative error code on failure.
    129  */
    130 int storage_set_file_size(file_handle_t handle, storage_off_t file_size,
    131                           uint32_t opflags);
    132 
    133 /**
    134  * storage_get_file_size() - Gets the size of the file.
    135  * @session: the storage_session_t returned from a call to storage_open_session
    136  * @handle: the file_handle_t retrieved from storage_open_file
    137  * @size: pointer to storage_off_t in which to store the file size
    138  *
    139  * Return: 0 on success, negative error code on failure.
    140  */
    141 int storage_get_file_size(file_handle_t handle, storage_off_t *size);
    142 
    143 
    144 /**
    145  * storage_end_transaction: End current transaction
    146  * @session: the storage_session_t returned from a call to storage_open_session
    147  * @complete: if true, commit current transaction, discard it otherwise
    148  *
    149  * Return: 0 on success, negative error code on failure.
    150  */
    151 int storage_end_transaction(storage_session_t session, bool complete);
    152 
    153 
    154 __END_DECLS
    155