xref: /xnu-11215.81.4/osfmk/kern/exclaves_driverkit.h (revision d4514f0bc1d3f944c22d92e68b646ac3fb40d452)
1 /*
2  * Copyright (c) 2023 Apple Inc. All rights reserved.
3  *
4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5  *
6  * This file contains Original Code and/or Modifications of Original Code
7  * as defined in and that are subject to the Apple Public Source License
8  * Version 2.0 (the 'License'). You may not use this file except in
9  * compliance with the License. The rights granted to you under the License
10  * may not be used to create, or enable the creation or redistribution of,
11  * unlawful or unlicensed copies of an Apple operating system, or to
12  * circumvent, violate, or enable the circumvention or violation of, any
13  * terms of an Apple operating system software license agreement.
14  *
15  * Please obtain a copy of the License at
16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17  *
18  * The Original Code and all software distributed under the License are
19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23  * Please see the License for the specific language governing rights and
24  * limitations under the License.
25  *
26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27  */
28 
29 #pragma once
30 
31 #if CONFIG_EXCLAVES
32 
33 #if __has_include(<Tightbeam/tightbeam.h>)
34 
35 #include <stdint.h>
36 
37 #include <Tightbeam/tightbeam.h>
38 #include <Tightbeam/tightbeam_private.h>
39 
40 #include "kern/exclaves.tightbeam.h"
41 
42 __BEGIN_DECLS
43 
44 /* Legacy upcall handlers */
45 
46 extern tb_error_t
47     exclaves_driverkit_upcall_legacy_irq_register(const uint64_t id, const int32_t index,
48     tb_error_t (^completion)(xnuupcalls_xnuupcalls_irq_register__result_s));
49 
50 extern tb_error_t
51     exclaves_driverkit_upcall_legacy_irq_remove(const uint64_t id, const int32_t index,
52     tb_error_t (^completion)(xnuupcalls_xnuupcalls_irq_remove__result_s));
53 
54 extern tb_error_t
55     exclaves_driverkit_upcall_legacy_irq_enable(const uint64_t id, const int32_t index,
56     tb_error_t (^completion)(xnuupcalls_xnuupcalls_irq_enable__result_s));
57 
58 extern tb_error_t
59     exclaves_driverkit_upcall_legacy_irq_disable(const uint64_t id, const int32_t index,
60     tb_error_t (^completion)(xnuupcalls_xnuupcalls_irq_disable__result_s));
61 
62 extern tb_error_t
63     exclaves_driverkit_upcall_legacy_timer_register(const uint64_t id,
64     tb_error_t (^completion)(xnuupcalls_xnuupcalls_timer_register__result_s));
65 
66 extern tb_error_t
67     exclaves_driverkit_upcall_legacy_timer_remove(const uint64_t id, const uint32_t timer_id,
68     tb_error_t (^completion)(xnuupcalls_xnuupcalls_timer_remove__result_s));
69 
70 extern tb_error_t
71     exclaves_driverkit_upcall_legacy_timer_enable(const uint64_t id, const uint32_t timer_id,
72     tb_error_t (^completion)(xnuupcalls_xnuupcalls_timer_enable__result_s));
73 
74 extern tb_error_t
75     exclaves_driverkit_upcall_legacy_timer_disable(const uint64_t id, const uint32_t timer_id,
76     tb_error_t (^completion)(xnuupcalls_xnuupcalls_timer_disable__result_s));
77 
78 extern tb_error_t
79     exclaves_driverkit_upcall_legacy_timer_set_timeout(const uint64_t id,
80     const uint32_t timer_id,
81     const struct xnuupcalls_drivertimerspecification_s *duration,
82     tb_error_t (^completion)(xnuupcalls_xnuupcalls_timer_set_timeout__result_s));
83 
84 extern tb_error_t
85     exclaves_driverkit_upcall_legacy_timer_cancel_timeout(const uint64_t id,
86     const uint32_t timer_id,
87     tb_error_t (^completion)(xnuupcalls_xnuupcalls_timer_cancel_timeout__result_s));
88 
89 extern tb_error_t
90     exclaves_driverkit_upcall_legacy_lock_wl(const uint64_t id,
91     tb_error_t (^completion)(xnuupcalls_xnuupcalls_lock_wl__result_s));
92 
93 extern tb_error_t
94     exclaves_driverkit_upcall_legacy_unlock_wl(const uint64_t id,
95     tb_error_t (^completion)(xnuupcalls_xnuupcalls_unlock_wl__result_s));
96 
97 extern tb_error_t
98     exclaves_driverkit_upcall_legacy_async_notification_signal(const uint64_t id,
99     const uint32_t notificationID,
100     tb_error_t (^completion)(xnuupcalls_xnuupcalls_async_notification_signal__result_s));
101 
102 extern tb_error_t
103     exclaves_driverkit_upcall_legacy_mapper_activate(const uint64_t id,
104     const uint32_t mapperIndex,
105     tb_error_t (^completion)(xnuupcalls_xnuupcalls_mapper_activate__result_s));
106 
107 extern tb_error_t
108     exclaves_driverkit_upcall_legacy_mapper_deactivate(const uint64_t id,
109     const uint32_t mapperIndex,
110     tb_error_t (^completion)(xnuupcalls_xnuupcalls_mapper_deactivate__result_s));
111 
112 extern tb_error_t
113     exclaves_driverkit_upcall_legacy_notification_signal(const uint64_t id,
114     const uint32_t mask,
115     tb_error_t (^completion)(xnuupcalls_xnuupcalls_notification_signal__result_s));
116 
117 extern tb_error_t
118     exclaves_driverkit_upcall_legacy_ane_setpowerstate(const uint64_t id,
119     const uint32_t desiredState,
120     tb_error_t (^completion)(xnuupcalls_xnuupcalls_ane_setpowerstate__result_s));
121 
122 extern tb_error_t
123     exclaves_driverkit_upcall_legacy_ane_worksubmit(const uint64_t id, const uint64_t requestID,
124     const uint32_t taskDescriptorCount, const uint64_t submitTimestamp,
125     tb_error_t (^completion)(xnuupcalls_xnuupcalls_ane_worksubmit__result_s));
126 
127 extern tb_error_t
128     exclaves_driverkit_upcall_legacy_ane_workbegin(const uint64_t id, const uint64_t requestID,
129     const uint64_t beginTimestamp,
130     tb_error_t (^completion)(xnuupcalls_xnuupcalls_ane_workbegin__result_s));
131 
132 extern tb_error_t
133     exclaves_driverkit_upcall_legacy_ane_workend(const uint64_t id, const uint64_t requestID,
134     tb_error_t (^completion)(xnuupcalls_xnuupcalls_ane_workend__result_s));
135 
136 /* Upcall handlers */
137 
138 extern tb_error_t
139     exclaves_driverkit_upcall_irq_register(const uint64_t id, const int32_t index,
140     tb_error_t (^completion)(xnuupcallsv2_driverupcallsprivate_irqregister__result_s));
141 
142 extern tb_error_t
143     exclaves_driverkit_upcall_irq_remove(const uint64_t id, const int32_t index,
144     tb_error_t (^completion)(xnuupcallsv2_driverupcallsprivate_irqremove__result_s));
145 
146 extern tb_error_t
147     exclaves_driverkit_upcall_irq_enable(const uint64_t id, const int32_t index,
148     tb_error_t (^completion)(xnuupcallsv2_driverupcallsprivate_irqenable__result_s));
149 
150 extern tb_error_t
151     exclaves_driverkit_upcall_irq_disable(const uint64_t id, const int32_t index,
152     tb_error_t (^completion)(xnuupcallsv2_driverupcallsprivate_irqdisable__result_s));
153 
154 extern tb_error_t
155     exclaves_driverkit_upcall_timer_register(const uint64_t id,
156     tb_error_t (^completion)(xnuupcallsv2_driverupcallsprivate_timerregister__result_s));
157 
158 extern tb_error_t
159     exclaves_driverkit_upcall_timer_remove(const uint64_t id, const uint32_t timer_id,
160     tb_error_t (^completion)(xnuupcallsv2_driverupcallsprivate_timerremove__result_s));
161 
162 extern tb_error_t
163     exclaves_driverkit_upcall_timer_enable(const uint64_t id, const uint32_t timer_id,
164     tb_error_t (^completion)(xnuupcallsv2_driverupcallsprivate_timerenable__result_s));
165 
166 extern tb_error_t
167     exclaves_driverkit_upcall_timer_disable(const uint64_t id, const uint32_t timer_id,
168     tb_error_t (^completion)(xnuupcallsv2_driverupcallsprivate_timerdisable__result_s));
169 
170 extern tb_error_t
171     exclaves_driverkit_upcall_timer_set_timeout(const uint64_t id,
172     const uint32_t timer_id,
173     const struct xnuupcallsv2_drivertimerspecification_s *duration,
174     tb_error_t (^completion)(xnuupcallsv2_driverupcallsprivate_timersettimeout__result_s));
175 
176 extern tb_error_t
177     exclaves_driverkit_upcall_timer_cancel_timeout(const uint64_t id,
178     const uint32_t timer_id,
179     tb_error_t (^completion)(xnuupcallsv2_driverupcallsprivate_timercanceltimeout__result_s));
180 
181 extern tb_error_t
182     exclaves_driverkit_upcall_lock_workloop(const uint64_t id,
183     tb_error_t (^completion)(xnuupcallsv2_driverupcallsprivate_lockworkloop__result_s));
184 
185 extern tb_error_t
186     exclaves_driverkit_upcall_unlock_workloop(const uint64_t id,
187     tb_error_t (^completion)(xnuupcallsv2_driverupcallsprivate_unlockworkloop__result_s));
188 
189 extern tb_error_t
190     exclaves_driverkit_upcall_async_notification_signal(const uint64_t id,
191     const uint32_t notificationID,
192     tb_error_t (^completion)(xnuupcallsv2_driverupcallsprivate_asyncnotificationsignal__result_s));
193 
194 extern tb_error_t
195     exclaves_driverkit_upcall_mapper_activate(const uint64_t id,
196     const uint32_t mapperIndex,
197     tb_error_t (^completion)(xnuupcallsv2_driverupcallsprivate_mapperactivate__result_s));
198 
199 extern tb_error_t
200     exclaves_driverkit_upcall_mapper_deactivate(const uint64_t id,
201     const uint32_t mapperIndex,
202     tb_error_t (^completion)(xnuupcallsv2_driverupcallsprivate_mapperdeactivate__result_s));
203 
204 extern tb_error_t
205     exclaves_driverkit_upcall_notification_signal(const uint64_t id,
206     const uint32_t mask,
207     tb_error_t (^completion)(xnuupcallsv2_notificationupcallsprivate_notificationsignal__result_s));
208 
209 extern tb_error_t
210     exclaves_driverkit_upcall_ane_setpowerstate(const uint64_t id,
211     const uint32_t desiredState,
212     tb_error_t (^completion)(xnuupcallsv2_aneupcallsprivate_anesetpowerstate__result_s));
213 
214 extern tb_error_t
215     exclaves_driverkit_upcall_ane_worksubmit(const uint64_t id, const uint64_t requestID,
216     const uint32_t taskDescriptorCount, const uint64_t submitTimestamp,
217     tb_error_t (^completion)(xnuupcallsv2_aneupcallsprivate_aneworksubmit__result_s));
218 
219 extern tb_error_t
220     exclaves_driverkit_upcall_ane_workbegin(const uint64_t id, const uint64_t requestID,
221     const uint64_t beginTimestamp,
222     tb_error_t (^completion)(xnuupcallsv2_aneupcallsprivate_aneworkbegin__result_s));
223 
224 extern tb_error_t
225     exclaves_driverkit_upcall_ane_workend(const uint64_t id, const uint64_t requestID,
226     tb_error_t (^completion)(xnuupcallsv2_aneupcallsprivate_aneworkend__result_s));
227 
228 extern kern_return_t
229 exclaves_driver_service_lookup(const char *service_name, uint64_t *endpoint);
230 
231 __END_DECLS
232 
233 #endif /* __has_include(<Tightbeam/tightbeam.h>) */
234 
235 #endif /* CONFIG_EXCLAVES */
236