xref: /optee_os/core/include/kernel/msg_param.h (revision 18c5148d357e51235bc842b7826ff6e8da109902)
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 <optee_msg.h>
33 #include <stdio.h>
34 #include <types_ext.h>
35 #include <kernel/msg_param.h>
36 #include <mm/mobj.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 struct mobj *msg_param_mobj_from_noncontig(paddr_t buf_ptr, size_t size,
51 					   uint64_t shm_ref, bool map_buffer);
52 
53 /**
54  * msg_param_attr_is_tmem - helper functions that cheks if attribute is tmem
55  *
56  * @attr - attribute to check
57  *
58  * return:
59  *	corresponding size field
60  */
61 static inline bool msg_param_attr_is_tmem(uint64_t attr)
62 {
63 	switch (attr & OPTEE_MSG_ATTR_TYPE_MASK) {
64 	case OPTEE_MSG_ATTR_TYPE_TMEM_INPUT:
65 	case OPTEE_MSG_ATTR_TYPE_TMEM_OUTPUT:
66 	case OPTEE_MSG_ATTR_TYPE_TMEM_INOUT:
67 		return true;
68 	default:
69 		return false;
70 	}
71 }
72 
73 #endif	/*KERNEL_MSG_PARAM_H*/
74