diff options
Diffstat (limited to 'drivers/char/drm/drm_irq.c')
-rw-r--r-- | drivers/char/drm/drm_irq.c | 58 |
1 files changed, 28 insertions, 30 deletions
diff --git a/drivers/char/drm/drm_irq.c b/drivers/char/drm/drm_irq.c index 2e75331fd83e..871d2fde09b3 100644 --- a/drivers/char/drm/drm_irq.c +++ b/drivers/char/drm/drm_irq.c | |||
@@ -53,10 +53,10 @@ | |||
53 | int drm_irq_by_busid(struct inode *inode, struct file *filp, | 53 | int drm_irq_by_busid(struct inode *inode, struct file *filp, |
54 | unsigned int cmd, unsigned long arg) | 54 | unsigned int cmd, unsigned long arg) |
55 | { | 55 | { |
56 | drm_file_t *priv = filp->private_data; | 56 | struct drm_file *priv = filp->private_data; |
57 | drm_device_t *dev = priv->head->dev; | 57 | struct drm_device *dev = priv->head->dev; |
58 | drm_irq_busid_t __user *argp = (void __user *)arg; | 58 | struct drm_irq_busid __user *argp = (void __user *)arg; |
59 | drm_irq_busid_t p; | 59 | struct drm_irq_busid p; |
60 | 60 | ||
61 | if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ)) | 61 | if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ)) |
62 | return -EINVAL; | 62 | return -EINVAL; |
@@ -87,7 +87,7 @@ int drm_irq_by_busid(struct inode *inode, struct file *filp, | |||
87 | * \c drm_driver_irq_preinstall() and \c drm_driver_irq_postinstall() functions | 87 | * \c drm_driver_irq_preinstall() and \c drm_driver_irq_postinstall() functions |
88 | * before and after the installation. | 88 | * before and after the installation. |
89 | */ | 89 | */ |
90 | static int drm_irq_install(drm_device_t * dev) | 90 | static int drm_irq_install(struct drm_device * dev) |
91 | { | 91 | { |
92 | int ret; | 92 | int ret; |
93 | unsigned long sh_flags = 0; | 93 | unsigned long sh_flags = 0; |
@@ -120,8 +120,8 @@ static int drm_irq_install(drm_device_t * dev) | |||
120 | 120 | ||
121 | spin_lock_init(&dev->vbl_lock); | 121 | spin_lock_init(&dev->vbl_lock); |
122 | 122 | ||
123 | INIT_LIST_HEAD(&dev->vbl_sigs.head); | 123 | INIT_LIST_HEAD(&dev->vbl_sigs); |
124 | INIT_LIST_HEAD(&dev->vbl_sigs2.head); | 124 | INIT_LIST_HEAD(&dev->vbl_sigs2); |
125 | 125 | ||
126 | dev->vbl_pending = 0; | 126 | dev->vbl_pending = 0; |
127 | } | 127 | } |
@@ -155,7 +155,7 @@ static int drm_irq_install(drm_device_t * dev) | |||
155 | * | 155 | * |
156 | * Calls the driver's \c drm_driver_irq_uninstall() function, and stops the irq. | 156 | * Calls the driver's \c drm_driver_irq_uninstall() function, and stops the irq. |
157 | */ | 157 | */ |
158 | int drm_irq_uninstall(drm_device_t * dev) | 158 | int drm_irq_uninstall(struct drm_device * dev) |
159 | { | 159 | { |
160 | int irq_enabled; | 160 | int irq_enabled; |
161 | 161 | ||
@@ -197,13 +197,13 @@ EXPORT_SYMBOL(drm_irq_uninstall); | |||
197 | int drm_control(struct inode *inode, struct file *filp, | 197 | int drm_control(struct inode *inode, struct file *filp, |
198 | unsigned int cmd, unsigned long arg) | 198 | unsigned int cmd, unsigned long arg) |
199 | { | 199 | { |
200 | drm_file_t *priv = filp->private_data; | 200 | struct drm_file *priv = filp->private_data; |
201 | drm_device_t *dev = priv->head->dev; | 201 | struct drm_device *dev = priv->head->dev; |
202 | drm_control_t ctl; | 202 | struct drm_control ctl; |
203 | 203 | ||
204 | /* if we haven't irq we fallback for compatibility reasons - this used to be a separate function in drm_dma.h */ | 204 | /* if we haven't irq we fallback for compatibility reasons - this used to be a separate function in drm_dma.h */ |
205 | 205 | ||
206 | if (copy_from_user(&ctl, (drm_control_t __user *) arg, sizeof(ctl))) | 206 | if (copy_from_user(&ctl, (struct drm_control __user *) arg, sizeof(ctl))) |
207 | return -EFAULT; | 207 | return -EFAULT; |
208 | 208 | ||
209 | switch (ctl.func) { | 209 | switch (ctl.func) { |
@@ -244,10 +244,10 @@ int drm_control(struct inode *inode, struct file *filp, | |||
244 | */ | 244 | */ |
245 | int drm_wait_vblank(DRM_IOCTL_ARGS) | 245 | int drm_wait_vblank(DRM_IOCTL_ARGS) |
246 | { | 246 | { |
247 | drm_file_t *priv = filp->private_data; | 247 | struct drm_file *priv = filp->private_data; |
248 | drm_device_t *dev = priv->head->dev; | 248 | struct drm_device *dev = priv->head->dev; |
249 | drm_wait_vblank_t __user *argp = (void __user *)data; | 249 | union drm_wait_vblank __user *argp = (void __user *)data; |
250 | drm_wait_vblank_t vblwait; | 250 | union drm_wait_vblank vblwait; |
251 | struct timeval now; | 251 | struct timeval now; |
252 | int ret = 0; | 252 | int ret = 0; |
253 | unsigned int flags, seq; | 253 | unsigned int flags, seq; |
@@ -292,9 +292,9 @@ int drm_wait_vblank(DRM_IOCTL_ARGS) | |||
292 | 292 | ||
293 | if (flags & _DRM_VBLANK_SIGNAL) { | 293 | if (flags & _DRM_VBLANK_SIGNAL) { |
294 | unsigned long irqflags; | 294 | unsigned long irqflags; |
295 | drm_vbl_sig_t *vbl_sigs = (flags & _DRM_VBLANK_SECONDARY) | 295 | struct list_head *vbl_sigs = (flags & _DRM_VBLANK_SECONDARY) |
296 | ? &dev->vbl_sigs2 : &dev->vbl_sigs; | 296 | ? &dev->vbl_sigs2 : &dev->vbl_sigs; |
297 | drm_vbl_sig_t *vbl_sig; | 297 | struct drm_vbl_sig *vbl_sig; |
298 | 298 | ||
299 | spin_lock_irqsave(&dev->vbl_lock, irqflags); | 299 | spin_lock_irqsave(&dev->vbl_lock, irqflags); |
300 | 300 | ||
@@ -302,7 +302,7 @@ int drm_wait_vblank(DRM_IOCTL_ARGS) | |||
302 | * for the same vblank sequence number; nothing to be done in | 302 | * for the same vblank sequence number; nothing to be done in |
303 | * that case | 303 | * that case |
304 | */ | 304 | */ |
305 | list_for_each_entry(vbl_sig, &vbl_sigs->head, head) { | 305 | list_for_each_entry(vbl_sig, vbl_sigs, head) { |
306 | if (vbl_sig->sequence == vblwait.request.sequence | 306 | if (vbl_sig->sequence == vblwait.request.sequence |
307 | && vbl_sig->info.si_signo == vblwait.request.signal | 307 | && vbl_sig->info.si_signo == vblwait.request.signal |
308 | && vbl_sig->task == current) { | 308 | && vbl_sig->task == current) { |
@@ -324,7 +324,7 @@ int drm_wait_vblank(DRM_IOCTL_ARGS) | |||
324 | 324 | ||
325 | if (! | 325 | if (! |
326 | (vbl_sig = | 326 | (vbl_sig = |
327 | drm_alloc(sizeof(drm_vbl_sig_t), DRM_MEM_DRIVER))) { | 327 | drm_alloc(sizeof(struct drm_vbl_sig), DRM_MEM_DRIVER))) { |
328 | return -ENOMEM; | 328 | return -ENOMEM; |
329 | } | 329 | } |
330 | 330 | ||
@@ -336,7 +336,7 @@ int drm_wait_vblank(DRM_IOCTL_ARGS) | |||
336 | 336 | ||
337 | spin_lock_irqsave(&dev->vbl_lock, irqflags); | 337 | spin_lock_irqsave(&dev->vbl_lock, irqflags); |
338 | 338 | ||
339 | list_add_tail((struct list_head *)vbl_sig, &vbl_sigs->head); | 339 | list_add_tail(&vbl_sig->head, vbl_sigs); |
340 | 340 | ||
341 | spin_unlock_irqrestore(&dev->vbl_lock, irqflags); | 341 | spin_unlock_irqrestore(&dev->vbl_lock, irqflags); |
342 | 342 | ||
@@ -371,7 +371,7 @@ int drm_wait_vblank(DRM_IOCTL_ARGS) | |||
371 | * | 371 | * |
372 | * If a signal is not requested, then calls vblank_wait(). | 372 | * If a signal is not requested, then calls vblank_wait(). |
373 | */ | 373 | */ |
374 | void drm_vbl_send_signals(drm_device_t * dev) | 374 | void drm_vbl_send_signals(struct drm_device * dev) |
375 | { | 375 | { |
376 | unsigned long flags; | 376 | unsigned long flags; |
377 | int i; | 377 | int i; |
@@ -379,20 +379,18 @@ void drm_vbl_send_signals(drm_device_t * dev) | |||
379 | spin_lock_irqsave(&dev->vbl_lock, flags); | 379 | spin_lock_irqsave(&dev->vbl_lock, flags); |
380 | 380 | ||
381 | for (i = 0; i < 2; i++) { | 381 | for (i = 0; i < 2; i++) { |
382 | struct list_head *list, *tmp; | 382 | struct drm_vbl_sig *vbl_sig, *tmp; |
383 | drm_vbl_sig_t *vbl_sig; | 383 | struct list_head *vbl_sigs = i ? &dev->vbl_sigs2 : &dev->vbl_sigs; |
384 | drm_vbl_sig_t *vbl_sigs = i ? &dev->vbl_sigs2 : &dev->vbl_sigs; | ||
385 | unsigned int vbl_seq = atomic_read(i ? &dev->vbl_received2 : | 384 | unsigned int vbl_seq = atomic_read(i ? &dev->vbl_received2 : |
386 | &dev->vbl_received); | 385 | &dev->vbl_received); |
387 | 386 | ||
388 | list_for_each_safe(list, tmp, &vbl_sigs->head) { | 387 | list_for_each_entry_safe(vbl_sig, tmp, vbl_sigs, head) { |
389 | vbl_sig = list_entry(list, drm_vbl_sig_t, head); | ||
390 | if ((vbl_seq - vbl_sig->sequence) <= (1 << 23)) { | 388 | if ((vbl_seq - vbl_sig->sequence) <= (1 << 23)) { |
391 | vbl_sig->info.si_code = vbl_seq; | 389 | vbl_sig->info.si_code = vbl_seq; |
392 | send_sig_info(vbl_sig->info.si_signo, | 390 | send_sig_info(vbl_sig->info.si_signo, |
393 | &vbl_sig->info, vbl_sig->task); | 391 | &vbl_sig->info, vbl_sig->task); |
394 | 392 | ||
395 | list_del(list); | 393 | list_del(&vbl_sig->head); |
396 | 394 | ||
397 | drm_free(vbl_sig, sizeof(*vbl_sig), | 395 | drm_free(vbl_sig, sizeof(*vbl_sig), |
398 | DRM_MEM_DRIVER); | 396 | DRM_MEM_DRIVER); |
@@ -418,7 +416,7 @@ EXPORT_SYMBOL(drm_vbl_send_signals); | |||
418 | */ | 416 | */ |
419 | static void drm_locked_tasklet_func(unsigned long data) | 417 | static void drm_locked_tasklet_func(unsigned long data) |
420 | { | 418 | { |
421 | drm_device_t *dev = (drm_device_t*)data; | 419 | struct drm_device *dev = (struct drm_device *)data; |
422 | unsigned long irqflags; | 420 | unsigned long irqflags; |
423 | 421 | ||
424 | spin_lock_irqsave(&dev->tasklet_lock, irqflags); | 422 | spin_lock_irqsave(&dev->tasklet_lock, irqflags); |
@@ -455,7 +453,7 @@ static void drm_locked_tasklet_func(unsigned long data) | |||
455 | * context, it must not make any assumptions about this. Also, the HW lock will | 453 | * context, it must not make any assumptions about this. Also, the HW lock will |
456 | * be held with the kernel context or any client context. | 454 | * be held with the kernel context or any client context. |
457 | */ | 455 | */ |
458 | void drm_locked_tasklet(drm_device_t *dev, void (*func)(drm_device_t*)) | 456 | void drm_locked_tasklet(struct drm_device *dev, void (*func)(struct drm_device *)) |
459 | { | 457 | { |
460 | unsigned long irqflags; | 458 | unsigned long irqflags; |
461 | static DECLARE_TASKLET(drm_tasklet, drm_locked_tasklet_func, 0); | 459 | static DECLARE_TASKLET(drm_tasklet, drm_locked_tasklet_func, 0); |