/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (C) 2020-2023 Intel Corporation */ #ifndef __IVPU_MMU_H__ #define __IVPU_MMU_H__ struct ivpu_device; struct ivpu_mmu_cdtab { void *base; dma_addr_t dma; }; struct ivpu_mmu_strtab { void *base; dma_addr_t dma; u64 dma_q; u32 base_cfg; }; struct ivpu_mmu_queue { void *base; dma_addr_t dma; u64 dma_q; u32 prod; u32 cons; }; struct ivpu_mmu_info { struct mutex lock; /* Protects cdtab, strtab, cmdq, on */ struct ivpu_mmu_cdtab cdtab; struct ivpu_mmu_strtab strtab; struct ivpu_mmu_queue cmdq; struct ivpu_mmu_queue evtq; bool on; }; int ivpu_mmu_init(struct ivpu_device *vdev); void ivpu_mmu_disable(struct ivpu_device *vdev); int ivpu_mmu_enable(struct ivpu_device *vdev); int ivpu_mmu_set_pgtable(struct ivpu_device *vdev, int ssid, struct ivpu_mmu_pgtable *pgtable); void ivpu_mmu_clear_pgtable(struct ivpu_device *vdev, int ssid); int ivpu_mmu_invalidate_tlb(struct ivpu_device *vdev, u16 ssid); void ivpu_mmu_irq_evtq_handler(struct ivpu_device *vdev); void ivpu_mmu_irq_gerr_handler(struct ivpu_device *vdev); void ivpu_mmu_evtq_dump(struct ivpu_device *vdev); #endif /* __IVPU_MMU_H__ */