Lines Matching defs:mob
97 struct vmw_mob *mob);
98 static void vmw_mob_pt_setup(struct vmw_mob *mob,
124 struct vmw_mob *mob;
135 mob = vmw_mob_create(otable->size >> PAGE_SHIFT);
136 if (unlikely(mob == NULL)) {
142 mob->pt_level = VMW_MOBFMT_PTDEPTH_0;
143 mob->pt_root_page = vmw_piter_dma_addr(&iter);
145 mob->pt_level = SVGA3D_MOBFMT_RANGE;
146 mob->pt_root_page = vmw_piter_dma_addr(&iter);
148 ret = vmw_mob_pt_populate(dev_priv, mob);
152 vmw_mob_pt_setup(mob, iter, otable->size >> PAGE_SHIFT);
153 mob->pt_level += VMW_MOBFMT_PTDEPTH_1 - SVGA3D_MOBFMT_PTDEPTH_1;
166 cmd->body.baseAddress = mob->pt_root_page >> PAGE_SHIFT;
169 cmd->body.ptDepth = mob->pt_level;
176 BUG_ON(mob->pt_level == VMW_MOBFMT_PTDEPTH_2);
179 otable->page_table = mob;
185 vmw_mob_destroy(mob);
410 * vmw_mob_create - Create a mob, but don't populate it.
416 struct vmw_mob *mob = kzalloc(sizeof(*mob), GFP_KERNEL);
418 if (unlikely(!mob))
421 mob->num_pages = vmw_mob_calculate_pt_pages(data_pages);
423 return mob;
427 * vmw_mob_pt_populate - Populate the mob pagetable
429 * @mob: Pointer to the mob the pagetable of which we want to
438 struct vmw_mob *mob)
446 BUG_ON(mob->pt_bo != NULL);
448 ret = ttm_bo_create(&dev_priv->bdev, mob->num_pages * PAGE_SIZE,
451 0, false, &mob->pt_bo);
455 ret = ttm_bo_reserve(mob->pt_bo, false, true, NULL);
458 ret = vmw_bo_driver.ttm_tt_populate(mob->pt_bo->ttm, &ctx);
461 ret = vmw_bo_map_dma(mob->pt_bo);
465 ttm_bo_unreserve(mob->pt_bo);
470 ttm_bo_unreserve(mob->pt_bo);
471 ttm_bo_put(mob->pt_bo);
472 mob->pt_bo = NULL;
541 * vmw_mob_build_pt - Set up a multilevel mob pagetable
543 * @mob: Pointer to a mob whose page table needs setting up.
548 * Uses tail recursion to set up a multilevel mob page table.
550 static void vmw_mob_pt_setup(struct vmw_mob *mob,
555 struct ttm_buffer_object *bo = mob->pt_bo;
567 mob->pt_level = 0;
569 ++mob->pt_level;
570 BUG_ON(mob->pt_level > 2);
578 mob->pt_root_page = vmw_piter_dma_addr(&save_pt_iter);
583 * vmw_mob_destroy - Destroy a mob, unpopulating first if necessary.
585 * @mob: Pointer to a mob to destroy.
587 mob)
589 if (mob->pt_bo) {
590 ttm_bo_put(mob->pt_bo);
591 mob->pt_bo = NULL;
593 kfree(mob);
597 * vmw_mob_unbind - Hide a mob from the device.
600 * @mob_id: Device id of the mob to unbind.
603 struct vmw_mob *mob)
610 struct ttm_buffer_object *bo = mob->pt_bo;
624 cmd->body.mobid = mob->id;
636 * vmw_mob_bind - Make a mob visible to the device after first
640 * @mob: Pointer to the mob we're making visible.
645 * @mob_id: Device id of the mob to bind
651 struct vmw_mob *mob,
664 mob->id = mob_id;
670 mob->pt_level = VMW_MOBFMT_PTDEPTH_0;
671 mob->pt_root_page = vmw_piter_dma_addr(&data_iter);
673 mob->pt_level = SVGA3D_MOBFMT_RANGE;
674 mob->pt_root_page = vmw_piter_dma_addr(&data_iter);
675 } else if (unlikely(mob->pt_bo == NULL)) {
676 ret = vmw_mob_pt_populate(dev_priv, mob);
680 vmw_mob_pt_setup(mob, data_iter, num_data_pages);
682 mob->pt_level += VMW_MOBFMT_PTDEPTH_1 - SVGA3D_MOBFMT_PTDEPTH_1;
694 cmd->body.ptDepth = mob->pt_level;
695 cmd->body.base = mob->pt_root_page >> PAGE_SHIFT;
705 ttm_bo_put(mob->pt_bo);
706 mob->pt_bo = NULL;