aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/drm/drm_irq.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/char/drm/drm_irq.c')
-rw-r--r--drivers/char/drm/drm_irq.c58
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 @@
53int drm_irq_by_busid(struct inode *inode, struct file *filp, 53int 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 */
90static int drm_irq_install(drm_device_t * dev) 90static 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 */
158int drm_irq_uninstall(drm_device_t * dev) 158int 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);
197int drm_control(struct inode *inode, struct file *filp, 197int 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 */
245int drm_wait_vblank(DRM_IOCTL_ARGS) 245int 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 */
374void drm_vbl_send_signals(drm_device_t * dev) 374void 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 */
419static void drm_locked_tasklet_func(unsigned long data) 417static 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 */
458void drm_locked_tasklet(drm_device_t *dev, void (*func)(drm_device_t*)) 456void 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);