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