- Timestamp:
- Dec 15, 2020 10:29:56 PM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 141912
- Location:
- trunk/src/VBox/Additions/linux/drm
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/linux/drm/vbox_drv.h
r86196 r87092 176 176 #include <drm/ttm/ttm_memory.h> 177 177 #include <drm/ttm/ttm_module.h> 178 #if RTLNX_VER_MIN(5,10,0) 179 # include <drm/ttm/ttm_resource.h> 180 #endif 178 181 179 182 #include "vboxvideo_guest.h" … … 445 448 u32 size, bool iskernel, struct drm_gem_object **obj); 446 449 447 int vbox_bo_pin(struct vbox_bo *bo, u32 pl_flag, u64 *gpu_addr); 450 #define VBOX_MEM_TYPE_VRAM 0x1 451 #define VBOX_MEM_TYPE_SYSTEM 0x2 452 453 int vbox_bo_pin(struct vbox_bo *bo, u32 mem_type, u64 *gpu_addr); 448 454 int vbox_bo_unpin(struct vbox_bo *bo); 449 455 … … 470 476 } 471 477 472 void vbox_ttm_placement(struct vbox_bo *bo, int domain);478 void vbox_ttm_placement(struct vbox_bo *bo, u32 mem_type); 473 479 int vbox_bo_push_sysram(struct vbox_bo *bo); 474 480 int vbox_mmap(struct file *filp, struct vm_area_struct *vma); -
trunk/src/VBox/Additions/linux/drm/vbox_fb.c
r86542 r87092 296 296 return ret; 297 297 298 ret = vbox_bo_pin(bo, TTM_PL_FLAG_VRAM, NULL);298 ret = vbox_bo_pin(bo, VBOX_MEM_TYPE_VRAM, NULL); 299 299 if (ret) { 300 300 vbox_bo_unreserve(bo); -
trunk/src/VBox/Additions/linux/drm/vbox_mode.c
r86542 r87092 228 228 return ret; 229 229 230 ret = vbox_bo_pin(bo, TTM_PL_FLAG_VRAM, &gpu_addr);230 ret = vbox_bo_pin(bo, VBOX_MEM_TYPE_VRAM, &gpu_addr); 231 231 vbox_bo_unreserve(bo); 232 232 if (ret) -
trunk/src/VBox/Additions/linux/drm/vbox_ttm.c
r86542 r87092 42 42 #endif 43 43 44 44 45 static inline struct vbox_private *vbox_bdev(struct ttm_bo_device *bd) 45 46 { … … 126 127 } 127 128 129 #if RTLNX_VER_MAX(5,10,0) 128 130 static int 129 131 vbox_bo_init_mem_type(struct ttm_bo_device *bdev, u32 type, … … 149 151 return 0; 150 152 } 153 #endif 151 154 152 155 static void … … 158 161 return; 159 162 160 vbox_ttm_placement(vboxbo, TTM_PL_FLAG_SYSTEM);163 vbox_ttm_placement(vboxbo, VBOX_MEM_TYPE_SYSTEM); 161 164 *pl = vboxbo->placement; 162 165 } … … 168 171 } 169 172 173 #if RTLNX_VER_MAX(5,10,0) 170 174 static int vbox_ttm_io_mem_reserve(struct ttm_bo_device *bdev, 171 175 struct ttm_mem_reg *mem) 172 176 { 177 struct vbox_private *vbox = vbox_bdev(bdev); 173 178 struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; 174 struct vbox_private *vbox = vbox_bdev(bdev);175 179 176 180 mem->bus.addr = NULL; … … 195 199 return 0; 196 200 } 197 201 #else 202 static int vbox_ttm_io_mem_reserve(struct ttm_bo_device *bdev, 203 struct ttm_resource *mem) 204 { 205 struct vbox_private *vbox = vbox_bdev(bdev); 206 mem->bus.addr = NULL; 207 mem->bus.offset = 0; 208 mem->size = mem->num_pages << PAGE_SHIFT; 209 mem->start = 0; 210 mem->bus.is_iomem = false; 211 switch (mem->mem_type) { 212 case TTM_PL_SYSTEM: 213 /* system memory */ 214 return 0; 215 case TTM_PL_VRAM: 216 mem->bus.offset = mem->start << PAGE_SHIFT; 217 mem->start = pci_resource_start(vbox->dev->pdev, 0); 218 mem->bus.is_iomem = true; 219 break; 220 default: 221 return -EINVAL; 222 } 223 return 0; 224 } 225 #endif 226 227 228 229 #if RTLNX_VER_MIN(5,10,0) 230 static void vbox_ttm_io_mem_free(struct ttm_bo_device *bdev, 231 struct ttm_resource *mem) 232 { 233 } 234 #else 198 235 static void vbox_ttm_io_mem_free(struct ttm_bo_device *bdev, 199 236 struct ttm_mem_reg *mem) 200 237 { 201 238 } 202 239 #endif 240 241 #if RTLNX_VER_MIN(5,10,0) 242 static void vbox_ttm_tt_destroy(struct ttm_bo_device *bdev, struct ttm_tt *tt) 243 { 244 ttm_tt_fini(tt); 245 kfree(tt); 246 } 247 #else 203 248 static void vbox_ttm_backend_destroy(struct ttm_tt *tt) 204 249 { … … 210 255 .destroy = &vbox_ttm_backend_destroy, 211 256 }; 257 #endif 212 258 213 259 #if RTLNX_VER_MAX(4,17,0) && !RTLNX_RHEL_MAJ_PREREQ(7,6) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5) … … 227 273 return NULL; 228 274 275 #if RTLNX_VER_MAX(5,10,0) 229 276 tt->func = &vbox_tt_backend_func; 277 #endif 230 278 #if RTLNX_VER_MAX(4,17,0) && !RTLNX_RHEL_MAJ_PREREQ(7,6) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5) 231 279 if (ttm_tt_init(tt, bdev, size, page_flags, dummy_read_page)) { … … 262 310 static struct ttm_bo_driver vbox_bo_driver = { 263 311 .ttm_tt_create = vbox_ttm_tt_create, 312 #if RTLNX_VER_MIN(5,10,0) 313 .ttm_tt_destroy = vbox_ttm_tt_destroy, 314 #endif 264 315 #if RTLNX_VER_MAX(4,17,0) 265 316 .ttm_tt_populate = vbox_ttm_tt_populate, 266 317 .ttm_tt_unpopulate = vbox_ttm_tt_unpopulate, 267 318 #endif 319 #if RTLNX_VER_MAX(5,10,0) 268 320 .init_mem_type = vbox_bo_init_mem_type, 321 #endif 269 322 #if RTLNX_VER_MIN(4,10,0) || RTLNX_RHEL_MAJ_PREREQ(7,4) 270 323 .eviction_valuable = ttm_bo_eviction_valuable, … … 319 372 } 320 373 374 #if RTLNX_VER_MIN(5,10,0) 375 ret = ttm_range_man_init(bdev, TTM_PL_VRAM, false, 376 vbox->available_vram_size >> PAGE_SHIFT); 377 #else 321 378 ret = ttm_bo_init_mm(bdev, TTM_PL_VRAM, 322 379 vbox->available_vram_size >> PAGE_SHIFT); 380 #endif 323 381 if (ret) { 324 382 DRM_ERROR("Failed ttm VRAM init: %d\n", ret); … … 360 418 } 361 419 362 void vbox_ttm_placement(struct vbox_bo *bo, int domain)420 void vbox_ttm_placement(struct vbox_bo *bo, u32 mem_type) 363 421 { 364 422 u32 c = 0; … … 373 431 bo->placement.busy_placement = bo->placements; 374 432 375 if (domain & TTM_PL_FLAG_VRAM) 433 if (mem_type & VBOX_MEM_TYPE_VRAM) { 434 #if RTLNX_VER_MIN(5,10,0) 435 bo->placements[c].mem_type = TTM_PL_VRAM; 436 PLACEMENT_FLAGS(bo->placements[c++]) = 437 TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED; 438 #else 376 439 PLACEMENT_FLAGS(bo->placements[c++]) = 377 440 TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_VRAM; 378 if (domain & TTM_PL_FLAG_SYSTEM) 441 #endif 442 } 443 if (mem_type & VBOX_MEM_TYPE_SYSTEM) { 444 #if RTLNX_VER_MIN(5,10,0) 445 bo->placements[c].mem_type = TTM_PL_SYSTEM; 446 PLACEMENT_FLAGS(bo->placements[c++]) = 447 TTM_PL_MASK_CACHING; 448 #else 379 449 PLACEMENT_FLAGS(bo->placements[c++]) = 380 450 TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM; 381 if (!c) 451 #endif 452 } 453 if (!c) { 454 #if RTLNX_VER_MIN(5,10,0) 455 bo->placements[c].mem_type = TTM_PL_SYSTEM; 456 PLACEMENT_FLAGS(bo->placements[c++]) = 457 TTM_PL_MASK_CACHING; 458 #else 382 459 PLACEMENT_FLAGS(bo->placements[c++]) = 383 460 TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM; 461 #endif 462 } 384 463 385 464 bo->placement.num_placement = c; … … 415 494 #endif 416 495 417 vbox_ttm_placement(vboxbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM);496 vbox_ttm_placement(vboxbo, VBOX_MEM_TYPE_VRAM | VBOX_MEM_TYPE_SYSTEM); 418 497 419 498 acc_size = ttm_bo_dma_acc_size(&vbox->ttm.bdev, size, … … 453 532 } 454 533 455 int vbox_bo_pin(struct vbox_bo *bo, u32 pl_flag, u64 *gpu_addr)534 int vbox_bo_pin(struct vbox_bo *bo, u32 mem_type, u64 *gpu_addr) 456 535 { 457 536 #if RTLNX_VER_MIN(4,16,0) || RTLNX_RHEL_MAJ_PREREQ(7,6) || RTLNX_SUSE_MAJ_PREREQ(15,1) || RTLNX_SUSE_MAJ_PREREQ(12,5) … … 468 547 } 469 548 470 vbox_ttm_placement(bo, pl_flag);549 vbox_ttm_placement(bo, mem_type); 471 550 472 551 for (i = 0; i < bo->placement.num_placement; i++) … … 541 620 ttm_bo_kunmap(&bo->kmap); 542 621 543 vbox_ttm_placement(bo, TTM_PL_FLAG_SYSTEM);622 vbox_ttm_placement(bo, VBOX_MEM_TYPE_SYSTEM); 544 623 545 624 for (i = 0; i < bo->placement.num_placement; i++)
Note:
See TracChangeset
for help on using the changeset viewer.