1 /* SPDX-License-Identifier: BSD-2-Clause */
2 /*
3  * Copyright (c) 2017, EPAM Systems
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright notice,
10  * this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright notice,
13  * this list of conditions and the following disclaimer in the documentation
14  * and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 #ifndef KERNEL_MSG_PARAM_H
30 #define KERNEL_MSG_PARAM_H
31 
32 #include <compiler.h>
33 #include <kernel/msg_param.h>
34 #include <mm/mobj.h>
35 #include <optee_msg.h>
36 #include <stdio.h>
37 #include <types_ext.h>
38 
39 /**
40  * msg_param_mobj_from_noncontig() - construct mobj from non-contiguous
41  * list of pages.
42  *
43  * @buf_ptr - optee_msg_param.u.tmem.buf_ptr value
44  * @size - optee_msg_param.u.tmem.size value
45  * @shm_ref - optee_msg_param.u.tmem.shm_ref value
46  * @map_buffer - true if buffer needs to be mapped into OP-TEE address space
47  *
48  * return:
49  *	mobj or NULL on error
50  */
51 #ifdef CFG_CORE_DYN_SHM
52 struct mobj *msg_param_mobj_from_noncontig(paddr_t buf_ptr, size_t size,
53 					   uint64_t shm_ref, bool map_buffer);
54 #else
55 static inline struct mobj *
msg_param_mobj_from_noncontig(paddr_t buf_ptr __unused,size_t size __unused,uint64_t shm_ref __unused,bool map_buffer __unused)56 msg_param_mobj_from_noncontig(paddr_t buf_ptr __unused, size_t size __unused,
57 			      uint64_t shm_ref __unused,
58 			      bool map_buffer __unused)
59 {
60 	return NULL;
61 }
62 #endif
63 
64 /**
65  * msg_param_attr_is_tmem - helper functions that cheks if attribute is tmem
66  *
67  * @attr - attribute to check
68  *
69  * return:
70  *	corresponding size field
71  */
msg_param_attr_is_tmem(uint64_t attr)72 static inline bool msg_param_attr_is_tmem(uint64_t attr)
73 {
74 	switch (attr & OPTEE_MSG_ATTR_TYPE_MASK) {
75 	case OPTEE_MSG_ATTR_TYPE_TMEM_INPUT:
76 	case OPTEE_MSG_ATTR_TYPE_TMEM_OUTPUT:
77 	case OPTEE_MSG_ATTR_TYPE_TMEM_INOUT:
78 		return true;
79 	default:
80 		return false;
81 	}
82 }
83 
84 #endif	/*KERNEL_MSG_PARAM_H*/
85