brintos

brintos / linux-shallow public Read only

0
0
Text · 2.5 KiB · d4b5720 Raw
87 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/**************************************************************************3 * Copyright (c) 2007-2011, Intel Corporation.4 * All Rights Reserved.5 *6 **************************************************************************/7 8#ifndef __MMU_H9#define __MMU_H10 11struct psb_mmu_driver {12	/* protects driver- and pd structures. Always take in read mode13	 * before taking the page table spinlock.14	 */15	struct rw_semaphore sem;16 17	/* protects page tables, directory tables and pt tables.18	 * and pt structures.19	 */20	spinlock_t lock;21 22	atomic_t needs_tlbflush;23	atomic_t *msvdx_mmu_invaldc;24	struct psb_mmu_pd *default_pd;25	uint32_t bif_ctrl;26	int has_clflush;27	int clflush_add;28	unsigned long clflush_mask;29 30	struct drm_device *dev;31};32 33struct psb_mmu_pd;34 35struct psb_mmu_pt {36	struct psb_mmu_pd *pd;37	uint32_t index;38	uint32_t count;39	struct page *p;40	uint32_t *v;41};42 43struct psb_mmu_pd {44	struct psb_mmu_driver *driver;45	int hw_context;46	struct psb_mmu_pt **tables;47	struct page *p;48	struct page *dummy_pt;49	struct page *dummy_page;50	uint32_t pd_mask;51	uint32_t invalid_pde;52	uint32_t invalid_pte;53};54 55extern struct psb_mmu_driver *psb_mmu_driver_init(struct drm_device *dev,56						  int trap_pagefaults,57						  int invalid_type,58						  atomic_t *msvdx_mmu_invaldc);59extern void psb_mmu_driver_takedown(struct psb_mmu_driver *driver);60extern struct psb_mmu_pd *psb_mmu_get_default_pd(struct psb_mmu_driver61						 *driver);62extern struct psb_mmu_pd *psb_mmu_alloc_pd(struct psb_mmu_driver *driver,63					   int trap_pagefaults,64					   int invalid_type);65extern void psb_mmu_free_pagedir(struct psb_mmu_pd *pd);66extern void psb_mmu_flush(struct psb_mmu_driver *driver);67extern void psb_mmu_remove_pfn_sequence(struct psb_mmu_pd *pd,68					unsigned long address,69					uint32_t num_pages);70extern int psb_mmu_insert_pfn_sequence(struct psb_mmu_pd *pd,71				       uint32_t start_pfn,72				       unsigned long address,73				       uint32_t num_pages, int type);74extern int psb_mmu_virtual_to_pfn(struct psb_mmu_pd *pd, uint32_t virtual,75				  unsigned long *pfn);76extern void psb_mmu_set_pd_context(struct psb_mmu_pd *pd, int hw_context);77extern int psb_mmu_insert_pages(struct psb_mmu_pd *pd, struct page **pages,78				unsigned long address, uint32_t num_pages,79				uint32_t desired_tile_stride,80				uint32_t hw_tile_stride, int type);81extern void psb_mmu_remove_pages(struct psb_mmu_pd *pd,82				 unsigned long address, uint32_t num_pages,83				 uint32_t desired_tile_stride,84				 uint32_t hw_tile_stride);85 86#endif87