xref: /llvm-project/offload/plugins-nextgen/amdgpu/dynamic_hsa/hsa.h (revision 676a1e6643c7f8db22607fb98984965d51518b40)
1330d8983SJohannes Doerfert //===--- amdgpu/dynamic_hsa/hsa.h --------------------------------- C++ -*-===//
2330d8983SJohannes Doerfert //
3330d8983SJohannes Doerfert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4330d8983SJohannes Doerfert // See https://llvm.org/LICENSE.txt for license information.
5330d8983SJohannes Doerfert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6330d8983SJohannes Doerfert //
7330d8983SJohannes Doerfert //===----------------------------------------------------------------------===//
8330d8983SJohannes Doerfert //
9330d8983SJohannes Doerfert // The parts of the hsa api that are presently in use by the amdgpu plugin
10330d8983SJohannes Doerfert //
11330d8983SJohannes Doerfert //===----------------------------------------------------------------------===//
12330d8983SJohannes Doerfert #ifndef HSA_RUNTIME_INC_HSA_H_
13330d8983SJohannes Doerfert #define HSA_RUNTIME_INC_HSA_H_
14330d8983SJohannes Doerfert 
15330d8983SJohannes Doerfert #include <stddef.h>
16330d8983SJohannes Doerfert #include <stdint.h>
17330d8983SJohannes Doerfert 
18330d8983SJohannes Doerfert // Detect and set large model builds.
19330d8983SJohannes Doerfert #undef HSA_LARGE_MODEL
20330d8983SJohannes Doerfert #if defined(__LP64__) || defined(_M_X64)
21330d8983SJohannes Doerfert #define HSA_LARGE_MODEL
22330d8983SJohannes Doerfert #endif
23330d8983SJohannes Doerfert 
24330d8983SJohannes Doerfert #ifdef __cplusplus
25330d8983SJohannes Doerfert extern "C" {
26330d8983SJohannes Doerfert #endif
27330d8983SJohannes Doerfert 
28330d8983SJohannes Doerfert typedef enum {
29330d8983SJohannes Doerfert   HSA_STATUS_SUCCESS = 0x0,
30330d8983SJohannes Doerfert   HSA_STATUS_INFO_BREAK = 0x1,
31330d8983SJohannes Doerfert   HSA_STATUS_ERROR = 0x1000,
32330d8983SJohannes Doerfert   HSA_STATUS_ERROR_INVALID_CODE_OBJECT = 0x1010,
33330d8983SJohannes Doerfert   HSA_STATUS_ERROR_NOT_INITIALIZED = 0x100B,
349a101322SJohannes Doerfert   HSA_STATUS_ERROR_EXCEPTION = 0x1016,
35330d8983SJohannes Doerfert } hsa_status_t;
36330d8983SJohannes Doerfert 
37330d8983SJohannes Doerfert hsa_status_t hsa_status_string(hsa_status_t status, const char **status_string);
38330d8983SJohannes Doerfert 
39330d8983SJohannes Doerfert typedef struct hsa_dim3_s {
40330d8983SJohannes Doerfert   uint32_t x;
41330d8983SJohannes Doerfert   uint32_t y;
42330d8983SJohannes Doerfert   uint32_t z;
43330d8983SJohannes Doerfert } hsa_dim3_t;
44330d8983SJohannes Doerfert 
45330d8983SJohannes Doerfert hsa_status_t hsa_init();
46330d8983SJohannes Doerfert 
47330d8983SJohannes Doerfert hsa_status_t hsa_shut_down();
48330d8983SJohannes Doerfert 
49330d8983SJohannes Doerfert typedef struct hsa_agent_s {
50330d8983SJohannes Doerfert   uint64_t handle;
51330d8983SJohannes Doerfert } hsa_agent_t;
52330d8983SJohannes Doerfert 
53*676a1e66SJoseph Huber typedef struct hsa_loaded_code_object_s {
54*676a1e66SJoseph Huber   uint64_t handle;
55*676a1e66SJoseph Huber } hsa_loaded_code_object_t;
56*676a1e66SJoseph Huber 
57*676a1e66SJoseph Huber typedef struct hsa_code_object_reader_s {
58*676a1e66SJoseph Huber   uint64_t handle;
59*676a1e66SJoseph Huber } hsa_code_object_reader_t;
60*676a1e66SJoseph Huber 
61330d8983SJohannes Doerfert typedef enum {
62330d8983SJohannes Doerfert   HSA_DEVICE_TYPE_CPU = 0,
63330d8983SJohannes Doerfert   HSA_DEVICE_TYPE_GPU = 1,
64330d8983SJohannes Doerfert   HSA_DEVICE_TYPE_DSP = 2
65330d8983SJohannes Doerfert } hsa_device_type_t;
66330d8983SJohannes Doerfert 
67330d8983SJohannes Doerfert typedef enum {
68330d8983SJohannes Doerfert   HSA_ISA_INFO_NAME_LENGTH = 0,
69330d8983SJohannes Doerfert   HSA_ISA_INFO_NAME = 1
70330d8983SJohannes Doerfert } hsa_isa_info_t;
71330d8983SJohannes Doerfert 
72330d8983SJohannes Doerfert typedef enum {
73330d8983SJohannes Doerfert   HSA_AGENT_INFO_NAME = 0,
74330d8983SJohannes Doerfert   HSA_AGENT_INFO_VENDOR_NAME = 1,
75330d8983SJohannes Doerfert   HSA_AGENT_INFO_FEATURE = 2,
76330d8983SJohannes Doerfert   HSA_AGENT_INFO_PROFILE = 4,
77330d8983SJohannes Doerfert   HSA_AGENT_INFO_WAVEFRONT_SIZE = 6,
78330d8983SJohannes Doerfert   HSA_AGENT_INFO_WORKGROUP_MAX_DIM = 7,
79330d8983SJohannes Doerfert   HSA_AGENT_INFO_WORKGROUP_MAX_SIZE = 8,
80330d8983SJohannes Doerfert   HSA_AGENT_INFO_GRID_MAX_DIM = 9,
81330d8983SJohannes Doerfert   HSA_AGENT_INFO_GRID_MAX_SIZE = 10,
82330d8983SJohannes Doerfert   HSA_AGENT_INFO_FBARRIER_MAX_SIZE = 11,
83330d8983SJohannes Doerfert   HSA_AGENT_INFO_QUEUES_MAX = 12,
84330d8983SJohannes Doerfert   HSA_AGENT_INFO_QUEUE_MIN_SIZE = 13,
85330d8983SJohannes Doerfert   HSA_AGENT_INFO_QUEUE_MAX_SIZE = 14,
86330d8983SJohannes Doerfert   HSA_AGENT_INFO_NODE = 16,
87330d8983SJohannes Doerfert   HSA_AGENT_INFO_DEVICE = 17,
88330d8983SJohannes Doerfert   HSA_AGENT_INFO_CACHE_SIZE = 18,
89330d8983SJohannes Doerfert   HSA_AGENT_INFO_FAST_F16_OPERATION = 24,
90330d8983SJohannes Doerfert } hsa_agent_info_t;
91330d8983SJohannes Doerfert 
92330d8983SJohannes Doerfert typedef enum {
93330d8983SJohannes Doerfert   HSA_SYSTEM_INFO_VERSION_MAJOR = 0,
94330d8983SJohannes Doerfert   HSA_SYSTEM_INFO_VERSION_MINOR = 1,
95330d8983SJohannes Doerfert } hsa_system_info_t;
96330d8983SJohannes Doerfert 
97330d8983SJohannes Doerfert typedef enum {
98330d8983SJohannes Doerfert   HSA_AGENT_FEATURE_KERNEL_DISPATCH = 1,
99330d8983SJohannes Doerfert   HSA_AGENT_FEATURE_AGENT_DISPATCH = 2,
100330d8983SJohannes Doerfert } hsa_agent_feature_t;
101330d8983SJohannes Doerfert 
102330d8983SJohannes Doerfert typedef struct hsa_region_s {
103330d8983SJohannes Doerfert   uint64_t handle;
104330d8983SJohannes Doerfert } hsa_region_t;
105330d8983SJohannes Doerfert 
106330d8983SJohannes Doerfert typedef struct hsa_isa_s {
107330d8983SJohannes Doerfert   uint64_t handle;
108330d8983SJohannes Doerfert } hsa_isa_t;
109330d8983SJohannes Doerfert 
110330d8983SJohannes Doerfert hsa_status_t hsa_system_get_info(hsa_system_info_t attribute, void *value);
111330d8983SJohannes Doerfert 
112330d8983SJohannes Doerfert hsa_status_t hsa_agent_get_info(hsa_agent_t agent, hsa_agent_info_t attribute,
113330d8983SJohannes Doerfert                                 void *value);
114330d8983SJohannes Doerfert 
115330d8983SJohannes Doerfert hsa_status_t hsa_isa_get_info_alt(hsa_isa_t isa, hsa_isa_info_t attribute,
116330d8983SJohannes Doerfert                                   void *value);
117330d8983SJohannes Doerfert 
118330d8983SJohannes Doerfert hsa_status_t hsa_iterate_agents(hsa_status_t (*callback)(hsa_agent_t agent,
119330d8983SJohannes Doerfert                                                          void *data),
120330d8983SJohannes Doerfert                                 void *data);
121330d8983SJohannes Doerfert 
122330d8983SJohannes Doerfert hsa_status_t hsa_agent_iterate_isas(hsa_agent_t agent,
123330d8983SJohannes Doerfert                                     hsa_status_t (*callback)(hsa_isa_t isa,
124330d8983SJohannes Doerfert                                                              void *data),
125330d8983SJohannes Doerfert                                     void *data);
126330d8983SJohannes Doerfert 
127330d8983SJohannes Doerfert typedef struct hsa_signal_s {
128330d8983SJohannes Doerfert   uint64_t handle;
129330d8983SJohannes Doerfert } hsa_signal_t;
130330d8983SJohannes Doerfert 
131330d8983SJohannes Doerfert #ifdef HSA_LARGE_MODEL
132330d8983SJohannes Doerfert typedef int64_t hsa_signal_value_t;
133330d8983SJohannes Doerfert #else
134330d8983SJohannes Doerfert typedef int32_t hsa_signal_value_t;
135330d8983SJohannes Doerfert #endif
136330d8983SJohannes Doerfert 
137330d8983SJohannes Doerfert hsa_status_t hsa_signal_create(hsa_signal_value_t initial_value,
138330d8983SJohannes Doerfert                                uint32_t num_consumers,
139330d8983SJohannes Doerfert                                const hsa_agent_t *consumers,
140330d8983SJohannes Doerfert                                hsa_signal_t *signal);
141330d8983SJohannes Doerfert 
142330d8983SJohannes Doerfert hsa_status_t hsa_amd_signal_create(hsa_signal_value_t initial_value,
143330d8983SJohannes Doerfert                                    uint32_t num_consumers,
144330d8983SJohannes Doerfert                                    const hsa_agent_t *consumers,
145330d8983SJohannes Doerfert                                    uint64_t attributes, hsa_signal_t *signal);
146330d8983SJohannes Doerfert 
147330d8983SJohannes Doerfert hsa_status_t hsa_signal_destroy(hsa_signal_t signal);
148330d8983SJohannes Doerfert 
149330d8983SJohannes Doerfert void hsa_signal_store_relaxed(hsa_signal_t signal, hsa_signal_value_t value);
150330d8983SJohannes Doerfert 
151330d8983SJohannes Doerfert void hsa_signal_store_screlease(hsa_signal_t signal, hsa_signal_value_t value);
152330d8983SJohannes Doerfert 
153330d8983SJohannes Doerfert hsa_signal_value_t hsa_signal_load_scacquire(hsa_signal_t signal);
154330d8983SJohannes Doerfert 
155330d8983SJohannes Doerfert void hsa_signal_subtract_screlease(hsa_signal_t signal,
156330d8983SJohannes Doerfert                                    hsa_signal_value_t value);
157330d8983SJohannes Doerfert 
158330d8983SJohannes Doerfert typedef enum {
159330d8983SJohannes Doerfert   HSA_SIGNAL_CONDITION_EQ = 0,
160330d8983SJohannes Doerfert   HSA_SIGNAL_CONDITION_NE = 1,
161330d8983SJohannes Doerfert } hsa_signal_condition_t;
162330d8983SJohannes Doerfert 
163330d8983SJohannes Doerfert typedef enum {
164330d8983SJohannes Doerfert   HSA_WAIT_STATE_BLOCKED = 0,
165330d8983SJohannes Doerfert   HSA_WAIT_STATE_ACTIVE = 1
166330d8983SJohannes Doerfert } hsa_wait_state_t;
167330d8983SJohannes Doerfert 
168330d8983SJohannes Doerfert hsa_signal_value_t hsa_signal_wait_scacquire(hsa_signal_t signal,
169330d8983SJohannes Doerfert                                              hsa_signal_condition_t condition,
170330d8983SJohannes Doerfert                                              hsa_signal_value_t compare_value,
171330d8983SJohannes Doerfert                                              uint64_t timeout_hint,
172330d8983SJohannes Doerfert                                              hsa_wait_state_t wait_state_hint);
173330d8983SJohannes Doerfert 
174330d8983SJohannes Doerfert typedef enum {
175330d8983SJohannes Doerfert   HSA_QUEUE_TYPE_MULTI = 0,
176330d8983SJohannes Doerfert   HSA_QUEUE_TYPE_SINGLE = 1,
177330d8983SJohannes Doerfert } hsa_queue_type_t;
178330d8983SJohannes Doerfert 
179330d8983SJohannes Doerfert typedef enum {
180330d8983SJohannes Doerfert   HSA_QUEUE_FEATURE_KERNEL_DISPATCH = 1,
181330d8983SJohannes Doerfert   HSA_QUEUE_FEATURE_AGENT_DISPATCH = 2
182330d8983SJohannes Doerfert } hsa_queue_feature_t;
183330d8983SJohannes Doerfert 
184330d8983SJohannes Doerfert typedef uint32_t hsa_queue_type32_t;
185330d8983SJohannes Doerfert 
186330d8983SJohannes Doerfert typedef struct hsa_queue_s {
187330d8983SJohannes Doerfert   hsa_queue_type32_t type;
188330d8983SJohannes Doerfert   uint32_t features;
189330d8983SJohannes Doerfert 
190330d8983SJohannes Doerfert #ifdef HSA_LARGE_MODEL
191330d8983SJohannes Doerfert   void *base_address;
192330d8983SJohannes Doerfert #elif defined HSA_LITTLE_ENDIAN
193330d8983SJohannes Doerfert   void *base_address;
194330d8983SJohannes Doerfert   uint32_t reserved0;
195330d8983SJohannes Doerfert #else
196330d8983SJohannes Doerfert   uint32_t reserved0;
197330d8983SJohannes Doerfert   void *base_address;
198330d8983SJohannes Doerfert #endif
199330d8983SJohannes Doerfert   hsa_signal_t doorbell_signal;
200330d8983SJohannes Doerfert   uint32_t size;
201330d8983SJohannes Doerfert   uint32_t reserved1;
202330d8983SJohannes Doerfert   uint64_t id;
203330d8983SJohannes Doerfert } hsa_queue_t;
204330d8983SJohannes Doerfert 
205330d8983SJohannes Doerfert hsa_status_t hsa_queue_create(hsa_agent_t agent, uint32_t size,
206330d8983SJohannes Doerfert                               hsa_queue_type32_t type,
207330d8983SJohannes Doerfert                               void (*callback)(hsa_status_t status,
208330d8983SJohannes Doerfert                                                hsa_queue_t *source, void *data),
209330d8983SJohannes Doerfert                               void *data, uint32_t private_segment_size,
210330d8983SJohannes Doerfert                               uint32_t group_segment_size, hsa_queue_t **queue);
211330d8983SJohannes Doerfert 
212330d8983SJohannes Doerfert hsa_status_t hsa_queue_destroy(hsa_queue_t *queue);
213330d8983SJohannes Doerfert 
214330d8983SJohannes Doerfert uint64_t hsa_queue_load_read_index_scacquire(const hsa_queue_t *queue);
215330d8983SJohannes Doerfert 
216330d8983SJohannes Doerfert uint64_t hsa_queue_add_write_index_relaxed(const hsa_queue_t *queue,
217330d8983SJohannes Doerfert                                            uint64_t value);
218330d8983SJohannes Doerfert 
219330d8983SJohannes Doerfert typedef enum {
220330d8983SJohannes Doerfert   HSA_PACKET_TYPE_KERNEL_DISPATCH = 2,
221330d8983SJohannes Doerfert   HSA_PACKET_TYPE_BARRIER_AND = 3,
222330d8983SJohannes Doerfert } hsa_packet_type_t;
223330d8983SJohannes Doerfert 
224330d8983SJohannes Doerfert typedef enum { HSA_FENCE_SCOPE_SYSTEM = 2 } hsa_fence_scope_t;
225330d8983SJohannes Doerfert 
226330d8983SJohannes Doerfert typedef enum {
227330d8983SJohannes Doerfert   HSA_PACKET_HEADER_TYPE = 0,
228330d8983SJohannes Doerfert   HSA_PACKET_HEADER_ACQUIRE_FENCE_SCOPE = 9,
229330d8983SJohannes Doerfert   HSA_PACKET_HEADER_RELEASE_FENCE_SCOPE = 11
230330d8983SJohannes Doerfert } hsa_packet_header_t;
231330d8983SJohannes Doerfert 
232330d8983SJohannes Doerfert typedef enum {
233330d8983SJohannes Doerfert   HSA_KERNEL_DISPATCH_PACKET_SETUP_DIMENSIONS = 0
234330d8983SJohannes Doerfert } hsa_kernel_dispatch_packet_setup_t;
235330d8983SJohannes Doerfert 
236330d8983SJohannes Doerfert typedef enum {
237330d8983SJohannes Doerfert   HSA_KERNEL_DISPATCH_PACKET_SETUP_WIDTH_DIMENSIONS = 2
238330d8983SJohannes Doerfert } hsa_kernel_dispatch_packet_setup_width_t;
239330d8983SJohannes Doerfert 
240330d8983SJohannes Doerfert typedef struct hsa_kernel_dispatch_packet_s {
241330d8983SJohannes Doerfert   uint16_t header;
242330d8983SJohannes Doerfert   uint16_t setup;
243330d8983SJohannes Doerfert   uint16_t workgroup_size_x;
244330d8983SJohannes Doerfert   uint16_t workgroup_size_y;
245330d8983SJohannes Doerfert   uint16_t workgroup_size_z;
246330d8983SJohannes Doerfert   uint16_t reserved0;
247330d8983SJohannes Doerfert   uint32_t grid_size_x;
248330d8983SJohannes Doerfert   uint32_t grid_size_y;
249330d8983SJohannes Doerfert   uint32_t grid_size_z;
250330d8983SJohannes Doerfert   uint32_t private_segment_size;
251330d8983SJohannes Doerfert   uint32_t group_segment_size;
252330d8983SJohannes Doerfert   uint64_t kernel_object;
253330d8983SJohannes Doerfert #ifdef HSA_LARGE_MODEL
254330d8983SJohannes Doerfert   void *kernarg_address;
255330d8983SJohannes Doerfert #elif defined HSA_LITTLE_ENDIAN
256330d8983SJohannes Doerfert   void *kernarg_address;
257330d8983SJohannes Doerfert   uint32_t reserved1;
258330d8983SJohannes Doerfert #else
259330d8983SJohannes Doerfert   uint32_t reserved1;
260330d8983SJohannes Doerfert   void *kernarg_address;
261330d8983SJohannes Doerfert #endif
262330d8983SJohannes Doerfert   uint64_t reserved2;
263330d8983SJohannes Doerfert   hsa_signal_t completion_signal;
264330d8983SJohannes Doerfert } hsa_kernel_dispatch_packet_t;
265330d8983SJohannes Doerfert 
266330d8983SJohannes Doerfert typedef struct hsa_barrier_and_packet_s {
267330d8983SJohannes Doerfert   uint16_t header;
268330d8983SJohannes Doerfert   uint16_t reserved0;
269330d8983SJohannes Doerfert   uint32_t reserved1;
270330d8983SJohannes Doerfert   hsa_signal_t dep_signal[5];
271330d8983SJohannes Doerfert   uint64_t reserved2;
272330d8983SJohannes Doerfert   hsa_signal_t completion_signal;
273330d8983SJohannes Doerfert } hsa_barrier_and_packet_t;
274330d8983SJohannes Doerfert 
275330d8983SJohannes Doerfert typedef enum { HSA_PROFILE_BASE = 0, HSA_PROFILE_FULL = 1 } hsa_profile_t;
276330d8983SJohannes Doerfert 
277330d8983SJohannes Doerfert typedef enum {
278330d8983SJohannes Doerfert   HSA_EXECUTABLE_STATE_UNFROZEN = 0,
279330d8983SJohannes Doerfert   HSA_EXECUTABLE_STATE_FROZEN = 1
280330d8983SJohannes Doerfert } hsa_executable_state_t;
281330d8983SJohannes Doerfert 
282330d8983SJohannes Doerfert typedef struct hsa_executable_s {
283330d8983SJohannes Doerfert   uint64_t handle;
284330d8983SJohannes Doerfert } hsa_executable_t;
285330d8983SJohannes Doerfert 
286330d8983SJohannes Doerfert typedef struct hsa_executable_symbol_s {
287330d8983SJohannes Doerfert   uint64_t handle;
288330d8983SJohannes Doerfert } hsa_executable_symbol_t;
289330d8983SJohannes Doerfert 
290330d8983SJohannes Doerfert typedef enum {
291330d8983SJohannes Doerfert   HSA_EXECUTABLE_SYMBOL_INFO_TYPE = 0,
292330d8983SJohannes Doerfert   HSA_EXECUTABLE_SYMBOL_INFO_NAME_LENGTH = 1,
293330d8983SJohannes Doerfert   HSA_EXECUTABLE_SYMBOL_INFO_NAME = 2,
294330d8983SJohannes Doerfert   HSA_EXECUTABLE_SYMBOL_INFO_VARIABLE_ADDRESS = 21,
295330d8983SJohannes Doerfert   HSA_EXECUTABLE_SYMBOL_INFO_VARIABLE_SIZE = 9,
296330d8983SJohannes Doerfert   HSA_EXECUTABLE_SYMBOL_INFO_KERNEL_OBJECT = 22,
297330d8983SJohannes Doerfert   HSA_EXECUTABLE_SYMBOL_INFO_KERNEL_KERNARG_SEGMENT_SIZE = 11,
298330d8983SJohannes Doerfert   HSA_EXECUTABLE_SYMBOL_INFO_KERNEL_GROUP_SEGMENT_SIZE = 13,
299330d8983SJohannes Doerfert   HSA_EXECUTABLE_SYMBOL_INFO_KERNEL_PRIVATE_SEGMENT_SIZE = 14,
300330d8983SJohannes Doerfert   HSA_EXECUTABLE_SYMBOL_INFO_KERNEL_DYNAMIC_CALLSTACK = 15,
301330d8983SJohannes Doerfert } hsa_executable_symbol_info_t;
302330d8983SJohannes Doerfert 
303330d8983SJohannes Doerfert typedef struct hsa_code_object_s {
304330d8983SJohannes Doerfert   uint64_t handle;
305330d8983SJohannes Doerfert } hsa_code_object_t;
306330d8983SJohannes Doerfert 
307330d8983SJohannes Doerfert typedef enum {
308330d8983SJohannes Doerfert   HSA_SYMBOL_KIND_VARIABLE = 0,
309330d8983SJohannes Doerfert   HSA_SYMBOL_KIND_KERNEL = 1,
310330d8983SJohannes Doerfert   HSA_SYMBOL_KIND_INDIRECT_FUNCTION = 2
311330d8983SJohannes Doerfert } hsa_symbol_kind_t;
312330d8983SJohannes Doerfert 
313330d8983SJohannes Doerfert typedef enum {
314330d8983SJohannes Doerfert   HSA_DEFAULT_FLOAT_ROUNDING_MODE_DEFAULT = 0,
315330d8983SJohannes Doerfert   HSA_DEFAULT_FLOAT_ROUNDING_MODE_ZERO = 1,
316330d8983SJohannes Doerfert   HSA_DEFAULT_FLOAT_ROUNDING_MODE_NEAR = 2,
317330d8983SJohannes Doerfert } hsa_default_float_rounding_mode_t;
318330d8983SJohannes Doerfert 
319330d8983SJohannes Doerfert hsa_status_t hsa_memory_copy(void *dst, const void *src, size_t size);
320330d8983SJohannes Doerfert 
321330d8983SJohannes Doerfert hsa_status_t hsa_executable_create(hsa_profile_t profile,
322330d8983SJohannes Doerfert                                    hsa_executable_state_t executable_state,
323330d8983SJohannes Doerfert                                    const char *options,
324330d8983SJohannes Doerfert                                    hsa_executable_t *executable);
325330d8983SJohannes Doerfert 
326330d8983SJohannes Doerfert hsa_status_t hsa_executable_create_alt(
327330d8983SJohannes Doerfert     hsa_profile_t profile,
328330d8983SJohannes Doerfert     hsa_default_float_rounding_mode_t default_float_rounding_mode,
329330d8983SJohannes Doerfert     const char *options, hsa_executable_t *executable);
330330d8983SJohannes Doerfert 
331330d8983SJohannes Doerfert hsa_status_t hsa_executable_destroy(hsa_executable_t executable);
332330d8983SJohannes Doerfert 
333330d8983SJohannes Doerfert hsa_status_t hsa_executable_freeze(hsa_executable_t executable,
334330d8983SJohannes Doerfert                                    const char *options);
335330d8983SJohannes Doerfert 
336330d8983SJohannes Doerfert hsa_status_t hsa_executable_validate(hsa_executable_t executable,
337330d8983SJohannes Doerfert                                      uint32_t *result);
338330d8983SJohannes Doerfert 
339330d8983SJohannes Doerfert hsa_status_t
340330d8983SJohannes Doerfert hsa_executable_symbol_get_info(hsa_executable_symbol_t executable_symbol,
341330d8983SJohannes Doerfert                                hsa_executable_symbol_info_t attribute,
342330d8983SJohannes Doerfert                                void *value);
343330d8983SJohannes Doerfert 
344330d8983SJohannes Doerfert hsa_status_t hsa_executable_iterate_symbols(
345330d8983SJohannes Doerfert     hsa_executable_t executable,
346330d8983SJohannes Doerfert     hsa_status_t (*callback)(hsa_executable_t exec,
347330d8983SJohannes Doerfert                              hsa_executable_symbol_t symbol, void *data),
348330d8983SJohannes Doerfert     void *data);
349330d8983SJohannes Doerfert 
350330d8983SJohannes Doerfert hsa_status_t hsa_executable_get_symbol_by_name(hsa_executable_t executable,
351330d8983SJohannes Doerfert                                                const char *symbol_name,
352330d8983SJohannes Doerfert                                                const hsa_agent_t *agent,
353330d8983SJohannes Doerfert                                                hsa_executable_symbol_t *symbol);
354330d8983SJohannes Doerfert 
355330d8983SJohannes Doerfert hsa_status_t hsa_code_object_deserialize(void *serialized_code_object,
356330d8983SJohannes Doerfert                                          size_t serialized_code_object_size,
357330d8983SJohannes Doerfert                                          const char *options,
358330d8983SJohannes Doerfert                                          hsa_code_object_t *code_object);
359330d8983SJohannes Doerfert 
360330d8983SJohannes Doerfert hsa_status_t hsa_executable_load_code_object(hsa_executable_t executable,
361330d8983SJohannes Doerfert                                              hsa_agent_t agent,
362330d8983SJohannes Doerfert                                              hsa_code_object_t code_object,
363330d8983SJohannes Doerfert                                              const char *options);
364330d8983SJohannes Doerfert 
365330d8983SJohannes Doerfert hsa_status_t hsa_code_object_destroy(hsa_code_object_t code_object);
366330d8983SJohannes Doerfert 
367330d8983SJohannes Doerfert typedef bool (*hsa_amd_signal_handler)(hsa_signal_value_t value, void *arg);
368330d8983SJohannes Doerfert 
369330d8983SJohannes Doerfert hsa_status_t hsa_amd_signal_async_handler(hsa_signal_t signal,
370330d8983SJohannes Doerfert                                           hsa_signal_condition_t cond,
371330d8983SJohannes Doerfert                                           hsa_signal_value_t value,
372330d8983SJohannes Doerfert                                           hsa_amd_signal_handler handler,
373330d8983SJohannes Doerfert                                           void *arg);
374330d8983SJohannes Doerfert 
375*676a1e66SJoseph Huber hsa_status_t hsa_code_object_reader_create_from_memory(
376*676a1e66SJoseph Huber     const void *code_object, size_t size,
377*676a1e66SJoseph Huber     hsa_code_object_reader_t *code_object_reader);
378*676a1e66SJoseph Huber 
379*676a1e66SJoseph Huber hsa_status_t
380*676a1e66SJoseph Huber hsa_code_object_reader_destroy(hsa_code_object_reader_t code_object_reader);
381*676a1e66SJoseph Huber 
382*676a1e66SJoseph Huber hsa_status_t hsa_executable_load_agent_code_object(
383*676a1e66SJoseph Huber     hsa_executable_t executable, hsa_agent_t agent,
384*676a1e66SJoseph Huber     hsa_code_object_reader_t code_object_reader, const char *options,
385*676a1e66SJoseph Huber     hsa_loaded_code_object_t *loaded_code_object);
386*676a1e66SJoseph Huber 
387330d8983SJohannes Doerfert #ifdef __cplusplus
388330d8983SJohannes Doerfert }
389330d8983SJohannes Doerfert #endif
390330d8983SJohannes Doerfert 
391330d8983SJohannes Doerfert #endif
392