aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/drm/mga_ioc32.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/char/drm/mga_ioc32.c')
-rw-r--r--drivers/char/drm/mga_ioc32.c60
1 files changed, 29 insertions, 31 deletions
diff --git a/drivers/char/drm/mga_ioc32.c b/drivers/char/drm/mga_ioc32.c
index 77d738e75a4d..24a9d4e86af0 100644
--- a/drivers/char/drm/mga_ioc32.c
+++ b/drivers/char/drm/mga_ioc32.c
@@ -39,17 +39,17 @@
39 39
40typedef struct drm32_mga_init { 40typedef struct drm32_mga_init {
41 int func; 41 int func;
42 u32 sarea_priv_offset; 42 u32 sarea_priv_offset;
43 int chipset; 43 int chipset;
44 int sgram; 44 int sgram;
45 unsigned int maccess; 45 unsigned int maccess;
46 unsigned int fb_cpp; 46 unsigned int fb_cpp;
47 unsigned int front_offset, front_pitch; 47 unsigned int front_offset, front_pitch;
48 unsigned int back_offset, back_pitch; 48 unsigned int back_offset, back_pitch;
49 unsigned int depth_cpp; 49 unsigned int depth_cpp;
50 unsigned int depth_offset, depth_pitch; 50 unsigned int depth_offset, depth_pitch;
51 unsigned int texture_offset[MGA_NR_TEX_HEAPS]; 51 unsigned int texture_offset[MGA_NR_TEX_HEAPS];
52 unsigned int texture_size[MGA_NR_TEX_HEAPS]; 52 unsigned int texture_size[MGA_NR_TEX_HEAPS];
53 u32 fb_offset; 53 u32 fb_offset;
54 u32 mmio_offset; 54 u32 mmio_offset;
55 u32 status_offset; 55 u32 status_offset;
@@ -64,10 +64,10 @@ static int compat_mga_init(struct file *file, unsigned int cmd,
64 drm_mga_init32_t init32; 64 drm_mga_init32_t init32;
65 drm_mga_init_t __user *init; 65 drm_mga_init_t __user *init;
66 int err = 0, i; 66 int err = 0, i;
67 67
68 if (copy_from_user(&init32, (void __user *)arg, sizeof(init32))) 68 if (copy_from_user(&init32, (void __user *)arg, sizeof(init32)))
69 return -EFAULT; 69 return -EFAULT;
70 70
71 init = compat_alloc_user_space(sizeof(*init)); 71 init = compat_alloc_user_space(sizeof(*init));
72 if (!access_ok(VERIFY_WRITE, init, sizeof(*init)) 72 if (!access_ok(VERIFY_WRITE, init, sizeof(*init))
73 || __put_user(init32.func, &init->func) 73 || __put_user(init32.func, &init->func)
@@ -90,42 +90,43 @@ static int compat_mga_init(struct file *file, unsigned int cmd,
90 || __put_user(init32.primary_offset, &init->primary_offset) 90 || __put_user(init32.primary_offset, &init->primary_offset)
91 || __put_user(init32.buffers_offset, &init->buffers_offset)) 91 || __put_user(init32.buffers_offset, &init->buffers_offset))
92 return -EFAULT; 92 return -EFAULT;
93 93
94 for (i=0; i<MGA_NR_TEX_HEAPS; i++) 94 for (i = 0; i < MGA_NR_TEX_HEAPS; i++) {
95 { 95 err |=
96 err |= __put_user(init32.texture_offset[i], &init->texture_offset[i]); 96 __put_user(init32.texture_offset[i],
97 err |= __put_user(init32.texture_size[i], &init->texture_size[i]); 97 &init->texture_offset[i]);
98 err |=
99 __put_user(init32.texture_size[i], &init->texture_size[i]);
98 } 100 }
99 if (err) 101 if (err)
100 return -EFAULT; 102 return -EFAULT;
101 103
102 return drm_ioctl(file->f_dentry->d_inode, file, 104 return drm_ioctl(file->f_dentry->d_inode, file,
103 DRM_IOCTL_MGA_INIT, (unsigned long) init); 105 DRM_IOCTL_MGA_INIT, (unsigned long)init);
104} 106}
105 107
106
107typedef struct drm_mga_getparam32 { 108typedef struct drm_mga_getparam32 {
108 int param; 109 int param;
109 u32 value; 110 u32 value;
110} drm_mga_getparam32_t; 111} drm_mga_getparam32_t;
111 112
112
113static int compat_mga_getparam(struct file *file, unsigned int cmd, 113static int compat_mga_getparam(struct file *file, unsigned int cmd,
114 unsigned long arg) 114 unsigned long arg)
115{ 115{
116 drm_mga_getparam32_t getparam32; 116 drm_mga_getparam32_t getparam32;
117 drm_mga_getparam_t __user *getparam; 117 drm_mga_getparam_t __user *getparam;
118 118
119 if (copy_from_user(&getparam32, (void __user *)arg, sizeof(getparam32))) 119 if (copy_from_user(&getparam32, (void __user *)arg, sizeof(getparam32)))
120 return -EFAULT; 120 return -EFAULT;
121 121
122 getparam = compat_alloc_user_space(sizeof(*getparam)); 122 getparam = compat_alloc_user_space(sizeof(*getparam));
123 if (!access_ok(VERIFY_WRITE, getparam, sizeof(*getparam)) 123 if (!access_ok(VERIFY_WRITE, getparam, sizeof(*getparam))
124 || __put_user(getparam32.param, &getparam->param) 124 || __put_user(getparam32.param, &getparam->param)
125 || __put_user((void __user *)(unsigned long)getparam32.value, &getparam->value)) 125 || __put_user((void __user *)(unsigned long)getparam32.value,
126 &getparam->value))
126 return -EFAULT; 127 return -EFAULT;
127 128
128 return drm_ioctl(file->f_dentry->d_inode, file, 129 return drm_ioctl(file->f_dentry->d_inode, file,
129 DRM_IOCTL_MGA_GETPARAM, (unsigned long)getparam); 130 DRM_IOCTL_MGA_GETPARAM, (unsigned long)getparam);
130} 131}
131 132
@@ -182,14 +183,12 @@ static int compat_mga_dma_bootstrap(struct file *file, unsigned int cmd,
182 &dma_bootstrap->secondary_bin_count) 183 &dma_bootstrap->secondary_bin_count)
183 || __get_user(dma_bootstrap32.secondary_bin_size, 184 || __get_user(dma_bootstrap32.secondary_bin_size,
184 &dma_bootstrap->secondary_bin_size) 185 &dma_bootstrap->secondary_bin_size)
185 || __get_user(dma_bootstrap32.agp_mode, 186 || __get_user(dma_bootstrap32.agp_mode, &dma_bootstrap->agp_mode)
186 &dma_bootstrap->agp_mode) 187 || __get_user(dma_bootstrap32.agp_size, &dma_bootstrap->agp_size))
187 || __get_user(dma_bootstrap32.agp_size,
188 &dma_bootstrap->agp_size))
189 return -EFAULT; 188 return -EFAULT;
190 189
191 if (copy_to_user((void __user *)arg, &dma_bootstrap32, 190 if (copy_to_user((void __user *)arg, &dma_bootstrap32,
192 sizeof(dma_bootstrap32))) 191 sizeof(dma_bootstrap32)))
193 return -EFAULT; 192 return -EFAULT;
194 193
195 return 0; 194 return 0;
@@ -210,8 +209,7 @@ drm_ioctl_compat_t *mga_compat_ioctls[] = {
210 * \param arg user argument. 209 * \param arg user argument.
211 * \return zero on success or negative number on failure. 210 * \return zero on success or negative number on failure.
212 */ 211 */
213long mga_compat_ioctl(struct file *filp, unsigned int cmd, 212long mga_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
214 unsigned long arg)
215{ 213{
216 unsigned int nr = DRM_IOCTL_NR(cmd); 214 unsigned int nr = DRM_IOCTL_NR(cmd);
217 drm_ioctl_compat_t *fn = NULL; 215 drm_ioctl_compat_t *fn = NULL;
@@ -219,13 +217,13 @@ long mga_compat_ioctl(struct file *filp, unsigned int cmd,
219 217
220 if (nr < DRM_COMMAND_BASE) 218 if (nr < DRM_COMMAND_BASE)
221 return drm_compat_ioctl(filp, cmd, arg); 219 return drm_compat_ioctl(filp, cmd, arg);
222 220
223 if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(mga_compat_ioctls)) 221 if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(mga_compat_ioctls))
224 fn = mga_compat_ioctls[nr - DRM_COMMAND_BASE]; 222 fn = mga_compat_ioctls[nr - DRM_COMMAND_BASE];
225 223
226 lock_kernel(); /* XXX for now */ 224 lock_kernel(); /* XXX for now */
227 if (fn != NULL) 225 if (fn != NULL)
228 ret = (*fn)(filp, cmd, arg); 226 ret = (*fn) (filp, cmd, arg);
229 else 227 else
230 ret = drm_ioctl(filp->f_dentry->d_inode, filp, cmd, arg); 228 ret = drm_ioctl(filp->f_dentry->d_inode, filp, cmd, arg);
231 unlock_kernel(); 229 unlock_kernel();