1 /* SPDX-License-Identifier: MIT */ 2 /* 3 * Copyright © 2023 Intel Corporation 4 */ 5 6 #ifndef _XE_LMTT_TYPES_H_ 7 #define _XE_LMTT_TYPES_H_ 8 9 #include <linux/types.h> 10 11 struct xe_bo; 12 struct xe_lmtt; 13 struct xe_lmtt_pt; 14 struct xe_lmtt_ops; 15 16 #define LMTT_PTE_INVALID ULL(0) 17 18 /** 19 * struct xe_lmtt - Local Memory Translation Table Manager 20 */ 21 struct xe_lmtt { 22 /** @pd: root LMTT Directory */ 23 struct xe_lmtt_pt *pd; 24 25 /** @ops: LMTT functions */ 26 const struct xe_lmtt_ops *ops; 27 }; 28 29 /** 30 * struct xe_lmtt_pt - Local Memory Translation Table Page Table 31 * 32 * Represents single level of the LMTT. 33 */ 34 struct xe_lmtt_pt { 35 /** @level: page table level, 0 is leaf */ 36 unsigned int level; 37 38 /** @bo: buffer object with actual LMTT PTE values */ 39 struct xe_bo *bo; 40 41 /** @entries: leaf page tables, exist only for root/non-leaf */ 42 struct xe_lmtt_pt *entries[]; 43 }; 44 45 /** 46 * struct xe_lmtt_ops - Local Memory Translation Table Operations 47 * 48 * Provides abstraction of the LMTT variants. 49 */ 50 struct xe_lmtt_ops { 51 /* private: */ 52 unsigned int (*lmtt_root_pd_level)(void); 53 unsigned int (*lmtt_pte_num)(unsigned int level); 54 unsigned int (*lmtt_pte_size)(unsigned int level); 55 unsigned int (*lmtt_pte_shift)(unsigned int level); 56 unsigned int (*lmtt_pte_index)(u64 addr, unsigned int level); 57 u64 (*lmtt_pte_encode)(unsigned long offset, unsigned int level); 58 }; 59 60 extern const struct xe_lmtt_ops lmtt_2l_ops; 61 extern const struct xe_lmtt_ops lmtt_ml_ops; 62 63 #endif 64