From: Marek Olšák <marek.ol...@amd.com>

---
 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

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to