Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/gma500: Give MMU code it's own header file

Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>

+95 -88
+1 -44
drivers/gpu/drm/gma500/mmu.c
··· 18 18 #include <drm/drmP.h> 19 19 #include "psb_drv.h" 20 20 #include "psb_reg.h" 21 + #include "mmu.h" 21 22 22 23 /* 23 24 * Code for the SGX MMU: ··· 47 46 * If it fails, the caller need to insert the page using a workqueue function, 48 47 * but on average it should be fast. 49 48 */ 50 - 51 - struct psb_mmu_driver { 52 - /* protects driver- and pd structures. Always take in read mode 53 - * before taking the page table spinlock. 54 - */ 55 - struct rw_semaphore sem; 56 - 57 - /* protects page tables, directory tables and pt tables. 58 - * and pt structures. 59 - */ 60 - spinlock_t lock; 61 - 62 - atomic_t needs_tlbflush; 63 - atomic_t *msvdx_mmu_invaldc; 64 - struct psb_mmu_pd *default_pd; 65 - uint32_t bif_ctrl; 66 - int has_clflush; 67 - int clflush_add; 68 - unsigned long clflush_mask; 69 - 70 - struct drm_device *dev; 71 - }; 72 - 73 - struct psb_mmu_pd; 74 - 75 - struct psb_mmu_pt { 76 - struct psb_mmu_pd *pd; 77 - uint32_t index; 78 - uint32_t count; 79 - struct page *p; 80 - uint32_t *v; 81 - }; 82 - 83 - struct psb_mmu_pd { 84 - struct psb_mmu_driver *driver; 85 - int hw_context; 86 - struct psb_mmu_pt **tables; 87 - struct page *p; 88 - struct page *dummy_pt; 89 - struct page *dummy_page; 90 - uint32_t pd_mask; 91 - uint32_t invalid_pde; 92 - uint32_t invalid_pte; 93 - }; 94 49 95 50 static inline uint32_t psb_mmu_pt_index(uint32_t offset) 96 51 {
+93
drivers/gpu/drm/gma500/mmu.h
··· 1 + /************************************************************************** 2 + * Copyright (c) 2007-2011, Intel Corporation. 3 + * All Rights Reserved. 4 + * 5 + * This program is free software; you can redistribute it and/or modify it 6 + * under the terms and conditions of the GNU General Public License, 7 + * version 2, as published by the Free Software Foundation. 8 + * 9 + * This program is distributed in the hope it will be useful, but WITHOUT 10 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 + * more details. 13 + **************************************************************************/ 14 + 15 + #ifndef __MMU_H 16 + #define __MMU_H 17 + 18 + struct psb_mmu_driver { 19 + /* protects driver- and pd structures. Always take in read mode 20 + * before taking the page table spinlock. 21 + */ 22 + struct rw_semaphore sem; 23 + 24 + /* protects page tables, directory tables and pt tables. 25 + * and pt structures. 26 + */ 27 + spinlock_t lock; 28 + 29 + atomic_t needs_tlbflush; 30 + atomic_t *msvdx_mmu_invaldc; 31 + struct psb_mmu_pd *default_pd; 32 + uint32_t bif_ctrl; 33 + int has_clflush; 34 + int clflush_add; 35 + unsigned long clflush_mask; 36 + 37 + struct drm_device *dev; 38 + }; 39 + 40 + struct psb_mmu_pd; 41 + 42 + struct psb_mmu_pt { 43 + struct psb_mmu_pd *pd; 44 + uint32_t index; 45 + uint32_t count; 46 + struct page *p; 47 + uint32_t *v; 48 + }; 49 + 50 + struct psb_mmu_pd { 51 + struct psb_mmu_driver *driver; 52 + int hw_context; 53 + struct psb_mmu_pt **tables; 54 + struct page *p; 55 + struct page *dummy_pt; 56 + struct page *dummy_page; 57 + uint32_t pd_mask; 58 + uint32_t invalid_pde; 59 + uint32_t invalid_pte; 60 + }; 61 + 62 + extern struct psb_mmu_driver *psb_mmu_driver_init(struct drm_device *dev, 63 + int trap_pagefaults, 64 + int invalid_type, 65 + atomic_t *msvdx_mmu_invaldc); 66 + extern void psb_mmu_driver_takedown(struct psb_mmu_driver *driver); 67 + extern struct psb_mmu_pd *psb_mmu_get_default_pd(struct psb_mmu_driver 68 + *driver); 69 + extern struct psb_mmu_pd *psb_mmu_alloc_pd(struct psb_mmu_driver *driver, 70 + int trap_pagefaults, 71 + int invalid_type); 72 + extern void psb_mmu_free_pagedir(struct psb_mmu_pd *pd); 73 + extern void psb_mmu_flush(struct psb_mmu_driver *driver); 74 + extern void psb_mmu_remove_pfn_sequence(struct psb_mmu_pd *pd, 75 + unsigned long address, 76 + uint32_t num_pages); 77 + extern int psb_mmu_insert_pfn_sequence(struct psb_mmu_pd *pd, 78 + uint32_t start_pfn, 79 + unsigned long address, 80 + uint32_t num_pages, int type); 81 + extern int psb_mmu_virtual_to_pfn(struct psb_mmu_pd *pd, uint32_t virtual, 82 + unsigned long *pfn); 83 + extern void psb_mmu_set_pd_context(struct psb_mmu_pd *pd, int hw_context); 84 + extern int psb_mmu_insert_pages(struct psb_mmu_pd *pd, struct page **pages, 85 + unsigned long address, uint32_t num_pages, 86 + uint32_t desired_tile_stride, 87 + uint32_t hw_tile_stride, int type); 88 + extern void psb_mmu_remove_pages(struct psb_mmu_pd *pd, 89 + unsigned long address, uint32_t num_pages, 90 + uint32_t desired_tile_stride, 91 + uint32_t hw_tile_stride); 92 + 93 + #endif
+1 -44
drivers/gpu/drm/gma500/psb_drv.h
··· 33 33 #include "power.h" 34 34 #include "opregion.h" 35 35 #include "oaktrail.h" 36 + #include "mmu.h" 36 37 37 38 /* Append new drm mode definition here, align with libdrm definition */ 38 39 #define DRM_MODE_SCALE_NO_SCALE 2 ··· 714 713 715 714 716 715 717 - struct psb_mmu_driver; 718 - 719 716 extern int drm_crtc_probe_output_modes(struct drm_device *dev, int, int); 720 717 extern int drm_pick_crtcs(struct drm_device *dev); 721 718 ··· 722 723 return (struct drm_psb_private *) dev->dev_private; 723 724 } 724 725 725 - /* 726 - * MMU stuff. 727 - */ 728 - 729 - extern struct psb_mmu_driver *psb_mmu_driver_init(struct drm_device *dev, 730 - int trap_pagefaults, 731 - int invalid_type, 732 - atomic_t *msvdx_mmu_invaldc); 733 - extern void psb_mmu_driver_takedown(struct psb_mmu_driver *driver); 734 - extern struct psb_mmu_pd *psb_mmu_get_default_pd(struct psb_mmu_driver 735 - *driver); 736 - extern void psb_mmu_mirror_gtt(struct psb_mmu_pd *pd, uint32_t mmu_offset, 737 - uint32_t gtt_start, uint32_t gtt_pages); 738 - extern struct psb_mmu_pd *psb_mmu_alloc_pd(struct psb_mmu_driver *driver, 739 - int trap_pagefaults, 740 - int invalid_type); 741 - extern void psb_mmu_free_pagedir(struct psb_mmu_pd *pd); 742 - extern void psb_mmu_flush(struct psb_mmu_driver *driver); 743 - extern void psb_mmu_remove_pfn_sequence(struct psb_mmu_pd *pd, 744 - unsigned long address, 745 - uint32_t num_pages); 746 - extern int psb_mmu_insert_pfn_sequence(struct psb_mmu_pd *pd, 747 - uint32_t start_pfn, 748 - unsigned long address, 749 - uint32_t num_pages, int type); 750 - extern int psb_mmu_virtual_to_pfn(struct psb_mmu_pd *pd, uint32_t virtual, 751 - unsigned long *pfn); 752 - 753 - /* 754 - * Enable / disable MMU for different requestors. 755 - */ 756 - 757 - 758 - extern void psb_mmu_set_pd_context(struct psb_mmu_pd *pd, int hw_context); 759 - extern int psb_mmu_insert_pages(struct psb_mmu_pd *pd, struct page **pages, 760 - unsigned long address, uint32_t num_pages, 761 - uint32_t desired_tile_stride, 762 - uint32_t hw_tile_stride, int type); 763 - extern void psb_mmu_remove_pages(struct psb_mmu_pd *pd, 764 - unsigned long address, uint32_t num_pages, 765 - uint32_t desired_tile_stride, 766 - uint32_t hw_tile_stride); 767 726 /* 768 727 *psb_irq.c 769 728 */