1<html><head><meta http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968"><title>drm_vblank_pre_modeset</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="index.html" title="Linux DRM Developer's Guide"><link rel="up" href="drm-vertical-blank.html#idp1127382092" title="Vertical Blanking and Interrupt Handling Functions Reference"><link rel="prev" href="API-drm-crtc-vblank-on.html" title="drm_crtc_vblank_on"><link rel="next" href="API-drm-vblank-post-modeset.html" title="drm_vblank_post_modeset"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"><span class="phrase">drm_vblank_pre_modeset</span></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="API-drm-crtc-vblank-on.html">Prev</a> </td><th width="60%" align="center">Vertical Blanking and Interrupt Handling Functions Reference</th><td width="20%" align="right"> <a accesskey="n" href="API-drm-vblank-post-modeset.html">Next</a></td></tr></table><hr></div><div class="refentry"><a name="API-drm-vblank-pre-modeset"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>drm_vblank_pre_modeset — 2 account for vblanks across mode sets 3 </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">drm_vblank_pre_modeset </b>(</code></td><td>struct drm_device * <var class="pdparam">dev</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">crtc</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idp1127600100"></a><h2>Arguments</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><em class="parameter"><code>dev</code></em></span></dt><dd><p> 4 DRM device 5 </p></dd><dt><span class="term"><em class="parameter"><code>crtc</code></em></span></dt><dd><p> 6 CRTC in question 7 </p></dd></dl></div></div><div class="refsect1"><a name="idp1127602708"></a><h2>Description</h2><p> 8 Account for vblank events across mode setting events, which will likely 9 reset the hardware frame counter. 10 </p><p> 11 12 This is done by grabbing a temporary vblank reference to ensure that the 13 vblank interrupt keeps running across the modeset sequence. With this the 14 software-side vblank frame counting will ensure that there are no jumps or 15 discontinuities. 16 </p><p> 17 18 Unfortunately this approach is racy and also doesn't work when the vblank 19 interrupt stops running, e.g. across system suspend resume. It is therefore 20 highly recommended that drivers use the newer <code class="function">drm_vblank_off</code> and 21 <code class="function">drm_vblank_on</code> instead. <code class="function">drm_vblank_pre_modeset</code> only works correctly when 22 using <span class="quote">“<span class="quote">cooked</span>”</span> software vblank frame counters and not relying on any hardware 23 counters. 24 </p><p> 25 26 Drivers must call <code class="function">drm_vblank_post_modeset</code> when re-enabling the same crtc 27 again. 28</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="API-drm-crtc-vblank-on.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="drm-vertical-blank.html#idp1127382092">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="API-drm-vblank-post-modeset.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"><span class="phrase">drm_crtc_vblank_on</span> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> <span class="phrase">drm_vblank_post_modeset</span></td></tr></table></div></body></html> 29