Lines Matching refs:crtc

46 #define vblanktimestamp(dev, crtc, count) \  argument
47 ((dev)->vblank[crtc].time[(count) % DRM_VBLANKTIME_RBSIZE])
60 drm_get_last_vbltimestamp(struct drm_device *dev, int crtc,
93 static void drm_update_vblank_count(struct drm_device *dev, int crtc) in drm_update_vblank_count() argument
95 struct drm_vblank_crtc *vblank = &dev->vblank[crtc]; in drm_update_vblank_count()
113 cur_vblank = dev->driver->get_vblank_counter(dev, crtc); in drm_update_vblank_count()
114 rc = drm_get_last_vbltimestamp(dev, crtc, &t_vblank, 0); in drm_update_vblank_count()
115 } while (cur_vblank != dev->driver->get_vblank_counter(dev, crtc)); in drm_update_vblank_count()
123 crtc, vblank->last, cur_vblank, diff); in drm_update_vblank_count()
127 crtc, diff); in drm_update_vblank_count()
138 vblanktimestamp(dev, crtc, tslot) = rc ? t_vblank : (struct timeval) {0, 0}; in drm_update_vblank_count()
151 static void vblank_disable_and_save(struct drm_device *dev, int crtc) in vblank_disable_and_save() argument
153 struct drm_vblank_crtc *vblank = &dev->vblank[crtc]; in vblank_disable_and_save()
181 drm_get_last_vbltimestamp(dev, crtc, &tvblank, 0)) { in vblank_disable_and_save()
182 drm_update_vblank_count(dev, crtc); in vblank_disable_and_save()
193 dev->driver->disable_vblank(dev, crtc); in vblank_disable_and_save()
210 vblank->last = dev->driver->get_vblank_counter(dev, crtc); in vblank_disable_and_save()
211 vblrc = drm_get_last_vbltimestamp(dev, crtc, &tvblank, 0); in vblank_disable_and_save()
212 } while (vblank->last != dev->driver->get_vblank_counter(dev, crtc) && (--count) && vblrc); in vblank_disable_and_save()
222 timeval_to_ns(&vblanktimestamp(dev, crtc, vblcount)); in vblank_disable_and_save()
238 vblanktimestamp(dev, crtc, vblcount + 1) = tvblank; in vblank_disable_and_save()
256 int crtc = vblank->crtc; in vblank_disable_fn() local
263 DRM_DEBUG("disabling vblank on crtc %d\n", crtc); in vblank_disable_fn()
264 vblank_disable_and_save(dev, crtc); in vblank_disable_fn()
277 int crtc; in drm_vblank_cleanup() local
283 for (crtc = 0; crtc < dev->num_crtcs; crtc++) { in drm_vblank_cleanup()
284 struct drm_vblank_crtc *vblank = &dev->vblank[crtc]; in drm_vblank_cleanup()
325 vblank->crtc = i; in drm_vblank_init()
576 void drm_calc_timestamping_constants(struct drm_crtc *crtc, in drm_calc_timestamping_constants() argument
602 crtc->base.id); in drm_calc_timestamping_constants()
604 crtc->pixeldur_ns = pixeldur_ns; in drm_calc_timestamping_constants()
605 crtc->linedur_ns = linedur_ns; in drm_calc_timestamping_constants()
606 crtc->framedur_ns = framedur_ns; in drm_calc_timestamping_constants()
609 crtc->base.id, mode->crtc_htotal, in drm_calc_timestamping_constants()
612 crtc->base.id, dotclock, framedur_ns, in drm_calc_timestamping_constants()
663 int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev, int crtc, in drm_calc_vbltimestamp_from_scanoutpos() argument
677 if (crtc < 0 || crtc >= dev->num_crtcs) { in drm_calc_vbltimestamp_from_scanoutpos()
678 DRM_ERROR("Invalid crtc %d\n", crtc); in drm_calc_vbltimestamp_from_scanoutpos()
697 DRM_DEBUG("crtc %d: Noop due to uninitialized mode.\n", crtc); in drm_calc_vbltimestamp_from_scanoutpos()
713 vbl_status = dev->driver->get_scanout_position(dev, crtc, flags, &vpos, in drm_calc_vbltimestamp_from_scanoutpos()
719 crtc, vbl_status); in drm_calc_vbltimestamp_from_scanoutpos()
734 crtc, duration_ns/1000, *max_error/1000, i); in drm_calc_vbltimestamp_from_scanoutpos()
768 crtc, (int)vbl_status, hpos, vpos, in drm_calc_vbltimestamp_from_scanoutpos()
810 drm_get_last_vbltimestamp(struct drm_device *dev, int crtc, in drm_get_last_vbltimestamp() argument
820 ret = dev->driver->get_vblank_timestamp(dev, crtc, &max_error, in drm_get_last_vbltimestamp()
848 u32 drm_vblank_count(struct drm_device *dev, int crtc) in drm_vblank_count() argument
850 struct drm_vblank_crtc *vblank = &dev->vblank[crtc]; in drm_vblank_count()
852 if (WARN_ON(crtc >= dev->num_crtcs)) in drm_vblank_count()
871 u32 drm_crtc_vblank_count(struct drm_crtc *crtc) in drm_crtc_vblank_count() argument
873 return drm_vblank_count(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_vblank_count()
890 u32 drm_vblank_count_and_time(struct drm_device *dev, int crtc, in drm_vblank_count_and_time() argument
893 struct drm_vblank_crtc *vblank = &dev->vblank[crtc]; in drm_vblank_count_and_time()
896 if (WARN_ON(crtc >= dev->num_crtcs)) in drm_vblank_count_and_time()
906 *vblanktime = vblanktimestamp(dev, crtc, cur_vblank); in drm_vblank_count_and_time()
941 void drm_send_vblank_event(struct drm_device *dev, int crtc, in drm_send_vblank_event() argument
947 if (crtc >= 0) { in drm_send_vblank_event()
948 seq = drm_vblank_count_and_time(dev, crtc, &now); in drm_send_vblank_event()
954 e->pipe = crtc; in drm_send_vblank_event()
969 void drm_crtc_send_vblank_event(struct drm_crtc *crtc, in drm_crtc_send_vblank_event() argument
972 drm_send_vblank_event(crtc->dev, drm_crtc_index(crtc), e); in drm_crtc_send_vblank_event()
981 static int drm_vblank_enable(struct drm_device *dev, int crtc) in drm_vblank_enable() argument
983 struct drm_vblank_crtc *vblank = &dev->vblank[crtc]; in drm_vblank_enable()
998 ret = dev->driver->enable_vblank(dev, crtc); in drm_vblank_enable()
999 DRM_DEBUG("enabling vblank on crtc %d, ret: %d\n", crtc, ret); in drm_vblank_enable()
1004 drm_update_vblank_count(dev, crtc); in drm_vblank_enable()
1026 int drm_vblank_get(struct drm_device *dev, int crtc) in drm_vblank_get() argument
1028 struct drm_vblank_crtc *vblank = &dev->vblank[crtc]; in drm_vblank_get()
1032 if (WARN_ON(crtc >= dev->num_crtcs)) in drm_vblank_get()
1038 ret = drm_vblank_enable(dev, crtc); in drm_vblank_get()
1063 int drm_crtc_vblank_get(struct drm_crtc *crtc) in drm_crtc_vblank_get() argument
1065 return drm_vblank_get(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_vblank_get()
1079 void drm_vblank_put(struct drm_device *dev, int crtc) in drm_vblank_put() argument
1081 struct drm_vblank_crtc *vblank = &dev->vblank[crtc]; in drm_vblank_put()
1086 if (WARN_ON(crtc >= dev->num_crtcs)) in drm_vblank_put()
1111 void drm_crtc_vblank_put(struct drm_crtc *crtc) in drm_crtc_vblank_put() argument
1113 drm_vblank_put(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_vblank_put()
1126 void drm_wait_one_vblank(struct drm_device *dev, int crtc) in drm_wait_one_vblank() argument
1131 ret = drm_vblank_get(dev, crtc); in drm_wait_one_vblank()
1132 if (WARN(ret, "vblank not available on crtc %i, ret=%i\n", crtc, ret)) in drm_wait_one_vblank()
1135 last = drm_vblank_count(dev, crtc); in drm_wait_one_vblank()
1137 ret = wait_event_timeout(dev->vblank[crtc].queue, in drm_wait_one_vblank()
1138 last != drm_vblank_count(dev, crtc), in drm_wait_one_vblank()
1141 WARN(ret == 0, "vblank wait timed out on crtc %i\n", crtc); in drm_wait_one_vblank()
1143 drm_vblank_put(dev, crtc); in drm_wait_one_vblank()
1155 void drm_crtc_wait_one_vblank(struct drm_crtc *crtc) in drm_crtc_wait_one_vblank() argument
1157 drm_wait_one_vblank(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_wait_one_vblank()
1175 void drm_vblank_off(struct drm_device *dev, int crtc) in drm_vblank_off() argument
1177 struct drm_vblank_crtc *vblank = &dev->vblank[crtc]; in drm_vblank_off()
1183 if (WARN_ON(crtc >= dev->num_crtcs)) in drm_vblank_off()
1189 vblank_disable_and_save(dev, crtc); in drm_vblank_off()
1203 seq = drm_vblank_count_and_time(dev, crtc, &now); in drm_vblank_off()
1206 if (e->pipe != crtc) in drm_vblank_off()
1232 void drm_crtc_vblank_off(struct drm_crtc *crtc) in drm_crtc_vblank_off() argument
1234 drm_vblank_off(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_vblank_off()
1252 int crtc = drm_crtc_index(drm_crtc); in drm_crtc_vblank_reset() local
1253 struct drm_vblank_crtc *vblank = &dev->vblank[crtc]; in drm_crtc_vblank_reset()
1282 void drm_vblank_on(struct drm_device *dev, int crtc) in drm_vblank_on() argument
1284 struct drm_vblank_crtc *vblank = &dev->vblank[crtc]; in drm_vblank_on()
1287 if (WARN_ON(crtc >= dev->num_crtcs)) in drm_vblank_on()
1305 (dev->driver->get_vblank_counter(dev, crtc) - 1) & in drm_vblank_on()
1313 WARN_ON(drm_vblank_enable(dev, crtc)); in drm_vblank_on()
1329 void drm_crtc_vblank_on(struct drm_crtc *crtc) in drm_crtc_vblank_on() argument
1331 drm_vblank_on(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_vblank_on()
1358 void drm_vblank_pre_modeset(struct drm_device *dev, int crtc) in drm_vblank_pre_modeset() argument
1360 struct drm_vblank_crtc *vblank = &dev->vblank[crtc]; in drm_vblank_pre_modeset()
1366 if (WARN_ON(crtc >= dev->num_crtcs)) in drm_vblank_pre_modeset()
1378 if (drm_vblank_get(dev, crtc) == 0) in drm_vblank_pre_modeset()
1392 void drm_vblank_post_modeset(struct drm_device *dev, int crtc) in drm_vblank_post_modeset() argument
1394 struct drm_vblank_crtc *vblank = &dev->vblank[crtc]; in drm_vblank_post_modeset()
1407 drm_vblank_put(dev, crtc); in drm_vblank_post_modeset()
1429 unsigned int crtc; in drm_modeset_ctl() local
1439 crtc = modeset->crtc; in drm_modeset_ctl()
1440 if (crtc >= dev->num_crtcs) in drm_modeset_ctl()
1445 drm_vblank_pre_modeset(dev, crtc); in drm_modeset_ctl()
1448 drm_vblank_post_modeset(dev, crtc); in drm_modeset_ctl()
1560 unsigned int flags, seq, crtc, high_crtc; in drm_wait_vblank() local
1581 crtc = high_crtc >> _DRM_VBLANK_HIGH_CRTC_SHIFT; in drm_wait_vblank()
1583 crtc = flags & _DRM_VBLANK_SECONDARY ? 1 : 0; in drm_wait_vblank()
1584 if (crtc >= dev->num_crtcs) in drm_wait_vblank()
1587 vblank = &dev->vblank[crtc]; in drm_wait_vblank()
1589 ret = drm_vblank_get(dev, crtc); in drm_wait_vblank()
1594 seq = drm_vblank_count(dev, crtc); in drm_wait_vblank()
1611 return drm_queue_vblank_event(dev, crtc, vblwait, file_priv); in drm_wait_vblank()
1620 vblwait->request.sequence, crtc); in drm_wait_vblank()
1623 (((drm_vblank_count(dev, crtc) - in drm_wait_vblank()
1631 vblwait->reply.sequence = drm_vblank_count_and_time(dev, crtc, &now); in drm_wait_vblank()
1642 drm_vblank_put(dev, crtc); in drm_wait_vblank()
1646 static void drm_handle_vblank_events(struct drm_device *dev, int crtc) in drm_handle_vblank_events() argument
1654 seq = drm_vblank_count_and_time(dev, crtc, &now); in drm_handle_vblank_events()
1657 if (e->pipe != crtc) in drm_handle_vblank_events()
1670 trace_drm_vblank_event(crtc, seq); in drm_handle_vblank_events()
1683 bool drm_handle_vblank(struct drm_device *dev, int crtc) in drm_handle_vblank() argument
1685 struct drm_vblank_crtc *vblank = &dev->vblank[crtc]; in drm_handle_vblank()
1694 if (WARN_ON(crtc >= dev->num_crtcs)) in drm_handle_vblank()
1718 drm_get_last_vbltimestamp(dev, crtc, &tvblank, DRM_CALLED_FROM_VBLIRQ); in drm_handle_vblank()
1722 timeval_to_ns(&vblanktimestamp(dev, crtc, vblcount)); in drm_handle_vblank()
1735 vblanktimestamp(dev, crtc, vblcount + 1) = tvblank; in drm_handle_vblank()
1745 crtc, (int) diff_ns); in drm_handle_vblank()
1751 drm_handle_vblank_events(dev, crtc); in drm_handle_vblank()
1771 bool drm_crtc_handle_vblank(struct drm_crtc *crtc) in drm_crtc_handle_vblank() argument
1773 return drm_handle_vblank(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_handle_vblank()