ivpu_mmu.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (C) 2020-2023 Intel Corporation
  4. */
  5. #ifndef __IVPU_MMU_H__
  6. #define __IVPU_MMU_H__
  7. struct ivpu_device;
  8. struct ivpu_mmu_cdtab {
  9. void *base;
  10. dma_addr_t dma;
  11. };
  12. struct ivpu_mmu_strtab {
  13. void *base;
  14. dma_addr_t dma;
  15. u64 dma_q;
  16. u32 base_cfg;
  17. };
  18. struct ivpu_mmu_queue {
  19. void *base;
  20. dma_addr_t dma;
  21. u64 dma_q;
  22. u32 prod;
  23. u32 cons;
  24. };
  25. struct ivpu_mmu_info {
  26. struct mutex lock; /* Protects cdtab, strtab, cmdq, on */
  27. struct ivpu_mmu_cdtab cdtab;
  28. struct ivpu_mmu_strtab strtab;
  29. struct ivpu_mmu_queue cmdq;
  30. struct ivpu_mmu_queue evtq;
  31. bool on;
  32. };
  33. int ivpu_mmu_init(struct ivpu_device *vdev);
  34. void ivpu_mmu_disable(struct ivpu_device *vdev);
  35. int ivpu_mmu_enable(struct ivpu_device *vdev);
  36. int ivpu_mmu_cd_set(struct ivpu_device *vdev, int ssid, struct ivpu_mmu_pgtable *pgtable);
  37. void ivpu_mmu_cd_clear(struct ivpu_device *vdev, int ssid);
  38. int ivpu_mmu_invalidate_tlb(struct ivpu_device *vdev, u16 ssid);
  39. void ivpu_mmu_irq_evtq_handler(struct ivpu_device *vdev);
  40. void ivpu_mmu_irq_gerr_handler(struct ivpu_device *vdev);
  41. void ivpu_mmu_evtq_dump(struct ivpu_device *vdev);
  42. void ivpu_mmu_discard_events(struct ivpu_device *vdev);
  43. int ivpu_mmu_disable_ssid_events(struct ivpu_device *vdev, u32 ssid);
  44. #endif /* __IVPU_MMU_H__ */