Clean up extensions and provide public extension/API to query host address given device address:

- Partially remove 'amd_load_map' extension because it is not used and will not be used
- Remove 'hsa_amd_query_kernel_host_address' API
- Add 'hsa_ext_amd_loaded_code_object' extension
- Add 'hsa_ext_amd_loaded_code_object_query_host_address' API
	- Most likely to be used by debugger, profiler, and hcc (printf)
- Update affected sources
	- 'hsa_system_extension_supported'
	- 'hsa_system_get_extension_table'
	- SoftCP path
- Integrate CLs 1250699, 1251204, 1251214 from stg sc

ReviewBoardURL: http://ocltc.amd.com/reviews/r/10091/
Testing: smoke (ok), teamcity (ok), samples on fiji (AQL and SoftCP) (ok)

[git-p4: depot-paths = "//depot/stg/hsa/drivers/hsa/runtime/": change = 1251223]
This commit is contained in:
Zhuravlyov, Konstantin (x21446) MA
2016-03-24 19:00:30 -05:00
والد 9fa0531950
کامیت f6565a2f70
12فایلهای تغییر یافته به همراه218 افزوده شده و 397 حذف شده
@@ -118,7 +118,7 @@ set ( CORE_SRCS ${CORE_SRCS} runtime/amd_cpu_agent.cpp )
set ( CORE_SRCS ${CORE_SRCS} runtime/amd_gpu_agent.cpp )
set ( CORE_SRCS ${CORE_SRCS} runtime/amd_aql_queue.cpp )
set ( CORE_SRCS ${CORE_SRCS} runtime/amd_loader_context.cpp )
set ( CORE_SRCS ${CORE_SRCS} runtime/amd_load_map.cpp )
set ( CORE_SRCS ${CORE_SRCS} runtime/hsa_ven_amd_loaded_code_object.cpp )
set ( CORE_SRCS ${CORE_SRCS} runtime/amd_memory_region.cpp )
set ( CORE_SRCS ${CORE_SRCS} runtime/amd_topology.cpp )
set ( CORE_SRCS ${CORE_SRCS} runtime/default_signal.cpp )
@@ -127,7 +127,6 @@ global:
hsa_amd_interop_map_buffer;
hsa_amd_interop_unmap_buffer;
hsa_amd_image_create;
hsa_amd_query_kernel_host_address;
hsa_ext_image_get_capability;
hsa_ext_image_data_get_info;
hsa_ext_image_create;
@@ -48,7 +48,6 @@
#include "hsa.h"
#include "hsa_ext_image.h"
#include "amd_hsa_elf.h"
#include "amd_load_map.h"
#include <string>
#include <mutex>
#include <vector>
@@ -73,6 +72,30 @@ typedef uint32_t hsa_symbol_info32_t;
typedef hsa_executable_symbol_t hsa_symbol_t;
typedef hsa_executable_symbol_info_t hsa_symbol_info_t;
/// @brief Loaded code object handle.
typedef struct amd_loaded_code_object_s {
uint64_t handle;
} amd_loaded_code_object_t;
/// @brief Loaded code object attributes.
enum amd_loaded_code_object_info_t {
AMD_LOADED_CODE_OBJECT_INFO_ELF_IMAGE = 0,
AMD_LOADED_CODE_OBJECT_INFO_ELF_IMAGE_SIZE = 1
};
/// @brief Loaded segment handle.
typedef struct amd_loaded_segment_s {
uint64_t handle;
} amd_loaded_segment_t;
/// @brief Loaded segment attributes.
enum amd_loaded_segment_info_t {
AMD_LOADED_SEGMENT_INFO_TYPE = 0,
AMD_LOADED_SEGMENT_INFO_ELF_BASE_ADDRESS = 1,
AMD_LOADED_SEGMENT_INFO_LOAD_BASE_ADDRESS = 2,
AMD_LOADED_SEGMENT_INFO_SIZE = 3
};
namespace amd {
namespace hsa {
namespace loader {
@@ -1,174 +0,0 @@
////////////////////////////////////////////////////////////////////////////////
//
// The University of Illinois/NCSA
// Open Source License (NCSA)
//
// Copyright (c) 2014-2015, Advanced Micro Devices, Inc. All rights reserved.
//
// Developed by:
//
// AMD Research and AMD HSA Software Development
//
// Advanced Micro Devices, Inc.
//
// www.amd.com
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal with the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// - Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimers.
// - Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimers in
// the documentation and/or other materials provided with the distribution.
// - Neither the names of Advanced Micro Devices, Inc,
// nor the names of its contributors may be used to endorse or promote
// products derived from this Software without specific prior written
// permission.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS WITH THE SOFTWARE.
//
////////////////////////////////////////////////////////////////////////////////
#ifndef AMD_LOAD_MAP_H
#define AMD_LOAD_MAP_H
#include "hsa.h"
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
/// @todo.
enum {
AMD_EXTENSION_LOAD_MAP = 0x1002
};
/// @todo.
typedef struct amd_loaded_code_object_s {
uint64_t handle;
} amd_loaded_code_object_t;
/// @todo.
enum amd_loaded_code_object_info_t {
AMD_LOADED_CODE_OBJECT_INFO_ELF_IMAGE = 0,
AMD_LOADED_CODE_OBJECT_INFO_ELF_IMAGE_SIZE = 1
};
/// @todo.
typedef struct amd_loaded_segment_s {
uint64_t handle;
} amd_loaded_segment_t;
/// @todo.
enum amd_loaded_segment_info_t {
AMD_LOADED_SEGMENT_INFO_TYPE = 0,
AMD_LOADED_SEGMENT_INFO_ELF_BASE_ADDRESS = 1,
AMD_LOADED_SEGMENT_INFO_LOAD_BASE_ADDRESS = 2,
AMD_LOADED_SEGMENT_INFO_SIZE = 3
};
/// @todo.
hsa_status_t amd_executable_load_code_object(
hsa_executable_t executable,
hsa_agent_t agent,
hsa_code_object_t code_object,
const char *options,
amd_loaded_code_object_t *loaded_code_object);
/// @brief Invokes @p callback for each available executable in current
/// process.
hsa_status_t amd_iterate_executables(
hsa_status_t (*callback)(
hsa_executable_t executable,
void *data),
void *data);
/// @brief Invokes @p callback for each loaded code object in specified
/// @p executable.
hsa_status_t amd_executable_iterate_loaded_code_objects(
hsa_executable_t executable,
hsa_status_t (*callback)(
amd_loaded_code_object_t loaded_code_object,
void *data),
void *data);
/// @brief Retrieves current value of specified @p loaded_code_object's
/// @p attribute.
hsa_status_t amd_loaded_code_object_get_info(
amd_loaded_code_object_t loaded_code_object,
amd_loaded_code_object_info_t attribute,
void *value);
/// @brief Invokes @p callback for each loaded segment in specified
/// @p loaded_code_object.
hsa_status_t amd_loaded_code_object_iterate_loaded_segments(
amd_loaded_code_object_t loaded_code_object,
hsa_status_t (*callback)(
amd_loaded_segment_t loaded_segment,
void *data),
void *data);
/// @brief Retrieves current value of specified @p loaded_segment's
/// @p attribute.
hsa_status_t amd_loaded_segment_get_info(
amd_loaded_segment_t loaded_segment,
amd_loaded_segment_info_t attribute,
void *value);
#define amd_load_map_1_00
typedef struct amd_load_map_1_00_pfn_s {
hsa_status_t (*amd_executable_load_code_object)(
hsa_executable_t executable,
hsa_agent_t agent,
hsa_code_object_t code_object,
const char *options,
amd_loaded_code_object_t *loaded_code_object);
hsa_status_t (*amd_iterate_executables)(
hsa_status_t (*callback)(
hsa_executable_t executable,
void *data),
void *data);
hsa_status_t (*amd_executable_iterate_loaded_code_objects)(
hsa_executable_t executable,
hsa_status_t (*callback)(
amd_loaded_code_object_t loaded_code_object,
void *data),
void *data);
hsa_status_t (*amd_loaded_code_object_get_info)(
amd_loaded_code_object_t loaded_code_object,
amd_loaded_code_object_info_t attribute,
void *value);
hsa_status_t (*amd_loaded_code_object_iterate_loaded_segments)(
amd_loaded_code_object_t loaded_code_object,
hsa_status_t (*callback)(
amd_loaded_segment_t loaded_segment,
void *data),
void *data);
hsa_status_t (*amd_loaded_segment_get_info)(
amd_loaded_segment_t loaded_segment,
amd_loaded_segment_info_t attribute,
void *value);
} amd_load_map_1_00_pfn_t;
#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
#endif // AMD_LOAD_MAP_H
@@ -1,172 +0,0 @@
////////////////////////////////////////////////////////////////////////////////
//
// The University of Illinois/NCSA
// Open Source License (NCSA)
//
// Copyright (c) 2014-2015, Advanced Micro Devices, Inc. All rights reserved.
//
// Developed by:
//
// AMD Research and AMD HSA Software Development
//
// Advanced Micro Devices, Inc.
//
// www.amd.com
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal with the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// - Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimers.
// - Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimers in
// the documentation and/or other materials provided with the distribution.
// - Neither the names of Advanced Micro Devices, Inc,
// nor the names of its contributors may be used to endorse or promote
// products derived from this Software without specific prior written
// permission.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS WITH THE SOFTWARE.
//
////////////////////////////////////////////////////////////////////////////////
#include <cassert>
#include "core/inc/amd_hsa_loader.hpp"
#include "core/inc/amd_load_map.h"
#include "core/inc/runtime.h"
using amd::hsa::loader::Executable;
using amd::hsa::loader::LoadedCodeObject;
using amd::hsa::loader::LoadedSegment;
hsa_status_t amd_executable_load_code_object(
hsa_executable_t executable,
hsa_agent_t agent,
hsa_code_object_t code_object,
const char *options,
amd_loaded_code_object_t *loaded_code_object)
{
if (!core::Runtime::runtime_singleton_->IsOpen()) {
return HSA_STATUS_ERROR_NOT_INITIALIZED;
}
if (nullptr == loaded_code_object) {
return HSA_STATUS_ERROR_INVALID_ARGUMENT;
}
Executable *exec = Executable::Object(executable);
if (nullptr == exec) {
return HSA_STATUS_ERROR_INVALID_EXECUTABLE;
}
return exec->LoadCodeObject(agent, code_object, options, loaded_code_object);
}
hsa_status_t amd_iterate_executables(
hsa_status_t (*callback)(
hsa_executable_t executable,
void *data),
void *data)
{
if (!core::Runtime::runtime_singleton_->IsOpen()) {
return HSA_STATUS_ERROR_NOT_INITIALIZED;
}
if (nullptr == callback) {
return HSA_STATUS_ERROR_INVALID_ARGUMENT;
}
return core::Runtime::runtime_singleton_->loader()->IterateExecutables(callback, data);
}
hsa_status_t amd_executable_iterate_loaded_code_objects(
hsa_executable_t executable,
hsa_status_t (*callback)(
amd_loaded_code_object_t loaded_code_object,
void *data),
void *data)
{
if (!core::Runtime::runtime_singleton_->IsOpen()) {
return HSA_STATUS_ERROR_NOT_INITIALIZED;
}
if (nullptr == callback) {
return HSA_STATUS_ERROR_INVALID_ARGUMENT;
}
Executable *exec = Executable::Object(executable);
if (nullptr == exec) {
return HSA_STATUS_ERROR_INVALID_EXECUTABLE;
}
return exec->IterateLoadedCodeObjects(callback, data);
}
hsa_status_t amd_loaded_code_object_get_info(
amd_loaded_code_object_t loaded_code_object,
amd_loaded_code_object_info_t attribute,
void *value)
{
if (!core::Runtime::runtime_singleton_->IsOpen()) {
return HSA_STATUS_ERROR_NOT_INITIALIZED;
}
if (nullptr == value) {
return HSA_STATUS_ERROR_INVALID_ARGUMENT;
}
LoadedCodeObject *obj = LoadedCodeObject::Object(loaded_code_object);
if (nullptr == obj) {
// \todo: new error code: AMD_STATUS_ERROR_INVALID_LOADED_CODE_OBJECT.
return HSA_STATUS_ERROR_INVALID_ARGUMENT;
}
return false == obj->GetInfo(attribute, value) ?
HSA_STATUS_ERROR_INVALID_ARGUMENT : HSA_STATUS_SUCCESS;
}
hsa_status_t amd_loaded_code_object_iterate_loaded_segments(
amd_loaded_code_object_t loaded_code_object,
hsa_status_t (*callback)(
amd_loaded_segment_t loaded_segment,
void *data),
void *data)
{
if (!core::Runtime::runtime_singleton_->IsOpen()) {
return HSA_STATUS_ERROR_NOT_INITIALIZED;
}
if (nullptr == callback) {
return HSA_STATUS_ERROR_INVALID_ARGUMENT;
}
LoadedCodeObject *obj = LoadedCodeObject::Object(loaded_code_object);
if (nullptr == obj) {
// \todo: new error code: AMD_STATUS_ERROR_INVALID_LOADED_CODE_OBJECT.
return HSA_STATUS_ERROR_INVALID_ARGUMENT;
}
return obj->IterateLoadedSegments(callback, data);
}
hsa_status_t amd_loaded_segment_get_info(
amd_loaded_segment_t loaded_segment,
amd_loaded_segment_info_t attribute,
void *value)
{
if (!core::Runtime::runtime_singleton_->IsOpen()) {
return HSA_STATUS_ERROR_NOT_INITIALIZED;
}
if (nullptr == value) {
return HSA_STATUS_ERROR_INVALID_ARGUMENT;
}
LoadedSegment *obj = LoadedSegment::Object(loaded_segment);
if (nullptr == obj) {
// \todo: new error code: AMD_STATUS_ERROR_INVALID_LOADED_SEGMENT.
return HSA_STATUS_ERROR_INVALID_ARGUMENT;
}
return false == obj->GetInfo(attribute, value) ?
HSA_STATUS_ERROR_INVALID_ARGUMENT : HSA_STATUS_SUCCESS;
}
@@ -108,7 +108,7 @@ public:
void* Address(size_t offset = 0) const override
{ assert(this->Allocated()); return (char*)ptr_ + offset; }
void* HostAddress(size_t offset = 0) const override
{ return nullptr; }
{ return this->Address(offset); }
bool Allocated() const override
{ return nullptr != ptr_; }
@@ -178,7 +178,7 @@ public:
void* Address(size_t offset = 0) const override
{ assert(this->Allocated()); return (char*)ptr_ + offset; }
void* HostAddress(size_t offset = 0) const override
{ return nullptr; }
{ return this->Address(offset); }
bool Allocated() const override
{ return nullptr != ptr_; }
@@ -54,8 +54,8 @@
#include "core/inc/signal.h"
#include "core/inc/default_signal.h"
#include "core/inc/interrupt_signal.h"
#include "core/inc/amd_load_map.h"
#include "core/inc/amd_loader_context.hpp"
#include "inc/hsa_ven_amd_loaded_code_object.h"
using namespace amd::hsa::code;
@@ -169,7 +169,8 @@ hsa_status_t
IS_OPEN();
if ((extension > HSA_EXTENSION_AMD_PROFILER &&
extension != AMD_EXTENSION_LOAD_MAP) || result == NULL) {
extension != HSA_EXTENSION_AMD_LOADED_CODE_OBJECT) ||
(result == NULL)) {
return HSA_STATUS_ERROR_INVALID_ARGUMENT;
}
@@ -244,16 +245,14 @@ hsa_status_t
hsa_ext_program_iterate_modules;
return HSA_STATUS_SUCCESS;
} else if (extension == AMD_EXTENSION_LOAD_MAP) {
} else if (extension == HSA_EXTENSION_AMD_LOADED_CODE_OBJECT) {
// Currently there is only version 1.00.
amd_load_map_1_00_pfn_t* amd_table =
reinterpret_cast<amd_load_map_1_00_pfn_t*>(table);
amd_table->amd_executable_load_code_object = amd_executable_load_code_object;
amd_table->amd_iterate_executables = amd_iterate_executables;
amd_table->amd_executable_iterate_loaded_code_objects = amd_executable_iterate_loaded_code_objects;
amd_table->amd_loaded_code_object_get_info = amd_loaded_code_object_get_info;
amd_table->amd_loaded_code_object_iterate_loaded_segments = amd_loaded_code_object_iterate_loaded_segments;
amd_table->amd_loaded_segment_get_info = amd_loaded_segment_get_info;
hsa_ven_amd_loaded_code_object_1_00_pfn_t* ext_table =
reinterpret_cast<hsa_ven_amd_loaded_code_object_1_00_pfn_t*>(table);
ext_table->hsa_ven_amd_loaded_code_object_query_host_address =
hsa_ven_amd_loaded_code_object_query_host_address;
return HSA_STATUS_SUCCESS;
} else {
// TODO: other extensions are not yet implemented.
return HSA_STATUS_ERROR;
@@ -1401,9 +1400,14 @@ hsa_status_t
hsa_agent_t agent,
hsa_code_object_t code_object,
const char* options) {
IS_OPEN();
amd_loaded_code_object_t loaded_code_object = {0};
return amd_executable_load_code_object(
executable, agent, code_object, options, &loaded_code_object);
amd::hsa::loader::Executable *exec = amd::hsa::loader::Executable::Object(executable);
if (!exec) {
return HSA_STATUS_ERROR_INVALID_EXECUTABLE;
}
return exec->LoadCodeObject(agent, code_object, options, &loaded_code_object);
}
hsa_status_t
@@ -553,13 +553,3 @@ hsa_status_t hsa_amd_interop_unmap_buffer(void* ptr) {
if (ptr != NULL) core::Runtime::runtime_singleton_->InteropUnmap(ptr);
return HSA_STATUS_SUCCESS;
}
hsa_status_t HSA_API hsa_amd_query_kernel_host_address(
uint64_t kernel_device_address,
uint64_t *kernel_host_address) {
IS_OPEN();
IS_BAD_PTR(kernel_host_address);
*kernel_host_address = core::Runtime::runtime_singleton_->loader()->FindHostAddress(kernel_device_address);
return *kernel_host_address == 0 ? HSA_STATUS_ERROR_INVALID_ARGUMENT : HSA_STATUS_SUCCESS;
}
@@ -0,0 +1,71 @@
////////////////////////////////////////////////////////////////////////////////
//
// The University of Illinois/NCSA
// Open Source License (NCSA)
//
// Copyright (c) 2014-2015, Advanced Micro Devices, Inc. All rights reserved.
//
// Developed by:
//
// AMD Research and AMD HSA Software Development
//
// Advanced Micro Devices, Inc.
//
// www.amd.com
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal with the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// - Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimers.
// - Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimers in
// the documentation and/or other materials provided with the distribution.
// - Neither the names of Advanced Micro Devices, Inc,
// nor the names of its contributors may be used to endorse or promote
// products derived from this Software without specific prior written
// permission.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS WITH THE SOFTWARE.
//
////////////////////////////////////////////////////////////////////////////////
#include "hsa_ven_amd_loaded_code_object.h"
#include "core/inc/amd_hsa_loader.hpp"
#include "core/inc/runtime.h"
using namespace core;
hsa_status_t hsa_ven_amd_loaded_code_object_query_host_address(
const void *device_address,
const void **host_address) {
if (false == core::Runtime::runtime_singleton_->IsOpen()) {
return HSA_STATUS_ERROR_NOT_INITIALIZED;
}
if (nullptr == device_address) {
return HSA_STATUS_ERROR_INVALID_ARGUMENT;
}
if (nullptr == host_address) {
return HSA_STATUS_ERROR_INVALID_ARGUMENT;
}
uint64_t udaddr = reinterpret_cast<uint64_t>(device_address);
uint64_t uhaddr = Runtime::runtime_singleton_->loader()->FindHostAddress(udaddr);
if (0 == uhaddr) {
return HSA_STATUS_ERROR_INVALID_ARGUMENT;
}
*host_address = reinterpret_cast<void*>(uhaddr);
return HSA_STATUS_SUCCESS;
}
@@ -457,7 +457,14 @@ typedef enum {
* Images extension.
*/
HSA_EXTENSION_IMAGES = 1,
HSA_EXTENSION_AMD_PROFILER = 2
/**
* Profiler extension.
*/
HSA_EXTENSION_AMD_PROFILER = 2,
/**
* Loaded code object extension.
*/
HSA_EXTENSION_AMD_LOADED_CODE_OBJECT = 3
} hsa_extension_t;
/**
@@ -1176,28 +1176,6 @@ hsa_status_t HSA_API hsa_amd_image_create(
hsa_ext_image_t *image
);
/**
* @brief Queries equivalent kernel host address given kernel device address.
*
* @param[in] kernel_device_address Kernel device address to query equivalent
* kernel host address for.
*
* @param[out] kernel_host_address Pointer to an application-allocated buffer
* where to store equivalend kernel host address.
*
* @retval HSA_STATUS_SUCCESS The function has been executed successfully.
*
* @retval HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
* initialized.
*
* @retval HSA_STATUS_ERROR_INVALID_ARGUMENT @p kernel_device_address is
* invalid, or @p kernel_device_address is already a kernel host address, or
* @p kernel_host_address is NULL.
*/
hsa_status_t HSA_API hsa_amd_query_kernel_host_address(
uint64_t kernel_device_address,
uint64_t *kernel_host_address);
#ifdef __cplusplus
} // end extern "C" block
#endif
@@ -0,0 +1,95 @@
////////////////////////////////////////////////////////////////////////////////
//
// The University of Illinois/NCSA
// Open Source License (NCSA)
//
// Copyright (c) 2014-2015, Advanced Micro Devices, Inc. All rights reserved.
//
// Developed by:
//
// AMD Research and AMD HSA Software Development
//
// Advanced Micro Devices, Inc.
//
// www.amd.com
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal with the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// - Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimers.
// - Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimers in
// the documentation and/or other materials provided with the distribution.
// - Neither the names of Advanced Micro Devices, Inc,
// nor the names of its contributors may be used to endorse or promote
// products derived from this Software without specific prior written
// permission.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS WITH THE SOFTWARE.
//
////////////////////////////////////////////////////////////////////////////////
// HSA AMD extension for loaded code objects.
#ifndef HSA_VEN_AMD_LOADED_CODE_OBJECT_H
#define HSA_VEN_AMD_LOADED_CODE_OBJECT_H
#include "hsa.h"
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
/**
* @brief Records loaded code object's host address in @p host_address given
* loaded code object's device address. Recorded host address points to host
* accessible memory, which is identical to memory pointed to by device address.
* If device address already points to host accessible memory, then device
* address is recorded in @p host_address.
*
* @param[in] device_address Device address.
*
* @param[out] host_address Pointer to application-allocated buffer, where to
* record host address.
*
* @retval HSA_STATUS_SUCCESS Function has been executed successfully.
*
* @retval HSA_STATUS_ERROR_NOT_INITIALIZED Runtime has not been initialized.
*
* @retval HSA_STATUS_ERROR_INVALID_ARGUMENT @p device address is invalid/null,
* or @p host address is null.
*/
hsa_status_t HSA_API hsa_ven_amd_loaded_code_object_query_host_address(
const void *device_address,
const void **host_address);
/**
* @brief Extension's version.
*/
#define hsa_ven_amd_loaded_code_object 001000
/**
* @brief Extension's function table.
*/
typedef struct hsa_ven_amd_loaded_code_object_1_00_pfn_s {
hsa_status_t (*hsa_ven_amd_loaded_code_object_query_host_address)(
const void *device_address,
const void **host_address);
} hsa_ven_amd_loaded_code_object_1_00_pfn_t;
#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
#endif // HSA_VEN_AMD_LOADED_CODE_OBJECT_H