summaryrefslogtreecommitdiffstats
path: root/Documentation/DocBook
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-12-15 18:52:01 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-12-15 18:52:01 -0500
commit988adfdffdd43cfd841df734664727993076d7cb (patch)
tree6794f7bba8f595500c2b7d33376ad6614adcfaf2 /Documentation/DocBook
parent26178ec11ef3c6c814bf16a0a2b9c2f7242e3c64 (diff)
parent4e0cd68115620bc3236ff4e58e4c073948629b41 (diff)
Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
Pull drm updates from Dave Airlie: "Highlights: - AMD KFD driver merge This is the AMD HSA interface for exposing a lowlevel interface for GPGPU use. They have an open source userspace built on top of this interface, and the code looks as good as it was going to get out of tree. - Initial atomic modesetting work The need for an atomic modesetting interface to allow userspace to try and send a complete set of modesetting state to the driver has arisen, and been suffering from neglect this past year. No more, the start of the common code and changes for msm driver to use it are in this tree. Ongoing work to get the userspace ioctl finished and the code clean will probably wait until next kernel. - DisplayID 1.3 and tiled monitor exposed to userspace. Tiled monitor property is now exposed for userspace to make use of. - Rockchip drm driver merged. - imx gpu driver moved out of staging Other stuff: - core: panel - MIPI DSI + new panels. expose suggested x/y properties for virtual GPUs - i915: Initial Skylake (SKL) support gen3/4 reset work start of dri1/ums removal infoframe tracking fixes for lots of things. - nouveau: tegra k1 voltage support GM204 modesetting support GT21x memory reclocking work - radeon: CI dpm fixes GPUVM improvements Initial DPM fan control - rcar-du: HDMI support added removed some support for old boards slave encoder driver for Analog Devices adv7511 - exynos: Exynos4415 SoC support - msm: a4xx gpu support atomic helper conversion - tegra: iommu support universal plane support ganged-mode DSI support - sti: HDMI i2c improvements - vmwgfx: some late fixes. - qxl: use suggested x/y properties" * 'drm-next' of git://people.freedesktop.org/~airlied/linux: (969 commits) drm: sti: fix module compilation issue drm/i915: save/restore GMBUS freq across suspend/resume on gen4 drm: sti: correctly cleanup CRTC and planes drm: sti: add HQVDP plane drm: sti: add cursor plane drm: sti: enable auxiliary CRTC drm: sti: fix delay in VTG programming drm: sti: prepare sti_tvout to support auxiliary crtc drm: sti: use drm_crtc_vblank_{on/off} instead of drm_vblank_{on/off} drm: sti: fix hdmi avi infoframe drm: sti: remove event lock while disabling vblank drm: sti: simplify gdp code drm: sti: clear all mixer control drm: sti: remove gpio for HDMI hot plug detection drm: sti: allow to change hdmi ddc i2c adapter drm/doc: Document drm_add_modes_noedid() usage drm/i915: Remove '& 0xffff' from the mask given to WA_REG() drm/i915: Invert the mask and val arguments in wa_add() and WA_REG() drm: Zero out DRM object memory upon cleanup drm/i915/bdw: Fix the write setting up the WIZ hashing mode ...
Diffstat (limited to 'Documentation/DocBook')
-rw-r--r--Documentation/DocBook/drm.tmpl434
1 files changed, 292 insertions, 142 deletions
diff --git a/Documentation/DocBook/drm.tmpl b/Documentation/DocBook/drm.tmpl
index be35bc328b77..4b592ffbafee 100644
--- a/Documentation/DocBook/drm.tmpl
+++ b/Documentation/DocBook/drm.tmpl
@@ -492,10 +492,10 @@ char *date;</synopsis>
492 <sect2> 492 <sect2>
493 <title>The Translation Table Manager (TTM)</title> 493 <title>The Translation Table Manager (TTM)</title>
494 <para> 494 <para>
495 TTM design background and information belongs here. 495 TTM design background and information belongs here.
496 </para> 496 </para>
497 <sect3> 497 <sect3>
498 <title>TTM initialization</title> 498 <title>TTM initialization</title>
499 <warning><para>This section is outdated.</para></warning> 499 <warning><para>This section is outdated.</para></warning>
500 <para> 500 <para>
501 Drivers wishing to support TTM must fill out a drm_bo_driver 501 Drivers wishing to support TTM must fill out a drm_bo_driver
@@ -503,42 +503,42 @@ char *date;</synopsis>
503 pointers for initializing the TTM, allocating and freeing memory, 503 pointers for initializing the TTM, allocating and freeing memory,
504 waiting for command completion and fence synchronization, and memory 504 waiting for command completion and fence synchronization, and memory
505 migration. See the radeon_ttm.c file for an example of usage. 505 migration. See the radeon_ttm.c file for an example of usage.
506 </para> 506 </para>
507 <para> 507 <para>
508 The ttm_global_reference structure is made up of several fields: 508 The ttm_global_reference structure is made up of several fields:
509 </para> 509 </para>
510 <programlisting> 510 <programlisting>
511 struct ttm_global_reference { 511 struct ttm_global_reference {
512 enum ttm_global_types global_type; 512 enum ttm_global_types global_type;
513 size_t size; 513 size_t size;
514 void *object; 514 void *object;
515 int (*init) (struct ttm_global_reference *); 515 int (*init) (struct ttm_global_reference *);
516 void (*release) (struct ttm_global_reference *); 516 void (*release) (struct ttm_global_reference *);
517 }; 517 };
518 </programlisting> 518 </programlisting>
519 <para> 519 <para>
520 There should be one global reference structure for your memory 520 There should be one global reference structure for your memory
521 manager as a whole, and there will be others for each object 521 manager as a whole, and there will be others for each object
522 created by the memory manager at runtime. Your global TTM should 522 created by the memory manager at runtime. Your global TTM should
523 have a type of TTM_GLOBAL_TTM_MEM. The size field for the global 523 have a type of TTM_GLOBAL_TTM_MEM. The size field for the global
524 object should be sizeof(struct ttm_mem_global), and the init and 524 object should be sizeof(struct ttm_mem_global), and the init and
525 release hooks should point at your driver-specific init and 525 release hooks should point at your driver-specific init and
526 release routines, which probably eventually call 526 release routines, which probably eventually call
527 ttm_mem_global_init and ttm_mem_global_release, respectively. 527 ttm_mem_global_init and ttm_mem_global_release, respectively.
528 </para> 528 </para>
529 <para> 529 <para>
530 Once your global TTM accounting structure is set up and initialized 530 Once your global TTM accounting structure is set up and initialized
531 by calling ttm_global_item_ref() on it, 531 by calling ttm_global_item_ref() on it,
532 you need to create a buffer object TTM to 532 you need to create a buffer object TTM to
533 provide a pool for buffer object allocation by clients and the 533 provide a pool for buffer object allocation by clients and the
534 kernel itself. The type of this object should be TTM_GLOBAL_TTM_BO, 534 kernel itself. The type of this object should be TTM_GLOBAL_TTM_BO,
535 and its size should be sizeof(struct ttm_bo_global). Again, 535 and its size should be sizeof(struct ttm_bo_global). Again,
536 driver-specific init and release functions may be provided, 536 driver-specific init and release functions may be provided,
537 likely eventually calling ttm_bo_global_init() and 537 likely eventually calling ttm_bo_global_init() and
538 ttm_bo_global_release(), respectively. Also, like the previous 538 ttm_bo_global_release(), respectively. Also, like the previous
539 object, ttm_global_item_ref() is used to create an initial reference 539 object, ttm_global_item_ref() is used to create an initial reference
540 count for the TTM, which will call your initialization function. 540 count for the TTM, which will call your initialization function.
541 </para> 541 </para>
542 </sect3> 542 </sect3>
543 </sect2> 543 </sect2>
544 <sect2 id="drm-gem"> 544 <sect2 id="drm-gem">
@@ -566,19 +566,19 @@ char *date;</synopsis>
566 using driver-specific ioctls. 566 using driver-specific ioctls.
567 </para> 567 </para>
568 <para> 568 <para>
569 On a fundamental level, GEM involves several operations: 569 On a fundamental level, GEM involves several operations:
570 <itemizedlist> 570 <itemizedlist>
571 <listitem>Memory allocation and freeing</listitem> 571 <listitem>Memory allocation and freeing</listitem>
572 <listitem>Command execution</listitem> 572 <listitem>Command execution</listitem>
573 <listitem>Aperture management at command execution time</listitem> 573 <listitem>Aperture management at command execution time</listitem>
574 </itemizedlist> 574 </itemizedlist>
575 Buffer object allocation is relatively straightforward and largely 575 Buffer object allocation is relatively straightforward and largely
576 provided by Linux's shmem layer, which provides memory to back each 576 provided by Linux's shmem layer, which provides memory to back each
577 object. 577 object.
578 </para> 578 </para>
579 <para> 579 <para>
580 Device-specific operations, such as command execution, pinning, buffer 580 Device-specific operations, such as command execution, pinning, buffer
581 read &amp; write, mapping, and domain ownership transfers are left to 581 read &amp; write, mapping, and domain ownership transfers are left to
582 driver-specific ioctls. 582 driver-specific ioctls.
583 </para> 583 </para>
584 <sect3> 584 <sect3>
@@ -738,16 +738,16 @@ char *date;</synopsis>
738 respectively. The conversion is handled by the DRM core without any 738 respectively. The conversion is handled by the DRM core without any
739 driver-specific support. 739 driver-specific support.
740 </para> 740 </para>
741 <para> 741 <para>
742 GEM also supports buffer sharing with dma-buf file descriptors through 742 GEM also supports buffer sharing with dma-buf file descriptors through
743 PRIME. GEM-based drivers must use the provided helpers functions to 743 PRIME. GEM-based drivers must use the provided helpers functions to
744 implement the exporting and importing correctly. See <xref linkend="drm-prime-support" />. 744 implement the exporting and importing correctly. See <xref linkend="drm-prime-support" />.
745 Since sharing file descriptors is inherently more secure than the 745 Since sharing file descriptors is inherently more secure than the
746 easily guessable and global GEM names it is the preferred buffer 746 easily guessable and global GEM names it is the preferred buffer
747 sharing mechanism. Sharing buffers through GEM names is only supported 747 sharing mechanism. Sharing buffers through GEM names is only supported
748 for legacy userspace. Furthermore PRIME also allows cross-device 748 for legacy userspace. Furthermore PRIME also allows cross-device
749 buffer sharing since it is based on dma-bufs. 749 buffer sharing since it is based on dma-bufs.
750 </para> 750 </para>
751 </sect3> 751 </sect3>
752 <sect3 id="drm-gem-objects-mapping"> 752 <sect3 id="drm-gem-objects-mapping">
753 <title>GEM Objects Mapping</title> 753 <title>GEM Objects Mapping</title>
@@ -852,7 +852,7 @@ char *date;</synopsis>
852 <sect3> 852 <sect3>
853 <title>Command Execution</title> 853 <title>Command Execution</title>
854 <para> 854 <para>
855 Perhaps the most important GEM function for GPU devices is providing a 855 Perhaps the most important GEM function for GPU devices is providing a
856 command execution interface to clients. Client programs construct 856 command execution interface to clients. Client programs construct
857 command buffers containing references to previously allocated memory 857 command buffers containing references to previously allocated memory
858 objects, and then submit them to GEM. At that point, GEM takes care to 858 objects, and then submit them to GEM. At that point, GEM takes care to
@@ -874,95 +874,101 @@ char *date;</synopsis>
874 <title>GEM Function Reference</title> 874 <title>GEM Function Reference</title>
875!Edrivers/gpu/drm/drm_gem.c 875!Edrivers/gpu/drm/drm_gem.c
876 </sect3> 876 </sect3>
877 </sect2> 877 </sect2>
878 <sect2> 878 <sect2>
879 <title>VMA Offset Manager</title> 879 <title>VMA Offset Manager</title>
880!Pdrivers/gpu/drm/drm_vma_manager.c vma offset manager 880!Pdrivers/gpu/drm/drm_vma_manager.c vma offset manager
881!Edrivers/gpu/drm/drm_vma_manager.c 881!Edrivers/gpu/drm/drm_vma_manager.c
882!Iinclude/drm/drm_vma_manager.h 882!Iinclude/drm/drm_vma_manager.h
883 </sect2> 883 </sect2>
884 <sect2 id="drm-prime-support"> 884 <sect2 id="drm-prime-support">
885 <title>PRIME Buffer Sharing</title> 885 <title>PRIME Buffer Sharing</title>
886 <para> 886 <para>
887 PRIME is the cross device buffer sharing framework in drm, originally 887 PRIME is the cross device buffer sharing framework in drm, originally
888 created for the OPTIMUS range of multi-gpu platforms. To userspace 888 created for the OPTIMUS range of multi-gpu platforms. To userspace
889 PRIME buffers are dma-buf based file descriptors. 889 PRIME buffers are dma-buf based file descriptors.
890 </para> 890 </para>
891 <sect3> 891 <sect3>
892 <title>Overview and Driver Interface</title> 892 <title>Overview and Driver Interface</title>
893 <para> 893 <para>
894 Similar to GEM global names, PRIME file descriptors are 894 Similar to GEM global names, PRIME file descriptors are
895 also used to share buffer objects across processes. They offer 895 also used to share buffer objects across processes. They offer
896 additional security: as file descriptors must be explicitly sent over 896 additional security: as file descriptors must be explicitly sent over
897 UNIX domain sockets to be shared between applications, they can't be 897 UNIX domain sockets to be shared between applications, they can't be
898 guessed like the globally unique GEM names. 898 guessed like the globally unique GEM names.
899 </para> 899 </para>
900 <para> 900 <para>
901 Drivers that support the PRIME 901 Drivers that support the PRIME
902 API must set the DRIVER_PRIME bit in the struct 902 API must set the DRIVER_PRIME bit in the struct
903 <structname>drm_driver</structname> 903 <structname>drm_driver</structname>
904 <structfield>driver_features</structfield> field, and implement the 904 <structfield>driver_features</structfield> field, and implement the
905 <methodname>prime_handle_to_fd</methodname> and 905 <methodname>prime_handle_to_fd</methodname> and
906 <methodname>prime_fd_to_handle</methodname> operations. 906 <methodname>prime_fd_to_handle</methodname> operations.
907 </para> 907 </para>
908 <para> 908 <para>
909 <synopsis>int (*prime_handle_to_fd)(struct drm_device *dev, 909 <synopsis>int (*prime_handle_to_fd)(struct drm_device *dev,
910 struct drm_file *file_priv, uint32_t handle, 910 struct drm_file *file_priv, uint32_t handle,
911 uint32_t flags, int *prime_fd); 911 uint32_t flags, int *prime_fd);
912int (*prime_fd_to_handle)(struct drm_device *dev, 912int (*prime_fd_to_handle)(struct drm_device *dev,
913 struct drm_file *file_priv, int prime_fd, 913 struct drm_file *file_priv, int prime_fd,
914 uint32_t *handle);</synopsis> 914 uint32_t *handle);</synopsis>
915 Those two operations convert a handle to a PRIME file descriptor and 915 Those two operations convert a handle to a PRIME file descriptor and
916 vice versa. Drivers must use the kernel dma-buf buffer sharing framework 916 vice versa. Drivers must use the kernel dma-buf buffer sharing framework
917 to manage the PRIME file descriptors. Similar to the mode setting 917 to manage the PRIME file descriptors. Similar to the mode setting
918 API PRIME is agnostic to the underlying buffer object manager, as 918 API PRIME is agnostic to the underlying buffer object manager, as
919 long as handles are 32bit unsigned integers. 919 long as handles are 32bit unsigned integers.
920 </para> 920 </para>
921 <para> 921 <para>
922 While non-GEM drivers must implement the operations themselves, GEM 922 While non-GEM drivers must implement the operations themselves, GEM
923 drivers must use the <function>drm_gem_prime_handle_to_fd</function> 923 drivers must use the <function>drm_gem_prime_handle_to_fd</function>
924 and <function>drm_gem_prime_fd_to_handle</function> helper functions. 924 and <function>drm_gem_prime_fd_to_handle</function> helper functions.
925 Those helpers rely on the driver 925 Those helpers rely on the driver
926 <methodname>gem_prime_export</methodname> and 926 <methodname>gem_prime_export</methodname> and
927 <methodname>gem_prime_import</methodname> operations to create a dma-buf 927 <methodname>gem_prime_import</methodname> operations to create a dma-buf
928 instance from a GEM object (dma-buf exporter role) and to create a GEM 928 instance from a GEM object (dma-buf exporter role) and to create a GEM
929 object from a dma-buf instance (dma-buf importer role). 929 object from a dma-buf instance (dma-buf importer role).
930 </para> 930 </para>
931 <para> 931 <para>
932 <synopsis>struct dma_buf * (*gem_prime_export)(struct drm_device *dev, 932 <synopsis>struct dma_buf * (*gem_prime_export)(struct drm_device *dev,
933 struct drm_gem_object *obj, 933 struct drm_gem_object *obj,
934 int flags); 934 int flags);
935struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev, 935struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev,
936 struct dma_buf *dma_buf);</synopsis> 936 struct dma_buf *dma_buf);</synopsis>
937 These two operations are mandatory for GEM drivers that support 937 These two operations are mandatory for GEM drivers that support
938 PRIME. 938 PRIME.
939 </para> 939 </para>
940 </sect3>
941 <sect3>
942 <title>PRIME Helper Functions</title>
943!Pdrivers/gpu/drm/drm_prime.c PRIME Helpers
944 </sect3> 940 </sect3>
945 </sect2> 941 <sect3>
946 <sect2> 942 <title>PRIME Helper Functions</title>
947 <title>PRIME Function References</title> 943!Pdrivers/gpu/drm/drm_prime.c PRIME Helpers
944 </sect3>
945 </sect2>
946 <sect2>
947 <title>PRIME Function References</title>
948!Edrivers/gpu/drm/drm_prime.c 948!Edrivers/gpu/drm/drm_prime.c
949 </sect2> 949 </sect2>
950 <sect2> 950 <sect2>
951 <title>DRM MM Range Allocator</title> 951 <title>DRM MM Range Allocator</title>
952 <sect3> 952 <sect3>
953 <title>Overview</title> 953 <title>Overview</title>
954!Pdrivers/gpu/drm/drm_mm.c Overview 954!Pdrivers/gpu/drm/drm_mm.c Overview
955 </sect3> 955 </sect3>
956 <sect3> 956 <sect3>
957 <title>LRU Scan/Eviction Support</title> 957 <title>LRU Scan/Eviction Support</title>
958!Pdrivers/gpu/drm/drm_mm.c lru scan roaster 958!Pdrivers/gpu/drm/drm_mm.c lru scan roaster
959 </sect3> 959 </sect3>
960 </sect2> 960 </sect2>
961 <sect2> 961 <sect2>
962 <title>DRM MM Range Allocator Function References</title> 962 <title>DRM MM Range Allocator Function References</title>
963!Edrivers/gpu/drm/drm_mm.c 963!Edrivers/gpu/drm/drm_mm.c
964!Iinclude/drm/drm_mm.h 964!Iinclude/drm/drm_mm.h
965 </sect2> 965 </sect2>
966 <sect2>
967 <title>CMA Helper Functions Reference</title>
968!Pdrivers/gpu/drm/drm_gem_cma_helper.c cma helpers
969!Edrivers/gpu/drm/drm_gem_cma_helper.c
970!Iinclude/drm/drm_gem_cma_helper.h
971 </sect2>
966 </sect1> 972 </sect1>
967 973
968 <!-- Internals: mode setting --> 974 <!-- Internals: mode setting -->
@@ -996,6 +1002,10 @@ int max_width, max_height;</synopsis>
996!Edrivers/gpu/drm/drm_modes.c 1002!Edrivers/gpu/drm/drm_modes.c
997 </sect2> 1003 </sect2>
998 <sect2> 1004 <sect2>
1005 <title>Atomic Mode Setting Function Reference</title>
1006!Edrivers/gpu/drm/drm_atomic.c
1007 </sect2>
1008 <sect2>
999 <title>Frame Buffer Creation</title> 1009 <title>Frame Buffer Creation</title>
1000 <synopsis>struct drm_framebuffer *(*fb_create)(struct drm_device *dev, 1010 <synopsis>struct drm_framebuffer *(*fb_create)(struct drm_device *dev,
1001 struct drm_file *file_priv, 1011 struct drm_file *file_priv,
@@ -1827,6 +1837,10 @@ void intel_crt_init(struct drm_device *dev)
1827!Edrivers/gpu/drm/drm_crtc.c 1837!Edrivers/gpu/drm/drm_crtc.c
1828 </sect2> 1838 </sect2>
1829 <sect2> 1839 <sect2>
1840 <title>KMS Data Structures</title>
1841!Iinclude/drm/drm_crtc.h
1842 </sect2>
1843 <sect2>
1830 <title>KMS Locking</title> 1844 <title>KMS Locking</title>
1831!Pdrivers/gpu/drm/drm_modeset_lock.c kms locking 1845!Pdrivers/gpu/drm/drm_modeset_lock.c kms locking
1832!Iinclude/drm/drm_modeset_lock.h 1846!Iinclude/drm/drm_modeset_lock.h
@@ -1933,10 +1947,16 @@ void intel_crt_init(struct drm_device *dev)
1933 and then retrieves a list of modes by calling the connector 1947 and then retrieves a list of modes by calling the connector
1934 <methodname>get_modes</methodname> helper operation. 1948 <methodname>get_modes</methodname> helper operation.
1935 </para> 1949 </para>
1950 <para>
1951 If the helper operation returns no mode, and if the connector status
1952 is connector_status_connected, standard VESA DMT modes up to
1953 1024x768 are automatically added to the modes list by a call to
1954 <function>drm_add_modes_noedid</function>.
1955 </para>
1936 <para> 1956 <para>
1937 The function filters out modes larger than 1957 The function then filters out modes larger than
1938 <parameter>max_width</parameter> and <parameter>max_height</parameter> 1958 <parameter>max_width</parameter> and <parameter>max_height</parameter>
1939 if specified. It then calls the optional connector 1959 if specified. It finally calls the optional connector
1940 <methodname>mode_valid</methodname> helper operation for each mode in 1960 <methodname>mode_valid</methodname> helper operation for each mode in
1941 the probed list to check whether the mode is valid for the connector. 1961 the probed list to check whether the mode is valid for the connector.
1942 </para> 1962 </para>
@@ -2076,12 +2096,20 @@ void intel_crt_init(struct drm_device *dev)
2076 <synopsis>int (*get_modes)(struct drm_connector *connector);</synopsis> 2096 <synopsis>int (*get_modes)(struct drm_connector *connector);</synopsis>
2077 <para> 2097 <para>
2078 Fill the connector's <structfield>probed_modes</structfield> list 2098 Fill the connector's <structfield>probed_modes</structfield> list
2079 by parsing EDID data with <function>drm_add_edid_modes</function> or 2099 by parsing EDID data with <function>drm_add_edid_modes</function>,
2080 calling <function>drm_mode_probed_add</function> directly for every 2100 adding standard VESA DMT modes with <function>drm_add_modes_noedid</function>,
2101 or calling <function>drm_mode_probed_add</function> directly for every
2081 supported mode and return the number of modes it has detected. This 2102 supported mode and return the number of modes it has detected. This
2082 operation is mandatory. 2103 operation is mandatory.
2083 </para> 2104 </para>
2084 <para> 2105 <para>
2106 Note that the caller function will automatically add standard VESA
2107 DMT modes up to 1024x768 if the <methodname>get_modes</methodname>
2108 helper operation returns no mode and if the connector status is
2109 connector_status_connected. There is no need to call
2110 <function>drm_add_edid_modes</function> manually in that case.
2111 </para>
2112 <para>
2085 When adding modes manually the driver creates each mode with a call to 2113 When adding modes manually the driver creates each mode with a call to
2086 <function>drm_mode_create</function> and must fill the following fields. 2114 <function>drm_mode_create</function> and must fill the following fields.
2087 <itemizedlist> 2115 <itemizedlist>
@@ -2278,7 +2306,7 @@ void intel_crt_init(struct drm_device *dev)
2278 <function>drm_helper_probe_single_connector_modes</function>. 2306 <function>drm_helper_probe_single_connector_modes</function>.
2279 </para> 2307 </para>
2280 <para> 2308 <para>
2281 When parsing EDID data, <function>drm_add_edid_modes</function> fill the 2309 When parsing EDID data, <function>drm_add_edid_modes</function> fills the
2282 connector <structfield>display_info</structfield> 2310 connector <structfield>display_info</structfield>
2283 <structfield>width_mm</structfield> and 2311 <structfield>width_mm</structfield> and
2284 <structfield>height_mm</structfield> fields. When creating modes 2312 <structfield>height_mm</structfield> fields. When creating modes
@@ -2316,8 +2344,26 @@ void intel_crt_init(struct drm_device *dev)
2316 </itemizedlist> 2344 </itemizedlist>
2317 </sect2> 2345 </sect2>
2318 <sect2> 2346 <sect2>
2347 <title>Atomic Modeset Helper Functions Reference</title>
2348 <sect3>
2349 <title>Overview</title>
2350!Pdrivers/gpu/drm/drm_atomic_helper.c overview
2351 </sect3>
2352 <sect3>
2353 <title>Implementing Asynchronous Atomic Commit</title>
2354!Pdrivers/gpu/drm/drm_atomic_helper.c implementing async commit
2355 </sect3>
2356 <sect3>
2357 <title>Atomic State Reset and Initialization</title>
2358!Pdrivers/gpu/drm/drm_atomic_helper.c atomic state reset and initialization
2359 </sect3>
2360!Iinclude/drm/drm_atomic_helper.h
2361!Edrivers/gpu/drm/drm_atomic_helper.c
2362 </sect2>
2363 <sect2>
2319 <title>Modeset Helper Functions Reference</title> 2364 <title>Modeset Helper Functions Reference</title>
2320!Edrivers/gpu/drm/drm_crtc_helper.c 2365!Edrivers/gpu/drm/drm_crtc_helper.c
2366!Pdrivers/gpu/drm/drm_crtc_helper.c overview
2321 </sect2> 2367 </sect2>
2322 <sect2> 2368 <sect2>
2323 <title>Output Probing Helper Functions Reference</title> 2369 <title>Output Probing Helper Functions Reference</title>
@@ -2343,6 +2389,12 @@ void intel_crt_init(struct drm_device *dev)
2343!Edrivers/gpu/drm/drm_dp_mst_topology.c 2389!Edrivers/gpu/drm/drm_dp_mst_topology.c
2344 </sect2> 2390 </sect2>
2345 <sect2> 2391 <sect2>
2392 <title>MIPI DSI Helper Functions Reference</title>
2393!Pdrivers/gpu/drm/drm_mipi_dsi.c dsi helpers
2394!Iinclude/drm/drm_mipi_dsi.h
2395!Edrivers/gpu/drm/drm_mipi_dsi.c
2396 </sect2>
2397 <sect2>
2346 <title>EDID Helper Functions Reference</title> 2398 <title>EDID Helper Functions Reference</title>
2347!Edrivers/gpu/drm/drm_edid.c 2399!Edrivers/gpu/drm/drm_edid.c
2348 </sect2> 2400 </sect2>
@@ -2371,7 +2423,12 @@ void intel_crt_init(struct drm_device *dev)
2371 </sect2> 2423 </sect2>
2372 <sect2> 2424 <sect2>
2373 <title id="drm-kms-planehelpers">Plane Helper Reference</title> 2425 <title id="drm-kms-planehelpers">Plane Helper Reference</title>
2374!Edrivers/gpu/drm/drm_plane_helper.c Plane Helpers 2426!Edrivers/gpu/drm/drm_plane_helper.c
2427!Pdrivers/gpu/drm/drm_plane_helper.c overview
2428 </sect2>
2429 <sect2>
2430 <title>Tile group</title>
2431!Pdrivers/gpu/drm/drm_crtc.c Tile group
2375 </sect2> 2432 </sect2>
2376 </sect1> 2433 </sect1>
2377 2434
@@ -2507,8 +2564,8 @@ void intel_crt_init(struct drm_device *dev)
2507 <td valign="top" >Description/Restrictions</td> 2564 <td valign="top" >Description/Restrictions</td>
2508 </tr> 2565 </tr>
2509 <tr> 2566 <tr>
2510 <td rowspan="21" valign="top" >DRM</td> 2567 <td rowspan="25" valign="top" >DRM</td>
2511 <td rowspan="2" valign="top" >Generic</td> 2568 <td rowspan="4" valign="top" >Generic</td>
2512 <td valign="top" >“EDID”</td> 2569 <td valign="top" >“EDID”</td>
2513 <td valign="top" >BLOB | IMMUTABLE</td> 2570 <td valign="top" >BLOB | IMMUTABLE</td>
2514 <td valign="top" >0</td> 2571 <td valign="top" >0</td>
@@ -2523,6 +2580,20 @@ void intel_crt_init(struct drm_device *dev)
2523 <td valign="top" >Contains DPMS operation mode value.</td> 2580 <td valign="top" >Contains DPMS operation mode value.</td>
2524 </tr> 2581 </tr>
2525 <tr> 2582 <tr>
2583 <td valign="top" >“PATH”</td>
2584 <td valign="top" >BLOB | IMMUTABLE</td>
2585 <td valign="top" >0</td>
2586 <td valign="top" >Connector</td>
2587 <td valign="top" >Contains topology path to a connector.</td>
2588 </tr>
2589 <tr>
2590 <td valign="top" >“TILE”</td>
2591 <td valign="top" >BLOB | IMMUTABLE</td>
2592 <td valign="top" >0</td>
2593 <td valign="top" >Connector</td>
2594 <td valign="top" >Contains tiling information for a connector.</td>
2595 </tr>
2596 <tr>
2526 <td rowspan="1" valign="top" >Plane</td> 2597 <td rowspan="1" valign="top" >Plane</td>
2527 <td valign="top" >“type”</td> 2598 <td valign="top" >“type”</td>
2528 <td valign="top" >ENUM | IMMUTABLE</td> 2599 <td valign="top" >ENUM | IMMUTABLE</td>
@@ -2638,6 +2709,21 @@ void intel_crt_init(struct drm_device *dev)
2638 <td valign="top" >TBD</td> 2709 <td valign="top" >TBD</td>
2639 </tr> 2710 </tr>
2640 <tr> 2711 <tr>
2712 <td rowspan="2" valign="top" >Virtual GPU</td>
2713 <td valign="top" >“suggested X”</td>
2714 <td valign="top" >RANGE</td>
2715 <td valign="top" >Min=0, Max=0xffffffff</td>
2716 <td valign="top" >Connector</td>
2717 <td valign="top" >property to suggest an X offset for a connector</td>
2718 </tr>
2719 <tr>
2720 <td valign="top" >“suggested Y”</td>
2721 <td valign="top" >RANGE</td>
2722 <td valign="top" >Min=0, Max=0xffffffff</td>
2723 <td valign="top" >Connector</td>
2724 <td valign="top" >property to suggest an Y offset for a connector</td>
2725 </tr>
2726 <tr>
2641 <td rowspan="3" valign="top" >Optional</td> 2727 <td rowspan="3" valign="top" >Optional</td>
2642 <td valign="top" >“scaling mode”</td> 2728 <td valign="top" >“scaling mode”</td>
2643 <td valign="top" >ENUM</td> 2729 <td valign="top" >ENUM</td>
@@ -3788,6 +3874,26 @@ int num_ioctls;</synopsis>
3788 those have basic support through the gma500 drm driver. 3874 those have basic support through the gma500 drm driver.
3789 </para> 3875 </para>
3790 <sect1> 3876 <sect1>
3877 <title>Core Driver Infrastructure</title>
3878 <para>
3879 This section covers core driver infrastructure used by both the display
3880 and the GEM parts of the driver.
3881 </para>
3882 <sect2>
3883 <title>Runtime Power Management</title>
3884!Pdrivers/gpu/drm/i915/intel_runtime_pm.c runtime pm
3885!Idrivers/gpu/drm/i915/intel_runtime_pm.c
3886 </sect2>
3887 <sect2>
3888 <title>Interrupt Handling</title>
3889!Pdrivers/gpu/drm/i915/i915_irq.c interrupt handling
3890!Fdrivers/gpu/drm/i915/i915_irq.c intel_irq_init intel_irq_init_hw intel_hpd_init
3891!Fdrivers/gpu/drm/i915/i915_irq.c intel_irq_fini
3892!Fdrivers/gpu/drm/i915/i915_irq.c intel_runtime_pm_disable_interrupts
3893!Fdrivers/gpu/drm/i915/i915_irq.c intel_runtime_pm_enable_interrupts
3894 </sect2>
3895 </sect1>
3896 <sect1>
3791 <title>Display Hardware Handling</title> 3897 <title>Display Hardware Handling</title>
3792 <para> 3898 <para>
3793 This section covers everything related to the display hardware including 3899 This section covers everything related to the display hardware including
@@ -3804,6 +3910,18 @@ int num_ioctls;</synopsis>
3804 </para> 3910 </para>
3805 </sect2> 3911 </sect2>
3806 <sect2> 3912 <sect2>
3913 <title>Frontbuffer Tracking</title>
3914!Pdrivers/gpu/drm/i915/intel_frontbuffer.c frontbuffer tracking
3915!Idrivers/gpu/drm/i915/intel_frontbuffer.c
3916!Fdrivers/gpu/drm/i915/intel_drv.h intel_frontbuffer_flip
3917!Fdrivers/gpu/drm/i915/i915_gem.c i915_gem_track_fb
3918 </sect2>
3919 <sect2>
3920 <title>Display FIFO Underrun Reporting</title>
3921!Pdrivers/gpu/drm/i915/intel_fifo_underrun.c fifo underrun handling
3922!Idrivers/gpu/drm/i915/intel_fifo_underrun.c
3923 </sect2>
3924 <sect2>
3807 <title>Plane Configuration</title> 3925 <title>Plane Configuration</title>
3808 <para> 3926 <para>
3809 This section covers plane configuration and composition with the 3927 This section covers plane configuration and composition with the
@@ -3823,6 +3941,16 @@ int num_ioctls;</synopsis>
3823 </para> 3941 </para>
3824 </sect2> 3942 </sect2>
3825 <sect2> 3943 <sect2>
3944 <title>High Definition Audio</title>
3945!Pdrivers/gpu/drm/i915/intel_audio.c High Definition Audio over HDMI and Display Port
3946!Idrivers/gpu/drm/i915/intel_audio.c
3947 </sect2>
3948 <sect2>
3949 <title>Panel Self Refresh PSR (PSR/SRD)</title>
3950!Pdrivers/gpu/drm/i915/intel_psr.c Panel Self Refresh (PSR/SRD)
3951!Idrivers/gpu/drm/i915/intel_psr.c
3952 </sect2>
3953 <sect2>
3826 <title>DPIO</title> 3954 <title>DPIO</title>
3827!Pdrivers/gpu/drm/i915/i915_reg.h DPIO 3955!Pdrivers/gpu/drm/i915/i915_reg.h DPIO
3828 <table id="dpiox2"> 3956 <table id="dpiox2">
@@ -3931,6 +4059,28 @@ int num_ioctls;</synopsis>
3931!Idrivers/gpu/drm/i915/intel_lrc.c 4059!Idrivers/gpu/drm/i915/intel_lrc.c
3932 </sect2> 4060 </sect2>
3933 </sect1> 4061 </sect1>
4062
4063 <sect1>
4064 <title> Tracing </title>
4065 <para>
4066 This sections covers all things related to the tracepoints implemented in
4067 the i915 driver.
4068 </para>
4069 <sect2>
4070 <title> i915_ppgtt_create and i915_ppgtt_release </title>
4071!Pdrivers/gpu/drm/i915/i915_trace.h i915_ppgtt_create and i915_ppgtt_release tracepoints
4072 </sect2>
4073 <sect2>
4074 <title> i915_context_create and i915_context_free </title>
4075!Pdrivers/gpu/drm/i915/i915_trace.h i915_context_create and i915_context_free tracepoints
4076 </sect2>
4077 <sect2>
4078 <title> switch_mm </title>
4079!Pdrivers/gpu/drm/i915/i915_trace.h switch_mm tracepoint
4080 </sect2>
4081 </sect1>
4082
3934 </chapter> 4083 </chapter>
4084!Cdrivers/gpu/drm/i915/i915_irq.c
3935</part> 4085</part>
3936</book> 4086</book>