Lines Matching refs:kgem

122 struct kgem {
218 void (*context_switch)(struct kgem *kgem, int new_mode);
219 void (*retire)(struct kgem *kgem);
220 void (*expire)(struct kgem *kgem);
254 void kgem_init(struct kgem *kgem, int fd, struct pci_device *dev, unsigned gen);
255 void kgem_reset(struct kgem *kgem);
257 struct kgem_bo *kgem_create_map(struct kgem *kgem,
261 struct kgem_bo *kgem_create_for_name(struct kgem *kgem, uint32_t name);
262 struct kgem_bo *kgem_create_for_prime(struct kgem *kgem, int name, uint32_t size);
263 int kgem_bo_export_to_prime(struct kgem *kgem, struct kgem_bo *bo);
265 struct kgem_bo *kgem_create_linear(struct kgem *kgem, int size, unsigned flags);
266 struct kgem_bo *kgem_create_proxy(struct kgem *kgem,
270 struct kgem_bo *kgem_upload_source_image(struct kgem *kgem,
276 int kgem_choose_tiling(struct kgem *kgem,
278 unsigned kgem_can_create_2d(struct kgem *kgem, int width, int height, int depth);
285 bool kgem_check_surface_size(struct kgem *kgem,
294 kgem_replace_bo(struct kgem *kgem,
313 struct kgem_bo *kgem_create_2d(struct kgem *kgem,
319 struct kgem_bo *kgem_create_cpu_2d(struct kgem *kgem,
325 bool kgem_bo_convert_to_gpu(struct kgem *kgem,
329 bool kgem_bo_is_fenced(struct kgem *kgem, struct kgem_bo *bo);
333 bool kgem_retire(struct kgem *kgem);
334 void kgem_retire__buffers(struct kgem *kgem);
350 bool __kgem_ring_is_idle(struct kgem *kgem, int ring);
351 static inline bool kgem_ring_is_idle(struct kgem *kgem, int ring)
355 if (kgem->needs_semaphore &&
356 !list_is_empty(&kgem->requests[!ring]) &&
357 !__kgem_ring_is_idle(kgem, !ring))
360 if (list_is_empty(&kgem->requests[ring]))
363 return __kgem_ring_is_idle(kgem, ring);
366 static inline bool kgem_is_idle(struct kgem *kgem)
368 if (!kgem->need_retire)
371 return kgem_ring_is_idle(kgem, kgem->ring);
374 static inline bool __kgem_ring_empty(struct kgem *kgem)
376 return list_is_empty(&kgem->requests[kgem->ring == KGEM_BLT]);
379 void _kgem_submit(struct kgem *kgem);
380 static inline void kgem_submit(struct kgem *kgem)
382 if (kgem->nbatch)
383 _kgem_submit(kgem);
386 static inline void kgem_bo_submit(struct kgem *kgem, struct kgem_bo *bo)
392 _kgem_submit(kgem);
395 void kgem_scanout_flush(struct kgem *kgem, struct kgem_bo *bo);
404 void _kgem_bo_destroy(struct kgem *kgem, struct kgem_bo *bo);
405 static inline void kgem_bo_destroy(struct kgem *kgem, struct kgem_bo *bo)
410 _kgem_bo_destroy(kgem, bo);
413 void kgem_clear_dirty(struct kgem *kgem);
415 static inline void kgem_set_mode(struct kgem *kgem,
419 warn_unless(!kgem->wedged);
422 kgem_submit(kgem);
425 if (kgem->nreloc && bo->rq == NULL && kgem_ring_is_idle(kgem, kgem->ring)) {
427 _kgem_submit(kgem);
430 if (kgem->mode == mode)
433 kgem->context_switch(kgem, mode);
434 kgem->mode = mode;
437 static inline void _kgem_set_mode(struct kgem *kgem, enum kgem_mode mode)
439 assert(kgem->mode == KGEM_NONE);
440 assert(kgem->nbatch == 0);
441 warn_unless(!kgem->wedged);
442 kgem->context_switch(kgem, mode);
443 kgem->mode = mode;
446 static inline int kgem_batch_space(struct kgem *kgem)
448 int rem = kgem->surface - kgem->nbatch;
453 static inline bool kgem_check_batch(struct kgem *kgem, int num_dwords)
456 assert(kgem->nbatch < kgem->surface);
457 assert(kgem->surface <= kgem->batch_size);
458 return likely(kgem->nbatch + num_dwords + KGEM_BATCH_RESERVED <= kgem->surface);
461 static inline bool kgem_check_reloc(struct kgem *kgem, int n)
463 assert(kgem->nreloc <= KGEM_RELOC_SIZE(kgem));
464 return likely(kgem->nreloc + n <= KGEM_RELOC_SIZE(kgem));
467 static inline bool kgem_check_exec(struct kgem *kgem, int n)
469 assert(kgem->nexec <= KGEM_EXEC_SIZE(kgem));
470 return likely(kgem->nexec + n <= KGEM_EXEC_SIZE(kgem));
473 static inline bool kgem_check_reloc_and_exec(struct kgem *kgem, int n)
475 return kgem_check_reloc(kgem, n) && kgem_check_exec(kgem, n);
478 static inline bool kgem_check_batch_with_surfaces(struct kgem *kgem,
482 return (int)(kgem->nbatch + num_dwords + KGEM_BATCH_RESERVED) <= (int)(kgem->surface - num_surfaces*8) &&
483 kgem_check_reloc(kgem, num_surfaces) &&
484 kgem_check_exec(kgem, num_surfaces);
487 static inline uint32_t *kgem_get_batch(struct kgem *kgem)
489 if (kgem->nreloc) {
490 unsigned mode = kgem->mode;
491 _kgem_submit(kgem);
492 _kgem_set_mode(kgem, mode);
495 return kgem->batch + kgem->nbatch;
498 bool kgem_check_bo(struct kgem *kgem, ...) __attribute__((sentinel(0)));
499 bool kgem_check_bo_fenced(struct kgem *kgem, struct kgem_bo *bo);
500 bool kgem_check_many_bo_fenced(struct kgem *kgem, ...) __attribute__((sentinel(0)));
503 uint32_t kgem_add_reloc(struct kgem *kgem,
508 uint64_t kgem_add_reloc64(struct kgem *kgem,
514 void *kgem_bo_map(struct kgem *kgem, struct kgem_bo *bo);
515 void *kgem_bo_map__async(struct kgem *kgem, struct kgem_bo *bo);
516 void *kgem_bo_map__gtt(struct kgem *kgem, struct kgem_bo *bo);
517 void *kgem_bo_map__wc(struct kgem *kgem, struct kgem_bo *bo);
518 void kgem_bo_sync__gtt(struct kgem *kgem, struct kgem_bo *bo);
519 void *kgem_bo_map__debug(struct kgem *kgem, struct kgem_bo *bo);
520 void *kgem_bo_map__cpu(struct kgem *kgem, struct kgem_bo *bo);
521 void kgem_bo_sync__cpu(struct kgem *kgem, struct kgem_bo *bo);
522 void kgem_bo_sync__cpu_full(struct kgem *kgem, struct kgem_bo *bo, bool write);
523 uint32_t kgem_bo_flink(struct kgem *kgem, struct kgem_bo *bo);
525 bool kgem_bo_write(struct kgem *kgem, struct kgem_bo *bo,
528 int kgem_bo_fenced_size(struct kgem *kgem, struct kgem_bo *bo);
529 void kgem_get_tile_size(struct kgem *kgem, int tiling, int pitch,
558 static inline bool kgem_bo_blt_pitch_is_ok(struct kgem *kgem,
563 if (kgem->gen >= 0100 && pitch & (1 << 4)) { /* bdw is broken */
569 if (kgem->gen >= 040 && bo->tiling)
580 static inline bool kgem_bo_can_blt(struct kgem *kgem,
585 if (bo->tiling == I915_TILING_Y && !kgem->can_blt_y) {
591 if (kgem->gen >= 0100 && bo->proxy && bo->delta & 63) {
597 return kgem_bo_blt_pitch_is_ok(kgem, bo);
600 void __kgem_bcs_set_tiling(struct kgem *kgem,
604 inline static void kgem_bcs_set_tiling(struct kgem *kgem,
608 assert(kgem->mode == KGEM_BLT);
610 if (!kgem->can_blt_y)
613 __kgem_bcs_set_tiling(kgem, src, dst);
624 void kgem_bo_undo(struct kgem *kgem, struct kgem_bo *bo);
625 void kgem_bo_pair_undo(struct kgem *kgem, struct kgem_bo *a, struct kgem_bo *b);
627 bool __kgem_busy(struct kgem *kgem, int handle);
629 static inline void kgem_bo_mark_busy(struct kgem *kgem, struct kgem_bo *bo, int ring)
636 bo->rq = MAKE_REQUEST(kgem, ring);
637 list_add(&bo->request, &kgem->flushing);
638 kgem->need_retire = true;
668 bool __kgem_retire_requests_upto(struct kgem *kgem, struct kgem_bo *bo);
669 static inline bool __kgem_bo_is_busy(struct kgem *kgem, struct kgem_bo *bo)
681 if (__kgem_busy(kgem, bo->handle))
684 return __kgem_retire_requests_upto(kgem, bo);
724 static inline void kgem_bo_unclean(struct kgem *kgem, struct kgem_bo *bo)
729 bo->rq = (void *)kgem;
763 static inline bool kgem_bo_mapped(struct kgem *kgem, struct kgem_bo *bo)
769 if (bo->tiling == I915_TILING_NONE && (bo->domain == DOMAIN_CPU || kgem->has_llc))
778 static inline bool kgem_bo_can_map(struct kgem *kgem, struct kgem_bo *bo)
783 if (!bo->tiling && (kgem->has_llc || bo->domain == DOMAIN_CPU))
791 if (kgem->gen == 021 && bo->tiling == I915_TILING_Y)
794 if (!bo->tiling && kgem->has_wc_mmap)
797 return __kgem_bo_num_pages(bo) <= kgem->aperture_mappable / 4;
800 static inline bool kgem_bo_can_map__cpu(struct kgem *kgem,
813 if (kgem->has_llc) {
832 struct kgem_bo *kgem_create_buffer(struct kgem *kgem,
835 struct kgem_bo *kgem_create_buffer_2d(struct kgem *kgem,
840 void kgem_buffer_read_sync(struct kgem *kgem, struct kgem_bo *bo);
842 int kgem_is_wedged(struct kgem *kgem);
843 void kgem_throttle(struct kgem *kgem);
845 bool kgem_expire_cache(struct kgem *kgem);
846 bool kgem_cleanup_cache(struct kgem *kgem);
848 void kgem_clean_scanout_cache(struct kgem *kgem);
849 void kgem_clean_large_cache(struct kgem *kgem);
852 void __kgem_batch_debug(struct kgem *kgem, uint32_t nbatch);
854 static inline void __kgem_batch_debug(struct kgem *kgem, uint32_t nbatch)
856 (void)kgem;
862 memcpy_to_tiled_x(struct kgem *kgem,
869 assert(kgem->memcpy_to_tiled_x);
874 return kgem->memcpy_to_tiled_x(src, dst, bpp,
882 memcpy_from_tiled_x(struct kgem *kgem,
889 assert(kgem->memcpy_from_tiled_x);
894 return kgem->memcpy_from_tiled_x(src, dst, bpp,
901 void choose_memcpy_tiled_x(struct kgem *kgem, int swizzling, unsigned cpu);