blob: 68ff6e18e335902b7c2235945ce9abb9cdda9b81 [file] [edit]
//===- InstrProfilingPlatformROCmHSADefs.h - mirrored HSA decls ----------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// Minimal HSA type/enum/function-pointer declarations used by the Linux-only
// supplemental HSA drain (InstrProfilingPlatformROCmHSA.cpp). compiler-rt
// cannot depend on the ROCm headers at build time, and the runtime dlopens
// libhsa-runtime64.so rather than linking it, so the handful of declarations
// the drain needs are mirrored here under a prof_hsa_* prefix.
//
// Values mirror hsa/hsa.h and hsa/hsa_ven_amd_loader.h. These are part of HSA's
// stable, versioned C ABI (libhsa-runtime64.so.1), so they do not shift.
//
//===----------------------------------------------------------------------===//
#ifndef PROFILE_INSTRPROFILINGPLATFORMROCMHSADEFS_H
#define PROFILE_INSTRPROFILINGPLATFORMROCMHSADEFS_H
#include <stddef.h>
#include <stdint.h>
typedef uint32_t prof_hsa_status_t;
#define PROF_HSA_STATUS_SUCCESS ((prof_hsa_status_t)0x0)
#define PROF_HSA_STATUS_INFO_BREAK ((prof_hsa_status_t)0x1)
typedef struct {
uint64_t handle;
} prof_hsa_agent_t;
typedef struct {
uint64_t handle;
} prof_hsa_executable_t;
typedef struct {
uint64_t handle;
} prof_hsa_executable_symbol_t;
typedef uint32_t prof_hsa_agent_info_t;
#define PROF_HSA_AGENT_INFO_NAME ((prof_hsa_agent_info_t)0)
#define PROF_HSA_AGENT_INFO_DEVICE ((prof_hsa_agent_info_t)17)
typedef uint32_t prof_hsa_device_type_t;
#define PROF_HSA_DEVICE_TYPE_GPU ((prof_hsa_device_type_t)1)
typedef uint32_t prof_hsa_symbol_kind_t;
#define PROF_HSA_SYMBOL_KIND_VARIABLE ((prof_hsa_symbol_kind_t)0)
typedef uint32_t prof_hsa_executable_symbol_info_t;
#define PROF_HSA_EXECUTABLE_SYMBOL_INFO_TYPE \
((prof_hsa_executable_symbol_info_t)0)
#define PROF_HSA_EXECUTABLE_SYMBOL_INFO_NAME_LENGTH \
((prof_hsa_executable_symbol_info_t)1)
#define PROF_HSA_EXECUTABLE_SYMBOL_INFO_NAME \
((prof_hsa_executable_symbol_info_t)2)
#define PROF_HSA_EXECUTABLE_SYMBOL_INFO_VARIABLE_ADDRESS \
((prof_hsa_executable_symbol_info_t)21)
#define PROF_HSA_EXTENSION_AMD_LOADER ((uint16_t)0x201)
typedef uint32_t prof_hsa_loader_storage_type_t;
typedef struct {
prof_hsa_agent_t agent;
prof_hsa_executable_t executable;
prof_hsa_loader_storage_type_t code_object_storage_type;
const void *code_object_storage_base;
size_t code_object_storage_size;
size_t code_object_storage_offset;
const void *segment_base;
size_t segment_size;
} prof_hsa_loader_segment_descriptor_t;
typedef prof_hsa_status_t (*hsa_init_ty)(void);
typedef prof_hsa_status_t (*hsa_iterate_agents_ty)(
prof_hsa_status_t (*)(prof_hsa_agent_t, void *), void *);
typedef prof_hsa_status_t (*hsa_agent_get_info_ty)(prof_hsa_agent_t,
prof_hsa_agent_info_t,
void *);
typedef prof_hsa_status_t (*hsa_executable_iterate_agent_symbols_ty)(
prof_hsa_executable_t, prof_hsa_agent_t,
prof_hsa_status_t (*)(prof_hsa_executable_t, prof_hsa_agent_t,
prof_hsa_executable_symbol_t, void *),
void *);
typedef prof_hsa_status_t (*hsa_executable_symbol_get_info_ty)(
prof_hsa_executable_symbol_t, prof_hsa_executable_symbol_info_t, void *);
typedef prof_hsa_status_t (*hsa_system_get_major_extension_table_ty)(uint16_t,
uint16_t,
size_t,
void *);
typedef prof_hsa_status_t (*hsa_loader_query_segment_descriptors_ty)(
prof_hsa_loader_segment_descriptor_t *, size_t *);
/* First two members of hsa_ven_amd_loader_1_00_pfn_t; query_host_address only
* pads the offset to query_segment_descriptors. */
typedef struct {
void *query_host_address;
hsa_loader_query_segment_descriptors_ty query_segment_descriptors;
} prof_hsa_loader_pfn_t;
#endif // PROFILE_INSTRPROFILINGPLATFORMROCMHSADEFS_H