OLD | NEW |
1 /* Copyright (c) 2008-2009, Code Aurora Forum. All rights reserved. | 1 /* Copyright (c) 2008-2009, Code Aurora Forum. All rights reserved. |
2 * | 2 * |
3 * This program is free software; you can redistribute it and/or modify | 3 * This program is free software; you can redistribute it and/or modify |
4 * it under the terms of the GNU General Public License version 2 and | 4 * it under the terms of the GNU General Public License version 2 and |
5 * only version 2 as published by the Free Software Foundation. | 5 * only version 2 as published by the Free Software Foundation. |
6 * | 6 * |
7 * This program is distributed in the hope that it will be useful, | 7 * This program is distributed in the hope that it will be useful, |
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
10 * GNU General Public License for more details. | 10 * GNU General Public License for more details. |
(...skipping 808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
819 | 819 |
820 error_free_entry: | 820 error_free_entry: |
821 kfree(entry); | 821 kfree(entry); |
822 | 822 |
823 error: | 823 error: |
824 return result; | 824 return result; |
825 } | 825 } |
826 #endif /*CONFIG_MSM_KGSL_MMU*/ | 826 #endif /*CONFIG_MSM_KGSL_MMU*/ |
827 | 827 |
828 static long kgsl_ioctl_sharedmem_from_pmem(struct kgsl_file_private *private, | 828 static long kgsl_ioctl_sharedmem_from_pmem(struct kgsl_file_private *private, |
829 » » » » » » void __user *arg) | 829 » » » » » » void __user *arg, |
| 830 » » » » » » size_t size) |
830 { | 831 { |
831 int result = 0; | 832 int result = 0; |
832 struct kgsl_sharedmem_from_pmem param; | 833 struct kgsl_sharedmem_from_pmem param; |
833 struct kgsl_mem_entry *entry = NULL; | 834 struct kgsl_mem_entry *entry = NULL; |
834 unsigned long start = 0, vstart = 0, len = 0; | 835 unsigned long start = 0, vstart = 0, len = 0; |
835 struct file *pmem_file = NULL; | 836 struct file *pmem_file = NULL; |
836 | 837 |
837 » if (copy_from_user(¶m, arg, sizeof(param))) { | 838 » if (!(size == sizeof(struct kgsl_sharedmem_from_pmem_old) || |
| 839 » size == sizeof(param))) { |
| 840 » » result = -EINVAL; |
| 841 » » goto error; |
| 842 » } |
| 843 |
| 844 » memset(¶m, 0, sizeof(param)); |
| 845 » if (copy_from_user(¶m, arg, size)) { |
838 result = -EFAULT; | 846 result = -EFAULT; |
839 goto error; | 847 goto error; |
840 } | 848 } |
841 | 849 |
842 if (get_pmem_file(param.pmem_fd, &start, &vstart, &len, &pmem_file)) { | 850 if (get_pmem_file(param.pmem_fd, &start, &vstart, &len, &pmem_file)) { |
843 result = -EINVAL; | 851 result = -EINVAL; |
844 goto error; | 852 goto error; |
845 } | 853 } |
846 | 854 |
847 if (!param.len) | 855 if (!param.len) |
(...skipping 26 matching lines...) Expand all Loading... |
874 KGSL_MEMFLAGS_ALIGN4K | KGSL_MEMFLAGS_CONPHYS); | 882 KGSL_MEMFLAGS_ALIGN4K | KGSL_MEMFLAGS_CONPHYS); |
875 if (result) | 883 if (result) |
876 goto error_free_entry; | 884 goto error_free_entry; |
877 | 885 |
878 /* If the offset is not at 4K boundary then add the correct offset | 886 /* If the offset is not at 4K boundary then add the correct offset |
879 * value to gpuaddr */ | 887 * value to gpuaddr */ |
880 entry->memdesc.gpuaddr += (param.offset & ~KGSL_PAGEMASK); | 888 entry->memdesc.gpuaddr += (param.offset & ~KGSL_PAGEMASK); |
881 | 889 |
882 param.gpuaddr = entry->memdesc.gpuaddr; | 890 param.gpuaddr = entry->memdesc.gpuaddr; |
883 | 891 |
884 » if (copy_to_user(arg, ¶m, sizeof(param))) { | 892 » if (copy_to_user(arg, ¶m, size)) { |
885 result = -EFAULT; | 893 result = -EFAULT; |
886 goto error_unmap_entry; | 894 goto error_unmap_entry; |
887 } | 895 } |
888 return result; | 896 return result; |
889 | 897 |
890 error_unmap_entry: | 898 error_unmap_entry: |
891 kgsl_mmu_unmap(entry->memdesc.pagetable, | 899 kgsl_mmu_unmap(entry->memdesc.pagetable, |
892 entry->memdesc.gpuaddr & KGSL_PAGEMASK, | 900 entry->memdesc.gpuaddr & KGSL_PAGEMASK, |
893 entry->memdesc.size); | 901 entry->memdesc.size); |
894 error_free_entry: | 902 error_free_entry: |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1008 case IOCTL_KGSL_SHAREDMEM_FLUSH_CACHE: | 1016 case IOCTL_KGSL_SHAREDMEM_FLUSH_CACHE: |
1009 if (kgsl_cache_enable) | 1017 if (kgsl_cache_enable) |
1010 result = | 1018 result = |
1011 kgsl_ioctl_sharedmem_flush_cache(private, | 1019 kgsl_ioctl_sharedmem_flush_cache(private, |
1012 (void __user *)arg); | 1020 (void __user *)arg); |
1013 break; | 1021 break; |
1014 #endif | 1022 #endif |
1015 case IOCTL_KGSL_SHAREDMEM_FROM_PMEM: | 1023 case IOCTL_KGSL_SHAREDMEM_FROM_PMEM: |
1016 kgsl_yamato_runpending(&kgsl_driver.yamato_device); | 1024 kgsl_yamato_runpending(&kgsl_driver.yamato_device); |
1017 result = kgsl_ioctl_sharedmem_from_pmem(private, | 1025 result = kgsl_ioctl_sharedmem_from_pmem(private, |
1018 » » » » » » » (void __user *)arg); | 1026 » » » » (void __user *)arg, |
| 1027 » » » » sizeof(struct kgsl_sharedmem_from_pmem)); |
| 1028 » » break; |
| 1029 |
| 1030 » case IOCTL_KGSL_SHAREDMEM_FROM_PMEM_OLD: |
| 1031 » » kgsl_yamato_runpending(&kgsl_driver.yamato_device); |
| 1032 » » result = kgsl_ioctl_sharedmem_from_pmem(private, |
| 1033 » » » » (void __user *)arg, |
| 1034 » » » » sizeof(struct kgsl_sharedmem_from_pmem_old)); |
1019 break; | 1035 break; |
1020 | 1036 |
1021 case IOCTL_KGSL_DRAWCTXT_SET_BIN_BASE_OFFSET: | 1037 case IOCTL_KGSL_DRAWCTXT_SET_BIN_BASE_OFFSET: |
1022 if (copy_from_user(&binbase, (void __user *)arg, | 1038 if (copy_from_user(&binbase, (void __user *)arg, |
1023 sizeof(binbase))) { | 1039 sizeof(binbase))) { |
1024 result = -EFAULT; | 1040 result = -EFAULT; |
1025 break; | 1041 break; |
1026 } | 1042 } |
1027 | 1043 |
1028 if (private->ctxt_id_mask & (1 << binbase.drawctxt_id)) { | 1044 if (private->ctxt_id_mask & (1 << binbase.drawctxt_id)) { |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1272 module_init(kgsl_mod_init); | 1288 module_init(kgsl_mod_init); |
1273 #else | 1289 #else |
1274 late_initcall(kgsl_mod_init); | 1290 late_initcall(kgsl_mod_init); |
1275 #endif | 1291 #endif |
1276 module_exit(kgsl_mod_exit); | 1292 module_exit(kgsl_mod_exit); |
1277 | 1293 |
1278 MODULE_DESCRIPTION("3D graphics driver for QSD8x50, MSM7x27, and MSM7x30"); | 1294 MODULE_DESCRIPTION("3D graphics driver for QSD8x50, MSM7x27, and MSM7x30"); |
1279 MODULE_VERSION("1.0"); | 1295 MODULE_VERSION("1.0"); |
1280 MODULE_LICENSE("GPL v2"); | 1296 MODULE_LICENSE("GPL v2"); |
1281 MODULE_ALIAS("platform:kgsl"); | 1297 MODULE_ALIAS("platform:kgsl"); |
OLD | NEW |