%!TEX encoding = UTF-8 Unicode
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% VIRTIO 1.0 Specification Draft
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\documentclass[10pt,titlepage]{report}

\usepackage{parskip}
\usepackage{setspace}
\usepackage[english]{babel}
\usepackage{ae,aecompl} 
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{framed}
\usepackage{hyperref}
\usepackage{lineno} 
\usepackage{listings}
\usepackage{courier}
\usepackage{fancyvrb}
\usepackage{array}
\usepackage{longtable}
\usepackage{multirow}
\usepackage{rotating}
\usepackage{fancyhdr}
\usepackage{lastpage}
\usepackage{todonotes}
\usepackage{titlesec}
\usepackage{mdwlist}
\usepackage{url}
\usepackage{xifthen}
\usepackage{tabularx}
\usepackage{underscore}
\usepackage{xstring}
\usepackage{chngcntr}
\counterwithout{footnote}{chapter}

\usepackage[utf8x]{inputenc}

\urlstyle{rm}

% commands
\input{specvars.tex}
\input{commands.tex}
\input{commands-html.tex}
\input{listings.tex}

% new command: header and footer
\newcommand{\virtioheaderfooter}{}

% headers setup
\titleformat{\chapter}[block]{\hrulefill\titlerule\normalfont\huge\bfseries}{\thechapter}{0pt}{}
\titleformat{\section}{\normalfont\Large\bfseries}{\thesection}{1em}{}
\titleformat{\subsection}{\normalfont\large\bfseries}{\thesubsection}{1em}{}
\titleformat{\subsubsection}{\normalfont\normalsize\bfseries}{\thesubsubsection}{1em}{}
\titleformat{\paragraph}[hang]{\normalfont\normalsize\bfseries}{\theparagraph}{1em}{}
\titleformat{\subparagraph}[hang]{\normalfont\normalsize\bfseries}{\thesubparagraph}{1em}{}

%Using texlive on Fedora 21, \url for some reason replaces
%hypen - with -_ in html output only.
%This seems to go away if we override - within urls inserting an
%mbox around it.
\makeatletter \g@addto@macro\UrlSpecials{\do\-{\mbox{-}}}

