xref: /optee_os/core/include/kernel/msg_param.h (revision c37489baeb297c2d500e8f718a7edb55179bf64e)
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 <mm/mobj.h>
34 #include <optee_msg.h>
35 #include <stdio.h>
36 #include <types_ext.h>
37 
38 /**
39  * msg_param_mobj_from_noncontig() - construct mobj from non-contiguous
40  * list of pages.
41  *
42  * @buf_ptr - optee_msg_param.u.tmem.buf_ptr value
43  * @size - optee_msg_param.u.tmem.size value
44  * @shm_ref - optee_msg_param.u.tmem.shm_ref value
45  * @map_buffer - true if buffer needs to be mapped into OP-TEE address space
46  *
47  * return:
48  *	mobj or NULL on error
49  */
50 #ifdef CFG_CORE_DYN_SHM
51 struct mobj *msg_param_mobj_from_noncontig(paddr_t buf_ptr, size_t size,
52 					   uint64_t shm_ref, bool map_buffer);
53 #else
54 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)55 msg_param_mobj_from_noncontig(paddr_t buf_ptr __unused, size_t size __unused,
56 			      uint64_t shm_ref __unused,
57 			      bool map_buffer __unused)
58 {
59 	return NULL;
60 }
61 #endif
62 
63 /**
64  * msg_param_attr_is_tmem - helper functions that cheks if attribute is tmem
65  *
66  * @attr - attribute to check
67  *
68  * return:
69  *	corresponding size field
70  */
msg_param_attr_is_tmem(uint64_t attr)71 static inline bool msg_param_attr_is_tmem(uint64_t attr)
72 {
73 	switch (attr & OPTEE_MSG_ATTR_TYPE_MASK) {
74 	case OPTEE_MSG_ATTR_TYPE_TMEM_INPUT:
75 	case OPTEE_MSG_ATTR_TYPE_TMEM_OUTPUT:
76 	case OPTEE_MSG_ATTR_TYPE_TMEM_INOUT:
77 		return true;
78 	default:
79 		return false;
80 	}
81 }
82 
83 #endif	/*__KERNEL_MSG_PARAM_H*/
84