Lines Matching refs:dev
80 drm_get_last_vbltimestamp(struct drm_device *dev, unsigned int pipe,
92 static void store_vblank(struct drm_device *dev, unsigned int pipe, in store_vblank() argument
96 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in store_vblank()
98 assert_spin_locked(&dev->vblank_time_lock); in store_vblank()
112 static u32 drm_vblank_no_hw_counter(struct drm_device *dev, unsigned int pipe) in drm_vblank_no_hw_counter() argument
114 WARN_ON_ONCE(dev->max_vblank_count != 0); in drm_vblank_no_hw_counter()
118 static u32 __get_vblank_counter(struct drm_device *dev, unsigned int pipe) in __get_vblank_counter() argument
120 if (drm_core_check_feature(dev, DRIVER_MODESET)) { in __get_vblank_counter()
121 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe); in __get_vblank_counter()
127 if (dev->driver->get_vblank_counter) in __get_vblank_counter()
128 return dev->driver->get_vblank_counter(dev, pipe); in __get_vblank_counter()
130 return drm_vblank_no_hw_counter(dev, pipe); in __get_vblank_counter()
142 static void drm_reset_vblank_timestamp(struct drm_device *dev, unsigned int pipe) in drm_reset_vblank_timestamp() argument
149 lockmgr(&dev->vblank_time_lock, LK_EXCLUSIVE); in drm_reset_vblank_timestamp()
156 cur_vblank = __get_vblank_counter(dev, pipe); in drm_reset_vblank_timestamp()
157 rc = drm_get_last_vbltimestamp(dev, pipe, &t_vblank, false); in drm_reset_vblank_timestamp()
158 } while (cur_vblank != __get_vblank_counter(dev, pipe) && --count > 0); in drm_reset_vblank_timestamp()
172 store_vblank(dev, pipe, 1, t_vblank, cur_vblank); in drm_reset_vblank_timestamp()
174 lockmgr(&dev->vblank_time_lock, LK_RELEASE); in drm_reset_vblank_timestamp()
189 static void drm_update_vblank_count(struct drm_device *dev, unsigned int pipe, in drm_update_vblank_count() argument
192 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_update_vblank_count()
212 cur_vblank = __get_vblank_counter(dev, pipe); in drm_update_vblank_count()
213 rc = drm_get_last_vbltimestamp(dev, pipe, &t_vblank, in_vblank_irq); in drm_update_vblank_count()
214 } while (cur_vblank != __get_vblank_counter(dev, pipe) && --count > 0); in drm_update_vblank_count()
216 if (dev->max_vblank_count != 0) { in drm_update_vblank_count()
218 diff = (cur_vblank - vblank->last) & dev->max_vblank_count; in drm_update_vblank_count()
271 store_vblank(dev, pipe, diff, t_vblank, cur_vblank); in drm_update_vblank_count()
274 static u32 drm_vblank_count(struct drm_device *dev, unsigned int pipe) in drm_vblank_count() argument
276 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_vblank_count()
278 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_vblank_count()
297 struct drm_device *dev = crtc->dev; in drm_crtc_accurate_vblank_count() local
302 WARN_ONCE(drm_debug & DRM_UT_VBL && !dev->driver->get_vblank_timestamp, in drm_crtc_accurate_vblank_count()
305 spin_lock_irqsave(&dev->vblank_time_lock, flags); in drm_crtc_accurate_vblank_count()
307 drm_update_vblank_count(dev, pipe, false); in drm_crtc_accurate_vblank_count()
308 vblank = drm_vblank_count(dev, pipe); in drm_crtc_accurate_vblank_count()
310 spin_unlock_irqrestore(&dev->vblank_time_lock, flags); in drm_crtc_accurate_vblank_count()
316 static void __disable_vblank(struct drm_device *dev, unsigned int pipe) in __disable_vblank() argument
318 if (drm_core_check_feature(dev, DRIVER_MODESET)) { in __disable_vblank()
319 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe); in __disable_vblank()
327 dev->driver->disable_vblank(dev, pipe); in __disable_vblank()
336 void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe) in drm_vblank_disable_and_save() argument
338 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_vblank_disable_and_save()
341 assert_spin_locked(&dev->vbl_lock); in drm_vblank_disable_and_save()
347 spin_lock_irqsave(&dev->vblank_time_lock, irqflags); in drm_vblank_disable_and_save()
355 __disable_vblank(dev, pipe); in drm_vblank_disable_and_save()
365 drm_update_vblank_count(dev, pipe, false); in drm_vblank_disable_and_save()
367 spin_unlock_irqrestore(&dev->vblank_time_lock, irqflags); in drm_vblank_disable_and_save()
373 struct drm_device *dev = vblank->dev; in vblank_disable_fn() local
377 spin_lock_irqsave(&dev->vbl_lock, irqflags); in vblank_disable_fn()
380 drm_vblank_disable_and_save(dev, pipe); in vblank_disable_fn()
382 spin_unlock_irqrestore(&dev->vbl_lock, irqflags); in vblank_disable_fn()
385 void drm_vblank_cleanup(struct drm_device *dev) in drm_vblank_cleanup() argument
390 if (dev->num_crtcs == 0) in drm_vblank_cleanup()
393 for (pipe = 0; pipe < dev->num_crtcs; pipe++) { in drm_vblank_cleanup()
394 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_vblank_cleanup()
397 drm_core_check_feature(dev, DRIVER_MODESET)); in drm_vblank_cleanup()
402 kfree(dev->vblank); in drm_vblank_cleanup()
404 dev->num_crtcs = 0; in drm_vblank_cleanup()
419 int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs) in drm_vblank_init() argument
424 lockinit(&dev->vbl_lock, "drmvbl", 0, 0); in drm_vblank_init()
425 lockinit(&dev->vblank_time_lock, "drmvtl", 0, 0); in drm_vblank_init()
427 dev->num_crtcs = num_crtcs; in drm_vblank_init()
429 dev->vblank = kcalloc(num_crtcs, sizeof(*dev->vblank), GFP_KERNEL); in drm_vblank_init()
430 if (!dev->vblank) in drm_vblank_init()
434 struct drm_vblank_crtc *vblank = &dev->vblank[i]; in drm_vblank_init()
436 vblank->dev = dev; in drm_vblank_init()
446 if (dev->driver->get_vblank_timestamp) in drm_vblank_init()
452 if (dev->vblank_disable_immediate && !dev->driver->get_vblank_timestamp) { in drm_vblank_init()
453 dev->vblank_disable_immediate = false; in drm_vblank_init()
461 dev->num_crtcs = 0; in drm_vblank_init()
476 return &crtc->dev->vblank[drm_crtc_index(crtc)].queue; in drm_crtc_vblank_waitqueue()
495 struct drm_device *dev = crtc->dev; in drm_calc_timestamping_constants() local
497 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_calc_timestamping_constants()
501 if (!dev->num_crtcs) in drm_calc_timestamping_constants()
504 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_calc_timestamping_constants()
571 bool drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev, in drm_calc_vbltimestamp_from_scanoutpos() argument
582 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_calc_vbltimestamp_from_scanoutpos()
586 if (!drm_core_check_feature(dev, DRIVER_MODESET)) in drm_calc_vbltimestamp_from_scanoutpos()
589 crtc = drm_crtc_from_index(dev, pipe); in drm_calc_vbltimestamp_from_scanoutpos()
591 if (pipe >= dev->num_crtcs || !crtc) { in drm_calc_vbltimestamp_from_scanoutpos()
597 if (!dev->driver->get_scanout_position) { in drm_calc_vbltimestamp_from_scanoutpos()
602 if (drm_drv_uses_atomic_modeset(dev)) in drm_calc_vbltimestamp_from_scanoutpos()
612 WARN_ON_ONCE(drm_drv_uses_atomic_modeset(dev)); in drm_calc_vbltimestamp_from_scanoutpos()
629 vbl_status = dev->driver->get_scanout_position(dev, pipe, in drm_calc_vbltimestamp_from_scanoutpos()
709 drm_get_last_vbltimestamp(struct drm_device *dev, unsigned int pipe, in drm_get_last_vbltimestamp() argument
718 if (dev->driver->get_vblank_timestamp && (max_error > 0)) in drm_get_last_vbltimestamp()
719 ret = dev->driver->get_vblank_timestamp(dev, pipe, &max_error, in drm_get_last_vbltimestamp()
746 return drm_vblank_count(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_vblank_count()
764 static u64 drm_vblank_count_and_time(struct drm_device *dev, unsigned int pipe, in drm_vblank_count_and_time() argument
767 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_vblank_count_and_time()
771 if (WARN_ON(pipe >= dev->num_crtcs)) { in drm_vblank_count_and_time()
799 return drm_vblank_count_and_time(crtc->dev, drm_crtc_index(crtc), in drm_crtc_vblank_count_and_time()
804 static void send_vblank_event(struct drm_device *dev, in send_vblank_event() argument
830 drm_send_event_locked(dev, &e->base); in send_vblank_event()
874 struct drm_device *dev = crtc->dev; in drm_crtc_arm_vblank_event() local
877 assert_spin_locked(&dev->event_lock); in drm_crtc_arm_vblank_event()
881 list_add_tail(&e->base.link, &dev->vblank_event_list); in drm_crtc_arm_vblank_event()
899 struct drm_device *dev = crtc->dev; in drm_crtc_send_vblank_event() local
904 if (dev->num_crtcs > 0) { in drm_crtc_send_vblank_event()
905 seq = drm_vblank_count_and_time(dev, pipe, &now); in drm_crtc_send_vblank_event()
912 send_vblank_event(dev, e, seq, now); in drm_crtc_send_vblank_event()
916 static int __enable_vblank(struct drm_device *dev, unsigned int pipe) in __enable_vblank() argument
918 if (drm_core_check_feature(dev, DRIVER_MODESET)) { in __enable_vblank()
919 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe); in __enable_vblank()
925 return dev->driver->enable_vblank(dev, pipe); in __enable_vblank()
928 static int drm_vblank_enable(struct drm_device *dev, unsigned int pipe) in drm_vblank_enable() argument
930 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_vblank_enable()
933 assert_spin_locked(&dev->vbl_lock); in drm_vblank_enable()
935 lockmgr(&dev->vblank_time_lock, LK_EXCLUSIVE); in drm_vblank_enable()
945 ret = __enable_vblank(dev, pipe); in drm_vblank_enable()
950 drm_update_vblank_count(dev, pipe, 0); in drm_vblank_enable()
960 lockmgr(&dev->vblank_time_lock, LK_RELEASE); in drm_vblank_enable()
965 static int drm_vblank_get(struct drm_device *dev, unsigned int pipe) in drm_vblank_get() argument
967 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_vblank_get()
971 if (!dev->num_crtcs) in drm_vblank_get()
974 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_vblank_get()
977 spin_lock_irqsave(&dev->vbl_lock, irqflags); in drm_vblank_get()
980 ret = drm_vblank_enable(dev, pipe); in drm_vblank_get()
987 spin_unlock_irqrestore(&dev->vbl_lock, irqflags); in drm_vblank_get()
1004 return drm_vblank_get(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_vblank_get()
1008 static void drm_vblank_put(struct drm_device *dev, unsigned int pipe) in drm_vblank_put() argument
1010 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_vblank_put()
1012 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_vblank_put()
1024 else if (!dev->vblank_disable_immediate) in drm_vblank_put()
1039 drm_vblank_put(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_vblank_put()
1054 void drm_wait_one_vblank(struct drm_device *dev, unsigned int pipe) in drm_wait_one_vblank() argument
1056 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_wait_one_vblank()
1060 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_wait_one_vblank()
1063 ret = drm_vblank_get(dev, pipe); in drm_wait_one_vblank()
1067 last = drm_vblank_count(dev, pipe); in drm_wait_one_vblank()
1070 last != drm_vblank_count(dev, pipe), in drm_wait_one_vblank()
1075 drm_vblank_put(dev, pipe); in drm_wait_one_vblank()
1089 drm_wait_one_vblank(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_wait_one_vblank()
1106 struct drm_device *dev = crtc->dev; in drm_crtc_vblank_off() local
1108 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_crtc_vblank_off()
1115 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_crtc_vblank_off()
1118 spin_lock_irqsave(&dev->event_lock, irqflags); in drm_crtc_vblank_off()
1120 lockmgr(&dev->vbl_lock, LK_EXCLUSIVE); in drm_crtc_vblank_off()
1126 if (drm_core_check_feature(dev, DRIVER_ATOMIC) || !vblank->inmodeset) in drm_crtc_vblank_off()
1127 drm_vblank_disable_and_save(dev, pipe); in drm_crtc_vblank_off()
1139 lockmgr(&dev->vbl_lock, LK_RELEASE); in drm_crtc_vblank_off()
1142 seq = drm_vblank_count_and_time(dev, pipe, &now); in drm_crtc_vblank_off()
1144 list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) { in drm_crtc_vblank_off()
1151 drm_vblank_put(dev, pipe); in drm_crtc_vblank_off()
1152 send_vblank_event(dev, e, seq, now); in drm_crtc_vblank_off()
1154 spin_unlock_irqrestore(&dev->event_lock, irqflags); in drm_crtc_vblank_off()
1176 struct drm_device *dev = crtc->dev; in drm_crtc_vblank_reset() local
1179 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_crtc_vblank_reset()
1181 spin_lock_irqsave(&dev->vbl_lock, irqflags); in drm_crtc_vblank_reset()
1190 spin_unlock_irqrestore(&dev->vbl_lock, irqflags); in drm_crtc_vblank_reset()
1192 WARN_ON(!list_empty(&dev->vblank_event_list)); in drm_crtc_vblank_reset()
1208 struct drm_device *dev = crtc->dev; in drm_crtc_vblank_on() local
1210 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_crtc_vblank_on()
1213 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_crtc_vblank_on()
1216 spin_lock_irqsave(&dev->vbl_lock, irqflags); in drm_crtc_vblank_on()
1226 drm_reset_vblank_timestamp(dev, pipe); in drm_crtc_vblank_on()
1233 WARN_ON(drm_vblank_enable(dev, pipe)); in drm_crtc_vblank_on()
1234 spin_unlock_irqrestore(&dev->vbl_lock, irqflags); in drm_crtc_vblank_on()
1238 static void drm_legacy_vblank_pre_modeset(struct drm_device *dev, in drm_legacy_vblank_pre_modeset() argument
1241 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_legacy_vblank_pre_modeset()
1244 if (!dev->num_crtcs) in drm_legacy_vblank_pre_modeset()
1247 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_legacy_vblank_pre_modeset()
1259 if (drm_vblank_get(dev, pipe) == 0) in drm_legacy_vblank_pre_modeset()
1264 static void drm_legacy_vblank_post_modeset(struct drm_device *dev, in drm_legacy_vblank_post_modeset() argument
1267 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_legacy_vblank_post_modeset()
1271 if (!dev->num_crtcs) in drm_legacy_vblank_post_modeset()
1274 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_legacy_vblank_post_modeset()
1278 spin_lock_irqsave(&dev->vbl_lock, irqflags); in drm_legacy_vblank_post_modeset()
1279 drm_reset_vblank_timestamp(dev, pipe); in drm_legacy_vblank_post_modeset()
1280 spin_unlock_irqrestore(&dev->vbl_lock, irqflags); in drm_legacy_vblank_post_modeset()
1283 drm_vblank_put(dev, pipe); in drm_legacy_vblank_post_modeset()
1289 int drm_legacy_modeset_ctl_ioctl(struct drm_device *dev, void *data, in drm_legacy_modeset_ctl_ioctl() argument
1296 if (!dev->num_crtcs) in drm_legacy_modeset_ctl_ioctl()
1300 if (!drm_core_check_feature(dev, DRIVER_LEGACY)) in drm_legacy_modeset_ctl_ioctl()
1304 if (pipe >= dev->num_crtcs) in drm_legacy_modeset_ctl_ioctl()
1309 drm_legacy_vblank_pre_modeset(dev, pipe); in drm_legacy_modeset_ctl_ioctl()
1312 drm_legacy_vblank_post_modeset(dev, pipe); in drm_legacy_modeset_ctl_ioctl()
1326 static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe, in drm_queue_vblank_event() argument
1331 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_queue_vblank_event()
1349 if (drm_core_check_feature(dev, DRIVER_MODESET)) { in drm_queue_vblank_event()
1350 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe); in drm_queue_vblank_event()
1355 spin_lock_irqsave(&dev->event_lock, flags); in drm_queue_vblank_event()
1368 ret = drm_event_reserve_init_locked(dev, file_priv, &e->base, in drm_queue_vblank_event()
1374 seq = drm_vblank_count_and_time(dev, pipe, &now); in drm_queue_vblank_event()
1383 drm_vblank_put(dev, pipe); in drm_queue_vblank_event()
1384 send_vblank_event(dev, e, seq, now); in drm_queue_vblank_event()
1388 list_add_tail(&e->base.link, &dev->vblank_event_list); in drm_queue_vblank_event()
1392 spin_unlock_irqrestore(&dev->event_lock, flags); in drm_queue_vblank_event()
1397 spin_unlock_irqrestore(&dev->event_lock, flags); in drm_queue_vblank_event()
1400 drm_vblank_put(dev, pipe); in drm_queue_vblank_event()
1431 static void drm_wait_vblank_reply(struct drm_device *dev, unsigned int pipe, in drm_wait_vblank_reply() argument
1442 reply->sequence = drm_vblank_count_and_time(dev, pipe, &now); in drm_wait_vblank_reply()
1448 int drm_wait_vblank_ioctl(struct drm_device *dev, void *data, in drm_wait_vblank_ioctl() argument
1459 if (!dev->irq_enabled) in drm_wait_vblank_ioctl()
1483 if (drm_core_check_feature(dev, DRIVER_MODESET)) { in drm_wait_vblank_ioctl()
1485 drm_for_each_crtc(crtc, dev) { in drm_wait_vblank_ioctl()
1497 if (pipe >= dev->num_crtcs) in drm_wait_vblank_ioctl()
1500 vblank = &dev->vblank[pipe]; in drm_wait_vblank_ioctl()
1505 if (dev->vblank_disable_immediate && in drm_wait_vblank_ioctl()
1508 drm_wait_vblank_reply(dev, pipe, &vblwait->reply); in drm_wait_vblank_ioctl()
1512 ret = drm_vblank_get(dev, pipe); in drm_wait_vblank_ioctl()
1517 seq = drm_vblank_count(dev, pipe); in drm_wait_vblank_ioctl()
1544 return drm_queue_vblank_event(dev, pipe, req_seq, vblwait, file_priv); in drm_wait_vblank_ioctl()
1551 vblank_passed(drm_vblank_count(dev, pipe), in drm_wait_vblank_ioctl()
1557 drm_wait_vblank_reply(dev, pipe, &vblwait->reply); in drm_wait_vblank_ioctl()
1566 drm_vblank_put(dev, pipe); in drm_wait_vblank_ioctl()
1570 static void drm_handle_vblank_events(struct drm_device *dev, unsigned int pipe) in drm_handle_vblank_events() argument
1576 assert_spin_locked(&dev->event_lock); in drm_handle_vblank_events()
1578 seq = drm_vblank_count_and_time(dev, pipe, &now); in drm_handle_vblank_events()
1580 list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) { in drm_handle_vblank_events()
1590 drm_vblank_put(dev, pipe); in drm_handle_vblank_events()
1591 send_vblank_event(dev, e, seq, now); in drm_handle_vblank_events()
1607 bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe) in drm_handle_vblank() argument
1609 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_handle_vblank()
1613 if (WARN_ON_ONCE(!dev->num_crtcs)) in drm_handle_vblank()
1616 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_handle_vblank()
1619 spin_lock_irqsave(&dev->event_lock, irqflags); in drm_handle_vblank()
1625 lockmgr(&dev->vblank_time_lock, LK_EXCLUSIVE); in drm_handle_vblank()
1629 lockmgr(&dev->vblank_time_lock, LK_RELEASE); in drm_handle_vblank()
1630 spin_unlock_irqrestore(&dev->event_lock, irqflags); in drm_handle_vblank()
1634 drm_update_vblank_count(dev, pipe, true); in drm_handle_vblank()
1636 lockmgr(&dev->vblank_time_lock, LK_RELEASE); in drm_handle_vblank()
1645 disable_irq = (dev->vblank_disable_immediate && in drm_handle_vblank()
1649 drm_handle_vblank_events(dev, pipe); in drm_handle_vblank()
1651 spin_unlock_irqrestore(&dev->event_lock, irqflags); in drm_handle_vblank()
1674 return drm_handle_vblank(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_handle_vblank()
1686 int drm_crtc_get_sequence_ioctl(struct drm_device *dev, void *data, in drm_crtc_get_sequence_ioctl() argument
1697 if (!drm_core_check_feature(dev, DRIVER_MODESET)) in drm_crtc_get_sequence_ioctl()
1700 if (!dev->irq_enabled) in drm_crtc_get_sequence_ioctl()
1703 crtc = drm_crtc_find(dev, file_priv, get_seq->crtc_id); in drm_crtc_get_sequence_ioctl()
1709 vblank = &dev->vblank[pipe]; in drm_crtc_get_sequence_ioctl()
1710 vblank_enabled = dev->vblank_disable_immediate && READ_ONCE(vblank->enabled); in drm_crtc_get_sequence_ioctl()
1725 get_seq->sequence = drm_vblank_count_and_time(dev, pipe, &now); in drm_crtc_get_sequence_ioctl()
1740 int drm_crtc_queue_sequence_ioctl(struct drm_device *dev, void *data, in drm_crtc_queue_sequence_ioctl() argument
1755 if (!drm_core_check_feature(dev, DRIVER_MODESET)) in drm_crtc_queue_sequence_ioctl()
1758 if (!dev->irq_enabled) in drm_crtc_queue_sequence_ioctl()
1761 crtc = drm_crtc_find(dev, file_priv, queue_seq->crtc_id); in drm_crtc_queue_sequence_ioctl()
1773 vblank = &dev->vblank[pipe]; in drm_crtc_queue_sequence_ioctl()
1785 seq = drm_vblank_count_and_time(dev, pipe, &now); in drm_crtc_queue_sequence_ioctl()
1799 spin_lock_irqsave(&dev->event_lock, spin_flags); in drm_crtc_queue_sequence_ioctl()
1812 ret = drm_event_reserve_init_locked(dev, file_priv, &e->base, in drm_crtc_queue_sequence_ioctl()
1822 send_vblank_event(dev, e, seq, now); in drm_crtc_queue_sequence_ioctl()
1826 list_add_tail(&e->base.link, &dev->vblank_event_list); in drm_crtc_queue_sequence_ioctl()
1830 spin_unlock_irqrestore(&dev->event_lock, spin_flags); in drm_crtc_queue_sequence_ioctl()
1834 spin_unlock_irqrestore(&dev->event_lock, spin_flags); in drm_crtc_queue_sequence_ioctl()