From: Marek Olšák <marek.olsak@xxxxxxx> --- amdgpu/amdgpu.h | 21 +++++++++++++++++++++ amdgpu/amdgpu_device.c | 14 ++++++++++++++ amdgpu/amdgpu_internal.h | 1 + 3 files changed, 36 insertions(+) diff --git a/amdgpu/amdgpu.h b/amdgpu/amdgpu.h index 2eb03bf..928b2a6 100644 --- a/amdgpu/amdgpu.h +++ b/amdgpu/amdgpu.h @@ -87,20 +87,24 @@ enum amdgpu_bo_handle_type { amdgpu_bo_handle_type_dma_buf_fd = 2 }; /** Define known types of GPU VM VA ranges */ enum amdgpu_gpu_va_range { /** Allocate from "normal"/general range */ amdgpu_gpu_va_range_general = 0 }; +enum amdgpu_sw_info { + amdgpu_sw_info_address32_hi = 0, +}; + /*--------------------------------------------------------------------------*/ /* -------------------------- Datatypes ----------------------------------- */ /*--------------------------------------------------------------------------*/ /** * Define opaque pointer to context associated with fd. * This context will be returned as the result of * "initialize" function and should be pass as the first * parameter to any API call */ @@ -1079,20 +1083,37 @@ int amdgpu_query_gpu_info(amdgpu_device_handle dev, * \param value - \c [out] Pointer to the return value. * * \return 0 on success\n * <0 - Negative POSIX error code * */ int amdgpu_query_info(amdgpu_device_handle dev, unsigned info_id, unsigned size, void *value); /** + * Query hardware or driver information. + * + * The return size is query-specific and depends on the "info_id" parameter. + * No more than "size" bytes is returned. + * + * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() + * \param info - \c [in] amdgpu_sw_info_* + * \param value - \c [out] Pointer to the return value. + * + * \return 0 on success\n + * <0 - Negative POSIX error code + * +*/ +int amdgpu_query_sw_info(amdgpu_device_handle dev, enum amdgpu_sw_info info, + void *value); + +/** * Query information about GDS * * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() * \param gds_info - \c [out] Pointer to structure to get GDS information * * \return 0 on success\n * <0 - Negative POSIX Error code * */ int amdgpu_query_gds_info(amdgpu_device_handle dev, diff --git a/amdgpu/amdgpu_device.c b/amdgpu/amdgpu_device.c index f34e27a..6ee25a9 100644 --- a/amdgpu/amdgpu_device.c +++ b/amdgpu/amdgpu_device.c @@ -268,20 +268,21 @@ int amdgpu_device_initialize(int fd, start = dev->dev_info.high_va_offset; max = dev->dev_info.high_va_max; } else { start = dev->dev_info.virtual_address_offset; max = dev->dev_info.virtual_address_max; } max = MIN2(max, (start & ~0xffffffffULL) + 0x100000000ULL); amdgpu_vamgr_init(&dev->vamgr_32, start, max, dev->dev_info.virtual_address_alignment); + dev->address32_hi = start >> 32; start = max; if (dev->dev_info.high_va_offset && dev->dev_info.high_va_max) max = dev->dev_info.high_va_max; else max = dev->dev_info.virtual_address_max; amdgpu_vamgr_init(&dev->vamgr, start, max, dev->dev_info.virtual_address_alignment); amdgpu_parse_asic_ids(dev); @@ -305,10 +306,23 @@ cleanup: int amdgpu_device_deinitialize(amdgpu_device_handle dev) { amdgpu_device_reference(&dev, NULL); return 0; } const char *amdgpu_get_marketing_name(amdgpu_device_handle dev) { return dev->marketing_name; } + +int amdgpu_query_sw_info(amdgpu_device_handle dev, enum amdgpu_sw_info info, + void *value) +{ + uint32_t *val32 = (uint32_t*)value; + + switch (info) { + case amdgpu_sw_info_address32_hi: + *val32 = dev->address32_hi; + return 0; + } + return -EINVAL; +} diff --git a/amdgpu/amdgpu_internal.h b/amdgpu/amdgpu_internal.h index 3e044f1..802b162 100644 --- a/amdgpu/amdgpu_internal.h +++ b/amdgpu/amdgpu_internal.h @@ -68,20 +68,21 @@ struct amdgpu_va { enum amdgpu_gpu_va_range range; struct amdgpu_bo_va_mgr *vamgr; }; struct amdgpu_device { atomic_t refcount; int fd; int flink_fd; unsigned major_version; unsigned minor_version; + uint32_t address32_hi; char *marketing_name; /** List of buffer handles. Protected by bo_table_mutex. */ struct util_hash_table *bo_handles; /** List of buffer GEM flink names. Protected by bo_table_mutex. */ struct util_hash_table *bo_flink_names; /** This protects all hash tables. */ pthread_mutex_t bo_table_mutex; struct drm_amdgpu_info_device dev_info; struct amdgpu_gpu_info info; -- 2.7.4