1*9f31ef5aSJens Wiklander /* SPDX-License-Identifier: BSD-2-Clause */ 2*9f31ef5aSJens Wiklander /* 3*9f31ef5aSJens Wiklander * Copyright (c) 2019, Linaro Limited 4*9f31ef5aSJens Wiklander */ 5*9f31ef5aSJens Wiklander 6*9f31ef5aSJens Wiklander #ifndef __MM_FILE_H 7*9f31ef5aSJens Wiklander #define __MM_FILE_H 8*9f31ef5aSJens Wiklander 9*9f31ef5aSJens Wiklander #include <types_ext.h> 10*9f31ef5aSJens Wiklander #include <utee_defines.h> 11*9f31ef5aSJens Wiklander 12*9f31ef5aSJens Wiklander /* This is supposed to be large enough to hold any hash or tag used */ 13*9f31ef5aSJens Wiklander #define FILE_TAG_SIZE TEE_SHA256_HASH_SIZE 14*9f31ef5aSJens Wiklander 15*9f31ef5aSJens Wiklander /* 16*9f31ef5aSJens Wiklander * struct file_slice - one slice of a file 17*9f31ef5aSJens Wiklander * @fobj: Fobj holding the data of this slice 18*9f31ef5aSJens Wiklander * @page_offset: Offset in pages into the file where the @fobj is 19*9f31ef5aSJens Wiklander * located. 20*9f31ef5aSJens Wiklander */ 21*9f31ef5aSJens Wiklander struct file_slice { 22*9f31ef5aSJens Wiklander struct fobj *fobj; 23*9f31ef5aSJens Wiklander unsigned int page_offset; 24*9f31ef5aSJens Wiklander }; 25*9f31ef5aSJens Wiklander 26*9f31ef5aSJens Wiklander struct file; 27*9f31ef5aSJens Wiklander 28*9f31ef5aSJens Wiklander /* 29*9f31ef5aSJens Wiklander * file_new() - allocate a new struct file 30*9f31ef5aSJens Wiklander * @tag: Tag of the file 31*9f31ef5aSJens Wiklander * @taglen: Length of @tag 32*9f31ef5aSJens Wiklander * @slices: An array of file slices 33*9f31ef5aSJens Wiklander * @num_slices: Number of elements in the @slices array 34*9f31ef5aSJens Wiklander * 35*9f31ef5aSJens Wiklander * Returns a newly allocated file with the reference counters of the fobjs 36*9f31ef5aSJens Wiklander * in all the slices increased on success. Returns NULL on failure. 37*9f31ef5aSJens Wiklander */ 38*9f31ef5aSJens Wiklander struct file *file_new(uint8_t *tag, unsigned int taglen, 39*9f31ef5aSJens Wiklander struct file_slice *slices, unsigned int num_slices); 40*9f31ef5aSJens Wiklander 41*9f31ef5aSJens Wiklander /* 42*9f31ef5aSJens Wiklander * file_get() - Increase file reference counter 43*9f31ef5aSJens Wiklander * @f: File pointer 44*9f31ef5aSJens Wiklander * 45*9f31ef5aSJens Wiklander * Returns @f, if @f isn't NULL its reference counter is first increased. 46*9f31ef5aSJens Wiklander */ 47*9f31ef5aSJens Wiklander struct file *file_get(struct file *f); 48*9f31ef5aSJens Wiklander 49*9f31ef5aSJens Wiklander /* 50*9f31ef5aSJens Wiklander * file_get_by_tag() - Finds a file based on tag and increase reference counter 51*9f31ef5aSJens Wiklander * @tag: Tag of the file 52*9f31ef5aSJens Wiklander * @taglen: Length of @tag 53*9f31ef5aSJens Wiklander * 54*9f31ef5aSJens Wiklander * Returns a file with an increased reference counter if found, or NULL if 55*9f31ef5aSJens Wiklander * not found. 56*9f31ef5aSJens Wiklander */ 57*9f31ef5aSJens Wiklander struct file *file_get_by_tag(uint8_t *tag, unsigned int taglen); 58*9f31ef5aSJens Wiklander 59*9f31ef5aSJens Wiklander /* 60*9f31ef5aSJens Wiklander * file_put() - Decrease reference counter of file 61*9f31ef5aSJens Wiklander * @f: File pointer 62*9f31ef5aSJens Wiklander * 63*9f31ef5aSJens Wiklander * If reference counter reaches 0, matching the numbers of file_new() + 64*9f31ef5aSJens Wiklander * file_get() + file_get_by_tag(), the file is removed with reference 65*9f31ef5aSJens Wiklander * counters for all contained fobjs decreased. 66*9f31ef5aSJens Wiklander */ 67*9f31ef5aSJens Wiklander void file_put(struct file *f); 68*9f31ef5aSJens Wiklander 69*9f31ef5aSJens Wiklander /* 70*9f31ef5aSJens Wiklander * file_find_slice() - Find a slice covering the @page_offset 71*9f31ef5aSJens Wiklander * @f: File pointer 72*9f31ef5aSJens Wiklander * @page_offset: Offset that must be covered 73*9f31ef5aSJens Wiklander * 74*9f31ef5aSJens Wiklander * If a matching file slice is found it is returned, else NULL is returned. 75*9f31ef5aSJens Wiklander */ 76*9f31ef5aSJens Wiklander struct file_slice *file_find_slice(struct file *f, unsigned int page_offset); 77*9f31ef5aSJens Wiklander 78*9f31ef5aSJens Wiklander #endif /*__MM_FILE_H*/ 79*9f31ef5aSJens Wiklander 80