Rev 4569 | Rev 5078 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4569 | Rev 4570 | ||
---|---|---|---|
Line 388... | Line 388... | ||
388 | int vmw_3d_resource_inc(struct vmw_private *dev_priv, |
388 | int vmw_3d_resource_inc(struct vmw_private *dev_priv, |
389 | bool unhide_svga) |
389 | bool unhide_svga) |
390 | { |
390 | { |
391 | int ret = 0; |
391 | int ret = 0; |
Line 392... | Line -... | ||
392 | - | ||
393 | ENTER(); |
- | |
394 | 392 | ||
395 | mutex_lock(&dev_priv->release_mutex); |
393 | mutex_lock(&dev_priv->release_mutex); |
396 | if (unlikely(dev_priv->num_3d_resources++ == 0)) { |
394 | if (unlikely(dev_priv->num_3d_resources++ == 0)) { |
397 | ret = vmw_request_device(dev_priv); |
395 | ret = vmw_request_device(dev_priv); |
398 | if (unlikely(ret != 0)) |
396 | if (unlikely(ret != 0)) |
Line 404... | Line 402... | ||
404 | ~SVGA_REG_ENABLE_HIDE); |
402 | ~SVGA_REG_ENABLE_HIDE); |
405 | mutex_unlock(&dev_priv->hw_mutex); |
403 | mutex_unlock(&dev_priv->hw_mutex); |
406 | } |
404 | } |
Line 407... | Line 405... | ||
407 | 405 | ||
408 | mutex_unlock(&dev_priv->release_mutex); |
- | |
409 | LEAVE(); |
406 | mutex_unlock(&dev_priv->release_mutex); |
410 | return ret; |
407 | return ret; |
Line 411... | Line 408... | ||
411 | } |
408 | } |
412 | 409 | ||
Line 474... | Line 471... | ||
474 | dev_priv->initial_width = width; |
471 | dev_priv->initial_width = width; |
475 | dev_priv->initial_height = height; |
472 | dev_priv->initial_height = height; |
476 | } |
473 | } |
Line 477... | Line 474... | ||
477 | 474 | ||
- | 475 | /** |
|
- | 476 | * vmw_dma_select_mode - Determine how DMA mappings should be set up for this |
|
- | 477 | * system. |
|
- | 478 | * |
|
- | 479 | * @dev_priv: Pointer to a struct vmw_private |
|
- | 480 | * |
|
- | 481 | * This functions tries to determine the IOMMU setup and what actions |
|
- | 482 | * need to be taken by the driver to make system pages visible to the |
|
- | 483 | * device. |
|
- | 484 | * If this function decides that DMA is not possible, it returns -EINVAL. |
|
- | 485 | * The driver may then try to disable features of the device that require |
|
- | 486 | * DMA. |
|
- | 487 | */ |
|
- | 488 | static int vmw_dma_select_mode(struct vmw_private *dev_priv) |
|
- | 489 | { |
|
- | 490 | static const char *names[vmw_dma_map_max] = { |
|
- | 491 | [vmw_dma_phys] = "Using physical TTM page addresses.", |
|
- | 492 | [vmw_dma_alloc_coherent] = "Using coherent TTM pages.", |
|
- | 493 | [vmw_dma_map_populate] = "Keeping DMA mappings.", |
|
- | 494 | [vmw_dma_map_bind] = "Giving up DMA mappings early."}; |
|
- | 495 | ||
- | 496 | dev_priv->map_mode = vmw_dma_phys; |
|
- | 497 | DRM_INFO("DMA map mode: %s\n", names[dev_priv->map_mode]); |
|
- | 498 | ||
- | 499 | return 0; |
|
- | 500 | } |
|
- | 501 | ||
478 | /** |
502 | /** |
479 | * vmw_dma_masks - set required page- and dma masks |
503 | * vmw_dma_masks - set required page- and dma masks |
480 | * |
504 | * |
481 | * @dev: Pointer to struct drm-device |
505 | * @dev: Pointer to struct drm-device |
482 | * |
506 | * |
Line 508... | Line 532... | ||
508 | int ret; |
532 | int ret; |
509 | uint32_t svga_id; |
533 | uint32_t svga_id; |
510 | enum vmw_res_type i; |
534 | enum vmw_res_type i; |
511 | bool refuse_dma = false; |
535 | bool refuse_dma = false; |
Line 512... | Line -... | ||
512 | - | ||
513 | 536 | ||
Line 514... | Line 537... | ||
514 | ENTER(); |
537 | ENTER(); |
515 | 538 | ||
516 | dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL); |
539 | dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL); |
Line 562... | Line 585... | ||
562 | mutex_unlock(&dev_priv->hw_mutex); |
585 | mutex_unlock(&dev_priv->hw_mutex); |
563 | goto out_err0; |
586 | goto out_err0; |
564 | } |
587 | } |
Line 565... | Line 588... | ||
565 | 588 | ||
566 | dev_priv->capabilities = vmw_read(dev_priv, SVGA_REG_CAPABILITIES); |
589 | dev_priv->capabilities = vmw_read(dev_priv, SVGA_REG_CAPABILITIES); |
567 | // ret = vmw_dma_select_mode(dev_priv); |
590 | ret = vmw_dma_select_mode(dev_priv); |
568 | // if (unlikely(ret != 0)) { |
591 | if (unlikely(ret != 0)) { |
569 | // DRM_INFO("Restricting capabilities due to IOMMU setup.\n"); |
592 | DRM_INFO("Restricting capabilities due to IOMMU setup.\n"); |
570 | // refuse_dma = true; |
593 | refuse_dma = true; |
Line 571... | Line 594... | ||
571 | // } |
594 | } |
572 | 595 | ||
573 | dev_priv->vram_size = vmw_read(dev_priv, SVGA_REG_VRAM_SIZE); |
596 | dev_priv->vram_size = vmw_read(dev_priv, SVGA_REG_VRAM_SIZE); |
574 | dev_priv->mmio_size = vmw_read(dev_priv, SVGA_REG_MEM_SIZE); |
597 | dev_priv->mmio_size = vmw_read(dev_priv, SVGA_REG_MEM_SIZE); |
Line 925... | Line 948... | ||
925 | } |
948 | } |
926 | #endif |
949 | #endif |
Line 927... | Line 950... | ||
927 | 950 | ||
928 | static void vmw_master_init(struct vmw_master *vmaster) |
951 | static void vmw_master_init(struct vmw_master *vmaster) |
929 | { |
952 | { |
930 | // ttm_lock_init(&vmaster->lock); |
953 | ttm_lock_init(&vmaster->lock); |
931 | INIT_LIST_HEAD(&vmaster->fb_surf); |
954 | INIT_LIST_HEAD(&vmaster->fb_surf); |
932 | mutex_init(&vmaster->fb_surf_mutex); |
955 | mutex_init(&vmaster->fb_surf_mutex); |
Line 933... | Line 956... | ||
933 | } |
956 | } |
Line 1174... | Line 1197... | ||
1174 | return 0; |
1197 | return 0; |
1175 | } |
1198 | } |
Line 1176... | Line 1199... | ||
1176 | 1199 | ||
Line 1177... | Line -... | ||
1177 | #endif |
- | |
1178 | 1200 | #endif |
|
1179 | 1201 | ||
1180 | static struct drm_driver driver = { |
1202 | static struct drm_driver driver = { |
1181 | .driver_features = DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | |
1203 | .driver_features = DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | |
1182 | DRIVER_MODESET, |
1204 | DRIVER_MODESET, |
1183 | .load = vmw_driver_load, |
- | |
1184 | // .unload = vmw_driver_unload, |
1205 | .load = vmw_driver_load, |
1185 | // .firstopen = vmw_firstopen, |
1206 | // .unload = vmw_driver_unload, |
1186 | // .lastclose = vmw_lastclose, |
1207 | // .lastclose = vmw_lastclose, |
1187 | .irq_preinstall = vmw_irq_preinstall, |
1208 | .irq_preinstall = vmw_irq_preinstall, |
1188 | .irq_postinstall = vmw_irq_postinstall, |
1209 | .irq_postinstall = vmw_irq_postinstall, |
1189 | // .irq_uninstall = vmw_irq_uninstall, |
1210 | // .irq_uninstall = vmw_irq_uninstall, |
1190 | .irq_handler = vmw_irq_handler, |
1211 | .irq_handler = vmw_irq_handler, |
1191 | // .get_vblank_counter = vmw_get_vblank_counter, |
1212 | // .get_vblank_counter = vmw_get_vblank_counter, |
1192 | // .enable_vblank = vmw_enable_vblank, |
1213 | // .enable_vblank = vmw_enable_vblank, |
1193 | // .disable_vblank = vmw_disable_vblank, |
1214 | // .disable_vblank = vmw_disable_vblank, |
1194 | // .ioctls = vmw_ioctls, |
- | |
1195 | // .num_ioctls = DRM_ARRAY_SIZE(vmw_ioctls), |
- | |
1196 | // .dma_quiescent = NULL, /*vmw_dma_quiescent, */ |
- | |
1197 | // .master_create = vmw_master_create, |
- | |
1198 | // .master_destroy = vmw_master_destroy, |
- | |
1199 | // .master_set = vmw_master_set, |
1215 | // .ioctls = vmw_ioctls, |
1200 | // .master_drop = vmw_master_drop, |
1216 | // .num_ioctls = DRM_ARRAY_SIZE(vmw_ioctls), |
1201 | .open = vmw_driver_open, |
1217 | .open = vmw_driver_open, |
Line 1202... | Line 1218... | ||
1202 | // .preclose = vmw_preclose, |
1218 | // .preclose = vmw_preclose, |
1203 | // .postclose = vmw_postclose, |
1219 | // .postclose = vmw_postclose, |
1204 | 1220 | ||
Line 1205... | Line -... | ||
1205 | // .dumb_create = vmw_dumb_create, |
- | |
1206 | // .dumb_map_offset = vmw_dumb_map_offset, |
- | |
1207 | // .dumb_destroy = vmw_dumb_destroy, |
- | |
1208 | - | ||
1209 | // .fops = &vmwgfx_driver_fops, |
- | |
1210 | // .name = VMWGFX_DRIVER_NAME, |
- | |
1211 | // .desc = VMWGFX_DRIVER_DESC, |
- | |
- | 1221 | // .dumb_create = vmw_dumb_create, |
|
1212 | // .date = VMWGFX_DRIVER_DATE, |
1222 | // .dumb_map_offset = vmw_dumb_map_offset, |
Line 1213... | Line 1223... | ||
1213 | // .major = VMWGFX_DRIVER_MAJOR, |
1223 | // .dumb_destroy = vmw_dumb_destroy, |
1214 | // .minor = VMWGFX_DRIVER_MINOR, |
1224 | |
1215 | // .patchlevel = VMWGFX_DRIVER_PATCHLEVEL |
1225 |