tlk: 6/19 update
[3rdparty/ote_partner/tlk.git] / include / kernel / task_load.h
1 /*
2  * Copyright (c) 2013-2014, NVIDIA CORPORATION. All rights reserved
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining
5  * a copy of this software and associated documentation files
6  * (the "Software"), to deal in the Software without restriction,
7  * including without limitation the rights to use, copy, modify, merge,
8  * publish, distribute, sublicense, and/or sell copies of the Software,
9  * and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be
13  * included in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22  */
23 #ifndef __KERNEL_TASK_LOAD_H
24 #define __KERNEL_TASK_LOAD_H
25
26 #include <kernel/task.h>
27 #include <kernel/task_unload.h>
28
29 /*!
30  * Privileged "installer TA" starting the task may request
31  * some overrides for the task being started.
32  *
33  * Currently only supports overriding the max size
34  * of the stack or heap configured in the manifest and the
35  * task name.
36  *
37  * Other types of overrides / restrictions may be supported later.
38  *
39  * te_task_restrictions_t is compatible with this.
40  */
41 typedef struct {
42         /* currently supported overrides; all-zero values ignored */
43         uint32_t min_stack_size;
44         uint32_t min_heap_size;
45         char     task_name[OTE_TASK_NAME_MAX_LENGTH];
46 } task_restrictions_t;
47
48 /*!
49  * Contains copy of information in the task manifest fixed fields.
50  * te_task_info_t is compatible with this
51  *
52  * Most manifest fields and some task_t fields are copied here.
53  */
54 typedef struct {
55         te_service_id_t uuid;
56         u_int    manifest_exists;
57         u_int    multi_instance;
58         u_int    min_stack_size;
59         u_int    min_heap_size;
60         u_int    map_io_mem_cnt;
61         u_int    restrict_access;
62         u_int    authorizations;
63         u_int    initial_state;
64         char     task_name[OTE_TASK_NAME_MAX_LENGTH];
65         unsigned char task_private_data[OTE_TASK_PRIVATE_DATA_LENGTH];
66 } task_info_t;
67
68 void task_load_config(vaddr_t vaddr_begin, vaddr_t *vaddr_end_p);
69
70 void task_load_init(void);
71
72 void task_set_name(task_t *task, const char *name);
73
74 u_int task_allowed_to_load_tasks(task_t *taskp);
75
76 /*!
77  * Called from syscall ioctl handler to perform task loading and
78  * related operations.
79  */
80 struct te_task_request_args_s;
81
82 int task_request_handler(struct te_task_request_args_s *args);
83
84 /*! Free the memory allocated from TLK heap for task image when it was
85  * loaded to the system.
86  *
87  * VADDR is the TLK virtual address of the allocated TASK_BYTE_SIZE size object.
88  */
89 void task_dealloc_memory(vaddr_t vaddr, u_int task_byte_size);
90
91 #endif /* __KERNEL_TASK_LOAD_H */