% main document
\input{main.tex}
as/drm.git/log/linux/gamma_drm.h'>
<input type='hidden' name='h' value='android'/><input type='hidden' name='id' value='1da595d797f797ff071d98ebf6a4eaad38bb1347'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/renesas/drm.git/tree/?h=android&amp;id=1da595d797f797ff071d98ebf6a4eaad38bb1347'>root</a>/<a href='/renesas/drm.git/tree/linux?h=android&amp;id=1da595d797f797ff071d98ebf6a4eaad38bb1347'>linux</a>/<a href='/renesas/drm.git/tree/linux/gamma_drm.h?h=android&amp;id=1da595d797f797ff071d98ebf6a4eaad38bb1347'>gamma_drm.h</a></div><div class='content'>blob: 20819ded0e152839f1f3b8b5d9a5c297373072ea (<a href='/renesas/drm.git/plain/linux/gamma_drm.h?h=android&amp;id=1da595d797f797ff071d98ebf6a4eaad38bb1347'>plain</a>)
<table summary='blob content' class='blob'>
<tr><td class='linenumbers'><pre><a id='n1' href='#n1'>1</a>
<a id='n2' href='#n2'>2</a>
<a id='n3' href='#n3'>3</a>
<a id='n4' href='#n4'>4</a>
<a id='n5' href='#n5'>5</a>
<a id='n6' href='#n6'>6</a>
<a id='n7' href='#n7'>7</a>
<a id='n8' href='#n8'>8</a>
<a id='n9' href='#n9'>9</a>
<a id='n10' href='#n10'>10</a>
<a id='n11' href='#n11'>11</a>
<a id='n12' href='#n12'>12</a>
<a id='n13' href='#n13'>13</a>
<a id='n14' href='#n14'>14</a>
<a id='n15' href='#n15'>15</a>
<a id='n16' href='#n16'>16</a>
<a id='n17' href='#n17'>17</a>
<a id='n18' href='#n18'>18</a>
<a id='n19' href='#n19'>19</a>
<a id='n20' href='#n20'>20</a>
<a id='n21' href='#n21'>21</a>
<a id='n22' href='#n22'>22</a>
<a id='n23' href='#n23'>23</a>
<a id='n24' href='#n24'>24</a>
<a id='n25' href='#n25'>25</a>
<a id='n26' href='#n26'>26</a>
<a id='n27' href='#n27'>27</a>
<a id='n28' href='#n28'>28</a>
<a id='n29' href='#n29'>29</a>
<a id='n30' href='#n30'>30</a>
<a id='n31' href='#n31'>31</a>
<a id='n32' href='#n32'>32</a>
<a id='n33' href='#n33'>33</a>
<a id='n34' href='#n34'>34</a>
<a id='n35' href='#n35'>35</a>
<a id='n36' href='#n36'>36</a>
<a id='n37' href='#n37'>37</a>
<a id='n38' href='#n38'>38</a>
<a id='n39' href='#n39'>39</a>
<a id='n40' href='#n40'>40</a>
<a id='n41' href='#n41'>41</a>
<a id='n42' href='#n42'>42</a>
<a id='n43' href='#n43'>43</a>
<a id='n44' href='#n44'>44</a>
<a id='n45' href='#n45'>45</a>
<a id='n46' href='#n46'>46</a>
<a id='n47' href='#n47'>47</a>
<a id='n48' href='#n48'>48</a>
<a id='n49' href='#n49'>49</a>
<a id='n50' href='#n50'>50</a>
<a id='n51' href='#n51'>51</a>
<a id='n52' href='#n52'>52</a>
<a id='n53' href='#n53'>53</a>
<a id='n54' href='#n54'>54</a>
<a id='n55' href='#n55'>55</a>
<a id='n56' href='#n56'>56</a>
<a id='n57' href='#n57'>57</a>
<a id='n58' href='#n58'>58</a>
<a id='n59' href='#n59'>59</a>
<a id='n60' href='#n60'>60</a>
<a id='n61' href='#n61'>61</a>
<a id='n62' href='#n62'>62</a>
<a id='n63' href='#n63'>63</a>
<a id='n64' href='#n64'>64</a>
<a id='n65' href='#n65'>65</a>
<a id='n66' href='#n66'>66</a>
<a id='n67' href='#n67'>67</a>
<a id='n68' href='#n68'>68</a>
<a id='n69' href='#n69'>69</a>
<a id='n70' href='#n70'>70</a>
<a id='n71' href='#n71'>71</a>
<a id='n72' href='#n72'>72</a>
<a id='n73' href='#n73'>73</a>
<a id='n74' href='#n74'>74</a>
<a id='n75' href='#n75'>75</a>
<a id='n76' href='#n76'>76</a>
<a id='n77' href='#n77'>77</a>
<a id='n78' href='#n78'>78</a>
<a id='n79' href='#n79'>79</a>
<a id='n80' href='#n80'>80</a>
<a id='n81' href='#n81'>81</a>
<a id='n82' href='#n82'>82</a>
<a id='n83' href='#n83'>83</a>
<a id='n84' href='#n84'>84</a>
<a id='n85' href='#n85'>85</a>
<a id='n86' href='#n86'>86</a>
<a id='n87' href='#n87'>87</a>
<a id='n88' href='#n88'>88</a>
<a id='n89' href='#n89'>89</a>
<a id='n90' href='#n90'>90</a>
</pre></td>
<td class='lines'><pre><code><span class="hl ppc">#ifndef _GAMMA_DRM_H_</span>
<span class="hl ppc">#define _GAMMA_DRM_H_</span>

<span class="hl kwc">typedef</span> <span class="hl kwb">struct</span> _drm_gamma_tex_region <span class="hl opt">{</span>
	<span class="hl kwb">unsigned char</span> next<span class="hl opt">,</span> prev<span class="hl opt">;</span> <span class="hl com">/* indices to form a circular LRU  */</span>
	<span class="hl kwb">unsigned char</span> in_use<span class="hl opt">;</span>	<span class="hl com">/* owned by a client, or free? */</span>
	<span class="hl kwb">int</span> age<span class="hl opt">;</span>		<span class="hl com">/* tracked by clients to update local LRU&apos;s */</span>
<span class="hl opt">}</span> drm_gamma_tex_region_t<span class="hl opt">;</span>

<span class="hl kwc">typedef</span> <span class="hl kwb">struct</span> <span class="hl opt">{</span>
	<span class="hl kwb">unsigned int</span>	GDeltaMode<span class="hl opt">;</span>
	<span class="hl kwb">unsigned int</span>	GDepthMode<span class="hl opt">;</span>
	<span class="hl kwb">unsigned int</span>	GGeometryMode<span class="hl opt">;</span>
	<span class="hl kwb">unsigned int</span>	GTransformMode<span class="hl opt">;</span>
<span class="hl opt">}</span> drm_gamma_context_regs_t<span class="hl opt">;</span>

