Lines Matching defs:mob

87 			       struct vmw_mob *mob);
88 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 ret = vmw_mob_pt_populate(dev_priv, mob);
149 vmw_mob_pt_setup(mob, iter, otable->size >> PAGE_SHIFT);
150 mob->pt_level += VMW_MOBFMT_PTDEPTH_1 - SVGA3D_MOBFMT_PT_1;
163 cmd->body.baseAddress = mob->pt_root_page >> PAGE_SHIFT;
166 cmd->body.ptDepth = mob->pt_level;
173 BUG_ON(mob->pt_level == VMW_MOBFMT_PTDEPTH_2);
176 otable->page_table = mob;
182 vmw_mob_destroy(mob);
388 * vmw_mob_create - Create a mob, but don't populate it.
394 struct vmw_mob *mob = kzalloc(sizeof(*mob), GFP_KERNEL);
396 if (unlikely(!mob))
399 mob->num_pages = vmw_mob_calculate_pt_pages(data_pages);
401 return mob;
405 * vmw_mob_pt_populate - Populate the mob pagetable
407 * @mob: Pointer to the mob the pagetable of which we want to
415 struct vmw_mob *mob)
417 BUG_ON(mob->pt_bo != NULL);
419 return vmw_bo_create_and_populate(dev_priv, mob->num_pages * PAGE_SIZE,
421 &mob->pt_bo);
488 * vmw_mob_build_pt - Set up a multilevel mob pagetable
490 * @mob: Pointer to a mob whose page table needs setting up.
495 * Uses tail recursion to set up a multilevel mob page table.
497 static void vmw_mob_pt_setup(struct vmw_mob *mob,
502 struct ttm_buffer_object *bo = &mob->pt_bo->tbo;
516 mob->pt_level = 0;
518 ++mob->pt_level;
519 BUG_ON(mob->pt_level > 2);
527 mob->pt_root_page = vmw_piter_dma_addr(&save_pt_iter);
532 * vmw_mob_destroy - Destroy a mob, unpopulating first if necessary.
534 * @mob: Pointer to a mob to destroy.
536 void vmw_mob_destroy(struct vmw_mob *mob)
538 if (mob->pt_bo) {
539 vmw_bo_unpin_unlocked(&mob->pt_bo->tbo);
540 vmw_bo_unreference(&mob->pt_bo);
542 kfree(mob);
546 * vmw_mob_unbind - Hide a mob from the device.
549 * @mob_id: Device id of the mob to unbind.
552 struct vmw_mob *mob)
559 struct ttm_buffer_object *bo = &mob->pt_bo->tbo;
573 cmd->body.mobid = mob->id;
585 * vmw_mob_bind - Make a mob visible to the device after first
589 * @mob: Pointer to the mob we're making visible.
594 * @mob_id: Device id of the mob to bind
600 struct vmw_mob *mob,
613 mob->id = mob_id;
619 mob->pt_level = VMW_MOBFMT_PTDEPTH_0;
620 mob->pt_root_page = vmw_piter_dma_addr(&data_iter);
621 } else if (unlikely(mob->pt_bo == NULL)) {
622 ret = vmw_mob_pt_populate(dev_priv, mob);
626 vmw_mob_pt_setup(mob, data_iter, num_data_pages);
628 mob->pt_level += VMW_MOBFMT_PTDEPTH_1 - SVGA3D_MOBFMT_PT_1;
640 cmd->body.ptDepth = mob->pt_level;
641 cmd->body.base = mob->pt_root_page >> PAGE_SHIFT;
651 vmw_bo_unpin_unlocked(&mob->pt_bo->tbo);
652 vmw_bo_unreference(&mob->pt_bo);