Lines Matching refs:kgem
115 struct kgem {
202 void (*context_switch)(struct kgem *kgem, int new_mode);
203 void (*retire)(struct kgem *kgem);
204 void (*expire)(struct kgem *kgem);
245 void kgem_init(struct kgem *kgem, int fd, struct pci_device *dev, unsigned gen);
246 void kgem_reset(struct kgem *kgem);
248 struct kgem_bo *kgem_create_map(struct kgem *kgem,
252 struct kgem_bo *kgem_create_for_name(struct kgem *kgem, uint32_t name);
253 struct kgem_bo *kgem_create_for_prime(struct kgem *kgem, int name, uint32_t size);
254 int kgem_bo_export_to_prime(struct kgem *kgem, struct kgem_bo *bo);
256 struct kgem_bo *kgem_create_linear(struct kgem *kgem, int size, unsigned flags);
257 struct kgem_bo *kgem_create_proxy(struct kgem *kgem,
261 struct kgem_bo *kgem_upload_source_image(struct kgem *kgem,
267 int kgem_choose_tiling(struct kgem *kgem,
269 unsigned kgem_can_create_2d(struct kgem *kgem, int width, int height, int depth);
276 bool kgem_check_surface_size(struct kgem *kgem,
285 kgem_replace_bo(struct kgem *kgem,
304 struct kgem_bo *kgem_create_2d(struct kgem *kgem,
310 struct kgem_bo *kgem_create_cpu_2d(struct kgem *kgem,
316 bool kgem_bo_convert_to_gpu(struct kgem *kgem,
323 bool kgem_retire(struct kgem *kgem);
324 void kgem_retire__buffers(struct kgem *kgem);
340 bool __kgem_ring_is_idle(struct kgem *kgem, int ring);
341 static inline bool kgem_ring_is_idle(struct kgem *kgem, int ring)
345 if (list_is_empty(&kgem->requests[ring]))
348 return __kgem_ring_is_idle(kgem, ring);
351 static inline bool kgem_is_idle(struct kgem *kgem)
353 if (!kgem->need_retire)
356 return kgem_ring_is_idle(kgem, kgem->ring);
359 static inline bool __kgem_ring_empty(struct kgem *kgem)
361 return list_is_empty(&kgem->requests[kgem->ring == KGEM_BLT]);
364 void _kgem_submit(struct kgem *kgem);
365 static inline void kgem_submit(struct kgem *kgem)
367 if (kgem->nbatch)
368 _kgem_submit(kgem);
371 static inline void kgem_bo_submit(struct kgem *kgem, struct kgem_bo *bo)
377 _kgem_submit(kgem);
380 void kgem_scanout_flush(struct kgem *kgem, struct kgem_bo *bo);
389 void _kgem_bo_destroy(struct kgem *kgem, struct kgem_bo *bo);
390 static inline void kgem_bo_destroy(struct kgem *kgem, struct kgem_bo *bo)
394 _kgem_bo_destroy(kgem, bo);
397 void kgem_clear_dirty(struct kgem *kgem);
399 static inline void kgem_set_mode(struct kgem *kgem,
403 assert(!kgem->wedged);
406 kgem_submit(kgem);
409 if (kgem->nreloc && bo->exec == NULL && kgem_ring_is_idle(kgem, kgem->ring)) {
411 _kgem_submit(kgem);
414 if (kgem->mode == mode)
417 kgem->context_switch(kgem, mode);
418 kgem->mode = mode;
421 static inline void _kgem_set_mode(struct kgem *kgem, enum kgem_mode mode)
423 assert(kgem->mode == KGEM_NONE);
424 assert(kgem->nbatch == 0);
425 assert(!kgem->wedged);
426 kgem->context_switch(kgem, mode);
427 kgem->mode = mode;
430 static inline int kgem_batch_space(struct kgem *kgem)
432 int rem = kgem->surface - kgem->nbatch;
437 static inline bool kgem_check_batch(struct kgem *kgem, int num_dwords)
440 assert(kgem->nbatch < kgem->surface);
441 assert(kgem->surface <= kgem->batch_size);
442 return likely(kgem->nbatch + num_dwords + KGEM_BATCH_RESERVED <= kgem->surface);
445 static inline bool kgem_check_reloc(struct kgem *kgem, int n)
447 assert(kgem->nreloc <= KGEM_RELOC_SIZE(kgem));
448 return likely(kgem->nreloc + n <= KGEM_RELOC_SIZE(kgem));
451 static inline bool kgem_check_exec(struct kgem *kgem, int n)
453 assert(kgem->nexec <= KGEM_EXEC_SIZE(kgem));
454 return likely(kgem->nexec + n <= KGEM_EXEC_SIZE(kgem));
457 static inline bool kgem_check_reloc_and_exec(struct kgem *kgem, int n)
459 return kgem_check_reloc(kgem, n) && kgem_check_exec(kgem, n);
462 static inline bool kgem_check_batch_with_surfaces(struct kgem *kgem,
466 return (int)(kgem->nbatch + num_dwords + KGEM_BATCH_RESERVED) <= (int)(kgem->surface - num_surfaces*8) &&
467 kgem_check_reloc(kgem, num_surfaces) &&
468 kgem_check_exec(kgem, num_surfaces);
471 static inline uint32_t *kgem_get_batch(struct kgem *kgem)
473 if (kgem->nreloc) {
474 unsigned mode = kgem->mode;
475 _kgem_submit(kgem);
476 _kgem_set_mode(kgem, mode);
479 return kgem->batch + kgem->nbatch;
482 bool kgem_check_bo(struct kgem *kgem, ...) __attribute__((sentinel(0)));
483 bool kgem_check_bo_fenced(struct kgem *kgem, struct kgem_bo *bo);
484 bool kgem_check_many_bo_fenced(struct kgem *kgem, ...) __attribute__((sentinel(0)));
487 uint32_t kgem_add_reloc(struct kgem *kgem,
492 uint64_t kgem_add_reloc64(struct kgem *kgem,
498 void *kgem_bo_map(struct kgem *kgem, struct kgem_bo *bo);
499 void *kgem_bo_map__async(struct kgem *kgem, struct kgem_bo *bo);
500 void *kgem_bo_map__gtt(struct kgem *kgem, struct kgem_bo *bo);
501 void *kgem_bo_map__wc(struct kgem *kgem, struct kgem_bo *bo);
502 void kgem_bo_sync__gtt(struct kgem *kgem, struct kgem_bo *bo);
503 void *kgem_bo_map__debug(struct kgem *kgem, struct kgem_bo *bo);
504 void *kgem_bo_map__cpu(struct kgem *kgem, struct kgem_bo *bo);
505 void kgem_bo_sync__cpu(struct kgem *kgem, struct kgem_bo *bo);
506 void kgem_bo_sync__cpu_full(struct kgem *kgem, struct kgem_bo *bo, bool write);
507 uint32_t kgem_bo_flink(struct kgem *kgem, struct kgem_bo *bo);
509 bool kgem_bo_write(struct kgem *kgem, struct kgem_bo *bo,
512 int kgem_bo_fenced_size(struct kgem *kgem, struct kgem_bo *bo);
513 void kgem_get_tile_size(struct kgem *kgem, int tiling, int pitch,
542 static inline bool kgem_bo_blt_pitch_is_ok(struct kgem *kgem,
547 if (kgem->gen >= 0100 && pitch & (1 << 4)) { /* bdw is broken */
553 if (kgem->gen >= 040 && bo->tiling)
564 static inline bool kgem_bo_can_blt(struct kgem *kgem,
575 if (kgem->gen >= 0100 && bo->proxy && bo->delta & (1 << 4)) {
581 return kgem_bo_blt_pitch_is_ok(kgem, bo);
592 void kgem_bo_undo(struct kgem *kgem, struct kgem_bo *bo);
593 void kgem_bo_pair_undo(struct kgem *kgem, struct kgem_bo *a, struct kgem_bo *b);
595 bool __kgem_busy(struct kgem *kgem, int handle);
597 static inline void kgem_bo_mark_busy(struct kgem *kgem, struct kgem_bo *bo, int ring)
604 bo->rq = MAKE_REQUEST(kgem, ring);
605 list_add(&bo->request, &kgem->flushing);
606 kgem->need_retire = true;
629 void __kgem_retire_requests_upto(struct kgem *kgem, struct kgem_bo *bo);
630 static inline bool __kgem_bo_is_busy(struct kgem *kgem, struct kgem_bo *bo)
639 if (bo->rq && !__kgem_busy(kgem, bo->handle)) {
640 __kgem_retire_requests_upto(kgem, bo);
678 static inline void kgem_bo_unclean(struct kgem *kgem, struct kgem_bo *bo)
683 bo->rq = (void *)kgem;
717 static inline bool kgem_bo_mapped(struct kgem *kgem, struct kgem_bo *bo)
723 if (bo->tiling == I915_TILING_NONE && (bo->domain == DOMAIN_CPU || kgem->has_llc))
732 static inline bool kgem_bo_can_map(struct kgem *kgem, struct kgem_bo *bo)
737 if (!bo->tiling && (kgem->has_llc || bo->domain == DOMAIN_CPU))
745 if (kgem->gen == 021 && bo->tiling == I915_TILING_Y)
748 if (!bo->tiling && kgem->has_wc_mmap)
751 return __kgem_bo_num_pages(bo) <= kgem->aperture_mappable / 4;
754 static inline bool kgem_bo_can_map__cpu(struct kgem *kgem,
767 if (kgem->has_llc) {
786 struct kgem_bo *kgem_create_buffer(struct kgem *kgem,
789 struct kgem_bo *kgem_create_buffer_2d(struct kgem *kgem,
794 void kgem_buffer_read_sync(struct kgem *kgem, struct kgem_bo *bo);
796 int kgem_is_wedged(struct kgem *kgem);
797 void kgem_throttle(struct kgem *kgem);
799 bool kgem_expire_cache(struct kgem *kgem);
800 bool kgem_cleanup_cache(struct kgem *kgem);
802 void kgem_clean_scanout_cache(struct kgem *kgem);
803 void kgem_clean_large_cache(struct kgem *kgem);
806 void __kgem_batch_debug(struct kgem *kgem, uint32_t nbatch);
808 static inline void __kgem_batch_debug(struct kgem *kgem, uint32_t nbatch)
810 (void)kgem;
816 memcpy_to_tiled_x(struct kgem *kgem,
823 assert(kgem->memcpy_to_tiled_x);
828 return kgem->memcpy_to_tiled_x(src, dst, bpp,
836 memcpy_from_tiled_x(struct kgem *kgem,
843 assert(kgem->memcpy_from_tiled_x);
848 return kgem->memcpy_from_tiled_x(src, dst, bpp,
855 void choose_memcpy_tiled_x(struct kgem *kgem, int swizzling);