Lines Matching defs:mob
92 struct vmw_mob *mob);
93 static void vmw_mob_pt_setup(struct vmw_mob *mob,
119 struct vmw_mob *mob;
130 mob = vmw_mob_create(otable->size >> PAGE_SHIFT);
131 if (unlikely(mob == NULL)) {
137 mob->pt_level = VMW_MOBFMT_PTDEPTH_0;
138 mob->pt_root_page = vmw_piter_dma_addr(&iter);
140 mob->pt_level = SVGA3D_MOBFMT_RANGE;
141 mob->pt_root_page = vmw_piter_dma_addr(&iter);
143 ret = vmw_mob_pt_populate(dev_priv, mob);
147 vmw_mob_pt_setup(mob, iter, otable->size >> PAGE_SHIFT);
148 mob->pt_level += VMW_MOBFMT_PTDEPTH_1 - SVGA3D_MOBFMT_PTDEPTH_1;
161 cmd->body.baseAddress = mob->pt_root_page >> PAGE_SHIFT;
164 cmd->body.ptDepth = mob->pt_level;
171 BUG_ON(mob->pt_level == VMW_MOBFMT_PTDEPTH_2);
174 otable->page_table = mob;
180 vmw_mob_destroy(mob);
383 * vmw_mob_create - Create a mob, but don't populate it.
389 struct vmw_mob *mob = kzalloc(sizeof(*mob), GFP_KERNEL);
391 if (unlikely(!mob))
394 mob->num_pages = vmw_mob_calculate_pt_pages(data_pages);
396 return mob;
400 * vmw_mob_pt_populate - Populate the mob pagetable
402 * @mob: Pointer to the mob the pagetable of which we want to
411 struct vmw_mob *mob)
413 BUG_ON(mob->pt_bo != NULL);
415 return vmw_bo_create_and_populate(dev_priv, mob->num_pages * PAGE_SIZE, &mob->pt_bo);
482 * vmw_mob_build_pt - Set up a multilevel mob pagetable
484 * @mob: Pointer to a mob whose page table needs setting up.
489 * Uses tail recursion to set up a multilevel mob page table.
491 static void vmw_mob_pt_setup(struct vmw_mob *mob,
496 struct ttm_buffer_object *bo = mob->pt_bo;
508 mob->pt_level = 0;
510 ++mob->pt_level;
511 BUG_ON(mob->pt_level > 2);
519 mob->pt_root_page = vmw_piter_dma_addr(&save_pt_iter);
524 * vmw_mob_destroy - Destroy a mob, unpopulating first if necessary.
526 * @mob: Pointer to a mob to destroy.
528 void vmw_mob_destroy(struct vmw_mob *mob)
530 if (mob->pt_bo) {
531 ttm_bo_put(mob->pt_bo);
532 mob->pt_bo = NULL;
534 kfree(mob);
538 * vmw_mob_unbind - Hide a mob from the device.
541 * @mob_id: Device id of the mob to unbind.
544 struct vmw_mob *mob)
551 struct ttm_buffer_object *bo = mob->pt_bo;
565 cmd->body.mobid = mob->id;
577 * vmw_mob_bind - Make a mob visible to the device after first
581 * @mob: Pointer to the mob we're making visible.
586 * @mob_id: Device id of the mob to bind
592 struct vmw_mob *mob,
605 mob->id = mob_id;
611 mob->pt_level = VMW_MOBFMT_PTDEPTH_0;
612 mob->pt_root_page = vmw_piter_dma_addr(&data_iter);
614 mob->pt_level = SVGA3D_MOBFMT_RANGE;
615 mob->pt_root_page = vmw_piter_dma_addr(&data_iter);
616 } else if (unlikely(mob->pt_bo == NULL)) {
617 ret = vmw_mob_pt_populate(dev_priv, mob);
621 vmw_mob_pt_setup(mob, data_iter, num_data_pages);
623 mob->pt_level += VMW_MOBFMT_PTDEPTH_1 - SVGA3D_MOBFMT_PTDEPTH_1;
635 cmd->body.ptDepth = mob->pt_level;
636 cmd->body.base = mob->pt_root_page >> PAGE_SHIFT;
646 ttm_bo_put(mob->pt_bo);
647 mob->pt_bo = NULL;