const struct kgd2kfd_calls *kgd2kfd;
 bool (*kgd2kfd_init_p)(unsigned int, const struct kgd2kfd_calls**);
 
+static const unsigned int compute_vmid_bitmap = 0xFF00;
+
 int amdgpu_amdkfd_init(void)
 {
        int ret;
        int last_valid_bit;
        if (adev->kfd) {
                struct kgd2kfd_shared_resources gpu_resources = {
-                       .compute_vmid_bitmap = 0xFF00,
+                       .compute_vmid_bitmap = compute_vmid_bitmap,
                        .num_pipe_per_mec = adev->gfx.mec.num_pipe_per_mec,
-                       .num_queue_per_pipe = adev->gfx.mec.num_queue_per_pipe
+                       .num_queue_per_pipe = adev->gfx.mec.num_queue_per_pipe,
+                       .gpuvm_size = min(adev->vm_manager.max_pfn
+                                         << AMDGPU_GPU_PAGE_SHIFT,
+                                         AMDGPU_VA_HOLE_START),
+                       .drm_render_minor = adev->ddev->render->index
                };
 
                /* this is going to have a few of the MSBs set that we need to
 
        return amdgpu_vram_mgr_usage(&adev->mman.bdev.man[TTM_PL_VRAM]);
 }
+
+bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid)
+{
+       if (adev->kfd) {
+               if ((1 << vmid) & compute_vmid_bitmap)
+                       return true;
+       }
+
+       return false;
+}
 
 struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void);
 struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void);
 
+bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid);
+
 /* Shared API */
 int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
                        void **mem_obj, uint64_t *gpu_addr,
 
 
        /* Number of bytes at start of aperture reserved for KGD. */
        size_t doorbell_start_offset;
+
+       /* GPUVM address space size in bytes */
+       uint64_t gpuvm_size;
+
+       /* Minor device number of the render node */
+       int drm_render_minor;
 };
 
 struct tile_config {