<span class="hl kwc">typedef</span> <span class="hl kwb">struct</span> _drm_gamma_sarea <span class="hl opt">{</span>
   	drm_gamma_context_regs_t context_state<span class="hl opt">;</span>

	<span class="hl kwb">unsigned int</span> dirty<span class="hl opt">;</span>


	<span class="hl com">/* Maintain an LRU of contiguous regions of texture space.  If</span>
<span class="hl com">	 * you think you own a region of texture memory, and it has an</span>
<span class="hl com">	 * age different to the one you set, then you are mistaken and</span>
<span class="hl com">	 * it has been stolen by another client.  If global texAge</span>
<span class="hl com">	 * hasn&apos;t changed, there is no need to walk the list.</span>
<span class="hl com">	 *</span>
<span class="hl com">	 * These regions can be used as a proxy for the fine-grained</span>
<span class="hl com">	 * texture information of other clients - by maintaining them</span>
<span class="hl com">	 * in the same lru which is used to age their own textures,</span>
<span class="hl com">	 * clients have an approximate lru for the whole of global</span>
<span class="hl com">	 * texture space, and can make informed decisions as to which</span>
<span class="hl com">	 * areas to kick out.  There is no need to choose whether to</span>
<span class="hl com">	 * kick out your own texture or someone else&apos;s - simply eject</span>
<span class="hl com">	 * them all in LRU order.  </span>
<span class="hl com">	 */</span>
   
<span class="hl ppc">#define GAMMA_NR_TEX_REGIONS 64</span>
	drm_gamma_tex_region_t texList<span class="hl opt">[</span>GAMMA_NR_TEX_REGIONS<span class="hl opt">+</span><span class="hl num">1</span><span class="hl opt">];</span> 
				<span class="hl com">/* Last elt is sentinal */</span>
        <span class="hl kwb">int</span> texAge<span class="hl opt">;</span>		<span class="hl com">/* last time texture was uploaded */</span>
        <span class="hl kwb">int</span> last_enqueue<span class="hl opt">;</span>	<span class="hl com">/* last time a buffer was enqueued */</span>
	<span class="hl kwb">int</span> last_dispatch<span class="hl opt">;</span>	<span class="hl com">/* age of the most recently dispatched buffer */</span>
	<span class="hl kwb">int</span> last_quiescent<span class="hl opt">;</span>     <span class="hl com">/*  */</span>
	<span class="hl kwb">int</span> ctxOwner<span class="hl opt">;</span>		<span class="hl com">/* last context to upload state */</span>

	<span class="hl kwb">int</span> vertex_prim<span class="hl opt">;</span>
<span class="hl opt">}</span> drm_gamma_sarea_t<span class="hl opt">;</span>

<span class="hl com">/* WARNING: If you change any of these defines, make sure to change the</span>
<span class="hl com"> * defines in the Xserver file (xf86drmGamma.h)</span>
<span class="hl com"> */</span>

<span class="hl com">/* Gamma specific ioctls</span>
<span class="hl com"> * The device specific ioctl range is 0x40 to 0x79.</span>
<span class="hl com"> */</span>
<span class="hl ppc">#define DRM_IOCTL_GAMMA_INIT		DRM_IOW( 0x40, drm_gamma_init_t)</span>
<span class="hl ppc">#define DRM_IOCTL_GAMMA_COPY		DRM_IOW( 0x41, drm_gamma_copy_t)</span>

<span class="hl kwc">typedef</span> <span class="hl kwb">struct</span> drm_gamma_copy <span class="hl opt">{</span>
	<span class="hl kwb">unsigned int</span>	DMAOutputAddress<span class="hl opt">;</span>
	<span class="hl kwb">unsigned int</span>	DMAOutputCount<span class="hl opt">;</span>
	<span class="hl kwb">unsigned int</span>	DMAReadGLINTSource<span class="hl opt">;</span>
	<span class="hl kwb">unsigned int</span>	DMARectangleWriteAddress<span class="hl opt">;</span>
	<span class="hl kwb">unsigned int</span>	DMARectangleWriteLinePitch<span class="hl opt">;</span>
	<span class="hl kwb">unsigned int</span>	DMARectangleWrite<span class="hl opt">;</span>
	<span class="hl kwb">unsigned int</span>	DMARectangleReadAddress<span class="hl opt">;</span>
	<span class="hl kwb">unsigned int</span>	DMARectangleReadLinePitch<span class="hl opt">;</span>
	<span class="hl kwb">unsigned int</span>	DMARectangleRead<span class="hl opt">;</span>
	<span class="hl kwb">unsigned int</span>	DMARectangleReadTarget<span class="hl opt">;</span>
<span class="hl opt">}</span> drm_gamma_copy_t<span class="hl opt">;</span>

<span class="hl kwc">typedef</span> <span class="hl kwb">struct</span> drm_gamma_init <span class="hl opt">{</span>
   	<span class="hl kwb">enum</span> <span class="hl opt">{</span>
	   	GAMMA_INIT_DMA    <span class="hl opt">=</span> <span class="hl num">0x01</span><span class="hl opt">,</span>
	       	GAMMA_CLEANUP_DMA <span class="hl opt">=</span> <span class="hl num">0x02</span>
	<span class="hl opt">}</span> func<span class="hl opt">;