€•SŒsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ%/translations/zh_CN/gpu/drm-internals”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/zh_TW/gpu/drm-internals”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/it_IT/gpu/drm-internals”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/ja_JP/gpu/drm-internals”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/ko_KR/gpu/drm-internals”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/pt_BR/gpu/drm-internals”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/sp_SP/gpu/drm-internals”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ DRM Internals”h]”hŒ DRM Internals”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œid1”uh1hºhh·h²hh³Œ?/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals.rst”h´KubhŒ paragraph”“”)�”}”(hŒ’This chapter documents DRM internals relevant to driver authors and developers working to add support for the latest features to existing drivers.”h]”hŒ’This chapter documents DRM internals relevant to driver authors and developers working to add support for the latest features to existing drivers.”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´Khh·h²hubhÎ)�”}”(hXFirst, we go over some typical driver initialization requirements, like setting up command buffers, creating an initial output configuration, and initializing core services. Subsequent sections cover core internals in more detail, providing implementation notes and examples.”h]”hXFirst, we go over some typical driver initialization requirements, like setting up command buffers, creating an initial output configuration, and initializing core services. Subsequent sections cover core internals in more detail, providing implementation notes and examples.”…”�”}”(hhÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´K hh·h²hubhÎ)�”}”(hXdThe DRM layer provides several services to graphics drivers, many of them driven by the application interfaces it provides through libdrm, the library that wraps most of the DRM ioctls. These include vblank event handling, memory management, output management, framebuffer management, command submission & fencing, suspend/resume support, and DMA services.”h]”hXdThe DRM layer provides several services to graphics drivers, many of them driven by the application interfaces it provides through libdrm, the library that wraps most of the DRM ioctls. These include vblank event handling, memory management, output management, framebuffer management, command submission & fencing, suspend/resume support, and DMA services.”…”�”}”(hhëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´Khh·h²hubhŒtopic”“”)�”}”(hŒ Contents ”h]”(h»)�”}”(hŒContents”h]”hŒContents”…”�”}”(hhÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhûh³hÌh´KubhŒ bullet_list”“”)�”}”(hhh]”hŒ list_item”“”)�”}”(hhh]”(hÎ)�”}”(hhh]”hŒ reference”“”)�”}”(hhh]”hŒ DRM Internals”…”�”}”(hjh²hh³Nh´Nubah}”(h]”hËah ]”h"]”h$]”h&]”Œrefid”Œ drm-internals”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjubj)�”}”(hhh]”(j)�”}”(hhh]”(hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒDriver Initialization”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”Œid2”ah ]”h"]”h$]”h&]”Œrefid”Œdriver-initialization”uh1jhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj4ubj)�”}”(hhh]”(j)�”}”(hhh]”(hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒDriver Information”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”Œid3”ah ]”h"]”h$]”h&]”Œrefid”Œdriver-information”uh1jhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjSubj)�”}”(hhh]”(j)�”}”(hhh]”hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒMajor, Minor and Patchlevel”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”Œid4”ah ]”h"]”h$]”h&]”Œrefid”Œmajor-minor-and-patchlevel”uh1jhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjoubj)�”}”(hhh]”hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒName and Description”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”Œid5”ah ]”h"]”h$]”h&]”Œrefid”Œname-and-description”uh1jhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubj)�”}”(hhh]”hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒModule Initialization”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”Œid6”ah ]”h"]”h$]”h&]”Œrefid”Œmodule-initialization”uh1jhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubj)�”}”(hhh]”(hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒ#Device Instance and Driver Handling”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”Œid7”ah ]”h"]”h$]”h&]”Œrefid”Œ#device-instance-and-driver-handling”uh1jhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjäubj)�”}”(hhh]”j)�”}”(hhh]”hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒDisplay driver example”…”�”}”(hj h²hh³Nh´Nubah}”(h]”Œid8”ah ]”h"]”h$]”h&]”Œrefid”Œdisplay-driver-example”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjäubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubj)�”}”(hhh]”(hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒ Driver Load”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”Œid9”ah ]”h"]”h$]”h&]”Œrefid”Œ driver-load”uh1jhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj1ubj)�”}”(hhh]”(j)�”}”(hhh]”hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒComponent Helper Usage”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”Œid10”ah ]”h"]”h$]”h&]”Œrefid”Œcomponent-helper-usage”uh1jhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMubj)�”}”(hhh]”hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒMemory Manager Initialization”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”Œid11”ah ]”h"]”h$]”h&]”Œrefid”Œmemory-manager-initialization”uh1jhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMubj)�”}”(hhh]”hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒ"Miscellaneous Device Configuration”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”Œid12”ah ]”h"]”h$]”h&]”Œrefid”Œ"miscellaneous-device-configuration”uh1jhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubj)�”}”(hhh]”hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒManaged Resources”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”Œid13”ah ]”h"]”h$]”h&]”Œrefid”Œmanaged-resources”uh1jhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj1ubj)�”}”(hhh]”(hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒ&Open/Close, File Operations and IOCTLs”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”Œid14”ah ]”h"]”h$]”h&]”Œrefid”Œ%open-close-file-operations-and-ioctls”uh1jhjóubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjðubj)�”}”(hhh]”j)�”}”(hhh]”hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒFile Operations”…”�”}”(hjh²hh³Nh´Nubah}”(h]”Œid15”ah ]”h"]”h$]”h&]”Œrefid”Œfile-operations”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj1ubj)�”}”(hhh]”(hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒMisc Utilities”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”Œid16”ah ]”h"]”h$]”h&]”Œrefid”Œmisc-utilities”uh1jhj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj=ubj)�”}”(hhh]”(j)�”}”(hhh]”hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒPrinter”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”Œid17”ah ]”h"]”h$]”h&]”Œrefid”Œprinter”uh1jhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjYubj)�”}”(hhh]”hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒ Utilities”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”Œid18”ah ]”h"]”h$]”h&]”Œrefid”Œ utilities”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj1ubj)�”}”(hhh]”(hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒ Unit testing”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”Œid19”ah ]”h"]”h$]”h&]”Œrefid”Œ unit-testing”uh1jhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj¬ubj)�”}”(hhh]”j)�”}”(hhh]”(hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒKUnit”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”Œid20”ah ]”h"]”h$]”h&]”Œrefid”Œkunit”uh1jhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjËubj)�”}”(hhh]”(j)�”}”(hhh]”hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒHow to run the tests?”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”Œid21”ah ]”h"]”h$]”h&]”Œrefid”Œhow-to-run-the-tests”uh1jhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjçubj)�”}”(hhh]”hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒKUnit Coverage Rules”…”�”}”(hjh²hh³Nh´Nubah}”(h]”Œid22”ah ]”h"]”h$]”h&]”Œrefid”Œkunit-coverage-rules”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjçubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj1ubj)�”}”(hhh]”(hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒLegacy Support Code”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”Œid23”ah ]”h"]”h$]”h&]”Œrefid”Œlegacy-support-code”uh1jhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjFubj)�”}”(hhh]”(j)�”}”(hhh]”hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒLegacy Suspend/Resume”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”Œid24”ah ]”h"]”h$]”h&]”Œrefid”Œlegacy-suspend-resume”uh1jhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjbubj)�”}”(hhh]”hÎ)�”}”(hhh]”j)�”}”(hhh]”hŒLegacy DMA Services”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”Œid25”ah ]”h"]”h$]”h&]”Œrefid”Œlegacy-dma-services”uh1jhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hhûh²hh³Nh´Nubeh}”(h]”Œcontents”ah ]”Œcontents”ah"]”Œcontents”ah$]”h&]”uh1hùh³hÌh´Khh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒDriver Initialization”h]”hŒDriver Initialization”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊjCuh1hºhjÐh²hh³hÌh´KubhÎ)�”}”(hXdAt the core of every DRM driver is a :c:type:`struct drm_driver ` structure. Drivers typically statically initialize a drm_driver structure, and then pass it to drm_dev_alloc() to allocate a device instance. After the device instance is fully initialized it can be registered (which makes it accessible from userspace) using drm_dev_register().”h]”(hŒ%At the core of every DRM driver is a ”…”�”}”(hjáh²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct drm_driver `”h]”hŒliteral”“”)�”}”(hjëh]”hŒstruct drm_driver”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œc”Œc-type”eh"]”h$]”h&]”uh1jíhjéubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œgpu/drm-internals”Œ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰Œ reftarget”Œ drm_driver”uh1hh³hÌh´KhjáubhX structure. Drivers typically statically initialize a drm_driver structure, and then pass it to drm_dev_alloc() to allocate a device instance. After the device instance is fully initialized it can be registered (which makes it accessible from userspace) using drm_dev_register().”…”�”}”(hjáh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´KhjÐh²hubhÎ)�”}”(hX‘The :c:type:`struct drm_driver ` structure contains static information that describes the driver and features it supports, and pointers to methods that the DRM core will call to implement the DRM API. We will first go through the :c:type:`struct drm_driver ` static information fields, and will then describe individual operations in details as they get used in later sections.”h]”(hŒThe ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct drm_driver `”h]”jî)�”}”(hj"h]”hŒstruct drm_driver”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j Œ drm_driver”uh1hh³hÌh´K!hjubhŒÆ structure contains static information that describes the driver and features it supports, and pointers to methods that the DRM core will call to implement the DRM API. We will first go through the ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct drm_driver `”h]”jî)�”}”(hjEh]”hŒstruct drm_driver”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjCubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j Œ drm_driver”uh1hh³hÌh´K!hjubhŒw static information fields, and will then describe individual operations in details as they get used in later sections.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´K!hjÐh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒDriver Information”h]”hŒDriver Information”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊjbuh1hºhjlh²hh³hÌh´K*ubh¶)�”}”(hhh]”(h»)�”}”(hŒMajor, Minor and Patchlevel”h]”hŒMajor, Minor and Patchlevel”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊj�uh1hºhj}h²hh³hÌh´K-ubhÎ)�”}”(hŒùint major; int minor; int patchlevel; The DRM core identifies driver versions by a major, minor and patch level triplet. The information is printed to the kernel log at initialization time and passed to userspace through the DRM_IOCTL_VERSION ioctl.”h]”hŒùint major; int minor; int patchlevel; The DRM core identifies driver versions by a major, minor and patch level triplet. The information is printed to the kernel log at initialization time and passed to userspace through the DRM_IOCTL_VERSION ioctl.”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´K/hj}h²hubhÎ)�”}”(hXúThe major and minor numbers are also used to verify the requested driver API version passed to DRM_IOCTL_SET_VERSION. When the driver API changes between minor versions, applications can call DRM_IOCTL_SET_VERSION to select a specific version of the API. If the requested major isn't equal to the driver major, or the requested minor is larger than the driver minor, the DRM_IOCTL_SET_VERSION call will return an error. Otherwise the driver's set_version() method will be called with the requested version.”h]”hXþThe major and minor numbers are also used to verify the requested driver API version passed to DRM_IOCTL_SET_VERSION. When the driver API changes between minor versions, applications can call DRM_IOCTL_SET_VERSION to select a specific version of the API. If the requested major isn’t equal to the driver major, or the requested minor is larger than the driver minor, the DRM_IOCTL_SET_VERSION call will return an error. Otherwise the driver’s set_version() method will be called with the requested version.”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´K5hj}h²hubeh}”(h]”j‡ah ]”h"]”Œmajor, minor and patchlevel”ah$]”h&]”uh1hµhjlh²hh³hÌh´K-ubh¶)�”}”(hhh]”(h»)�”}”(hŒName and Description”h]”hŒName and Description”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊj£uh1hºhj±h²hh³hÌh´K?ubhÎ)�”}”(hŒ¸char \*name; char \*desc; char \*date; The driver name is printed to the kernel log at initialization time, used for IRQ registration and passed to userspace through DRM_IOCTL_VERSION.”h]”hŒ¸char *name; char *desc; char *date; The driver name is printed to the kernel log at initialization time, used for IRQ registration and passed to userspace through DRM_IOCTL_VERSION.”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´KAhj±h²hubhÎ)�”}”(hŒ‘The driver description is a purely informative string passed to userspace through the DRM_IOCTL_VERSION ioctl and otherwise unused by the kernel.”h]”hŒ‘The driver description is a purely informative string passed to userspace through the DRM_IOCTL_VERSION ioctl and otherwise unused by the kernel.”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´KFhj±h²hubeh}”(h]”j©ah ]”h"]”Œname and description”ah$]”h&]”uh1hµhjlh²hh³hÌh´K?ubeh}”(h]”jhah ]”h"]”Œdriver information”ah$]”h&]”uh1hµhjÐh²hh³hÌh´K*ubh¶)�”}”(hhh]”(h»)�”}”(hŒModule Initialization”h]”hŒModule Initialization”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊjÑuh1hºhjìh²hh³hÌh´KKubhÎ)�”}”(hXThis library provides helpers registering DRM drivers during module initialization and shutdown. The provided helpers act like bus-specific module helpers, such as module_pci_driver(), but respect additional parameters that control DRM driver registration.”h]”hXThis library provides helpers registering DRM drivers during module initialization and shutdown. The provided helpers act like bus-specific module helpers, such as module_pci_driver(), but respect additional parameters that control DRM driver registration.”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:77: ./include/drm/drm_module.h”h´K hjìh²hubhÎ)�”}”(hŒMBelow is an example of initializing a DRM driver for a device on the PCI bus.”h]”hŒMBelow is an example of initializing a DRM driver for a device on the PCI bus.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:77: ./include/drm/drm_module.h”h´Khjìh²hubhŒ literal_block”“”)�”}”(hŒGstruct pci_driver my_pci_drv = { }; drm_module_pci_driver(my_pci_drv);”h]”hŒGstruct pci_driver my_pci_drv = { }; drm_module_pci_driver(my_pci_drv);”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”Œforce”‰Œlanguage”júŒhighlight_args”}”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:77: ./include/drm/drm_module.h”h´Khjìh²hubhÎ)�”}”(hŒÉThe generated code will test if DRM drivers are enabled and register the PCI driver my_pci_drv. For more complex module initialization, you can still use module_init() and module_exit() in your driver.”h]”hŒÉThe generated code will test if DRM drivers are enabled and register the PCI driver my_pci_drv. For more complex module initialization, you can still use module_init() and module_exit() in your driver.”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:77: ./include/drm/drm_module.h”h´Khjìh²hubeh}”(h]”j×ah ]”h"]”Œmodule initialization”ah$]”h&]”uh1hµhjÐh²hh³hÌh´KKubh¶)�”}”(hhh]”(h»)�”}”(hŒ#Device Instance and Driver Handling”h]”hŒ#Device Instance and Driver Handling”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊjóuh1hºhjHh²hh³hÌh´KQubhÎ)�”}”(hXTA device instance for a drm driver is represented by :c:type:`struct drm_device `. This is allocated and initialized with devm_drm_dev_alloc(), usually from bus-specific ->probe() callbacks implemented by the driver. The driver then needs to initialize all the various subsystems for the drm device like memory management, vblank handling, modesetting support and initial output configuration plus obviously initialize all the corresponding hardware bits. Finally when everything is up and running and ready for userspace the device instance can be published using drm_dev_register().”h]”(hŒ5A device instance for a drm driver is represented by ”…”�”}”(hjYh²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct drm_device `”h]”jî)�”}”(hjch]”hŒstruct drm_device”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjaubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j Œ drm_device”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:83: ./drivers/gpu/drm/drm_drv.c”h´M hjYubhX÷. This is allocated and initialized with devm_drm_dev_alloc(), usually from bus-specific ->probe() callbacks implemented by the driver. The driver then needs to initialize all the various subsystems for the drm device like memory management, vblank handling, modesetting support and initial output configuration plus obviously initialize all the corresponding hardware bits. Finally when everything is up and running and ready for userspace the device instance can be published using drm_dev_register().”…”�”}”(hjYh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j€h´M hjHh²hubhÎ)�”}”(hXThere is also deprecated support for initializing device instances using bus-specific helpers and the :c:type:`drm_driver.load ` callback. But due to backwards-compatibility needs the device instance have to be published too early, which requires unpretty global locking to make safe and is therefore only support for existing drivers not yet converted to the new scheme.”h]”(hŒfThere is also deprecated support for initializing device instances using bus-specific helpers and the ”…”�”}”(hj‹h²hh³Nh´Nubh)�”}”(hŒ&:c:type:`drm_driver.load `”h]”jî)�”}”(hj•h]”hŒdrm_driver.load”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj“ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j Œ drm_driver”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:83: ./drivers/gpu/drm/drm_drv.c”h´Mhj‹ubhŒó callback. But due to backwards-compatibility needs the device instance have to be published too early, which requires unpretty global locking to make safe and is therefore only support for existing drivers not yet converted to the new scheme.”…”�”}”(hj‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j²h´MhjHh²hubhÎ)�”}”(hXWhen cleaning up a device instance everything needs to be done in reverse: First unpublish the device instance with drm_dev_unregister(). Then clean up any other resources allocated at device initialization and drop the driver's reference to :c:type:`drm_device` using drm_dev_put().”h]”(hŒôWhen cleaning up a device instance everything needs to be done in reverse: First unpublish the device instance with drm_dev_unregister(). Then clean up any other resources allocated at device initialization and drop the driver’s reference to ”…”�”}”(hj½h²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hjÇh]”hŒ drm_device”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÅubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j Œ drm_device”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:83: ./drivers/gpu/drm/drm_drv.c”h´Mhj½ubhŒ using drm_dev_put().”…”�”}”(hj½h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jäh´MhjHh²hubhÎ)�”}”(hXJNote that any allocation or resource which is visible to userspace must be released only when the final drm_dev_put() is called, and not when the driver is unbound from the underlying physical struct :c:type:`device`. Best to use :c:type:`drm_device` managed resources with drmm_add_action(), drmm_kmalloc() and related functions.”h]”(hŒÈNote that any allocation or resource which is visible to userspace must be released only when the final drm_dev_put() is called, and not when the driver is unbound from the underlying physical struct ”…”�”}”(hjïh²hh³Nh´Nubh)�”}”(hŒ:c:type:`device`”h]”jî)�”}”(hjùh]”hŒdevice”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj÷ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j Œdevice”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:83: ./drivers/gpu/drm/drm_drv.c”h´MhjïubhŒ. Best to use ”…”�”}”(hjïh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hjh]”hŒ drm_device”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j Œ drm_device”uh1hh³jh´MhjïubhŒP managed resources with drmm_add_action(), drmm_kmalloc() and related functions.”…”�”}”(hjïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jh´MhjHh²hubhÎ)�”}”(hŒÒdevres managed resources like devm_kmalloc() can only be used for resources directly related to the underlying hardware device, and only used in code paths fully protected by drm_dev_enter() and drm_dev_exit().”h]”hŒÒdevres managed resources like devm_kmalloc() can only be used for resources directly related to the underlying hardware device, and only used in code paths fully protected by drm_dev_enter() and drm_dev_exit().”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:83: ./drivers/gpu/drm/drm_drv.c”h´M$hjHh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒDisplay driver example”h]”hŒDisplay driver example”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊjuh1hºhjSh³Nh´NubhÎ)�”}”(hŒßThe following example shows a typical structure of a DRM display driver. The example focus on the probe() function and the other functions that is almost always present and serves as a demonstration of devm_drm_dev_alloc().”h]”hŒßThe following example shows a typical structure of a DRM display driver. The example focus on the probe() function and the other functions that is almost always present and serves as a demonstration of devm_drm_dev_alloc().”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:83: ./drivers/gpu/drm/drm_drv.c”h´M+hjSubj)�”}”(hXT struct driver_device { struct drm_device drm; void *userspace_facing; struct clk *pclk; }; static const struct drm_driver driver_drm_driver = { [...] }; static int driver_probe(struct platform_device *pdev) { struct driver_device *priv; struct drm_device *drm; int ret; priv = devm_drm_dev_alloc(&pdev->dev, &driver_drm_driver, struct driver_device, drm); if (IS_ERR(priv)) return PTR_ERR(priv); drm = &priv->drm; ret = drmm_mode_config_init(drm); if (ret) return ret; priv->userspace_facing = drmm_kzalloc(..., GFP_KERNEL); if (!priv->userspace_facing) return -ENOMEM; priv->pclk = devm_clk_get(dev, "PCLK"); if (IS_ERR(priv->pclk)) return PTR_ERR(priv->pclk); // Further setup, display pipeline etc platform_set_drvdata(pdev, drm); ret = drm_mode_config_create_initial_state(drm); if (ret) return ret; ret = drm_dev_register(drm); if (ret) return ret; drm_fbdev_{...}_setup(drm, 32); return 0; } // This function is called before the devm_ resources are released static int driver_remove(struct platform_device *pdev) { struct drm_device *drm = platform_get_drvdata(pdev); drm_dev_unregister(drm); drm_atomic_helper_shutdown(drm) return 0; } // This function is called on kernel restart and shutdown static void driver_shutdown(struct platform_device *pdev) { drm_atomic_helper_shutdown(platform_get_drvdata(pdev)); } static int __maybe_unused driver_pm_suspend(struct device *dev) { return drm_mode_config_helper_suspend(dev_get_drvdata(dev)); } static int __maybe_unused driver_pm_resume(struct device *dev) { drm_mode_config_helper_resume(dev_get_drvdata(dev)); return 0; } static const struct dev_pm_ops driver_pm_ops = { SET_SYSTEM_SLEEP_PM_OPS(driver_pm_suspend, driver_pm_resume) }; static struct platform_driver driver_driver = { .driver = { [...] .pm = &driver_pm_ops, }, .probe = driver_probe, .remove = driver_remove, .shutdown = driver_shutdown, }; module_platform_driver(driver_driver);”h]”hXT struct driver_device { struct drm_device drm; void *userspace_facing; struct clk *pclk; }; static const struct drm_driver driver_drm_driver = { [...] }; static int driver_probe(struct platform_device *pdev) { struct driver_device *priv; struct drm_device *drm; int ret; priv = devm_drm_dev_alloc(&pdev->dev, &driver_drm_driver, struct driver_device, drm); if (IS_ERR(priv)) return PTR_ERR(priv); drm = &priv->drm; ret = drmm_mode_config_init(drm); if (ret) return ret; priv->userspace_facing = drmm_kzalloc(..., GFP_KERNEL); if (!priv->userspace_facing) return -ENOMEM; priv->pclk = devm_clk_get(dev, "PCLK"); if (IS_ERR(priv->pclk)) return PTR_ERR(priv->pclk); // Further setup, display pipeline etc platform_set_drvdata(pdev, drm); ret = drm_mode_config_create_initial_state(drm); if (ret) return ret; ret = drm_dev_register(drm); if (ret) return ret; drm_fbdev_{...}_setup(drm, 32); return 0; } // This function is called before the devm_ resources are released static int driver_remove(struct platform_device *pdev) { struct drm_device *drm = platform_get_drvdata(pdev); drm_dev_unregister(drm); drm_atomic_helper_shutdown(drm) return 0; } // This function is called on kernel restart and shutdown static void driver_shutdown(struct platform_device *pdev) { drm_atomic_helper_shutdown(platform_get_drvdata(pdev)); } static int __maybe_unused driver_pm_suspend(struct device *dev) { return drm_mode_config_helper_suspend(dev_get_drvdata(dev)); } static int __maybe_unused driver_pm_resume(struct device *dev) { drm_mode_config_helper_resume(dev_get_drvdata(dev)); return 0; } static const struct dev_pm_ops driver_pm_ops = { SET_SYSTEM_SLEEP_PM_OPS(driver_pm_suspend, driver_pm_resume) }; static struct platform_driver driver_driver = { .driver = { [...] .pm = &driver_pm_ops, }, .probe = driver_probe, .remove = driver_remove, .shutdown = driver_shutdown, }; module_platform_driver(driver_driver);”…”�”}”hjssbah}”(h]”h ]”h"]”h$]”h&]”j+j,j-‰j.júj/}”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:83: ./drivers/gpu/drm/drm_drv.c”h´M/hjSubhÎ)�”}”(hX<Drivers that want to support device unplugging (USB, DT overlay unload) should use drm_dev_unplug() instead of drm_dev_unregister(). The driver must protect regions that is accessing device resources to prevent use after they're released. This is done using drm_dev_enter() and drm_dev_exit(). There is one shortcoming however, drm_dev_unplug() marks the drm_device as unplugged before drm_atomic_helper_shutdown() is called. This means that if the disable code paths are protected, they will not run on regular driver module unload, possibly leaving the hardware enabled.”h]”hX>Drivers that want to support device unplugging (USB, DT overlay unload) should use drm_dev_unplug() instead of drm_dev_unregister(). The driver must protect regions that is accessing device resources to prevent use after they’re released. This is done using drm_dev_enter() and drm_dev_exit(). There is one shortcoming however, drm_dev_unplug() marks the drm_device as unplugged before drm_atomic_helper_shutdown() is called. This means that if the disable code paths are protected, they will not run on regular driver module unload, possibly leaving the hardware enabled.”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:83: ./drivers/gpu/drm/drm_drv.c”h´M�hjSubeh}”(h]”jah ]”h"]”Œdisplay driver example”ah$]”h&]”uh1hµhjHh²hh³Nh´NubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œdrm_wedge_task_info (C struct)”Œc.drm_wedge_task_info”hNt”auh1j™hjHh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒdrm_wedge_task_info”h]”hŒdesc_signature_line”“”)�”}”(hŒstruct drm_wedge_task_info”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1j»hj·h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jÍhj·h²hh³jÌh´KubhŒ desc_name”“”)�”}”(hŒdrm_wedge_task_info”h]”hŒ desc_sig_name”“”)�”}”(hj³h]”hŒdrm_wedge_task_info”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jähjàubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”j+j,uh1jÞhj·h²hh³jÌh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j+j,Œ add_permalink”ˆuh1jµŒsphinx_line_type”Œ declarator”hj±h²hh³jÌh´Kubah}”(h]”j¨ah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1j¯h³jÌh´Khj¬h²hubhŒ desc_content”“”)�”}”(hhh]”hÎ)�”}”(hŒ0information about the guilty task of a wedge dev”h]”hŒ0information about the guilty task of a wedge dev”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K*hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¬h²hh³jÌh´Kubeh}”(h]”h ]”(júŒstruct”eh"]”h$]”h&]”Œdomain”júŒobjtype”j-Œdesctype”j-Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jªh²hhjHh³Nh´NubhŒ container”“”)�”}”(hŒ³**Definition**:: struct drm_wedge_task_info { pid_t pid; char comm[TASK_COMM_LEN]; }; **Members** ``pid`` pid of the task ``comm`` command name of the task”h]”(hÎ)�”}”(hŒ**Definition**::”h]”(hŒstrong”“”)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj=ubhŒ:”…”�”}”(hj=h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K.hj9ubj)�”}”(hŒLstruct drm_wedge_task_info { pid_t pid; char comm[TASK_COMM_LEN]; };”h]”hŒLstruct drm_wedge_task_info { pid_t pid; char comm[TASK_COMM_LEN]; };”…”�”}”hj\sbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K0hj9ubhÎ)�”}”(hŒ **Members**”h]”jB)�”}”(hjmh]”hŒMembers”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K5hj9ubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ``pid`` pid of the task ”h]”(hŒterm”“”)�”}”(hŒ``pid``”h]”jî)�”}”(hj’h]”hŒpid”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K.hjŠubhŒ definition”“”)�”}”(hhh]”hÎ)�”}”(hŒpid of the task”h]”hŒpid of the task”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j§h´K.hjªubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j§h´K.hj…ubj‰)�”}”(hŒ!``comm`` command name of the task”h]”(j�)�”}”(hŒ``comm``”h]”jî)�”}”(hjÍh]”hŒcomm”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K/hjÇubj©)�”}”(hhh]”hÎ)�”}”(hŒcommand name of the task”h]”hŒcommand name of the task”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K0hjãubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jâh´K/hj…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj9ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œswitch_power_state (C enum)”Œc.switch_power_state”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒswitch_power_state”h]”j¶)�”}”(hŒenum switch_power_state”h]”(j¼)�”}”(hŒenum”h]”hŒenum”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj# h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K6ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj# h²hh³j5 h´K6ubjß)�”}”(hŒswitch_power_state”h]”jå)�”}”(hj! h]”hŒswitch_power_state”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjD ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj# h²hh³j5 h´K6ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj h²hh³j5 h´K6ubah}”(h]”j ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j5 h´K6hj h²hubj)�”}”(hhh]”hÎ)�”}”(hŒpower state of drm device”h]”hŒpower state of drm device”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K4hjg h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj h²hh³j5 h´K6ubeh}”(h]”h ]”(júŒenum”eh"]”h$]”h&]”j1júj2j‚ j3j‚ j4‰j5‰j6‰uh1jªh²hhjHh³Nh´Nubj8)�”}”(hŒÐ**Constants** ``DRM_SWITCH_POWER_ON`` Power state is ON ``DRM_SWITCH_POWER_OFF`` Power state is OFF ``DRM_SWITCH_POWER_CHANGING`` Power state is changing ``DRM_SWITCH_POWER_DYNAMIC_OFF`` Suspended”h]”(hÎ)�”}”(hŒ **Constants**”h]”jB)�”}”(hjŒ h]”hŒ Constants”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjŠ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K8hj† ubj„)�”}”(hhh]”(j‰)�”}”(hŒ*``DRM_SWITCH_POWER_ON`` Power state is ON ”h]”(j�)�”}”(hŒ``DRM_SWITCH_POWER_ON``”h]”jî)�”}”(hj« h]”hŒDRM_SWITCH_POWER_ON”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj© ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K;hj¥ ubj©)�”}”(hhh]”hÎ)�”}”(hŒPower state is ON”h]”hŒPower state is ON”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÀ h´K;hjÁ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¥ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÀ h´K;hj¢ ubj‰)�”}”(hŒ,``DRM_SWITCH_POWER_OFF`` Power state is OFF ”h]”(j�)�”}”(hŒ``DRM_SWITCH_POWER_OFF``”h]”jî)�”}”(hjä h]”hŒDRM_SWITCH_POWER_OFF”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjâ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K>hjÞ ubj©)�”}”(hhh]”hÎ)�”}”(hŒPower state is OFF”h]”hŒPower state is OFF”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jù h´K>hjú ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÞ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jù h´K>hj¢ ubj‰)�”}”(hŒ6``DRM_SWITCH_POWER_CHANGING`` Power state is changing ”h]”(j�)�”}”(hŒ``DRM_SWITCH_POWER_CHANGING``”h]”jî)�”}”(hj h]”hŒDRM_SWITCH_POWER_CHANGING”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KAhj ubj©)�”}”(hhh]”hÎ)�”}”(hŒPower state is changing”h]”hŒPower state is changing”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j2 h´KAhj3 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j2 h´KAhj¢ ubj‰)�”}”(hŒ*``DRM_SWITCH_POWER_DYNAMIC_OFF`` Suspended”h]”(j�)�”}”(hŒ ``DRM_SWITCH_POWER_DYNAMIC_OFF``”h]”jî)�”}”(hjV h]”hŒDRM_SWITCH_POWER_DYNAMIC_OFF”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KChjP ubj©)�”}”(hhh]”hÎ)�”}”(hŒ Suspended”h]”hŒ Suspended”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KDhjl ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjP ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jk h´KChj¢ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj† ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_device (C struct)”Œ c.drm_device”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ drm_device”h]”j¶)�”}”(hŒstruct drm_device”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj¬ h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KIubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾ h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj¬ h²hh³j½ h´KIubjß)�”}”(hŒ drm_device”h]”jå)�”}”(hjª h]”hŒ drm_device”…”�”}”(hjÐ h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÌ ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj¬ h²hh³j½ h´KIubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj¨ h²hh³j½ h´KIubah}”(h]”j£ ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j½ h´KIhj¥ h²hubj)�”}”(hhh]”hÎ)�”}”(hŒDRM device structure”h]”hŒDRM device structure”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KFhjï h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥ h²hh³j½ h´KIubeh}”(h]”h ]”(júŒstruct”eh"]”h$]”h&]”j1júj2j j3j j4‰j5‰j6‰uh1jªh²hhjHh³Nh´Nubj8)�”}”(hXB**Definition**:: struct drm_device { int if_version; struct kref ref; struct device *dev; struct device *dma_dev; struct { struct list_head resources; void *final_kfree; spinlock_t lock; } managed; const struct drm_driver *driver; void *dev_private; struct drm_minor *primary; struct drm_minor *render; struct drm_minor *accel; bool registered; struct drm_master *master; #ifdef CONFIG_TRANSPARENT_HUGEPAGE; struct vfsmount *huge_mnt; #endif; u32 driver_features; bool unplugged; struct inode *anon_inode; char *unique; struct mutex master_mutex; atomic_t open_count; struct mutex filelist_mutex; struct list_head filelist; struct list_head filelist_internal; struct mutex clientlist_mutex; struct list_head clientlist; struct list_head client_sysrq_list; bool vblank_disable_immediate; struct drm_vblank_crtc *vblank; spinlock_t vblank_time_lock; spinlock_t vbl_lock; u32 max_vblank_count; struct list_head vblank_event_list; spinlock_t event_lock; unsigned int num_crtcs; struct drm_mode_config mode_config; struct mutex object_name_lock; struct idr object_name_idr; struct drm_vma_offset_manager *vma_offset_manager; struct drm_vram_mm *vram_mm; enum switch_power_state switch_power_state; struct drm_fb_helper *fb_helper; struct dentry *debugfs_root; struct mutex gem_lru_mutex; }; **Members** ``if_version`` Highest interface version set ``ref`` Object ref-count ``dev`` Device structure of bus-device ``dma_dev`` Device for DMA operations. Only required if the device **dev** cannot perform DMA by itself. Should be NULL otherwise. Call drm_dev_dma_dev() to get the DMA device instead of using this field directly. Call drm_dev_set_dma_dev() to set this field. DRM devices are sometimes bound to virtual devices that cannot perform DMA by themselves. Drivers should set this field to the respective DMA controller. Devices on USB and other peripheral busses also cannot perform DMA by themselves. The **dma_dev** field should point the bus controller that does DMA on behalve of such a device. Required for importing buffers via dma-buf. If set, the DRM core automatically releases the reference on the device. ``managed`` Managed resources linked to the lifetime of this :c:type:`drm_device` as tracked by **ref**. ``managed.resources`` managed resources list ``managed.final_kfree`` pointer for final kfree() call ``managed.lock`` protects **managed.resources** ``driver`` DRM driver managing the device ``dev_private`` DRM driver private data. This is deprecated and should be left set to NULL. Instead of using this pointer it is recommended that drivers use devm_drm_dev_alloc() and embed struct :c:type:`drm_device` in their larger per-device structure. ``primary`` Primary node. Drivers should not interact with this directly. debugfs interfaces can be registered with drm_debugfs_add_file(), and sysfs should be directly added on the hardware (and not character device node) struct device **dev**. ``render`` Render node. Drivers should not interact with this directly ever. Drivers should not expose any additional interfaces in debugfs or sysfs on this node. ``accel`` Compute Acceleration node ``registered`` Internally used by drm_dev_register() and drm_connector_register(). ``master`` Currently active master for this device. Protected by :c:type:`master_mutex` ``huge_mnt`` Huge tmpfs mountpoint used at GEM object initialization drm_gem_object_init(). Drivers can call drm_gem_huge_mnt_create() to create, mount and use it. The default tmpfs mountpoint (`shm_mnt`) is used if NULL. ``driver_features`` per-device driver features Drivers can clear specific flags here to disallow certain features on a per-device basis while still sharing a single :c:type:`struct drm_driver ` instance across all devices. ``unplugged`` Flag to tell if the device has been unplugged. See drm_dev_enter() and drm_dev_is_unplugged(). ``anon_inode`` inode for private address-space ``unique`` Unique name of the device ``master_mutex`` Lock for :c:type:`drm_minor.master ` and :c:type:`drm_file.is_master ` ``open_count`` Usage counter for outstanding files open, protected by drm_global_mutex ``filelist_mutex`` Protects **filelist**. ``filelist`` List of userspace clients, linked through :c:type:`drm_file.lhead `. ``filelist_internal`` List of open DRM files for in-kernel clients. Protected by :c:type:`filelist_mutex`. ``clientlist_mutex`` Protects :c:type:`clientlist` access. ``clientlist`` List of in-kernel clients. Protected by :c:type:`clientlist_mutex`. ``client_sysrq_list`` Entry into list of devices registered for sysrq. Allows in-kernel clients on this device to handle sysrq keys. ``vblank_disable_immediate`` If true, vblank interrupt will be disabled immediately when the refcount drops to zero, as opposed to via the vblank disable timer. This can be set to true it the hardware has a working vblank counter with high-precision timestamping (otherwise there are races) and the driver uses drm_crtc_vblank_on() and drm_crtc_vblank_off() appropriately. Also, see **max_vblank_count**, :c:type:`drm_crtc_funcs.get_vblank_counter ` and :c:type:`drm_vblank_crtc_config.disable_immediate `. ``vblank`` Array of vblank tracking structures, one per :c:type:`struct drm_crtc `. For historical reasons (vblank support predates kernel modesetting) this is free-standing and not part of :c:type:`struct drm_crtc ` itself. It must be initialized explicitly by calling drm_vblank_init(). ``vblank_time_lock`` Protects vblank count and time updates during vblank enable/disable ``vbl_lock`` Top-level vblank references lock, wraps the low-level **vblank_time_lock**. ``max_vblank_count`` Maximum value of the vblank registers. This value +1 will result in a wrap-around of the vblank register. It is used by the vblank core to handle wrap-arounds. If set to zero the vblank core will try to guess the elapsed vblanks between times when the vblank interrupt is disabled through high-precision timestamps. That approach is suffering from small races and imprecision over longer time periods, hence exposing a hardware vblank counter is always recommended. This is the statically configured device wide maximum. The driver can instead choose to use a runtime configurable per-crtc value :c:type:`drm_vblank_crtc.max_vblank_count `, in which case **max_vblank_count** must be left at zero. See drm_crtc_set_max_vblank_count() on how to use the per-crtc value. If non-zero, :c:type:`drm_crtc_funcs.get_vblank_counter ` must be set. ``vblank_event_list`` List of vblank events ``event_lock`` Protects **vblank_event_list** and event delivery in general. See drm_send_event() and drm_send_event_locked(). ``num_crtcs`` Number of CRTCs on this device ``mode_config`` Current mode config ``object_name_lock`` GEM information ``object_name_idr`` GEM information ``vma_offset_manager`` GEM information ``vram_mm`` VRAM MM memory manager ``switch_power_state`` Power state of the client. Used by drivers supporting the switcheroo driver. The state is maintained in the :c:type:`vga_switcheroo_client_ops.set_gpu_state ` callback ``fb_helper`` Pointer to the fbdev emulation structure. Set by drm_fb_helper_init() and cleared by drm_fb_helper_fini(). ``debugfs_root`` Root directory for debugfs files. ``gem_lru_mutex`` Lock protecting movement of GEM objects between LRUs.”h]”(hÎ)�”}”(hŒ**Definition**::”h]”(jB)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj ubhŒ:”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KJhj ubj)�”}”(hX¸struct drm_device { int if_version; struct kref ref; struct device *dev; struct device *dma_dev; struct { struct list_head resources; void *final_kfree; spinlock_t lock; } managed; const struct drm_driver *driver; void *dev_private; struct drm_minor *primary; struct drm_minor *render; struct drm_minor *accel; bool registered; struct drm_master *master; #ifdef CONFIG_TRANSPARENT_HUGEPAGE; struct vfsmount *huge_mnt; #endif; u32 driver_features; bool unplugged; struct inode *anon_inode; char *unique; struct mutex master_mutex; atomic_t open_count; struct mutex filelist_mutex; struct list_head filelist; struct list_head filelist_internal; struct mutex clientlist_mutex; struct list_head clientlist; struct list_head client_sysrq_list; bool vblank_disable_immediate; struct drm_vblank_crtc *vblank; spinlock_t vblank_time_lock; spinlock_t vbl_lock; u32 max_vblank_count; struct list_head vblank_event_list; spinlock_t event_lock; unsigned int num_crtcs; struct drm_mode_config mode_config; struct mutex object_name_lock; struct idr object_name_idr; struct drm_vma_offset_manager *vma_offset_manager; struct drm_vram_mm *vram_mm; enum switch_power_state switch_power_state; struct drm_fb_helper *fb_helper; struct dentry *debugfs_root; struct mutex gem_lru_mutex; };”h]”hX¸struct drm_device { int if_version; struct kref ref; struct device *dev; struct device *dma_dev; struct { struct list_head resources; void *final_kfree; spinlock_t lock; } managed; const struct drm_driver *driver; void *dev_private; struct drm_minor *primary; struct drm_minor *render; struct drm_minor *accel; bool registered; struct drm_master *master; #ifdef CONFIG_TRANSPARENT_HUGEPAGE; struct vfsmount *huge_mnt; #endif; u32 driver_features; bool unplugged; struct inode *anon_inode; char *unique; struct mutex master_mutex; atomic_t open_count; struct mutex filelist_mutex; struct list_head filelist; struct list_head filelist_internal; struct mutex clientlist_mutex; struct list_head clientlist; struct list_head client_sysrq_list; bool vblank_disable_immediate; struct drm_vblank_crtc *vblank; spinlock_t vblank_time_lock; spinlock_t vbl_lock; u32 max_vblank_count; struct list_head vblank_event_list; spinlock_t event_lock; unsigned int num_crtcs; struct drm_mode_config mode_config; struct mutex object_name_lock; struct idr object_name_idr; struct drm_vma_offset_manager *vma_offset_manager; struct drm_vram_mm *vram_mm; enum switch_power_state switch_power_state; struct drm_fb_helper *fb_helper; struct dentry *debugfs_root; struct mutex gem_lru_mutex; };”…”�”}”hj/ sbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KLhj ubhÎ)�”}”(hŒ **Members**”h]”jB)�”}”(hj@ h]”hŒMembers”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj> ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Khj ubj„)�”}”(hhh]”(j‰)�”}”(hŒ-``if_version`` Highest interface version set ”h]”(j�)�”}”(hŒ``if_version``”h]”jî)�”}”(hj_ h]”hŒ if_version”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj] ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KMhjY ubj©)�”}”(hhh]”hÎ)�”}”(hŒHighest interface version set”h]”hŒHighest interface version set”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jt h´KMhju ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjY ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jt h´KMhjV ubj‰)�”}”(hŒ``ref`` Object ref-count ”h]”(j�)�”}”(hŒ``ref``”h]”jî)�”}”(hj˜ h]”hŒref”…”�”}”(hjš h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj– ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KPhj’ ubj©)�”}”(hhh]”hÎ)�”}”(hŒObject ref-count”h]”hŒObject ref-count”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j­ h´KPhj® ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj’ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j­ h´KPhjV ubj‰)�”}”(hŒ'``dev`` Device structure of bus-device ”h]”(j�)�”}”(hŒ``dev``”h]”jî)�”}”(hjÑ h]”hŒdev”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÏ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KShjË ubj©)�”}”(hhh]”hÎ)�”}”(hŒDevice structure of bus-device”h]”hŒDevice structure of bus-device”…”�”}”(hjê h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jæ h´KShjç ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjË ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jæ h´KShjV ubj‰)�”}”(hXÉ``dma_dev`` Device for DMA operations. Only required if the device **dev** cannot perform DMA by itself. Should be NULL otherwise. Call drm_dev_dma_dev() to get the DMA device instead of using this field directly. Call drm_dev_set_dma_dev() to set this field. DRM devices are sometimes bound to virtual devices that cannot perform DMA by themselves. Drivers should set this field to the respective DMA controller. Devices on USB and other peripheral busses also cannot perform DMA by themselves. The **dma_dev** field should point the bus controller that does DMA on behalve of such a device. Required for importing buffers via dma-buf. If set, the DRM core automatically releases the reference on the device. ”h]”(j�)�”}”(hŒ ``dma_dev``”h]”jî)�”}”(hj h]”hŒdma_dev”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Kfhj ubj©)�”}”(hhh]”(hÎ)�”}”(hŒ÷Device for DMA operations. Only required if the device **dev** cannot perform DMA by itself. Should be NULL otherwise. Call drm_dev_dma_dev() to get the DMA device instead of using this field directly. Call drm_dev_set_dma_dev() to set this field.”h]”(hŒ7Device for DMA operations. Only required if the device ”…”�”}”(hj# h²hh³Nh´NubjB)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj# ubhŒ¹ cannot perform DMA by itself. Should be NULL otherwise. Call drm_dev_dma_dev() to get the DMA device instead of using this field directly. Call drm_dev_set_dma_dev() to set this field.”…”�”}”(hj# h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KWhj ubhÎ)�”}”(hŒ™DRM devices are sometimes bound to virtual devices that cannot perform DMA by themselves. Drivers should set this field to the respective DMA controller.”h]”hŒ™DRM devices are sometimes bound to virtual devices that cannot perform DMA by themselves. Drivers should set this field to the respective DMA controller.”…”�”}”(hjD h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K\hj ubhÎ)�”}”(hŒÞDevices on USB and other peripheral busses also cannot perform DMA by themselves. The **dma_dev** field should point the bus controller that does DMA on behalve of such a device. Required for importing buffers via dma-buf.”h]”(hŒVDevices on USB and other peripheral busses also cannot perform DMA by themselves. The ”…”�”}”(hjS h²hh³Nh´NubjB)�”}”(hŒ **dma_dev**”h]”hŒdma_dev”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjS ubhŒ} field should point the bus controller that does DMA on behalve of such a device. Required for importing buffers via dma-buf.”…”�”}”(hjS h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K`hj ubhÎ)�”}”(hŒHIf set, the DRM core automatically releases the reference on the device.”h]”hŒHIf set, the DRM core automatically releases the reference on the device.”…”�”}”(hjt h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Kehj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j h´KfhjV ubj‰)�”}”(hŒi``managed`` Managed resources linked to the lifetime of this :c:type:`drm_device` as tracked by **ref**. ”h]”(j�)�”}”(hŒ ``managed``”h]”jî)�”}”(hj• h]”hŒmanaged”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj“ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Knhj� ubj©)�”}”(hhh]”hÎ)�”}”(hŒ\Managed resources linked to the lifetime of this :c:type:`drm_device` as tracked by **ref**.”h]”(hŒ1Managed resources linked to the lifetime of this ”…”�”}”(hj® h²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hj¸ h]”hŒ drm_device”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj¶ ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰Œ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”sbj Œ drm_device”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Kmhj® ubhŒ as tracked by ”…”�”}”(hj® h²hh³Nh´NubjB)�”}”(hŒ**ref**”h]”hŒref”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj® ubhŒ.”…”�”}”(hj® h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÝ h´Kmhj« ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jª h´KnhjV ubj‰)�”}”(hŒ-``managed.resources`` managed resources list ”h]”(j�)�”}”(hŒ``managed.resources``”h]”jî)�”}”(hj h]”hŒmanaged.resources”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Kshj ubj©)�”}”(hhh]”hÎ)�”}”(hŒmanaged resources list”h]”hŒmanaged resources list”…”�”}”(hj% h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j! h´Kshj" ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j! h´KshjV ubj‰)�”}”(hŒ7``managed.final_kfree`` pointer for final kfree() call ”h]”(j�)�”}”(hŒ``managed.final_kfree``”h]”jî)�”}”(hjE h]”hŒmanaged.final_kfree”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjC ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Kuhj? ubj©)�”}”(hhh]”hÎ)�”}”(hŒpointer for final kfree() call”h]”hŒpointer for final kfree() call”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jZ h´Kuhj[ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj? ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jZ h´KuhjV ubj‰)�”}”(hŒ0``managed.lock`` protects **managed.resources** ”h]”(j�)�”}”(hŒ``managed.lock``”h]”jî)�”}”(hj~ h]”hŒ managed.lock”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj| ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Kwhjx ubj©)�”}”(hhh]”hÎ)�”}”(hŒprotects **managed.resources**”h]”(hŒ protects ”…”�”}”(hj— h²hh³Nh´NubjB)�”}”(hŒ**managed.resources**”h]”hŒmanaged.resources”…”�”}”(hjŸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj— ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j“ h´Kwhj” ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjx ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j“ h´KwhjV ubj‰)�”}”(hŒ*``driver`` DRM driver managing the device ”h]”(j�)�”}”(hŒ ``driver``”h]”jî)�”}”(hjÅ h]”hŒdriver”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjà ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K{hj¿ ubj©)�”}”(hhh]”hÎ)�”}”(hŒDRM driver managing the device”h]”hŒDRM driver managing the device”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÚ h´K{hjÛ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¿ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÚ h´K{hjV ubj‰)�”}”(hŒÿ``dev_private`` DRM driver private data. This is deprecated and should be left set to NULL. Instead of using this pointer it is recommended that drivers use devm_drm_dev_alloc() and embed struct :c:type:`drm_device` in their larger per-device structure. ”h]”(j�)�”}”(hŒ``dev_private``”h]”jî)�”}”(hjþ h]”hŒ dev_private”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjü ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”•<h´K„hjø ubj©)�”}”(hhh]”(hÎ)�”}”(hŒKDRM driver private data. This is deprecated and should be left set to NULL.”h]”hŒKDRM driver private data. This is deprecated and should be left set to NULL.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KhjubhÎ)�”}”(hŒ¡Instead of using this pointer it is recommended that drivers use devm_drm_dev_alloc() and embed struct :c:type:`drm_device` in their larger per-device structure.”h]”(hŒgInstead of using this pointer it is recommended that drivers use devm_drm_dev_alloc() and embed struct ”…”�”}”(hj&h²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hj0h]”hŒ drm_device”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj.ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K‚hj&ubhŒ& in their larger per-device structure.”…”�”}”(hj&h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jMh´K‚hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjø ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jh´K„hjV ubj‰)�”}”(hŒö``primary`` Primary node. Drivers should not interact with this directly. debugfs interfaces can be registered with drm_debugfs_add_file(), and sysfs should be directly added on the hardware (and not character device node) struct device **dev**. ”h]”(j�)�”}”(hŒ ``primary``”h]”jî)�”}”(hjjh]”hŒprimary”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KŽhjdubj©)�”}”(hhh]”hÎ)�”}”(hŒéPrimary node. Drivers should not interact with this directly. debugfs interfaces can be registered with drm_debugfs_add_file(), and sysfs should be directly added on the hardware (and not character device node) struct device **dev**.”h]”(hŒáPrimary node. Drivers should not interact with this directly. debugfs interfaces can be registered with drm_debugfs_add_file(), and sysfs should be directly added on the hardware (and not character device node) struct device ”…”�”}”(hjƒh²hh³Nh´NubjB)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjƒubhŒ.”…”�”}”(hjƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K‹hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jh´KŽhjV ubj‰)�”}”(hŒ£``render`` Render node. Drivers should not interact with this directly ever. Drivers should not expose any additional interfaces in debugfs or sysfs on this node. ”h]”(j�)�”}”(hŒ ``render``”h]”jî)�”}”(hj¶h]”hŒrender”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K—hj°ubj©)�”}”(hhh]”hÎ)�”}”(hŒ—Render node. Drivers should not interact with this directly ever. Drivers should not expose any additional interfaces in debugfs or sysfs on this node.”h]”hŒ—Render node. Drivers should not interact with this directly ever. Drivers should not expose any additional interfaces in debugfs or sysfs on this node.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K•hjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jËh´K—hjV ubj‰)�”}”(hŒ$``accel`` Compute Acceleration node ”h]”(j�)�”}”(hŒ ``accel``”h]”jî)�”}”(hjðh]”hŒaccel”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K�hjêubj©)�”}”(hhh]”hÎ)�”}”(hŒCompute Acceleration node”h]”hŒCompute Acceleration node”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jh´K�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jh´K�hjV ubj‰)�”}”(hŒS``registered`` Internally used by drm_dev_register() and drm_connector_register(). ”h]”(j�)�”}”(hŒ``registered``”h]”jî)�”}”(hj)h]”hŒ registered”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K¡hj#ubj©)�”}”(hhh]”hÎ)�”}”(hŒCInternally used by drm_dev_register() and drm_connector_register().”h]”hŒCInternally used by drm_dev_register() and drm_connector_register().”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j>h´K¡hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j>h´K¡hjV ubj‰)�”}”(hŒX``master`` Currently active master for this device. Protected by :c:type:`master_mutex` ”h]”(j�)�”}”(hŒ ``master``”h]”jî)�”}”(hjbh]”hŒmaster”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K©hj\ubj©)�”}”(hhh]”hÎ)�”}”(hŒLCurrently active master for this device. Protected by :c:type:`master_mutex`”h]”(hŒ6Currently active master for this device. Protected by ”…”�”}”(hj{h²hh³Nh´Nubh)�”}”(hŒ:c:type:`master_mutex`”h]”jî)�”}”(hj…h]”hŒ master_mutex”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjƒubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ master_mutex”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K¨hj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j¢h´K¨hjxubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jwh´K©hjV ubj‰)�”}”(hŒÞ``huge_mnt`` Huge tmpfs mountpoint used at GEM object initialization drm_gem_object_init(). Drivers can call drm_gem_huge_mnt_create() to create, mount and use it. The default tmpfs mountpoint (`shm_mnt`) is used if NULL. ”h]”(j�)�”}”(hŒ ``huge_mnt``”h]”jî)�”}”(hj»h]”hŒhuge_mnt”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K´hjµubj©)�”}”(hhh]”hÎ)�”}”(hŒÐHuge tmpfs mountpoint used at GEM object initialization drm_gem_object_init(). Drivers can call drm_gem_huge_mnt_create() to create, mount and use it. The default tmpfs mountpoint (`shm_mnt`) is used if NULL.”h]”(hŒµHuge tmpfs mountpoint used at GEM object initialization drm_gem_object_init(). Drivers can call drm_gem_huge_mnt_create() to create, mount and use it. The default tmpfs mountpoint (”…”�”}”(hjÔh²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ `shm_mnt`”h]”hŒshm_mnt”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÜhjÔubhŒ) is used if NULL.”…”�”}”(hjÔh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K±hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjµubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÐh´K´hjV ubj‰)�”}”(hŒì``driver_features`` per-device driver features Drivers can clear specific flags here to disallow certain features on a per-device basis while still sharing a single :c:type:`struct drm_driver ` instance across all devices. ”h]”(j�)�”}”(hŒ``driver_features``”h]”jî)�”}”(hj h]”hŒdriver_features”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KÁhjubj©)�”}”(hhh]”(hÎ)�”}”(hŒper-device driver features”h]”hŒper-device driver features”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K¼hjubhÎ)�”}”(hŒ»Drivers can clear specific flags here to disallow certain features on a per-device basis while still sharing a single :c:type:`struct drm_driver ` instance across all devices.”h]”(hŒvDrivers can clear specific flags here to disallow certain features on a per-device basis while still sharing a single ”…”�”}”(hj1h²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct drm_driver `”h]”jî)�”}”(hj;h]”hŒstruct drm_driver”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj9ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_driver”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´K¾hj1ubhŒ instance across all devices.”…”�”}”(hj1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jXh´K¾hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jh´KÁhjV ubj‰)�”}”(hŒm``unplugged`` Flag to tell if the device has been unplugged. See drm_dev_enter() and drm_dev_is_unplugged(). ”h]”(j�)�”}”(hŒ ``unplugged``”h]”jî)�”}”(hjuh]”hŒ unplugged”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KÇhjoubj©)�”}”(hhh]”hÎ)�”}”(hŒ^Flag to tell if the device has been unplugged. See drm_dev_enter() and drm_dev_is_unplugged().”h]”hŒ^Flag to tell if the device has been unplugged. See drm_dev_enter() and drm_dev_is_unplugged().”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KÆhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jŠh´KÇhjV ubj‰)�”}”(hŒ/``anon_inode`` inode for private address-space ”h]”(j�)�”}”(hŒ``anon_inode``”h]”jî)�”}”(hj¯h]”hŒ anon_inode”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KÍhj©ubj©)�”}”(hhh]”hÎ)�”}”(hŒinode for private address-space”h]”hŒinode for private address-space”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÄh´KÍhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÄh´KÍhjV ubj‰)�”}”(hŒ%``unique`` Unique name of the device ”h]”(j�)�”}”(hŒ ``unique``”h]”jî)�”}”(hjèh]”hŒunique”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KÐhjâubj©)�”}”(hhh]”hÎ)�”}”(hŒUnique name of the device”h]”hŒUnique name of the device”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jýh´KÐhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jýh´KÐhjV ubj‰)�”}”(hŒm``master_mutex`` Lock for :c:type:`drm_minor.master ` and :c:type:`drm_file.is_master ` ”h]”(j�)�”}”(hŒ``master_mutex``”h]”jî)�”}”(hj!h]”hŒ master_mutex”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KÔhjubj©)�”}”(hhh]”hÎ)�”}”(hŒ[Lock for :c:type:`drm_minor.master ` and :c:type:`drm_file.is_master `”h]”(hŒ Lock for ”…”�”}”(hj:h²hh³Nh´Nubh)�”}”(hŒ&:c:type:`drm_minor.master `”h]”jî)�”}”(hjDh]”hŒdrm_minor.master”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjBubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_minor”uh1hh³j6h´KÔhj:ubhŒ and ”…”�”}”(hj:h²hh³Nh´Nubh)�”}”(hŒ':c:type:`drm_file.is_master `”h]”jî)�”}”(hjgh]”hŒdrm_file.is_master”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjeubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_file”uh1hh³j6h´KÔhj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j6h´KÔhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j6h´KÔhjV ubj‰)�”}”(hŒW``open_count`` Usage counter for outstanding files open, protected by drm_global_mutex ”h]”(j�)�”}”(hŒ``open_count``”h]”jî)�”}”(hjœh]”hŒ open_count”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KÜhj–ubj©)�”}”(hhh]”hÎ)�”}”(hŒGUsage counter for outstanding files open, protected by drm_global_mutex”h]”hŒGUsage counter for outstanding files open, protected by drm_global_mutex”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KÛhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j±h´KÜhjV ubj‰)�”}”(hŒ*``filelist_mutex`` Protects **filelist**. ”h]”(j�)�”}”(hŒ``filelist_mutex``”h]”jî)�”}”(hjÖh]”hŒfilelist_mutex”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KâhjÐubj©)�”}”(hhh]”hÎ)�”}”(hŒProtects **filelist**.”h]”(hŒ Protects ”…”�”}”(hjïh²hh³Nh´NubjB)�”}”(hŒ **filelist**”h]”hŒfilelist”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjïubhŒ.”…”�”}”(hjïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jëh´Kâhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jëh´KâhjV ubj‰)�”}”(hŒ\``filelist`` List of userspace clients, linked through :c:type:`drm_file.lhead `. ”h]”(j�)�”}”(hŒ ``filelist``”h]”jî)�”}”(hj!h]”hŒfilelist”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Kåhjubj©)�”}”(hhh]”hÎ)�”}”(hŒNList of userspace clients, linked through :c:type:`drm_file.lhead `.”h]”(hŒ*List of userspace clients, linked through ”…”�”}”(hj:h²hh³Nh´Nubh)�”}”(hŒ#:c:type:`drm_file.lhead `”h]”jî)�”}”(hjDh]”hŒdrm_file.lhead”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjBubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_file”uh1hh³j6h´Kåhj:ubhŒ.”…”�”}”(hj:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j6h´Kåhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j6h´KåhjV ubj‰)�”}”(hŒk``filelist_internal`` List of open DRM files for in-kernel clients. Protected by :c:type:`filelist_mutex`. ”h]”(j�)�”}”(hŒ``filelist_internal``”h]”jî)�”}”(hj}h]”hŒfilelist_internal”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Kíhjwubj©)�”}”(hhh]”hÎ)�”}”(hŒTList of open DRM files for in-kernel clients. Protected by :c:type:`filelist_mutex`.”h]”(hŒ;List of open DRM files for in-kernel clients. Protected by ”…”�”}”(hj–h²hh³Nh´Nubh)�”}”(hŒ:c:type:`filelist_mutex`”h]”jî)�”}”(hj h]”hŒfilelist_mutex”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjžubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œfilelist_mutex”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Kìhj–ubhŒ.”…”�”}”(hj–h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j½h´Kìhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j’h´KíhjV ubj‰)�”}”(hŒ;``clientlist_mutex`` Protects :c:type:`clientlist` access. ”h]”(j�)�”}”(hŒ``clientlist_mutex``”h]”jî)�”}”(hjÚh]”hŒclientlist_mutex”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KôhjÔubj©)�”}”(hhh]”hÎ)�”}”(hŒ%Protects :c:type:`clientlist` access.”h]”(hŒ Protects ”…”�”}”(hjóh²hh³Nh´Nubh)�”}”(hŒ:c:type:`clientlist`”h]”jî)�”}”(hjýh]”hŒ clientlist”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjûubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ clientlist”uh1hh³jïh´KôhjóubhŒ access.”…”�”}”(hjóh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jïh´Kôhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jïh´KôhjV ubj‰)�”}”(hŒS``clientlist`` List of in-kernel clients. Protected by :c:type:`clientlist_mutex`. ”h]”(j�)�”}”(hŒ``clientlist``”h]”jî)�”}”(hj6h]”hŒ clientlist”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Kûhj0ubj©)�”}”(hhh]”hÎ)�”}”(hŒCList of in-kernel clients. Protected by :c:type:`clientlist_mutex`.”h]”(hŒ(List of in-kernel clients. Protected by ”…”�”}”(hjOh²hh³Nh´Nubh)�”}”(hŒ:c:type:`clientlist_mutex`”h]”jî)�”}”(hjYh]”hŒclientlist_mutex”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjWubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œclientlist_mutex”uh1hh³jKh´KûhjOubhŒ.”…”�”}”(hjOh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jKh´KûhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jKh´KûhjV ubj‰)�”}”(hŒ…``client_sysrq_list`` Entry into list of devices registered for sysrq. Allows in-kernel clients on this device to handle sysrq keys. ”h]”(j�)�”}”(hŒ``client_sysrq_list``”h]”jî)�”}”(hj’h]”hŒclient_sysrq_list”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´MhjŒubj©)�”}”(hhh]”hÎ)�”}”(hŒnEntry into list of devices registered for sysrq. Allows in-kernel clients on this device to handle sysrq keys.”h]”hŒnEntry into list of devices registered for sysrq. Allows in-kernel clients on this device to handle sysrq keys.”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Mhj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j§h´MhjV ubj‰)�”}”(hX$``vblank_disable_immediate`` If true, vblank interrupt will be disabled immediately when the refcount drops to zero, as opposed to via the vblank disable timer. This can be set to true it the hardware has a working vblank counter with high-precision timestamping (otherwise there are races) and the driver uses drm_crtc_vblank_on() and drm_crtc_vblank_off() appropriately. Also, see **max_vblank_count**, :c:type:`drm_crtc_funcs.get_vblank_counter ` and :c:type:`drm_vblank_crtc_config.disable_immediate `. ”h]”(j�)�”}”(hŒ``vblank_disable_immediate``”h]”jî)�”}”(hjÌh]”hŒvblank_disable_immediate”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´MhjÆubj©)�”}”(hhh]”(hÎ)�”}”(hŒƒIf true, vblank interrupt will be disabled immediately when the refcount drops to zero, as opposed to via the vblank disable timer.”h]”hŒƒIf true, vblank interrupt will be disabled immediately when the refcount drops to zero, as opposed to via the vblank disable timer.”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M hjâubhÎ)�”}”(hX�This can be set to true it the hardware has a working vblank counter with high-precision timestamping (otherwise there are races) and the driver uses drm_crtc_vblank_on() and drm_crtc_vblank_off() appropriately. Also, see **max_vblank_count**, :c:type:`drm_crtc_funcs.get_vblank_counter ` and :c:type:`drm_vblank_crtc_config.disable_immediate `.”h]”(hŒÞThis can be set to true it the hardware has a working vblank counter with high-precision timestamping (otherwise there are races) and the driver uses drm_crtc_vblank_on() and drm_crtc_vblank_off() appropriately. Also, see ”…”�”}”(hjôh²hh³Nh´NubjB)�”}”(hŒ**max_vblank_count**”h]”hŒmax_vblank_count”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjôubhŒ, ”…”�”}”(hjôh²hh³Nh´Nubh)�”}”(hŒ<:c:type:`drm_crtc_funcs.get_vblank_counter `”h]”jî)�”}”(hjh]”hŒ!drm_crtc_funcs.get_vblank_counter”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_crtc_funcs”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´MhjôubhŒ and ”…”�”}”(hjôh²hh³Nh´Nubh)�”}”(hŒK:c:type:`drm_vblank_crtc_config.disable_immediate `”h]”jî)�”}”(hj4h]”hŒ(drm_vblank_crtc_config.disable_immediate”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj2ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_vblank_crtc_config”uh1hh³j-h´MhjôubhŒ.”…”�”}”(hjôh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j-h´Mhjâubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jáh´MhjV ubj‰)�”}”(hX5``vblank`` Array of vblank tracking structures, one per :c:type:`struct drm_crtc `. For historical reasons (vblank support predates kernel modesetting) this is free-standing and not part of :c:type:`struct drm_crtc ` itself. It must be initialized explicitly by calling drm_vblank_init(). ”h]”(j�)�”}”(hŒ ``vblank``”h]”jî)�”}”(hjmh]”hŒvblank”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Mhjgubj©)�”}”(hhh]”hÎ)�”}”(hX)Array of vblank tracking structures, one per :c:type:`struct drm_crtc `. For historical reasons (vblank support predates kernel modesetting) this is free-standing and not part of :c:type:`struct drm_crtc ` itself. It must be initialized explicitly by calling drm_vblank_init().”h]”(hŒ-Array of vblank tracking structures, one per ”…”�”}”(hj†h²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct drm_crtc `”h]”jî)�”}”(hj�h]”hŒstruct drm_crtc”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjŽubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_crtc”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Mhj†ubhŒl. For historical reasons (vblank support predates kernel modesetting) this is free-standing and not part of ”…”�”}”(hj†h²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct drm_crtc `”h]”jî)�”}”(hj´h]”hŒstruct drm_crtc”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj²ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_crtc”uh1hh³j­h´Mhj†ubhŒH itself. It must be initialized explicitly by calling drm_vblank_init().”…”�”}”(hj†h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j­h´Mhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j‚h´MhjV ubj‰)�”}”(hŒY``vblank_time_lock`` Protects vblank count and time updates during vblank enable/disable ”h]”(j�)�”}”(hŒ``vblank_time_lock``”h]”jî)�”}”(hjíh]”hŒvblank_time_lock”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M$hjçubj©)�”}”(hhh]”hÎ)�”}”(hŒCProtects vblank count and time updates during vblank enable/disable”h]”hŒCProtects vblank count and time updates during vblank enable/disable”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jh´M$hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jh´M$hjV ubj‰)�”}”(hŒY``vbl_lock`` Top-level vblank references lock, wraps the low-level **vblank_time_lock**. ”h]”(j�)�”}”(hŒ ``vbl_lock``”h]”jî)�”}”(hj&h]”hŒvbl_lock”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M+hj ubj©)�”}”(hhh]”hÎ)�”}”(hŒKTop-level vblank references lock, wraps the low-level **vblank_time_lock**.”h]”(hŒ6Top-level vblank references lock, wraps the low-level ”…”�”}”(hj?h²hh³Nh´NubjB)�”}”(hŒ**vblank_time_lock**”h]”hŒvblank_time_lock”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj?ubhŒ.”…”�”}”(hj?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M*hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j;h´M+hjV ubj‰)�”}”(hX€``max_vblank_count`` Maximum value of the vblank registers. This value +1 will result in a wrap-around of the vblank register. It is used by the vblank core to handle wrap-arounds. If set to zero the vblank core will try to guess the elapsed vblanks between times when the vblank interrupt is disabled through high-precision timestamps. That approach is suffering from small races and imprecision over longer time periods, hence exposing a hardware vblank counter is always recommended. This is the statically configured device wide maximum. The driver can instead choose to use a runtime configurable per-crtc value :c:type:`drm_vblank_crtc.max_vblank_count `, in which case **max_vblank_count** must be left at zero. See drm_crtc_set_max_vblank_count() on how to use the per-crtc value. If non-zero, :c:type:`drm_crtc_funcs.get_vblank_counter ` must be set. ”h]”(j�)�”}”(hŒ``max_vblank_count``”h]”jî)�”}”(hjrh]”hŒmax_vblank_count”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M@hjlubj©)�”}”(hhh]”(hÎ)�”}”(hŒŸMaximum value of the vblank registers. This value +1 will result in a wrap-around of the vblank register. It is used by the vblank core to handle wrap-arounds.”h]”hŒŸMaximum value of the vblank registers. This value +1 will result in a wrap-around of the vblank register. It is used by the vblank core to handle wrap-arounds.”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M0hjˆubhÎ)�”}”(hX1If set to zero the vblank core will try to guess the elapsed vblanks between times when the vblank interrupt is disabled through high-precision timestamps. That approach is suffering from small races and imprecision over longer time periods, hence exposing a hardware vblank counter is always recommended.”h]”hX1If set to zero the vblank core will try to guess the elapsed vblanks between times when the vblank interrupt is disabled through high-precision timestamps. That approach is suffering from small races and imprecision over longer time periods, hence exposing a hardware vblank counter is always recommended.”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M4hjˆubhÎ)�”}”(hX>This is the statically configured device wide maximum. The driver can instead choose to use a runtime configurable per-crtc value :c:type:`drm_vblank_crtc.max_vblank_count `, in which case **max_vblank_count** must be left at zero. See drm_crtc_set_max_vblank_count() on how to use the per-crtc value.”h]”(hŒ‚This is the statically configured device wide maximum. The driver can instead choose to use a runtime configurable per-crtc value ”…”�”}”(hj©h²hh³Nh´Nubh)�”}”(hŒ<:c:type:`drm_vblank_crtc.max_vblank_count `”h]”jî)�”}”(hj³h]”hŒ drm_vblank_crtc.max_vblank_count”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj±ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_vblank_crtc”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M:hj©ubhŒ, in which case ”…”�”}”(hj©h²hh³Nh´NubjB)�”}”(hŒ**max_vblank_count**”h]”hŒmax_vblank_count”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj©ubhŒ\ must be left at zero. See drm_crtc_set_max_vblank_count() on how to use the per-crtc value.”…”�”}”(hj©h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÐh´M:hjˆubhÎ)�”}”(hŒVIf non-zero, :c:type:`drm_crtc_funcs.get_vblank_counter ` must be set.”h]”(hŒ If non-zero, ”…”�”}”(hjíh²hh³Nh´Nubh)�”}”(hŒ<:c:type:`drm_crtc_funcs.get_vblank_counter `”h]”jî)�”}”(hj÷h]”hŒ!drm_crtc_funcs.get_vblank_counter”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjõubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_crtc_funcs”uh1hh³j‡h´M@hjíubhŒ must be set.”…”�”}”(hjíh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j‡h´M@hjˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j‡h´M@hjV ubj‰)�”}”(hŒ,``vblank_event_list`` List of vblank events ”h]”(j�)�”}”(hŒ``vblank_event_list``”h]”jî)�”}”(hj0h]”hŒvblank_event_list”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´MFhj*ubj©)�”}”(hhh]”hÎ)�”}”(hŒList of vblank events”h]”hŒList of vblank events”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jEh´MFhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jEh´MFhjV ubj‰)�”}”(hŒ``event_lock`` Protects **vblank_event_list** and event delivery in general. See drm_send_event() and drm_send_event_locked(). ”h]”(j�)�”}”(hŒ``event_lock``”h]”jî)�”}”(hjih]”hŒ event_lock”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´MKhjcubj©)�”}”(hhh]”hÎ)�”}”(hŒoProtects **vblank_event_list** and event delivery in general. See drm_send_event() and drm_send_event_locked().”h]”(hŒ Protects ”…”�”}”(hj‚h²hh³Nh´NubjB)�”}”(hŒ**vblank_event_list**”h]”hŒvblank_event_list”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj‚ubhŒQ and event delivery in general. See drm_send_event() and drm_send_event_locked().”…”�”}”(hj‚h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´MJhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjcubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j~h´MKhjV ubj‰)�”}”(hŒ-``num_crtcs`` Number of CRTCs on this device ”h]”(j�)�”}”(hŒ ``num_crtcs``”h]”jî)�”}”(hjµh]”hŒ num_crtcs”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´MQhj¯ubj©)�”}”(hhh]”hÎ)�”}”(hŒNumber of CRTCs on this device”h]”hŒNumber of CRTCs on this device”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÊh´MQhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÊh´MQhjV ubj‰)�”}”(hŒ$``mode_config`` Current mode config ”h]”(j�)�”}”(hŒ``mode_config``”h]”jî)�”}”(hjîh]”hŒ mode_config”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´MThjèubj©)�”}”(hhh]”hÎ)�”}”(hŒCurrent mode config”h]”hŒCurrent mode config”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jh´MThjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jh´MThjV ubj‰)�”}”(hŒ%``object_name_lock`` GEM information ”h]”(j�)�”}”(hŒ``object_name_lock``”h]”jî)�”}”(hj'h]”hŒobject_name_lock”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´MWhj!ubj©)�”}”(hhh]”hÎ)�”}”(hŒGEM information”h]”hŒGEM information”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j<h´MWhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j<h´MWhjV ubj‰)�”}”(hŒ$``object_name_idr`` GEM information ”h]”(j�)�”}”(hŒ``object_name_idr``”h]”jî)�”}”(hj`h]”hŒobject_name_idr”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´MZhjZubj©)�”}”(hhh]”hÎ)�”}”(hŒGEM information”h]”hŒGEM information”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³juh´MZhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³juh´MZhjV ubj‰)�”}”(hŒ'``vma_offset_manager`` GEM information ”h]”(j�)�”}”(hŒ``vma_offset_manager``”h]”jî)�”}”(hj™h]”hŒvma_offset_manager”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M]hj“ubj©)�”}”(hhh]”hÎ)�”}”(hŒGEM information”h]”hŒGEM information”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j®h´M]hj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j®h´M]hjV ubj‰)�”}”(hŒ#``vram_mm`` VRAM MM memory manager ”h]”(j�)�”}”(hŒ ``vram_mm``”h]”jî)�”}”(hjÒh]”hŒvram_mm”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M`hjÌubj©)�”}”(hhh]”hÎ)�”}”(hŒVRAM MM memory manager”h]”hŒVRAM MM memory manager”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jçh´M`hjèubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jçh´M`hjV ubj‰)�”}”(hŒÚ``switch_power_state`` Power state of the client. Used by drivers supporting the switcheroo driver. The state is maintained in the :c:type:`vga_switcheroo_client_ops.set_gpu_state ` callback ”h]”(j�)�”}”(hŒ``switch_power_state``”h]”jî)�”}”(hj h]”hŒswitch_power_state”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Mghjubj©)�”}”(hhh]”hÎ)�”}”(hŒÂPower state of the client. Used by drivers supporting the switcheroo driver. The state is maintained in the :c:type:`vga_switcheroo_client_ops.set_gpu_state ` callback”h]”(hŒlPower state of the client. Used by drivers supporting the switcheroo driver. The state is maintained in the ”…”�”}”(hj$h²hh³Nh´Nubh)�”}”(hŒM:c:type:`vga_switcheroo_client_ops.set_gpu_state `”h]”jî)�”}”(hj.h]”hŒ'vga_switcheroo_client_ops.set_gpu_state”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj,ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œvga_switcheroo_client_ops”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Mdhj$ubhŒ callback”…”�”}”(hj$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jKh´Mdhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j h´MghjV ubj‰)�”}”(hŒy``fb_helper`` Pointer to the fbdev emulation structure. Set by drm_fb_helper_init() and cleared by drm_fb_helper_fini(). ”h]”(j�)�”}”(hŒ ``fb_helper``”h]”jî)�”}”(hjhh]”hŒ fb_helper”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Mohjbubj©)�”}”(hhh]”hÎ)�”}”(hŒjPointer to the fbdev emulation structure. Set by drm_fb_helper_init() and cleared by drm_fb_helper_fini().”h]”hŒjPointer to the fbdev emulation structure. Set by drm_fb_helper_init() and cleared by drm_fb_helper_fini().”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Mnhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j}h´MohjV ubj‰)�”}”(hŒ3``debugfs_root`` Root directory for debugfs files. ”h]”(j�)�”}”(hŒ``debugfs_root``”h]”jî)�”}”(hj¢h]”hŒ debugfs_root”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Mvhjœubj©)�”}”(hhh]”hÎ)�”}”(hŒ!Root directory for debugfs files.”h]”hŒ!Root directory for debugfs files.”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j·h´Mvhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j·h´MvhjV ubj‰)�”}”(hŒG``gem_lru_mutex`` Lock protecting movement of GEM objects between LRUs.”h]”(j�)�”}”(hŒ``gem_lru_mutex``”h]”jî)�”}”(hjÛh]”hŒ gem_lru_mutex”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M|hjÕubj©)�”}”(hhh]”hÎ)�”}”(hŒ5Lock protecting movement of GEM objects between LRUs.”h]”hŒ5Lock protecting movement of GEM objects between LRUs.”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M}hjñubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jðh´M|hjV ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´NubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjh]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M€hjHh²hubhÎ)�”}”(hŒIThis structure represent a complete card that may contain multiple heads.”h]”hŒIThis structure represent a complete card that may contain multiple heads.”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´KGhjHh²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_dev_dma_dev (C function)”Œc.drm_dev_dma_dev”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ8struct device * drm_dev_dma_dev (struct drm_device *dev)”h]”j¶)�”}”(hŒ6struct device *drm_dev_dma_dev(struct drm_device *dev)”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjXh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M†ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjXh²hh³jih´M†ubh)�”}”(hhh]”jå)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjxubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”Œ identifier”Œ reftarget”j}Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jÕ Œ ASTIdentifier”“”)�”}”j‘Œdrm_dev_dma_dev”sbŒc.drm_dev_dma_dev”†”asbuh1hhjXh²hh³jih´M†ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjXh²hh³jih´M†ubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j­hjXh²hh³jih´M†ubjß)�”}”(hŒdrm_dev_dma_dev”h]”jå)�”}”(hjœh]”hŒdrm_dev_dma_dev”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¾ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjXh²hh³jih´M†ubhŒdesc_parameterlist”“”)�”}”(hŒ(struct drm_device *dev)”h]”hŒdesc_parameter”“”)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjÝubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÝubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjüubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jšŒc.drm_dev_dma_dev”†”asbuh1hhjÝubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÝubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjÝubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj×ubah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjXh²hh³jih´M†ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjTh²hh³jih´M†ubah}”(h]”jOah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jih´M†hjQh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ'returns the DMA device for a DRM device”h]”hŒ'returns the DMA device for a DRM device”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M†hj_h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQh²hh³jih´M†ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jzj3jzj4‰j5‰j6‰uh1jªh²hhjHh³Nh´Nubj8)�”}”(hŒô**Parameters** ``struct drm_device *dev`` DRM device **Description** Returns the DMA device of the given DRM device. By default, this the DRM device's parent. See drm_dev_set_dma_dev(). **Return** A DMA-capable device for the DRM device.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj„h]”hŒ Parameters”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´MŠhj~ubj„)�”}”(hhh]”j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hj£h]”hŒstruct drm_device *dev”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M‡hj�ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j¸h´M‡hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j¸h´M‡hjšubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj~ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjÞh]”hŒ Description”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M‰hj~ubhÎ)�”}”(hŒtReturns the DMA device of the given DRM device. By default, this the DRM device's parent. See drm_dev_set_dma_dev().”h]”hŒvReturns the DMA device of the given DRM device. By default, this the DRM device’s parent. See drm_dev_set_dma_dev().”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´Mˆhj~ubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hjh]”hŒReturn”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´M‹hj~ubhÎ)�”}”(hŒ(A DMA-capable device for the DRM device.”h]”hŒ(A DMA-capable device for the DRM device.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:86: ./include/drm/drm_device.h”h´MŒhj~ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_driver_feature (C enum)”Œc.drm_driver_feature”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒdrm_driver_feature”h]”j¶)�”}”(hŒenum drm_driver_feature”h]”(j¼)�”}”(hj) h]”hŒenum”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjFh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjFh²hh³jWh´Kubjß)�”}”(hŒdrm_driver_feature”h]”jå)�”}”(hjDh]”hŒdrm_driver_feature”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjfubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjFh²hh³jWh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjBh²hh³jWh´Kubah}”(h]”j=ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jWh´Khj?h²hubj)�”}”(hhh]”hÎ)�”}”(hŒ feature flags”h]”hŒ feature flags”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´K5hj‰h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?h²hh³jWh´Kubeh}”(h]”h ]”(júŒenum”eh"]”h$]”h&]”j1júj2j¤j3j¤j4‰j5‰j6‰uh1jªh²hhjHh³Nh´Nubj8)�”}”(hXt**Constants** ``DRIVER_GEM`` Driver use the GEM memory manager. This should be set for all modern drivers. ``DRIVER_MODESET`` Driver supports mode setting interfaces (KMS). ``DRIVER_RENDER`` Driver supports dedicated render nodes. See also the :ref:`section on render nodes ` for details. ``DRIVER_ATOMIC`` Driver supports the full atomic modesetting userspace API. Drivers which only use atomic internally, but do not support the full userspace API (e.g. not all properties converted to atomic, or multi-plane updates are not guaranteed to be tear-free) should not set this flag. ``DRIVER_SYNCOBJ`` Driver supports :c:type:`drm_syncobj` for explicit synchronization of command submission. ``DRIVER_SYNCOBJ_TIMELINE`` Driver supports the timeline flavor of :c:type:`drm_syncobj` for explicit synchronization of command submission. ``DRIVER_COMPUTE_ACCEL`` Driver supports compute acceleration devices. This flag is mutually exclusive with **DRIVER_RENDER** and **DRIVER_MODESET**. Devices that support both graphics and compute acceleration should be handled by two drivers that are connected using auxiliary bus. ``DRIVER_CURSOR_HOTSPOT`` Driver supports and requires cursor hotspot information in the cursor plane (e.g. cursor plane has to actually track the mouse cursor and the clients are required to set hotspot in order for the cursor planes to work correctly). ``DRIVER_USE_AGP`` Set up DRM AGP support, see drm_agp_init(), the DRM core will manage AGP resources. New drivers don't need this. ``DRIVER_LEGACY`` Denote a legacy driver using shadow attach. Do not use. ``DRIVER_PCI_DMA`` Driver is capable of PCI DMA, mapping of PCI DMA buffers to userspace will be enabled. Only for legacy drivers. Do not use. ``DRIVER_SG`` Driver can perform scatter/gather DMA, allocation and mapping of scatter/gather buffers will be enabled. Only for legacy drivers. Do not use. ``DRIVER_HAVE_DMA`` Driver supports DMA, the userspace DMA API will be supported. Only for legacy drivers. Do not use. ``DRIVER_HAVE_IRQ`` Legacy irq support. Only for legacy drivers. Do not use.”h]”(hÎ)�”}”(hŒ **Constants**”h]”jB)�”}”(hj®h]”hŒ Constants”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´K9hj¨ubj„)�”}”(hhh]”(j‰)�”}”(hŒ]``DRIVER_GEM`` Driver use the GEM memory manager. This should be set for all modern drivers. ”h]”(j�)�”}”(hŒ``DRIVER_GEM``”h]”jî)�”}”(hjÍh]”hŒ DRIVER_GEM”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´K=hjÇubj©)�”}”(hhh]”hÎ)�”}”(hŒMDriver use the GEM memory manager. This should be set for all modern drivers.”h]”hŒMDriver use the GEM memory manager. This should be set for all modern drivers.”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´K` for details. ”h]”(j�)�”}”(hŒ``DRIVER_RENDER``”h]”jî)�”}”(hj@h]”hŒ DRIVER_RENDER”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KDhj:ubj©)�”}”(hhh]”hÎ)�”}”(hŒrDriver supports dedicated render nodes. See also the :ref:`section on render nodes ` for details.”h]”(hŒ5Driver supports dedicated render nodes. See also the ”…”�”}”(hjYh²hh³Nh´Nubh)�”}”(hŒ0:ref:`section on render nodes `”h]”hŒinline”“”)�”}”(hjch]”hŒsection on render nodes”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”(jùŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jehjaubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jqŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj Œdrm_render_node”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KChjYubhŒ for details.”…”�”}”(hjYh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jƒh´KChjVubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jUh´KDhjÄubj‰)�”}”(hX$``DRIVER_ATOMIC`` Driver supports the full atomic modesetting userspace API. Drivers which only use atomic internally, but do not support the full userspace API (e.g. not all properties converted to atomic, or multi-plane updates are not guaranteed to be tear-free) should not set this flag. ”h]”(j�)�”}”(hŒ``DRIVER_ATOMIC``”h]”jî)�”}”(hj h]”hŒ DRIVER_ATOMIC”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KKhjšubj©)�”}”(hhh]”hÎ)�”}”(hXDriver supports the full atomic modesetting userspace API. Drivers which only use atomic internally, but do not support the full userspace API (e.g. not all properties converted to atomic, or multi-plane updates are not guaranteed to be tear-free) should not set this flag.”h]”hXDriver supports the full atomic modesetting userspace API. Drivers which only use atomic internally, but do not support the full userspace API (e.g. not all properties converted to atomic, or multi-plane updates are not guaranteed to be tear-free) should not set this flag.”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KGhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jµh´KKhjÄubj‰)�”}”(hŒm``DRIVER_SYNCOBJ`` Driver supports :c:type:`drm_syncobj` for explicit synchronization of command submission. ”h]”(j�)�”}”(hŒ``DRIVER_SYNCOBJ``”h]”jî)�”}”(hjÚh]”hŒDRIVER_SYNCOBJ”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KOhjÔubj©)�”}”(hhh]”hÎ)�”}”(hŒYDriver supports :c:type:`drm_syncobj` for explicit synchronization of command submission.”h]”(hŒDriver supports ”…”�”}”(hjóh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_syncobj`”h]”jî)�”}”(hjýh]”hŒ drm_syncobj”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjûubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_syncobj”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KNhjóubhŒ4 for explicit synchronization of command submission.”…”�”}”(hjóh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jh´KNhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jïh´KOhjÄubj‰)�”}”(hŒ�``DRIVER_SYNCOBJ_TIMELINE`` Driver supports the timeline flavor of :c:type:`drm_syncobj` for explicit synchronization of command submission. ”h]”(j�)�”}”(hŒ``DRIVER_SYNCOBJ_TIMELINE``”h]”jî)�”}”(hj7h]”hŒDRIVER_SYNCOBJ_TIMELINE”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KShj1ubj©)�”}”(hhh]”hÎ)�”}”(hŒpDriver supports the timeline flavor of :c:type:`drm_syncobj` for explicit synchronization of command submission.”h]”(hŒ'Driver supports the timeline flavor of ”…”�”}”(hjPh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_syncobj`”h]”jî)�”}”(hjZh]”hŒ drm_syncobj”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjXubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_syncobj”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KRhjPubhŒ4 for explicit synchronization of command submission.”…”�”}”(hjPh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jwh´KRhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jLh´KShjÄubj‰)�”}”(hX``DRIVER_COMPUTE_ACCEL`` Driver supports compute acceleration devices. This flag is mutually exclusive with **DRIVER_RENDER** and **DRIVER_MODESET**. Devices that support both graphics and compute acceleration should be handled by two drivers that are connected using auxiliary bus. ”h]”(j�)�”}”(hŒ``DRIVER_COMPUTE_ACCEL``”h]”jî)�”}”(hj”h]”hŒDRIVER_COMPUTE_ACCEL”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KXhjŽubj©)�”}”(hhh]”hÎ)�”}”(hXDriver supports compute acceleration devices. This flag is mutually exclusive with **DRIVER_RENDER** and **DRIVER_MODESET**. Devices that support both graphics and compute acceleration should be handled by two drivers that are connected using auxiliary bus.”h]”(hŒSDriver supports compute acceleration devices. This flag is mutually exclusive with ”…”�”}”(hj­h²hh³Nh´NubjB)�”}”(hŒ**DRIVER_RENDER**”h]”hŒ DRIVER_RENDER”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj­ubhŒ and ”…”�”}”(hj­h²hh³Nh´NubjB)�”}”(hŒ**DRIVER_MODESET**”h]”hŒDRIVER_MODESET”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj­ubhŒ†. Devices that support both graphics and compute acceleration should be handled by two drivers that are connected using auxiliary bus.”…”�”}”(hj­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KVhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j©h´KXhjÄubj‰)�”}”(hŒÿ``DRIVER_CURSOR_HOTSPOT`` Driver supports and requires cursor hotspot information in the cursor plane (e.g. cursor plane has to actually track the mouse cursor and the clients are required to set hotspot in order for the cursor planes to work correctly). ”h]”(j�)�”}”(hŒ``DRIVER_CURSOR_HOTSPOT``”h]”jî)�”}”(hjòh]”hŒDRIVER_CURSOR_HOTSPOT”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´K^hjìubj©)�”}”(hhh]”hÎ)�”}”(hŒäDriver supports and requires cursor hotspot information in the cursor plane (e.g. cursor plane has to actually track the mouse cursor and the clients are required to set hotspot in order for the cursor planes to work correctly).”h]”hŒäDriver supports and requires cursor hotspot information in the cursor plane (e.g. cursor plane has to actually track the mouse cursor and the clients are required to set hotspot in order for the cursor planes to work correctly).”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´K[hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jh´K^hjÄubj‰)�”}”(hŒ„``DRIVER_USE_AGP`` Set up DRM AGP support, see drm_agp_init(), the DRM core will manage AGP resources. New drivers don't need this. ”h]”(j�)�”}”(hŒ``DRIVER_USE_AGP``”h]”jî)�”}”(hj,h]”hŒDRIVER_USE_AGP”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Kbhj&ubj©)�”}”(hhh]”hÎ)�”}”(hŒpSet up DRM AGP support, see drm_agp_init(), the DRM core will manage AGP resources. New drivers don't need this.”h]”hŒrSet up DRM AGP support, see drm_agp_init(), the DRM core will manage AGP resources. New drivers don’t need this.”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KahjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jAh´KbhjÄubj‰)�”}”(hŒJ``DRIVER_LEGACY`` Denote a legacy driver using shadow attach. Do not use. ”h]”(j�)�”}”(hŒ``DRIVER_LEGACY``”h]”jî)�”}”(hjfh]”hŒ DRIVER_LEGACY”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Kehj`ubj©)�”}”(hhh]”hÎ)�”}”(hŒ7Denote a legacy driver using shadow attach. Do not use.”h]”hŒ7Denote a legacy driver using shadow attach. Do not use.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j{h´Kehj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j{h´KehjÄubj‰)�”}”(hŒ�``DRIVER_PCI_DMA`` Driver is capable of PCI DMA, mapping of PCI DMA buffers to userspace will be enabled. Only for legacy drivers. Do not use. ”h]”(j�)�”}”(hŒ``DRIVER_PCI_DMA``”h]”jî)�”}”(hjŸh]”hŒDRIVER_PCI_DMA”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Kihj™ubj©)�”}”(hhh]”hÎ)�”}”(hŒ{Driver is capable of PCI DMA, mapping of PCI DMA buffers to userspace will be enabled. Only for legacy drivers. Do not use.”h]”hŒ{Driver is capable of PCI DMA, mapping of PCI DMA buffers to userspace will be enabled. Only for legacy drivers. Do not use.”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Khhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j´h´KihjÄubj‰)�”}”(hŒœ``DRIVER_SG`` Driver can perform scatter/gather DMA, allocation and mapping of scatter/gather buffers will be enabled. Only for legacy drivers. Do not use. ”h]”(j�)�”}”(hŒ ``DRIVER_SG``”h]”jî)�”}”(hjÙh]”hŒ DRIVER_SG”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KnhjÓubj©)�”}”(hhh]”hÎ)�”}”(hŒ�Driver can perform scatter/gather DMA, allocation and mapping of scatter/gather buffers will be enabled. Only for legacy drivers. Do not use.”h]”hŒ�Driver can perform scatter/gather DMA, allocation and mapping of scatter/gather buffers will be enabled. Only for legacy drivers. Do not use.”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Klhjïubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jîh´KnhjÄubj‰)�”}”(hŒw``DRIVER_HAVE_DMA`` Driver supports DMA, the userspace DMA API will be supported. Only for legacy drivers. Do not use. ”h]”(j�)�”}”(hŒ``DRIVER_HAVE_DMA``”h]”jî)�”}”(hjh]”hŒDRIVER_HAVE_DMA”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Krhj ubj©)�”}”(hhh]”hÎ)�”}”(hŒbDriver supports DMA, the userspace DMA API will be supported. Only for legacy drivers. Do not use.”•4h]”hŒbDriver supports DMA, the userspace DMA API will be supported. Only for legacy drivers. Do not use.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Kqhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j(h´KrhjÄubj‰)�”}”(hŒL``DRIVER_HAVE_IRQ`` Legacy irq support. Only for legacy drivers. Do not use.”h]”(j�)�”}”(hŒ``DRIVER_HAVE_IRQ``”h]”jî)�”}”(hjMh]”hŒDRIVER_HAVE_IRQ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KthjGubj©)�”}”(hhh]”hÎ)�”}”(hŒ8Legacy irq support. Only for legacy drivers. Do not use.”h]”hŒ8Legacy irq support. Only for legacy drivers. Do not use.”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Kuhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jbh´KthjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj¨ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´NubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj�h]”hŒ Description”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KwhjHh²hubhÎ)�”}”(hŒoSee :c:type:`drm_driver.driver_features `, drm_device.driver_features and drm_core_check_feature().”h]”(hŒSee ”…”�”}”(hj¦h²hh³Nh´Nubh)�”}”(hŒ1:c:type:`drm_driver.driver_features `”h]”jî)�”}”(hj°h]”hŒdrm_driver.driver_features”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj®ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_driver”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´K6hj¦ubhŒ:, drm_device.driver_features and drm_core_check_feature().”…”�”}”(hj¦h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÍh´K6hjHh²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_driver (C struct)”Œ c.drm_driver”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ drm_driver”h]”j¶)�”}”(hŒstruct drm_driver”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjíh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´K`. This is deprecated, do not use! Returns: Zero on success, non-zero value on failure. ``open`` Driver callback when a new :c:type:`struct drm_file ` is opened. Useful for setting up driver-private data structures like buffer allocators, execution contexts or similar things. Such driver-private resources must be released again in **postclose**. Since the display/modeset side of DRM can only be owned by exactly one :c:type:`struct drm_file ` (see :c:type:`drm_file.is_master ` and :c:type:`drm_device.master `) there should never be a need to set up any modeset related resources in this callback. Doing so would be a driver design bug. Returns: 0 on success, a negative error code on failure, which will be promoted to userspace as the result of the open() system call. ``postclose`` One of the driver callbacks when a new :c:type:`struct drm_file ` is closed. Useful for tearing down driver-private data structures allocated in **open** like buffer allocators, execution contexts or similar things. Since the display/modeset side of DRM can only be owned by exactly one :c:type:`struct drm_file ` (see :c:type:`drm_file.is_master ` and :c:type:`drm_device.master `) there should never be a need to tear down any modeset related resources in this callback. Doing so would be a driver design bug. ``unload`` Reverse the effects of the driver load callback. Ideally, the clean up performed by the driver should happen in the reverse order of the initialization. Similarly to the load hook, this handler is deprecated and its usage should be dropped in favor of an open-coded teardown function at the driver layer. See drm_dev_unregister() and drm_dev_put() for the proper way to remove a :c:type:`struct drm_device `. The unload() hook is called right after unregistering the device. ``release`` Optional callback for destroying device data after the final reference is released, i.e. the device is being destroyed. This is deprecated, clean up all memory allocations associated with a :c:type:`drm_device` using drmm_add_action(), drmm_kmalloc() and related managed resources functions. ``master_set`` Called whenever the minor master is set. Only used by vmwgfx. ``master_drop`` Called whenever the minor master is dropped. Only used by vmwgfx. ``debugfs_init`` Allows drivers to create driver-specific debugfs files. ``gem_create_object`` constructor for gem objects Hook for allocating the GEM object struct, for use by the CMA and SHMEM GEM helpers. Returns a GEM object on success, or an ERR_PTR()-encoded error code otherwise. ``prime_handle_to_fd`` PRIME export function. Only used by vmwgfx. ``prime_fd_to_handle`` PRIME import function. Only used by vmwgfx. ``gem_prime_import`` Import hook for GEM drivers. This defaults to drm_gem_prime_import() if not set. ``gem_prime_import_sg_table`` Optional hook used by the PRIME helper functions drm_gem_prime_import() respectively drm_gem_prime_import_dev(). ``dumb_create`` This creates a new dumb buffer in the driver's backing storage manager (GEM, TTM or something else entirely) and returns the resulting buffer handle. This handle can then be wrapped up into a framebuffer modeset object. Note that userspace is not allowed to use such objects for render acceleration - drivers must create their own private ioctls for such a use case. Width, height and depth are specified in the :c:type:`drm_mode_create_dumb` argument. The callback needs to fill the handle, pitch and size for the created buffer. Called by the user via ioctl. Returns: Zero on success, negative errno on failure. ``dumb_map_offset`` Allocate an offset in the drm device node's address space to be able to memory map a dumb buffer. The default implementation is drm_gem_create_mmap_offset(). GEM based drivers must not overwrite this. Called by the user via ioctl. Returns: Zero on success, negative errno on failure. ``fbdev_probe`` Allocates and initialize the fb_info structure for fbdev emulation. Furthermore it also needs to allocate the DRM framebuffer used to back the fbdev. This callback is mandatory for fbdev support. Returns: 0 on success ot a negative error code otherwise. ``show_fdinfo`` Print device specific fdinfo. See Documentation/gpu/drm-usage-stats.rst. ``major`` driver major number ``minor`` driver minor number ``patchlevel`` driver patch level ``name`` driver name ``desc`` driver description ``driver_features`` Driver features, see :c:type:`enum drm_driver_feature `. Drivers can disable some features on a per-instance basis using :c:type:`drm_device.driver_features `. ``ioctls`` Array of driver-private IOCTL description entries. See the chapter on :ref:`IOCTL support in the userland interfaces chapter` for the full details. ``num_ioctls`` Number of entries in **ioctls**. ``fops`` File operations for the DRM device node. See the discussion in :ref:`file operations` for in-depth coverage and some examples.”h]”(hÎ)�”}”(hŒ**Definition**::”h]”(jB)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjS ubhŒ:”…”�”}”(hjS h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´K¬hjO ubj)�”}”(hX’struct drm_driver { int (*load) (struct drm_device *, unsigned long flags); int (*open) (struct drm_device *, struct drm_file *); void (*postclose) (struct drm_device *, struct drm_file *); void (*unload) (struct drm_device *); void (*release) (struct drm_device *); void (*master_set)(struct drm_device *dev, struct drm_file *file_priv, bool from_open); void (*master_drop)(struct drm_device *dev, struct drm_file *file_priv); void (*debugfs_init)(struct drm_minor *minor); struct drm_gem_object *(*gem_create_object)(struct drm_device *dev, size_t size); int (*prime_handle_to_fd)(struct drm_device *dev, struct drm_file *file_priv, uint32_t handle, uint32_t flags, int *prime_fd); int (*prime_fd_to_handle)(struct drm_device *dev, struct drm_file *file_priv, int prime_fd, uint32_t *handle); struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev, struct dma_buf *dma_buf); struct drm_gem_object *(*gem_prime_import_sg_table)( struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sgt); int (*dumb_create)(struct drm_file *file_priv, struct drm_device *dev, struct drm_mode_create_dumb *args); int (*dumb_map_offset)(struct drm_file *file_priv, struct drm_device *dev, uint32_t handle, uint64_t *offset); int (*fbdev_probe)(struct drm_fb_helper *fbdev_helper, struct drm_fb_helper_surface_size *sizes); void (*show_fdinfo)(struct drm_printer *p, struct drm_file *f); int major; int minor; int patchlevel; char *name; char *desc; u32 driver_features; const struct drm_ioctl_desc *ioctls; int num_ioctls; const struct file_operations *fops; };”h]”hX’struct drm_driver { int (*load) (struct drm_device *, unsigned long flags); int (*open) (struct drm_device *, struct drm_file *); void (*postclose) (struct drm_device *, struct drm_file *); void (*unload) (struct drm_device *); void (*release) (struct drm_device *); void (*master_set)(struct drm_device *dev, struct drm_file *file_priv, bool from_open); void (*master_drop)(struct drm_device *dev, struct drm_file *file_priv); void (*debugfs_init)(struct drm_minor *minor); struct drm_gem_object *(*gem_create_object)(struct drm_device *dev, size_t size); int (*prime_handle_to_fd)(struct drm_device *dev, struct drm_file *file_priv, uint32_t handle, uint32_t flags, int *prime_fd); int (*prime_fd_to_handle)(struct drm_device *dev, struct drm_file *file_priv, int prime_fd, uint32_t *handle); struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev, struct dma_buf *dma_buf); struct drm_gem_object *(*gem_prime_import_sg_table)( struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sgt); int (*dumb_create)(struct drm_file *file_priv, struct drm_device *dev, struct drm_mode_create_dumb *args); int (*dumb_map_offset)(struct drm_file *file_priv, struct drm_device *dev, uint32_t handle, uint64_t *offset); int (*fbdev_probe)(struct drm_fb_helper *fbdev_helper, struct drm_fb_helper_surface_size *sizes); void (*show_fdinfo)(struct drm_printer *p, struct drm_file *f); int major; int minor; int patchlevel; char *name; char *desc; u32 driver_features; const struct drm_ioctl_desc *ioctls; int num_ioctls; const struct file_operations *fops; };”…”�”}”hjp sbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´K®hjO ubhÎ)�”}”(hŒ **Members**”h]”jB)�”}”(hj� h]”hŒMembers”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KËhjO ubj„)�”}”(hhh]”(j‰)�”}”(hX``load`` Backward-compatible driver callback to complete initialization steps after the driver is registered. For this reason, may suffer from race conditions and its use is deprecated for new drivers. It is therefore only supported for existing drivers not yet converted to the new scheme. See devm_drm_dev_alloc() and drm_dev_register() for proper and race-free way to set up a :c:type:`struct drm_device `. This is deprecated, do not use! Returns: Zero on success, non-zero value on failure. ”h]”(j�)�”}”(hŒ``load``”h]”jî)�”}”(hj  h]”hŒload”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjž ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´K¾hjš ubj©)�”}”(hhh]”(hÎ)�”}”(hXŸBackward-compatible driver callback to complete initialization steps after the driver is registered. For this reason, may suffer from race conditions and its use is deprecated for new drivers. It is therefore only supported for existing drivers not yet converted to the new scheme. See devm_drm_dev_alloc() and drm_dev_register() for proper and race-free way to set up a :c:type:`struct drm_device `.”h]”(hXvBackward-compatible driver callback to complete initialization steps after the driver is registered. For this reason, may suffer from race conditions and its use is deprecated for new drivers. It is therefore only supported for existing drivers not yet converted to the new scheme. See devm_drm_dev_alloc() and drm_dev_register() for proper and race-free way to set up a ”…”�”}”(hj¹ h²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct drm_device `”h]”jî)�”}”(hjà h]”hŒstruct drm_device”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÁ ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´K³hj¹ ubhŒ.”…”�”}”(hj¹ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jà h´K³hj¶ ubhÎ)�”}”(hŒThis is deprecated, do not use!”h]”hŒThis is deprecated, do not use!”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Kºhj¶ ubhÎ)�”}”(hŒReturns:”h]”hŒReturns:”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´K¼hj¶ ubhÎ)�”}”(hŒ+Zero on success, non-zero value on failure.”h]”hŒ+Zero on success, non-zero value on failure.”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jµ h´K¾hj¶ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjš ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jµ h´K¾hj— ubj‰)�”}”(hXÜ``open`` Driver callback when a new :c:type:`struct drm_file ` is opened. Useful for setting up driver-private data structures like buffer allocators, execution contexts or similar things. Such driver-private resources must be released again in **postclose**. Since the display/modeset side of DRM can only be owned by exactly one :c:type:`struct drm_file ` (see :c:type:`drm_file.is_master ` and :c:type:`drm_device.master `) there should never be a need to set up any modeset related resources in this callback. Doing so would be a driver design bug. Returns: 0 on success, a negative error code on failure, which will be promoted to userspace as the result of the open() system call. ”h]”(j�)�”}”(hŒ``open``”h]”jî)�”}”(hj)!h]”hŒopen”…”�”}”(hj+!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj'!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KÒhj#!ubj©)�”}”(hhh]”(hÎ)�”}”(hXDriver callback when a new :c:type:`struct drm_file ` is opened. Useful for setting up driver-private data structures like buffer allocators, execution contexts or similar things. Such driver-private resources must be released again in **postclose**.”h]”(hŒDriver callback when a new ”…”�”}”(hjB!h²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct drm_file `”h]”jî)�”}”(hjL!h]”hŒstruct drm_file”…”�”}”(hjN!h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjJ!ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_file”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KÅhjB!ubhŒ· is opened. Useful for setting up driver-private data structures like buffer allocators, execution contexts or similar things. Such driver-private resources must be released again in ”…”�”}”(hjB!h²hh³Nh´NubjB)�”}”(hŒ **postclose**”h]”hŒ postclose”…”�”}”(hjn!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjB!ubhŒ.”…”�”}”(hjB!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ji!h´KÅhj?!ubhÎ)�”}”(hXDSince the display/modeset side of DRM can only be owned by exactly one :c:type:`struct drm_file ` (see :c:type:`drm_file.is_master ` and :c:type:`drm_device.master `) there should never be a need to set up any modeset related resources in this callback. Doing so would be a driver design bug.”h]”(hŒGSince the display/modeset side of DRM can only be owned by exactly one ”…”�”}”(hj†!h²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct drm_file `”h]”jî)�”}”(hj�!h]”hŒstruct drm_file”…”�”}”(hj’!h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjŽ!ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_file”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KÊhj†!ubhŒ (see ”…”�”}”(hj†!h²hh³Nh´Nubh)�”}”(hŒ':c:type:`drm_file.is_master `”h]”jî)�”}”(hj´!h]”hŒdrm_file.is_master”…”�”}”(hj¶!h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj²!ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_file”uh1hh³j­!h´KÊhj†!ubhŒ and ”…”�”}”(hj†!h²hh³Nh´Nubh)�”}”(hŒ(:c:type:`drm_device.master `”h]”jî)�”}”(hj×!h]”hŒdrm_device.master”…”�”}”(hjÙ!h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÕ!ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³j­!h´KÊhj†!ubhŒ) there should never be a need to set up any modeset related resources in this callback. Doing so would be a driver design bug.”…”�”}”(hj†!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j­!h´KÊhj?!ubhÎ)�”}”(hŒReturns:”h]”hŒReturns:”…”�”}”(hjþ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KÏhj?!ubhÎ)�”}”(hŒ|0 on success, a negative error code on failure, which will be promoted to userspace as the result of the open() system call.”h]”hŒ|0 on success, a negative error code on failure, which will be promoted to userspace as the result of the open() system call.”…”�”}”(hj "h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KÑhj?!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj#!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j>!h´KÒhj— ubj‰)�”}”(hX9``postclose`` One of the driver callbacks when a new :c:type:`struct drm_file ` is closed. Useful for tearing down driver-private data structures allocated in **open** like buffer allocators, execution contexts or similar things. Since the display/modeset side of DRM can only be owned by exactly one :c:type:`struct drm_file ` (see :c:type:`drm_file.is_master ` and :c:type:`drm_device.master `) there should never be a need to tear down any modeset related resources in this callback. Doing so would be a driver design bug. ”h]”(j�)�”}”(hŒ ``postclose``”h]”jî)�”}”(hj."h]”hŒ postclose”…”�”}”(hj0"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj,"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Kàhj("ubj©)�”}”(hhh]”(hÎ)�”}”(hŒáOne of the driver callbacks when a new :c:type:`struct drm_file ` is closed. Useful for tearing down driver-private data structures allocated in **open** like buffer allocators, execution contexts or similar things.”h]”(hŒ'One of the driver callbacks when a new ”…”�”}”(hjG"h²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct drm_file `”h]”jî)�”}”(hjQ"h]”hŒstruct drm_file”…”�”}”(hjS"h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjO"ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_file”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KÙhjG"ubhŒP is closed. Useful for tearing down driver-private data structures allocated in ”…”�”}”(hjG"h²hh³Nh´NubjB)�”}”(hŒ**open**”h]”hŒopen”…”�”}”(hjs"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjG"ubhŒ> like buffer allocators, execution contexts or similar things.”…”�”}”(hjG"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jn"h´KÙhjD"ubhÎ)�”}”(hXGSince the display/modeset side of DRM can only be owned by exactly one :c:type:`struct drm_file ` (see :c:type:`drm_file.is_master ` and :c:type:`drm_device.master `) there should never be a need to tear down any modeset related resources in this callback. Doing so would be a driver design bug.”h]”(hŒGSince the display/modeset side of DRM can only be owned by exactly one ”…”�”}”(hj‹"h²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct drm_file `”h]”jî)�”}”(hj•"h]”hŒstruct drm_file”…”�”}”(hj—"h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj“"ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_file”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´KÝhj‹"ubhŒ (see ”…”�”}”(hj‹"h²hh³Nh´Nubh)�”}”(hŒ':c:type:`drm_file.is_master `”h]”jî)�”}”(hj¹"h]”hŒdrm_file.is_master”…”�”}”(hj»"h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj·"ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_file”uh1hh³j²"h´KÝhj‹"ubhŒ and ”…”�”}”(hj‹"h²hh³Nh´Nubh)�”}”(hŒ(:c:type:`drm_device.master `”h]”jî)�”}”(hjÜ"h]”hŒdrm_device.master”…”�”}”(hjÞ"h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÚ"ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³j²"h´KÝhj‹"ubhŒ‚) there should never be a need to tear down any modeset related resources in this callback. Doing so would be a driver design bug.”…”�”}”(hj‹"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j²"h´KÝhjD"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj("ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jC"h´Kàhj— ubj‰)�”}”(hXö``unload`` Reverse the effects of the driver load callback. Ideally, the clean up performed by the driver should happen in the reverse order of the initialization. Similarly to the load hook, this handler is deprecated and its usage should be dropped in favor of an open-coded teardown function at the driver layer. See drm_dev_unregister() and drm_dev_put() for the proper way to remove a :c:type:`struct drm_device `. The unload() hook is called right after unregistering the device. ”h]”(j�)�”}”(hŒ ``unload``”h]”jî)�”}”(hj#h]”hŒunload”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Kðhj#ubj©)�”}”(hhh]”(hÎ)�”}”(hX§Reverse the effects of the driver load callback. Ideally, the clean up performed by the driver should happen in the reverse order of the initialization. Similarly to the load hook, this handler is deprecated and its usage should be dropped in favor of an open-coded teardown function at the driver layer. See drm_dev_unregister() and drm_dev_put() for the proper way to remove a :c:type:`struct drm_device `.”h]”(hX~Reverse the effects of the driver load callback. Ideally, the clean up performed by the driver should happen in the reverse order of the initialization. Similarly to the load hook, this handler is deprecated and its usage should be dropped in favor of an open-coded teardown function at the driver layer. See drm_dev_unregister() and drm_dev_put() for the proper way to remove a ”…”�”}”(hj.#h²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct drm_device `”h]”jî)�”}”(hj8#h]”hŒstruct drm_device”…”�”}”(hj:#h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj6#ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Kçhj.#ubhŒ.”…”�”}”(hj.#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jU#h´Kçhj+#ubhÎ)�”}”(hŒAThe unload() hook is called right after unregistering the device.”h]”hŒAThe unload() hook is called right after unregistering the device.”…”�”}”(hj`#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Kïhj+#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j*#h´Kðhj— ubj‰)�”}”(hX1``release`` Optional callback for destroying device data after the final reference is released, i.e. the device is being destroyed. This is deprecated, clean up all memory allocations associated with a :c:type:`drm_device` using drmm_add_action(), drmm_kmalloc() and related managed resources functions. ”h]”(j�)�”}”(hŒ ``release``”h]”jî)�”}”(hj�#h]”hŒrelease”…”�”}”(hjƒ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Kýhj{#ubj©)�”}”(hhh]”(hÎ)�”}”(hŒwOptional callback for destroying device data after the final reference is released, i.e. the device is being destroyed.”h]”hŒwOptional callback for destroying device data after the final reference is released, i.e. the device is being destroyed.”…”�”}”(hjš#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Køhj—#ubhÎ)�”}”(hŒ«This is deprecated, clean up all memory allocations associated with a :c:type:`drm_device` using drmm_add_action(), drmm_kmalloc() and related managed resources functions.”h]”(hŒFThis is deprecated, clean up all memory allocations associated with a ”…”�”}”(hj©#h²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hj³#h]”hŒ drm_device”…”�”}”(hjµ#h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj±#ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Kûhj©#ubhŒQ using drmm_add_action(), drmm_kmalloc() and related managed resources functions.”…”�”}”(hj©#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÐ#h´Kûhj—#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj{#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j–#h´Kýhj— ubj‰)�”}”(hŒM``master_set`` Called whenever the minor master is set. Only used by vmwgfx. ”h]”(j�)�”}”(hŒ``master_set``”h]”jî)�”}”(hjí#h]”hŒ master_set”…”�”}”(hjï#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjë#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mhjç#ubj©)�”}”(hhh]”hÎ)�”}”(hŒ=Called whenever the minor master is set. Only used by vmwgfx.”h]”hŒ=Called whenever the minor master is set. Only used by vmwgfx.”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j$h´Mhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjç#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j$h´Mhj— ubj‰)�”}”(hŒR``master_drop`` Called whenever the minor master is dropped. Only used by vmwgfx. ”h]”(j�)�”}”(hŒ``master_drop``”h]”jî)�”}”(hj&$h]”hŒ master_drop”…”�”}”(hj($h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj$$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M hj $ubj©)�”}”(hhh]”hÎ)�”}”(hŒACalled whenever the minor master is dropped. Only used by vmwgfx.”h]”hŒACalled whenever the minor master is dropped. Only used by vmwgfx.”…”�”}”(hj?$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j;$h´M hj<$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj $ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j;$h´M hj— ubj‰)�”}”(hŒI``debugfs_init`` Allows drivers to create driver-specific debugfs files. ”h]”(j�)�”}”(hŒ``debugfs_init``”h]”jî)�”}”(hj_$h]”hŒ debugfs_init”…”�”}”(hja$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj]$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MhjY$ubj©)�”}”(hhh]”hÎ)�”}”(hŒ7Allows drivers to create driver-specific debugfs files.”h]”hŒ7Allows drivers to create driver-specific debugfs files.”…”�”}”(hjx$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jt$h´Mhju$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjY$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jt$h´Mhj— ubj‰)�”}”(hŒ×``gem_create_object`` constructor for gem objects Hook for allocating the GEM object struct, for use by the CMA and SHMEM GEM helpers. Returns a GEM object on success, or an ERR_PTR()-encoded error code otherwise. ”h]”(j�)�”}”(hŒ``gem_create_object``”h]”jî)�”}”(hj˜$h]”hŒgem_create_object”…”�”}”(hjš$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj–$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mhj’$ubj©)�”}”(hhh]”(hÎ)�”}”(hŒconstructor for gem objects”h]”hŒconstructor for gem objects”…”�”}”(hj±$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mhj®$ubhÎ)�”}”(hŒ£Hook for allocating the GEM object struct, for use by the CMA and SHMEM GEM helpers. Returns a GEM object on success, or an ERR_PTR()-encoded error code otherwise.”h]”hŒ£Hook for allocating the GEM object struct, for use by the CMA and SHMEM GEM helpers. Returns a GEM object on success, or an ERR_PTR()-encoded error code otherwise.”…”�”}”(hjÀ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mhj®$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj’$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j­$h´Mhj— ubj‰)�”}”(hŒC``prime_handle_to_fd`` PRIME export function. Only used by vmwgfx. ”h]”(j�)�”}”(hŒ``prime_handle_to_fd``”h]”jî)�”}”(hjá$h]”hŒprime_handle_to_fd”…”�”}”(hjã$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjß$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M#hjÛ$ubj©)�”}”(hhh]”hÎ)�”}”(hŒ+PRIME export function. Only used by vmwgfx.”h]”hŒ+PRIME export function. Only used by vmwgfx.”…”�”}”(hjú$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jö$h´M#hj÷$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÛ$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jö$h´M#hj— ubj‰)�”}”(hŒC``prime_fd_to_handle`` PRIME import function. Only used by vmwgfx. ”h]”(j�)�”}”(hŒ``prime_fd_to_handle``”h]”jî)�”}”(hj%h]”hŒprime_fd_to_handle”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M*hj%ubj©)�”}”(hhh]”hÎ)�”}”(hŒ+PRIME import function. Only used by vmwgfx.”h]”hŒ+PRIME import function. Only used by vmwgfx.”…”�”}”(hj3%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j/%h´M*hj0%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j/%h´M*hj— ubj‰)�”}”(hŒg``gem_prime_import`` Import hook for GEM drivers. This defaults to drm_gem_prime_import() if not set. ”h]”(j�)�”}”(hŒ``gem_prime_import``”h]”jî)�”}”(hjS%h]”hŒgem_prime_import”…”�”}”(hjU%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjQ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M4hjM%ubj©)�”}”(hhh]”(hÎ)�”}”(hŒImport hook for GEM drivers.”h]”hŒImport hook for GEM drivers.”…”�”}”(hjl%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M2hji%ubhÎ)�”}”(hŒ3This defaults to drm_gem_prime_import() if not set.”h]”hŒ3This defaults to drm_gem_prime_import() if not set.”…”�”}”(hj{%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jh%h´M4hji%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjM%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jh%h´M4hj— ubj‰)�”}”(hŒ�``gem_prime_import_sg_table`` Optional hook used by the PRIME helper functions drm_gem_prime_import() respectively drm_gem_prime_import_dev(). ”h]”(j�)�”}”(hŒ``gem_prime_import_sg_table``”h]”jî)�”}”(hj›%h]”hŒgem_prime_import_sg_table”…”�”}”(hj�%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj™%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M<hj•%ubj©)�”}”(hhh]”hÎ)�”}”(hŒpOptional hook used by the PRIME helper functions drm_gem_prime_import() respectively drm_gem_prime_import_dev().”h]”hŒpOptional hook used by the PRIME helper functions drm_gem_prime_import() respectively drm_gem_prime_import_dev().”…”�”}”(hj´%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M;hj±%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj•%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j°%h´M<hj— ubj‰)�”}”(hX{``dumb_create`` This creates a new dumb buffer in the driver's backing storage manager (GEM, TTM or something else entirely) and returns the resulting buffer handle. This handle can then be wrapped up into a framebuffer modeset object. Note that userspace is not allowed to use such objects for render acceleration - drivers must create their own private ioctls for such a use case. Width, height and depth are specified in the :c:type:`drm_mode_create_dumb` argument. The callback needs to fill the handle, pitch and size for the created buffer. Called by the user via ioctl. Returns: Zero on success, negative errno on failure. ”h]”(j�)�”}”(hŒ``dumb_create``”h]”jî)�”}”(hjÕ%h]”hŒ dumb_create”…”�”}”(hj×%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÓ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MVhjÏ%ubj©)�”}”(hhh]”(hÎ)�”}”(hŒÛThis creates a new dumb buffer in the driver's backing storage manager (GEM, TTM or something else entirely) and returns the resulting buffer handle. This handle can then be wrapped up into a framebuffer modeset object.”h]”hŒÝThis creates a new dumb buffer in the driver’s backing storage manager (GEM, TTM or something else entirely) and returns the resulting buffer handle. This handle can then be wrapped up into a framebuffer modeset object.”…”�”}”(hjî%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MFhjë%ubhÎ)�”}”(hŒ’Note that userspace is not allowed to use such objects for render acceleration - drivers must create their own private ioctls for such a use case.”h]”hŒ’Note that userspace is not allowed to use such objects for render acceleration - drivers must create their own private ioctls for such a use case.”…”�”}”(hjý%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MJhjë%ubhÎ)�”}”(hŒ£Width, height and depth are specified in the :c:type:`drm_mode_create_dumb` argument. The callback needs to fill the handle, pitch and size for the created buffer.”h]”(hŒ-Width, height and depth are specified in the ”…”�”}”(hj &h²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_mode_create_dumb`”h]”jî)�”}”(hj&h]”hŒdrm_mode_create_dumb”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj&ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œdrm_mode_create_dumb”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MNhj &ubhŒX argument. The callback needs to fill the handle, pitch and size for the created buffer.”…”�”}”(hj &h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j3&h´MNhjë%ubhÎ)�”}”(hŒCalled by the user via ioctl.”h]”hŒCalled by the user via ioctl.”…”�”}”(hj>&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MRhjë%ubhÎ)�”}”(hŒReturns:”h]”hŒReturns:”…”�”}”(hjM&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MThjë%ubhÎ)�”}”(hŒ+Zero on success, negative errno on failure.”h]”hŒ+Zero on success, negative errno on failure.”…”�”}”(hj\&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jê%h´MVhjë%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÏ%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jê%h´MVhj— ubj‰)�”}”(hX4``dumb_map_offset`` Allocate an offset in the drm device node's address space to be able to memory map a dumb buffer. The default implementation is drm_gem_create_mmap_offset(). GEM based drivers must not overwrite this. Called by the user via ioctl. Returns: Zero on success, negative errno on failure. ”h]”(j�)�”}”(hŒ``dumb_map_offset``”h]”jî)�”}”(hj|&h]”hŒdumb_map_offset”…”�”}”(hj~&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjz&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mhhjv&ubj©)�”}”(hhh]”(hÎ)�”}”(hŒaAllocate an offset in the drm device node's address space to be able to memory map a dumb buffer.”h]”hŒcAllocate an offset in the drm device node’s address space to be able to memory map a dumb buffer.”…”�”}”(hj•&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M^hj’&ubhÎ)�”}”(hŒfThe default implementation is drm_gem_create_mmap_offset(). GEM based drivers must not overwrite this.”h]”hŒfThe default implementation is drm_gem_create_mmap_offset(). GEM based drivers must not overwrite this.”…”�”}”(hj¤&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mahj’&ubhÎ)�”}”(hŒCalled by the user via ioctl.”h]”hŒCalled by the user via ioctl.”…”�”}”(hj³&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mdhj’&ubhÎ)�”}”(hŒReturns:”h]”hŒReturns:”…”�”}”(hjÂ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mfhj’&ubhÎ)�”}”(hŒ+Zero on success, negative errno on failure.”h]”hŒ+Zero on success, negative errno on failure.”…”�”}”(hjÑ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j‘&h´Mhhj’&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjv&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j‘&h´Mhhj— ubj‰)�”}”(hX``fbdev_probe`` Allocates and initialize the fb_info structure for fbdev emulation. Furthermore it also needs to allocate the DRM framebuffer used to back the fbdev. This callback is mandatory for fbdev support. Returns: 0 on success ot a negative error code otherwise. ”h]”(j�)�”}”(hŒ``fbdev_probe``”h]”jî)�”}”(hjñ&h]”hŒ fbdev_probe”…”�”}”(hjó&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjï&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Myhjë&ubj©)�”}”(hhh]”(hÎ)�”}”(hŒ•Allocates and initialize the fb_info structure for fbdev emulation. Furthermore it also needs to allocate the DRM framebuffer used to back the fbdev.”h]”hŒ•Allocates and initialize the fb_info structure for fbdev emulation. Furthermore it also needs to allocate the DRM framebuffer used to back the fbdev.”…”�”}”(hj 'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mqhj'ubhÎ)�”}”(hŒ-This callback is mandatory for fbdev support.”h]”hŒ-This callback is mandatory for fbdev support.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Muhj'ubhÎ)�”}”(hŒReturns:”h]”hŒReturns:”…”�”}”(hj('h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mwhj'ubhÎ)�”}”(hŒ00 on success ot a negative error code otherwise.”h]”hŒ00 on success ot a negative error code otherwise.”…”�”}”(hj7'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j'h´Myhj'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjë&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j'h´Myhj— ubj‰)�”}”(hŒZ``show_fdinfo`` Print device specific fdinfo. See Documentation/gpu/drm-usage-stats.rst. ”h]”(j�)�”}”(hŒ``show_fdinfo``”h]”jî)�”}”(hjW'h]”hŒ show_fdinfo”…”�”}”(hjY'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjU'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M�hjQ'ubj©)�”}”(hhh]”hÎ)�”}”(hŒIPrint device specific fdinfo. See Documentation/gpu/drm-usage-stats.rst.”h]”hŒIPrint device specific fdinfo. See Documentation/gpu/drm-usage-stats.rst.”…”�”}”(hjp'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jl'h´M�hjm'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjQ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jl'h´M�hj— ubj‰)�”}”(hŒ``major`` driver major number ”h]”(j�)�”}”(hŒ ``major``”h]”jî)�”}”(hj�'h]”hŒmajor”…”�”}”(hj’'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjŽ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M‡hjŠ'ubj©)�”}”(hhh]”hÎ)�”}”(hŒdriver major number”h]”hŒdriver major number”…”�”}”(hj©'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j¥'h´M‡hj¦'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjŠ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j¥'h´M‡hj— ubj‰)�”}”(hŒ``minor`` driver minor number ”h]”(j�)�”}”(hŒ ``minor``”h]”jî)�”}”(hjÉ'h]”hŒminor”…”�”}”(hjË'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÇ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M‰hjÃ'ubj©)�”}”(hhh]”hÎ)�”}”(hŒdriver minor number”h]”hŒdriver minor number”…”�”}”(hjâ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÞ'h´M‰hjß'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÃ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÞ'h´M‰hj— ubj‰)�”}”(hŒ"``patchlevel`` driver patch level ”h]”(j�)�”}”(hŒ``patchlevel``”h]”jî)�”}”(hj(h]”hŒ patchlevel”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M‹hjü'ubj©)�”}”(hhh]”hÎ)�”}”(hŒdriver patch level”h]”hŒdriver patch level”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j(h´M‹hj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjü'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j(h´M‹hj— ubj‰)�”}”(hŒ``name`` driver name ”h]”(j�)�”}”(hŒ``name``”h]”jî)�”}”(hj;(h]”hŒname”…”�”}”(hj=(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj9(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M�hj5(ubj©)�”}”(hhh]”hÎ)�”}”(hŒ driver name”h]”hŒ driver name”…”�”}”(hjT(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jP(h´M�hjQ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj5(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jP(h´M�hj— ubj‰)�”}”(hŒ``desc`` driver description ”h]”(j�)�”}”(hŒ``desc``”h]”jî)�”}”(hjt(h]”hŒdesc”…”�”}”(hjv(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjr(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M�hjn(ubj©)�”}”(hhh]”hÎ)�”}”(hŒdriver description”h]”hŒdriver description”…”�”}”(hj�(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j‰(h´M�hjŠ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjn(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j‰(h´M�hj— ubj‰)�”}”(hŒÔ``driver_features`` Driver features, see :c:type:`enum drm_driver_feature `. Drivers can disable some features on a per-instance basis using :c:type:`drm_device.driver_features `. ”h]”(j�)�”}”(hŒ``driver_features``”h]”jî)�”}”(hj­(h]”hŒdriver_features”…”�”}”(hj¯(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj«(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M•hj§(ubj©)�”}”(hhh]”hÎ)�”}”(hŒ¿Driver features, see :c:type:`enum drm_driver_feature `. Drivers can disable some features on a per-instance basis using :c:type:`drm_device.driver_features `.”h]”(hŒDriver features, see ”…”�”}”(hjÆ(h²hh³Nh´Nubh)�”}”(hŒ6:c:type:`enum drm_driver_feature `”h]”jî)�”}”(hjÐ(h]”hŒenum drm_driver_feature”…”�”}”(hjÒ(h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÎ(ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_driver_feature”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M“hjÆ(ubhŒB. Drivers can disable some features on a per-instance basis using ”…”�”}”(hjÆ(h²hh³Nh´Nubh)�”}”(hŒ1:c:type:`drm_device.driver_features `”h]”jî)�”}”(hjô(h]”hŒdrm_device.driver_features”…”�”}”(hjö(h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjò(ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³jí(h´M“hjÆ(ubhŒ.”…”�”}”(hjÆ(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jí(h´M“hjÃ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj§(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÂ(h´M•hj— ubj‰)�”}”(hŒ±``ioctls`` Array of driver-private IOCTL description entries. See the chapter on :ref:`IOCTL support in the userland interfaces chapter` for the full details. ”h]”(j�)�”}”(hŒ ``ioctls``”h]”jî)�”}”(hj-)h]”hŒioctls”…”�”}”(hj/)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj+)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M�hj')ubj©)�”}”(hhh]”hÎ)�”}”(hŒ¥Array of driver-private IOCTL description entries. See the chapter on :ref:`IOCTL support in the userland interfaces chapter` for the full details.”h]”(hŒFArray of driver-private IOCTL description entries. See the chapter on ”…”�”}”(hjF)h²hh³Nh´Nubh)�”}”(hŒI:ref:`IOCTL support in the userland interfaces chapter`”h]”jf)�”}”(hjP)h]”hŒ0IOCTL support in the userland interfaces chapter”…”�”}”(hjR)h²hh³Nh´Nubah}”(h]”h ]”(jùŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jehjN)ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j\)Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj Œdrm_driver_ioctl”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M›hjF)ubhŒ for the full details.”…”�”}”(hjF)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jn)h´M›hjC)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj')ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jB)h´M�hj— ubj‰)�”}”(hŒ0``num_ioctls`` Number of entries in **ioctls**. ”h]”(j�)�”}”(hŒ``num_ioctls``”h]”jî)�”}”(hj‹)h]”hŒ num_ioctls”…”�”}”(hj�)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj‰)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M£hj…)ubj©)�”}”(hhh]”hÎ)�”}”(hŒ Number of entries in **ioctls**.”h]”(hŒNumber of entries in ”…”�”}”(hj¤)h²hh³Nh´NubjB)�”}”(hŒ **ioctls**”h]”hŒioctls”…”�”}”(hj¬)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¤)ubhŒ.”…”�”}”(hj¤)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j )h´M£hj¡)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj…)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j )h´M£hj— ubj‰)�”}”(hŒ˜``fops`` File operations for the DRM device node. See the discussion in :ref:`file operations` for in-depth coverage and some examples.”h]”(j�)�”}”(hŒ``fops``”h]”jî)�”}”(hjÖ)h]”hŒfops”…”�”}”(hjØ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÔ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M¨hjÐ)ubj©)�”}”(hhh]”hÎ)�”}”(hŒ�File operations for the DRM device node. See the discussion in :ref:`file operations` for in-depth coverage and some examples.”h]”(hŒ?File operations for the DRM device node. See the discussion in ”…”�”}”(hjï)h²hh³Nh´Nubh)�”}”(hŒ':ref:`file operations`”h]”jf)�”}”(hjù)h]”hŒfile operations”…”�”}”(hjû)h²hh³Nh´Nubah}”(h]”h ]”(jùŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jehj÷)ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j*Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj Œdrm_driver_fops”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M§hjï)ubhŒ) for in-depth coverage and some examples.”…”�”}”(hjï)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j*h´M§hjì)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÐ)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jë)h´M¨hj— ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjO ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´NubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj=*h]”hŒ Description”…”�”}”(hj?*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj;*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M¬hjHh²hubhÎ)�”}”(hXdThis structure represent the common code for a family of cards. There will be one :c:type:`struct drm_device ` for each card present in this family. It contains lots of vfunc entries, and a pile of those probably should be moved to more appropriate places like :c:type:`drm_mode_config_funcs` or into a new operations structure for GEM drivers.”h]”(hŒRThis structure represent the common code for a family of cards. There will be one ”…”�”}”(hjS*h²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct drm_device `”h]”jî)�”}”(hj]*h]”hŒstruct drm_device”…”�”}”(hj_*h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj[*ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´K©hjS*ubhŒ— for each card present in this family. It contains lots of vfunc entries, and a pile of those probably should be moved to more appropriate places like ”…”�”}”(hjS*h²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_mode_config_funcs`”h]”jî)�”}”(hj�*h]”hŒdrm_mode_config_funcs”…”�”}”(hjƒ*h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj*ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œdrm_mode_config_funcs”uh1hh³jz*h´K©hjS*ubhŒ4 or into a new operations structure for GEM drivers.”…”�”}”(hjS*h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jz*h´K©hjHh²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdevm_drm_dev_alloc (C macro)”Œc.devm_drm_dev_alloc”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒdevm_drm_dev_alloc”h]”j¶)�”}”(hŒdevm_drm_dev_alloc”h]”jß)�”}”(hŒdevm_drm_dev_alloc”h]”jå)�”}”(hj»*h]”hŒdevm_drm_dev_alloc”…”�”}”(hjÅ*h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÁ*ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj½*h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M¹ubah}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj¹*h²hh³jØ*h´M¹ubah}”(h]”j´*ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jØ*h´M¹hj¶*h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶*h²hh³jØ*h´M¹ubeh}”(h]”h ]”(júŒmacro”eh"]”h$]”h&]”j1júj2jñ*j3jñ*j4‰j5‰j6‰uh1jªh²hhjHh³Nh´NubhÎ)�”}”(hŒ5``devm_drm_dev_alloc (parent, driver, type, member)``”h]”jî)�”}”(hj÷*h]”hŒ1devm_drm_dev_alloc (parent, driver, type, member)”…”�”}”(hjù*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjõ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M»hjHh²hubhŒ block_quote”“”)�”}”(hŒ?Resource managed allocation of a :c:type:`drm_device` instance ”h]”hÎ)�”}”(hŒ>Resource managed allocation of a :c:type:`drm_device` instance”h]”(hŒ!Resource managed allocation of a ”…”�”}”(hj+h²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hj+h]”hŒ drm_device”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj+ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M¹hj+ubhŒ instance”…”�”}”(hj+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j:+h´M¹hj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j +h³j:+h´M¹hjHh²hubj8)�”}”(hX**Parameters** ``parent`` Parent device object ``driver`` DRM driver ``type`` the type of the struct which contains struct :c:type:`drm_device` ``member`` the name of the :c:type:`drm_device` within **type**. **Description** This allocates and initialize a new DRM device. No device registration is done. Call drm_dev_register() to advertice the device to user space and register it with other core subsystems. This should be done last in the device initialization sequence to make sure userspace can't access an inconsistent state. The initial ref-count of the object is 1. Use drm_dev_get() and drm_dev_put() to take and drop further ref-counts. It is recommended that drivers embed :c:type:`struct drm_device ` into their own device structure. Note that this manages the lifetime of the resulting :c:type:`drm_device` automatically using devres. The DRM device initialized with this function is automatically put on driver detach using drm_dev_put(). **Return** Pointer to new DRM device, or ERR_PTR on failure.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjQ+h]”hŒ Parameters”…”�”}”(hjS+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjO+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M½hjK+ubj„)�”}”(hhh]”(j‰)�”}”(hŒ ``parent`` Parent device object ”h]”(j�)�”}”(hŒ ``parent``”h]”jî)�”}”(hjp+h]”hŒparent”…”�”}”(hjr+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjn+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mºhjj+ubj©)�”}”(hhh]”hÎ)�”}”(hŒParent device object”h]”hŒParent device object”…”�”}”(hj‰+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j…+h´Mºhj†+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j…+h´Mºhjg+ubj‰)�”}”(hŒ``driver`` DRM driver ”h]”(j�)�”}”(hŒ ``driver``”h]”jî)�”}”(hj©+h]”hŒdriver”…”�”}”(hj«+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj§+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M»hj£+ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM driver”h]”hŒ DRM driver”…”�”}”(hjÂ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j¾+h´M»hj¿+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj£+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j¾+h´M»hjg+ubj‰)�”}”(hŒK``type`` the type of the struct which contains struct :c:type:`drm_device` ”h]”(j�)�”}”(hŒ``type``”h]”jî)�”}”(hjâ+h]”hŒtype”…”�”}”(hjä+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjà+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M¼hjÜ+ubj©)�”}”(hhh]”hÎ)�”}”(hŒAthe type of the struct which contains struct :c:type:`drm_device`”h]”(hŒ-the type of the struct which contains struct ”…”�”}”(hjû+h²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hj,h]”hŒ drm_device”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj,ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³j÷+h´M¼hjû+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j÷+h´M¼hjø+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÜ+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j÷+h´M¼hjg+ubj‰)�”}”(hŒA``member`` the name of the :c:type:`drm_device` within **type**. ”h]”(j�)�”}”(hŒ ``member``”h]”jî)�”}”(hj:,h]”hŒmember”…”�”}”(hj<,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj8,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M½hj4,ubj©)�”}”(hhh]”hÎ)�”}”(hŒ5the name of the :c:type:`drm_device` within **type**.”h]”(hŒthe name of the ”…”�”}”(hjS,h²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hj],h]”hŒ drm_device”…”�”}”(hj_,h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj[,ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³jO,h´M½hjS,ubhŒ within ”…”�”}”(hjS,h²hh³Nh´NubjB)�”}”(hŒ**type**”h]”hŒtype”…”�”}”(hj~,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjS,ubhŒ.”…”�”}”(hjS,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jO,h´M½hjP,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj4,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jO,h´M½hjg+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjK+ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjª,h]”hŒ Description”…”�”}”(hj¬,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¨,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M¿hjK+ubhÎ)�”}”(hX3This allocates and initialize a new DRM device. No device registration is done. Call drm_dev_register() to advertice the device to user space and register it with other core subsystems. This should be done last in the device initialization sequence to make sure userspace can't access an inconsistent state.”h]”hX5This allocates and initialize a new DRM device. No device registration is done. Call drm_dev_register() to advertice the device to user space and register it with other core subsystems. This should be done last in the device initialization sequence to make sure userspace can’t access an inconsistent state.”…”�”}”(hjÀ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M¾hjK+ubhÎ)�”}”(hŒrThe initial ref-count of the object is 1. Use drm_dev_get() and drm_dev_put() to take and drop further ref-counts.”h]”hŒrThe initial ref-count of the object is 1. Use drm_dev_get() and drm_dev_put() to take and drop further ref-counts.”…”�”}”(hjÏ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MÄhjK+ubhÎ)�”}”(hŒnIt is recommended that drivers embed :c:type:`struct drm_device ` into their own device structure.”•4h]”(hŒ%It is recommended that drivers embed ”…”�”}”(hjÞ,h²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct drm_device `”h]”jî)�”}”(hjè,h]”hŒstruct drm_device”…”�”}”(hjê,h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjæ,ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MÇhjÞ,ubhŒ! into their own device structure.”…”�”}”(hjÞ,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j-h´MÇhjK+ubhÎ)�”}”(hŒÎNote that this manages the lifetime of the resulting :c:type:`drm_device` automatically using devres. The DRM device initialized with this function is automatically put on driver detach using drm_dev_put().”h]”(hŒ5Note that this manages the lifetime of the resulting ”…”�”}”(hj-h²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hj-h]”hŒ drm_device”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj-ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MÊhj-ubhŒ… automatically using devres. The DRM device initialized with this function is automatically put on driver detach using drm_dev_put().”…”�”}”(hj-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j7-h´MÊhjK+ubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hjD-h]”hŒReturn”…”�”}”(hjF-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjB-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MÎhjK+ubhÎ)�”}”(hŒ1Pointer to new DRM device, or ERR_PTR on failure.”h]”hŒ1Pointer to new DRM device, or ERR_PTR on failure.”…”�”}”(hjZ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MÏhjK+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ!drm_dev_is_unplugged (C function)”Œc.drm_dev_is_unplugged”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ2bool drm_dev_is_unplugged (struct drm_device *dev)”h]”j¶)�”}”(hŒ1bool drm_dev_is_unplugged(struct drm_device *dev)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒbool”h]”hŒbool”…”�”}”(hj‹-h²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1j‰-hj…-h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MêubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›-h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj…-h²hh³jš-h´Mêubjß)�”}”(hŒdrm_dev_is_unplugged”h]”jå)�”}”(hŒdrm_dev_is_unplugged”h]”hŒdrm_dev_is_unplugged”…”�”}”(hj­-h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj©-ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj…-h²hh³jš-h´MêubjÖ)�”}”(hŒ(struct drm_device *dev)”h]”jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjÉ-h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjÅ-ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖ-h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÅ-ubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hjç-h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjä-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jé-Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j¯-sbŒc.drm_dev_is_unplugged”†”asbuh1hhjÅ-ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÅ-ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjÅ-ubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj".h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÅ-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjÁ-ubah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj…-h²hh³jš-h´Mêubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj�-h²hh³jš-h´Mêubah}”(h]”j|-ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jš-h´Mêhj~-h²hubj)�”}”(hhh]”hÎ)�”}”(hŒis a DRM device unplugged”h]”hŒis a DRM device unplugged”…”�”}”(hjL.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MêhjI.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj~-h²hh³jš-h´Mêubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jd.j3jd.j4‰j5‰j6‰uh1jªh²hhjHh³Nh´Nubj8)�”}”(hX **Parameters** ``struct drm_device *dev`` DRM device **Description** This function can be called to check whether a hotpluggable is unplugged. Unplugging itself is singalled through drm_dev_unplug(). If a device is unplugged, these two functions guarantee that any store before calling drm_dev_unplug() is visible to callers of this function after it completes WARNING: This function fundamentally races against drm_dev_unplug(). It is recommended that drivers instead use the underlying drm_dev_enter() and drm_dev_exit() function pairs.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjn.h]”hŒ Parameters”…”�”}”(hjp.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjl.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mîhjh.ubj„)�”}”(hhh]”j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hj�.h]”hŒstruct drm_device *dev”…”�”}”(hj�.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj‹.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mëhj‡.ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hj¦.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j¢.h´Mëhj£.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj‡.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j¢.h´Mëhj„.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjh.ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjÈ.h]”hŒ Description”…”�”}”(hjÊ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÆ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Míhjh.ubhÎ)�”}”(hX#This function can be called to check whether a hotpluggable is unplugged. Unplugging itself is singalled through drm_dev_unplug(). If a device is unplugged, these two functions guarantee that any store before calling drm_dev_unplug() is visible to callers of this function after it completes”h]”hX#This function can be called to check whether a hotpluggable is unplugged. Unplugging itself is singalled through drm_dev_unplug(). If a device is unplugged, these two functions guarantee that any store before calling drm_dev_unplug() is visible to callers of this function after it completes”…”�”}”(hjÞ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mìhjh.ubhÎ)�”}”(hŒ±WARNING: This function fundamentally races against drm_dev_unplug(). It is recommended that drivers instead use the underlying drm_dev_enter() and drm_dev_exit() function pairs.”h]”hŒ±WARNING: This function fundamentally races against drm_dev_unplug(). It is recommended that drivers instead use the underlying drm_dev_enter() and drm_dev_exit() function pairs.”…”�”}”(hjí.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mñhjh.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ(drm_core_check_all_features (C function)”Œc.drm_core_check_all_features”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒMbool drm_core_check_all_features (const struct drm_device *dev, u32 features)”h]”j¶)�”}”(hŒLbool drm_core_check_all_features(const struct drm_device *dev, u32 features)”h]”(jŠ-)�”}”(hj�-h]”hŒbool”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj/h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*/h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj/h²hh³j)/h´Mubjß)�”}”(hŒdrm_core_check_all_features”h]”jå)�”}”(hŒdrm_core_check_all_features”h]”hŒdrm_core_check_all_features”…”�”}”(hj/sbŒc.drm_core_check_all_features”†”asbuh1hhjT/ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²/h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjT/ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjÀ/h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjT/ubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÍ/h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjT/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjP/ubjÜ)�”}”(hŒ u32 features”h]”(h)�”}”(hhh]”jå)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjé/h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjæ/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jë/Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j®/Œc.drm_core_check_all_features”†”asbuh1hhjâ/ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjâ/ubjå)�”}”(hŒfeatures”h]”hŒfeatures”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjâ/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjP/ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj/h²hh³j)/h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj/h²hh³j)/h´Mubah}”(h]”j/ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j)/h´Mhj/h²hubj)�”}”(hhh]”hÎ)�”}”(hŒcheck driver feature flags mask”h]”hŒcheck driver feature flags mask”…”�”}”(hj?0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mhj<0h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj/h²hh³j)/h´Mubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jW0j3jW0j4‰j5‰j6‰uh1jªh²hhjHh³Nh´Nubj8)�”}”(hX¹**Parameters** ``const struct drm_device *dev`` DRM device to check ``u32 features`` feature flag(s) mask **Description** This checks **dev** for driver features, see :c:type:`drm_driver.driver_features `, :c:type:`drm_device.driver_features `, and the various :c:type:`enum drm_driver_feature ` flags. Returns true if all features in the **features** mask are supported, false otherwise.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hja0h]”hŒ Parameters”…”�”}”(hjc0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj_0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mhj[0ubj„)�”}”(hhh]”(j‰)�”}”(hŒ5``const struct drm_device *dev`` DRM device to check ”h]”(j�)�”}”(hŒ ``const struct drm_device *dev``”h]”jî)�”}”(hj€0h]”hŒconst struct drm_device *dev”…”�”}”(hj‚0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj~0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mhjz0ubj©)�”}”(hhh]”hÎ)�”}”(hŒDRM device to check”h]”hŒDRM device to check”…”�”}”(hj™0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j•0h´Mhj–0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjz0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j•0h´Mhjw0ubj‰)�”}”(hŒ&``u32 features`` feature flag(s) mask ”h]”(j�)�”}”(hŒ``u32 features``”h]”jî)�”}”(hj¹0h]”hŒ u32 features”…”�”}”(hj»0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj·0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mhj³0ubj©)�”}”(hhh]”hÎ)�”}”(hŒfeature flag(s) mask”h]”hŒfeature flag(s) mask”…”�”}”(hjÒ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÎ0h´MhjÏ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj³0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÎ0h´Mhjw0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj[0ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjô0h]”hŒ Description”…”�”}”(hjö0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjò0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mhj[0ubhÎ)�”}”(hŒàThis checks **dev** for driver features, see :c:type:`drm_driver.driver_features `, :c:type:`drm_device.driver_features `, and the various :c:type:`enum drm_driver_feature ` flags.”h]”(hŒ This checks ”…”�”}”(hj 1h²hh³Nh´NubjB)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj 1ubhŒ for driver features, see ”…”�”}”(hj 1h²hh³Nh´Nubh)�”}”(hŒ1:c:type:`drm_driver.driver_features `”h]”jî)�”}”(hj&1h]”hŒdrm_driver.driver_features”…”�”}”(hj(1h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj$1ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_driver”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mhj 1ubhŒ, ”…”�”}”(hj 1h²hh³Nh´Nubh)�”}”(hŒ1:c:type:`drm_device.driver_features `”h]”jî)�”}”(hjJ1h]”hŒdrm_device.driver_features”…”�”}”(hjL1h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjH1ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³jC1h´Mhj 1ubhŒ, and the various ”…”�”}”(hj 1h²hh³Nh´Nubh)�”}”(hŒ6:c:type:`enum drm_driver_feature `”h]”jî)�”}”(hjm1h]”hŒenum drm_driver_feature”…”�”}”(hjo1h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjk1ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_driver_feature”uh1hh³jC1h´Mhj 1ubhŒ flags.”…”�”}”(hj 1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jC1h´Mhj[0ubhÎ)�”}”(hŒUReturns true if all features in the **features** mask are supported, false otherwise.”h]”(hŒ$Returns true if all features in the ”…”�”}”(hj”1h²hh³Nh´NubjB)�”}”(hŒ **features**”h]”hŒfeatures”…”�”}”(hjœ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj”1ubhŒ% mask are supported, false otherwise.”…”�”}”(hj”1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M hj[0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ#drm_core_check_feature (C function)”Œc.drm_core_check_feature”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ[bool drm_core_check_feature (const struct drm_device *dev, enum drm_driver_feature feature)”h]”j¶)�”}”(hŒZbool drm_core_check_feature(const struct drm_device *dev, enum drm_driver_feature feature)”h]”(jŠ-)�”}”(hj�-h]”hŒbool”…”�”}”(hjÕ1h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjÑ1h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjã1h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÑ1h²hh³jâ1h´Mubjß)�”}”(hŒdrm_core_check_feature”h]”jå)�”}”(hŒdrm_core_check_feature”h]”hŒdrm_core_check_feature”…”�”}”(hjõ1h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjñ1ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjÑ1h²hh³jâ1h´MubjÖ)�”}”(hŒ?(const struct drm_device *dev, enum drm_driver_feature feature)”h]”(jÜ)�”}”(hŒconst struct drm_device *dev”h]”(j¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj 2ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj 2ubj¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj,2h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj 2ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj92h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj 2ubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hjJ2h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjG2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jL2Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j÷1sbŒc.drm_core_check_feature”†”asbuh1hhj 2ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj2h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj 2ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjx2h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj 2ubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj…2h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj 2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj 2ubjÜ)�”}”(hŒenum drm_driver_feature feature”h]”(j¼)�”}”(hj) h]”hŒenum”…”�”}”(hjž2h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjš2ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«2h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjš2ubh)�”}”(hhh]”jå)�”}”(hŒdrm_driver_feature”h]”hŒdrm_driver_feature”…”�”}”(hj¼2h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¹2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j¾2Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jf2Œc.drm_core_check_feature”†”asbuh1hhjš2ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ2h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjš2ubjå)�”}”(hŒfeature”h]”hŒfeature”…”�”}”(hjè2h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjš2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj 2ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjÑ1h²hh³jâ1h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjÍ1h²hh³jâ1h´Mubah}”(h]”jÈ1ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jâ1h´MhjÊ1h²hubj)�”}”(hhh]”hÎ)�”}”(hŒcheck driver feature flags”h]”hŒcheck driver feature flags”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mhj3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÊ1h²hh³jâ1h´Mubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j*3j3j*3j4‰j5‰j6‰uh1jªh²hhjHh³Nh´Nubj8)�”}”(hX­**Parameters** ``const struct drm_device *dev`` DRM device to check ``enum drm_driver_feature feature`` feature flag **Description** This checks **dev** for driver features, see :c:type:`drm_driver.driver_features `, :c:type:`drm_device.driver_features `, and the various :c:type:`enum drm_driver_feature ` flags. Returns true if the **feature** is supported, false otherwise.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj43h]”hŒ Parameters”…”�”}”(hj63h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj23ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mhj.3ubj„)�”}”(hhh]”(j‰)�”}”(hŒ5``const struct drm_device *dev`` DRM device to check ”h]”(j�)�”}”(hŒ ``const struct drm_device *dev``”h]”jî)�”}”(hjS3h]”hŒconst struct drm_device *dev”…”�”}”(hjU3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjQ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MhjM3ubj©)�”}”(hhh]”hÎ)�”}”(hŒDRM device to check”h]”hŒDRM device to check”…”�”}”(hjl3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jh3h´Mhji3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjM3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jh3h´MhjJ3ubj‰)�”}”(hŒ1``enum drm_driver_feature feature`` feature flag ”h]”(j�)�”}”(hŒ#``enum drm_driver_feature feature``”h]”jî)�”}”(hjŒ3h]”hŒenum drm_driver_feature feature”…”�”}”(hjŽ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjŠ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mhj†3ubj©)�”}”(hhh]”hÎ)�”}”(hŒ feature flag”h]”hŒ feature flag”…”�”}”(hj¥3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j¡3h´Mhj¢3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj†3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j¡3h´MhjJ3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj.3ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjÇ3h]”hŒ Description”…”�”}”(hjÉ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÅ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mhj.3ubhÎ)�”}”(hŒàThis checks **dev** for driver features, see :c:type:`drm_driver.driver_features `, :c:type:`drm_device.driver_features `, and the various :c:type:`enum drm_driver_feature ` flags.”h]”(hŒ This checks ”…”�”}”(hjÝ3h²hh³Nh´NubjB)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjå3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÝ3ubhŒ for driver features, see ”…”�”}”(hjÝ3h²hh³Nh´Nubh)�”}”(hŒ1:c:type:`drm_driver.driver_features `”h]”jî)�”}”(hjù3h]”hŒdrm_driver.driver_features”…”�”}”(hjû3h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj÷3ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_driver”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´MhjÝ3ubhŒ, ”…”�”}”(hjÝ3h²hh³Nh´Nubh)�”}”(hŒ1:c:type:`drm_device.driver_features `”h]”jî)�”}”(hj4h]”hŒdrm_device.driver_features”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj4ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³j4h´MhjÝ3ubhŒ, and the various ”…”�”}”(hjÝ3h²hh³Nh´Nubh)�”}”(hŒ6:c:type:`enum drm_driver_feature `”h]”jî)�”}”(hj@4h]”hŒenum drm_driver_feature”…”�”}”(hjB4h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj>4ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_driver_feature”uh1hh³j4h´MhjÝ3ubhŒ flags.”…”�”}”(hjÝ3h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j4h´Mhj.3ubhÎ)�”}”(hŒ>Returns true if the **feature** is supported, false otherwise.”h]”(hŒReturns true if the ”…”�”}”(hjg4h²hh³Nh´NubjB)�”}”(hŒ **feature**”h]”hŒfeature”…”�”}”(hjo4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjg4ubhŒ is supported, false otherwise.”…”�”}”(hjg4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´Mhj.3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ(drm_drv_uses_atomic_modeset (C function)”Œc.drm_drv_uses_atomic_modeset”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ9bool drm_drv_uses_atomic_modeset (struct drm_device *dev)”h]”j¶)�”}”(hŒ8bool drm_drv_uses_atomic_modeset(struct drm_device *dev)”h]”(jŠ-)�”}”(hj�-h]”hŒbool”…”�”}”(hj¨4h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj¤4h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M&ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶4h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj¤4h²hh³jµ4h´M&ubjß)�”}”(hŒdrm_drv_uses_atomic_modeset”h]”jå)�”}”(hŒdrm_drv_uses_atomic_modeset”h]”hŒdrm_drv_uses_atomic_modeset”…”�”}”(hjÈ4h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÄ4ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj¤4h²hh³jµ4h´M&ubjÖ)�”}”(hŒ(struct drm_device *dev)”h]”jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjä4h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjà4ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ4h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjà4ubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÿ4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j5Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jÊ4sbŒc.drm_drv_uses_atomic_modeset”†”asbuh1hhjà4ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"5h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjà4ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj05h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjà4ubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj=5h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjà4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjÜ4ubah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj¤4h²hh³jµ4h´M&ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj 4h²hh³jµ4h´M&ubah}”(h]”j›4ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jµ4h´M&hj�4h²hubj)�”}”(hhh]”hÎ)�”}”(hŒ.check if the driver implements atomic_commit()”h]”hŒ.check if the driver implements atomic_commit()”…”�”}”(hjg5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M&hjd5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�4h²hh³jµ4h´M&ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j5j3j5j4‰j5‰j6‰uh1jªh²hhjHh³Nh´Nubj8)�”}”(hŒ»**Parameters** ``struct drm_device *dev`` DRM device **Description** This check is useful if drivers do not have DRIVER_ATOMIC set but have atomic modesetting internally implemented.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj‰5h]”hŒ Parameters”…”�”}”(hj‹5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj‡5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M*hjƒ5ubj„)�”}”(hhh]”j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hj¨5h]”hŒstruct drm_device *dev”…”�”}”(hjª5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj¦5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M(hj¢5ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hjÁ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j½5h´M(hj¾5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¢5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j½5h´M(hjŸ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjƒ5ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjã5h]”hŒ Description”…”�”}”(hjå5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjá5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M*hjƒ5ubhÎ)�”}”(hŒqThis check is useful if drivers do not have DRIVER_ATOMIC set but have atomic modesetting internally implemented.”h]”hŒqThis check is useful if drivers do not have DRIVER_ATOMIC set but have atomic modesetting internally implemented.”…”�”}”(hjù5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒW/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:89: ./include/drm/drm_drv.h”h´M)hjƒ5ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_put_dev (C function)”Œ c.drm_put_dev”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ)void drm_put_dev (struct drm_device *dev)”h]”j¶)�”}”(hŒ(void drm_put_dev(struct drm_device *dev)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj(6h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj$6h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M�ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj76h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj$6h²hh³j66h´M�ubjß)�”}”(hŒ drm_put_dev”h]”jå)�”}”(hŒ drm_put_dev”h]”hŒ drm_put_dev”…”�”}”(hjI6h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjE6ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj$6h²hh³j66h´M�ubjÖ)�”}”(hŒ(struct drm_device *dev)”h]”jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hje6h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hja6ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr6h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhja6ubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hjƒ6h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj€6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j…6Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jK6sbŒ c.drm_put_dev”†”asbuh1hhja6ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£6h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhja6ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj±6h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hja6ubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj¾6h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähja6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj]6ubah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj$6h²hh³j66h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj 6h²hh³j66h´M�ubah}”(h]”j6ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j66h´M�hj6h²hubj)�”}”(hhh]”hÎ)�”}”(hŒ#Unregister and release a DRM device”h]”hŒ#Unregister and release a DRM device”…”�”}”(hjè6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M�hjå6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6h²hh³j66h´M�ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j7j3j7j4‰j5‰j6‰uh1jªh²hhjHh³Nh´Nubj8)�”}”(hXõ**Parameters** ``struct drm_device *dev`` DRM device **Description** Called at module unload time or when a PCI device is unplugged. Cleans up all DRM device, calling drm_lastclose(). **Note** Use of this function is deprecated. It will eventually go away completely. Please use drm_dev_unregister() and drm_dev_put() explicitly instead to make sure that the device isn't userspace accessible any more while teardown is in progress, ensuring that userspace can't access an inconsistent state.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj 7h]”hŒ Parameters”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M¡hj7ubj„)�”}”(hhh]”j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hj)7h]”hŒstruct drm_device *dev”…”�”}”(hj+7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj'7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´Mžhj#7ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hjB7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j>7h´Mžhj?7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj#7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j>7h´Mžhj 7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj7ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjd7h]”hŒ Description”…”�”}”(hjf7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjb7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M hj7ubhÎ)�”}”(hŒ?Called at module unload time or when a PCI device is unplugged.”h]”hŒ?Called at module unload time or when a PCI device is unplugged.”…”�”}”(hjz7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´MŸhj7ubhÎ)�”}”(hŒ2Cleans up all DRM device, calling drm_lastclose().”h]”hŒ2Cleans up all DRM device, calling drm_lastclose().”…”�”}”(hj‰7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M¡hj7ubhÎ)�”}”(hŒ**Note**”h]”jB)�”}”(hjš7h]”hŒNote”…”�”}”(hjœ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj˜7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M£hj7ubhÎ)�”}”(hX,Use of this function is deprecated. It will eventually go away completely. Please use drm_dev_unregister() and drm_dev_put() explicitly instead to make sure that the device isn't userspace accessible any more while teardown is in progress, ensuring that userspace can't access an inconsistent state.”h]”hX0Use of this function is deprecated. It will eventually go away completely. Please use drm_dev_unregister() and drm_dev_put() explicitly instead to make sure that the device isn’t userspace accessible any more while teardown is in progress, ensuring that userspace can’t access an inconsistent state.”…”�”}”(hj°7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M¤hj7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_dev_enter (C function)”Œc.drm_dev_enter”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ5bool drm_dev_enter (struct drm_device *dev, int *idx)”h]”j¶)�”}”(hŒ4bool drm_dev_enter(struct drm_device *dev, int *idx)”h]”(jŠ-)�”}”(hj�-h]”hŒbool”…”�”}”(hjß7h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjÛ7h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M¹ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí7h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÛ7h²hh³jì7h´M¹ubjß)�”}”(hŒ drm_dev_enter”h]”jå)�”}”(hŒ drm_dev_enter”h]”hŒ drm_dev_enter”…”�”}”(hjÿ7h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjû7ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjÛ7h²hh³jì7h´M¹ubjÖ)�”}”(hŒ"(struct drm_device *dev, int *idx)”h]”(jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj8ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(8h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj8ubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hj98h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj68ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j;8Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j8sbŒc.drm_dev_enter”†”asbuh1hhj8ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY8h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj8ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjg8h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj8ubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjt8h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj8ubjÜ)�”}”(hŒint *idx”h]”(jŠ-)�”}”(hŒint”h]”hŒint”…”�”}”(hj�8h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj‰8ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›8h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj‰8ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj©8h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj‰8ubjå)�”}”(hŒidx”h]”hŒidx”…”�”}”(hj¶8h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj‰8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj8ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjÛ7h²hh³jì7h´M¹ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj×7h²hh³jì7h´M¹ubah}”(h]”jÒ7ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jì7h´M¹hjÔ7h²hubj)�”}”(hhh]”hÎ)�”}”(hŒEnter device critical section”h]”hŒEnter device critical section”…”�”}”(hjà8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M¹hjÝ8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔ7h²hh³jì7h´M¹ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jø8j3jø8j4‰j5‰j6‰uh1jªh²hhjHh³Nh´Nubj8)�”}”(hX³**Parameters** ``struct drm_device *dev`` DRM device ``int *idx`` Pointer to index that will be passed to the matching drm_dev_exit() **Description** This function marks and protects the beginning of a section that should not be entered after the device has been unplugged. The section end is marked with drm_dev_exit(). Calls to this function can be nested. **Return** True if it is OK to enter the section, false otherwise.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj9h]”hŒ Parameters”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M½hjü8ubj„)�”}”(hhh]”(j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hj!9h]”hŒstruct drm_device *dev”…”�”}”(hj#9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´Mºhj9ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hj:9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j69h´Mºhj79ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j69h´Mºhj9ubj‰)�”}”(hŒQ``int *idx`` Pointer to index that will be passed to the matching drm_dev_exit() ”h]”(j�)�”}”(hŒ ``int *idx``”h]”jî)�”}”(hjZ9h]”hŒint *idx”…”�”}”(hj\9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjX9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M»hjT9ubj©)�”}”(hhh]”hÎ)�”}”(hŒCPointer to index that will be passed to the matching drm_dev_exit()”h]”hŒCPointer to index that will be passed to the matching drm_dev_exit()”…”�”}”(hjs9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jo9h´M»hjp9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjT9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jo9h´M»hj9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjü8ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj•9h]”hŒ Description”…”�”}”(hj—9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj“9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M½hjü8ubhÎ)�”}”(hŒÐThis function marks and protects the beginning of a section that should not be entered after the device has been unplugged. The section end is marked with drm_dev_exit(). Calls to this function can be nested.”h]”hŒÐThis function marks and protects the beginning of a section that should not be entered after the device has been unplugged. The section end is marked with drm_dev_exit(). Calls to this function can be nested.”…”�”}”(hj«9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M¼hjü8ubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hj¼9h]”hŒReturn”…”�”}”(hj¾9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjº9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´MÀhjü8ubhÎ)�”}”(hŒ7True if it is OK to enter the section, false otherwise.”h]”hŒ7True if it is OK to enter the section, false otherwise.”…”�”}”(hjÒ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´MÁhjü8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_dev_exit (C function)”Œc.drm_dev_exit”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒvoid drm_dev_exit (int idx)”h]”j¶)�”}”(hŒvoid drm_dev_exit(int idx)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjý9h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´MÒubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjý9h²hh³j:h´MÒubjß)�”}”(hŒ drm_dev_exit”h]”jå)�”}”(hŒ drm_dev_exit”h]”hŒ drm_dev_exit”…”�”}”(hj":h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj:ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjý9h²hh³j:h´MÒubjÖ)�”}”(hŒ (int idx)”h]”jÜ)�”}”(hŒint idx”h]”(jŠ-)�”}”(hŒint”h]”hŒint”…”�”}”(hj>:h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj::ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL:h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj::ubjå)�”}”(hŒidx”h]”hŒidx”…”�”}”(hjZ:h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj::ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj6:ubah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjý9h²hh³j:h´MÒubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjù9h²hh³j:h´MÒubah}”(h]”jô9ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j:h´MÒhjö9h²hubj)�”}”(hhh]”hÎ)�”}”(hŒExit device critical section”h]”hŒExit device critical section”…”�”}”(hj„:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´MÒhj�:h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjö9h²hh³j:h´MÒubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jœ:j3jœ:j4‰j5‰j6‰uh1jªh²hhjHh³Nh´Nubj8)�”}”(hŒ¼**Parameters** ``int idx`` index returned from drm_dev_enter() **Description** This function marks the end of a section that should not be entered after the device has been unplugged.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj¦:h]”hŒ Parameters”…”�”}”(hj¨:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¤:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´MÖhj :ubj„)�”}”(hhh]”j‰)�”}”(hŒ0``int idx`` index returned from drm_dev_enter() ”h]”(j�)�”}”(hŒ ``int idx``”h]”jî)�”}”(hjÅ:h]”hŒint idx”…”�”}”(hjÇ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÃ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´MÓhj¿:ubj©)�”}”(hhh]”hÎ)�”}”(hŒ#index returned from drm_dev_enter()”h]”hŒ#index returned from drm_dev_enter()”…”�”}”(hjÞ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÚ:h´MÓhjÛ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¿:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÚ:h´MÓhj¼:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj :ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj;h]”hŒ Description”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjþ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´MÕhj :ubhÎ)�”}”(hŒhThis function marks the end of a section that should not be entered after the device has been unplugged.”h]”hŒhThis function marks the end of a section that should not be entered after the device has been unplugged.”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´MÔhj :ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_dev_unplug (C function)”Œc.drm_dev_unplug”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ,void drm_dev_unplug (struct drm_device *dev)”h]”j¶)�”}”(hŒ+void drm_dev_unplug(struct drm_device *dev)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjE;h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjA;h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´MïubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT;h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjA;h²hh³jS;h´Mïubjß)�”}”(hŒdrm_dev_unplug”h]”jå)�”}”(hŒdrm_dev_unplug”h]”hŒdrm_dev_unplug”…”�”}”(hjf;h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjb;ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjA;h²hh³jS;h´MïubjÖ)�”}”(hŒ(struct drm_device *dev)”h]”jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj‚;h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj~;ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�;h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj~;ubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hj ;h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj�;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j¢;Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jh;sbŒc.drm_dev_unplug”†”asbuh1hhj~;ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ;h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj~;ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjÎ;h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj~;ubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÛ;h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj~;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjz;ubah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjA;h²hh³jS;h´Mïubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj=;h²hh³jS;h´Mïubah}”(h]”j8;ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jS;h´Mïhj:;h²hubj)�”}”(hhh]”hÎ)�”}”(hŒunplug a DRM device”h]”hŒunplug a DRM device”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´Mïhj<h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:;h²hh³jS;h´Mïubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j<j3j<j4‰j5‰j6‰uh1jªh²hhjHh³Nh´Nubj8)�”}”(hX“**Parameters** ``struct drm_device *dev`` DRM device **Description** This unplugs a hotpluggable DRM device, which makes it inaccessible to userspace operations. Entry-points can use drm_dev_enter() and drm_dev_exit() to protect device resources in a race free manner. This essentially unregisters the device like drm_dev_unregister(), but can be called while there are still open users of **dev**.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj'<h]”hŒ Parameters”…”�”}”(hj)<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj%<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´Móhj!<ubj„)�”}”(hhh]”j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hjF<h]”hŒstruct drm_device *dev”…”�”}”(hjH<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjD<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´Mðhj@<ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hj_<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j[<h´Mðhj\<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj@<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j[<h´Mðhj=<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj!<ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj�<h]”hŒ Description”…”�”}”(hjƒ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´Mòhj!<ubhÎ)�”}”(hXIThis unplugs a hotpluggable DRM device, which makes it inaccessible to userspace operations. Entry-points can use drm_dev_enter() and drm_dev_exit() to protect device resources in a race free manner. This essentially unregisters the device like drm_dev_unregister(), but can be called while there are still open users of **dev**.”h]”(hXAThis unplugs a hotpluggable DRM device, which makes it inaccessible to userspace operations. Entry-points can use drm_dev_enter() and drm_dev_exit() to protect device resources in a race free manner. This essentially unregisters the device like drm_dev_unregister(), but can be called while there are still open users of ”…”�”}”(hj—<h²hh³Nh´NubjB)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjŸ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj—<ubhŒ.”…”�”}”(hj—<h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´Mñhj!<ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ drm_dev_set_dma_dev (C function)”Œc.drm_dev_set_dma_dev”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒIvoid drm_dev_set_dma_dev (struct drm_device *dev, struct device *dma_dev)”h]”j¶)�”}”(hŒHvoid drm_dev_set_dma_dev(struct drm_device *dev, struct device *dma_dev)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjØ<h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjÔ<h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´MubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç<h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÔ<h²hh³jæ<h´Mubjß)�”}”(hŒdrm_dev_set_dma_dev”h]”jå)�”}”(hŒdrm_dev_set_dma_dev”h]”hŒdrm_dev_set_dma_dev”…”�”}”(hjù<h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjõ<ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjÔ<h²hh³jæ<h´MubjÖ)�”}”(hŒ0(struct drm_device *dev, struct device *dma_dev)”h]”(jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj=ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"=h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj=ubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hj3=h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj0=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j5=Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jû<sbŒc.drm_dev_set_dma_dev”†”asbuh1hhj=ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjS=h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj=ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hja=h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj=ubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjn=h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj =ubjÜ)�”}”(hŒstruct device *dma_dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj‡=h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjƒ=ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”=h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjƒ=ubh)�”}”(hhh]”jå)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj¥=h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¢=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j§=Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jO=Œc.drm_dev_set_dma_dev”†”asbuh1hhjƒ=ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃ=h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjƒ=ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjÑ=h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjƒ=ubjå)�”}”(hŒdma_dev”h]”hŒdma_dev”…”�”}”(hjÞ=h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjƒ=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj =ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjÔ<h²hh³jæ<h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjÐ<h²hh³jæ<h´Mubah}”(h]”jË<ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jæ<h´MhjÍ<h²hubj)�”}”(hhh]”hÎ)�”}”(hŒ#set the DMA device for a DRM device”h]”hŒ#set the DMA device for a DRM device”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´Mhj>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍ<h²hh³jæ<h´Mubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j >j3j >j4‰j5‰j6‰uh1jªh²hhjHh³Nh´Nubj8)�”}”(hXc**Parameters** ``struct drm_device *dev`` DRM device ``struct device *dma_dev`` DMA device or NULL **Description** Sets the DMA device of the given DRM device. Only required if the DMA device is different from the DRM device's parent. After calling this function, the DRM device holds a reference on **dma_dev**. Pass NULL to clear the DMA device.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj*>h]”hŒ Parameters”…”�”}”(hj,>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj(>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´Mhj$>ubj„)�”}”(hhh]”(j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hjI>h]”hŒstruct drm_device *dev”…”�”}”(hjK>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjG>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´MhjC>ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hjb>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j^>h´Mhj_>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjC>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j^>h´Mhj@>ubj‰)�”}”(hŒ.``struct device *dma_dev`` DMA device or NULL ”h]”(j�)�”}”(hŒ``struct device *dma_dev``”h]”jî)�”}”(hj‚>h]”hŒstruct device *dma_dev”…”�”}”(hj„>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj€>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´Mhj|>ubj©)�”}”(hhh]”hÎ)�”}”(hŒDMA device or NULL”h]”hŒDMA device or NULL”…”�”}”(hj›>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j—>h´Mhj˜>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj|>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j—>h´Mhj@>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj$>ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj½>h]”hŒ Description”…”�”}”(hj¿>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj»>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´Mhj$>ubhÎ)�”}”(hŒèSets the DMA device of the given DRM device. Only required if the DMA device is different from the DRM device's parent. After calling this function, the DRM device holds a reference on **dma_dev**. Pass NULL to clear the DMA device.”h]”(hŒ»Sets the DMA device of the given DRM device. Only required if the DMA device is different from the DRM device’s parent. After calling this function, the DRM device holds a reference on ”…”�”}”(hjÓ>h²hh³Nh´NubjB)�”}”(hŒ **dma_dev**”h]”hŒdma_dev”…”�”}”(hjÛ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÓ>ubhŒ$. Pass NULL to clear the DMA device.”…”�”}”(hjÓ>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´Mhj$>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ!drm_dev_wedged_event (C function)”Œc.drm_dev_wedged_event”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒiint drm_dev_wedged_event (struct drm_device *dev, unsigned long method, struct drm_wedge_task_info *info)”h]”j¶)�”}”(hŒhint drm_dev_wedged_event(struct drm_device *dev, unsigned long method, struct drm_wedge_task_info *info)”h]”(jŠ-)�”}”(hŒint”h]”hŒint”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj?h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M.ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#?h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj?h²hh³j"?h´M.ubjß)�”}”(hŒdrm_dev_wedged_event”h]”jå)�”}”(hŒdrm_dev_wedged_event”h]”hŒdrm_dev_wedged_event”…”�”}”(hj5?h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj1?ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj?h²hh³j"?h´M.ubjÖ)�”}”(hŒP(struct drm_device *dev, unsigned long method, struct drm_wedge_task_info *info)”h]”(jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjQ?h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjM?ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^?h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjM?ubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hjo?h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjl?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jq?Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j7?sbŒc.drm_dev_wedged_event”†”asbuh1hhjM?ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�?h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjM?ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj�?h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjM?ubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjª?h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjM?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjI?ubjÜ)�”}”(hŒunsigned long method”h]”(jŠ-)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÃ?h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj¿?ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ?h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj¿?ubjŠ-)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjß?h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj¿?ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí?h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj¿?ubjå)�”}”(hŒmethod”h]”hŒmethod”…”�”}”(hjû?h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¿?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjI?ubjÜ)�”}”(hŒ struct drm_wedge_task_info *info”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj@ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!@h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj@ubh)�”}”(hhh]”jå)�”}”(hŒdrm_wedge_task_info”h]”hŒdrm_wedge_task_info”…”�”}”(hj2@h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj/@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j4@Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j‹?Œc.drm_dev_wedged_event”†”asbuh1hhj@ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjP@h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj@ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj^@h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj@ubjå)�”}”(hŒinfo”h]”hŒinfo”…”�”}”(hjk@h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjI?ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj?h²hh³j"?h´M.ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj ?h²hh³j"?h´M.ubah}”(h]”j?ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j"?h´M.hj ?h²hubj)�”}”(hhh]”hÎ)�”}”(hŒgenerate a device wedged uevent”h]”hŒgenerate a device wedged uevent”…”�”}”(hj•@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M.hj’@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ?h²hh³j"?h´M.ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j­@j3j­@j4‰j5‰j6‰uh1jªh²hhjHh³Nh´Nubj8)�”}”(hX»**Parameters** ``struct drm_device *dev`` DRM device ``unsigned long method`` method(s) to be used for recovery ``struct drm_wedge_task_info *info`` optional information about the guilty task **Description** This generates a device wedged uevent for the DRM device specified by **dev**. Recovery **method**\(s) of choice will be sent in the uevent environment as ``WEDGED=[,..,]`` in order of less to more side-effects. If caller is unsure about recovery or **method** is unknown (0), ``WEDGED=unknown`` will be sent instead. Refer to "Device Wedging" chapter in Documentation/gpu/drm-uapi.rst for more details. **Return** 0 on success, negative error code otherwise.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj·@h]”hŒ Parameters”…”�”}”(hj¹@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjµ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M2hj±@ubj„)�”}”(hhh]”(j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hjÖ@h]”hŒstruct drm_device *dev”…”�”}”(hjØ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÔ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M/hjÐ@ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hjï@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jë@h´M/hjì@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÐ@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jë@h´M/hjÍ@ubj‰)�”}”(hŒ;``unsigned long method`` method(s) to be used for recovery ”h]”(j�)�”}”(hŒ``unsigned long method``”h]”jî)�”}”(hjAh]”hŒunsigned long method”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M0hj Aubj©)�”}”(hhh]”hÎ)�”}”(hŒ!method(s) to be used for recovery”h]”hŒ!method(s) to be used for recovery”…”�”}”(hj(Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j$Ah´M0hj%Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j$Ah´M0hjÍ@ubj‰)�”}”(hŒP``struct drm_wedge_task_info *info`` optional information about the guilty task ”h]”(j�)�”}”(hŒ$``struct drm_wedge_task_info *info``”h]”jî)�”}”(hjHAh]”hŒ struct drm_wedge_task_info *info”…”�”}”(hjJAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjFAubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M1hjBAubj©)�”}”(hhh]”hÎ)�”}”(hŒ*optional information about the guilty task”h]”hŒ*optional information about the guilty task”…”�”}”(hjaAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j]Ah´M1hj^Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjBAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j]Ah´M1hjÍ@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj±@ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjƒAh]”hŒ Description”…”�”}”(hj…Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj�Aubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M3hj±@ubhÎ)�”}”(hXOThis generates a device wedged uevent for the DRM device specified by **dev**. Recovery **method**\(s) of choice will be sent in the uevent environment as ``WEDGED=[,..,]`` in order of less to more side-effects. If caller is unsure about recovery or **method** is unknown (0), ``WEDGED=unknown`` will be sent instead.”•+h]”(hŒFThis generates a device wedged uevent for the DRM device specified by ”…”�”}”(hj™Ah²hh³Nh´NubjB)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj¡Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj™AubhŒ . Recovery ”…”�”}”(hj™Ah²hh³Nh´NubjB)�”}”(hŒ **method**”h]”hŒmethod”…”�”}”(hj³Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj™AubhŒ9(s) of choice will be sent in the uevent environment as ”…”�”}”(hj™Ah²hh³Nh´Nubjî)�”}”(hŒ#``WEDGED=[,..,]``”h]”hŒWEDGED=[,..,]”…”�”}”(hjÅAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj™AubhŒN in order of less to more side-effects. If caller is unsure about recovery or ”…”�”}”(hj™Ah²hh³Nh´NubjB)�”}”(hŒ **method**”h]”hŒmethod”…”�”}”(hj×Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj™AubhŒ is unknown (0), ”…”�”}”(hj™Ah²hh³Nh´Nubjî)�”}”(hŒ``WEDGED=unknown``”h]”hŒWEDGED=unknown”…”�”}”(hjéAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj™AubhŒ will be sent instead.”…”�”}”(hj™Ah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M2hj±@ubhÎ)�”}”(hŒURefer to "Device Wedging" chapter in Documentation/gpu/drm-uapi.rst for more details.”h]”hŒYRefer to “Device Wedgingâ€� chapter in Documentation/gpu/drm-uapi.rst for more details.”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M8hj±@ubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hjBh]”hŒReturn”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M;hj±@ubhÎ)�”}”(hŒ,0 on success, negative error code otherwise.”h]”hŒ,0 on success, negative error code otherwise.”…”�”}”(hj)Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M<hj±@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ__drm_dev_alloc (C function)”Œc.__drm_dev_alloc”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒkvoid * __drm_dev_alloc (struct device *parent, const struct drm_driver *driver, size_t size, size_t offset)”h]”j¶)�”}”(hŒivoid *__drm_dev_alloc(struct device *parent, const struct drm_driver *driver, size_t size, size_t offset)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjXBh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjTBh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´MWubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgBh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjTBh²hh³jfBh´MWubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjuBh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjTBh²hh³jfBh´MWubjß)�”}”(hŒ__drm_dev_alloc”h]”jå)�”}”(hŒ__drm_dev_alloc”h]”hŒ__drm_dev_alloc”…”�”}”(hj†Bh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj‚Bubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjTBh²hh³jfBh´MWubjÖ)�”}”(hŒT(struct device *parent, const struct drm_driver *driver, size_t size, size_t offset)”h]”(jÜ)�”}”(hŒstruct device *parent”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj¢Bh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjžBubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯Bh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjžBubh)�”}”(hhh]”jå)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjÀBh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj½Bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jÂBŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jˆBsbŒc.__drm_dev_alloc”†”asbuh1hhjžBubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàBh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjžBubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjîBh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjžBubjå)�”}”(hŒparent”h]”hŒparent”…”�”}”(hjûBh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjžBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjšBubjÜ)�”}”(hŒconst struct drm_driver *driver”h]”(j¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjCubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!Ch²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjCubj¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj/Ch²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjCubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj` method after registering the device nodes, creating race conditions. Usage of the :c:type:`drm_driver.load ` methods is therefore deprecated, drivers must perform all initialization before calling drm_dev_register(). **Return** 0 on success, negative error code on failure.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj¿Ph]”hŒ Parameters”…”�”}”(hjÁPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj½Pubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M hj¹Pubj„)�”}”(hhh]”(j‰)�”}”(hŒ.``struct drm_device *dev`` Device to register ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hjÞPh]”hŒstruct drm_device *dev”…”�”}”(hjàPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÜPubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´MhjØPubj©)�”}”(hhh]”hÎ)�”}”(hŒDevice to register”h]”hŒDevice to register”…”�”}”(hj÷Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jóPh´MhjôPubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjØPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jóPh´MhjÕPubj‰)�”}”(hŒF``unsigned long flags`` Flags passed to the driver's .load() function ”h]”(j�)�”}”(hŒ``unsigned long flags``”h]”jî)�”}”(hjQh]”hŒunsigned long flags”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´MhjQubj©)�”}”(hhh]”hÎ)�”}”(hŒ-Flags passed to the driver's .load() function”h]”hŒ/Flags passed to the driver’s .load() function”…”�”}”(hj0Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j,Qh´Mhj-Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j,Qh´MhjÕPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj¹PubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjRQh]”hŒ Description”…”�”}”(hjTQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjPQubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M hj¹PubhÎ)�”}”(hŒ­Register the DRM device **dev** with the system, advertise device to user-space and start normal device operation. **dev** must be initialized via drm_dev_init() previously.”h]”(hŒRegister the DRM device ”…”�”}”(hjhQh²hh³Nh´NubjB)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjpQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjhQubhŒT with the system, advertise device to user-space and start normal device operation. ”…”�”}”(hjhQh²hh³Nh´NubjB)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj‚Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjhQubhŒ3 must be initialized via drm_dev_init() previously.”…”�”}”(hjhQh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´Mhj¹PubhÎ)�”}”(hŒ$Never call this twice on any device!”h]”hŒ$Never call this twice on any device!”…”�”}”(hj›Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M#hj¹PubhÎ)�”}”(hŒ**NOTE**”h]”jB)�”}”(hj¬Qh]”hŒNOTE”…”�”}”(hj®Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjªQubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M%hj¹PubhÎ)�”}”(hXaTo ensure backward compatibility with existing drivers method this function calls the :c:type:`drm_driver.load ` method after registering the device nodes, creating race conditions. Usage of the :c:type:`drm_driver.load ` methods is therefore deprecated, drivers must perform all initialization before calling drm_dev_register().”h]”(hŒVTo ensure backward compatibility with existing drivers method this function calls the ”…”�”}”(hjÂQh²hh³Nh´Nubh)�”}”(hŒ&:c:type:`drm_driver.load `”h]”jî)�”}”(hjÌQh]”hŒdrm_driver.load”…”�”}”(hjÎQh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÊQubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_driver”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M&hjÂQubhŒS method after registering the device nodes, creating race conditions. Usage of the ”…”�”}”(hjÂQh²hh³Nh´Nubh)�”}”(hŒ&:c:type:`drm_driver.load `”h]”jî)�”}”(hjðQh]”hŒdrm_driver.load”…”�”}”(hjòQh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjîQubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_driver”uh1hh³jéQh´M&hjÂQubhŒl methods is therefore deprecated, drivers must perform all initialization before calling drm_dev_register().”…”�”}”(hjÂQh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jéQh´M&hj¹PubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hjRh]”hŒReturn”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M,hj¹PubhÎ)�”}”(hŒ-0 on success, negative error code on failure.”h]”hŒ-0 on success, negative error code on failure.”…”�”}”(hj/Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M,hj¹Pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_dev_unregister (C function)”Œc.drm_dev_unregister”hNt”auh1j™hjHh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ0void drm_dev_unregister (struct drm_device *dev)”h]”j¶)�”}”(hŒ/void drm_dev_unregister(struct drm_device *dev)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj^Rh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjZRh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M�ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmRh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjZRh²hh³jlRh´M�ubjß)�”}”(hŒdrm_dev_unregister”h]”jå)�”}”(hŒdrm_dev_unregister”h]”hŒdrm_dev_unregister”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj{Rubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjZRh²hh³jlRh´M�ubjÖ)�”}”(hŒ(struct drm_device *dev)”h]”jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj›Rh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj—RubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨Rh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj—Rubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hj¹Rh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¶Rubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j»RŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j�RsbŒc.drm_dev_unregister”†”asbuh1hhj—RubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙRh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj—Rubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjçRh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj—Rubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjôRh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj—Rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj“Rubah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjZRh²hh³jlRh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjVRh²hh³jlRh´M�ubah}”(h]”jQRah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jlRh´M�hjSRh²hubj)�”}”(hhh]”hÎ)�”}”(hŒUnregister DRM device”h]”hŒUnregister DRM device”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M�hjSh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSRh²hh³jlRh´M�ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j6Sj3j6Sj4‰j5‰j6‰uh1jªh²hhjHh³Nh´Nubj8)�”}”(hX®**Parameters** ``struct drm_device *dev`` Device to unregister **Description** Unregister the DRM device from the system. This does the reverse of drm_dev_register() but does not deallocate the device. The caller must call drm_dev_put() to drop their final reference, unless it is managed with devres (as devices allocated with devm_drm_dev_alloc() are), in which case there is already an unwind action registered. A special form of unregistering for hotpluggable devices is drm_dev_unplug(), which can be called while there are still open users of **dev**. This should be called first in the device teardown code to make sure userspace can't access the device instance any more.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj@Sh]”hŒ Parameters”…”�”}”(hjBSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj>Subah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M…hj:Subj„)�”}”(hhh]”j‰)�”}”(hŒ0``struct drm_device *dev`` Device to unregister ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hj_Sh]”hŒstruct drm_device *dev”…”�”}”(hjaSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj]Subah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M‚hjYSubj©)�”}”(hhh]”hÎ)�”}”(hŒDevice to unregister”h]”hŒDevice to unregister”…”�”}”(hjxSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jtSh´M‚hjuSubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjYSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jtSh´M‚hjVSubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj:SubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjšSh]”hŒ Description”…”�”}”(hjœSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj˜Subah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M„hj:SubhÎ)�”}”(hXOUnregister the DRM device from the system. This does the reverse of drm_dev_register() but does not deallocate the device. The caller must call drm_dev_put() to drop their final reference, unless it is managed with devres (as devices allocated with devm_drm_dev_alloc() are), in which case there is already an unwind action registered.”h]”hXOUnregister the DRM device from the system. This does the reverse of drm_dev_register() but does not deallocate the device. The caller must call drm_dev_put() to drop their final reference, unless it is managed with devres (as devices allocated with devm_drm_dev_alloc() are), in which case there is already an unwind action registered.”…”�”}”(hj°Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´Mƒhj:SubhÎ)�”}”(hŒŽA special form of unregistering for hotpluggable devices is drm_dev_unplug(), which can be called while there are still open users of **dev**.”h]”(hŒ†A special form of unregistering for hotpluggable devices is drm_dev_unplug(), which can be called while there are still open users of ”…”�”}”(hj¿Sh²hh³Nh´NubjB)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjÇSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¿SubhŒ.”…”�”}”(hj¿Sh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´M‰hj:SubhÎ)�”}”(hŒyThis should be called first in the device teardown code to make sure userspace can't access the device instance any more.”h]”hŒ{This should be called first in the device teardown code to make sure userspace can’t access the device instance any more.”…”�”}”(hjàSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:92: ./drivers/gpu/drm/drm_drv.c”h´MŒhj:Subeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjHh²hh³Nh´Nubeh}”(h]”jùah ]”h"]”Œ#device instance and driver handling”ah$]”h&]”uh1hµhjÐh²hh³hÌh´KQubh¶)�”}”(hhh]”(h»)�”}”(hŒ Driver Load”h]”hŒ Driver Load”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊj@uh1hºhjýSh²hh³hÌh´K`ubh¶)�”}”(hhh]”(h»)�”}”(hŒComponent Helper Usage”h]”hŒComponent Helper Usage”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊj_uh1hºhjTh²hh³hÌh´KcubhÎ)�”}”(hXDRM drivers that drive hardware where a logical device consists of a pile of independent hardware blocks are recommended to use the :ref:`component helper library`. For consistency and better options for code reuse the following guidelines apply:”h]”(hŒ„DRM drivers that drive hardware where a logical device consists of a pile of independent hardware blocks are recommended to use the ”…”�”}”(hjTh²hh³Nh´Nubh)�”}”(hŒ*:ref:`component helper library`”h]”jf)�”}”(hj)Th]”hŒcomponent helper library”…”�”}”(hj+Th²hh³Nh´Nubah}”(h]”h ]”(jùŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jehj'Tubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j5TŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj Œ component”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:101: ./drivers/gpu/drm/drm_drv.c”h´M¡hjTubhŒS. For consistency and better options for code reuse the following guidelines apply:”…”�”}”(hjTh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jGTh´M¡hjTh²hubj+)�”}”(hX^- The entire device initialization procedure should be run from the :c:type:`component_master_ops.master_bind ` callback, starting with devm_drm_dev_alloc(), then binding all components with component_bind_all() and finishing with drm_dev_register(). - The opaque pointer passed to all components through component_bind_all() should point at :c:type:`struct drm_device ` of the device instance, not some driver specific private structure. - The component helper fills the niche where further standardization of interfaces is not practical. When there already is, or will be, a standardized interface like :c:type:`drm_bridge` or :c:type:`drm_panel`, providing its own functions to find such components at driver load time, like drm_of_find_panel_or_bridge(), then the component helper should not be used. ”h]”j)�”}”(hhh]”(j)�”}”(hXThe entire device initialization procedure should be run from the :c:type:`component_master_ops.master_bind ` callback, starting with devm_drm_dev_alloc(), then binding all components with component_bind_all() and finishing with drm_dev_register(). ”h]”hÎ)�”}”(hXThe entire device initialization procedure should be run from the :c:type:`component_master_ops.master_bind ` callback, starting with devm_drm_dev_alloc(), then binding all components with component_bind_all() and finishing with drm_dev_register().”h]”(hŒBThe entire device initialization procedure should be run from the ”…”�”}”(hj]Th²hh³Nh´Nubh)�”}”(hŒA:c:type:`component_master_ops.master_bind `”h]”jî)�”}”(hjgTh]”hŒ component_master_ops.master_bind”…”�”}”(hjiTh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjeTubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œcomponent_master_ops”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:101: ./drivers/gpu/drm/drm_drv.c”h´M¦hj]TubhŒ‹ callback, starting with devm_drm_dev_alloc(), then binding all components with component_bind_all() and finishing with drm_dev_register().”…”�”}”(hj]Th²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j„Th´M¦hjYTubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjVTubj)�”}”(hŒÆThe opaque pointer passed to all components through component_bind_all() should point at :c:type:`struct drm_device ` of the device instance, not some driver specific private structure. ”h]”hÎ)�”}”(hŒÅThe opaque pointer passed to all components through component_bind_all() should point at :c:type:`struct drm_device ` of the device instance, not some driver specific private structure.”h]”(hŒYThe opaque pointer passed to all components through component_bind_all() should point at ”…”�”}”(hj™Th²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct drm_device `”h]”jî)�”}”(hj£Th]”hŒstruct drm_device”…”�”}”(hj¥Th²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj¡Tubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:101: ./drivers/gpu/drm/drm_drv.c”h´M«hj™TubhŒD of the device instance, not some driver specific private structure.”…”�”}”(hj™Th²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÀTh´M«hj•Tubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjVTubj)�”}”(hXmThe component helper fills the niche where further standardization of interfaces is not practical. When there already is, or will be, a standardized interface like :c:type:`drm_bridge` or :c:type:`drm_panel`, providing its own functions to find such components at driver load time, like drm_of_find_panel_or_bridge(), then the component helper should not be used. ”h]”hÎ)�”}”(hXkThe component helper fills the niche where further standardization of interfaces is not practical. When there already is, or will be, a standardized interface like :c:type:`drm_bridge` or :c:type:`drm_panel`, providing its own functions to find such components at driver load time, like drm_of_find_panel_or_bridge(), then the component helper should not be used.”h]”(hŒ¤The component helper fills the niche where further standardization of interfaces is not practical. When there already is, or will be, a standardized interface like ”…”�”}”(hjÕTh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_bridge`”h]”jî)�”}”(hjßTh]”hŒ drm_bridge”…”�”}”(hjáTh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÝTubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_bridge”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:101: ./drivers/gpu/drm/drm_drv.c”h´M¯hjÕTubhŒ or ”…”�”}”(hjÕTh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_panel`”h]”jî)�”}”(hjUh]”hŒ drm_panel”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjUubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_panel”uh1hh³jüTh´M¯hjÕTubhŒœ, providing its own functions to find such components at driver load time, like drm_of_find_panel_or_bridge(), then the component helper should not be used.”…”�”}”(hjÕTh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jüTh´M¯hjÑTubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjVTubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j h³j„Th´M¦hjRTubah}”(h]”h ]”h"]”h$]”h&]”uh1j +h³j„Th´M¦hjTh²hubeh}”(h]”jeah ]”h"]”Œcomponent helper usage”ah$]”h&]”uh1hµhjýSh²hh³hÌh´Kcubh¶)�”}”(hhh]”(h»)�”}”(hŒMemory Manager Initialization”h]”hŒMemory Manager Initialization”…”�”}”(hjHUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊj�uh1hºhjEUh²hh³hÌh´KiubhÎ)�”}”(hXEvery DRM driver requires a memory manager which must be initialized at load time. DRM currently contains two memory managers, the Translation Table Manager (TTM) and the Graphics Execution Manager (GEM). This document describes the use of the GEM memory manager only. See ? for details.”•h]”hXEvery DRM driver requires a memory manager which must be initialized at load time. DRM currently contains two memory managers, the Translation Table Manager (TTM) and the Graphics Execution Manager (GEM). This document describes the use of the GEM memory manager only. See ? for details.”…”�”}”(hjVUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´KkhjEUh²hubeh}”(h]”j‡ah ]”h"]”Œmemory manager initialization”ah$]”h&]”uh1hµhjýSh²hh³hÌh´Kiubh¶)�”}”(hhh]”(h»)�”}”(hŒ"Miscellaneous Device Configuration”h]”hŒ"Miscellaneous Device Configuration”…”�”}”(hjnUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊj£uh1hºhjkUh²hh³hÌh´KrubhÎ)�”}”(hXáAnother task that may be necessary for PCI devices during configuration is mapping the video BIOS. On many devices, the VBIOS describes device configuration, LCD panel timings (if any), and contains flags indicating device state. Mapping the BIOS can be done using the pci_map_rom() call, a convenience function that takes care of mapping the actual ROM, whether it has been shadowed into memory (typically at address 0xc0000) or exists on the PCI device in the ROM BAR. Note that after the ROM has been mapped and any necessary information has been extracted, it should be unmapped; on many devices, the ROM address decoder is shared with other BARs, so leaving it mapped could cause undesired behaviour like hangs or memory corruption.”h]”hXáAnother task that may be necessary for PCI devices during configuration is mapping the video BIOS. On many devices, the VBIOS describes device configuration, LCD panel timings (if any), and contains flags indicating device state. Mapping the BIOS can be done using the pci_map_rom() call, a convenience function that takes care of mapping the actual ROM, whether it has been shadowed into memory (typically at address 0xc0000) or exists on the PCI device in the ROM BAR. Note that after the ROM has been mapped and any necessary information has been extracted, it should be unmapped; on many devices, the ROM address decoder is shared with other BARs, so leaving it mapped could cause undesired behaviour like hangs or memory corruption.”…”�”}”(hj|Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´KthjkUh²hubeh}”(h]”j©ah ]”h"]”Œ"miscellaneous device configuration”ah$]”h&]”uh1hµhjýSh²hh³hÌh´Krubeh}”(h]”jFah ]”h"]”Œ driver load”ah$]”h&]”uh1hµhjÐh²hh³hÌh´K`ubh¶)�”}”(hhh]”(h»)�”}”(hŒManaged Resources”h]”hŒManaged Resources”…”�”}”(hj›Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊjÑuh1hºhj˜Uh²hh³hÌh´K�ubhÎ)�”}”(hŒ÷Inspired by struct :c:type:`device` managed resources, but tied to the lifetime of struct :c:type:`drm_device`, which can outlive the underlying physical device, usually when userspace has some open files and other handles to resources still open.”h]”(hŒInspired by struct ”…”�”}”(hj©Uh²hh³Nh´Nubh)�”}”(hŒ:c:type:`device`”h]”jî)�”}”(hj³Uh]”hŒdevice”…”�”}”(hjµUh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj±Uubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œdevice”uh1hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:131: ./drivers/gpu/drm/drm_managed.c”h´Khj©UubhŒ7 managed resources, but tied to the lifetime of struct ”…”�”}”(hj©Uh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hj×Uh]”hŒ drm_device”…”�”}”(hjÙUh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÕUubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³jÐUh´Khj©UubhŒ‰, which can outlive the underlying physical device, usually when userspace has some open files and other handles to resources still open.”…”�”}”(hj©Uh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÐUh´Khj˜Uh²hubhÎ)�”}”(hXTRelease actions can be added with drmm_add_action(), memory allocations can be done directly with drmm_kmalloc() and the related functions. Everything will be released on the final drm_dev_put() in reverse order of how the release actions have been added and memory has been allocated since driver loading started with devm_drm_dev_alloc().”h]”hXTRelease actions can be added with drmm_add_action(), memory allocations can be done directly with drmm_kmalloc() and the related functions. Everything will be released on the final drm_dev_put() in reverse order of how the release actions have been added and memory has been allocated since driver loading started with devm_drm_dev_alloc().”…”�”}”(hjþUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:131: ./drivers/gpu/drm/drm_managed.c”h´Khj˜Uh²hubhÎ)�”}”(hX3Note that release actions and managed memory can also be added and removed during the lifetime of the driver, all the functions are fully concurrent safe. But it is recommended to use managed resources only for resources that change rarely, if ever, during the lifetime of the :c:type:`drm_device` instance.”h]”(hXNote that release actions and managed memory can also be added and removed during the lifetime of the driver, all the functions are fully concurrent safe. But it is recommended to use managed resources only for resources that change rarely, if ever, during the lifetime of the ”…”�”}”(hj Vh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hjVh]”hŒ drm_device”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjVubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:131: ./drivers/gpu/drm/drm_managed.c”h´K hj VubhŒ instance.”…”�”}”(hj Vh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j4Vh´K hj˜Uh²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ drmm_release_action (C function)”Œc.drmm_release_action”hNt”auh1j™hj˜Uh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒVvoid drmm_release_action (struct drm_device *dev, drmres_release_t action, void *data)”h]”j¶)�”}”(hŒUvoid drmm_release_action(struct drm_device *dev, drmres_release_t action, void *data)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjXVh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjTVh²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´KµubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgVh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjTVh²hh³jfVh´Kµubjß)�”}”(hŒdrmm_release_action”h]”jå)�”}”(hŒdrmm_release_action”h]”hŒdrmm_release_action”…”�”}”(hjyVh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjuVubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjTVh²hh³jfVh´KµubjÖ)�”}”(hŒ=(struct drm_device *dev, drmres_release_t action, void *data)”h]”(jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj•Vh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj‘VubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢Vh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj‘Vubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hj³Vh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj°Vubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jµVŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j{VsbŒc.drmm_release_action”†”asbuh1hhj‘VubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓVh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj‘Vubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjáVh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj‘Vubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjîVh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj‘Vubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj�VubjÜ)�”}”(hŒdrmres_release_t action”h]”(h)�”}”(hhh]”jå)�”}”(hŒdrmres_release_t”h]”hŒdrmres_release_t”…”�”}”(hj Wh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjWubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j WŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jÏVŒc.drmm_release_action”†”asbuh1hhjWubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(Wh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjWubjå)�”}”(hŒaction”h]”hŒaction”…”�”}”(hj6Wh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj�VubjÜ)�”}”(hŒ void *data”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjOWh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjKWubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]Wh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjKWubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjkWh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjKWubjå)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjxWh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjKWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj�Vubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjTVh²hh³jfVh´Kµubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjPVh²hh³jfVh´Kµubah}”(h]”jKVah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jfVh´KµhjMVh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ4release a managed action from a :c:type:`drm_device`”h]”(hŒ release a managed action from a ”…”�”}”(hj¢Wh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hj¬Wh]”hŒ drm_device”…”�”}”(hj®Wh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjªWubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”jÏVŒc.drmm_release_action”†”asbj Œ drm_device”uh1hh³jfVh´Kµhj¢Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´KµhjŸWh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMVh²hh³jfVh´Kµubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jÞWj3jÞWj4‰j5‰j6‰uh1jªh²hhj˜Uh³Nh´Nubj8)�”}”(hXµ**Parameters** ``struct drm_device *dev`` DRM device ``drmres_release_t action`` function which would be called when **dev** is released ``void *data`` opaque pointer, passed to **action** **Description** This function calls the **action** previously added by drmm_add_action() immediately. The **action** is removed from the list of cleanup actions for **dev**, which means that it won't be called in the final drm_dev_put().”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjèWh]”hŒ Parameters”…”�”}”(hjêWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjæWubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´K¹hjâWubj„)�”}”(hhh]”(j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hjXh]”hŒstruct drm_device *dev”…”�”}”(hj Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´K¶hjXubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hj Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jXh´K¶hjXubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jXh´K¶hjþWubj‰)�”}”(hŒT``drmres_release_t action`` function which would be called when **dev** is released ”h]”(j�)�”}”(hŒ``drmres_release_t action``”h]”jî)�”}”(hj@Xh]”hŒdrmres_release_t action”…”�”}”(hjBXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj>Xubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´K·hj:Xubj©)�”}”(hhh]”hÎ)�”}”(hŒ7function which would be called when **dev** is released”h]”(hŒ$function which would be called when ”…”�”}”(hjYXh²hh³Nh´NubjB)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjaXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjYXubhŒ is released”…”�”}”(hjYXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jUXh´K·hjVXubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj:Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jUXh´K·hjþWubj‰)�”}”(hŒ4``void *data`` opaque pointer, passed to **action** ”h]”(j�)�”}”(hŒ``void *data``”h]”jî)�”}”(hj‹Xh]”hŒ void *data”…”�”}”(hj�Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj‰Xubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´K¸hj…Xubj©)�”}”(hhh]”hÎ)�”}”(hŒ$opaque pointer, passed to **action**”h]”(hŒopaque pointer, passed to ”…”�”}”(hj¤Xh²hh³Nh´NubjB)�”}”(hŒ **action**”h]”hŒaction”…”�”}”(hj¬Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¤Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j Xh´K¸hj¡Xubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj…Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j Xh´K¸hjþWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjâWubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjÔXh]”hŒ Description”…”�”}”(hjÖXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÒXubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´KºhjâWubhÎ)�”}”(hŒÝThis function calls the **action** previously added by drmm_add_action() immediately. The **action** is removed from the list of cleanup actions for **dev**, which means that it won't be called in the final drm_dev_put().”h]”(hŒThis function calls the ”…”�”}”(hjêXh²hh³Nh´NubjB)�”}”(hŒ **action**”h]”hŒaction”…”�”}”(hjòXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjêXubhŒ8 previously added by drmm_add_action() immediately. The ”…”�”}”(hjêXh²hh³Nh´NubjB)�”}”(hŒ **action**”h]”hŒaction”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjêXubhŒ1 is removed from the list of cleanup actions for ”…”�”}”(hjêXh²hh³Nh´NubjB)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjêXubhŒC, which means that it won’t be called in the final drm_dev_put().”…”�”}”(hjêXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´K¹hjâWubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj˜Uh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrmm_kmalloc (C function)”Œc.drmm_kmalloc”hNt”auh1j™hj˜Uh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒDvoid * drmm_kmalloc (struct drm_device *dev, size_t size, gfp_t gfp)”h]”j¶)�”}”(hŒBvoid *drmm_kmalloc(struct drm_device *dev, size_t size, gfp_t gfp)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjOYh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjKYh²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´KÜubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^Yh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjKYh²hh³j]Yh´KÜubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjlYh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjKYh²hh³j]Yh´KÜubjß)�”}”(hŒ drmm_kmalloc”h]”jå)�”}”(hŒ drmm_kmalloc”h]”hŒ drmm_kmalloc”…”�”}”(hj}Yh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjyYubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjKYh²hh³j]Yh´KÜubjÖ)�”}”(hŒ0(struct drm_device *dev, size_t size, gfp_t gfp)”h]”(jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj™Yh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj•YubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦Yh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj•Yubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hj·Yh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj´Yubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j¹YŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jYsbŒc.drmm_kmalloc”†”asbuh1hhj•YubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×Yh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj•Yubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjåYh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj•Yubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjòYh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj•Yubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj‘YubjÜ)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”jå)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj Zubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jZŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jÓYŒc.drmm_kmalloc”†”asbuh1hhjZubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,Zh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjZubjå)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj:Zh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj‘YubjÜ)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”jå)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjVZh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjSZubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jXZŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jÓYŒc.drmm_kmalloc”†”asbuh1hhjOZubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtZh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjOZubjå)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj‚Zh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjOZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj‘Yubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjKYh²hh³j]Yh´KÜubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjGYh²hh³j]Yh´KÜubah}”(h]”jBYah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j]Yh´KÜhjDYh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ&:c:type:`drm_device` managed kmalloc()”h]”(h)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hj²Zh]”hŒ drm_device”…”�”}”(hj´Zh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj°Zubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”jÓYŒc.drmm_kmalloc”†”asbj Œ drm_device”uh1hh³jfVh´Kµhj¬ZubhŒ managed kmalloc()”…”�”}”(hj¬Zh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´KÜhj©Zh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjDYh²hh³j]Yh´KÜubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jèZj3jèZj4‰j5‰j6‰uh1jªh²hhj˜Uh³Nh´Nubj8)�”}”(hXv**Parameters** ``struct drm_device *dev`` DRM device ``size_t size`` size of the memory allocation ``gfp_t gfp`` GFP allocation flags **Description** This is a :c:type:`drm_device` managed version of kmalloc(). The allocated memory is automatically freed on the final drm_dev_put(). Memory can also be freed before the final drm_dev_put() by calling drmm_kfree().”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjòZh]”hŒ Parameters”…”�”}”(hjôZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjðZubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´KàhjìZubj„)�”}”(hhh]”(j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hj[h]”hŒstruct drm_device *dev”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´KÝhj [ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hj*[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j&[h´KÝhj'[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj [ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j&[h´KÝhj[ubj‰)�”}”(hŒ.``size_t size`` size of the memory allocation ”h]”(j�)�”}”(hŒ``size_t size``”h]”jî)�”}”(hjJ[h]”hŒ size_t size”…”�”}”(hjL[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjH[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´KÞhjD[ubj©)�”}”(hhh]”hÎ)�”}”(hŒsize of the memory allocation”h]”hŒsize of the memory allocation”…”�”}”(hjc[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j_[h´KÞhj`[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjD[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j_[h´KÞhj[ubj‰)�”}”(hŒ#``gfp_t gfp`` GFP allocation flags ”h]”(j�)�”}”(hŒ ``gfp_t gfp``”h]”jî)�”}”(hjƒ[h]”hŒ gfp_t gfp”…”�”}”(hj…[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj�[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´Kßhj}[ubj©)�”}”(hhh]”hÎ)�”}”(hŒGFP allocation flags”h]”hŒGFP allocation flags”…”�”}”(hjœ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j˜[h´Kßhj™[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj}[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j˜[h´Kßhj[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjìZubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj¾[h]”hŒ Description”…”�”}”(hjÀ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¼[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´KáhjìZubhÎ)�”}”(hŒÕThis is a :c:type:`drm_device` managed version of kmalloc(). The allocated memory is automatically freed on the final drm_dev_put(). Memory can also be freed before the final drm_dev_put() by calling drmm_kfree().”h]”(hŒ This is a ”…”�”}”(hjÔ[h²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hjÞ[h]”hŒ drm_device”…”�”}”(hjà[h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÜ[ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´KàhjÔ[ubhŒ· managed version of kmalloc(). The allocated memory is automatically freed on the final drm_dev_put(). Memory can also be freed before the final drm_dev_put() by calling drmm_kfree().”…”�”}”(hjÔ[h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jû[h´KàhjìZubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj˜Uh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrmm_kstrdup (C function)”Œc.drmm_kstrdup”hNt”auh1j™hj˜Uh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒFchar * drmm_kstrdup (struct drm_device *dev, const char *s, gfp_t gfp)”h]”j¶)�”}”(hŒDchar *drmm_kstrdup(struct drm_device *dev, const char *s, gfp_t gfp)”h]”(jŠ-)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj&\h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj"\h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´KøubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5\h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj"\h²hh³j4\h´Køubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjC\h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj"\h²hh³j4\h´Køubjß)�”}”(hŒ drmm_kstrdup”h]”jå)�”}”(hŒ drmm_kstrdup”h]”hŒ drmm_kstrdup”…”�”}”(hjT\h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjP\ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj"\h²hh³j4\h´KøubjÖ)�”}”(hŒ2(struct drm_device *dev, const char *s, gfp_t gfp)”h]”(jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjp\h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjl\ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}\h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjl\ubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hjŽ\h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj‹\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j�\Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jV\sbŒc.drmm_kstrdup”†”asbuh1hhjl\ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®\h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjl\ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj¼\h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjl\ubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÉ\h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjl\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjh\ubjÜ)�”}”(hŒ const char *s”h]”(j¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hjâ\h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjÞ\ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjï\h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÞ\ubjŠ-)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjý\h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjÞ\ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ]h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÞ\ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjÞ\ubjå)�”}”(hŒs”h]”hŒs”…”�”}”(hj&]h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÞ\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjh\ubjÜ)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”jå)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjB]h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj?]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jD]Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jª\Œc.drmm_kstrdup”†”asbuh1hhj;]ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`]h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj;]ubjå)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjn]h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj;]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjh\ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj"\h²hh³j4\h´Køubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj\h²hh³j4\h´Køubah}”(h]”j\ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j4\h´Køhj\h²hubj)�”}”(hhh]”hÎ)�”}”(hŒ&:c:type:`drm_device` managed kstrdup()”h]”(h)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hjž]h]”hŒ drm_device”…”�”}”(hj ]h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjœ]ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”jª\Œc.drmm_kstrdup”†”asbj Œ drm_device”uh1hh³jfVh´Kµhj˜]ubhŒ managed kstrdup()”…”�”}”(hj˜]h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´Køhj•]h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\h²hh³j4\h´Køubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jÔ]j3jÔ]j4‰j5‰j6‰uh1jªh²hhj˜Uh³Nh´Nubj8)�”}”(hXt**Parameters** ``struct drm_device *dev`` DRM device ``const char *s`` 0-terminated string to be duplicated ``gfp_t gfp`` GFP allocation flags **Description** This is a :c:type:`drm_device` managed version of kstrdup(). The allocated memory is automatically freed on the final drm_dev_put() and works exactly like a memory allocation obtained by drmm_kmalloc().”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjÞ]h]”hŒ Parameters”…”�”}”(hjà]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÜ]ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´KühjØ]ubj„)�”}”(hhh]”(j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hjý]h]”hŒstruct drm_device *dev”…”�”}”(hjÿ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjû]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´Kùhj÷]ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j^h´Kùhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj÷]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j^h´Kùhjô]ubj‰)�”}”(hŒ7``const char *s`` 0-terminated string to be duplicated ”h]”(j�)�”}”(hŒ``const char *s``”h]”jî)�”}”(hj6^h]”hŒ const char *s”…”�”}”(hj8^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj4^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´Kúhj0^ubj©)�”}”(hhh]”hÎ)�”}”(hŒ$0-terminated string to be duplicated”h]”hŒ$0-terminated string to be duplicated”…”�”}”(hjO^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jK^h´KúhjL^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj0^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jK^h´Kúhjô]ubj‰)�”}”(hŒ#``gfp_t gfp`` GFP allocation flags ”h]”(j�)�”}”(hŒ ``gfp_t gfp``”h]”jî)�”}”(hjo^h]”hŒ gfp_t gfp”…”�”}”(hjq^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjm^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´Kûhji^ubj©)�”}”(hhh]”hÎ)�”}”(hŒGFP allocation flags”h]”hŒGFP allocation flags”…”�”}”(hjˆ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j„^h´Kûhj…^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hji^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j„^h´Kûhjô]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjØ]ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjª^h]”hŒ Description”…”�”}”(hj¬^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¨^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´KýhjØ]ubhÎ)�”}”(hŒÊThis is a :c:type:`drm_device` managed version of kstrdup(). The allocated memory is automatically freed on the final drm_dev_put() and works exactly like a memory allocation obtained by drmm_kmalloc().”h]”(hŒ This is a ”…”�”}”(hjÀ^h²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hjÊ^h]”hŒ drm_device”…”�”}”(hjÌ^h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÈ^ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´KühjÀ^ubhŒ¬ managed version of kstrdup(). The allocated memory is automatically freed on the final drm_dev_put() and works exactly like a memory allocation obtained by drmm_kmalloc().”…”�”}”(hjÀ^h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jç^h´KühjØ]ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj˜Uh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrmm_kfree (C function)”Œ c.drmm_kfree”hNt”auh1j™hj˜Uh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ4void drmm_kfree (struct drm_device *dev, void *data)”h]”j¶)�”}”(hŒ3void drmm_kfree(struct drm_device *dev, void *data)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj_h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´MubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!_h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj_h²hh³j _h´Mubjß)�”}”(hŒ drmm_kfree”h]”jå)�”}”(hŒ drmm_kfree”h]”hŒ drmm_kfree”…”�”}”(hj3_h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj/_ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj_h²hh³j _h´MubjÖ)�”}”(hŒ$(struct drm_device *dev, void *data)”h]”(jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjO_h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjK_ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\_h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjK_ubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hjm_h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjj_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jo_Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j5_sbŒ c.drmm_kfree”†”asbuh1hhjK_ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�_h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjK_ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj›_h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjK_ubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj¨_h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjK_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjG_ubjÜ)�”}”(hŒ void *data”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÁ_h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj½_ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏ_h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj½_ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjÝ_h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj½_ubjå)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjê_h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj½_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjG_ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj_h²hh³j _h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj _h²hh³j _h´Mubah}”(h]”j_ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j _h´Mhj_h²hubj)�”}”(hhh]”hÎ)�”}”(hŒ$:c:type:`drm_device` managed kfree()”h]”(h)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hj`h]”hŒ drm_device”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj`ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”j‰_Œ c.drmm_kfree”†”asbj Œ drm_device”uh1hh³jfVh´Kµhj`ubhŒ managed kfree()”…”�”}”(hj`h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´Mhj`h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj_h²hh³j _h´Mubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jP`j3jP`j4‰j5‰j6‰uh1jªh²hhj˜Uh³Nh´Nubj8)�”}”(hXC**Parameters** ``struct drm_device *dev`` DRM device ``void *data`` memory allocation to be freed **Description** This is a :c:type:`drm_device` managed version of kfree() which can be used to release memory allocated through drmm_kmalloc() or any of its related functions before the final drm_dev_put() of **dev**.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjZ`h]”hŒ Parameters”…”�”}”(hj\`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjX`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´MhjT`ubj„)�”}”(hhh]”(j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hjy`h]”hŒstruct drm_device *dev”…”�”}”(hj{`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjw`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´Mhjs`ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hj’`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jŽ`h´Mhj�`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjs`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jŽ`h´Mhjp`ubj‰)�”}”(hŒ-``void *data`` memory allocation to be freed ”h]”(j�)�”}”(hŒ``void *data``”h]”jî)�”}”(hj²`h]”hŒ void *data”…”�”}”(hj´`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj°`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´Mhj¬`ubj©)�”}”(hhh]”hÎ)�”}”(hŒmemory allocation to be freed”h]”hŒmemory allocation to be freed”…”�”}”(hjË`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÇ`h´MhjÈ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¬`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÇ`h´Mhjp`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjT`ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjí`h]”hŒ Description”…”�”}”(hjï`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjë`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´MhjT`ubhÎ)�”}”(hŒÉThis is a :c:type:`drm_device` managed version of kfree() which can be used to release memory allocated through drmm_kmalloc() or any of its related functions before the final drm_dev_put() of **dev**.”h]”(hŒ This is a ”…”�”}”(hjah²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hj ah]”hŒ drm_device”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj aubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:134: ./drivers/gpu/drm/drm_managed.c”h´MhjaubhŒ£ managed version of kfree() which can be used to release memory allocated through drmm_kmalloc() or any of its related functions before the final drm_dev_put() of ”…”�”}”(hjah²hh³Nh´NubjB)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj/ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjaubhŒ.”…”�”}”(hjah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j*ah´MhjT`ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj˜Uh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrmm_add_action (C macro)”Œc.drmm_add_action”hNt”auh1j™hj˜Uh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒdrmm_add_action”h]”j¶)�”}”(hŒdrmm_add_action”h]”jß)�”}”(hŒdrmm_add_action”h]”jå)�”}”(hjaah]”hŒdrmm_add_action”…”�”}”(hjkah²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjgaubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjcah²hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´Kubah}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj_ah²hh³j~ah´Kubah}”(h]”jZaah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j~ah´Khj\ah²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ah²hh³j~ah´Kubeh}”(h]”h ]”(júŒmacro”eh"]”h$]”h&]”j1júj2j—aj3j—aj4‰j5‰j6‰uh1jªh²hhj˜Uh³Nh´NubhÎ)�”}”(hŒ'``drmm_add_action (dev, action, data)``”h]”jî)�”}”(hj�ah]”hŒ#drmm_add_action (dev, action, data)”…”�”}”(hjŸah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj›aubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´Khj˜Uh²hubj+)�”}”(hŒ7add a managed release action to a :c:type:`drm_device` ”h]”hÎ)�”}”(hŒ6add a managed release action to a :c:type:`drm_device`”h]”(hŒ"add a managed release action to a ”…”�”}”(hj·ah²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hjÁah]”hŒ drm_device”…”�”}”(hjÃah²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj¿aubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´Khj·aubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÞah´Khj³aubah}”(h]”h ]”h"]”h$]”h&]”uh1j +h³jÞah´Khj˜Uh²hubj8)�”}”(hXƒ**Parameters** ``dev`` DRM device ``action`` function which should be called when **dev** is released ``data`` opaque pointer, passed to **action** **Description** This function adds the release **action** with optional parameter **data** to the list of cleanup actions for **dev**. The cleanup actions will be run in reverse order in the final drm_dev_put() call for **dev**.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjñah]”hŒ Parameters”…”�”}”(hjóah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjïaubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´Khjëaubj„)�”}”(hhh]”(j‰)�”}”(hŒ``dev`` DRM device ”h]”(j�)�”}”(hŒ``dev``”h]”jî)�”}”(hjbh]”hŒdev”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´Khj bubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hj)bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j%bh´Khj&bubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j%bh´Khjbubj‰)�”}”(hŒD``action`` function which should be called when **dev** is released ”h]”(j�)�”}”(hŒ ``action``”h]”jî)�”}”(hjIbh]”hŒaction”…”�”}”(hjKbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjGbubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KhjCbubj©)�”}”(hhh]”hÎ)�”}”(hŒ8function which should be called when **dev** is released”h]”(hŒ%function which should be called when ”…”�”}”(hjbbh²hh³Nh´NubjB)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjbbubhŒ is released”…”�”}”(hjbbh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j^bh´Khj_bubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjCbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j^bh´Khjbubj‰)�”}”(hŒ.``data`` opaque pointer, passed to **action** ”h]”(j�)�”}”(hŒ``data``”h]”jî)�”}”(hj”bh]”hŒdata”…”�”}”(hj–bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj’bubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KhjŽbubj©)�”}”(hhh]”hÎ)�”}”(hŒ$opaque pointer, passed to **action**”h]”(hŒopaque pointer, passed to ”…”�”}”(hj­bh²hh³Nh´NubjB)�”}”(hŒ **action**”h]”hŒaction”…”�”}”(hjµbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj­bubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j©bh´Khjªbubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjŽbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j©bh´Khjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjëaubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjÝbh]”hŒ Description”…”�”}”(hjßbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÛbubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KhjëaubhÎ)�”}”(hŒÔThis function adds the release **action** with optional parameter **data** to the list of cleanup actions for **dev**. The cleanup actions will be run in reverse order in the final drm_dev_put() call for **dev**.”h]”(hŒThis function adds the release ”…”�”}”(hjóbh²hh³Nh´NubjB)�”}”(hŒ **action**”h]”hŒaction”…”�”}”(hjûbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjóbubhŒ with optional parameter ”…”�”}”(hjóbh²hh³Nh´NubjB)�”}”(hŒ**data**”h]”hŒdata”…”�”}”(hj ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjóbubhŒ$ to the list of cleanup actions for ”…”�”}”(hjóbh²hh³Nh´NubjB)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjóbubhŒW. The cleanup actions will be run in reverse order in the final drm_dev_put() call for ”…”�”}”(hjóbh²hh³Nh´NubjB)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj1ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjóbubhŒ.”…”�”}”(hjóbh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´Khjëaubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj˜Uh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ"drmm_add_action_or_reset (C macro)”Œc.drmm_add_action_or_reset”hNt”auh1j™hj˜Uh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒdrmm_add_action_or_reset”h]”j¶)�”}”(hŒdrmm_add_action_or_reset”h]”jß)�”}”(hŒdrmm_add_action_or_reset”h]”jå)�”}”(hjdch]”hŒdrmm_add_action_or_reset”…”�”}”(hjnch²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjjcubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjfch²hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K!ubah}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjbch²hh³j�ch´K!ubah}”(h]”j]cah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j�ch´K!hj_ch²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj_ch²hh³j�ch´K!ubeh}”(h]”h ]”(júŒmacro”eh"]”h$]”h&]”j1júj2jšcj3jšcj4‰j5‰j6‰uh1jªh²hhj˜Uh³Nh´NubhÎ)�”}”(hŒ0``drmm_add_action_or_reset (dev, action, data)``”h]”jî)�”}”(hj ch]”hŒ,drmm_add_action_or_reset (dev, action, data)”…”�”}”(hj¢ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjžcubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K#hj˜Uh²hubj+)�”}”(hŒ7add a managed release action to a :c:type:`drm_device` ”h]”hÎ)�”}”(hŒ6add a managed release action to a :c:type:`drm_device`”h]”(hŒ"add a managed release action to a ”…”�”}”(hjºch²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hjÄch]”hŒ drm_device”…”�”}”(hjÆch²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÂcubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K!hjºcubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jách´K!hj¶cubah}”(h]”h ]”h"]”h$]”h&]”uh1j +h³jách´K!hj˜Uh²hubj8)�”}”(hXA**Parameters** ``dev`` DRM device ``action`` function which should be called when **dev** is released ``data`` opaque pointer, passed to **action** **Description** Similar to drmm_add_action(), with the only difference that upon failure **action** is directly called for any cleanup work necessary on failures.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjôch]”hŒ Parameters”…”�”}”(hjöch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjòcubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K%hjîcubj„)�”}”(hhh]”(j‰)�”}”(hŒ``dev`` DRM device ”h]”(j�)�”}”(hŒ``dev``”h]”jî)�”}”(hjdh]”hŒdev”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K"hj dubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hj,dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j(dh´K"hj)dubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j(dh´K"hj dubj‰)�”}”(hŒD``action`` function which should be called when **dev** is released ”h]”(j�)�”}”(hŒ ``action``”h]”jî)�”}”(hjLdh]”hŒaction”…”�”}”(hjNdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjJdubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K#hjFdubj©)�”}”(hhh]”hÎ)�”}”(hŒ8function which should be called when **dev** is released”h]”(hŒ%function which should be called when ”…”�”}”(hjedh²hh³Nh´NubjB)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjmdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjedubhŒ is released”…”�”}”(hjedh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jadh´K#hjbdubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjFdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jadh´K#hj dubj‰)�”}”(hŒ.``data`` opaque pointer, passed to **action** ”h]”(j�)�”}”(hŒ``data``”h]”jî)�”}”(hj—dh]”hŒdata”…”�”}”(hj™dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj•dubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K$hj‘dubj©)�”}”(hhh]”hÎ)�”}”(hŒ$opaque pointer, passed to **action**”h]”(hŒopaque pointer, passed to ”…”�”}”(hj°dh²hh³Nh´NubjB)�”}”(hŒ **action**”h]”hŒaction”…”�”}”(hj¸dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj°dubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j¬dh´K$hj­dubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj‘dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j¬dh´K$hj dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjîcubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjàdh]”hŒ Description”…”�”}”(hjâdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÞdubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K&hjîcubhÎ)�”}”(hŒ’Similar to drmm_add_action(), with the only difference that upon failure **action** is directly called for any cleanup work necessary on failures.”h]”(hŒISimilar to drmm_add_action(), with the only difference that upon failure ”…”�”}”(hjödh²hh³Nh´NubjB)�”}”(hŒ **action**”h]”hŒaction”…”�”}”(hjþdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjödubhŒ? is directly called for any cleanup work necessary on failures.”…”�”}”(hjödh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K%hjîcubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj˜Uh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrmm_kzalloc (C function)”Œc.drmm_kzalloc”hNt”auh1j™hj˜Uh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒDvoid * drmm_kzalloc (struct drm_device *dev, size_t size, gfp_t gfp)”h]”j¶)�”}”(hŒBvoid *drmm_kzalloc(struct drm_device *dev, size_t size, gfp_t gfp)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj7eh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj3eh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K7ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFeh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj3eh²hh³jEeh´K7ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjTeh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj3eh²hh³jEeh´K7ubjß)�”}”(hŒ drmm_kzalloc”h]”jå)�”}”(hŒ drmm_kzalloc”h]”hŒ drmm_kzalloc”…”�”}”(hjeeh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjaeubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj3eh²hh³jEeh´K7ubjÖ)�”}”(hŒ0(struct drm_device *dev, size_t size, gfp_t gfp)”h]”(jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj�eh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj}eubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽeh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj}eubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hjŸeh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjœeubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j¡eŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jgesbŒc.drmm_kzalloc”†”asbuh1hhj}eubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿eh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj}eubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjÍeh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj}eubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÚeh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj}eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjyeubjÜ)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”jå)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjöeh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjóeubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jøeŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j»eŒc.drmm_kzalloc”†”asbuh1hhjïeubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjïeubjå)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj"fh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjïeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjyeubjÜ)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”jå)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj>fh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj;fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j@fŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j»eŒc.drmm_kzalloc”†”asbuh1hhj7fubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\fh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj7fubjå)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjjfh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj7fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjyeubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj3eh²hh³jEeh´K7ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj/eh²hh³jEeh´K7ubah}”(h]”j*eah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jEeh´K7hj,eh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ&:c:type:`drm_device` managed kzalloc()”h]”(h)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hjšfh]”hŒ drm_device”…”�”}”(hjœfh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj˜fubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”j»eŒc.drmm_kzalloc”†”asbj Œ drm_device”uh1hh³j~ah´Khj”fubhŒ managed kzalloc()”…”�”}”(hj”fh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K7hj‘fh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,eh²hh³jEeh´K7ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jÐfj3jÐfj4‰j5‰j6‰uh1jªh²hhj˜Uh³Nh´Nubj8)�”}”(hXv**Parameters** ``struct drm_device *dev`` DRM device ``size_t size`` size of the memory allocation ``gfp_t gfp`` GFP allocation flags **Description** This is a :c:type:`drm_device` managed version of kzalloc(). The allocated memory is automatically freed on the final drm_dev_put(). Memory can also be freed before the final drm_dev_put() by calling drmm_kfree().”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjÚfh]”hŒ Parameters”…”�”}”(hjÜfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjØfubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K;hjÔfubj„)�”}”(hhh]”(j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hjùfh]”hŒstruct drm_device *dev”…”�”}”(hjûfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj÷fubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K8hjófubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jgh´K8hjgubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjófubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jgh´K8hjðfubj‰)�”}”(hŒ.``size_t size`` size of the memory allocation ”h]”(j�)�”}”(hŒ``size_t size``”h]”jî)�”}”(hj2gh]”hŒ size_t size”…”�”}”(hj4gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj0gubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K9hj,gubj©)�”}”(hhh]”hÎ)�”}”(hŒsize of the memory allocation”h]”hŒsize of the memory allocation”…”�”}”(hjKgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jGgh´K9hjHgubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj,gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jGgh´K9hjðfubj‰)�”}”(hŒ#``gfp_t gfp`` GFP allocation flags ”h]”(j�)�”}”(hŒ ``gfp_t gfp``”h]”jî)�”}”(hjkgh]”hŒ gfp_t gfp”…”�”}”(hjmgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjigubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K:hjegubj©)�”}”(hhh]”hÎ)�”}”(hŒGFP allocation flags”h]”hŒGFP allocation flags”…”�”}”(hj„gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j€gh´K:hj�gubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjegubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j€gh´K:hjðfubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÔfubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj¦gh]”hŒ Description”…”�”}”(hj¨gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¤gubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KhsbŒc.drmm_kmalloc_array”†”asbuh1hhjThubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–hh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjThubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj¤hh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjThubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj±hh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjThubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjPhubjÜ)�”}”(hŒsize_t n”h]”(h)�”}”(hhh]”jå)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÍhh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÊhubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jÏhŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j’hŒc.drmm_kmalloc_array”†”asbuh1hhjÆhubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëhh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÆhubjå)�”}”(hjðh]”hŒn”…”�”}”(hjùhh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÆhubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjPhubjÜ)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”jå)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjiubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jiŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j’hŒc.drmm_kmalloc_array”†”asbuh1hhj iubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2ih²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj iubjå)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj@ih²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjPhubjÜ)�”}”(hŒ gfp_t flags”h]”(h)�”}”(hhh]”jå)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj\ih²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjYiubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j^iŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j’hŒc.drmm_kmalloc_array”†”asbuh1hhjUiubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzih²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjUiubjå)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjˆih²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjUiubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjPhubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj hh²hh³jhh´KFubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjhh²hh³jhh´KFubah}”(h]”jhah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jhh´KFhjhh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ,:c:type:`drm_device` managed kmalloc_array()”h]”(h)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hj¸ih]”hŒ drm_device”…”�”}”(hjºih²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj¶iubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”j’hŒc.drmm_kmalloc_array”†”asbj Œ drm_device”uh1hh³j~ah´Khj²iubhŒ managed kmalloc_array()”…”�”}”(hj²ih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KFhj¯ih²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhh²hh³jhh´KFubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jîij3jîij4‰j5‰j6‰uh1jªh²hhj˜Uh³Nh´Nubj8)�”}”(hXŸ**Parameters** ``struct drm_device *dev`` DRM device ``size_t n`` number of array elements to allocate ``size_t size`` size of array member ``gfp_t flags`` GFP allocation flags **Description** This is a :c:type:`drm_device` managed version of kmalloc_array(). The allocated memory is automatically freed on the final drm_dev_put() and works exactly like a memory allocation obtained by drmm_kmalloc().”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjøih]”hŒ Parameters”…”�”}”(hjúih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjöiubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KJhjòiubj„)�”}”(hhh]”(j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hjjh]”hŒstruct drm_device *dev”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KGhjjubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hj0jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j,jh´KGhj-jubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j,jh´KGhjjubj‰)�”}”(hŒ2``size_t n`` number of array elements to allocate ”h]”(j�)�”}”(hŒ ``size_t n``”h]”jî)�”}”(hjPjh]”hŒsize_t n”…”�”}”(hjRjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjNjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KHhjJjubj©)�”}”(hhh]”hÎ)�”}”(hŒ$number of array elements to allocate”h]”hŒ$number of array elements to allocate”…”�”}”(hjijh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jejh´KHhjfjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjJjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jejh´KHhjjubj‰)�”}”(hŒ%``size_t size`` size of array member ”h]”(j�)�”}”(hŒ``size_t size``”h]”jî)�”}”(hj‰jh]”hŒ size_t size”…”�”}”(hj‹jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj‡jubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KIhjƒjubj©)�”}”(hhh]”hÎ)�”}”(hŒsize of array member”h]”hŒsize of array member”…”�”}”(hj¢jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jžjh´KIhjŸjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjƒjubeh}”(h]”h •]”h"]”h$]”h&]”uh1jˆh³jžjh´KIhjjubj‰)�”}”(hŒ%``gfp_t flags`` GFP allocation flags ”h]”(j�)�”}”(hŒ``gfp_t flags``”h]”jî)�”}”(hjÂjh]”hŒ gfp_t flags”…”�”}”(hjÄjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÀjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KJhj¼jubj©)�”}”(hhh]”hÎ)�”}”(hŒGFP allocation flags”h]”hŒGFP allocation flags”…”�”}”(hjÛjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j×jh´KJhjØjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¼jubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j×jh´KJhjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjòiubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjýjh]”hŒ Description”…”�”}”(hjÿjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjûjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KLhjòiubhÎ)�”}”(hŒÐThis is a :c:type:`drm_device` managed version of kmalloc_array(). The allocated memory is automatically freed on the final drm_dev_put() and works exactly like a memory allocation obtained by drmm_kmalloc().”h]”(hŒ This is a ”…”�”}”(hjkh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hjkh]”hŒ drm_device”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjkubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KKhjkubhŒ² managed version of kmalloc_array(). The allocated memory is automatically freed on the final drm_dev_put() and works exactly like a memory allocation obtained by drmm_kmalloc().”…”�”}”(hjkh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j:kh´KKhjòiubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj˜Uh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrmm_kcalloc (C function)”Œc.drmm_kcalloc”hNt”auh1j™hj˜Uh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒPvoid * drmm_kcalloc (struct drm_device *dev, size_t n, size_t size, gfp_t flags)”h]”j¶)�”}”(hŒNvoid *drmm_kcalloc(struct drm_device *dev, size_t n, size_t size, gfp_t flags)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjekh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjakh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K\ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtkh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjakh²hh³jskh´K\ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj‚kh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjakh²hh³jskh´K\ubjß)�”}”(hŒ drmm_kcalloc”h]”jå)�”}”(hŒ drmm_kcalloc”h]”hŒ drmm_kcalloc”…”�”}”(hj“kh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj�kubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjakh²hh³jskh´K\ubjÖ)�”}”(hŒ<(struct drm_device *dev, size_t n, size_t size, gfp_t flags)”h]”(jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj¯kh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj«kubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼kh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj«kubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hjÍkh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÊkubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jÏkŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j•ksbŒc.drmm_kcalloc”†”asbuh1hhj«kubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíkh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj«kubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjûkh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj«kubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj«kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj§kubjÜ)�”}”(hŒsize_t n”h]”(h)�”}”(hhh]”jå)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj$lh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj!lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j&lŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jékŒc.drmm_kcalloc”†”asbuh1hhjlubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBlh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjlubjå)�”}”(hjðh]”hŒn”…”�”}”(hjPlh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj§kubjÜ)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”jå)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjklh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjhlubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jmlŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jékŒc.drmm_kcalloc”†”asbuh1hhjdlubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰lh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjdlubjå)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj—lh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjdlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj§kubjÜ)�”}”(hŒ gfp_t flags”h]”(h)�”}”(hhh]”jå)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj³lh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj°lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jµlŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jékŒc.drmm_kcalloc”†”asbuh1hhj¬lubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑlh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj¬lubjå)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjßlh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¬lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj§kubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjakh²hh³jskh´K\ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj]kh²hh³jskh´K\ubah}”(h]”jXkah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jskh´K\hjZkh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ&:c:type:`drm_device` managed kcalloc()”h]”(h)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hjmh]”hŒ drm_device”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj mubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”jékŒc.drmm_kcalloc”†”asbj Œ drm_device”uh1hh³j~ah´Khj mubhŒ managed kcalloc()”…”�”}”(hj mh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K\hjmh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZkh²hh³jskh´K\ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jEmj3jEmj4‰j5‰j6‰uh1jªh²hhj˜Uh³Nh´Nubj8)�”}”(hX™**Parameters** ``struct drm_device *dev`` DRM device ``size_t n`` number of array elements to allocate ``size_t size`` size of array member ``gfp_t flags`` GFP allocation flags **Description** This is a :c:type:`drm_device` managed version of kcalloc(). The allocated memory is automatically freed on the final drm_dev_put() and works exactly like a memory allocation obtained by drmm_kmalloc().”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjOmh]”hŒ Parameters”…”�”}”(hjQmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjMmubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K`hjImubj„)�”}”(hhh]”(j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hjnmh]”hŒstruct drm_device *dev”…”�”}”(hjpmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjlmubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K]hjhmubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hj‡mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jƒmh´K]hj„mubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjhmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jƒmh´K]hjemubj‰)�”}”(hŒ2``size_t n`` number of array elements to allocate ”h]”(j�)�”}”(hŒ ``size_t n``”h]”jî)�”}”(hj§mh]”hŒsize_t n”…”�”}”(hj©mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj¥mubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K^hj¡mubj©)�”}”(hhh]”hÎ)�”}”(hŒ$number of array elements to allocate”h]”hŒ$number of array elements to allocate”…”�”}”(hjÀmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j¼mh´K^hj½mubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¡mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j¼mh´K^hjemubj‰)�”}”(hŒ%``size_t size`` size of array member ”h]”(j�)�”}”(hŒ``size_t size``”h]”jî)�”}”(hjàmh]”hŒ size_t size”…”�”}”(hjâmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÞmubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K_hjÚmubj©)�”}”(hhh]”hÎ)�”}”(hŒsize of array member”h]”hŒsize of array member”…”�”}”(hjùmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jõmh´K_hjömubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÚmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jõmh´K_hjemubj‰)�”}”(hŒ%``gfp_t flags`` GFP allocation flags ”h]”(j�)�”}”(hŒ``gfp_t flags``”h]”jî)�”}”(hjnh]”hŒ gfp_t flags”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K`hjnubj©)�”}”(hhh]”hÎ)�”}”(hŒGFP allocation flags”h]”hŒGFP allocation flags”…”�”}”(hj2nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j.nh´K`hj/nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjnubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j.nh´K`hjemubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjImubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjTnh]”hŒ Description”…”�”}”(hjVnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjRnubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KbhjImubhÎ)�”}”(hŒÊThis is a :c:type:`drm_device` managed version of kcalloc(). The allocated memory is automatically freed on the final drm_dev_put() and works exactly like a memory allocation obtained by drmm_kmalloc().”h]”(hŒ This is a ”…”�”}”(hjjnh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hjtnh]”hŒ drm_device”…”�”}”(hjvnh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjrnubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KahjjnubhŒ¬ managed version of kcalloc(). The allocated memory is automatically freed on the final drm_dev_put() and works exactly like a memory allocation obtained by drmm_kmalloc().”…”�”}”(hjjnh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j‘nh´KahjImubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj˜Uh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrmm_mutex_init (C macro)”Œc.drmm_mutex_init”hNt”auh1j™hj˜Uh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒdrmm_mutex_init”h]”j¶)�”}”(hŒdrmm_mutex_init”h]”jß)�”}”(hŒdrmm_mutex_init”h]”jå)�”}”(hj¶nh]”hŒdrmm_mutex_init”…”�”}”(hjÀnh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¼nubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj¸nh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´Ksubah}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj´nh²hh³jÓnh´Ksubah}”(h]”j¯nah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jÓnh´Kshj±nh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj±nh²hh³jÓnh´Ksubeh}”(h]”h ]”(júŒmacro”eh"]”h$]”h&]”j1júj2jìnj3jìnj4‰j5‰j6‰uh1jªh²hhj˜Uh³Nh´NubhÎ)�”}”(hŒ``drmm_mutex_init (dev, lock)``”h]”jî)�”}”(hjònh]”hŒdrmm_mutex_init (dev, lock)”…”�”}”(hjônh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjðnubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´Kuhj˜Uh²hubj+)�”}”(hŒ*:c:type:`drm_device`-managed mutex_init() ”h]”hÎ)�”}”(hŒ):c:type:`drm_device`-managed mutex_init()”h]”(h)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hjoh]”hŒ drm_device”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjoubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´Kshj oubhŒ-managed mutex_init()”…”�”}”(hj oh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j/oh´Kshjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j +h³j/oh´Kshj˜Uh²hubj8)�”}”(hX$**Parameters** ``dev`` DRM device ``lock`` lock to be initialized **Return** 0 on success, or a negative errno code otherwise. **Description** This is a :c:type:`drm_device`-managed version of mutex_init(). The initialized lock is automatically destroyed on the final drm_dev_put().”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjFoh]”hŒ Parameters”…”�”}”(hjHoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjDoubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´Kwhj@oubj„)�”}”(hhh]”(j‰)�”}”(hŒ``dev`` DRM device ”h]”(j�)�”}”(hŒ``dev``”h]”jî)�”}”(hjeoh]”hŒdev”…”�”}”(hjgoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjcoubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´Kthj_oubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hj~oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jzoh´Kthj{oubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj_oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jzoh´Kthj\oubj‰)�”}”(hŒ ``lock`` lock to be initialized ”h]”(j�)�”}”(hŒ``lock``”h]”jî)�”}”(hjžoh]”hŒlock”…”�”}”(hj oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjœoubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´Kuhj˜oubj©)�”}”(hhh]”hÎ)�”}”(hŒlock to be initialized”h]”hŒlock to be initialized”…”�”}”(hj·oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j³oh´Kuhj´oubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj˜oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j³oh´Kuhj\oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj@oubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hjÙoh]”hŒReturn”…”�”}”(hjÛoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj×oubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´Kwhj@oubhÎ)�”}”(hŒ10 on success, or a negative errno code otherwise.”h]”hŒ10 on success, or a negative errno code otherwise.”…”�”}”(hjïoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´Kwhj@oubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjph]”hŒ Description”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjþoubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´Kyhj@oubhÎ)�”}”(hŒ‹This is a :c:type:`drm_device`-managed version of mutex_init(). The initialized lock is automatically destroyed on the final drm_dev_put().”h]”(hŒ This is a ”…”�”}”(hjph²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hj ph]”hŒ drm_device”…”�”}”(hj"ph²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjpubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KyhjpubhŒm-managed version of mutex_init(). The initialized lock is automatically destroyed on the final drm_dev_put().”…”�”}”(hjph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j=ph´Kyhj@oubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj˜Uh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ&drmm_alloc_ordered_workqueue (C macro)”Œc.drmm_alloc_ordered_workqueue”hNt”auh1j™hj˜Uh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒdrmm_alloc_ordered_workqueue”h]”j¶)�”}”(hŒdrmm_alloc_ordered_workqueue”h]”jß)�”}”(hŒdrmm_alloc_ordered_workqueue”h]”jå)�”}”(hjbph]”hŒdrmm_alloc_ordered_workqueue”…”�”}”(hjlph²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjhpubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjdph²hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K…ubah}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj`ph²hh³jph´K…ubah}”(h]”j[pah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jph´K…hj]ph²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj]ph²hh³jph´K…ubeh}”(h]”h ]”(júŒmacro”eh"]”h$]”h&]”j1júj2j˜pj3j˜pj4‰j5‰j6‰uh1jªh²hhj˜Uh³Nh´NubhÎ)�”}”(hŒ;``drmm_alloc_ordered_workqueue (dev, fmt, flags, args...)``”h]”jî)�”}”(hjžph]”hŒ7drmm_alloc_ordered_workqueue (dev, fmt, flags, args...)”…”�”}”(hj ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjœpubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K‡hj˜Uh²hubj+)�”}”(hŒ7:c:type:`drm_device` managed alloc_ordered_workqueue() ”h]”hÎ)�”}”(hŒ6:c:type:`drm_device` managed alloc_ordered_workqueue()”h]”(h)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hj¾ph]”hŒ drm_device”…”�”}”(hjÀph²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj¼pubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K…hj¸pubhŒ" managed alloc_ordered_workqueue()”…”�”}”(hj¸ph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÛph´K…hj´pubah}”(h]”h ]”h"]”h$]”h&]”uh1j +h³jÛph´K…hj˜Uh²hubj8)�”}”(hX¶**Parameters** ``dev`` DRM device ``fmt`` printf format for the name of the workqueue ``flags`` WQ_* flags (only WQ_FREEZABLE and WQ_MEM_RECLAIM are meaningful) ``args...`` args for **fmt** **Description** This is a :c:type:`drm_device`-managed version of alloc_ordered_workqueue(). The allocated workqueue is automatically destroyed on the final drm_dev_put(). **Return** workqueue on success, negative ERR_PTR otherwise.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjòph]”hŒ Parameters”…”�”}”(hjôph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjðpubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K‰hjìpubj„)�”}”(hhh]”(j‰)�”}”(hŒ``dev`` DRM device ”h]”(j�)�”}”(hŒ``dev``”h]”jî)�”}”(hjqh]”hŒdev”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K†hj qubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hj*qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j&qh´K†hj'qubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj qubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j&qh´K†hjqubj‰)�”}”(hŒ4``fmt`` printf format for the name of the workqueue ”h]”(j�)�”}”(hŒ``fmt``”h]”jî)�”}”(hjJqh]”hŒfmt”…”�”}”(hjLqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjHqubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K‡hjDqubj©)�”}”(hhh]”hÎ)�”}”(hŒ+printf format for the name of the workqueue”h]”hŒ+printf format for the name of the workqueue”…”�”}”(hjcqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j_qh´K‡hj`qubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjDqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j_qh´K‡hjqubj‰)�”}”(hŒK``flags`` WQ_* flags (only WQ_FREEZABLE and WQ_MEM_RECLAIM are meaningful) ”h]”(j�)�”}”(hŒ ``flags``”h]”jî)�”}”(hjƒqh]”hŒflags”…”�”}”(hj…qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj�qubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´Kˆhj}qubj©)�”}”(hhh]”hÎ)�”}”(hŒ@WQ_* flags (only WQ_FREEZABLE and WQ_MEM_RECLAIM are meaningful)”h]”hŒ@WQ_* flags (only WQ_FREEZABLE and WQ_MEM_RECLAIM are meaningful)”…”�”}”(hjœqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j˜qh´Kˆhj™qubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj}qubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j˜qh´Kˆhjqubj‰)�”}”(hŒ``args...`` args for **fmt** ”h]”(j�)�”}”(hŒ ``args...``”h]”jî)�”}”(hj¼qh]”hŒargs...”…”�”}”(hj¾qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjºqubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K‰hj¶qubj©)�”}”(hhh]”hÎ)�”}”(hŒargs for **fmt**”h]”(hŒ args for ”…”�”}”(hjÕqh²hh³Nh´NubjB)�”}”(hŒ**fmt**”h]”hŒfmt”…”�”}”(hjÝqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÕqubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÑqh´K‰hjÒqubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¶qubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÑqh´K‰hjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjìpubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjrh]”hŒ Description”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K‹hjìpubhÎ)�”}”(hŒ›This is a :c:type:`drm_device`-managed version of alloc_ordered_workqueue(). The allocated workqueue is automatically destroyed on the final drm_dev_put().”h]”(hŒ This is a ”…”�”}”(hjrh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_device`”h]”jî)�”}”(hj%rh]”hŒ drm_device”…”�”}”(hj'rh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj#rubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KŠhjrubhŒ}-managed version of alloc_ordered_workqueue(). The allocated workqueue is automatically destroyed on the final drm_dev_put().”…”�”}”(hjrh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jBrh´KŠhjìpubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hjOrh]”hŒReturn”…”�”}”(hjQrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjMrubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´K�hjìpubhÎ)�”}”(hŒ1workqueue on success, negative ERR_PTR otherwise.”h]”hŒ1workqueue on success, negative ERR_PTR otherwise.”…”�”}”(hjerh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:137: ./include/drm/drm_managed.h”h´KŽhjìpubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj˜Uh²hh³Nh´Nubeh}”(h]”j×ah ]”h"]”Œmanaged resources”ah$]”h&]”uh1hµhjÐh²hh³hÌh´K�ubeh}”(h]”jIah ]”h"]”Œdriver initialization”ah$]”h&]”uh1hµhh·h²hh³hÌh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ&Open/Close, File Operations and IOCTLs”h]”hŒ&Open/Close, File Operations and IOCTLs”…”�”}”(hjŒrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊjÿuh1hºhj‰rh²hh³hÌh´K�ubhŒtarget”“”)�”}”(hŒ.. _drm_driver_fops:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÊŒdrm-driver-fops”uh1jšrh´K�hj‰rh²hh³hÌubh¶)�”}”(hhh]”(h»)�”}”(hŒFile Operations”h]”hŒFile Operations”…”�”}”(hjªrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊjuh1hºhj§rh²hh³hÌh´K’ubhÎ)�”}”(hXDrivers must define the file operations structure that forms the DRM userspace API entry point, even though most of those operations are implemented in the DRM core. The resulting :c:type:`struct file_operations ` must be stored in the :c:type:`drm_driver.fops ` field. The mandatory functions are drm_open(), drm_read(), drm_ioctl() and drm_compat_ioctl() if CONFIG_COMPAT is enabled Note that drm_compat_ioctl will be NULL if CONFIG_COMPAT=n, so there's no need to sprinkle #ifdef into the code. Drivers which implement private ioctls that require 32/64 bit compatibility support must provide their own :c:type:`file_operations.compat_ioctl ` handler that processes private ioctls and calls drm_compat_ioctl() for core ioctls.”h]”(hŒ´Drivers must define the file operations structure that forms the DRM userspace API entry point, even though most of those operations are implemented in the DRM core. The resulting ”…”�”}”(hj¸rh²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct file_operations `”h]”jî)�”}”(hjÂrh]”hŒstruct file_operations”…”�”}”(hjÄrh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÀrubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œfile_operations”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:148: ./drivers/gpu/drm/drm_file.c”h´KHhj¸rubhŒ must be stored in the ”…”�”}”(hj¸rh²hh³Nh´Nubh)�”}”(hŒ&:c:type:`drm_driver.fops `”h]”jî)�”}”(hjærh]”hŒdrm_driver.fops”…”�”}”(hjèrh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjärubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_driver”uh1hh³jßrh´KHhj¸rubhXY field. The mandatory functions are drm_open(), drm_read(), drm_ioctl() and drm_compat_ioctl() if CONFIG_COMPAT is enabled Note that drm_compat_ioctl will be NULL if CONFIG_COMPAT=n, so there’s no need to sprinkle #ifdef into the code. Drivers which implement private ioctls that require 32/64 bit compatibility support must provide their own ”…”�”}”(hj¸rh²hh³Nh´Nubh)�”}”(hŒ8:c:type:`file_operations.compat_ioctl `”h]”jî)�”}”(hj sh]”hŒfile_operations.compat_ioctl”…”�”}”(hj sh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjsubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œfile_operations”uh1hh³jßrh´KHhj¸rubhŒT handler that processes private ioctls and calls drm_compat_ioctl() for core ioctls.”…”�”}”(hj¸rh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jßrh´KHhj§rh²hubhÎ)�”}”(hX_In addition drm_read() and drm_poll() provide support for DRM events. DRM events are a generic and extensible means to send asynchronous events to userspace through the file descriptor. They are used to send vblank event and page flip completions by the KMS API. But drivers can also use it for their own needs, e.g. to signal completion of rendering.”h]”hX_In addition drm_read() and drm_poll() provide support for DRM events. DRM events are a generic and extensible means to send asynchronous events to userspace through the file descriptor. They are used to send vblank event and page flip completions by the KMS API. But drivers can also use it for their own needs, e.g. to signal completion of rendering.”…”�”}”(hj0sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:148: ./drivers/gpu/drm/drm_file.c”h´KShj§rh²hubhÎ)�”}”(hŒrFor the driver-side event interface see drm_event_reserve_init() and drm_send_event() as the main starting points.”h]”hŒrFor the driver-side event interface see drm_event_reserve_init() and drm_send_event() as the main starting points.”…”�”}”(hj?sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:148: ./drivers/gpu/drm/drm_file.c”h´KYhj§rh²hubhÎ)�”}”(hŒ…The memory mapping implementation will vary depending on how the driver manages memory. For GEM-based drivers this is drm_gem_mmap().”h]”hŒ…The memory mapping implementation will vary depending on how the driver manages memory. For GEM-based drivers this is drm_gem_mmap().”…”�”}”(hjNsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:148: ./drivers/gpu/drm/drm_file.c”h´K\hj§rh²hubhÎ)�”}”(hŒŠNo other file operations are supported by the DRM userspace API. Overall the following is an example :c:type:`file_operations` structure::”h]”(hŒeNo other file operations are supported by the DRM userspace API. Overall the following is an example ”…”�”}”(hj]sh²hh³Nh´Nubh)�”}”(hŒ:c:type:`file_operations`”h]”jî)�”}”(hjgsh]”hŒfile_operations”…”�”}”(hjish²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjesubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œfile_operations”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:148: ./drivers/gpu/drm/drm_file.c”h´K_hj]subhŒ structure:”…”�”}”(hj]sh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j„sh´K_hj§rh²hubj)�”}”(hX8static const example_drm_fops = { .owner = THIS_MODULE, .open = drm_open, .release = drm_release, .unlocked_ioctl = drm_ioctl, .compat_ioctl = drm_compat_ioctl, // NULL if CONFIG_COMPAT=n .poll = drm_poll, .read = drm_read, .mmap = drm_gem_mmap, };”h]”hX8static const example_drm_fops = { .owner = THIS_MODULE, .open = drm_open, .release = drm_release, .unlocked_ioctl = drm_ioctl, .compat_ioctl = drm_compat_ioctl, // NULL if CONFIG_COMPAT=n .poll = drm_poll, .read = drm_read, .mmap = drm_gem_mmap, };”…”�”}”hj�ssbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:148: ./drivers/gpu/drm/drm_file.c”h´Kbhj§rh²hubhÎ)�”}”(hŒ¢For plain GEM based drivers there is the DEFINE_DRM_GEM_FOPS() macro, and for DMA based drivers there is the DEFINE_DRM_GEM_DMA_FOPS() macro to make this simpler.”h]”hŒ¢For plain GEM based drivers there is the DEFINE_DRM_GEM_FOPS() macro, and for DMA based drivers there is the DEFINE_DRM_GEM_DMA_FOPS() macro to make this simpler.”…”�”}”(hjžsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:148: ./drivers/gpu/drm/drm_file.c”h´Kmhj§rh²hubhÎ)�”}”(hŒ`The driver's :c:type:`file_operations` must be stored in :c:type:`drm_driver.fops `.”h]”(hŒThe driver’s ”…”�”}”(hj­sh²hh³Nh´Nubh)�”}”(hŒ:c:type:`file_operations`”h]”jî)�”}”(hj·sh]”hŒfile_operations”…”�”}”(hj¹sh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjµsubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œfile_operations”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:148: ./drivers/gpu/drm/drm_file.c”h´Kqhj­subhŒ must be stored in ”…”�”}”(hj­sh²hh³Nh´Nubh)�”}”(hŒ&:c:type:`drm_driver.fops `”h]”jî)�”}”(hjÛsh]”hŒdrm_driver.fops”…”�”}”(hjÝsh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÙsubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_driver”uh1hh³jÔsh´Kqhj­subhŒ.”…”�”}”(hj­sh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÔsh´Kqhj§rh²hubhÎ)�”}”(hŒ�For driver-private IOCTL handling see the more detailed discussion in :ref:`IOCTL support in the userland interfaces chapter`.”h]”(hŒFFor driver-private IOCTL handling see the more detailed discussion in ”…”�”}”(hjth²hh³Nh´Nubh)�”}”(hŒI:ref:`IOCTL support in the userland interfaces chapter`”h]”jf)�”}”(hj th]”hŒ0IOCTL support in the userland interfaces chapter”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”(jùŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jehj tubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jtŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj Œdrm_driver_ioctl”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:148: ./drivers/gpu/drm/drm_file.c”h´KshjtubhŒ.”…”�”}”(hjth²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j*th´Kshj§rh²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_minor (C struct)”Œ c.drm_minor”hNt”auh1j™hj§rh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ drm_minor”h]”j¶)�”}”(hŒstruct drm_minor”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjOth²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjKth²hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]th²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjKth²hh³j\th´Kubjß)�”}”(hŒ drm_minor”h]”jå)�”}”(hjIth]”hŒ drm_minor”…”�”}”(hjoth²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjktubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjKth²hh³j\th´Kubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjGth²hh³j\th´Kubah}”(h]”jAtah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j\th´KhjDth²hubj)�”}”(hhh]”hÎ)�”}”(hŒDRM device minor structure”h]”hŒDRM device minor structure”…”�”}”(hj‘th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KFhjŽth²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjDth²hh³j\th´Kubeh}”(h]”h ]”(júŒstruct”eh"]”h$]”h&]”j1júj2j©tj3j©tj4‰j5‰j6‰uh1jªh²hhj§rh³jCth´Nubj8)�”}”(hŒ8**Definition**:: struct drm_minor { }; **Members**”h]”(hÎ)�”}”(hŒ**Definition**::”h]”(jB)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjµth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj±tubhŒ:”…”�”}”(hj±th²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KJhj­tubj)�”}”(hŒstruct drm_minor { };”h]”hŒstruct drm_minor { };”…”�”}”hjÎtsbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KLhj­tubhÎ)�”}”(hŒ **Members**”h]”jB)�”}”(hjßth]”hŒMembers”…”�”}”(hjáth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÝtubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KOhj­tubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³jCth´NubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjþth]”hŒ Description”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjütubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KRhj§rh²hubhÎ)�”}”(hXeThis structure represents a DRM minor number for device nodes in /dev. Entirely opaque to drivers and should never be inspected directly by drivers. Drivers instead should only interact with :c:type:`struct drm_file ` and of course :c:type:`struct drm_device `, which is also where driver-private data and resources can be attached to.”h]”(hŒ¿This structure represents a DRM minor number for device nodes in /dev. Entirely opaque to drivers and should never be inspected directly by drivers. Drivers instead should only interact with ”…”�”}”(hjuh²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct drm_file `”h]”jî)�”}”(hjuh]”hŒstruct drm_file”…”�”}”(hj uh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjuubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_file”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KGhjuubhŒ and of course ”…”�”}”(hjuh²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct drm_device `”h]”jî)�”}”(hjBuh]”hŒstruct drm_device”…”�”}”(hjDuh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj@uubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³j;uh´KGhjuubhŒK, which is also where driver-private data and resources can be attached to.”…”�”}”(hjuh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j;uh´KGhj§rh²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_pending_event (C struct)”Œc.drm_pending_event”hNt”auh1j™hj§rh²hh³jCth´Nubj«)�”}”(hhh]”(j°)�”}”(hŒdrm_pending_event”h]”j¶)�”}”(hŒstruct drm_pending_event”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj‚uh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj~uh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KPubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�uh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj~uh²hh³j�uh´KPubjß)�”}”(hŒdrm_pending_event”h]”jå)�”}”(hj|uh]”hŒdrm_pending_event”…”�”}”(hj¢uh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjžuubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj~uh²hh³j�uh´KPubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjzuh²hh³j�uh´KPubah}”(h]”juuah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j�uh´KPhjwuh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ%Event queued up for userspace to read”h]”hŒ%Event queued up for userspace to read”…”�”}”(hjÄuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KZhjÁuh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjwuh²hh³j�uh´KPubeh}”(h]”h ]”(júŒstruct”eh"]”h$]”h&]”j1júj2jÜuj3jÜuj4‰j5‰j6‰uh1jªh²hhj§rh³jCth´Nubj8)�”}”(hXu**Definition**:: struct drm_pending_event { struct completion *completion; void (*completion_release)(struct completion *completion); struct drm_event *event; struct dma_fence *fence; struct drm_file *file_priv; struct list_head link; struct list_head pending_link; }; **Members** ``completion`` Optional pointer to a kernel internal completion signalled when drm_send_event() is called, useful to internally synchronize with nonblocking operations. ``completion_release`` Optional callback currently only used by the atomic modeset helpers to clean up the reference count for the structure **completion** is stored in. ``event`` Pointer to the actual event that should be sent to userspace to be read using drm_read(). Can be optional, since nowadays events are also used to signal kernel internal threads with **completion** or DMA transactions using **fence**. ``fence`` Optional DMA fence to unblock other hardware transactions which depend upon the nonblocking DRM operation this event represents. ``file_priv`` :c:type:`struct drm_file ` where **event** should be delivered to. Only set when **event** is set. ``link`` Double-linked list to keep track of this event. Can be used by the driver up to the point when it calls drm_send_event(), after that this list entry is owned by the core for its own book-keeping. ``pending_link`` Entry on :c:type:`drm_file.pending_event_list `, to keep track of all pending events for **file_priv**, to allow correct unwinding of them when userspace closes the file before the event is delivered.”h]”(hÎ)�”}”(hŒ**Definition**::”h]”(jB)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjèuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjäuubhŒ:”…”�”}”(hjäuh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K^hjàuubj)�”}”(hXstruct drm_pending_event { struct completion *completion; void (*completion_release)(struct completion *completion); struct drm_event *event; struct dma_fence *fence; struct drm_file *file_priv; struct list_head link; struct list_head pending_link; };”h]”hXstruct drm_pending_event { struct completion *completion; void (*completion_release)(struct completion *completion); struct drm_event *event; struct dma_fence *fence; struct drm_file *file_priv; struct list_head link; struct list_head pending_link; };”…”�”}”hjvsbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K`hjàuubhÎ)�”}”(hŒ **Members**”h]”jB)�”}”(hjvh]”hŒMembers”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Kjhjàuubj„)�”}”(hhh]”(j‰)�”}”(hŒ©``completion`` Optional pointer to a kernel internal completion signalled when drm_send_event() is called, useful to internally synchronize with nonblocking operations. ”h]”(j�)�”}”(hŒ``completion``”h]”jî)�”}”(hj1vh]”hŒ completion”…”�”}”(hj3vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj/vubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Kehj+vubj©)�”}”(hhh]”hÎ)�”}”(hŒ™Optional pointer to a kernel internal completion signalled when drm_send_event() is called, useful to internally synchronize with nonblocking operations.”h]”hŒ™Optional pointer to a kernel internal completion signalled when drm_send_event() is called, useful to internally synchronize with nonblocking operations.”…”�”}”(hjJvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KchjGvubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj+vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jFvh´Kehj(vubj‰)�”}”(hŒª``completion_release`` Optional callback currently only used by the atomic modeset helpers to clean up the reference count for the structure **completion** is stored in. ”h]”(j�)�”}”(hŒ``completion_release``”h]”jî)�”}”(hjkvh]”hŒcompletion_release”…”�”}”(hjmvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjivubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Knhjevubj©)�”}”(hhh]”hÎ)�”}”(hŒ’Optional callback currently only used by the atomic modeset helpers to clean up the reference count for the structure **completion** is stored in.”h]”(hŒvOptional callback currently only used by the atomic modeset helpers to clean up the reference count for the structure ”…”�”}”(hj„vh²hh³Nh´NubjB)�”}”(hŒ**completion**”h]”hŒ completion”…”�”}”(hjŒvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj„vubhŒ is stored in.”…”�”}”(hj„vh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Klhj�vubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjevubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j€vh´Knhj(vubj‰)�”}”(hŒô``event`` Pointer to the actual event that should be sent to userspace to be read using drm_read(). Can be optional, since nowadays events are also used to signal kernel internal threads with **completion** or DMA transactions using **fence**. ”h]”(j�)�”}”(hŒ ``event``”h]”jî)�”}”(hj·vh]”hŒevent”…”�”}”(hj¹vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjµvubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Kxhj±vubj©)�”}”(hhh]”hÎ)�”}”(hŒéPointer to the actual event that should be sent to userspace to be read using drm_read(). Can be optional, since nowadays events are also used to signal kernel internal threads with **completion** or DMA transactions using **fence**.”h]”(hŒ¶Pointer to the actual event that should be sent to userspace to be read using drm_read(). Can be optional, since nowadays events are also used to signal kernel internal threads with ”…”�”}”(hjÐvh²hh³Nh´NubjB)�”}”(hŒ**completion**”h]”hŒ completion”…”�”}”(hjØvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÐvubhŒ or DMA transactions using ”…”�”}”(hjÐvh²hh³Nh´NubjB)�”}”(hŒ **fence**”h]”hŒfence”…”�”}”(hjêvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÐvubhŒ.”…”�”}”(hjÐvh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KuhjÍvubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj±vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÌvh´Kxhj(vubj‰)�”}”(hŒ‹``fence`` Optional DMA fence to unblock other hardware transactions which depend upon the nonblocking DRM operation this event represents. ”h]”(j�)�”}”(hŒ ``fence``”h]”jî)�”}”(hjwh]”hŒfence”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K€hjwubj©)�”}”(hhh]”hÎ)�”}”(hŒ€Optional DMA fence to unblock other hardware transactions which depend upon the nonblocking DRM operation this event represents.”h]”hŒ€Optional DMA fence to unblock other hardware transactions which depend upon the nonblocking DRM operation this event represents.”…”�”}”(hj.wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Khj+wubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j*wh´K€hj(vubj‰)�”}”(hŒ{``file_priv`` :c:type:`struct drm_file ` where **event** should be delivered to. Only set when **event** is set. ”h]”(j�)�”}”(hŒ ``file_priv``”h]”jî)�”}”(hjOwh]”hŒ file_priv”…”�”}”(hjQwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjMwubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KˆhjIwubj©)�”}”(hhh]”hÎ)�”}”(hŒl:c:type:`struct drm_file ` where **event** should be delivered to. Only set when **event** is set.”h]”(h)�”}”(hŒ$:c:type:`struct drm_file `”h]”jî)�”}”(hjnwh]”hŒstruct drm_file”…”�”}”(hjpwh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjlwubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_file”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K‡hjhwubhŒ where ”…”�”}”(hjhwh²hh³Nh´NubjB)�”}”(hŒ **event**”h]”hŒevent”…”�”}”(hj�wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjhwubhŒ' should be delivered to. Only set when ”…”�”}”(hjhwh²hh³Nh´NubjB)�”}”(hŒ **event**”h]”hŒevent”…”�”}”(hj¢wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjhwubhŒ is set.”…”�”}”(hjhwh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j‹wh´K‡hjewubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjIwubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jdwh´Kˆhj(vubj‰)�”}”(hŒÍ``link`` Double-linked list to keep track of this event. Can be used by the driver up to the point when it calls drm_send_event(), after that this list entry is owned by the core for its own book-keeping. ”h]”(j�)�”}”(hŒ``link``”h]”jî)�”}”(hjÌwh]”hŒlink”…”�”}”(hjÎwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÊwubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K‘hjÆwubj©)�”}”(hhh]”hÎ)�”}”(hŒÃDouble-linked list to keep track of this event. Can be used by the driver up to the point when it calls drm_send_event(), after that this list entry is owned by the core for its own book-keeping.”h]”hŒÃDouble-linked list to keep track of this event. Can be used by the driver up to the point when it calls drm_send_event(), after that this list entry is owned by the core for its own book-keeping.”…”�”}”(hjåwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K�hjâwubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÆwubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jáwh´K‘hj(vubj‰)�”}”(hŒã``pending_link`` Entry on :c:type:`drm_file.pending_event_list `, to keep track of all pending events for **file_priv**, to allow correct unwinding of them when userspace closes the file before the event is delivered.”h]”(j�)�”}”(hŒ``pending_link``”h]”jî)�”}”(hjxh]”hŒ pending_link”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K™hjxubj©)�”}”(hhh]”hÎ)�”}”(hŒÒEntry on :c:type:`drm_file.pending_event_list `, to keep track of all pending events for **file_priv**, to allow correct unwinding of them when userspace closes the file before the event is delivered.”h]”(hŒ Entry on ”…”�”}”(hjxh²hh³Nh´Nubh)�”}”(hŒ0:c:type:`drm_file.pending_event_list `”h]”jî)�”}”(hj)xh]”hŒdrm_file.pending_event_list”…”�”}”(hj+xh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj'xubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_file”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K˜hjxubhŒ*, to keep track of all pending events for ”…”�”}”(hjxh²hh³Nh´NubjB)�”}”(hŒ **file_priv**”h]”hŒ file_priv”…”�”}”(hjKxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjxubhŒb, to allow correct unwinding of them when userspace closes the file before the event is delivered.”…”�”}”(hjxh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jFxh´K˜hjxubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jxh´K™hj(vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjàuubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³jCth´NubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj~xh]”hŒ Description”…”�”}”(hj€xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj|xubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K�hj§rh²hubhÎ)�”}”(hXThis represents a DRM event. Drivers can use this as a generic completion mechanism, which supports kernel-internal :c:type:`struct completion `, :c:type:`struct dma_fence ` and also the DRM-specific :c:type:`struct drm_event ` delivery mechanism.”h]”(hŒtThis represents a DRM event. Drivers can use this as a generic completion mechanism, which supports kernel-internal ”…”�”}”(hj”xh²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct completion `”h]”jî)�”}”(hjžxh]”hŒstruct completion”…”�”}”(hj xh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjœxubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ completion”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K[hj”xubhŒ, ”…”�”}”(hj”xh²hh³Nh´Nubh)�”}”(hŒ&:c:type:`struct dma_fence `”h]”jî)�”}”(hjÂxh]”hŒstruct dma_fence”…”�”}”(hjÄxh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÀxubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ dma_fence”uh1hh³j»xh´K[hj”xubhŒ and also the DRM-specific ”…”�”}”(hj”xh²hh³Nh´Nubh)�”}”(hŒ&:c:type:`struct drm_event `”h]”jî)�”}”(hjåxh]”hŒstruct drm_event”…”�”}”(hjçxh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjãxubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_event”uh1hh³j»xh´K[hj”xubhŒ delivery mechanism.”…”�”}”(hj”xh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j»xh´K[hj§rh²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_file (C struct)”Œ c.drm_file”hNt”auh1j™hj§rh²hh³jCth´Nubj«)�”}”(hhh]”(j°)�”}”(hŒdrm_file”h]”j¶)�”}”(hŒstruct drm_file”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj%yh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj!yh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KbubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3yh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj!yh²hh³j2yh´Kbubjß)�”}”(hŒdrm_file”h]”jå)�”}”(hjyh]”hŒdrm_file”…”�”}”(hjEyh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjAyubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj!yh²hh³j2yh´Kbubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjyh²hh³j2yh´Kbubah}”(h]”jyah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j2yh´Kbhjyh²hubj)�”}”(hhh]”hÎ)�”}”(hŒDRM file private data”h]”hŒDRM file private data”…”�”}”(hjgyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K¡hjdyh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjyh²hh³j2yh´Kbubeh}”(h]”h ]”(júŒstruct”eh"]”h$]”h&]”j1júj2jyj3jyj4‰j5‰j6‰uh1jªh²hhj§rh³jCth´Nubj8)�”}”(hX®**Definition**:: struct drm_file { bool authenticated; bool stereo_allowed; bool universal_planes; bool atomic; bool aspect_ratio_allowed; bool writeback_connectors; bool plane_color_pipeline; bool was_master; bool is_master; bool supports_virtualized_cursor_plane; struct drm_master *master; spinlock_t master_lookup_lock; struct pid *pid; u64 client_id; drm_magic_t magic; struct list_head lhead; struct drm_minor *minor; struct idr object_idr; spinlock_t table_lock; struct xarray syncobj_xa; struct file *filp; void *driver_priv; struct list_head fbs; struct mutex fbs_lock; struct list_head blobs; wait_queue_head_t event_wait; struct list_head pending_event_list; struct list_head event_list; int event_space; struct mutex event_read_lock; struct drm_prime_file_private prime; const char *client_name; struct mutex client_name_lock; struct dentry *debugfs_client; }; **Members** ``authenticated`` Whether the client is allowed to submit rendering, which for legacy nodes means it must be authenticated. See also the :ref:`section on primary nodes and authentication `. ``stereo_allowed`` True when the client has asked us to expose stereo 3D mode flags. ``universal_planes`` True if client understands CRTC primary planes and cursor planes in the plane list. Automatically set when **atomic** is set. ``atomic`` True if client understands atomic properties. ``aspect_ratio_allowed`` True, if client can handle picture aspect ratios, and has requested to pass this information along with the mode. ``writeback_connectors`` True if client understands writeback connectors ``plane_color_pipeline`` True if client understands plane color pipelines ``was_master`` This client has or had, master capability. Protected by struct :c:type:`drm_device.master_mutex `. This is used to ensure that CAP_SYS_ADMIN is not enforced, if the client is or was master in the past. ``is_master`` This client is the creator of **master**. Protected by struct :c:type:`drm_device.master_mutex `. See also the :ref:`section on primary nodes and authentication `. ``supports_virtualized_cursor_plane`` This client is capable of handling the cursor plane with the restrictions imposed on it by the virtualized drivers. This implies that the cursor plane has to behave like a cursor i.e. track cursor movement. It also requires setting of the hotspot properties by the client on the cursor plane. ``master`` Master this node is currently associated with. Protected by struct :c:type:`drm_device.master_mutex `, and serialized by **master_lookup_lock**. Only relevant if drm_is_primary_client() returns true. Note that this only matches :c:type:`drm_device.master ` if the master is the currently active one. To update **master**, both :c:type:`drm_device.master_mutex ` and **master_lookup_lock** need to be held, therefore holding either of them is safe and enough for the read side. When dereferencing this pointer, either hold struct :c:type:`drm_device.master_mutex ` for the duration of the pointer's use, or use drm_file_get_master() if struct :c:type:`drm_device.master_mutex ` is not currently held and there is no other need to hold it. This prevents **master** from being freed during use. See also **authentication** and **is_master** and the :ref:`section on primary nodes and authentication `. ``master_lookup_lock`` Serializes **master**. ``pid`` Process that is using this file. Must only be dereferenced under a rcu_read_lock or equivalent. Updates are guarded with dev->filelist_mutex and reference must be dropped after a RCU grace period to accommodate lockless readers. ``client_id`` A unique id for fdinfo ``magic`` Authentication magic, see **authenticated**. ``lhead`` List of all open files of a DRM device, linked into :c:type:`drm_device.filelist `. Protected by :c:type:`drm_device.filelist_mutex `. ``minor`` :c:type:`struct drm_minor ` for this file. ``object_idr`` Mapping of mm object handles to object pointers. Used by the GEM subsystem. Protected by **table_lock**. Note that allocated entries might be NULL as a transient state when creating or deleting a handle. ``table_lock`` Protects **object_idr**. ``syncobj_xa`` Mapping of sync object handles to object pointers. ``filp`` Pointer to the core file structure. ``driver_priv`` Optional pointer for driver private data. Can be allocated in :c:type:`drm_driver.open ` and should be freed in :c:type:`drm_driver.postclose `. ``fbs`` List of :c:type:`struct drm_framebuffer ` associated with this file, using the :c:type:`drm_framebuffer.filp_head ` entry. Protected by **fbs_lock**. Note that the **fbs** list holds a reference on the framebuffer object to prevent it from untimely disappearing. ``fbs_lock`` Protects **fbs**. ``blobs`` User-created blob properties; this retains a reference on the property. Protected by **drm_mode_config.blob_lock**; ``event_wait`` Waitqueue for new events added to **event_list**. ``pending_event_list`` List of pending :c:type:`struct drm_pending_event `, used to clean up pending events in case this file gets closed before the event is signalled. Uses the :c:type:`drm_pending_event.pending_link ` entry. Protect by :c:type:`drm_device.event_lock `. ``event_list`` List of :c:type:`struct drm_pending_event `, ready for delivery to userspace through drm_read(). Uses the :c:type:`drm_pending_event.link ` entry. Protect by :c:type:`drm_device.event_lock `. ``event_space`` Available event space to prevent userspace from exhausting kernel memory. Currently limited to the fairly arbitrary value of 4KB. ``event_read_lock`` Serializes drm_read(). ``prime`` Per-file buffer caches used by the PRIME buffer sharing code. ``client_name`` Userspace-provided name; useful for accounting and debugging. ``client_name_lock`` Protects **client_name**. ``debugfs_client`` debugfs directory for each client under a drm node.”h]”(hÎ)�”}”(hŒ**Definition**::”h]”(jB)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj‹yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj‡yubhŒ:”…”�”}”(hj‡yh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K¥hjƒyubj)�”}”(hXßstruct drm_file { bool authenticated; bool stereo_allowed; bool universal_planes; bool atomic; bool aspect_ratio_allowed; bool writeback_connectors; bool plane_color_pipeline; bool was_master; bool is_master; bool supports_virtualized_cursor_plane; struct drm_master *master; spinlock_t master_lookup_lock; struct pid *pid; u64 client_id; drm_magic_t magic; struct list_head lhead; struct drm_minor *minor; struct idr object_idr; spinlock_t table_lock; struct xarray syncobj_xa; struct file *filp; void *driver_priv; struct list_head fbs; struct mutex fbs_lock; struct list_head blobs; wait_queue_head_t event_wait; struct list_head pending_event_list; struct list_head event_list; int event_space; struct mutex event_read_lock; struct drm_prime_file_private prime; const char *client_name; struct mutex client_name_lock; struct dentry *debugfs_client; };”h]”hXßstruct drm_file { bool authenticated; bool stereo_allowed; bool universal_planes; bool atomic; bool aspect_ratio_allowed; bool writeback_connectors; bool plane_color_pipeline; bool was_master; bool is_master; bool supports_virtualized_cursor_plane; struct drm_master *master; spinlock_t master_lookup_lock; struct pid *pid; u64 client_id; drm_magic_t magic; struct list_head lhead; struct drm_minor *minor; struct idr object_idr; spinlock_t table_lock; struct xarray syncobj_xa; struct file *filp; void *driver_priv; struct list_head fbs; struct mutex fbs_lock; struct list_head blobs; wait_queue_head_t event_wait; struct list_head pending_event_list; struct list_head event_list; int event_space; struct mutex event_read_lock; struct drm_prime_file_private prime; const char *client_name; struct mutex client_name_lock; struct dentry *debugfs_client; };”…”�”}”hj¤ysbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K§hjƒyubhÎ)�”}”(hŒ **Members**”h]”jB)�”}”(hjµyh]”hŒMembers”…”�”}”(hj·yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj³yubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KÌhjƒyubj„)�”}”(hhh]”(j‰)�”}”(hŒÑ``authenticated`` Whether the client is allowed to submit rendering, which for legacy nodes means it must be authenticated. See also the :ref:`section on primary nodes and authentication `. ”h]”(j�)�”}”(hŒ``authenticated``”h]”jî)�”}”(hjÔyh]”hŒ authenticated”…”�”}”(hjÖyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÒyubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K¬hjÎyubj©)�”}”(hhh]”(hÎ)�”}”(hŒiWhether the client is allowed to submit rendering, which for legacy nodes means it must be authenticated.”h]”hŒiWhether the client is allowed to submit rendering, which for legacy nodes means it must be authenticated.”…”�”}”(hjíyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K¨hjêyubhÎ)�”}”(hŒSSee also the :ref:`section on primary nodes and authentication `.”h]”(hŒ See also the ”…”�”}”(hjüyh²hh³Nh´Nubh)�”}”(hŒE:ref:`section on primary nodes and authentication `”h]”jf)�”}”(hjzh]”hŒ+section on primary nodes and authentication”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”(jùŒstd”Œstd-ref”eh"]”h$•]”h&]”uh1jehjzubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jzŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj Œdrm_primary_node”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K«hjüyubhŒ.”…”�”}”(hjüyh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j$zh´K«hjêyubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÎyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jéyh´K¬hjËyubj‰)�”}”(hŒU``stereo_allowed`` True when the client has asked us to expose stereo 3D mode flags. ”h]”(j�)�”}”(hŒ``stereo_allowed``”h]”jî)�”}”(hjAzh]”hŒstereo_allowed”…”�”}”(hjCzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj?zubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K³hj;zubj©)�”}”(hhh]”hÎ)�”}”(hŒATrue when the client has asked us to expose stereo 3D mode flags.”h]”hŒATrue when the client has asked us to expose stereo 3D mode flags.”…”�”}”(hjZzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jVzh´K³hjWzubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj;zubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jVzh´K³hjËyubj‰)�”}”(hŒ“``universal_planes`` True if client understands CRTC primary planes and cursor planes in the plane list. Automatically set when **atomic** is set. ”h]”(j�)�”}”(hŒ``universal_planes``”h]”jî)�”}”(hjzzh]”hŒuniversal_planes”…”�”}”(hj|zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjxzubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K»hjtzubj©)�”}”(hhh]”hÎ)�”}”(hŒ}True if client understands CRTC primary planes and cursor planes in the plane list. Automatically set when **atomic** is set.”h]”(hŒkTrue if client understands CRTC primary planes and cursor planes in the plane list. Automatically set when ”…”�”}”(hj“zh²hh³Nh´NubjB)�”}”(hŒ **atomic**”h]”hŒatomic”…”�”}”(hj›zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj“zubhŒ is set.”…”�”}”(hj“zh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Kºhj�zubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjtzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j�zh´K»hjËyubj‰)�”}”(hŒ9``atomic`` True if client understands atomic properties. ”h]”(j�)�”}”(hŒ ``atomic``”h]”jî)�”}”(hjÆzh]”hŒatomic”…”�”}”(hjÈzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÄzubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KÁhjÀzubj©)�”}”(hhh]”hÎ)�”}”(hŒ-True if client understands atomic properties.”h]”hŒ-True if client understands atomic properties.”…”�”}”(hjßzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÛzh´KÁhjÜzubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÀzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÛzh´KÁhjËyubj‰)�”}”(hŒ‹``aspect_ratio_allowed`` True, if client can handle picture aspect ratios, and has requested to pass this information along with the mode. ”h]”(j�)�”}”(hŒ``aspect_ratio_allowed``”h]”jî)�”}”(hjÿzh]”hŒaspect_ratio_allowed”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjýzubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KÆhjùzubj©)�”}”(hhh]”hÎ)�”}”(hŒqTrue, if client can handle picture aspect ratios, and has requested to pass this information along with the mode.”h]”hŒqTrue, if client can handle picture aspect ratios, and has requested to pass this information along with the mode.”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KÅhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjùzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j{h´KÆhjËyubj‰)�”}”(hŒI``writeback_connectors`` True if client understands writeback connectors ”h]”(j�)�”}”(hŒ``writeback_connectors``”h]”jî)�”}”(hj9{h]”hŒwriteback_connectors”…”�”}”(hj;{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj7{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KÍhj3{ubj©)�”}”(hhh]”hÎ)�”}”(hŒ/True if client understands writeback connectors”h]”hŒ/True if client understands writeback connectors”…”�”}”(hjR{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jN{h´KÍhjO{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj3{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jN{h´KÍhjËyubj‰)�”}”(hŒJ``plane_color_pipeline`` True if client understands plane color pipelines ”h]”(j�)�”}”(hŒ``plane_color_pipeline``”h]”jî)�”}”(hjr{h]”hŒplane_color_pipeline”…”�”}”(hjt{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjp{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KÔhjl{ubj©)�”}”(hhh]”hÎ)�”}”(hŒ0True if client understands plane color pipelines”h]”hŒ0True if client understands plane color pipelines”…”�”}”(hj‹{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j‡{h´KÔhjˆ{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjl{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j‡{h´KÔhjËyubj‰)�”}”(hŒæ``was_master`` This client has or had, master capability. Protected by struct :c:type:`drm_device.master_mutex `. This is used to ensure that CAP_SYS_ADMIN is not enforced, if the client is or was master in the past. ”h]”(j�)�”}”(hŒ``was_master``”h]”jî)�”}”(hj«{h]”hŒ was_master”…”�”}”(hj­{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj©{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Kßhj¥{ubj©)�”}”(hhh]”(hÎ)�”}”(hŒnThis client has or had, master capability. Protected by struct :c:type:`drm_device.master_mutex `.”h]”(hŒ?This client has or had, master capability. Protected by struct ”…”�”}”(hjÄ{h²hh³Nh´Nubh)�”}”(hŒ.:c:type:`drm_device.master_mutex `”h]”jî)�”}”(hjÎ{h]”hŒdrm_device.master_mutex”…”�”}”(hjÐ{h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÌ{ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KÛhjÄ{ubhŒ.”…”�”}”(hjÄ{h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jë{h´KÛhjÁ{ubhÎ)�”}”(hŒfThis is used to ensure that CAP_SYS_ADMIN is not enforced, if the client is or was master in the past.”h]”hŒfThis is used to ensure that CAP_SYS_ADMIN is not enforced, if the client is or was master in the past.”…”�”}”(hjö{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KÞhjÁ{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¥{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÀ{h´KßhjËyubj‰)�”}”(hŒÑ``is_master`` This client is the creator of **master**. Protected by struct :c:type:`drm_device.master_mutex `. See also the :ref:`section on primary nodes and authentication `. ”h]”(j�)�”}”(hŒ ``is_master``”h]”jî)�”}”(hj|h]”hŒ is_master”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Kêhj|ubj©)�”}”(hhh]”(hÎ)�”}”(hŒmThis client is the creator of **master**. Protected by struct :c:type:`drm_device.master_mutex `.”h]”(hŒThis client is the creator of ”…”�”}”(hj0|h²hh³Nh´NubjB)�”}”(hŒ **master**”h]”hŒmaster”…”�”}”(hj8|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj0|ubhŒ. Protected by struct ”…”�”}”(hj0|h²hh³Nh´Nubh)�”}”(hŒ.:c:type:`drm_device.master_mutex `”h]”jî)�”}”(hjL|h]”hŒdrm_device.master_mutex”…”�”}”(hjN|h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjJ|ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Kæhj0|ubhŒ.”…”�”}”(hj0|h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ji|h´Kæhj-|ubhÎ)�”}”(hŒSSee also the :ref:`section on primary nodes and authentication `.”h]”(hŒ See also the ”…”�”}”(hjt|h²hh³Nh´Nubh)�”}”(hŒE:ref:`section on primary nodes and authentication `”h]”jf)�”}”(hj~|h]”hŒ+section on primary nodes and authentication”…”�”}”(hj€|h²hh³Nh´Nubah}”(h]”h ]”(jùŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jehj||ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŠ|Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj Œdrm_primary_node”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Kéhjt|ubhŒ.”…”�”}”(hjt|h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jœ|h´Kéhj-|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j,|h´KêhjËyubj‰)�”}”(hXL``supports_virtualized_cursor_plane`` This client is capable of handling the cursor plane with the restrictions imposed on it by the virtualized drivers. This implies that the cursor plane has to behave like a cursor i.e. track cursor movement. It also requires setting of the hotspot properties by the client on the cursor plane. ”h]”(j�)�”}”(hŒ%``supports_virtualized_cursor_plane``”h]”jî)�”}”(hj¹|h]”hŒ!supports_virtualized_cursor_plane”…”�”}”(hj»|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj·|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Köhj³|ubj©)�”}”(hhh]”(hÎ)�”}”(hŒsThis client is capable of handling the cursor plane with the restrictions imposed on it by the virtualized drivers.”h]”hŒsThis client is capable of handling the cursor plane with the restrictions imposed on it by the virtualized drivers.”…”�”}”(hjÒ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KñhjÏ|ubhÎ)�”}”(hŒ°This implies that the cursor plane has to behave like a cursor i.e. track cursor movement. It also requires setting of the hotspot properties by the client on the cursor plane.”h]”hŒ°This implies that the cursor plane has to behave like a cursor i.e. track cursor movement. It also requires setting of the hotspot properties by the client on the cursor plane.”…”�”}”(hjá|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´KôhjÏ|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj³|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÎ|h´KöhjËyubj‰)�”}”(hXà``master`` Master this node is currently associated with. Protected by struct :c:type:`drm_device.master_mutex `, and serialized by **master_lookup_lock**. Only relevant if drm_is_primary_client() returns true. Note that this only matches :c:type:`drm_device.master ` if the master is the currently active one. To update **master**, both :c:type:`drm_device.master_mutex ` and **master_lookup_lock** need to be held, therefore holding either of them is safe and enough for the read side. When dereferencing this pointer, either hold struct :c:type:`drm_device.master_mutex ` for the duration of the pointer's use, or use drm_file_get_master() if struct :c:type:`drm_device.master_mutex ` is not currently held and there is no other need to hold it. This prevents **master** from being freed during use. See also **authentication** and **is_master** and the :ref:`section on primary nodes and authentication `. ”h]”(j�)�”}”(hŒ ``master``”h]”jî)�”}”(hj}h]”hŒmaster”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mhjü|ubj©)�”}”(hhh]”(hÎ)�”}”(hŒœMaster this node is currently associated with. Protected by struct :c:type:`drm_device.master_mutex `, and serialized by **master_lookup_lock**.”h]”(hŒCMaster this node is currently associated with. Protected by struct ”…”�”}”(hj}h²hh³Nh´Nubh)�”}”(hŒ.:c:type:`drm_device.master_mutex `”h]”jî)�”}”(hj%}h]”hŒdrm_device.master_mutex”…”�”}”(hj'}h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj#}ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Kýhj}ubhŒ, and serialized by ”…”�”}”(hj}h²hh³Nh´NubjB)�”}”(hŒ**master_lookup_lock**”h]”hŒmaster_lookup_lock”…”�”}”(hjG}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj}ubhŒ.”…”�”}”(hj}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jB}h´Kýhj}ubhÎ)�”}”(hŒ¦Only relevant if drm_is_primary_client() returns true. Note that this only matches :c:type:`drm_device.master ` if the master is the currently active one.”h]”(hŒSOnly relevant if drm_is_primary_client() returns true. Note that this only matches ”…”�”}”(hj_}h²hh³Nh´Nubh)�”}”(hŒ(:c:type:`drm_device.master `”h]”jî)�”}”(hji}h]”hŒdrm_device.master”…”�”}”(hjk}h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjg}ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mhj_}ubhŒ+ if the master is the currently active one.”…”�”}”(hj_}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j†}h´Mhj}ubhÎ)�”}”(hŒ¼To update **master**, both :c:type:`drm_device.master_mutex ` and **master_lookup_lock** need to be held, therefore holding either of them is safe and enough for the read side.”h]”(hŒ To update ”…”�”}”(hj‘}h²hh³Nh´NubjB)�”}”(hŒ **master**”h]”hŒmaster”…”�”}”(hj™}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj‘}ubhŒ, both ”…”�”}”(hj‘}h²hh³Nh´Nubh)�”}”(hŒ.:c:type:`drm_device.master_mutex `”h]”jî)�”}”(hj­}h]”hŒdrm_device.master_mutex”…”�”}”(hj¯}h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj«}ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mhj‘}ubhŒ and ”…”�”}”(hj‘}h²hh³Nh´NubjB)�”}”(hŒ**master_lookup_lock**”h]”hŒmaster_lookup_lock”…”�”}”(hjÏ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj‘}ubhŒX need to be held, therefore holding either of them is safe and enough for the read side.”…”�”}”(hj‘}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÊ}h´Mhj}ubhÎ)�”}”(hXRWhen dereferencing this pointer, either hold struct :c:type:`drm_device.master_mutex ` for the duration of the pointer's use, or use drm_file_get_master() if struct :c:type:`drm_device.master_mutex ` is not currently held and there is no other need to hold it. This prevents **master** from being freed during use.”h]”(hŒ4When dereferencing this pointer, either hold struct ”…”�”}”(hjç}h²hh³Nh´Nubh)�”}”(hŒ.:c:type:`drm_device.master_mutex `”h]”jî)�”}”(hjñ}h]”hŒdrm_device.master_mutex”…”�”}”(hjó}h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjï}ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mhjç}ubhŒQ for the duration of the pointer’s use, or use drm_file_get_master() if struct ”…”�”}”(hjç}h²hh³Nh´Nubh)�”}”(hŒ.:c:type:`drm_device.master_mutex `”h]”jî)�”}”(hj~h]”hŒdrm_device.master_mutex”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj~ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³j~h´Mhjç}ubhŒL is not currently held and there is no other need to hold it. This prevents ”…”�”}”(hjç}h²hh³Nh´NubjB)�”}”(hŒ **master**”h]”hŒmaster”…”�”}”(hj6~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjç}ubhŒ from being freed during use.”…”�”}”(hjç}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j~h´Mhj}ubhÎ)�”}”(hŒ|See also **authentication** and **is_master** and the :ref:`section on primary nodes and authentication `.”h]”(hŒ See also ”…”�”}”(hjN~h²hh³Nh´NubjB)�”}”(hŒ**authentication**”h]”hŒauthentication”…”�”}”(hjV~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjN~ubhŒ and ”…”�”}”(hjN~h²hh³Nh´NubjB)�”}”(hŒ **is_master**”h]”hŒ is_master”…”�”}”(hjh~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjN~ubhŒ and the ”…”�”}”(hjN~h²hh³Nh´Nubh)�”}”(hŒE:ref:`section on primary nodes and authentication `”h]”jf)�”}”(hj|~h]”hŒ+section on primary nodes and authentication”…”�”}”(hj~~h²hh³Nh´Nubah}”(h]”h ]”(jùŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jehjz~ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jˆ~Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj Œdrm_primary_node”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MhjN~ubhŒ.”…”�”}”(hjN~h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jš~h´Mhj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjü|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j}h´MhjËyubj‰)�”}”(hŒ.``master_lookup_lock`` Serializes **master**. ”h]”(j�)�”}”(hŒ``master_lookup_lock``”h]”jî)�”}”(hj·~h]”hŒmaster_lookup_lock”…”�”}”(hj¹~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjµ~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mhj±~ubj©)�”}”(hhh]”hÎ)�”}”(hŒSerializes **master**.”h]”(hŒ Serializes ”…”�”}”(hjÐ~h²hh³Nh´NubjB)�”}”(hŒ **master**”h]”hŒmaster”…”�”}”(hjØ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÐ~ubhŒ.”…”�”}”(hjÐ~h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÌ~h´MhjÍ~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj±~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÌ~h´MhjËyubj‰)�”}”(hŒï``pid`` Process that is using this file. Must only be dereferenced under a rcu_read_lock or equivalent. Updates are guarded with dev->filelist_mutex and reference must be dropped after a RCU grace period to accommodate lockless readers. ”h]”(j�)�”}”(hŒ``pid``”h]”jî)�”}”(hjh]”hŒpid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mhjü~ubj©)�”}”(hhh]”(hÎ)�”}”(hŒ Process that is using this file.”h]”hŒ Process that is using this file.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MhjubhÎ)�”}”(hŒ>Must only be dereferenced under a rcu_read_lock or equivalent.”h]”hŒ>Must only be dereferenced under a rcu_read_lock or equivalent.”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MhjubhÎ)�”}”(hŒ„Updates are guarded with dev->filelist_mutex and reference must be dropped after a RCU grace period to accommodate lockless readers.”h]”hŒ„Updates are guarded with dev->filelist_mutex and reference must be dropped after a RCU grace period to accommodate lockless readers.”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjü~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jh´MhjËyubj‰)�”}”(hŒ%``client_id`` A unique id for fdinfo ”h]”(j�)�”}”(hŒ ``client_id``”h]”jî)�”}”(hjZh]”hŒ client_id”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M"hjTubj©)�”}”(hhh]”hÎ)�”}”(hŒA unique id for fdinfo”h]”hŒA unique id for fdinfo”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³joh´M"hjpubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³joh´M"hjËyubj‰)�”}”(hŒ7``magic`` Authentication magic, see **authenticated**. ”h]”(j�)�”}”(hŒ ``magic``”h]”jî)�”}”(hj“h]”hŒmagic”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M%hj�ubj©)�”}”(hhh]”hÎ)�”}”(hŒ,Authentication magic, see **authenticated**.”h]”(hŒAuthentication magic, see ”…”�”}”(hj¬h²hh³Nh´NubjB)�”}”(hŒ**authenticated**”h]”hŒ authenticated”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¬ubhŒ.”…”�”}”(hj¬h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j¨h´M%hj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j¨h´M%hjËyubj‰)�”}”(hŒ©``lhead`` List of all open files of a DRM device, linked into :c:type:`drm_device.filelist `. Protected by :c:type:`drm_device.filelist_mutex `. ”h]”(j�)�”}”(hŒ ``lhead``”h]”jî)�”}”(hjÞh]”hŒlhead”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M*hjØubj©)�”}”(hhh]”hÎ)�”}”(hŒžList of all open files of a DRM device, linked into :c:type:`drm_device.filelist `. Protected by :c:type:`drm_device.filelist_mutex `.”h]”(hŒ4List of all open files of a DRM device, linked into ”…”�”}”(hj÷h²hh³Nh´Nubh)�”}”(hŒ*:c:type:`drm_device.filelist `”h]”jî)�”}”(hj€h]”hŒdrm_device.filelist”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÿubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M)hj÷ubhŒ. Protected by ”…”�”}”(hj÷h²hh³Nh´Nubh)�”}”(hŒ0:c:type:`drm_device.filelist_mutex `”h]”jî)�”}”(hj%€h]”hŒdrm_device.filelist_mutex”…”�”}”(hj'€h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj#€ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³j€h´M)hj÷ubhŒ.”…”�”}”(hj÷h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j€h´M)hjôubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jóh´M*hjËyubj‰)�”}”(hŒ@``minor`` :c:type:`struct drm_minor ` for this file. ”h]”(j�)�”}”(hŒ ``minor``”h]”jî)�”}”(hj^€h]”hŒminor”…”�”}”(hj`€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj\€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M0hjX€ubj©)�”}”(hhh]”hÎ)�”}”(hŒ5:c:type:`struct drm_minor ` for this file.”h]”(h)�”}”(hŒ&:c:type:`struct drm_minor `”h]”jî)�”}”(hj}€h]”hŒstruct drm_minor”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj{€ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_minor”uh1hh³js€h´M0hjw€ubhŒ for this file.”…”�”}”(hjw€h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³js€h´M0hjt€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjX€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³js€h´M0hjËyubj‰)�”}”(hŒÜ``object_idr`` Mapping of mm object handles to object pointers. Used by the GEM subsystem. Protected by **table_lock**. Note that allocated entries might be NULL as a transient state when creating or deleting a handle. ”h]”(j�)�”}”(hŒ``object_idr``”h]”jî)�”}”(hj¶€h]”hŒ object_idr”…”�”}”(hj¸€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj´€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M8hj°€ubj©)�”}”(hhh]”(hÎ)�”}”(hŒhMapping of mm object handles to object pointers. Used by the GEM subsystem. Protected by **table_lock**.”h]”(hŒYMapping of mm object handles to object pointers. Used by the GEM subsystem. Protected by ”…”�”}”(hjÏ€h²hh³Nh´NubjB)�”}”(hŒ**table_lock**”h]”hŒ table_lock”…”�”}”(hj×€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÏ€ubhŒ.”…”�”}”(hjÏ€h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M4hjÌ€ubhÎ)�”}”(hŒbNote that allocated entries might be NULL as a transient state when creating or deleting a handle.”h]”hŒbNote that allocated entries might be NULL as a transient state when creating or deleting a handle.”…”�”}”(hjð€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M7hjÌ€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj°€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jË€h´M8hjËyubj‰)�”}”(hŒ(``table_lock`` Protects **object_idr**. ”h]”(j�)�”}”(hŒ``table_lock``”h]”jî)�”}”(hj�h]”hŒ table_lock”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M>hj �ubj©)�”}”(hhh]”hÎ)�”}”(hŒProtects **object_idr**.”h]”(hŒ Protects ”…”�”}”(hj*�h²hh³Nh´NubjB)�”}”(hŒ**object_idr**”h]”hŒ object_idr”…”�”}”(hj2�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj*�ubhŒ.”…”�”}”(hj*�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j&�h´M>hj'�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj �ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j&�h´M>hjËyubj‰)�”}”(hŒB``syncobj_xa`` Mapping of sync object handles to object pointers. ”h]”(j�)�”}”(hŒ``syncobj_xa``”h]”jî)�”}”(hj\�h]”hŒ syncobj_xa”…”�”}”(hj^�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjZ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MAhjV�ubj©)�”}”(hhh]”hÎ)�”}”(hŒ2Mapping of sync object handles to object pointers.”h]”hŒ2Mapping of sync object handles to object pointers.”…”�”}”(hju�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jq�h´MAhjr�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjV�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jq�h´MAhjËyubj‰)�”}”(hŒ-``filp`` Pointer to the core file structure. ”h]”(j�)�”}”(hŒ``filp``”h]”jî)�”}”(hj•�h]”hŒfilp”…”�”}”(hj—�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj“�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MDhj��ubj©)�”}”(hhh]”hÎ)�”}”(hŒ#Pointer to the core file structure.”h]”hŒ#Pointer to the core file structure.”…”�”}”(hj®�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jª�h´MDhj«�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj��ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jª�h´MDhjËyubj‰)�”}”(hŒ¹``driver_priv`` Optional pointer for driver private data. Can be allocated in :c:type:`drm_driver.open ` and should be freed in :c:type:`drm_driver.postclose `. ”h]”(j�)�”}”(hŒ``driver_priv``”h]”jî)�”}”(hjÎ�h]”hŒ driver_priv”…”�”}”(hjÐ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÌ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MIhjÈ�ubj©)�”}”(hhh]”hÎ)�”}”(hŒ¨Optional pointer for driver private data. Can be allocated in :c:type:`drm_driver.open ` and should be freed in :c:type:`drm_driver.postclose `.”h]”(hŒ>Optional pointer for driver private data. Can be allocated in ”…”�”}”(hjç�h²hh³Nh´Nubh)�”}”(hŒ&:c:type:`drm_driver.open `”h]”jî)�”}”(hjñ�h]”hŒdrm_driver.open”…”�”}”(hjó�h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjï�ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_driver”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MHhjç�ubhŒ and should be freed in ”…”�”}”(hjç�h²hh³Nh´Nubh)�”}”(hŒ+:c:type:`drm_driver.postclose `”h]”jî)�”}”(hj‚h]”hŒdrm_driver.postclose”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj‚ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_driver”uh1hh³j‚h´MHhjç�ubhŒ.”…”�”}”(hjç�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j‚h´MHhjä�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÈ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jã�h´MIhjËyubj‰)�”}”(hX2``fbs`` List of :c:type:`struct drm_framebuffer ` associated with this file, using the :c:type:`drm_framebuffer.filp_head ` entry. Protected by **fbs_lock**. Note that the **fbs** list holds a reference on the framebuffer object to prevent it from untimely disappearing. ”h]”(j�)�”}”(hŒ``fbs``”h]”jî)�”}”(hjN‚h]”hŒfbs”…”�”}”(hjP‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjL‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MThjH‚ubj©)�”}”(hhh]”(hÎ)�”}”(hŒœList of :c:type:`struct drm_framebuffer ` associated with this file, using the :c:type:`drm_framebuffer.filp_head ` entry.”h]”(hŒList of ”…”�”}”(hjg‚h²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct drm_framebuffer `”h]”jî)�”}”(hjq‚h]”hŒstruct drm_framebuffer”…”�”}”(hjs‚h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjo‚ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_framebuffer”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MPhjg‚ubhŒ& associated with this file, using the ”…”�”}”(hjg‚h²hh³Nh´Nubh)�”}”(hŒ5:c:type:`drm_framebuffer.filp_head `”h]”jî)�”}”(hj•‚h]”hŒdrm_framebuffer.filp_head”…”�”}”(hj—‚h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj“‚ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_framebuffer”uh1hh³jŽ‚h´MPhjg‚ubhŒ entry.”…”�”}”(hjg‚h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jŽ‚h´MPhjd‚ubhÎ)�”}”(hŒ‹Protected by **fbs_lock**. Note that the **fbs** list holds a reference on the framebuffer object to prevent it from untimely disappearing.”h]”(hŒ Protected by ”…”�”}”(hj¼‚h²hh³Nh´NubjB)�”}”(hŒ **fbs_lock**”h]”hŒfbs_lock”…”�”}”(hjÄ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¼‚ubhŒ. Note that the ”…”�”}”(hj¼‚h²hh³Nh´NubjB)�”}”(hŒ**fbs**”h]”hŒfbs”…”�”}”(hjÖ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¼‚ubhŒ[ list holds a reference on the framebuffer object to prevent it from untimely disappearing.”…”�”}”(hj¼‚h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MShjd‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjH‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jc‚h´MThjËyubj‰)�”}”(hŒ``fbs_lock`` Protects **fbs**. ”h]”(j�)�”}”(hŒ ``fbs_lock``”h]”jî)�”}”(hjƒh]”hŒfbs_lock”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÿ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MZhjû‚ubj©)�”}”(hhh]”hÎ)�”}”(hŒProtects **fbs**.”h]”(hŒ Protects ”…”�”}”(hjƒh²hh³Nh´NubjB)�”}”(hŒ**fbs**”h]”hŒfbs”…”�”}”(hj"ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjƒubhŒ.”…”�”}”(hjƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jƒh´MZhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjû‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jƒh´MZhjËyubj‰)�”}”(hŒ``blobs`` User-created blob properties; this retains a reference on the property. Protected by **drm_mode_config.blob_lock**; ”h]”(j�)�”}”(hŒ ``blobs``”h]”jî)�”}”(hjLƒh]”hŒblobs”…”�”}”(hjNƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjJƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MahjFƒubj©)�”}”(hhh]”(hÎ)�”}”(hŒGUser-created blob properties; this retains a reference on the property.”h]”hŒGUser-created blob properties; this retains a reference on the property.”…”�”}”(hjeƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M^hjbƒubhÎ)�”}”(hŒ+Protected by **drm_mode_config.blob_lock**;”h]”(hŒ Protected by ”…”�”}”(hjtƒh²hh³Nh´NubjB)�”}”(hŒ**drm_mode_config.blob_lock**”h]”hŒdrm_mode_config.blob_lock”…”�”}”(hj|ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjtƒubhŒ;”…”�”}”(hjtƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jaƒh´Mahjbƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjFƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jaƒh´MahjËyubj‰)�”}”(hŒA``event_wait`` Waitqueue for new events added to **event_list**. ”h]”(j�)�”}”(hŒ``event_wait``”h]”jî)�”}”(hj¦ƒh]”hŒ event_wait”…”�”}”(hj¨ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj¤ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mghj ƒubj©)�”}”(hhh]”hÎ)�”}”(hŒ1Waitqueue for new events added to **event_list**.”h]”(hŒ"Waitqueue for new events added to ”…”�”}”(hj¿ƒh²hh³Nh´NubjB)�”}”(hŒ**event_list**”h]”hŒ event_list”…”�”}”(hjǃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¿ƒubhŒ.”…”�”}”(hj¿ƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j»ƒh´Mghj¼ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j»ƒh´MghjËyubj‰)�”}”(hXC``pending_event_list`` List of pending :c:type:`struct drm_pending_event `, used to clean up pending events in case this file gets closed before the event is signalled. Uses the :c:type:`drm_pending_event.pending_link ` entry. Protect by :c:type:`drm_device.event_lock `. ”h]”(j�)�”}”(hŒ``pending_event_list``”h]”jî)�”}”(hjñƒh]”hŒpending_event_list”…”�”}”(hjóƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjïƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mohjëƒubj©)�”}”(hhh]”(hÎ)�”}”(hŒñList of pending :c:type:`struct drm_pending_event `, used to clean up pending events in case this file gets closed before the event is signalled. Uses the :c:type:`drm_pending_event.pending_link ` entry.”h]”(hŒList of pending ”…”�”}”(hj „h²hh³Nh´Nubh)�”}”(hŒ6:c:type:`struct drm_pending_event `”h]”jî)�”}”(hj„h]”hŒstruct drm_pending_event”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj„ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_pending_event”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mkhj „ubhŒh, used to clean up pending events in case this file gets closed before the event is signalled. Uses the ”…”�”}”(hj „h²hh³Nh´Nubh)�”}”(hŒ<:c:type:`drm_pending_event.pending_link `”h]”jî)�”}”(hj8„h]”hŒdrm_pending_event.pending_link”…”�”}”(hj:„h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj6„ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_pending_event”uh1hh³j1„h´Mkhj „ubhŒ entry.”…”�”}”(hj „h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j1„h´Mkhj„ubhÎ)�”}”(hŒ8Protect by :c:type:`drm_device.event_lock `.”h]”(hŒ Protect by ”…”�”}”(hj_„h²hh³Nh´Nubh)�”}”(hŒ,:c:type:`drm_device.event_lock `”h]”jî)�”}”(hji„h]”hŒdrm_device.event_lock”…”�”}”(hjk„h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjg„ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³j„h´Mohj_„ubhŒ.”…”�”}”(hj_„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j„h´Mohj„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjëƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j„h´MohjËyubj‰)�”}”(hX``event_list`` List of :c:type:`struct drm_pending_event `, ready for delivery to userspace through drm_read(). Uses the :c:type:`drm_pending_event.link ` entry. Protect by :c:type:`drm_device.event_lock `. ”h]”(j�)�”}”(hŒ``event_list``”h]”jî)�”}”(hj¢„h]”hŒ event_list”…”�”}”(hj¤„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj „ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Myhjœ„ubj©)�”}”(hhh]”(hÎ)�”}”(hŒ¸List of :c:type:`struct drm_pending_event `, ready for delivery to userspace through drm_read(). Uses the :c:type:`drm_pending_event.link ` entry.”h]”(hŒList of ”…”�”}”(hj»„h²hh³Nh´Nubh)�”}”(hŒ6:c:type:`struct drm_pending_event `”h]”jî)�”}”(hjÅ„h]”hŒstruct drm_pending_event”…”�”}”(hjÇ„h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÄubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_pending_event”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mvhj»„ubhŒ?, ready for delivery to userspace through drm_read(). Uses the ”…”�”}”(hj»„h²hh³Nh´Nubh)�”}”(hŒ4:c:type:`drm_pending_event.link `”h]”jî)�”}”(hjé„h]”hŒdrm_pending_event.link”…”�”}”(hjë„h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjç„ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_pending_event”uh1hh³jâ„h´Mvhj»„ubhŒ entry.”…”�”}”(hj»„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jâ„h´Mvhj¸„ubhÎ)�”}”(hŒ8Protect by :c:type:`drm_device.event_lock `.”h]”(hŒ Protect by ”…”�”}”(hj…h²hh³Nh´Nubh)�”}”(hŒ,:c:type:`drm_device.event_lock `”h]”jî)�”}”(hj…h]”hŒdrm_device.event_lock”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj…ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³j·„h´Myhj…ubhŒ.”…”�”}”(hj…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j·„h´Myhj¸„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjœ„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j·„h´MyhjËyubj‰)�”}”(hŒ’``event_space`` Available event space to prevent userspace from exhausting kernel memory. Currently limited to the fairly arbitrary value of 4KB. ”h]”(j�)�”}”(hŒ``event_space``”h]”jî)�”}”(hjS…h]”hŒ event_space”…”�”}”(hjU…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjQ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M‚hjM…ubj©)�”}”(hhh]”hÎ)�”}”(hŒ�Available event space to prevent userspace from exhausting kernel memory. Currently limited to the fairly arbitrary value of 4KB.”h]”hŒ�Available event space to prevent userspace from exhausting kernel memory. Currently limited to the fairly arbitrary value of 4KB.”…”�”}”(hjl…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M€hji…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjM…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jh…h´M‚hjËyubj‰)�”}”(hŒ+``event_read_lock`` Serializes drm_read(). ”h]”(j�)�”}”(hŒ``event_read_lock``”h]”jî)�”}”(hj�…h]”hŒevent_read_lock”…”�”}”(hj�…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj‹…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mˆhj‡…ubj©)�”}”(hhh]”hÎ)�”}”(hŒSerializes drm_read().”h]”hŒSerializes drm_read().”…”�”}”(hj¦…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j¢…h´Mˆhj£…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj‡…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j¢…h´MˆhjËyubj‰)�”}”(hŒH``prime`` Per-file buffer caches used by the PRIME buffer sharing code. ”h]”(j�)�”}”(hŒ ``prime``”h]”jî)�”}”(hjÆ…h]”hŒprime”…”�”}”(hjÈ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÄ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MŒhjÀ…ubj©)�”}”(hhh]”hÎ)�”}”(hŒ=Per-file buffer caches used by the PRIME buffer sharing code.”h]”hŒ=Per-file buffer caches used by the PRIME buffer sharing code.”…”�”}”(hjß…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÛ…h´MŒhjÜ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÀ…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÛ…h´MŒhjËyubj‰)�”}”(hŒN``client_name`` Userspace-provided name; useful for accounting and debugging. ”h]”(j�)�”}”(hŒ``client_name``”h]”jî)�”}”(hjÿ…h]”hŒ client_name”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjý…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M“hjù…ubj©)�”}”(hhh]”hÎ)�”}”(hŒ=Userspace-provided name; useful for accounting and debugging.”h]”hŒ=Userspace-provided name; useful for accounting and debugging.”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j†h´M“hj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjù…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j†h´M“hjËyubj‰)�”}”(hŒ/``client_name_lock`` Protects **client_name**. ”h]”(j�)�”}”(hŒ``client_name_lock``”h]”jî)�”}”(hj8†h]”hŒclient_name_lock”…”�”}”(hj:†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj6†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mšhj2†ubj©)�”}”(hhh]”hÎ)�”}”(hŒProtects **client_name**.”h]”(hŒ Protects ”…”�”}”(hjQ†h²hh³Nh´NubjB)�”}”(hŒ**client_name**”h]”hŒ client_name”…”�”}”(hjY†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjQ†ubhŒ.”…”�”}”(hjQ†h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jM†h´MšhjN†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj2†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jM†h´MšhjËyubj‰)�”}”(hŒF``debugfs_client`` debugfs directory for each client under a drm node.”h]”(j�)�”}”(hŒ``debugfs_client``”h]”jî)�”}”(hjƒ†h]”hŒdebugfs_client”…”�”}”(hj…†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj�†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mžhj}†ubj©)�”}”(hhh]”hÎ)�”}”(hŒ3debugfs directory for each client under a drm node.”h]”hŒ3debugfs directory for each client under a drm node.”…”�”}”(hjœ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MŸhj™†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj}†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j˜†h´MžhjËyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjƒyubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³jCth´NubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjƆh]”hŒ Description”…”�”}”(hjȆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjĆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M¢hj§rh²hubhÎ)�”}”(hŒ9This structure tracks DRM state per open file descriptor.”h]”hŒ9This structure tracks DRM state per open file descriptor.”…”�”}”(hj܆h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´K¢hj§rh²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ"drm_is_primary_client (C function)”Œc.drm_is_primary_client”hNt”auh1j™hj§rh²hh³jCth´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ=bool drm_is_primary_client (const struct drm_file *file_priv)”h]”j¶)�”}”(hŒ` of **file_priv** is a primary minor. See also the :ref:`section on primary nodes and authentication `.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjˆh]”hŒ Parameters”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjþ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mªhjú‡ubj„)�”}”(hhh]”j‰)�”}”(hŒ.``const struct drm_file *file_priv`` DRM file ”h]”(j�)�”}”(hŒ$``const struct drm_file *file_priv``”h]”jî)�”}”(hjˆh]”hŒ const struct drm_file *file_priv”…”�”}”(hj!ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M§hjˆubj©)�”}”(hhh]”hÎ)�”}”(hŒDRM file”h]”hŒDRM file”…”�”}”(hj8ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j4ˆh´M§hj5ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j4ˆh´M§hjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjú‡ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjZˆh]”hŒ Description”…”�”}”(hj\ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjXˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M©hjú‡ubhÎ)�”}”(hŒ‡Returns true if this is an open file of the primary node, i.e. :c:type:`drm_file.minor ` of **file_priv** is a primary minor.”h]”(hŒ?Returns true if this is an open file of the primary node, i.e. ”…”�”}”(hjpˆh²hh³Nh´Nubh)�”}”(hŒ#:c:type:`drm_file.minor `”h]”jî)�”}”(hjzˆh]”hŒdrm_file.minor”…”�”}”(hj|ˆh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjxˆubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_file”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M¨hjpˆubhŒ of ”…”�”}”(hjpˆh²hh³Nh´NubjB)�”}”(hŒ **file_priv**”h]”hŒ file_priv”…”�”}”(hjœˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjpˆubhŒ is a primary minor.”…”�”}”(hjpˆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j—ˆh´M¨hjú‡ubhÎ)�”}”(hŒSSee also the :ref:`section on primary nodes and authentication `.”h]”(hŒ See also the ”…”�”}”(hj´ˆh²hh³Nh´Nubh)�”}”(hŒE:ref:`section on primary nodes and authentication `”h]”jf)�”}”(hj¾ˆh]”hŒ+section on primary nodes and authentication”…”�”}”(hjÀˆh²hh³Nh´Nubah}”(h]”h ]”(jùŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jehj¼ˆubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jʈŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj Œdrm_primary_node”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M«hj´ˆubhŒ.”…”�”}”(hj´ˆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j܈h´M«hjú‡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³jCth´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ!drm_is_render_client (C function)”Œc.drm_is_render_client”hNt”auh1j™hj§rh²hh³jCth´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ` of **file_priv** is a render minor. See also the :ref:`section on render nodes `.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjŠh]”hŒ Parameters”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M¹hjý‰ubj„)�”}”(hhh]”j‰)�”}”(hŒ.``const struct drm_file *file_priv`` DRM file ”h]”(j�)�”}”(hŒ$``const struct drm_file *file_priv``”h]”jî)�”}”(hj"Šh]”hŒ const struct drm_file *file_priv”…”�”}”(hj$Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj Šubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M¶hjŠubj©)�”}”(hhh]”hÎ)�”}”(hŒDRM file”h]”hŒDRM file”…”�”}”(hj;Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j7Šh´M¶hj8Šubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j7Šh´M¶hjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjý‰ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj]Šh]”hŒ Description”…”�”}”(hj_Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj[Šubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M¸hjý‰ubhÎ)�”}”(hŒ…Returns true if this is an open file of the render node, i.e. :c:type:`drm_file.minor ` of **file_priv** is a render minor.”h]”(hŒ>Returns true if this is an open file of the render node, i.e. ”…”�”}”(hjsŠh²hh³Nh´Nubh)�”}”(hŒ#:c:type:`drm_file.minor `”h]”jî)�”}”(hj}Šh]”hŒdrm_file.minor”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj{Šubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_file”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M·hjsŠubhŒ of ”…”�”}”(hjsŠh²hh³Nh´NubjB)�”}”(hŒ **file_priv**”h]”hŒ file_priv”…”�”}”(hjŸŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjsŠubhŒ is a render minor.”…”�”}”(hjsŠh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jšŠh´M·hjý‰ubhÎ)�”}”(hŒ>See also the :ref:`section on render nodes `.”h]”(hŒ See also the ”…”�”}”(hj·Šh²hh³Nh´Nubh)�”}”(hŒ0:ref:`section on render nodes `”h]”jf)�”}”(hjÁŠh]”hŒsection on render nodes”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”(jùŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jehj¿Šubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jÍŠŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj Œdrm_render_node”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mºhj·ŠubhŒ.”…”�”}”(hj·Šh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jߊh´Mºhjý‰ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³jCth´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ drm_is_accel_client (C function)”Œc.drm_is_accel_client”hNt”auh1j™hj§rh²hh³jCth´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ;bool drm_is_accel_client (const struct drm_file *file_priv)”h]”j¶)�”}”(hŒ:bool drm_is_accel_client(const struct drm_file *file_priv)”h]”(jŠ-)�”}”(hj�-h]”hŒbool”…”�”}”(hj ‹h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj‹h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MÃubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj‹h²hh³j‹h´MÃubjß)�”}”(hŒdrm_is_accel_client”h]”jå)�”}”(hŒdrm_is_accel_client”h]”hŒdrm_is_accel_client”…”�”}”(hj*‹h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj&‹ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj‹h²hh³j‹h´MÃubjÖ)�”}”(hŒ"(const struct drm_file *file_priv)”h]”jÜ)�”}”(hŒ const struct drm_file *file_priv”h]”(j¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hjF‹h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjB‹ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjS‹h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjB‹ubj¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hja‹h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjB‹ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn‹h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjB‹ubh)�”}”(hhh]”jå)�”}”(hŒdrm_file”h]”hŒdrm_file”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj|‹ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j�‹Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j,‹sbŒc.drm_is_accel_client”†”asbuh1hhjB‹ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ‹h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjB‹ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj­‹h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjB‹ubjå)�”}”(hŒ file_priv”h]”hŒ file_priv”…”�”}”(hjº‹h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjB‹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj>‹ubah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj‹h²hh³j‹h´MÃubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj‹h²hh³j‹h´MÃubah}”(h]”jýŠah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j‹h´MÃhjÿŠh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ5is this an open file of the compute acceleration node”h]”hŒ5is this an open file of the compute acceleration node”…”�”}”(hjä‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MÃhjá‹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿŠh²hh³j‹h´MÃubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jü‹j3jü‹j4‰j5‰j6‰uh1jªh²hhj§rh³jCth´Nubj8)�”}”(hX;**Parameters** ``const struct drm_file *file_priv`` DRM file **Description** Returns true if this is an open file of the compute acceleration node, i.e. :c:type:`drm_file.minor ` of **file_priv** is a accel minor. See also :doc:`Introduction to compute accelerators subsystem `.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjŒh]”hŒ Parameters”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MÇhjŒubj„)�”}”(hhh]”j‰)�”}”(hŒ.``const struct drm_file *file_priv`` DRM file ”h]”(j�)�”}”(hŒ$``const struct drm_file *file_priv``”h]”jî)�”}”(hj%Œh]”hŒ const struct drm_file *file_priv”…”�”}”(hj'Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj#Œubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MÄhjŒubj©)�”}”(hhh]”hÎ)�”}”(hŒDRM file”h]”hŒDRM file”…”�”}”(hj>Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j:Œh´MÄhj;Œubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j:Œh´MÄhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjŒubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj`Œh]”hŒ Description”…”�”}”(hjbŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj^Œubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MÆhjŒubhÎ)�”}”(hŒ’Returns true if this is an open file of the compute acceleration node, i.e. :c:type:`drm_file.minor ` of **file_priv** is a accel minor.”h]”(hŒLReturns true if this is an open file of the compute acceleration node, i.e. ”…”�”}”(hjvŒh²hh³Nh´Nubh)�”}”(hŒ#:c:type:`drm_file.minor `”h]”jî)�”}”(hj€Œh]”hŒdrm_file.minor”…”�”}”(hj‚Œh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj~Œubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdrm_file”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MÅhjvŒubhŒ of ”…”�”}”(hjvŒh²hh³Nh´NubjB)�”}”(hŒ **file_priv**”h]”hŒ file_priv”…”�”}”(hj¢Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjvŒubhŒ is a accel minor.”…”�”}”(hjvŒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j�Œh´MÅhjŒubhÎ)�”}”(hŒUSee also :doc:`Introduction to compute accelerators subsystem `.”h]”(hŒ See also ”…”�”}”(hjºŒh²hh³Nh´Nubh)�”}”(hŒK:doc:`Introduction to compute accelerators subsystem `”h]”jf)�”}”(hjÄŒh]”hŒ.Introduction to compute accelerators subsystem”…”�”}”(hjÆŒh²hh³Nh´Nubah}”(h]”h ]”(jùŒstd”Œstd-doc”eh"]”h$]”h&]”uh1jehjÂŒubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jÐŒŒreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆj Œ/accel/introduction”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MÈhjºŒubhŒ.”…”�”}”(hjºŒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jâŒh´MÈhjŒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³jCth´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_memory_stats (C struct)”Œc.drm_memory_stats”hNt”auh1j™hj§rh²hh³jCth´Nubj«)�”}”(hhh]”(j°)�”}”(hŒdrm_memory_stats”h]”j¶)�”}”(hŒstruct drm_memory_stats”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj �h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MÎubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj �h²hh³j�h´MÎubjß)�”}”(hŒdrm_memory_stats”h]”jå)�”}”(hj�h]”hŒdrm_memory_stats”…”�”}”(hj-�h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj)�ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj �h²hh³j�h´MÎubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj�h²hh³j�h´MÎubah}”(h]”j�ah ]”(jj eh"]”h$]”•h&]”j ˆj)jhuh1j¯h³j�h´MÎhj�h²hubj)�”}”(hhh]”hÎ)�”}”(hŒGEM object stats associated”h]”hŒGEM object stats associated”…”�”}”(hjO�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MñhjL�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�h²hh³j�h´MÎubeh}”(h]”h ]”(júŒstruct”eh"]”h$]”h&]”j1júj2jg�j3jg�j4‰j5‰j6‰uh1jªh²hhj§rh³jCth´Nubj8)�”}”(hXß**Definition**:: struct drm_memory_stats { u64 shared; u64 private; u64 resident; u64 purgeable; u64 active; }; **Members** ``shared`` Total size of GEM objects shared between processes ``private`` Total size of GEM objects ``resident`` Total size of GEM objects backing pages ``purgeable`` Total size of GEM objects that can be purged (resident and not active) ``active`` Total size of GEM objects active on one or more engines”h]”(hÎ)�”}”(hŒ**Definition**::”h]”(jB)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjs�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjo�ubhŒ:”…”�”}”(hjo�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mõhjk�ubj)�”}”(hŒrstruct drm_memory_stats { u64 shared; u64 private; u64 resident; u64 purgeable; u64 active; };”h]”hŒrstruct drm_memory_stats { u64 shared; u64 private; u64 resident; u64 purgeable; u64 active; };”…”�”}”hjŒ�sbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M÷hjk�ubhÎ)�”}”(hŒ **Members**”h]”jB)�”}”(hj��h]”hŒMembers”…”�”}”(hjŸ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj›�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mÿhjk�ubj„)�”}”(hhh]”(j‰)�”}”(hŒ>``shared`` Total size of GEM objects shared between processes ”h]”(j�)�”}”(hŒ ``shared``”h]”jî)�”}”(hj¼�h]”hŒshared”…”�”}”(hj¾�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjº�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Móhj¶�ubj©)�”}”(hhh]”hÎ)�”}”(hŒ2Total size of GEM objects shared between processes”h]”hŒ2Total size of GEM objects shared between processes”…”�”}”(hjÕ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÑ�h´MóhjÒ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¶�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÑ�h´Móhj³�ubj‰)�”}”(hŒ&``private`` Total size of GEM objects ”h]”(j�)�”}”(hŒ ``private``”h]”jî)�”}”(hjõ�h]”hŒprivate”…”�”}”(hj÷�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjó�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Môhjï�ubj©)�”}”(hhh]”hÎ)�”}”(hŒTotal size of GEM objects”h]”hŒTotal size of GEM objects”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j Žh´Môhj Žubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjï�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j Žh´Môhj³�ubj‰)�”}”(hŒ5``resident`` Total size of GEM objects backing pages ”h]”(j�)�”}”(hŒ ``resident``”h]”jî)�”}”(hj.Žh]”hŒresident”…”�”}”(hj0Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj,Žubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Mõhj(Žubj©)�”}”(hhh]”hÎ)�”}”(hŒ'Total size of GEM objects backing pages”h]”hŒ'Total size of GEM objects backing pages”…”�”}”(hjGŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jCŽh´MõhjDŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj(Žubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jCŽh´Mõhj³�ubj‰)�”}”(hŒU``purgeable`` Total size of GEM objects that can be purged (resident and not active) ”h]”(j�)�”}”(hŒ ``purgeable``”h]”jî)�”}”(hjgŽh]”hŒ purgeable”…”�”}”(hjiŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjeŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MöhjaŽubj©)�”}”(hhh]”hÎ)�”}”(hŒFTotal size of GEM objects that can be purged (resident and not active)”h]”hŒFTotal size of GEM objects that can be purged (resident and not active)”…”�”}”(hj€Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j|Žh´Möhj}Žubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjaŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j|Žh´Möhj³�ubj‰)�”}”(hŒB``active`` Total size of GEM objects active on one or more engines”h]”(j�)�”}”(hŒ ``active``”h]”jî)�”}”(hj Žh]”hŒactive”…”�”}”(hj¢Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjžŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´MöhjšŽubj©)�”}”(hhh]”hÎ)�”}”(hŒ7Total size of GEM objects active on one or more engines”h]”hŒ7Total size of GEM objects active on one or more engines”…”�”}”(hj¹Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M÷hj¶Žubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjšŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jµŽh´Möhj³�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjk�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³jCth´NubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjãŽh]”hŒ Description”…”�”}”(hjåŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjáŽubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´Múhj§rh²hubhÎ)�”}”(hŒ Used by drm_print_memory_stats()”h]”hŒ Used by drm_print_memory_stats()”…”�”}”(hjùŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:151: ./include/drm/drm_file.h”h´M÷hj§rh²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_open (C function)”Œ c.drm_open”hNt”auh1j™hj§rh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ5int drm_open (struct inode *inode, struct file *filp)”h]”j¶)�”}”(hŒ4int drm_open(struct inode *inode, struct file *filp)”h]”(jŠ-)�”}”(hŒint”h]”hŒint”…”�”}”(hj!�h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj�h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MfubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0�h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj�h²hh³j/�h´Mfubjß)�”}”(hŒdrm_open”h]”jå)�”}”(hŒdrm_open”h]”hŒdrm_open”…”�”}”(hjB�h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj>�ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj�h²hh³j/�h´MfubjÖ)�”}”(hŒ((struct inode *inode, struct file *filp)”h]”(jÜ)�”}”(hŒstruct inode *inode”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj^�h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjZ�ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk�h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjZ�ubh)�”}”(hhh]”jå)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj|�h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjy�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j~�Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jD�sbŒ c.drm_open”†”asbuh1hhjZ�ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœ�h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjZ�ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjª�h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjZ�ubjå)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj·�h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjZ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjV�ubjÜ)�”}”(hŒstruct file *filp”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjÐ�h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjÌ�ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ�h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÌ�ubh)�”}”(hhh]”jå)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjî�h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjë�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jð�Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j˜�Œ c.drm_open”†”asbuh1hhjÌ�ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÌ�ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjÌ�ubjå)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hj'�h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÌ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjV�ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj�h²hh³j/�h´Mfubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj�h²hh³j/�h´Mfubah}”(h]”j�ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j/�h´Mfhj�h²hubj)�”}”(hhh]”hÎ)�”}”(hŒopen method for DRM file”h]”hŒopen method for DRM file”…”�”}”(hjQ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MfhjN�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�h²hh³j/�h´Mfubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2ji�j3ji�j4‰j5‰j6‰uh1jªh²hhj§rh³Nh´Nubj8)�”}”(hX¶**Parameters** ``struct inode *inode`` device inode ``struct file *filp`` file pointer. **Description** This function must be used by drivers as their :c:type:`file_operations.open ` method. It looks up the correct DRM device and instantiates all the per-file resources for it. It also calls the :c:type:`drm_driver.open ` driver callback. **Return** 0 on success or negative errno value on failure.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjs�h]”hŒ Parameters”…”�”}”(hju�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjq�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mjhjm�ubj„)�”}”(hhh]”(j‰)�”}”(hŒ%``struct inode *inode`` device inode ”h]”(j�)�”}”(hŒ``struct inode *inode``”h]”jî)�”}”(hj’�h]”hŒstruct inode *inode”…”�”}”(hj”�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MghjŒ�ubj©)�”}”(hhh]”hÎ)�”}”(hŒ device inode”h]”hŒ device inode”…”�”}”(hj«�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j§�h´Mghj¨�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjŒ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j§�h´Mghj‰�ubj‰)�”}”(hŒ$``struct file *filp`` file pointer. ”h]”(j�)�”}”(hŒ``struct file *filp``”h]”jî)�”}”(hjË�h]”hŒstruct file *filp”…”�”}”(hjÍ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÉ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MhhjÅ�ubj©)�”}”(hhh]”hÎ)�”}”(hŒ file pointer.”h]”hŒ file pointer.”…”�”}”(hjä�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jà�h´Mhhjá�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÅ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jà�h´Mhhj‰�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjm�ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj‘h]”hŒ Description”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mjhjm�ubhÎ)�”}”(hXThis function must be used by drivers as their :c:type:`file_operations.open ` method. It looks up the correct DRM device and instantiates all the per-file resources for it. It also calls the :c:type:`drm_driver.open ` driver callback.”h]”(hŒ/This function must be used by drivers as their ”…”�”}”(hj‘h²hh³Nh´Nubh)�”}”(hŒ0:c:type:`file_operations.open `”h]”jî)�”}”(hj&‘h]”hŒfile_operations.open”…”�”}”(hj(‘h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj$‘ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œfile_operations”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mihj‘ubhŒr method. It looks up the correct DRM device and instantiates all the per-file resources for it. It also calls the ”…”�”}”(hj‘h²hh³Nh´Nubh)�”}”(hŒ&:c:type:`drm_driver.open `”h]”jî)�”}”(hjJ‘h]”hŒdrm_driver.open”…”�”}”(hjL‘h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjH‘ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_driver”uh1hh³jC‘h´Mihj‘ubhŒ driver callback.”…”�”}”(hj‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jC‘h´Mihjm�ubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hjs‘h]”hŒReturn”…”�”}”(hju‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjq‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mmhjm�ubhÎ)�”}”(hŒ00 on success or negative errno value on failure.”h]”hŒ00 on success or negative errno value on failure.”…”�”}”(hj‰‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mnhjm�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_release (C function)”Œ c.drm_release”hNt”auh1j™hj§rh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ8int drm_release (struct inode *inode, struct file *filp)”h]”j¶)�”}”(hŒ7int drm_release(struct inode *inode, struct file *filp)”h]”(jŠ-)�”}”(hŒint”h]”hŒint”…”�”}”(hj¸‘h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj´‘h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MŸubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ‘h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj´‘h²hh³jÆ‘h´MŸubjß)�”}”(hŒ drm_release”h]”jå)�”}”(hŒ drm_release”h]”hŒ drm_release”…”�”}”(hjÙ‘h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÕ‘ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj´‘h²hh³jÆ‘h´MŸubjÖ)�”}”(hŒ((struct inode *inode, struct file *filp)”h]”(jÜ)�”}”(hŒstruct inode *inode”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjõ‘h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjñ‘ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjñ‘ubh)�”}”(hhh]”jå)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j’Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jÛ‘sbŒ c.drm_release”†”asbuh1hhjñ‘ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3’h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjñ‘ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjA’h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjñ‘ubjå)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjN’h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjñ‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjí‘ubjÜ)�”}”(hŒstruct file *filp”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjg’h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjc’ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt’h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjc’ubh)�”}”(hhh]”jå)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj…’h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj‚’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j‡’Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j/’Œ c.drm_release”†”asbuh1hhjc’ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£’h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjc’ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj±’h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjc’ubjå)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hj¾’h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjc’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjí‘ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj´‘h²hh³jÆ‘h´MŸubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj°‘h²hh³jÆ‘h´MŸubah}”(h]”j«‘ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jÆ‘h´MŸhj­‘h²hubj)�”}”(hhh]”hÎ)�”}”(hŒrelease method for DRM file”h]”hŒrelease method for DRM file”…”�”}”(hjè’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MŸhjå’h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­‘h²hh³jÆ‘h´MŸubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j“j3j“j4‰j5‰j6‰uh1jªh²hhj§rh³Nh´Nubj8)�”}”(hX **Parameters** ``struct inode *inode`` device inode ``struct file *filp`` file pointer. **Description** This function must be used by drivers as their :c:type:`file_operations.release ` method. It frees any resources associated with the open file. If this is the last open file for the DRM device, it also restores the active in-kernel DRM client. **Return** Always succeeds and returns 0.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj “h]”hŒ Parameters”…”�”}”(hj “h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M£hj“ubj„)�”}”(hhh]”(j‰)�”}”(hŒ%``struct inode *inode`` device inode ”h]”(j�)�”}”(hŒ``struct inode *inode``”h]”jî)�”}”(hj)“h]”hŒstruct inode *inode”…”�”}”(hj+“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj'“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M hj#“ubj©)�”}”(hhh]”hÎ)�”}”(hŒ device inode”h]”hŒ device inode”…”�”}”(hjB“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j>“h´M hj?“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj#“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j>“h´M hj “ubj‰)�”}”(hŒ$``struct file *filp`` file pointer. ”h]”(j�)�”}”(hŒ``struct file *filp``”h]”jî)�”}”(hjb“h]”hŒstruct file *filp”…”�”}”(hjd“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj`“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M¡hj\“ubj©)�”}”(hhh]”hÎ)�”}”(hŒ file pointer.”h]”hŒ file pointer.”…”�”}”(hj{“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jw“h´M¡hjx“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj\“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jw“h´M¡hj “ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj“ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj�“h]”hŒ Description”…”�”}”(hjŸ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj›“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M£hj“ubhÎ)�”}”(hXThis function must be used by drivers as their :c:type:`file_operations.release ` method. It frees any resources associated with the open file. If this is the last open file for the DRM device, it also restores the active in-kernel DRM client.”h]”(hŒ/This function must be used by drivers as their ”…”�”}”(hj³“h²hh³Nh´Nubh)�”}”(hŒ3:c:type:`file_operations.release `”h]”jî)�”}”(hj½“h]”hŒfile_operations.release”…”�”}”(hj¿“h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj»“ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œfile_operations”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M¢hj³“ubhŒ¢ method. It frees any resources associated with the open file. If this is the last open file for the DRM device, it also restores the active in-kernel DRM client.”…”�”}”(hj³“h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÚ“h´M¢hj“ubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hjç“h]”hŒReturn”…”�”}”(hjé“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjå“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M§hj“ubhÎ)�”}”(hŒAlways succeeds and returns 0.”h]”hŒAlways succeeds and returns 0.”…”�”}”(hjý“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M¨hj“ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ!drm_release_noglobal (C function)”Œc.drm_release_noglobal”hNt”auh1j™hj§rh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒAint drm_release_noglobal (struct inode *inode, struct file *filp)”h]”j¶)�”}”(hŒ@int drm_release_noglobal(struct inode *inode, struct file *filp)”h]”(jŠ-)�”}”(hŒint”h]”hŒint”…”�”}”(hj,”h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj(”h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MåubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;”h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj(”h²hh³j:”h´Måubjß)�”}”(hŒdrm_release_noglobal”h]”jå)�”}”(hŒdrm_release_noglobal”h]”hŒdrm_release_noglobal”…”�”}”(hjM”h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjI”ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj(”h²hh³j:”h´MåubjÖ)�”}”(hŒ((struct inode *inode, struct file *filp)”h]”(jÜ)�”}”(hŒstruct inode *inode”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hji”h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hje”ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv”h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhje”ubh)�”}”(hhh]”jå)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj‡”h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj„”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j‰”Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jO”sbŒc.drm_release_noglobal”†”asbuh1hhje”ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§”h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhje”ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjµ”h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hje”ubjå)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähje”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhja”ubjÜ)�”}”(hŒstruct file *filp”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjÛ”h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj×”ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè”h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj×”ubh)�”}”(hhh]”jå)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjù”h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjö”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jû”Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j£”Œc.drm_release_noglobal”†”asbuh1hhj×”ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj×”ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj%•h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj×”ubjå)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hj2•h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj×”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhja”ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj(”h²hh³j:”h´Måubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj$”h²hh³j:”h´Måubah}”(h]”j”ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j:”h´Måhj!”h²hubj)�”}”(hhh]”hÎ)�”}”(hŒrelease method for DRM file”h]”hŒrelease method for DRM file”…”�”}”(hj\•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MåhjY•h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj!”h²hh³j:”h´Måubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jt•j3jt•j4‰j5‰j6‰uh1jªh²hhj§rh³Nh´Nubj8)�”}”(hXÄ**Parameters** ``struct inode *inode`` device inode ``struct file *filp`` file pointer. **Description** This function may be used by drivers as their :c:type:`file_operations.release ` method. It frees any resources associated with the open file prior to taking the drm_global_mutex. If this is the last open file for the DRM device, it then restores the active in-kernel DRM client. **Return** Always succeeds and returns 0.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj~•h]”hŒ Parameters”…”�”}”(hj€•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj|•ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Méhjx•ubj„)�”}”(hhh]”(j‰)�”}”(hŒ%``struct inode *inode`` device inode ”h]”(j�)�”}”(hŒ``struct inode *inode``”h]”jî)�”}”(hj�•h]”hŒstruct inode *inode”…”�”}”(hjŸ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj›•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mæhj—•ubj©)�”}”(hhh]”hÎ)�”}”(hŒ device inode”h]”hŒ device inode”…”�”}”(hj¶•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j²•h´Mæhj³•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj—•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j²•h´Mæhj”•ubj‰)�”}”(hŒ$``struct file *filp`` file pointer. ”h]”(j�)�”}”(hŒ``struct file *filp``”h]”jî)�”}”(hjÖ•h]”hŒstruct file *filp”…”�”}”(hjØ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÔ•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MçhjЕubj©)�”}”(hhh]”hÎ)�”}”(hŒ file pointer.”h]”hŒ file pointer.”…”�”}”(hjï•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jë•h´Mçhjì•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjЕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jë•h´Mçhj”•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjx•ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj–h]”hŒ Description”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Méhjx•ubhÎ)�”}”(hX(This function may be used by drivers as their :c:type:`file_operations.release ` method. It frees any resources associated with the open file prior to taking the drm_global_mutex. If this is the last open file for the DRM device, it then restores the active in-kernel DRM client.”h]”(hŒ.This function may be used by drivers as their ”…”�”}”(hj'–h²hh³Nh´Nubh)�”}”(hŒ3:c:type:`file_operations.release `”h]”jî)�”}”(hj1–h]”hŒfile_operations.release”…”�”}”(hj3–h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj/–ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œfile_operations”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mèhj'–ubhŒÇ method. It frees any resources associated with the open file prior to taking the drm_global_mutex. If this is the last open file for the DRM device, it then restores the active in-kernel DRM client.”…”�”}”(hj'–h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jN–h´Mèhjx•ubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hj[–h]”hŒReturn”…”�”}”(hj]–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjY–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Míhjx•ubhÎ)�”}”(hŒAlways succeeds and returns 0.”h]”hŒAlways succeeds and returns 0.”…”�”}”(hjq–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mîhjx•ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_read (C function)”Œ c.drm_read”hNt”auh1j™hj§rh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒWssize_t drm_read (struct file *filp, char __user *buffer, size_t count, loff_t *offset)”h]”j¶)�”}”(hŒVssize_t drm_read(struct file *filp, char __user *buffer, size_t count, loff_t *offset)”h]”(h)�”}”(hhh]”jå)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hj£–h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj –ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j¥–Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘Œdrm_read”sbŒ c.drm_read”†”asbuh1hhjœ–h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ–h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjœ–h²hh³jÄ–h´Mubjß)�”}”(hŒdrm_read”h]”jå)�”}”(hjÁ–h]”hŒdrm_read”…”�”}”(hj×–h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÓ–ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjœ–h²hh³jÄ–h´MubjÖ)�”}”(hŒF(struct file *filp, char __user *buffer, size_t count, loff_t *offset)”h]”(jÜ)�”}”(hŒstruct file *filp”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjò–h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjî–ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ–h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjî–ubh)�”}”(hhh]”jå)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj —ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j—Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j¿–Œ c.drm_read”†”asbuh1hhjî–ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.—h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjî–ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj<—h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjî–ubjå)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hjI—h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjî–ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjê–ubjÜ)�”}”(hŒchar __user *buffer”h]”(jŠ-)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjb—h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj^—ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjp—h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj^—ubhŒ__user”…”�”}”(hj^—h²hh³Nh´NubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚—h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj^—ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj�—h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj^—ubjå)�”}”(hŒbuffer”h]”hŒbuffer”…”�”}”(hj�—h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj^—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjê–ubjÜ)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”jå)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj¹—h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¶—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j»—Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j¿–Œ c.drm_read”†”asbuh1hhj²—ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×—h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj²—ubjå)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjå—h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj²—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjê–ubjÜ)�”}”(hŒloff_t *offset”h]”(h)�”}”(hhh]”jå)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjþ—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j˜Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j¿–Œ c.drm_read”†”asbuh1hhjú—ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjú—ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj-˜h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjú—ubjå)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hj:˜h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjú—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjê–ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjœ–h²hh³jÄ–h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj˜–h²hh³jÄ–h´Mubah}”(h]”j“–ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jÄ–h´Mhj•–h²hubj)�”}”(hhh]”hÎ)�”}”(hŒread method for DRM file”h]”hŒread method for DRM file”…”�”}”(hjd˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mhja˜h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•–h²hh³jÄ–h´Mubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j|˜j3j|˜j4‰j5‰j6‰uh1jªh²hhj§rh³Nh´Nubj8)�”}”(hXÇ**Parameters** ``struct file *filp`` file pointer ``char __user *buffer`` userspace destination pointer for the read ``size_t count`` count in bytes to read ``loff_t *offset`` offset to read **Description** This function must be used by drivers as their :c:type:`file_operations.read ` method if they use DRM events for asynchronous signalling to userspace. Since events are used by the KMS API for vblank and page flip completion this means all modern display drivers must use it. **offset** is ignored, DRM events are read like a pipe. Polling support is provided by drm_poll(). This function will only ever read a full event. Therefore userspace must supply a big enough buffer to fit any event to ensure forward progress. Since the maximum event space is currently 4K it's recommended to just use that for safety. **Return** Number of bytes read (always aligned to full events, and can be 0) or a negative error code on failure.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj†˜h]”hŒ Parameters”…”�”}”(hjˆ˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj„˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M hj€˜ubj„)�”}”(hhh]”(j‰)�”}”(hŒ#``struct file *filp`` file pointer ”h]”(j�)�”}”(hŒ``struct file *filp``”h]”jî)�”}”(hj¥˜h]”hŒstruct file *filp”…”�”}”(hj§˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj£˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MhjŸ˜ubj©)�”}”(hhh]”hÎ)�”}”(hŒ file pointer”h]”hŒ file pointer”…”�”}”(hj¾˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jº˜h´Mhj»˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjŸ˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jº˜h´Mhjœ˜ubj‰)�”}”(hŒC``char __user *buffer`` userspace destination pointer for the read ”h]”(j�)�”}”(hŒ``char __user *buffer``”h]”jî)�”}”(hjÞ˜h]”hŒchar __user *buffer”…”�”}”(hjà˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjܘubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mhjؘubj©)�”}”(hhh]”hÎ)�”}”(hŒ*userspace destination pointer for the read”h]”hŒ*userspace destination pointer for the read”…”�”}”(hj÷˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jó˜h´Mhjô˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjؘubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jó˜h´Mhjœ˜ubj‰)�”}”(hŒ(``size_t count`` count in bytes to read ”h]”(j�)�”}”(hŒ``size_t count``”h]”jî)�”}”(hj™h]”hŒ size_t count”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mhj™ubj©)�”}”(hhh]”hÎ)�”}”(hŒcount in bytes to read”h]”hŒcount in bytes to read”…”�”}”(hj0™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j,™h´Mhj-™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j,™h´Mhjœ˜ubj‰)�”}”(hŒ"``loff_t *offset`` offset to read ”h]”(j�)�”}”(hŒ``loff_t *offset``”h]”jî)�”}”(hjP™h]”hŒloff_t *offset”…”�”}”(hjR™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjN™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M hjJ™ubj©)�”}”(hhh]”hÎ)�”}”(hŒoffset to read”h]”hŒoffset to read”…”�”}”(hji™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³je™h´M hjf™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjJ™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³je™h´M hjœ˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj€˜ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj‹™h]”hŒ Description”…”�”}”(hj�™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj‰™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M hj€˜ubhÎ)�”}”(hX#This function must be used by drivers as their :c:type:`file_operations.read ` method if they use DRM events for asynchronous signalling to userspace. Since events are used by the KMS API for vblank and page flip completion this means all modern display drivers must use it.”h]”(hŒ/This function must be used by drivers as their ”…”�”}”(hj¡™h²hh³Nh´Nubh)�”}”(hŒ0:c:type:`file_operations.read `”h]”jî)�”}”(hj«™h]”hŒfile_operations.read”…”�”}”(hj­™h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj©™ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œfile_operations”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M hj¡™ubhŒÄ method if they use DRM events for asynchronous signalling to userspace. Since events are used by the KMS API for vblank and page flip completion this means all modern display drivers must use it.”…”�”}”(hj¡™h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÈ™h´M hj€˜ubhÎ)�”}”(hŒb**offset** is ignored, DRM events are read like a pipe. Polling support is provided by drm_poll().”h]”(jB)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hj×™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÓ™ubhŒX is ignored, DRM events are read like a pipe. Polling support is provided by drm_poll().”…”�”}”(hjÓ™h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mhj€˜ubhÎ)�”}”(hŒìThis function will only ever read a full event. Therefore userspace must supply a big enough buffer to fit any event to ensure forward progress. Since the maximum event space is currently 4K it's recommended to just use that for safety.”h]”hŒîThis function will only ever read a full event. Therefore userspace must supply a big enough buffer to fit any event to ensure forward progress. Since the maximum event space is currently 4K it’s recommended to just use that for safety.”…”�”}”(hjð™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mhj€˜ubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hjšh]”hŒReturn”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÿ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mhj€˜ubhÎ)�”}”(hŒgNumber of bytes read (always aligned to full events, and can be 0) or a negative error code on failure.”h]”hŒgNumber of bytes read (always aligned to full events, and can be 0) or a negative error code on failure.”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mhj€˜ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_poll (C function)”Œ c.drm_poll”hNt”auh1j™hj§rh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒE__poll_t drm_poll (struct file *filp, struct poll_table_struct *wait)”h]”j¶)�”}”(hŒD__poll_t drm_poll(struct file *filp, struct poll_table_struct *wait)”h]”(h)�”}”(hhh]”jå)�”}”(hŒ__poll_t”h]”hŒ__poll_t”…”�”}”(hjIšh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjFšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jKšŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘Œdrm_poll”sbŒ c.drm_poll”†”asbuh1hhjBšh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MbubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkšh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjBšh²hh³jjšh´Mbubjß)�”}”(hŒdrm_poll”h]”jå)�”}”(hjgšh]”hŒdrm_poll”…”�”}”(hj}šh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjyšubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjBšh²hh³jjšh´MbubjÖ)�”}”(hŒ3(struct file *filp, struct poll_table_struct *wait)”h]”(jÜ)�”}”(hŒstruct file *filp”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj˜šh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj”šubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥šh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj”šubh)�”}”(hhh]”jå)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj¶šh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj³šubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j¸šŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”ješŒ c.drm_poll”†”asbuh1hhj”šubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔšh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj”šubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjâšh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj”šubjå)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hjïšh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj”šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj�šubjÜ)�”}”(hŒstruct poll_table_struct *wait”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj›ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj›ubh)�”}”(hhh]”jå)�”}”(hŒpoll_table_struct”h]”hŒpoll_table_struct”…”�”}”(hj&›h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj#›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j(›Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”ješŒ c.drm_poll”†”asbuh1hhj›ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD›h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj›ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjR›h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj›ubjå)�”}”(hŒwait”h]”hŒwait”…”�”}”(hj_›h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj›ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj�šubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjBšh²hh³jjšh´Mbubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj>šh²hh³jjšh´Mbubah}”(h]”j9šah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jjšh´Mbhj;šh²hubj)�”}”(hhh]”hÎ)�”}”(hŒpoll method for DRM file”h]”hŒpoll method for DRM file”…”�”}”(hj‰›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mbhj†›h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;šh²hh³jjšh´Mbubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j¡›j3j¡›j4‰j5‰j6‰uh1jªh²hhj§rh³Nh´Nubj8)�”}”(hX**Parameters** ``struct file *filp`` file pointer ``struct poll_table_struct *wait`` poll waiter table **Description** This function must be used by drivers as their :c:type:`file_operations.read ` method if they use DRM events for asynchronous signalling to userspace. Since events are used by the KMS API for vblank and page flip completion this means all modern display drivers must use it. See also drm_read(). **Return** Mask of POLL flags indicating the current status of the file.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj«›h]”hŒ Parameters”…”�”}”(hj­›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj©›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mfhj¥›ubj„)�”}”(hhh]”(j‰)�”}”(hŒ#``struct file *filp`` file pointer ”h]”(j�)�”}”(hŒ``struct file *filp``”h]”jî)�”}”(hjÊ›h]”hŒstruct file *filp”…”�”}”(hjÌ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÈ›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MchjÄ›ubj©)�”}”(hhh]”hÎ)�”}”(hŒ file pointer”h]”hŒ file pointer”…”�”}”(hjã›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jß›h´Mchjà›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÄ›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jß›h´MchjÁ›ubj‰)�”}”(hŒ5``struct poll_table_struct *wait`` poll waiter table ”h]”(j�)�”}”(hŒ"``struct poll_table_struct *wait``”h]”jî)�”}”(hjœh]”hŒstruct poll_table_struct *wait”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mdhjý›ubj©)�”}”(hhh]”hÎ)�”}”(hŒpoll waiter table”h]”hŒpoll waiter table”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jœh´Mdhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjý›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jœh´MdhjÁ›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj¥›ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj>œh]”hŒ Description”…”�”}”(hj@œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj<œubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mfhj¥›ubhÎ)�”}”(hX$This function must be used by drivers as their :c:type:`file_operations.read ` method if they use DRM events for asynchronous signalling to userspace. Since events are used by the KMS API for vblank and page flip completion this means all modern display drivers must use it.”h]”(hŒ/This function must be used by drivers as their ”…”�”}”(hjTœh²hh³Nh´Nubh)�”}”(hŒ0:c:type:`file_operations.read `”h]”jî)�”}”(hj^œh]”hŒfile_operations.read”…”�”}”(hj`œh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj\œubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œfile_operations”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MehjTœubhŒÅ method if they use DRM events for asynchronous signalling to userspace. Since events are used by the KMS API for vblank and page flip completion this means all modern display drivers must use it.”…”�”}”(hjTœh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j{œh´Mehj¥›ubhÎ)�”}”(hŒSee also drm_read().”h]”hŒSee also drm_read().”…”�”}”(hj†œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mjhj¥›ubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hj—œh]”hŒReturn”…”�”}”(hj™œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj•œubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mlhj¥›ubhÎ)�”}”(hŒ=Mask of POLL flags indicating the current status of the file.”h]”hŒ=Mask of POLL flags indicating the current status of the file.”…”�”}”(hj­œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mmhj¥›ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ*drm_event_reserve_init_locked (C function)”Œc.drm_event_reserve_init_locked”hNt”auh1j™hj§rh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒˆint drm_event_reserve_init_locked (struct drm_device *dev, struct drm_file *file_priv, struct drm_pending_event *p, struct drm_event *e)”h]”j¶)�”}”(hŒ‡int drm_event_reserve_init_locked(struct drm_device *dev, struct drm_file *file_priv, struct drm_pending_event *p, struct drm_event *e)”h]”(jŠ-)�”}”(hŒint”h]”hŒint”…”�”}”(hjÜœh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjØœh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëœh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjØœh²hh³jêœh´Mubjß)�”}”(hŒdrm_event_reserve_init_locked”h]”jå)�”}”(hŒdrm_event_reserve_init_locked”h]”hŒdrm_event_reserve_init_locked”…”�”}”(hjýœh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjùœubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjØœh²hh³jêœh´MubjÖ)�”}”(hŒf(struct drm_device *dev, struct drm_file *file_priv, struct drm_pending_event *p, struct drm_event *e)”h]”(jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj�ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&�h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj�ubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hj7�h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj4�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j9�Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jÿœsbŒc.drm_event_reserve_init_locked”†”asbuh1hhj�ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW�h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj�ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hje�h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj�ubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjr�h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj�ubjÜ)�”}”(hŒstruct drm_file *file_priv”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj‹�h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj‡�ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜�h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj‡�ubh)�”}”(hhh]”jå)�”}”(hŒdrm_file”h]”hŒdrm_file”…”�”}”(hj©�h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¦�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j«�Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jS�Œc.drm_event_reserve_init_locked”†”asbuh1hhj‡�ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ�h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj‡�ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjÕ�h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj‡�ubjå)�”}”(hŒ file_priv”h]”hŒ file_priv”…”�”}”(hjâ�h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj‡�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj�ubjÜ)�”}”(hŒstruct drm_pending_event *p”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjû�h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj÷�ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj÷�ubh)�”}”(hhh]”jå)�”}”(hŒdrm_pending_event”h]”hŒdrm_pending_event”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjžubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jžŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jS�Œc.drm_event_reserve_init_locked”†”asbuh1hhj÷�ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7žh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj÷�ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjEžh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj÷�ubjå)�”}”(hjºh]”hŒp”…”�”}”(hjRžh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj÷�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj�ubjÜ)�”}”(hŒstruct drm_event *e”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjjžh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjfžubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwžh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjfžubh)�”}”(hhh]”jå)�”}”(hŒ drm_event”h]”hŒ drm_event”…”�”}”(hjˆžh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj…žubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jŠžŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jS�Œc.drm_event_reserve_init_locked”†”asbuh1hhjfžubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦žh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjfžubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj´žh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjfžubjå)�”}”(hŒe”h]”hŒe”…”�”}”(hjÁžh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjfžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj�ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjØœh²hh³jêœh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjÔœh²hh³jêœh´Mubah}”(h]”jÏœah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jêœh´MhjÑœh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ)init a DRM event and reserve space for it”h]”hŒ)init a DRM event and reserve space for it”…”�”}”(hjëžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mhjèžh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑœh²hh³jêœh´Mubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jŸj3jŸj4‰j5‰j6‰uh1jªh²hhj§rh³Nh´Nubj8)�”}”(hXæ**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_file *file_priv`` DRM file private data ``struct drm_pending_event *p`` tracking structure for the pending event ``struct drm_event *e`` actual event data to deliver to userspace **Description** This function prepares the passed in event for eventual delivery. If the event doesn't get delivered (because the IOCTL fails later on, before queuing up anything) then the even must be cancelled and freed using drm_event_cancel_free(). Successfully initialized events should be sent out using drm_send_event() or drm_send_event_locked() to signal completion of the asynchronous event to userspace. If callers embedded **p** into a larger structure it must be allocated with kmalloc and **p** must be the first member element. This is the locked version of drm_event_reserve_init() for callers which already hold :c:type:`drm_device.event_lock `. **Return** 0 on success or a negative error code on failure.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj Ÿh]”hŒ Parameters”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MƒhjŸubj„)�”}”(hhh]”(j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hj,Ÿh]”hŒstruct drm_device *dev”…”�”}”(hj.Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj*Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M€hj&Ÿubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hjEŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jAŸh´M€hjBŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj&Ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jAŸh´M€hj#Ÿubj‰)�”}”(hŒ5``struct drm_file *file_priv`` DRM file private data ”h]”(j�)�”}”(hŒ``struct drm_file *file_priv``”h]”jî)�”}”(hjeŸh]”hŒstruct drm_file *file_priv”…”�”}”(hjgŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjcŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M�hj_Ÿubj©)�”}”(hhh]”hÎ)�”}”(hŒDRM file private data”h]”hŒDRM file private data”…”�”}”(hj~Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jzŸh´M�hj{Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj_Ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jzŸh´M�hj#Ÿubj‰)�”}”(hŒI``struct drm_pending_event *p`` tracking structure for the pending event ”h]”(j�)�”}”(hŒ``struct drm_pending_event *p``”h]”jî)�”}”(hjžŸh]”hŒstruct drm_pending_event *p”…”�”}”(hj Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjœŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M‚hj˜Ÿubj©)�”}”(hhh]”hÎ)�”}”(hŒ(tracking structure for the pending event”h]”hŒ(tracking structure for the pending event”…”�”}”(hj·Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j³Ÿh´M‚hj´Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj˜Ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j³Ÿh´M‚hj#Ÿubj‰)�”}”(hŒB``struct drm_event *e`` actual event data to deliver to userspace ”h]”(j�)�”}”(hŒ``struct drm_event *e``”h]”jî)�”}”(hjןh]”hŒstruct drm_event *e”…”�”}”(hjÙŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÕŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MƒhjÑŸubj©)�”}”(hhh]”hÎ)�”}”(hŒ)actual event data to deliver to userspace”h]”hŒ)actual event data to deliver to userspace”…”�”}”(hjðŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jìŸh´MƒhjíŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÑŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jìŸh´Mƒhj#Ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjŸubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M…hjŸubhÎ)�”}”(hXŽThis function prepares the passed in event for eventual delivery. If the event doesn't get delivered (because the IOCTL fails later on, before queuing up anything) then the even must be cancelled and freed using drm_event_cancel_free(). Successfully initialized events should be sent out using drm_send_event() or drm_send_event_locked() to signal completion of the asynchronous event to userspace.”h]”hX�This function prepares the passed in event for eventual delivery. If the event doesn’t get delivered (because the IOCTL fails later on, before queuing up anything) then the even must be cancelled and freed using drm_event_cancel_free(). Successfully initialized events should be sent out using drm_send_event() or drm_send_event_locked() to signal completion of the asynchronous event to userspace.”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M„hjŸubhÎ)�”}”(hŒIf callers embedded **p** into a larger structure it must be allocated with kmalloc and **p** must be the first member element.”h]”(hŒIf callers embedded ”…”�”}”(hj7 h²hh³Nh´NubjB)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj? h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj7 ubhŒ? into a larger structure it must be allocated with kmalloc and ”…”�”}”(hj7 h²hh³Nh´NubjB)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj7 ubhŒ" must be the first member element.”…”�”}”(hj7 h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M‹hjŸubhÎ)�”}”(hŒƒThis is the locked version of drm_event_reserve_init() for callers which already hold :c:type:`drm_device.event_lock `.”h]”(hŒVThis is the locked version of drm_event_reserve_init() for callers which already hold ”…”�”}”(hjj h²hh³Nh´Nubh)�”}”(hŒ,:c:type:`drm_device.event_lock `”h]”jî)�”}”(hjt h]”hŒdrm_device.event_lock”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjr ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MŽhjj ubhŒ.”…”�”}”(hjj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j‘ h´MŽhjŸubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hjž h]”hŒReturn”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjœ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M‘hjŸubhÎ)�”}”(hŒ10 on success or a negative error code on failure.”h]”hŒ10 on success or a negative error code on failure.”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M’hjŸubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ#drm_event_reserve_init (C function)”Œc.drm_event_reserve_init”hNt”auh1j™hj§rh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ�int drm_event_reserve_init (struct drm_device *dev, struct drm_file *file_priv, struct drm_pending_event *p, struct drm_event *e)”h]”j¶)�”}”(hŒ€int drm_event_reserve_init(struct drm_device *dev, struct drm_file *file_priv, struct drm_pending_event *p, struct drm_event *e)”h]”(jŠ-)�”}”(hŒint”h]”hŒint”…”�”}”(hjã h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjß h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M¨ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjß h²hh³jñ h´M¨ubjß)�”}”(hŒdrm_event_reserve_init”h]”jå)�”}”(hŒdrm_event_reserve_init”h]”hŒdrm_event_reserve_init”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¡ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjß h²hh³jñ h´M¨ubjÖ)�”}”(hŒf(struct drm_device *dev, struct drm_file *file_priv, struct drm_pending_event *p, struct drm_event *e)”h]”(jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj ¡h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj¡ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-¡h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj¡ubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hj>¡h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj;¡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j@¡Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j¡sbŒc.drm_event_reserve_init”†”asbuh1hhj¡ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^¡h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj¡ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjl¡h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj¡ubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjy¡h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj¡ubjÜ)�”}”(hŒstruct drm_file *file_priv”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj’¡h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjŽ¡ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ¡h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjŽ¡ubh)�”}”(hhh]”jå)�”}”(hŒdrm_file”h]”hŒdrm_file”…”�”}”(hj°¡h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj­¡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j²¡Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jZ¡Œc.drm_event_reserve_init”†”asbuh1hhjŽ¡ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjΡh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjŽ¡ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjÜ¡h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjŽ¡ubjå)�”}”(hŒ file_priv”h]”hŒ file_priv”…”�”}”(hjé¡h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjŽ¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj¡ubjÜ)�”}”(hŒstruct drm_pending_event *p”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjþ¡ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjþ¡ubh)�”}”(hhh]”jå)�”}”(hŒdrm_pending_event”h]”hŒdrm_pending_event”…”�”}”(hj ¢h²hh³Nh´Nuba•)h}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j"¢Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jZ¡Œc.drm_event_reserve_init”†”asbuh1hhjþ¡ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>¢h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjþ¡ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjL¢h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjþ¡ubjå)�”}”(hjºh]”hŒp”…”�”}”(hjY¢h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjþ¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj¡ubjÜ)�”}”(hŒstruct drm_event *e”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjq¢h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjm¢ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~¢h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjm¢ubh)�”}”(hhh]”jå)�”}”(hŒ drm_event”h]”hŒ drm_event”…”�”}”(hj�¢h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjŒ¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j‘¢Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jZ¡Œc.drm_event_reserve_init”†”asbuh1hhjm¢ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­¢h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjm¢ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj»¢h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjm¢ubjå)�”}”(hjÞh]”hŒe”…”�”}”(hjÈ¢h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjm¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj¡ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjß h²hh³jñ h´M¨ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjÛ h²hh³jñ h´M¨ubah}”(h]”jÖ ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jñ h´M¨hjØ h²hubj)�”}”(hhh]”hÎ)�”}”(hŒ)init a DRM event and reserve space for it”h]”hŒ)init a DRM event and reserve space for it”…”�”}”(hjñ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M¨hjî¢h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØ h²hh³jñ h´M¨ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j £j3j £j4‰j5‰j6‰uh1jªh²hhj§rh³Nh´Nubj8)�”}”(hXÞ**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_file *file_priv`` DRM file private data ``struct drm_pending_event *p`` tracking structure for the pending event ``struct drm_event *e`` actual event data to deliver to userspace **Description** This function prepares the passed in event for eventual delivery. If the event doesn't get delivered (because the IOCTL fails later on, before queuing up anything) then the even must be cancelled and freed using drm_event_cancel_free(). Successfully initialized events should be sent out using drm_send_event() or drm_send_event_locked() to signal completion of the asynchronous event to userspace. If callers embedded **p** into a larger structure it must be allocated with kmalloc and **p** must be the first member element. Callers which already hold :c:type:`drm_device.event_lock ` should use drm_event_reserve_init_locked() instead. **Return** 0 on success or a negative error code on failure.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj£h]”hŒ Parameters”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M¬hj £ubj„)�”}”(hhh]”(j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hj2£h]”hŒstruct drm_device *dev”…”�”}”(hj4£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj0£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M©hj,£ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hjK£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jG£h´M©hjH£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj,£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jG£h´M©hj)£ubj‰)�”}”(hŒ5``struct drm_file *file_priv`` DRM file private data ”h]”(j�)�”}”(hŒ``struct drm_file *file_priv``”h]”jî)�”}”(hjk£h]”hŒstruct drm_file *file_priv”…”�”}”(hjm£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhji£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mªhje£ubj©)�”}”(hhh]”hÎ)�”}”(hŒDRM file private data”h]”hŒDRM file private data”…”�”}”(hj„£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j€£h´Mªhj�£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hje£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j€£h´Mªhj)£ubj‰)�”}”(hŒI``struct drm_pending_event *p`` tracking structure for the pending event ”h]”(j�)�”}”(hŒ``struct drm_pending_event *p``”h]”jî)�”}”(hj¤£h]”hŒstruct drm_pending_event *p”…”�”}”(hj¦£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj¢£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M«hjž£ubj©)�”}”(hhh]”hÎ)�”}”(hŒ(tracking structure for the pending event”h]”hŒ(tracking structure for the pending event”…”�”}”(hj½£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j¹£h´M«hjº£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjž£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j¹£h´M«hj)£ubj‰)�”}”(hŒB``struct drm_event *e`` actual event data to deliver to userspace ”h]”(j�)�”}”(hŒ``struct drm_event *e``”h]”jî)�”}”(hjÝ£h]”hŒstruct drm_event *e”…”�”}”(hjߣh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÛ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M¬hj×£ubj©)�”}”(hhh]”hÎ)�”}”(hŒ)actual event data to deliver to userspace”h]”hŒ)actual event data to deliver to userspace”…”�”}”(hjö£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jò£h´M¬hjó£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj×£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jò£h´M¬hj)£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj £ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj¤h]”hŒ Description”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M®hj £ubhÎ)�”}”(hXŽThis function prepares the passed in event for eventual delivery. If the event doesn't get delivered (because the IOCTL fails later on, before queuing up anything) then the even must be cancelled and freed using drm_event_cancel_free(). Successfully initialized events should be sent out using drm_send_event() or drm_send_event_locked() to signal completion of the asynchronous event to userspace.”h]”hX�This function prepares the passed in event for eventual delivery. If the event doesn’t get delivered (because the IOCTL fails later on, before queuing up anything) then the even must be cancelled and freed using drm_event_cancel_free(). Successfully initialized events should be sent out using drm_send_event() or drm_send_event_locked() to signal completion of the asynchronous event to userspace.”…”�”}”(hj.¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M­hj £ubhÎ)�”}”(hŒIf callers embedded **p** into a larger structure it must be allocated with kmalloc and **p** must be the first member element.”h]”(hŒIf callers embedded ”…”�”}”(hj=¤h²hh³Nh´NubjB)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjE¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj=¤ubhŒ? into a larger structure it must be allocated with kmalloc and ”…”�”}”(hj=¤h²hh³Nh´NubjB)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjW¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj=¤ubhŒ" must be the first member element.”…”�”}”(hj=¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M´hj £ubhÎ)�”}”(hŒ{Callers which already hold :c:type:`drm_device.event_lock ` should use drm_event_reserve_init_locked() instead.”h]”(hŒCallers which already hold ”…”�”}”(hjp¤h²hh³Nh´Nubh)�”}”(hŒ,:c:type:`drm_device.event_lock `”h]”jî)�”}”(hjz¤h]”hŒdrm_device.event_lock”…”�”}”(hj|¤h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjx¤ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M·hjp¤ubhŒ4 should use drm_event_reserve_init_locked() instead.”…”�”}”(hjp¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j—¤h´M·hj £ubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hj¤¤h]”hŒReturn”…”�”}”(hj¦¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¢¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mºhj £ubhÎ)�”}”(hŒ10 on success or a negative error code on failure.”h]”hŒ10 on success or a negative error code on failure.”…”�”}”(hjº¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M»hj £ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ"drm_event_cancel_free (C function)”Œc.drm_event_cancel_free”hNt”auh1j™hj§rh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒPvoid drm_event_cancel_free (struct drm_device *dev, struct drm_pending_event *p)”h]”j¶)�”}”(hŒOvoid drm_event_cancel_free(struct drm_device *dev, struct drm_pending_event *p)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjé¤h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjå¤h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MÏubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø¤h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjå¤h²hh³j÷¤h´MÏubjß)�”}”(hŒdrm_event_cancel_free”h]”jå)�”}”(hŒdrm_event_cancel_free”h]”hŒdrm_event_cancel_free”…”�”}”(hj ¥h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¥ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjå¤h²hh³j÷¤h´MÏubjÖ)�”}”(hŒ5(struct drm_device *dev, struct drm_pending_event *p)”h]”(jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj&¥h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj"¥ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3¥h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj"¥ubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hjD¥h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjA¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jF¥Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j ¥sbŒc.drm_event_cancel_free”†”asbuh1hhj"¥ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjd¥h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj"¥ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjr¥h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj"¥ubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj"¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj¥ubjÜ)�”}”(hŒstruct drm_pending_event *p”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj˜¥h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj”¥ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥¥h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj”¥ubh)�”}”(hhh]”jå)�”}”(hŒdrm_pending_event”h]”hŒdrm_pending_event”…”�”}”(hj¶¥h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj³¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j¸¥Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j`¥Œc.drm_event_cancel_free”†”asbuh1hhj”¥ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ¥h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj”¥ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjâ¥h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj”¥ubjå)�”}”(hjºh]”hŒp”…”�”}”(hjï¥h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj”¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj¥ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjå¤h²hh³j÷¤h´MÏubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjá¤h²hh³j÷¤h´MÏubah}”(h]”jܤah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j÷¤h´MÏhjÞ¤h²hubj)�”}”(hhh]”hÎ)�”}”(hŒ&free a DRM event and release its space”h]”hŒ&free a DRM event and release its space”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MÏhj¦h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞ¤h²hh³j÷¤h´MÏubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j0¦j3j0¦j4‰j5‰j6‰uh1jªh²hhj§rh³Nh´Nubj8)�”}”(hXs**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_pending_event *p`` tracking structure for the pending event **Description** This function frees the event **p** initialized with drm_event_reserve_init() and releases any allocated space. It is used to cancel an event when the nonblocking operation could not be submitted and needed to be aborted.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj:¦h]”hŒ Parameters”…”�”}”(hj<¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj8¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MÓhj4¦ubj„)�”}”(hhh]”(j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hjY¦h]”hŒstruct drm_device *dev”…”�”}”(hj[¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjW¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MÐhjS¦ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hjr¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jn¦h´MÐhjo¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjS¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jn¦h´MÐhjP¦ubj‰)�”}”(hŒI``struct drm_pending_event *p`` tracking structure for the pending event ”h]”(j�)�”}”(hŒ``struct drm_pending_event *p``”h]”jî)�”}”(hj’¦h]”hŒstruct drm_pending_event *p”…”�”}”(hj”¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj�¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MÑhjŒ¦ubj©)�”}”(hhh]”hÎ)�”}”(hŒ(tracking structure for the pending event”h]”hŒ(tracking structure for the pending event”…”�”}”(hj«¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j§¦h´MÑhj¨¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjŒ¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j§¦h´MÑhjP¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj4¦ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjͦh]”hŒ Description”…”�”}”(hjϦh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj˦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MÓhj4¦ubhÎ)�”}”(hŒÝThis function frees the event **p** initialized with drm_event_reserve_init() and releases any allocated space. It is used to cancel an event when the nonblocking operation could not be submitted and needed to be aborted.”h]”(hŒThis function frees the event ”…”�”}”(hjã¦h²hh³Nh´NubjB)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjë¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjã¦ubhŒº initialized with drm_event_reserve_init() and releases any allocated space. It is used to cancel an event when the nonblocking operation could not be submitted and needed to be aborted.”…”�”}”(hjã¦h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MÒhj4¦ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ,drm_send_event_timestamp_locked (C function)”Œ!c.drm_send_event_timestamp_locked”hNt”auh1j™hj§rh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒmvoid drm_send_event_timestamp_locked (struct drm_device *dev, struct drm_pending_event *e, ktime_t timestamp)”h]”j¶)�”}”(hŒlvoid drm_send_event_timestamp_locked(struct drm_device *dev, struct drm_pending_event *e, ktime_t timestamp)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj$§h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj §h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3§h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj §h²hh³j2§h´M ubjß)�”}”(hŒdrm_send_event_timestamp_locked”h]”jå)�”}”(hŒdrm_send_event_timestamp_locked”h]”hŒdrm_send_event_timestamp_locked”…”�”}”(hjE§h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjA§ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj §h²hh³j2§h´M ubjÖ)�”}”(hŒH(struct drm_device *dev, struct drm_pending_event *e, ktime_t timestamp)”h]”(jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hja§h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj]§ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn§h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj]§ubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj|§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j�§Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jG§sbŒ!c.drm_send_event_timestamp_locked”†”asbuh1hhj]§ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ§h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj]§ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj­§h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj]§ubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjº§h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj]§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjY§ubjÜ)�”}”(hŒstruct drm_pending_event *e”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjÓ§h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjϧubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà§h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjϧubh)�”}”(hhh]”jå)�”}”(hŒdrm_pending_event”h]”hŒdrm_pending_event”…”�”}”(hjñ§h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjî§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jó§Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j›§Œ!c.drm_send_event_timestamp_locked”†”asbuh1hhjϧubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjϧubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjϧubjå)�”}”(hjÞh]”hŒe”…”�”}”(hj*¨h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjϧubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjY§ubjÜ)�”}”(hŒktime_t timestamp”h]”(h)�”}”(hhh]”jå)�”}”(hŒktime_t”h]”hŒktime_t”…”�”}”(hjE¨h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjB¨ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jG¨Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j›§Œ!c.drm_send_event_timestamp_locked”†”asbuh1hhj>¨ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc¨h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj>¨ubjå)�”}”(hŒ timestamp”h]”hŒ timestamp”…”�”}”(hjq¨h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj>¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjY§ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj §h²hh³j2§h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj§h²hh³j2§h´M ubah}”(h]”j§ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j2§h´M hj§h²hubj)�”}”(hhh]”hÎ)�”}”(hŒ!send DRM event to file descriptor”h]”hŒ!send DRM event to file descriptor”…”�”}”(hj›¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M hj˜¨h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§h²hh³j2§h´M ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j³¨j3j³¨j4‰j5‰j6‰uh1jªh²hhj§rh³Nh´Nubj8)�”}”(hXº**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_pending_event *e`` DRM event to deliver ``ktime_t timestamp`` timestamp to set for the fence event in kernel's CLOCK_MONOTONIC time domain **Description** This function sends the event **e**, initialized with drm_event_reserve_init(), to its associated userspace DRM file. Callers must already hold :c:type:`drm_device.event_lock `. Note that the core will take care of unlinking and disarming events when the corresponding DRM file is closed. Drivers need not worry about whether the DRM file for this event still exists and can call this function upon completion of the asynchronous work unconditionally.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj½¨h]”hŒ Parameters”…”�”}”(hj¿¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj»¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mhj·¨ubj„)�”}”(hhh]”(j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hjܨh]”hŒstruct drm_device *dev”…”�”}”(hjÞ¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÚ¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M hjÖ¨ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hjõ¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jñ¨h´M hjò¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÖ¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jñ¨h´M hjÓ¨ubj‰)�”}”(hŒ5``struct drm_pending_event *e`` DRM event to deliver ”h]”(j�)�”}”(hŒ``struct drm_pending_event *e``”h]”jî)�”}”(hj©h]”hŒstruct drm_pending_event *e”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M hj©ubj©)�”}”(hhh]”hÎ)�”}”(hŒDRM event to deliver”h]”hŒDRM event to deliver”…”�”}”(hj.©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j*©h´M hj+©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j*©h´M hjÓ¨ubj‰)�”}”(hŒc``ktime_t timestamp`` timestamp to set for the fence event in kernel's CLOCK_MONOTONIC time domain ”h]”(j�)�”}”(hŒ``ktime_t timestamp``”h]”jî)�”}”(hjN©h]”hŒktime_t timestamp”…”�”}”(hjP©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjL©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MhjH©ubj©)�”}”(hhh]”hÎ)�”}”(hŒLtimestamp to set for the fence event in kernel's CLOCK_MONOTONIC time domain”h]”hŒNtimestamp to set for the fence event in kernel’s CLOCK_MONOTONIC time domain”…”�”}”(hjg©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M hjd©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjH©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jc©h´MhjÓ¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj·¨ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjŠ©h]”hŒ Description”…”�”}”(hjŒ©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjˆ©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mhj·¨ubhÎ)�”}”(hŒ½This function sends the event **e**, initialized with drm_event_reserve_init(), to its associated userspace DRM file. Callers must already hold :c:type:`drm_device.event_lock `.”h]”(hŒThis function sends the event ”…”�”}”(hj ©h²hh³Nh´NubjB)�”}”(hŒ**e**”h]”hŒe”…”�”}”(hj¨©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj ©ubhŒm, initialized with drm_event_reserve_init(), to its associated userspace DRM file. Callers must already hold ”…”�”}”(hj ©h²hh³Nh´Nubh)�”}”(hŒ,:c:type:`drm_device.event_lock `”h]”jî)�”}”(hj¼©h]”hŒdrm_device.event_lock”…”�”}”(hj¾©h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjº©ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mhj ©ubhŒ.”…”�”}”(hj ©h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÙ©h´Mhj·¨ubhÎ)�”}”(hXNote that the core will take care of unlinking and disarming events when the corresponding DRM file is closed. Drivers need not worry about whether the DRM file for this event still exists and can call this function upon completion of the asynchronous work unconditionally.”h]”hXNote that the core will take care of unlinking and disarming events when the corresponding DRM file is closed. Drivers need not worry about whether the DRM file for this event still exists and can call this function upon completion of the asynchronous work unconditionally.”…”�”}”(hjä©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mhj·¨ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ"drm_send_event_locked (C function)”Œc.drm_send_event_locked”hNt”auh1j™hj§rh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒPvoid drm_send_event_locked (struct drm_device *dev, struct drm_pending_event *e)”h]”j¶)�”}”(hŒOvoid drm_send_event_locked(struct drm_device *dev, struct drm_pending_event *e)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjªh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M!ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"ªh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjªh²hh³j!ªh´M!ubjß)�”}”(hŒdrm_send_event_locked”h]”jå)�”}”(hŒdrm_send_event_locked”h]”hŒdrm_send_event_locked”…”�”}”(hj4ªh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj0ªubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjªh²hh³j!ªh´M!ubjÖ)�”}”(hŒ5(struct drm_device *dev, struct drm_pending_event *e)”h]”(jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjPªh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjLªubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]ªh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjLªubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hjnªh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjkªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jpªŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j6ªsbŒc.drm_send_event_locked”†”asbuh1hhjLªubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽªh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjLªubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjœªh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjLªubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj©ªh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjLªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjHªubjÜ)�”}”(hŒstruct drm_pending_event *e”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj¾ªubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjϪh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj¾ªubh)�”}”(hhh]”jå)�”}”(hŒdrm_pending_event”h]”hŒdrm_pending_event”…”�”}”(hjàªh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjݪubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j⪌modname”NŒ classname”NjÔ j× )�”}”jÚ ]”jŠªŒc.drm_send_event_locked”†”asbuh1hhj¾ªubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþªh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj¾ªubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj «h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj¾ªubjå)�”}”(hjÞh]”hŒe”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¾ªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjHªubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjªh²hh³j!ªh´M!ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj ªh²hh³j!ªh´M!ubah}”(h]”jªah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j!ªh´M!hjªh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ!send DRM event to file descriptor”h]”hŒ!send DRM event to file descriptor”…”�”}”(hjB«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M!hj?«h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªh²hh³j!ªh´M!ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jZ«j3jZ«j4‰j5‰j6‰uh1jªh²hhj§rh³Nh´Nubj8)�”}”(hX�**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_pending_event *e`` DRM event to deliver **Description** This function sends the event **e**, initialized with drm_event_reserve_init(), to its associated userspace DRM file. Callers must already hold :c:type:`drm_device.event_lock `, see drm_send_event() for the unlocked version. Note that the core will take care of unlinking and disarming events when the corresponding DRM file is closed. Drivers need not worry about whether the DRM file for this event still exists and can call this function upon completion of the asynchronous work unconditionally.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjd«h]”hŒ Parameters”…”�”}”(hjf«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjb«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M%hj^«ubj„)�”}”(hhh]”(j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hjƒ«h]”hŒstruct drm_device *dev”…”�”}”(hj…«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj�«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M"hj}«ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hjœ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j˜«h´M"hj™«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj}«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j˜«h´M"hjz«ubj‰)�”}”(hŒ5``struct drm_pending_event *e`` DRM event to deliver ”h]”(j�)�”}”(hŒ``struct drm_pending_event *e``”h]”jî)�”}”(hj¼«h]”hŒstruct drm_pending_event *e”…”�”}”(hj¾«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjº«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M#hj¶«ubj©)�”}”(hhh]”hÎ)�”}”(hŒDRM event to deliver”h]”hŒDRM event to deliver”…”�”}”(hjÕ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÑ«h´M#hjÒ«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¶«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÑ«h´M#hjz«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj^«ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj÷«h]”hŒ Description”…”�”}”(hjù«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjõ«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M%hj^«ubhÎ)�”}”(hŒìThis function sends the event **e**, initialized with drm_event_reserve_init(), to its associated userspace DRM file. Callers must already hold :c:type:`drm_device.event_lock `, see drm_send_event() for the unlocked version.”h]”(hŒThis function sends the event ”…”�”}”(hj ¬h²hh³Nh´NubjB)�”}”(hŒ**e**”h]”hŒe”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj ¬ubhŒm, initialized with drm_event_reserve_init(), to its associated userspace DRM file. Callers must already hold ”…”�”}”(hj ¬h²hh³Nh´Nubh)�”}”(hŒ,:c:type:`drm_device.event_lock `”h]”jî)�”}”(hj)¬h]”hŒdrm_device.event_lock”…”�”}”(hj+¬h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj'¬ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M$hj ¬ubhŒ0, see drm_send_event() for the unlocked version.”…”�”}”(hj ¬h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jF¬h´M$hj^«ubhÎ)�”}”(hXNote that the core will take care of unlinking and disarming events when the corresponding DRM file is closed. Drivers need not worry about whether the DRM file for this event still exists and can call this function upon completion of the asynchronous work unconditionally.”h]”hXNote that the core will take care of unlinking and disarming events when the corresponding DRM file is closed. Drivers need not worry about whether the DRM file for this event still exists and can call this function upon completion of the asynchronous work unconditionally.”…”�”}”(hjQ¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M(hj^«ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_send_event (C function)”Œc.drm_send_event”hNt”auh1j™hj§rh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒIvoid drm_send_event (struct drm_device *dev, struct drm_pending_event *e)”h]”j¶)�”}”(hŒHvoid drm_send_event(struct drm_device *dev, struct drm_pending_event *e)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj€¬h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj|¬h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M5ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�¬h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj|¬h²hh³jެh´M5ubjß)�”}”(hŒdrm_send_event”h]”jå)�”}”(hŒdrm_send_event”h]”hŒdrm_send_event”…”�”}”(hj¡¬h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj�¬ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj|¬h²hh³jެh´M5ubjÖ)�”}”(hŒ5(struct drm_device *dev, struct drm_pending_event *e)”h]”(jÜ)�”}”(hŒstruct drm_device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj½¬h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj¹¬ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjʬh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj¹¬ubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hjÛ¬h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjجubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jݬŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j£¬sbŒc.drm_send_event”†”asbuh1hhj¹¬ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû¬h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj¹¬ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj ­h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj¹¬ubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¹¬ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjµ¬ubjÜ)�”}”(hŒstruct drm_pending_event *e”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj/­h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj+­ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<­h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj+­ubh)�”}”(hhh]”jå)�”}”(hŒdrm_pending_event”h]”hŒdrm_pending_event”…”�”}”(hjM­h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjJ­ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jO­Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j÷¬Œc.drm_send_event”†”asbuh1hhj+­ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk­h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj+­ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjy­h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj+­ubjå)�”}”(hjÞh]”hŒe”…”�”}”(hj†­h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj+­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjµ¬ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj|¬h²hh³jެh´M5ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjx¬h²hh³jެh´M5ubah}”(h]”js¬ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jެh´M5hju¬h²hubj)�”}”(hhh]”hÎ)�”}”(hŒ!send DRM event to file descriptor”h]”hŒ!send DRM event to file descriptor”…”�”}”(hj¯­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M5hj¬­h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhju¬h²hh³jެh´M5ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jÇ­j3jÇ­j4‰j5‰j6‰uh1jªh²hhj§rh³Nh´Nubj8)�”}”(hX•**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_pending_event *e`` DRM event to deliver **Description** This function sends the event **e**, initialized with drm_event_reserve_init(), to its associated userspace DRM file. This function acquires :c:type:`drm_device.event_lock `, see drm_send_event_locked() for callers which already hold this lock. Note that the core will take care of unlinking and disarming events when the corresponding DRM file is closed. Drivers need not worry about whether the DRM file for this event still exists and can call this function upon completion of the asynchronous work unconditionally.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjÑ­h]”hŒ Parameters”…”�”}”(hjÓ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÏ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M9hjË­ubj„)�”}”(hhh]”(j‰)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j�)�”}”(hŒ``struct drm_device *dev``”h]”jî)�”}”(hjð­h]”hŒstruct drm_device *dev”…”�”}”(hjò­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjî­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M6hjê­ubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hj ®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j®h´M6hj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjê­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j®h´M6hjç­ubj‰)�”}”(hŒ5``struct drm_pending_event *e`` DRM event to deliver ”h]”(j�)�”}”(hŒ``struct drm_pending_event *e``”h]”jî)�”}”(hj)®h]”hŒstruct drm_pending_event *e”…”�”}”(hj+®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj'®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M7hj#®ubj©)�”}”(hhh]”hÎ)�”}”(hŒDRM event to deliver”h]”hŒDRM event to deliver”…”�”}”(hjB®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j>®h´M7hj?®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj#®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j>®h´M7hjç­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjË­ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjd®h]”hŒ Description”…”�”}”(hjf®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjb®ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M9hjË­ubhÎ)�”}”(hXThis function sends the event **e**, initialized with drm_event_reserve_init(), to its associated userspace DRM file. This function acquires :c:type:`drm_device.event_lock `, see drm_send_event_locked() for callers which already hold this lock.”h]”(hŒThis function sends the event ”…”�”}”(hjz®h²hh³Nh´NubjB)�”}”(hŒ**e**”h]”hŒe”…”�”}”(hj‚®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjz®ubhŒj, initialized with drm_event_reserve_init(), to its associated userspace DRM file. This function acquires ”…”�”}”(hjz®h²hh³Nh´Nubh)�”}”(hŒ,:c:type:`drm_device.event_lock `”h]”jî)�”}”(hj–®h]”hŒdrm_device.event_lock”…”�”}”(hj˜®h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj”®ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M8hjz®ubhŒG, see drm_send_event_locked() for callers which already hold this lock.”…”�”}”(hjz®h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j³®h´M8hjË­ubhÎ)�”}”(hXNote that the core will take care of unlinking and disarming events when the corresponding DRM file is closed. Drivers need not worry about whether the DRM file for this event still exists and can call this function upon completion of the asynchronous work unconditionally.”h]”hXNote that the core will take care of unlinking and disarming events when the corresponding DRM file is closed. Drivers need not worry about whether the DRM file for this event still exists and can call this function upon completion of the asynchronous work unconditionally.”…”�”}”(hj¾®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M=hjË­ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ#drm_print_memory_stats (C function)”Œc.drm_print_memory_stats”hNt”auh1j™hj§rh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒšvoid drm_print_memory_stats (struct drm_printer *p, const struct drm_memory_stats *stats, enum drm_gem_object_status supported_status, const char *region)”h]”j¶)�”}”(hŒ™void drm_print_memory_stats(struct drm_printer *p, const struct drm_memory_stats *stats, enum drm_gem_object_status supported_status, const char *region)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjí®h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjé®h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MlubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü®h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjé®h²hh³jû®h´Mlubjß)�”}”(hŒdrm_print_memory_stats”h]”jå)�”}”(hŒdrm_print_memory_stats”h]”hŒdrm_print_memory_stats”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj ¯ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjé®h²hh³jû®h´MlubjÖ)�”}”(hŒ~(struct drm_printer *p, const struct drm_memory_stats *stats, enum drm_gem_object_status supported_status, const char *region)”h]”(jÜ)�”}”(hŒstruct drm_printer *p”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj*¯h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj&¯ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7¯h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj&¯ubh)�”}”(hhh]”jå)�”}”(hŒ drm_printer”h]”hŒ drm_printer”…”�”}”(hjH¯h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjE¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jJ¯Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j¯sbŒc.drm_print_memory_stats”†”asbuh1hhj&¯ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh¯h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj&¯ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjv¯h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj&¯ubjå)�”}”(hjºh]”hŒp”…”�”}”(hjƒ¯h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj&¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj"¯ubjÜ)�”}”(hŒ$const struct drm_memory_stats *stats”h]”(j¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hj›¯h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj—¯ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨¯h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj—¯ubj¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj¶¯h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj—¯ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj—¯ubh)�”}”(hhh]”jå)�”}”(hŒdrm_memory_stats”h]”hŒdrm_memory_stats”…”�”}”(hjÔ¯h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjѯubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jÖ¯Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jd¯Œc.drm_print_memory_stats”†”asbuh1hhj—¯ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò¯h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj—¯ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj—¯ubjå)�”}”(hŒstats”h]”hŒstats”…”�”}”(hj °h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj—¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj"¯ubjÜ)�”}”(hŒ+enum drm_gem_object_status supported_status”h]”(j¼)�”}”(hj) h]”hŒenum”…”�”}”(hj&°h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj"°ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3°h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj"°ubh)�”}”(hhh]”jå)�”}”(hŒdrm_gem_object_status”h]”hŒdrm_gem_object_status”…”�”}”(hjD°h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjA°ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jF°Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jd¯Œc.drm_print_memory_stats”†”asbuh1hhj"°ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb°h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj"°ubjå)�”}”(hŒsupported_status”h]”hŒsupported_status”…”�”}”(hjp°h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj"°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj"¯ubjÜ)�”}”(hŒconst char *region”h]”(j¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hj‰°h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj…°ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–°h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj…°ubjŠ-)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj¤°h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj…°ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²°h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj…°ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjÀ°h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj…°ubjå)�”}”(hŒregion”h]”hŒregion”…”�”}”(hjͰh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj…°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj"¯ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjé®h²hh³jû®h´Mlubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjå®h²hh³jû®h´Mlubah}”(h]”jà®ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jû®h´Mlhjâ®h²hubj)�”}”(hhh]”hÎ)�”}”(hŒA helper to print memory stats”h]”hŒA helper to print memory stats”…”�”}”(hj÷°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mlhjô°h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâ®h²hh³jû®h´Mlubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j±j3j±j4‰j5‰j6‰uh1jªh²hhj§rh³Nh´Nubj8)�”}”(hX**Parameters** ``struct drm_printer *p`` The printer to print output to ``const struct drm_memory_stats *stats`` The collected memory stats ``enum drm_gem_object_status supported_status`` Bitmask of optional stats which are available ``const char *region`` The memory region”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj±h]”hŒ Parameters”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mphj±ubj„)�”}”(hhh]”(j‰)�”}”(hŒ9``struct drm_printer *p`` The printer to print output to ”h]”(j�)�”}”(hŒ``struct drm_printer *p``”h]”jî)�”}”(hj8±h]”hŒstruct drm_printer *p”…”�”}”(hj:±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj6±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mmhj2±ubj©)�”}”(hhh]”hÎ)�”}”(hŒThe printer to print output to”h]”hŒThe printer to print output to”…”�”}”(hjQ±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jM±h´MmhjN±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj2±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jM±h´Mmhj/±ubj‰)�”}”(hŒD``const struct drm_memory_stats *stats`` The collected memory stats ”h]”(j�)�”}”(hŒ(``const struct drm_memory_stats *stats``”h]”jî)�”}”(hjq±h]”hŒ$const struct drm_memory_stats *stats”…”�”}”(hjs±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjo±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mnhjk±ubj©)�”}”(hhh]”hÎ)�”}”(hŒThe collected memory stats”h]”hŒThe collected memory stats”…”�”}”(hjбh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j†±h´Mnhj‡±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjk±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j†±h´Mnhj/±ubj‰)�”}”(hŒ^``enum drm_gem_object_status supported_status`` Bitmask of optional stats which are available ”h]”(j�)�”}”(hŒ/``enum drm_gem_object_status supported_status``”h]”jî)�”}”(hjª±h]”hŒ+enum drm_gem_object_status supported_status”…”�”}”(hj¬±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj¨±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mohj¤±ubj©)�”}”(hhh]”hÎ)�”}”(hŒ-Bitmask of optional stats which are available”h]”hŒ-Bitmask of optional stats which are available”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j¿±h´MohjÀ±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¤±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j¿±h´Mohj/±ubj‰)�”}”(hŒ(``const char *region`` The memory region”h]”(j�)�”}”(hŒ``const char *region``”h]”jî)�”}”(hjã±h]”hŒconst char *region”…”�”}”(hjå±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjá±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mqhjݱubj©)�”}”(hhh]”hÎ)�”}”(hŒThe memory region”h]”hŒThe memory region”…”�”}”(hjü±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mphjù±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjݱubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jø±h´Mqhj/±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj±ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ"drm_show_memory_stats (C function)”Œc.drm_show_memory_stats”hNt”auh1j™hj§rh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒIvoid drm_show_memory_stats (struct drm_printer *p, struct drm_file *file)”h]”j¶)�”}”(hŒHvoid drm_show_memory_stats(struct drm_printer *p, struct drm_file *file)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj=²h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj9²h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MŒubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL²h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj9²h²hh³jK²h´MŒubjß)�”}”(hŒdrm_show_memory_stats”h]”jå)�”}”(hŒdrm_show_memory_stats”h]”hŒdrm_show_memory_stats”…”�”}”(hj^²h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjZ²ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj9²h²hh³jK²h´MŒubjÖ)�”}”(hŒ.(struct drm_printer *p, struct drm_file *file)”h]”(jÜ)�”}”(hŒstruct drm_printer *p”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjz²h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjv²ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡²h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjv²ubh)�”}”(hhh]”jå)�”}”(hŒ drm_printer”h]”hŒ drm_printer”…”�”}”(hj˜²h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj•²ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jš²Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j`²sbŒc.drm_show_memory_stats”†”asbuh1hhjv²ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸²h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjv²ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjƲh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjv²ubjå)�”}”(hjºh]”hŒp”…”�”}”(hjÓ²h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjv²ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjr²ubjÜ)�”}”(hŒstruct drm_file *file”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjë²h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjç²ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø²h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjç²ubh)�”}”(hhh]”jå)�”}”(hŒdrm_file”h]”hŒdrm_file”…”�”}”(hj ³h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj³ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j ³Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j´²Œc.drm_show_memory_stats”†”asbuh1hhjç²ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'³h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjç²ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj5³h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjç²ubjå)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjB³h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjç²ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjr²ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj9²h²hh³jK²h´MŒubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj5²h²hh³jK²h´MŒubah}”(h]”j0²ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jK²h´MŒhj2²h²hubj)�”}”(hhh]”hÎ)�”}”(hŒ7Helper to collect and show standard fdinfo memory stats”h]”hŒ7Helper to collect and show standard fdinfo memory stats”…”�”}”(hjl³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MŒhji³h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2²h²hh³jK²h´MŒubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j„³j3j„³j4‰j5‰j6‰uh1jªh²hhj§rh³Nh´Nubj8)�”}”(hŒØ**Parameters** ``struct drm_printer *p`` the printer to print output to ``struct drm_file *file`` the DRM file **Description** Helper to iterate over GEM objects with a handle allocated in the specified file.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj޳h]”hŒ Parameters”…”�”}”(hj�³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjŒ³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M�hjˆ³ubj„)�”}”(hhh]”(j‰)�”}”(hŒ9``struct drm_printer *p`` the printer to print output to ”h]”(j�)�”}”(hŒ``struct drm_printer *p``”h]”jî)�”}”(hj­³h]”hŒstruct drm_printer *p”…”�”}”(hj¯³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj«³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M�hj§³ubj©)�”}”(hhh]”hÎ)�”}”(hŒthe printer to print output to”h]”hŒthe printer to print output to”…”�”}”(hjƳh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j³h´M�hjóubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj§³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j³h´M�hj¤³ubj‰)�”}”(hŒ'``struct drm_file *file`` the DRM file ”h]”(j�)�”}”(hŒ``struct drm_file *file``”h]”jî)�”}”(hjæ³h]”hŒstruct drm_file *file”…”�”}”(hjè³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjä³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MŽhjà³ubj©)�”}”(hhh]”hÎ)�”}”(hŒ the DRM file”h]”hŒ the DRM file”…”�”}”(hjÿ³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jû³h´MŽhjü³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjà³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jû³h´MŽhj¤³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjˆ³ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj!´h]”hŒ Description”…”�”}”(hj#´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M�hjˆ³ubhÎ)�”}”(hŒQHelper to iterate over GEM objects with a handle allocated in the specified file.”h]”hŒQHelper to iterate over GEM objects with a handle allocated in the specified file.”…”�”}”(hj7´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´M�hjˆ³ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_show_fdinfo (C function)”Œc.drm_show_fdinfo”hNt”auh1j™hj§rh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ9void drm_show_fdinfo (struct seq_file *m, struct file *f)”h]”j¶)�”}”(hŒ8void drm_show_fdinfo(struct seq_file *m, struct file *f)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjf´h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjb´h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MÅubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju´h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjb´h²hh³jt´h´MÅubjß)�”}”(hŒdrm_show_fdinfo”h]”jå)�”}”(hŒdrm_show_fdinfo”h]”hŒdrm_show_fdinfo”…”�”}”(hj‡´h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjƒ´ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjb´h²hh³jt´h´MÅubjÖ)�”}”(hŒ$(struct seq_file *m, struct file *f)”h]”(jÜ)�”}”(hŒstruct seq_file *m”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj£´h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjŸ´ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°´h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjŸ´ubh)�”}”(hhh]”jå)�”}”(hŒseq_file”h]”hŒseq_file”…”�”}”(hjÁ´h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¾´ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jôŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j‰´sbŒc.drm_show_fdinfo”†”asbuh1hhjŸ´ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá´h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjŸ´ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjï´h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjŸ´ubjå)�”}”(hŒm”h]”hŒm”…”�”}”(hjü´h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjŸ´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj›´ubjÜ)�”}”(hŒstruct file *f”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjµubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"µh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjµubh)�”}”(hhh]”jå)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj3µh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj0µubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j5µŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jÝ´Œc.drm_show_fdinfo”†”asbuh1hhjµubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQµh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjµubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj_µh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjµubjå)�”}”(hŒf”h]”hŒf”…”�”}”(hjlµh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjµubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj›´ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjb´h²hh³jt´h´MÅubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj^´h²hh³jt´h´MÅubah}”(h]”jY´ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jt´h´MÅhj[´h²hubj)�”}”(hhh]”hÎ)�”}”(hŒhelper for drm file fops”h]”hŒhelper for drm file fops”…”�”}”(hj–µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MÅhj“µh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[´h²hh³jt´h´MÅubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j®µj3j®µj4‰j5‰j6‰uh1jªh²hhj§rh³Nh´Nubj8)�”}”(hXf**Parameters** ``struct seq_file *m`` output stream ``struct file *f`` the device file instance **Description** Helper to implement fdinfo, for userspace to query usage stats, etc, of a process using the GPU. See also :c:type:`drm_driver.show_fdinfo `. For text output format description please see Documentation/gpu/drm-usage-stats.rst”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj¸µh]”hŒ Parameters”…”�”}”(hjºµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¶µubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MÉhj²µubj„)�”}”(hhh]”(j‰)�”}”(hŒ%``struct seq_file *m`` output stream ”h]”(j�)�”}”(hŒ``struct seq_file *m``”h]”jî)�”}”(hj×µh]”hŒstruct seq_file *m”…”�”}”(hjÙµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÕµubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MÆhjѵubj©)�”}”(hhh]”hÎ)�”}”(hŒ output stream”h]”hŒ output stream”…”�”}”(hjðµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jìµh´MÆhjíµubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjѵubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jìµh´MÆhjεubj‰)�”}”(hŒ,``struct file *f`` the device file instance ”h]”(j�)�”}”(hŒ``struct file *f``”h]”jî)�”}”(hj¶h]”hŒstruct file *f”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MÇhj ¶ubj©)�”}”(hhh]”hÎ)�”}”(hŒthe device file instance”h]”hŒthe device file instance”…”�”}”(hj)¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j%¶h´MÇhj&¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj ¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j%¶h´MÇhjεubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj²µubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjK¶h]”hŒ Description”…”�”}”(hjM¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjI¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MÉhj²µubhÎ)�”}”(hŒ™Helper to implement fdinfo, for userspace to query usage stats, etc, of a process using the GPU. See also :c:type:`drm_driver.show_fdinfo `.”h]”(hŒkHelper to implement fdinfo, for userspace to query usage stats, etc, of a process using the GPU. See also ”…”�”}”(hja¶h²hh³Nh´Nubh)�”}”(hŒ-:c:type:`drm_driver.show_fdinfo `”h]”jî)�”}”(hjk¶h]”hŒdrm_driver.show_fdinfo”…”�”}”(hjm¶h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhji¶ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_driver”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MÈhja¶ubhŒ.”…”�”}”(hja¶h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jˆ¶h´MÈhj²µubhÎ)�”}”(hŒSFor text output format description please see Documentation/gpu/drm-usage-stats.rst”h]”hŒSFor text output format description please see Documentation/gpu/drm-usage-stats.rst”…”�”}”(hj“¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´MËhj²µubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_file_err (C function)”Œc.drm_file_err”hNt”auh1j™hj§rh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒDvoid drm_file_err (struct drm_file *file_priv, const char *fmt, ...)”h]”j¶)�”}”(hŒCvoid drm_file_err(struct drm_file *file_priv, const char *fmt, ...)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj¾¶h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”•h´MðubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjѶh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj¾¶h²hh³jжh´Mðubjß)�”}”(hŒ drm_file_err”h]”jå)�”}”(hŒ drm_file_err”h]”hŒ drm_file_err”…”�”}”(hjã¶h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjß¶ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj¾¶h²hh³jжh´MðubjÖ)�”}”(hŒ2(struct drm_file *file_priv, const char *fmt, ...)”h]”(jÜ)�”}”(hŒstruct drm_file *file_priv”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjÿ¶h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjû¶ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ·h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjû¶ubh)�”}”(hhh]”jå)�”}”(hŒdrm_file”h]”hŒdrm_file”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj·ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j·Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jå¶sbŒc.drm_file_err”†”asbuh1hhjû¶ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=·h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjû¶ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjK·h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjû¶ubjå)�”}”(hŒ file_priv”h]”hŒ file_priv”…”�”}”(hjX·h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjû¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj÷¶ubjÜ)�”}”(hŒconst char *fmt”h]”(j¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hjq·h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjm·ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~·h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjm·ubjŠ-)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjŒ·h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjm·ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš·h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjm·ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj¨·h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjm·ubjå)�”}”(hŒfmt”h]”hŒfmt”…”�”}”(hjµ·h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjm·ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj÷¶ubjÜ)�”}”(hŒ...”h]”j®)�”}”(hŒ...”h]”hŒ...”…”�”}”(hjηh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjÊ·ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj÷¶ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj¾¶h²hh³jжh´Mðubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjº¶h²hh³jжh´Mðubah}”(h]”jµ¶ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jжh´Mðhj·¶h²hubj)�”}”(hhh]”hÎ)�”}”(hŒ@log process name, pid and client_name associated with a drm_file”h]”hŒ@log process name, pid and client_name associated with a drm_file”…”�”}”(hjø·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mðhjõ·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·¶h²hh³jжh´Mðubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j¸j3j¸j4‰j5‰j6‰uh1jªh²hhj§rh³Nh´Nubj8)�”}”(hX.**Parameters** ``struct drm_file *file_priv`` context of interest for process name and pid ``const char *fmt`` printf() like format string ``...`` variable arguments **Description** Helper function for clients which needs to log process details such as name and pid etc along with user logs.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj¸h]”hŒ Parameters”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Môhj¸ubj„)�”}”(hhh]”(j‰)�”}”(hŒL``struct drm_file *file_priv`` context of interest for process name and pid ”h]”(j�)�”}”(hŒ``struct drm_file *file_priv``”h]”jî)�”}”(hj9¸h]”hŒstruct drm_file *file_priv”…”�”}”(hj;¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj7¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mñhj3¸ubj©)�”}”(hhh]”hÎ)�”}”(hŒ,context of interest for process name and pid”h]”hŒ,context of interest for process name and pid”…”�”}”(hjR¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jN¸h´MñhjO¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj3¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jN¸h´Mñhj0¸ubj‰)�”}”(hŒ0``const char *fmt`` printf() like format string ”h]”(j�)�”}”(hŒ``const char *fmt``”h]”jî)�”}”(hjr¸h]”hŒconst char *fmt”…”�”}”(hjt¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjp¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Mòhjl¸ubj©)�”}”(hhh]”hÎ)�”}”(hŒprintf() like format string”h]”hŒprintf() like format string”…”�”}”(hj‹¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j‡¸h´Mòhjˆ¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjl¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j‡¸h´Mòhj0¸ubj‰)�”}”(hŒ``...`` variable arguments ”h]”(j�)�”}”(hŒ``...``”h]”jî)�”}”(hj«¸h]”hŒ...”…”�”}”(hj­¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj©¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Khj¥¸ubj©)�”}”(hhh]”hÎ)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hjĸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÀ¸h´KhjÁ¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¥¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÀ¸h´Khj0¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj¸ubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjæ¸h]”hŒ Description”…”�”}”(hjè¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjä¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Khj¸ubhÎ)�”}”(hŒmHelper function for clients which needs to log process details such as name and pid etc along with user logs.”h]”hŒmHelper function for clients which needs to log process details such as name and pid etc along with user logs.”…”�”}”(hjü¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:154: ./drivers/gpu/drm/drm_file.c”h´Móhj¸ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj§rh²hh³Nh´Nubeh}”(h]”(j$j¦reh ]”h"]”(Œfile operations”Œdrm_driver_fops”eh$]”h&]”uh1hµhj‰rh²hh³hÌh´K’Œexpect_referenced_by_name”}”j¹jœrsŒexpect_referenced_by_id”}”j¦rjœrsubeh}”(h]”jah ]”h"]”Œ&open/close, file operations and ioctls”ah$]”h&]”uh1hµhh·h²hh³hÌh´K�ubh¶)�”}”(hhh]”(h»)�”}”(hŒMisc Utilities”h]”hŒMisc Utilities”…”�”}”(hj(¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊjLuh1hºhj%¹h²hh³hÌh´Kžubh¶)�”}”(hhh]”(h»)�”}”(hŒPrinter”h]”hŒPrinter”…”�”}”(hj9¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊjkuh1hºhj6¹h²hh³hÌh´K¡ubhÎ)�”}”(hŒ}A simple wrapper for dev_printk(), seq_printf(), etc. Allows same debug code to be used for both debugfs and printk logging.”h]”hŒ}A simple wrapper for dev_printk(), seq_printf(), etc. Allows same debug code to be used for both debugfs and printk logging.”…”�”}”(hjG¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:163: ./include/drm/drm_print.h”h´K-hj6¹h²hubhÎ)�”}”(hŒ For example::”h]”hŒ For example:”…”�”}”(hjV¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:163: ./include/drm/drm_print.h”h´K0hj6¹h²hubj)�”}”(hX’void log_some_info(struct drm_printer *p) { drm_printf(p, "foo=%d\n", foo); drm_printf(p, "bar=%d\n", bar); } #ifdef CONFIG_DEBUG_FS void debugfs_show(struct seq_file *f) { struct drm_printer p = drm_seq_file_printer(f); log_some_info(&p); } #endif void some_other_function(...) { struct drm_printer p = drm_info_printer(drm->dev); log_some_info(&p); }”h]”hX’void log_some_info(struct drm_printer *p) { drm_printf(p, "foo=%d\n", foo); drm_printf(p, "bar=%d\n", bar); } #ifdef CONFIG_DEBUG_FS void debugfs_show(struct seq_file *f) { struct drm_printer p = drm_seq_file_printer(f); log_some_info(&p); } #endif void some_other_function(...) { struct drm_printer p = drm_info_printer(drm->dev); log_some_info(&p); }”…”�”}”hje¹sbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:163: ./include/drm/drm_print.h”h´K2hj6¹h²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_debug_category (C enum)”Œc.drm_debug_category”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒdrm_debug_category”h]”j¶)�”}”(hŒenum drm_debug_category”h]”(j¼)�”}”(hj) h]”hŒenum”…”�”}”(hj�¹h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj‰¹h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›¹h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj‰¹h²hh³jš¹h´Kubjß)�”}”(hŒdrm_debug_category”h]”jå)�”}”(hj‡¹h]”hŒdrm_debug_category”…”�”}”(hj­¹h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj©¹ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj‰¹h²hh³jš¹h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj…¹h²hh³jš¹h´Kubah}”(h]”j€¹ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jš¹h´Khj‚¹h²hubj)�”}”(hhh]”hÎ)�”}”(hŒThe DRM debug categories”h]”hŒThe DRM debug categories”…”�”}”(hjϹh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KJhj̹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚¹h²hh³jš¹h´Kubeh}”(h]”h ]”(júŒenum”eh"]”h$]”h&]”j1júj2jç¹j3jç¹j4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´Nubj8)�”}”(hXd**Constants** ``DRM_UT_CORE`` Used in the generic drm code: drm_ioctl.c, drm_mm.c, drm_memory.c, ... ``DRM_UT_DRIVER`` Used in the vendor specific part of the driver: i915, radeon, ... macro. ``DRM_UT_KMS`` Used in the modesetting code. ``DRM_UT_PRIME`` Used in the prime code. ``DRM_UT_ATOMIC`` Used in the atomic code. ``DRM_UT_VBL`` Used for verbose debug message in the vblank code. ``DRM_UT_STATE`` Used for verbose atomic state debugging. ``DRM_UT_LEASE`` Used in the lease code. ``DRM_UT_DP`` Used in the DP code. ``DRM_UT_DRMRES`` Used in the drm managed resources code.”h]”(hÎ)�”}”(hŒ **Constants**”h]”jB)�”}”(hjñ¹h]”hŒ Constants”…”�”}”(hjó¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjï¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KNhjë¹ubj„)�”}”(hhh]”(j‰)�”}”(hŒW``DRM_UT_CORE`` Used in the generic drm code: drm_ioctl.c, drm_mm.c, drm_memory.c, ... ”h]”(j�)�”}”(hŒ``DRM_UT_CORE``”h]”jî)�”}”(hjºh]”hŒ DRM_UT_CORE”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KRhj ºubj©)�”}”(hhh]”hÎ)�”}”(hŒFUsed in the generic drm code: drm_ioctl.c, drm_mm.c, drm_memory.c, ...”h]”hŒFUsed in the generic drm code: drm_ioctl.c, drm_mm.c, drm_memory.c, ...”…”�”}”(hj)ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KQhj&ºubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj ºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j%ºh´KRhjºubj‰)�”}”(hŒ[``DRM_UT_DRIVER`` Used in the vendor specific part of the driver: i915, radeon, ... macro. ”h]”(j�)�”}”(hŒ``DRM_UT_DRIVER``”h]”jî)�”}”(hjJºh]”hŒ DRM_UT_DRIVER”…”�”}”(hjLºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjHºubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KVhjDºubj©)�”}”(hhh]”hÎ)�”}”(hŒHUsed in the vendor specific part of the driver: i915, radeon, ... macro.”h]”hŒHUsed in the vendor specific part of the driver: i915, radeon, ... macro.”…”�”}”(hjcºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KUhj`ºubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjDºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j_ºh´KVhjºubj‰)�”}”(hŒ-``DRM_UT_KMS`` Used in the modesetting code. ”h]”(j�)�”}”(hŒ``DRM_UT_KMS``”h]”jî)�”}”(hj„ºh]”hŒ DRM_UT_KMS”…”�”}”(hj†ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj‚ºubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KYhj~ºubj©)�”}”(hhh]”hÎ)�”}”(hŒUsed in the modesetting code.”h]”hŒUsed in the modesetting code.”…”�”}”(hj�ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j™ºh´KYhjšºubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj~ºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j™ºh´KYhjºubj‰)�”}”(hŒ)``DRM_UT_PRIME`` Used in the prime code. ”h]”(j�)�”}”(hŒ``DRM_UT_PRIME``”h]”jî)�”}”(hj½ºh]”hŒ DRM_UT_PRIME”…”�”}”(hj¿ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj»ºubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´K\hj·ºubj©)�”}”(hhh]”hÎ)�”}”(hŒUsed in the prime code.”h]”hŒUsed in the prime code.”…”�”}”(hjÖºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÒºh´K\hjÓºubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj·ºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÒºh´K\hjºubj‰)�”}”(hŒ+``DRM_UT_ATOMIC`` Used in the atomic code. ”h]”(j�)�”}”(hŒ``DRM_UT_ATOMIC``”h]”jî)�”}”(hjöºh]”hŒ DRM_UT_ATOMIC”…”�”}”(hjøºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjôºubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´K_hjðºubj©)�”}”(hhh]”hÎ)�”}”(hŒUsed in the atomic code.”h]”hŒUsed in the atomic code.”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j »h´K_hj »ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjðºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j »h´K_hjºubj‰)�”}”(hŒB``DRM_UT_VBL`` Used for verbose debug message in the vblank code. ”h]”(j�)�”}”(hŒ``DRM_UT_VBL``”h]”jî)�”}”(hj/»h]”hŒ DRM_UT_VBL”…”�”}”(hj1»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj-»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Kbhj)»ubj©)�”}”(hhh]”hÎ)�”}”(hŒ2Used for verbose debug message in the vblank code.”h]”hŒ2Used for verbose debug message in the vblank code.”…”�”}”(hjH»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jD»h´KbhjE»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj)»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jD»h´Kbhjºubj‰)�”}”(hŒ:``DRM_UT_STATE`` Used for verbose atomic state debugging. ”h]”(j�)�”}”(hŒ``DRM_UT_STATE``”h]”jî)�”}”(hjh»h]”hŒ DRM_UT_STATE”…”�”}”(hjj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjf»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Kehjb»ubj©)�”}”(hhh]”hÎ)�”}”(hŒ(Used for verbose atomic state debugging.”h]”hŒ(Used for verbose atomic state debugging.”…”�”}”(hj�»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j}»h´Kehj~»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjb»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j}»h´Kehjºubj‰)�”}”(hŒ)``DRM_UT_LEASE`` Used in the lease code. ”h]”(j�)�”}”(hŒ``DRM_UT_LEASE``”h]”jî)�”}”(hj¡»h]”hŒ DRM_UT_LEASE”…”�”}”(hj£»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjŸ»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Khhj›»ubj©)�”}”(hhh]”hÎ)�”}”(hŒUsed in the lease code.”h]”hŒUsed in the lease code.”…”�”}”(hjº»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j¶»h´Khhj·»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj›»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j¶»h´Khhjºubj‰)�”}”(hŒ#``DRM_UT_DP`` Used in the DP code. ”h]”(j�)�”}”(hŒ ``DRM_UT_DP``”h]”jî)�”}”(hjÚ»h]”hŒ DRM_UT_DP”…”�”}”(hjÜ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjØ»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KkhjÔ»ubj©)�”}”(hhh]”hÎ)�”}”(hŒUsed in the DP code.”h]”hŒUsed in the DP code.”…”�”}”(hjó»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jï»h´Kkhjð»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÔ»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jï»h´Kkhjºubj‰)�”}”(hŒ9``DRM_UT_DRMRES`` Used in the drm managed resources code.”h]”(j�)�”}”(hŒ``DRM_UT_DRMRES``”h]”jî)�”}”(hj¼h]”hŒ DRM_UT_DRMRES”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Kmhj ¼ubj©)�”}”(hhh]”hÎ)�”}”(hŒ'Used in the drm managed resources code.”h]”hŒ'Used in the drm managed resources code.”…”�”}”(hj,¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Knhj)¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj ¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j(¼h´Kmhjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjë¹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´NubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjV¼h]”hŒ Description”…”�”}”(hjX¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjT¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Kphj6¹h²hubhÎ)�”}”(hŒ®Each of the DRM debug logging macros use a specific category, and the logging is filtered by the drm.debug module parameter. This enum specifies the values for the interface.”h]”hŒ®Each of the DRM debug logging macros use a specific category, and the logging is filtered by the drm.debug module parameter. This enum specifies the values for the interface.”…”�”}”(hjl¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KKhj6¹h²hubhÎ)�”}”(hŒkEach DRM_DEBUG_ macro logs to DRM_UT_ category, except DRM_DEBUG() logs to DRM_UT_CORE.”h]”hŒkEach DRM_DEBUG_ macro logs to DRM_UT_ category, except DRM_DEBUG() logs to DRM_UT_CORE.”…”�”}”(hj{¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KOhj6¹h²hubhÎ)�”}”(hŒnEnabling verbose debug messages is done through the drm.debug parameter, each category being enabled by a bit:”h]”hŒnEnabling verbose debug messages is done through the drm.debug parameter, each category being enabled by a bit:”…”�”}”(hjмh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KRhj6¹h²hubj+)�”}”(hŒ¼- drm.debug=0x1 will enable CORE messages - drm.debug=0x2 will enable DRIVER messages - drm.debug=0x3 will enable CORE and DRIVER messages - ... - drm.debug=0x3ff will enable all messages ”h]”j)�”}”(hhh]”(j)�”}”(hŒ'drm.debug=0x1 will enable CORE messages”h]”hÎ)�”}”(hj¢¼h]”hŒ'drm.debug=0x1 will enable CORE messages”…”�”}”(hj¤¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KUhj ¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�¼ubj)�”}”(hŒ)drm.debug=0x2 will enable DRIVER messages”h]”hÎ)�”}”(hjº¼h]”hŒ)drm.debug=0x2 will enable DRIVER messages”…”�”}”(hj¼¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KVhj¸¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�¼ubj)�”}”(hŒ2drm.debug=0x3 will enable CORE and DRIVER messages”h]”hÎ)�”}”(hjÒ¼h]”hŒ2drm.debug=0x3 will enable CORE and DRIVER messages”…”�”}”(hjÔ¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KWhjмubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�¼ubj)�”}”(hŒ...”h]”hÎ)�”}”(hjê¼h]”hŒ...”…”�”}”(hjì¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KXhjè¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�¼ubj)�”}”(hŒ)drm.debug=0x3ff will enable all messages ”h]”hÎ)�”}”(hŒ(drm.debug=0x3ff will enable all messages”h]”hŒ(drm.debug=0x3ff will enable all messages”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KYhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�¼ubeh}”(h]”h ]”h"]”h$]”h&]”j6Uj7Uuh1j h³j±¼h´KUhj™¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j +h³j±¼h´KUhj6¹h²hubhÎ)�”}”(hŒ�An interesting feature is that it's possible to enable verbose logging at run-time by echoing the debug value in its sysfs node::”h]”hŒ‚An interesting feature is that it’s possible to enable verbose logging at run-time by echoing the debug value in its sysfs node:”…”�”}”(hj%½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´K[hj6¹h²hubj)�”}”(hŒ-# echo 0xf > /sys/module/drm/parameters/debug”h]”hŒ-# echo 0xf > /sys/module/drm/parameters/debug”…”�”}”hj4½sbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´K^hj6¹h²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_printer (C struct)”Œ c.drm_printer”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ drm_printer”h]”j¶)�”}”(hŒstruct drm_printer”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj\½h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjX½h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KcubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj½h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjX½h²hh³ji½h´Kcubjß)�”}”(hŒ drm_printer”h]”jå)�”}”(hjV½h]”hŒ drm_printer”…”�”}”(hj|½h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjx½ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjX½h²hh³ji½h´Kcubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjT½h²hh³ji½h´Kcubah}”(h]”jO½ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³ji½h´KchjQ½h²hubj)�”}”(hhh]”hÎ)�”}”(hŒdrm output "stream"”h]”hŒdrm output “streamâ€�”…”�”}”(hjž½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´K©hj›½h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQ½h²hh³ji½h´Kcubeh}”(h]”h ]”(júŒstruct”eh"]”h$]”h&]”j1júj2j¶½j3j¶½j4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´Nubj8)�”}”(hŒ:**Definition**:: struct drm_printer { }; **Members**”h]”(hÎ)�”}”(hŒ**Definition**::”h]”(jB)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¾½ubhŒ:”…”�”}”(hj¾½h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´K­hjº½ubj)�”}”(hŒstruct drm_printer { };”h]”hŒstruct drm_printer { };”…”�”}”hjÛ½sbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´K¯hjº½ubhÎ)�”}”(hŒ **Members**”h]”jB)�”}”(hjì½h]”hŒMembers”…”�”}”(hjî½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjê½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´K²hjº½ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´NubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj ¾h]”hŒ Description”…”�”}”(hj ¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj ¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Kµhj6¹h²hubhÎ)�”}”(hŒ…Do not use struct members directly. Use drm_printer_seq_file(), drm_printer_info(), etc to initialize. And drm_printf() for output.”h]”hŒ…Do not use struct members directly. Use drm_printer_seq_file(), drm_printer_info(), etc to initialize. And drm_printf() for output.”…”�”}”(hj!¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Kªhj6¹h²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_vprintf (C function)”Œ c.drm_vprintf”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒFvoid drm_vprintf (struct drm_printer *p, const char *fmt, va_list *va)”h]”j¶)�”}”(hŒEvoid drm_vprintf(struct drm_printer *p, const char *fmt, va_list *va)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjI¾h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjE¾h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KÐubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX¾h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjE¾h²hh³jW¾h´KÐubjß)�”}”(hŒ drm_vprintf”h]”jå)�”}”(hŒ drm_vprintf”h]”hŒ drm_vprintf”…”�”}”(hjj¾h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjf¾ubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjE¾h²hh³jW¾h´KÐubjÖ)�”}”(hŒ5(struct drm_printer *p, const char *fmt, va_list *va)”h]”(jÜ)�”}”(hŒstruct drm_printer *p”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj†¾h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj‚¾ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“¾h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj‚¾ubh)�”}”(hhh]”jå)�”}”(hŒ drm_printer”h]”hŒ drm_printer”…”�”}”(hj¤¾h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¡¾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j¦¾Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jl¾sbŒ c.drm_vprintf”†”asbuh1hhj‚¾ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjľh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj‚¾ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjÒ¾h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj‚¾ubjå)�”}”(hjºh]”hŒp”…”�”}”(hjß¾h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj‚¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj~¾ubjÜ)�”}”(hŒconst char *fmt”h]”(j¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hj÷¾h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjó¾ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjó¾ubjŠ-)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjó¾ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ¿h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjó¾ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj.¿h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjó¾ubjå)�”}”(hŒfmt”h]”hŒfmt”…”�”}”(hj;¿h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjó¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj~¾ubjÜ)�”}”(hŒ va_list *va”h]”(h)�”}”(hhh]”jå)�”}”(hŒva_list”h]”hŒva_list”…”�”}”(hjW¿h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjT¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jY¿Œmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jÀ¾Œ c.drm_vprintf”†”asbuh1hhjP¿ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju¿h²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjP¿ubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjƒ¿h²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjP¿ubjå)�”}”(hŒva”h]”hŒva”…”�”}”(hj�¿h²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjP¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj~¾ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjE¾h²hh³jW¾h´KÐubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjA¾h²hh³jW¾h´KÐubah}”(h]”j<¾ah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jW¾h´KÐhj>¾h²hubj)�”}”(hhh]”hÎ)�”}”(hŒ'print to a :c:type:`drm_printer` stream”h]”(hŒ print to a ”…”�”}”(hjº¿h²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hjÄ¿h]”hŒ drm_printer”…”�”}”(hjÆ¿h²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj¿ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”jÀ¾Œ c.drm_vprintf”†”asbj Œ drm_printer”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Khjº¿ubhŒ stream”…”�”}”(hjº¿h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KÐhj·¿h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>¾h²hh³jW¾h´KÐubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jû¿j3jû¿j4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´Nubj8)�”}”(hŒ‰**Parameters** ``struct drm_printer *p`` the :c:type:`drm_printer` ``const char *fmt`` format string ``va_list *va`` the va_list”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjÀh]”hŒ Parameters”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KÔhjÿ¿ubj„)�”}”(hhh]”(j‰)�”}”(hŒ4``struct drm_printer *p`` the :c:type:`drm_printer` ”h]”(j�)�”}”(hŒ``struct drm_printer *p``”h]”jî)�”}”(hj$Àh]”hŒstruct drm_printer *p”…”�”}”(hj&Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj"Àubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KÑhjÀubj©)�”}”(hhh]”hÎ)�”}”(hŒthe :c:type:`drm_printer`”h]”(hŒthe ”…”�”}”(hj=Àh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hjGÀh]”hŒ drm_printer”…”�”}”(hjIÀh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjEÀubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_printer”uh1hh³j9Àh´KÑhj=Àubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j9Àh´KÑhj:Àubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j9Àh´KÑhjÀubj‰)�”}”(hŒ"``const char *fmt`` format string ”h]”(j�)�”}”(hŒ``const char *fmt``”h]”jî)�”}”(hj|Àh]”hŒconst char *fmt”…”�”}”(hj~Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjzÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KÒhjvÀubj©)�”}”(hhh]”hÎ)�”}”(hŒ format string”h]”hŒ format string”…”�”}”(hj•Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j‘Àh´KÒhj’Àubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjvÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j‘Àh´KÒhjÀubj‰)�”}”(hŒ``va_list *va`` the va_list”h]”(j�)�”}”(hŒ``va_list *va``”h]”jî)�”}”(hjµÀh]”hŒ va_list *va”…”�”}”(hj·Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj³Àubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KÔhj¯Àubj©)�”}”(hhh]”hÎ)�”}”(hŒ the va_list”h]”hŒ the va_list”…”�”}”(hjÎÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KÓhjËÀubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¯Àubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÊÀh´KÔhjÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÿ¿ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_printf_indent (C macro)”Œc.drm_printf_indent”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒdrm_printf_indent”h]”j¶)�”}”(hŒdrm_printf_indent”h]”jß)�”}”(hŒdrm_printf_indent”h]”jå)�”}”(hj Áh]”hŒdrm_printf_indent”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÁubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj Áh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KÞubah}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjÁh²hh³j&Áh´KÞubah}”(h]”jÁah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j&Áh´KÞhjÁh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁh²hh³j&Áh´KÞubeh}”(h]”h ]”(júŒmacro”eh"]”h$]”h&]”j1júj2j?Áj3j?Áj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´NubhÎ)�”}”(hŒ1``drm_printf_indent (printer, indent, fmt, ...)``”h]”jî)�”}”(hjEÁh]”hŒ-drm_printf_indent (printer, indent, fmt, ...)”…”�”}”(hjGÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjCÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Kàhj6¹h²hubj+)�”}”(hŒ9Print to a :c:type:`drm_printer` stream with indentation ”h]”hÎ)�”}”(hŒ8Print to a :c:type:`drm_printer` stream with indentation”h]”(hŒ Print to a ”…”�”}”(hj_Áh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hjiÁh]”hŒ drm_printer”…”�”}”(hjkÁh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjgÁubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_printer”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KÞhj_ÁubhŒ stream with indentation”…”�”}”(hj_Áh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j†Áh´KÞhj[Áubah}”(h]”h ]”h"]”h$]”h&]”uh1j +h³j†Áh´KÞhj6¹h²hubj8)�”}”(hŒŒ**Parameters** ``printer`` DRM printer ``indent`` Tab indentation level (max 5) ``fmt`` Format string ``...`` variable arguments”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj�Áh]”hŒ Parameters”…”�”}”(hjŸÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj›Áubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Kâhj—Áubj„)�”}”(hhh]”(j‰)�”}”(hŒ``printer`` DRM printer ”h]”(j�)�”}”(hŒ ``printer``”h]”jî)�”}”(hj¼Áh]”hŒprinter”…”�”}”(hj¾Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjºÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Kßhj¶Áubj©)�”}”(hhh]”hÎ)�”}”(hŒ DRM printer”h]”hŒ DRM printer”…”�”}”(hjÕÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÑÁh´KßhjÒÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¶Áubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÑÁh´Kßhj³Áubj‰)�”}”(hŒ)``indent`` Tab indentation level (max 5) ”h]”(j�)�”}”(hŒ ``indent``”h]”jî)�”}”(hjõÁh]”hŒindent”…”�”}”(hj÷Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjóÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KàhjïÁubj©)�”}”(hhh]”hÎ)�”}”(hŒTab indentation level (max 5)”h]”hŒTab indentation level (max 5)”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j Âh´Kàhj Âubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjïÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j Âh´Kàhj³Áubj‰)�”}”(hŒ``fmt`` Format string ”h]”(j�)�”}”(hŒ``fmt``”h]”jî)�”}”(hj.Âh]”hŒfmt”…”�”}”(hj0Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj,Âubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Káhj(Âubj©)�”}”(hhh]”hÎ)�”}”(hŒ Format string”h]”hŒ Format string”…”�”}”(hjGÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jCÂh´KáhjDÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj(Âubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jCÂh´Káhj³Áubj‰)�”}”(hŒ``...`` variable arguments”h]”(j�)�”}”(hŒ``...``”h]”jî)�”}”(hjgÂh]”hŒ...”…”�”}”(hjiÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjeÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KãhjaÂubj©)�”}”(hhh]”hÎ)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hj€Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Khj}Âubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjaÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j|Âh´Kãhj³Áubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj—Áubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_print_iterator (C struct)”Œc.drm_print_iterator”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒdrm_print_iterator”h]”j¶)�”}”(hŒstruct drm_print_iterator”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjÁÂh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj½Âh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏÂh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj½Âh²hh³jÎÂh´Kubjß)�”}”(hŒdrm_print_iterator”h]”jå)�”}”(hj»Âh]”hŒdrm_print_iterator”…”�”}”(hjáÂh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÝÂubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj½Âh²hh³jÎÂh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj¹Âh²hh³jÎÂh´Kubah}”(h]”j´Âah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jÎÂh´Khj¶Âh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ+local struct used with drm_printer_coredump”h]”hŒ+local struct used with drm_printer_coredump”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KçhjÃh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶Âh²hh³jÎÂh´Kubeh}”(h]”h ]”(júŒstruct”eh"]”h$]”h&]”j1júj2jÃj3jÃj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´Nubj8)�”}”(hXz**Definition**:: struct drm_print_iterator { void *data; ssize_t start; ssize_t remain; }; **Members** ``data`` Pointer to the devcoredump output buffer, can be NULL if using drm_printer_coredump to determine size of devcoredump ``start`` The offset within the buffer to start writing ``remain`` The number of bytes to write for this iteration”h]”(hÎ)�”}”(hŒ**Definition**::”h]”(jB)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj'Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj#ÃubhŒ:”…”�”}”(hj#Ãh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KëhjÃubj)�”}”(hŒUstruct drm_print_iterator { void *data; ssize_t start; ssize_t remain; };”h]”hŒUstruct drm_print_iterator { void *data; ssize_t start; ssize_t remain; };”…”�”}”hj@Ãsbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KíhjÃubhÎ)�”}”(hŒ **Members**”h]”jB)�”}”(hjQÃh]”hŒMembers”…”�”}”(hjSÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjOÃubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KóhjÃubj„)�”}”(hhh]”(j‰)�”}”(hŒ~``data`` Pointer to the devcoredump output buffer, can be NULL if using drm_printer_coredump to determine size of devcoredump ”h]”(j�)�”}”(hŒ``data``”h]”jî)�”}”(hjpÃh]”hŒdata”…”�”}”(hjrÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjnÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KêhjjÃubj©)�”}”(hhh]”hÎ)�”}”(hŒtPointer to the devcoredump output buffer, can be NULL if using drm_printer_coredump to determine size of devcoredump”h]”hŒtPointer to the devcoredump output buffer, can be NULL if using drm_printer_coredump to determine size of devcoredump”…”�”}”(hj‰Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Kéhj†Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjjÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j…Ãh´KêhjgÃubj‰)�”}”(hŒ8``start`` The offset within the buffer to start writing ”h]”(j�)�”}”(hŒ ``start``”h]”jî)�”}”(hjªÃh]”hŒstart”…”�”}”(hj¬Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj¨Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Këhj¤Ãubj©)�”}”(hhh]”hÎ)�”}”(hŒ-The offset within the buffer to start writing”h]”hŒ-The offset within the buffer to start writing”…”�”}”(hjÃÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j¿Ãh´KëhjÀÃubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¤Ãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j¿Ãh´KëhjgÃubj‰)�”}”(hŒ:``remain`` The number of bytes to write for this iteration”h]”(j�)�”}”(hŒ ``remain``”h]”jî)�”}”(hjãÃh]”hŒremain”…”�”}”(hjåÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjáÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KëhjÝÃubj©)�”}”(hhh]”hÎ)�”}”(hŒ/The number of bytes to write for this iteration”h]”hŒ/The number of bytes to write for this iteration”…”�”}”(hjüÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KìhjùÃubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÝÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jøÃh´KëhjgÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÃubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ!drm_coredump_printer (C function)”Œc.drm_coredump_printer”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒIstruct drm_printer drm_coredump_printer (struct drm_print_iterator *iter)”h]”j¶)�”}”(hŒHstruct drm_printer drm_coredump_printer(struct drm_print_iterator *iter)”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj=Äh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj9Äh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KöubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKÄh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj9Äh²hh³jJÄh´Köubh)�”}”(hhh]”jå)�”}”(hŒ drm_printer”h]”hŒ drm_printer”…”�”}”(hj\Äh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjYÄubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j^ÄŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘Œdrm_coredump_printer”sbŒc.drm_coredump_printer”†”asbuh1hhj9Äh²hh³jJÄh´KöubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}Äh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj9Äh²hh³jJÄh´Köubjß)�”}”(hŒdrm_coredump_printer”h]”jå)�”}”(hjzÄh]”hŒdrm_coredump_printer”…”�”}”(hj�Äh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj‹Äubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj9Äh²hh³jJÄh´KöubjÖ)�”}”(hŒ!(struct drm_print_iterator *iter)”h]”jÜ)�”}”(hŒstruct drm_print_iterator *iter”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjªÄh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj¦ÄubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·Äh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj¦Äubh)�”}”(hhh]”jå)�”}”(hŒdrm_print_iterator”h]”hŒdrm_print_iterator”…”�”}”(hjÈÄh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÅÄubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jÊÄŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jxÄŒc.drm_coredump_printer”†”asbuh1hhj¦ÄubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæÄh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj¦Äubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjôÄh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj¦Äubjå)�”}”(hŒiter”h]”hŒiter”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¦Äubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj¢Äubah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj9Äh²hh³jJÄh´Köubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj5Äh²hh³jJÄh´Köubah}”(h]”j0Äah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jJÄh´Köhj2Äh²hubj)�”}”(hhh]”hÎ)�”}”(hŒdconstruct a :c:type:`drm_printer` that can output to a buffer from the read function for devcoredump”h]”(hŒ construct a ”…”�”}”(hj+Åh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hj5Åh]”hŒ drm_printer”…”�”}”(hj7Åh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj3Åubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”jxÄŒc.drm_coredump_printer”†”asbj Œ drm_printer”uh1hh³jæ¿h´Khj+ÅubhŒC that can output to a buffer from the read function for devcoredump”…”�”}”(hj+Åh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Köhj(Åh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2Äh²hh³jJÄh´Köubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jkÅj3jkÅj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´Nubj8)�”}”(hX **Parameters** ``struct drm_print_iterator *iter`` A pointer to a struct drm_print_iterator for the read instance **Description** This wrapper extends drm_printf() to work with a dev_coredumpm() callback function. The passed in drm_print_iterator struct contains the buffer pointer, size and offset as passed in from devcoredump. For example:: void coredump_read(char *buffer, loff_t offset, size_t count, void *data, size_t datalen) { struct drm_print_iterator iter; struct drm_printer p; iter.data = buffer; iter.start = offset; iter.remain = count; p = drm_coredump_printer(&iter); drm_printf(p, "foo=%d\n", foo); } void makecoredump(...) { ... dev_coredumpm(dev, THIS_MODULE, data, 0, GFP_KERNEL, coredump_read, ...) } The above example has a time complexity of O(N^2), where N is the size of the devcoredump. This is acceptable for small devcoredumps but scales poorly for larger ones. Another use case for drm_coredump_printer is to capture the devcoredump into a saved buffer before the dev_coredump() callback. This involves two passes: one to determine the size of the devcoredump and another to print it to a buffer. Then, in dev_coredump(), copy from the saved buffer into the devcoredump read buffer. For example:: char *devcoredump_saved_buffer; ssize_t __coredump_print(char *buffer, ssize_t count, ...) { struct drm_print_iterator iter; struct drm_printer p; iter.data = buffer; iter.start = 0; iter.remain = count; p = drm_coredump_printer(&iter); drm_printf(p, "foo=%d\n", foo); ... return count - iter.remain; } void coredump_print(...) { ssize_t count; count = __coredump_print(NULL, INT_MAX, ...); devcoredump_saved_buffer = kvmalloc(count, GFP_KERNEL); __coredump_print(devcoredump_saved_buffer, count, ...); } void coredump_read(char *buffer, loff_t offset, size_t count, void *data, size_t datalen) { ... memcpy(buffer, devcoredump_saved_buffer + offset, count); ... } The above example has a time complexity of O(N*2), where N is the size of the devcoredump. This scales better than the previous example for larger devcoredumps. **Return** The :c:type:`drm_printer` object”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjuÅh]”hŒ Parameters”…”�”}”(hjwÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjsÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KúhjoÅubj„)�”}”(hhh]”j‰)�”}”(hŒc``struct drm_print_iterator *iter`` A pointer to a struct drm_print_iterator for the read instance ”h]”(j�)�”}”(hŒ#``struct drm_print_iterator *iter``”h]”jî)�”}”(hj”Åh]”hŒstruct drm_print_iterator *iter”…”�”}”(hj–Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj’Åubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KøhjŽÅubj©)�”}”(hhh]”hÎ)�”}”(hŒ>A pointer to a struct drm_print_iterator for the read instance”h]”hŒ>A pointer to a struct drm_print_iterator for the read instance”…”�”}”(hj­Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j©Åh´KøhjªÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjŽÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j©Åh´Køhj‹Åubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjoÅubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjÏÅh]”hŒ Description”…”�”}”(hjÑÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÍÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KúhjoÅubhÎ)�”}”(hŒÇThis wrapper extends drm_printf() to work with a dev_coredumpm() callback function. The passed in drm_print_iterator struct contains the buffer pointer, size and offset as passed in from devcoredump.”h]”hŒÇThis wrapper extends drm_printf() to work with a dev_coredumpm() callback function. The passed in drm_print_iterator struct contains the buffer pointer, size and offset as passed in from devcoredump.”…”�”}”(hjåÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KùhjoÅubhÎ)�”}”(hŒ For example::”h]”hŒ For example:”…”�”}”(hjôÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KýhjoÅubj)�”}”(hXÞvoid coredump_read(char *buffer, loff_t offset, size_t count, void *data, size_t datalen) { struct drm_print_iterator iter; struct drm_printer p; iter.data = buffer; iter.start = offset; iter.remain = count; p = drm_coredump_printer(&iter); drm_printf(p, "foo=%d\n", foo); } void makecoredump(...) { ... dev_coredumpm(dev, THIS_MODULE, data, 0, GFP_KERNEL, coredump_read, ...) }”h]”hXÞvoid coredump_read(char *buffer, loff_t offset, size_t count, void *data, size_t datalen) { struct drm_print_iterator iter; struct drm_printer p; iter.data = buffer; iter.start = offset; iter.remain = count; p = drm_coredump_printer(&iter); drm_printf(p, "foo=%d\n", foo); } void makecoredump(...) { ... dev_coredumpm(dev, THIS_MODULE, data, 0, GFP_KERNEL, coredump_read, ...) }”…”�”}”hjÆsbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KÿhjoÅubhÎ)�”}”(hŒ§The above example has a time complexity of O(N^2), where N is the size of the devcoredump. This is acceptable for small devcoredumps but scales poorly for larger ones.”h]”hŒ§The above example has a time complexity of O(N^2), where N is the size of the devcoredump. This is acceptable for small devcoredumps but scales poorly for larger ones.”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MhjoÅubhÎ)�”}”(hXAAnother use case for drm_coredump_printer is to capture the devcoredump into a saved buffer before the dev_coredump() callback. This involves two passes: one to determine the size of the devcoredump and another to print it to a buffer. Then, in dev_coredump(), copy from the saved buffer into the devcoredump read buffer.”h]”hXAAnother use case for drm_coredump_printer is to capture the devcoredump into a saved buffer before the dev_coredump() callback. This involves two passes: one to determine the size of the devcoredump and another to print it to a buffer. Then, in dev_coredump(), copy from the saved buffer into the devcoredump read buffer.”…”�”}”(hj!Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MhjoÅubhÎ)�”}”(hŒ For example::”h]”hŒ For example:”…”�”}”(hj0Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MhjoÅubj)�”}”(hX2char *devcoredump_saved_buffer; ssize_t __coredump_print(char *buffer, ssize_t count, ...) { struct drm_print_iterator iter; struct drm_printer p; iter.data = buffer; iter.start = 0; iter.remain = count; p = drm_coredump_printer(&iter); drm_printf(p, "foo=%d\n", foo); ... return count - iter.remain; } void coredump_print(...) { ssize_t count; count = __coredump_print(NULL, INT_MAX, ...); devcoredump_saved_buffer = kvmalloc(count, GFP_KERNEL); __coredump_print(devcoredump_saved_buffer, count, ...); } void coredump_read(char *buffer, loff_t offset, size_t count, void *data, size_t datalen) { ... memcpy(buffer, devcoredump_saved_buffer + offset, count); ... }”h]”hX2char *devcoredump_saved_buffer; ssize_t __coredump_print(char *buffer, ssize_t count, ...) { struct drm_print_iterator iter; struct drm_printer p; iter.data = buffer; iter.start = 0; iter.remain = count; p = drm_coredump_printer(&iter); drm_printf(p, "foo=%d\n", foo); ... return count - iter.remain; } void coredump_print(...) { ssize_t count; count = __coredump_print(NULL, INT_MAX, ...); devcoredump_saved_buffer = kvmalloc(count, GFP_KERNEL); __coredump_print(devcoredump_saved_buffer, count, ...); } void coredump_read(char *buffer, loff_t offset, size_t count, void *data, size_t datalen) { ... memcpy(buffer, devcoredump_saved_buffer + offset, count); ... }”…”�”}”hj?Æsbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M!hjoÅubhÎ)�”}”(hŒ The above example has a time complexity of O(N*2), where N is the size of the devcoredump. This scales better than the previous example for larger devcoredumps.”h]”hŒ The above example has a time complexity of O(N*2), where N is the size of the devcoredump. This scales better than the previous example for larger devcoredumps.”…”�”}”(hjNÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MDhjoÅubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hj_Æh]”hŒReturn”…”�”}”(hjaÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj]Æubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MHhjoÅubhÎ)�”}”(hŒ The :c:type:`drm_printer` object”h]”(hŒThe ”…”�”}”(hjuÆh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hjÆh]”hŒ drm_printer”…”�”}”(hj�Æh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj}Æubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_printer”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MIhjuÆubhŒ object”…”�”}”(hjuÆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jœÆh´MIhjoÅubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ)drm_coredump_printer_is_full (C function)”Œc.drm_coredump_printer_is_full”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ9bool drm_coredump_printer_is_full (struct drm_printer *p)”h]”j¶)�”}”(hŒ8bool drm_coredump_printer_is_full(struct drm_printer *p)”h]”(jŠ-)�”}”(hj�-h]”hŒbool”…”�”}”(hjÇÆh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjÃÆh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M\ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕÆh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÃÆh²hh³jÔÆh´M\ubjß)�”}”(hŒdrm_coredump_printer_is_full”h]”jå)�”}”(hŒdrm_coredump_printer_is_full”h]”hŒdrm_coredump_printer_is_full”…”�”}”(hjçÆh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjãÆubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjÃÆh²hh³jÔÆh´M\ubjÖ)�”}”(hŒ(struct drm_printer *p)”h]”jÜ)�”}”(hŒstruct drm_printer *p”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjÿÆubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÿÆubh)�”}”(hhh]”jå)�”}”(hŒ drm_printer”h]”hŒ drm_printer”…”�”}”(hj!Çh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÇubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j#ÇŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jéÆsbŒc.drm_coredump_printer_is_full”†”asbuh1hhjÿÆubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAÇh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÿÆubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjOÇh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjÿÆubjå)�”}”(hjºh]”hŒp”…”�”}”(hj\Çh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÿÆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjûÆubah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjÃÆh²hh³jÔÆh´M\ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj¿Æh²hh³jÔÆh´M\ubah}”(h]”jºÆah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jÔÆh´M\hj¼Æh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ#DRM coredump printer output is full”h]”hŒ#DRM coredump printer output is full”…”�”}”(hj…Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M\hj‚Çh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¼Æh²hh³jÔÆh´M\ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j�Çj3j�Çj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´Nubj8)�”}”(hŒÿ**Parameters** ``struct drm_printer *p`` DRM coredump printer **Description** DRM printer output is full, useful to short circuit coredump printing once printer is full. **Return** True if DRM coredump printer output buffer is full, False otherwise”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj§Çh]”hŒ Parameters”…”�”}”(hj©Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¥Çubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M`hj¡Çubj„)�”}”(hhh]”j‰)�”}”(hŒ/``struct drm_printer *p`` DRM coredump printer ”h]”(j�)�”}”(hŒ``struct drm_printer *p``”h]”jî)�”}”(hjÆÇh]”hŒstruct drm_printer *p”…”�”}”(hjÈÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÄÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M]hjÀÇubj©)�”}”(hhh]”hÎ)�”}”(hŒDRM coredump printer”h]”hŒDRM coredump printer”…”�”}”(hjßÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÛÇh´M]hjÜÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÀÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÛÇh´M]hj½Çubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj¡ÇubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjÈh]”hŒ Description”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÿÇubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M_hj¡ÇubhÎ)�”}”(hŒ[DRM printer output is full, useful to short circuit coredump printing once printer is full.”h]”hŒ[DRM printer output is full, useful to short circuit coredump printing once printer is full.”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M^hj¡ÇubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hj(Èh]”hŒReturn”…”�”}”(hj*Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj&Èubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Mahj¡ÇubhÎ)�”}”(hŒCTrue if DRM coredump printer output buffer is full, False otherwise”h]”hŒCTrue if DRM coredump printer output buffer is full, False otherwise”…”�”}”(hj>Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Mbhj¡Çubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ!drm_seq_file_printer (C function)”Œc.drm_seq_file_printer”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ` to output to **Return** The :c:type:`drm_printer` object”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjÃÉh]”hŒ Parameters”…”�”}”(hjÅÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÁÉubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Mthj½Éubj„)�”}”(hhh]”j‰)�”}”(hŒM``struct seq_file *f`` the :c:type:`struct seq_file ` to output to ”h]”(j�)�”}”(hŒ``struct seq_file *f``”h]”jî)�”}”(hjâÉh]”hŒstruct seq_file *f”…”�”}”(hjäÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjàÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MqhjÜÉubj©)�”}”(hhh]”hÎ)�”}”(hŒ5the :c:type:`struct seq_file ` to output to”h]”(hŒthe ”…”�”}”(hjûÉh²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct seq_file `”h]”jî)�”}”(hjÊh]”hŒstruct seq_file”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÊubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œseq_file”uh1hh³j÷Éh´MqhjûÉubhŒ to output to”…”�”}”(hjûÉh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j÷Éh´MqhjøÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÜÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j÷Éh´MqhjÙÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj½ÉubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hj@Êh]”hŒReturn”…”�”}”(hjBÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj>Êubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Mshj½ÉubhÎ)�”}”(hŒ The :c:type:`drm_printer` object”h]”(hŒThe ”…”�”}”(hjVÊh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hj`Êh]”hŒ drm_printer”…”�”}”(hjbÊh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj^Êubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_printer”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MshjVÊubhŒ object”…”�”}”(hjVÊh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j}Êh´Mshj½Éubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_info_printer (C function)”Œc.drm_info_printer”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ8struct drm_printer drm_info_printer (struct device *dev)”h]”j¶)�”}”(hŒ7struct drm_printer drm_info_printer(struct device *dev)”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj¨Êh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj¤Êh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M�ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶Êh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj¤Êh²hh³jµÊh´M�ubh)�”}”(hhh]”jå)�”}”(hŒ drm_printer”h]”hŒ drm_printer”…”�”}”(hjÇÊh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÄÊubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jÉÊŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘Œdrm_info_printer”sbŒc.drm_info_printer”†”asbuh1hhj¤Êh²hh³jµÊh´M�ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèÊh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj¤Êh²hh³jµÊh´M�ubjß)�”}”(hŒdrm_info_printer”h]”jå)�”}”(hjåÊh]”hŒdrm_info_printer”…”�”}”(hjúÊh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjöÊubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj¤Êh²hh³jµÊh´M�ubjÖ)�”}”(hŒ(struct device *dev)”h]”jÜ)�”}”(hŒstruct device *dev”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjËubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"Ëh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjËubh)�”}”(hhh]”jå)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj3Ëh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj0Ëubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j5ËŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jãÊŒc.drm_info_printer”†”asbuh1hhjËubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQËh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjËubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj_Ëh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjËubjå)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjlËh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjËubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj Ëubah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj¤Êh²hh³jµÊh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj Êh²hh³jµÊh´M�ubah}”(h]”j›Êah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jµÊh´M�hj�Êh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ>construct a :c:type:`drm_printer` that outputs to dev_printk()”h]”(hŒ construct a ”…”�”}”(hj–Ëh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hj Ëh]”hŒ drm_printer”…”�”}”(hj¢Ëh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjžËubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”jãÊŒc.drm_info_printer”†”asbj Œ drm_printer”uh1hh³jæ¿h´Khj–ËubhŒ that outputs to dev_printk()”…”�”}”(hj–Ëh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M�hj“Ëh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�Êh²hh³jµÊh´M�ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jÖËj3jÖËj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´Nubj8)�”}”(hŒƒ**Parameters** ``struct device *dev`` the :c:type:`struct device ` pointer **Return** The :c:type:`drm_printer` object”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjàËh]”hŒ Parameters”…”�”}”(hjâËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÞËubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M…hjÚËubj„)�”}”(hhh]”j‰)�”}”(hŒD``struct device *dev`` the :c:type:`struct device ` pointer ”h]”(j�)�”}”(hŒ``struct device *dev``”h]”jî)�”}”(hjÿËh]”hŒstruct device *dev”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjýËubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M‚hjùËubj©)�”}”(hhh]”hÎ)�”}”(hŒ,the :c:type:`struct device ` pointer”h]”(hŒthe ”…”�”}”(hjÌh²hh³Nh´Nubh)�”}”(hŒ :c:type:`struct device `”h]”jî)�”}”(hj"Ìh]”hŒ struct device”…”�”}”(hj$Ìh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj Ìubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œdevice”uh1hh³jÌh´M‚hjÌubhŒ pointer”…”�”}”(hjÌh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÌh´M‚hjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjùËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÌh´M‚hjöËubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÚËubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hj]Ìh]”hŒReturn”…”�”}”(hj_Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj[Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M„hjÚËubhÎ)�”}”(hŒ The :c:type:`drm_printer` object”h]”(hŒThe ”…”�”}”(hjsÌh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hj}Ìh]”hŒ drm_printer”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj{Ìubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_printer”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M„hjsÌubhŒ object”…”�”}”(hjsÌh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jšÌh´M„hjÚËubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_dbg_printer (C function)”Œc.drm_dbg_printer”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒqstruct drm_printer drm_dbg_printer (struct drm_device *drm, enum drm_debug_category category, const char *prefix)”h]”j¶)�”}”(hŒpstruct drm_printer drm_dbg_printer(struct drm_device *drm, enum drm_debug_category category, const char *prefix)”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjÅÌh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjÁÌh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M‘ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓÌh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÁÌh²hh³jÒÌh´M‘ubh)�”}”(hhh]”jå)�”}”(hŒ drm_printer”h]”hŒ drm_printer”…”�”}”(hjäÌh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjáÌubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jæÌŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘Œdrm_dbg_printer”sbŒc.drm_dbg_printer”†”asbuh1hhjÁÌh²hh³jÒÌh´M‘ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÁÌh²hh³jÒÌh´M‘ubjß)�”}”(hŒdrm_dbg_printer”h]”jå)�”}”(hjÍh]”hŒdrm_dbg_printer”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÍubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjÁÌh²hh³jÒÌh´M‘ubjÖ)�”}”(hŒN(struct drm_device *drm, enum drm_debug_category category, const char *prefix)”h]”(jÜ)�”}”(hŒstruct drm_device *drm”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj2Íh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj.ÍubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?Íh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj.Íubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hjPÍh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjMÍubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jRÍŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jÍŒc.drm_dbg_printer”†”asbuh1hhj.ÍubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnÍh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj.Íubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj|Íh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj.Íubjå)�”}”(hŒdrm”h]”hŒdrm”…”�”}”(hj‰Íh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj.Íubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj*ÍubjÜ)�”}”(hŒ enum drm_debug_category category”h]”(j¼)�”}”(hj) h]”hŒenum”…”�”}”(hj¢Íh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjžÍubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯Íh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjžÍubh)�”}”(hhh]”jå)�”}”(hŒdrm_debug_category”h]”hŒdrm_debug_category”…”�”}”(hjÀÍh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj½Íubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jÂÍŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jÍŒc.drm_dbg_printer”†”asbuh1hhjžÍubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞÍh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjžÍubjå)�”}”(hŒcategory”h]”hŒcategory”…”�”}”(hjìÍh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjžÍubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj*ÍubjÜ)�”}”(hŒconst char *prefix”h]”(j¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjÎubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÎubjŠ-)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj Îh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjÎubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Îh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÎubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj<Îh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjÎubjå)�”}”(hŒprefix”h]”hŒprefix”…”�”}”(hjIÎh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÎubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj*Íubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjÁÌh²hh³jÒÌh´M‘ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj½Ìh²hh³jÒÌh´M‘ubah}”(h]”j¸Ìah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jÒÌh´M‘hjºÌh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ@construct a :c:type:`drm_printer` for drm device specific output”h]”(hŒ construct a ”…”�”}”(hjsÎh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hj}Îh]”hŒ drm_printer”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj{Îubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”jÍŒc.drm_dbg_printer”†”asbj Œ drm_printer”uh1hh³jæ¿h´KhjsÎubhŒ for drm device specific output”…”�”}”(hjsÎh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M‘hjpÎh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjºÌh²hh³jÒÌh´M‘ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j³Îj3j³Îj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´Nubj8)�”}”(hX**Parameters** ``struct drm_device *drm`` the :c:type:`struct drm_device ` pointer, or NULL ``enum drm_debug_category category`` the debug category to use ``const char *prefix`` debug output prefix, or NULL for no prefix **Return** The :c:type:`drm_printer` object”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj½Îh]”hŒ Parameters”…”�”}”(hj¿Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj»Îubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M•hj·Îubj„)�”}”(hhh]”(j‰)�”}”(hŒY``struct drm_device *drm`` the :c:type:`struct drm_device ` pointer, or NULL ”h]”(j�)�”}”(hŒ``struct drm_device *drm``”h]”jî)�”}”(hjÜÎh]”hŒstruct drm_device *drm”…”�”}”(hjÞÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÚÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M’hjÖÎubj©)�”}”(hhh]”hÎ)�”}”(hŒ=the :c:type:`struct drm_device ` pointer, or NULL”h]”(hŒthe ”…”�”}”(hjõÎh²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct drm_device `”h]”jî)�”}”(hjÿÎh]”hŒstruct drm_device”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjýÎubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³jñÎh´M’hjõÎubhŒ pointer, or NULL”…”�”}”(hjõÎh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jñÎh´M’hjòÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÖÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jñÎh´M’hjÓÎubj‰)�”}”(hŒ?``enum drm_debug_category category`` the debug category to use ”h]”(j�)�”}”(hŒ$``enum drm_debug_category category``”h]”jî)�”}”(hj8Ïh]”hŒ enum drm_debug_category category”…”�”}”(hj:Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj6Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M“hj2Ïubj©)�”}”(hhh]”hÎ)�”}”(hŒthe debug category to use”h]”hŒthe debug category to use”…”�”}”(hjQÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jMÏh´M“hjNÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj2Ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jMÏh´M“hjÓÎubj‰)�”}”(hŒB``const char *prefix`` debug output prefix, or NULL for no prefix ”h]”(j�)�”}”(hŒ``const char *prefix``”h]”jî)�”}”(hjqÏh]”hŒconst char *prefix”…”�”}”(hjsÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjoÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M”hjkÏubj©)�”}”(hhh]”hÎ)�”}”(hŒ*debug output prefix, or NULL for no prefix”h]”hŒ*debug output prefix, or NULL for no prefix”…”�”}”(hjŠÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j†Ïh´M”hj‡Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjkÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j†Ïh´M”hjÓÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj·ÎubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hj¬Ïh]”hŒReturn”…”�”}”(hj®Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjªÏubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M–hj·ÎubhÎ)�”}”(hŒ The :c:type:`drm_printer` object”h]”(hŒThe ”…”�”}”(hjÂÏh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hjÌÏh]”hŒ drm_printer”…”�”}”(hjÎÏh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÊÏubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_printer”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M–hjÂÏubhŒ object”…”�”}”(hjÂÏh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jéÏh´M–hj·Îubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_err_printer (C function)”Œc.drm_err_printer”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒOstruct drm_printer drm_err_printer (struct drm_device *drm, const char *prefix)”h]”j¶)�”}”(hŒNstruct drm_printer drm_err_printer(struct drm_device *drm, const char *prefix)”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjÐh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M¨ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"Ðh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÐh²hh³j!Ðh´M¨ubh)�”}”(hhh]”jå)�”}”(hŒ drm_printer”h]”hŒ drm_printer”…”�”}”(hj3Ðh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj0Ðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j5ÐŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘Œdrm_err_printer”sbŒc.drm_err_printer”†”asbuh1hhjÐh²hh³j!Ðh´M¨ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTÐh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÐh²hh³j!Ðh´M¨ubjß)�”}”(hŒdrm_err_printer”h]”jå)�”}”(hjQÐh]”hŒdrm_err_printer”…”�”}”(hjfÐh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjbÐubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjÐh²hh³j!Ðh´M¨ubjÖ)�”}”(hŒ,(struct drm_device *drm, const char *prefix)”h]”(jÜ)�”}”(hŒstruct drm_device *drm”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj�Ðh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj}ÐubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽÐh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj}Ðubh)�”}”(hhh]”jå)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hjŸÐh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjœÐubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j¡ÐŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jOÐŒc.drm_err_printer”†”asbuh1hhj}ÐubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½Ðh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj}Ðubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjËÐh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj}Ðubjå)�”}”(hŒdrm”h]”hŒdrm”…”�”}”(hjØÐh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj}Ðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjyÐubjÜ)�”}”(hŒconst char *prefix”h]”(j¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hjñÐh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjíÐubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþÐh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjíÐubjŠ-)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj Ñh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjíÐubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjíÐubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj(Ñh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjíÐubjå)�”}”(hŒprefix”h]”hŒprefix”…”�”}”(hj5Ñh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjíÐubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjyÐubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjÐh²hh³j!Ðh´M¨ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj Ðh²hh³j!Ðh´M¨ubah}”(h]”jÐah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j!Ðh´M¨hj Ðh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ;construct a :c:type:`drm_printer` that outputs to drm_err()”h]”(hŒ construct a ”…”�”}”(hj_Ñh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hjiÑh]”hŒ drm_printer”…”�”}”(hjkÑh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjgÑubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”jOÐŒc.drm_err_printer”†”asbj Œ drm_printer”uh1hh³jæ¿h´Khj_ÑubhŒ that outputs to drm_err()”…”�”}”(hj_Ñh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M¨hj\Ñh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Ðh²hh³j!Ðh´M¨ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jŸÑj3jŸÑj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´Nubj8)�”}”(hŒÔ**Parameters** ``struct drm_device *drm`` the :c:type:`struct drm_device ` pointer ``const char *prefix`` debug output prefix, or NULL for no prefix **Return** The :c:type:`drm_printer` object”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj©Ñh]”hŒ Parameters”…”�”}”(hj«Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj§Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M¬hj£Ñubj„)�”}”(hhh]”(j‰)�”}”(hŒP``struct drm_device *drm`` the :c:type:`struct drm_device ` pointer ”h]”(j�)�”}”(hŒ``struct drm_device *drm``”h]”jî)�”}”(hjÈÑh]”hŒstruct drm_device *drm”…”�”}”(hjÊÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÆÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M©hjÂÑubj©)�”}”(hhh]”hÎ)�”}”(hŒ4the :c:type:`struct drm_device ` pointer”h]”(hŒthe ”…”�”}”(hjáÑh²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct drm_device `”h]”jî)�”}”(hjëÑh]”hŒstruct drm_device”…”�”}”(hjíÑh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjéÑubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_device”uh1hh³jÝÑh´M©hjáÑubhŒ pointer”…”�”}”(hjáÑh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÝÑh´M©hjÞÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÂÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÝÑh´M©hj¿Ñubj‰)�”}”(hŒB``const char *prefix`` debug output prefix, or NULL for no prefix ”h]”(j�)�”}”(hŒ``const char *prefix``”h]”jî)�”}”(hj$Òh]”hŒconst char *prefix”…”�”}”(hj&Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj"Òubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MªhjÒubj©)�”}”(hhh]”hÎ)�”}”(hŒ*debug output prefix, or NULL for no prefix”h]”hŒ*debug output prefix, or NULL for no prefix”…”�”}”(hj=Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j9Òh´Mªhj:Òubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j9Òh´Mªhj¿Ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj£ÑubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hj_Òh]”hŒReturn”…”�”}”(hjaÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj]Òubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M¬hj£ÑubhÎ)�”}”(hŒ The :c:type:`drm_printer` object”h]”(hŒThe ”…”�”}”(hjuÒh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hjÒh]”hŒ drm_printer”…”�”}”(hj�Òh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj}Òubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_printer”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M¬hjuÒubhŒ object”…”�”}”(hjuÒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jœÒh´M¬hj£Ñubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_line_printer (C function)”Œc.drm_line_printer”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒdstruct drm_printer drm_line_printer (struct drm_printer *p, const char *prefix, unsigned int series)”h]”j¶)�”}”(hŒcstruct drm_printer drm_line_printer(struct drm_printer *p, const char *prefix, unsigned int series)”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjÇÒh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjÃÒh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M»ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕÒh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÃÒh²hh³jÔÒh´M»ubh)�”}”(hhh]”jå)�”}”(hŒ drm_printer”h]”hŒ drm_printer”…”�”}”(hjæÒh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjãÒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jèÒŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘Œdrm_line_printer”sbŒc.drm_line_printer”†”asbuh1hhjÃÒh²hh³jÔÒh´M»ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÃÒh²hh³jÔÒh´M»ubjß)�”}”(hŒdrm_line_printer”h]”jå)�”}”(hjÓh]”hŒdrm_line_printer”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÓubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjÃÒh²hh³jÔÒh´M»ubjÖ)�”}”(hŒ@(struct drm_printer *p, const char *prefix, unsigned int series)”h]”(jÜ)�”}”(hŒstruct drm_printer *p”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj4Óh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj0ÓubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAÓh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj0Óubh)�”}”(hhh]”jå)�”}”(hŒ drm_printer”h]”hŒ drm_printer”…”�”}”(hjRÓh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjOÓubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jTÓŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jÓŒc.drm_line_printer”†”asbuh1hhj0ÓubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjpÓh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj0Óubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj~Óh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj0Óubjå)�”}”(hjºh]”hŒp”…”�”}”(hj‹Óh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj0Óubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj,ÓubjÜ)�”}”(hŒconst char *prefix”h]”(j¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hj£Óh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjŸÓubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Óh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjŸÓubjŠ-)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj¾Óh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjŸÓubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌÓh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjŸÓubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjÚÓh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjŸÓubjå)�”}”(hŒprefix”h]”hŒprefix”…”�”}”(hjçÓh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjŸÓubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj,ÓubjÜ)�”}”(hŒunsigned int series”h]”(jŠ-)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjüÓubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjüÓubjŠ-)�”}”(hŒint”h]”hŒint”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjüÓubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Ôh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjüÓubjå)�”}”(hŒseries”h]”hŒseries”…”�”}”(hj8Ôh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjüÓubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj,Óubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjÃÒh²hh³jÔÒh´M»ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj¿Òh²hh³jÔÒh´M»ubah}”(h]”jºÒah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jÔÒh´M»hj¼Òh²hubj)�”}”(hhh]”hÎ)�”}”(hŒIconstruct a :c:type:`drm_printer` that prefixes outputs with line numbers”h]”(hŒ construct a ”…”�”}”(hjbÔh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hjlÔh]”hŒ drm_printer”…”�”}”(hjnÔh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjjÔubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”jÓŒc.drm_line_printer”†”asbj Œ drm_printer”uh1hh³jæ¿h´KhjbÔubhŒ( that prefixes outputs with line numbers”…”�”}”(hjbÔh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M»hj_Ôh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¼Òh²hh³jÔÒh´M»ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j¢Ôj3j¢Ôj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´Nubj8)�”}”(hX**Parameters** ``struct drm_printer *p`` the :c:type:`struct drm_printer ` which actually generates the output ``const char *prefix`` optional output prefix, or NULL for no prefix ``unsigned int series`` optional unique series identifier, or 0 to omit identifier in the output **Description** This printer can be used to increase the robustness of the captured output to make sure we didn't lost any intermediate lines of the output. Helpful while capturing some crash data. Example 1:: void crash_dump(struct drm_device *drm) { static unsigned int id; struct drm_printer p = drm_err_printer(drm, "crash"); struct drm_printer lp = drm_line_printer(&p, "dump", ++id); drm_printf(&lp, "foo"); drm_printf(&lp, "bar"); } Above code will print into the dmesg something like:: [ ] 0000:00:00.0: [drm] *ERROR* crash dump 1.1: foo [ ] 0000:00:00.0: [drm] *ERROR* crash dump 1.2: bar Example 2:: void line_dump(struct device *dev) { struct drm_printer p = drm_info_printer(dev); struct drm_printer lp = drm_line_printer(&p, NULL, 0); drm_printf(&lp, "foo"); drm_printf(&lp, "bar"); } Above code will print:: [ ] 0000:00:00.0: [drm] 1: foo [ ] 0000:00:00.0: [drm] 2: bar **Return** The :c:type:`drm_printer` object”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj¬Ôh]”hŒ Parameters”…”�”}”(hj®Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjªÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M¿hj¦Ôubj„)�”}”(hhh]”(j‰)�”}”(hŒm``struct drm_printer *p`` the :c:type:`struct drm_printer ` which actually generates the output ”h]”(j�)�”}”(hŒ``struct drm_printer *p``”h]”jî)�”}”(hjËÔh]”hŒstruct drm_printer *p”…”�”}”(hjÍÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÉÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M¼hjÅÔubj©)�”}”(hhh]”hÎ)�”}”(hŒRthe :c:type:`struct drm_printer ` which actually generates the output”h]”(hŒthe ”…”�”}”(hjäÔh²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct drm_printer `”h]”jî)�”}”(hjîÔh]”hŒstruct drm_printer”…”�”}”(hjðÔh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjìÔubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ drm_printer”uh1hh³jàÔh´M¼hjäÔubhŒ$ which actually generates the output”…”�”}”(hjäÔh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jàÔh´M¼hjáÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÅÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jàÔh´M¼hjÂÔubj‰)�”}”(hŒE``const char *prefix`` optional output prefix, or NULL for no prefix ”h]”(j�)�”}”(hŒ``const char *prefix``”h]”jî)�”}”(hj'Õh]”hŒconst char *prefix”…”�”}”(hj)Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj%Õubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M½hj!Õubj©)�”}”(hhh]”hÎ)�”}”(hŒ-optional output prefix, or NULL for no prefix”h]”hŒ-optional output prefix, or NULL for no prefix”…”�”}”(hj@Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j<Õh´M½hj=Õubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj!Õubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j<Õh´M½hjÂÔubj‰)�”}”(hŒa``unsigned int series`` optional unique series identifier, or 0 to omit identifier in the output ”h]”(j�)�”}”(hŒ``unsigned int series``”h]”jî)�”}”(hj`Õh]”hŒunsigned int series”…”�”}”(hjbÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj^Õubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M¾hjZÕubj©)�”}”(hhh]”hÎ)�”}”(hŒHoptional unique series identifier, or 0 to omit identifier in the output”h]”hŒHoptional unique series identifier, or 0 to omit identifier in the output”…”�”}”(hjyÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³juÕh´M¾hjvÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjZÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³juÕh´M¾hjÂÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj¦ÔubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj›Õh]”hŒ Description”…”�”}”(hj�Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj™Õubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MÀhj¦ÔubhÎ)�”}”(hŒµThis printer can be used to increase the robustness of the captured output to make sure we didn't lost any intermediate lines of the output. Helpful while capturing some crash data.”h]”hŒ·This printer can be used to increase the robustness of the captured output to make sure we didn’t lost any intermediate lines of the output. Helpful while capturing some crash data.”…”�”}”(hj±Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M¿hj¦ÔubhÎ)�”}”(hŒ Example 1::”h]”hŒ Example 1:”…”�”}”(hjÀÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MÃhj¦Ôubj)�”}”(hXvoid crash_dump(struct drm_device *drm) { static unsigned int id; struct drm_printer p = drm_err_printer(drm, "crash"); struct drm_printer lp = drm_line_printer(&p, "dump", ++id); drm_printf(&lp, "foo"); drm_printf(&lp, "bar"); }”h]”hXvoid crash_dump(struct drm_device *drm) { static unsigned int id; struct drm_printer p = drm_err_printer(drm, "crash"); struct drm_printer lp = drm_line_printer(&p, "dump", ++id); drm_printf(&lp, "foo"); drm_printf(&lp, "bar"); }”…”�”}”hjÏÕsbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MÅhj¦ÔubhÎ)�”}”(hŒ5Above code will print into the dmesg something like::”h]”hŒ4Above code will print into the dmesg something like:”…”�”}”(hjÞÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MÏhj¦Ôubj)�”}”(hŒg[ ] 0000:00:00.0: [drm] *ERROR* crash dump 1.1: foo [ ] 0000:00:00.0: [drm] *ERROR* crash dump 1.2: bar”h]”hŒg[ ] 0000:00:00.0: [drm] *ERROR* crash dump 1.1: foo [ ] 0000:00:00.0: [drm] *ERROR* crash dump 1.2: bar”…”�”}”hjíÕsbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MÑhj¦ÔubhÎ)�”}”(hŒ Example 2::”h]”hŒ Example 2:”…”�”}”(hjüÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MÔhj¦Ôubj)�”}”(hŒÜvoid line_dump(struct device *dev) { struct drm_printer p = drm_info_printer(dev); struct drm_printer lp = drm_line_printer(&p, NULL, 0); drm_printf(&lp, "foo"); drm_printf(&lp, "bar"); }”h]”hŒÜvoid line_dump(struct device *dev) { struct drm_printer p = drm_info_printer(dev); struct drm_printer lp = drm_line_printer(&p, NULL, 0); drm_printf(&lp, "foo"); drm_printf(&lp, "bar"); }”…”�”}”hj Ösbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MÖhj¦ÔubhÎ)�”}”(hŒAbove code will print::”h]”hŒAbove code will print:”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Mßhj¦Ôubj)�”}”(hŒ=[ ] 0000:00:00.0: [drm] 1: foo [ ] 0000:00:00.0: [drm] 2: bar”h]”hŒ=[ ] 0000:00:00.0: [drm] 1: foo [ ] 0000:00:00.0: [drm] 2: bar”…”�”}”hj)Ösbah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Máhj¦ÔubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hj:Öh]”hŒReturn”…”�”}”(hj<Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj8Öubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Mähj¦ÔubhÎ)�”}”(hŒ The :c:type:`drm_printer` object”h]”(hŒThe ”…”�”}”(hjPÖh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hjZÖh]”hŒ drm_printer”…”�”}”(hj\Öh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjXÖubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_printer”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MåhjPÖubhŒ object”…”�”}”(hjPÖh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jwÖh´Måhj¦Ôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦ŒDRM_DEV_ERROR (C macro)”Œc.DRM_DEV_ERROR”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ DRM_DEV_ERROR”h]”j¶)�”}”(hŒ DRM_DEV_ERROR”h]”jß)�”}”(hŒ DRM_DEV_ERROR”h]”jå)�”}”(hjœÖh]”hŒ DRM_DEV_ERROR”…”�”}”(hj¦Öh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¢Öubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjžÖh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjšÖh²hh³j¹Öh´Mubah}”(h]”j•Öah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j¹Öh´Mhj—Öh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj—Öh²hh³j¹Öh´Mubeh}”(h]”h ]”(júŒmacro”eh"]”h$]”h&]”j1júj2jÒÖj3jÒÖj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´NubhÎ)�”}”(hŒ!``DRM_DEV_ERROR (dev, fmt, ...)``”h]”jî)�”}”(hjØÖh]”hŒDRM_DEV_ERROR (dev, fmt, ...)”…”�”}”(hjÚÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÖÖubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Mhj6¹h²hubj+)�”}”(hŒError output. ”h]”hÎ)�”}”(hŒ Error output.”h]”hŒ Error output.”…”�”}”(hjòÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MhjîÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j +h³j×h´Mhj6¹h²hubj8)�”}”(hŒ°**Parameters** ``dev`` device pointer ``fmt`` printf() like format string. ``...`` variable arguments **NOTE** this is deprecated in favor of drm_err() or dev_err().”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj ×h]”hŒ Parameters”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj ×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Mhj×ubj„)�”}”(hhh]”(j‰)�”}”(hŒ``dev`` device pointer ”h]”(j�)�”}”(hŒ``dev``”h]”jî)�”}”(hj,×h]”hŒdev”…”�”}”(hj.×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj*×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Mhj&×ubj©)�”}”(hhh]”hÎ)�”}”(hŒdevice pointer”h]”hŒdevice pointer”…”�”}”(hjE×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jA×h´MhjB×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj&×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jA×h´Mhj#×ubj‰)�”}”(hŒ%``fmt`` printf() like format string. ”h]”(j�)�”}”(hŒ``fmt``”h]”jî)�”}”(hje×h]”hŒfmt”…”�”}”(hjg×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjc×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M hj_×ubj©)�”}”(hhh]”hÎ)�”}”(hŒprintf() like format string.”h]”hŒprintf() like format string.”…”�”}”(hj~×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jz×h´M hj{×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj_×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jz×h´M hj#×ubj‰)�”}”(hŒ``...`` variable arguments ”h]”(j�)�”}”(hŒ``...``”h]”jî)�”}”(hjž×h]”hŒ...”…”�”}”(hj ×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjœ×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Khj˜×ubj©)�”}”(hhh]”hÎ)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hj·×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j³×h´Khj´×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj˜×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j³×h´Khj#×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj×ubhÎ)�”}”(hŒ**NOTE**”h]”jB)�”}”(hjÙ×h]”hŒNOTE”…”�”}”(hjÛ×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj××ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Khj×ubhÎ)�”}”(hŒ6this is deprecated in favor of drm_err() or dev_err().”h]”hŒ6this is deprecated in favor of drm_err() or dev_err().”…”�”}”(hjï×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Mhj×ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œ#DRM_DEV_ERROR_RATELIMITED (C macro)”Œc.DRM_DEV_ERROR_RATELIMITED”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒDRM_DEV_ERROR_RATELIMITED”h]”j¶)�”}”(hŒDRM_DEV_ERROR_RATELIMITED”h]”jß)�”}”(hŒDRM_DEV_ERROR_RATELIMITED”h]”jå)�”}”(hjØh]”hŒDRM_DEV_ERROR_RATELIMITED”…”�”}”(hj"Øh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjØubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjØh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjØh²hh³j5Øh´Mubah}”(h]”jØah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j5Øh´MhjØh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhjØh²hh³j5Øh´Mubeh}”(h]”h ]”(júŒmacro”eh"]”h$]”h&]”j1júj2jNØj3jNØj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´NubhÎ)�”}”(hŒ-``DRM_DEV_ERROR_RATELIMITED (dev, fmt, ...)``”h]”jî)�”}”(hjTØh]”hŒ)DRM_DEV_ERROR_RATELIMITED (dev, fmt, ...)”…”�”}”(hjVØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjRØubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Mhj6¹h²hubj+)�”}”(hŒRate limited error output. ”h]”hÎ)�”}”(hŒRate limited error output.”h]”hŒRate limited error output.”…”�”}”(hjnØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MhjjØubah}”(h]”h ]”h"]”h$]”h&]”uh1j +h³j|Øh´Mhj6¹h²hubj8)�”}”(hX**Parameters** ``dev`` device pointer ``fmt`` printf() like format string. ``...`` variable arguments **NOTE** this is deprecated in favor of drm_err_ratelimited() or dev_err_ratelimited(). **Description** Like DRM_ERROR() but won't flood the log.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj‰Øh]”hŒ Parameters”…”�”}”(hj‹Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj‡Øubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MhjƒØubj„)�”}”(hhh]”(j‰)�”}”(hŒ``dev`` device pointer ”h]”(j�)�”}”(hŒ``dev``”h]”jî)�”}”(hj¨Øh]”hŒdev”…”�”}”(hjªØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj¦Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Mhj¢Øubj©)�”}”(hhh]”hÎ)�”}”(hŒdevice pointer”h]”hŒdevice pointer”…”�”}”(hjÁØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j½Øh´Mhj¾Øubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¢Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j½Øh´MhjŸØubj‰)�”}”(hŒ%``fmt`` printf() like format string. ”h]”(j�)�”}”(hŒ``fmt``”h]”jî)�”}”(hjáØh]”hŒfmt”…”�”}”(hjãØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjߨubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MhjÛØubj©)�”}”(hhh]”hÎ)�”}”(hŒprintf() like format string.”h]”hŒprintf() like format string.”…”�”}”(hjúØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jöØh´Mhj÷Øubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÛØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jöØh´MhjŸØubj‰)�”}”(hŒ``...`` variable arguments ”h]”(j�)�”}”(hŒ``...``”h]”jî)�”}”(hjÙh]”hŒ...”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KhjÙubj©)�”}”(hhh]”hÎ)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hj3Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j/Ùh´Khj0Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j/Ùh´KhjŸØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjƒØubhÎ)�”}”(hŒ**NOTE**”h]”jB)�”}”(hjUÙh]”hŒNOTE”…”�”}”(hjWÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjSÙubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KhjƒØubhÎ)�”}”(hŒNthis is deprecated in favor of drm_err_ratelimited() or dev_err_ratelimited().”h]”hŒNthis is deprecated in favor of drm_err_ratelimited() or dev_err_ratelimited().”…”�”}”(hjkÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MhjƒØubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj|Ùh]”hŒ Description”…”�”}”(hj~Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjzÙubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MhjƒØubhÎ)�”}”(hŒ)Like DRM_ERROR() but won't flood the log.”h]”hŒ+Like DRM_ERROR() but won’t flood the log.”…”�”}”(hj’Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MhjƒØubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦ŒDRM_DEV_DEBUG (C macro)”Œc.DRM_DEV_DEBUG”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ DRM_DEV_DEBUG”h]”j¶)�”}”(hŒ DRM_DEV_DEBUG”h]”jß)�”}”(hŒ DRM_DEV_DEBUG”h]”jå)�”}”(hj»Ùh]”hŒ DRM_DEV_DEBUG”…”�”}”(hjÅÙh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÁÙubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj½Ùh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M;ubah}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj¹Ùh²hh³jØÙh´M;ubah}”(h]”j´Ùah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jØÙh´M;hj¶Ùh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶Ùh²hh³jØÙh´M;ubeh}”(h]”h ]”(júŒmacro”eh"]”h$]”h&]”j1júj2jñÙj3jñÙj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´NubhÎ)�”}”(hŒ!``DRM_DEV_DEBUG (dev, fmt, ...)``”h]”jî)�”}”(hj÷Ùh]”hŒDRM_DEV_DEBUG (dev, fmt, ...)”…”�”}”(hjùÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjõÙubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M=hj6¹h²hubj+)�”}”(hŒ"Debug output for generic drm code ”h]”hÎ)�”}”(hŒ!Debug output for generic drm code”h]”hŒ!Debug output for generic drm code”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M;hj Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j +h³jÚh´M;hj6¹h²hubj8)�”}”(hŒ¨**Parameters** ``dev`` device pointer ``fmt`` printf() like format string. ``...`` variable arguments **NOTE** this is deprecated in favor of drm_dbg_core().”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj,Úh]”hŒ Parameters”…”�”}”(hj.Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj*Úubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M?hj&Úubj„)�”}”(hhh]”(j‰)�”}”(hŒ``dev`` device pointer ”h]”(j�)�”}”(hŒ``dev``”h]”jî)�”}”(hjKÚh]”hŒdev”…”�”}”(hjMÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjIÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M?hjEÚubj©)�”}”(hhh]”hÎ)�”}”(hŒdevice pointer”h]”hŒdevice pointer”…”�”}”(hjdÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j`Úh´M?hjaÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjEÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j`Úh´M?hjBÚubj‰)�”}”(hŒ%``fmt`` printf() like format string. ”h]”(j�)�”}”(hŒ``fmt``”h]”jî)�”}”(hj„Úh]”hŒfmt”…”�”}”(hj†Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj‚Úubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M@hj~Úubj©)�”}”(hhh]”hÎ)�”}”(hŒprintf() like format string.”h]”hŒprintf() like format string.”…”�”}”(hj�Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j™Úh´M@hjšÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj~Úubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j™Úh´M@hjBÚubj‰)�”}”(hŒ``...`` variable arguments ”h]”(j�)�”}”(hŒ``...``”h]”jî)�”}”(hj½Úh]”hŒ...”…”�”}”(hj¿Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj»Úubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Khj·Úubj©)�”}”(hhh]”hÎ)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hjÖÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÒÚh´KhjÓÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj·Úubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÒÚh´KhjBÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj&ÚubhÎ)�”}”(hŒ**NOTE**”h]”jB)�”}”(hjøÚh]”hŒNOTE”…”�”}”(hjúÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjöÚubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Khj&ÚubhÎ)�”}”(hŒ.this is deprecated in favor of drm_dbg_core().”h]”hŒ.this is deprecated in favor of drm_dbg_core().”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´M=hj&Úubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦ŒDRM_DEV_DEBUG_DRIVER (C macro)”Œc.DRM_DEV_DEBUG_DRIVER”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒDRM_DEV_DEBUG_DRIVER”h]”j¶)�”}”(hŒDRM_DEV_DEBUG_DRIVER”h]”jß)�”}”(hŒDRM_DEV_DEBUG_DRIVER”h]”jå)�”}”(hj7Ûh]”hŒDRM_DEV_DEBUG_DRIVER”…”�”}”(hjAÛh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj=Ûubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj9Ûh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MEubah}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj5Ûh²hh³jTÛh´MEubah}”(h]”j0Ûah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jTÛh´MEhj2Ûh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj2Ûh²hh³jTÛh´MEubeh}”(h]”h ]”(júŒmacro”eh"]”h$]”h&]”j1júj2jmÛj3jmÛj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´NubhÎ)�”}”(hŒ(``DRM_DEV_DEBUG_DRIVER (dev, fmt, ...)``”h]”jî)�”}”(hjsÛh]”hŒ$DRM_DEV_DEBUG_DRIVER (dev, fmt, ...)”…”�”}”(hjuÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjqÛubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MGhj6¹h²hubj+)�”}”(hŒ4Debug output for vendor specific part of the driver ”h]”hÎ)�”}”(hŒ3Debug output for vendor specific part of the driver”h]”hŒ3Debug output for vendor specific part of the driver”…”�”}”(hj�Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MEhj‰Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1j +h³j›Ûh´MEhj6¹h²hubj8)�”}”(hŒ°**Parameters** ``dev`` device pointer ``fmt`` printf() like format string. ``...`` variable arguments **NOTE** this is deprecated in favor of drm_dbg() or dev_dbg().”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj¨Ûh]”hŒ Parameters”…”�”}”(hjªÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¦Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MIhj¢Ûubj„)�”}”(hhh]”(j‰)�”}”(hŒ``dev`` device pointer ”h]”(j�)�”}”(hŒ``dev``”h]”jî)�”}”(hjÇÛh]”hŒdev”…”�”}”(hjÉÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÅÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MIhjÁÛubj©)�”}”(hhh]”hÎ)�”}”(hŒdevice pointer”h]”hŒdevice pointer”…”�”}”(hjàÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÜÛh´MIhjÝÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÁÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÜÛh´MIhj¾Ûubj‰)�”}”(hŒ%``fmt`` printf() like format string. ”h]”(j�)�”}”(hŒ``fmt``”h]”jî)�”}”(hjÜh]”hŒfmt”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjþÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MJhjúÛubj©)�”}”(hhh]”hÎ)�”}”(hŒprintf() like format string.”h]”hŒprintf() like format string.”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÜh´MJhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjúÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÜh´MJhj¾Ûubj‰)�”}”(hŒ``...`` variable arguments ”h]”(j�)�”}”(hŒ``...``”h]”jî)�”}”(hj9Üh]”hŒ...”…”�”}”(hj;Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj7Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Khj3Üubj©)�”}”(hhh]”hÎ)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hjRÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jNÜh´KhjOÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj3Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jNÜh´Khj¾Ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj¢ÛubhÎ)�”}”(hŒ**NOTE**”h]”jB)�”}”(hjtÜh]”hŒNOTE”…”�”}”(hjvÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjrÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Khj¢ÛubhÎ)�”}”(hŒ6this is deprecated in favor of drm_dbg() or dev_dbg().”h]”hŒ6this is deprecated in favor of drm_dbg() or dev_dbg().”…”�”}”(hjŠÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MGhj¢Ûubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦ŒDRM_DEV_DEBUG_KMS (C macro)”Œc.DRM_DEV_DEBUG_KMS”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒDRM_DEV_DEBUG_KMS”h]”j¶)�”}”(hŒDRM_DEV_DEBUG_KMS”h]”jß)�”}”(hŒDRM_DEV_DEBUG_KMS”h]”jå)�”}”(hj³Üh]”hŒDRM_DEV_DEBUG_KMS”…”�”}”(hj½Üh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj¹Üubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjµÜh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MOubah}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj±Üh²hh³jÐÜh´MOubah}”(h]”j¬Üah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jÐÜh´MOhj®Üh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj®Üh²hh³jÐÜh´MOubeh}”(h]”h ]”(júŒmacro”eh"]”h$]”h&]”j1júj2jéÜj3jéÜj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´NubhÎ)�”}”(hŒ%``DRM_DEV_DEBUG_KMS (dev, fmt, ...)``”h]”jî)�”}”(hjïÜh]”hŒ!DRM_DEV_DEBUG_KMS (dev, fmt, ...)”…”�”}”(hjñÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjíÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MQhj6¹h²hubj+)�”}”(hŒ"Debug output for modesetting code ”h]”hÎ)�”}”(hŒ!Debug output for modesetting code”h]”hŒ!Debug output for modesetting code”…”�”}”(hj Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MOhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j +h³jÝh´MOhj6¹h²hubj8)�”}”(hŒ§**Parameters** ``dev`` device pointer ``fmt`` printf() like format string. ``...`` variable arguments **NOTE** this is deprecated in favor of drm_dbg_kms().”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj$Ýh]”hŒ Parameters”…”�”}”(hj&Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj"Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MShjÝubj„)�”}”(hhh]”(j‰)�”}”(hŒ``dev`` device pointer ”h]”(j�)�”}”(hŒ``dev``”h]”jî)�”}”(hjCÝh]”hŒdev”…”�”}”(hjEÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjAÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MShj=Ýubj©)�”}”(hhh]”hÎ)�”}”(hŒdevice pointer”h]”hŒdevice pointer”…”�”}”(hj\Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jXÝh´MShjYÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj=Ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jXÝh´MShj:Ýubj‰)�”}”(hŒ%``fmt`` printf() like format string. ”h]”(j�)�”}”(hŒ``fmt``”h]”jî)�”}”(hj|Ýh]”hŒfmt”…”�”}”(hj~Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjzÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MThjvÝubj©)�”}”(hhh]”hÎ)�”}”(hŒprintf() like format string.”h]”hŒprintf() like format string.”…”�”}”(hj•Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j‘Ýh´MThj’Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjvÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j‘Ýh´MThj:Ýubj‰)�”}”(hŒ``...`` variable arguments ”h]”(j�)�”}”(hŒ``...``”h]”jî)�”}”(hjµÝh]”hŒ...”…”�”}”(hj·Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj³Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´Khj¯Ýubj©)�”}”(hhh]”hÎ)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hjÎÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÊÝh´KhjËÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¯Ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÊÝh´Khj:Ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÝubhÎ)�”}”(hŒ**NOTE**”h]”jB)�”}”(hjðÝh]”hŒNOTE”…”�”}”(hjòÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjîÝubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´KhjÝubhÎ)�”}”(hŒ-this is deprecated in favor of drm_dbg_kms().”h]”hŒ-this is deprecated in favor of drm_dbg_kms().”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:166: ./include/drm/drm_print.h”h´MQhjÝubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_puts (C function)”Œ c.drm_puts”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ6void drm_puts (struct drm_printer *p, const char *str)”h]”j¶)�”}”(hŒ5void drm_puts(struct drm_printer *p, const char *str)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj5Þh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj1Þh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´MubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDÞh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj1Þh²hh³jCÞh´Mubjß)�”}”(hŒdrm_puts”h]”jå)�”}”(hŒdrm_puts”h]”hŒdrm_puts”…”�”}”(hjVÞh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjRÞubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj1Þh²hh³jCÞh´MubjÖ)�”}”(hŒ((struct drm_printer *p, const char *str)”h]”(jÜ)�”}”(hŒstruct drm_printer *p”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjrÞh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjnÞubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjnÞubh)�”}”(hhh]”jå)�”}”(hŒ drm_printer”h]”hŒ drm_printer”…”�”}”(hj�Þh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj�Þubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j’ÞŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jXÞsbŒ c.drm_puts”†”asbuh1hhjnÞubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Þh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjnÞubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj¾Þh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjnÞubjå)�”}”(hjºh]”hŒp”…”�”}”(hjËÞh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjnÞubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjjÞubjÜ)�”}”(hŒconst char *str”h]”(j¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hjãÞh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjßÞubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðÞh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjßÞubjŠ-)�”•@à}”(hŒchar”h]”hŒchar”…”�”}”(hjþÞh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjßÞubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ßh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjßÞubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjßÞubjå)�”}”(hŒstr”h]”hŒstr”…”�”}”(hj'ßh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjßÞubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjjÞubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj1Þh²hh³jCÞh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj-Þh²hh³jCÞh´Mubah}”(h]”j(Þah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jCÞh´Mhj*Þh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ6print a const string to a :c:type:`drm_printer` stream”h]”(hŒprint a const string to a ”…”�”}”(hjQßh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hj[ßh]”hŒ drm_printer”…”�”}”(hj]ßh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjYßubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”j¬ÞŒ c.drm_puts”†”asbj Œ drm_printer”uh1hh³jCÞh´MhjQßubhŒ stream”…”�”}”(hjQßh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´MhjNßh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj*Þh²hh³jCÞh´Mubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j‘ßj3j‘ßj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´Nubj8)�”}”(hŒË**Parameters** ``struct drm_printer *p`` the :c:type:`drm` printer ``const char *str`` const string **Description** Allow :c:type:`drm_printer` types that have a constant string option to use it.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj›ßh]”hŒ Parameters”…”�”}”(hj�ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj™ßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´Mhj•ßubj„)�”}”(hhh]”(j‰)�”}”(hŒ4``struct drm_printer *p`` the :c:type:`drm` printer ”h]”(j�)�”}”(hŒ``struct drm_printer *p``”h]”jî)�”}”(hjºßh]”hŒstruct drm_printer *p”…”�”}”(hj¼ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj¸ßubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´Mhj´ßubj©)�”}”(hhh]”hÎ)�”}”(hŒthe :c:type:`drm` printer”h]”(hŒthe ”…”�”}”(hjÓßh²hh³Nh´Nubh)�”}”(hŒ :c:type:`drm`”h]”jî)�”}”(hjÝßh]”hŒdrm”…”�”}”(hjßßh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjÛßubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œdrm”uh1hh³jÏßh´MhjÓßubhŒ printer”…”�”}”(hjÓßh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÏßh´MhjÐßubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj´ßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÏßh´Mhj±ßubj‰)�”}”(hŒ!``const char *str`` const string ”h]”(j�)�”}”(hŒ``const char *str``”h]”jî)�”}”(hjàh]”hŒconst char *str”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´Mhjàubj©)�”}”(hhh]”hÎ)�”}”(hŒ const string”h]”hŒ const string”…”�”}”(hj/àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j+àh´Mhj,àubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjàubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j+àh´Mhj±ßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj•ßubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjQàh]”hŒ Description”…”�”}”(hjSàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjOàubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´Mhj•ßubhÎ)�”}”(hŒOAllow :c:type:`drm_printer` types that have a constant string option to use it.”h]”(hŒAllow ”…”�”}”(hjgàh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hjqàh]”hŒ drm_printer”…”�”}”(hjsàh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjoàubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_printer”uh1hh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´MhjgàubhŒ4 types that have a constant string option to use it.”…”�”}”(hjgàh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jŽàh´Mhj•ßubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_printf (C function)”Œ c.drm_printf”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ;void drm_printf (struct drm_printer *p, const char *f, ...)”h]”j¶)�”}”(hŒ:void drm_printf(struct drm_printer *p, const char *f, ...)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¹àh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjµàh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´MubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈàh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjµàh²hh³jÇàh´Mubjß)�”}”(hŒ drm_printf”h]”jå)�”}”(hŒ drm_printf”h]”hŒ drm_printf”…”�”}”(hjÚàh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÖàubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjµàh²hh³jÇàh´MubjÖ)�”}”(hŒ+(struct drm_printer *p, const char *f, ...)”h]”(jÜ)�”}”(hŒstruct drm_printer *p”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hjöàh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjòàubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjòàubh)�”}”(hhh]”jå)�”}”(hŒ drm_printer”h]”hŒ drm_printer”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjáubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jáŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jÜàsbŒ c.drm_printf”†”asbuh1hhjòàubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4áh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjòàubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjBáh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjòàubjå)�”}”(hjºh]”hŒp”…”�”}”(hjOáh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjòàubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjîàubjÜ)�”}”(hŒ const char *f”h]”(j¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hjgáh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjcáubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtáh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjcáubjŠ-)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj‚áh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjcáubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�áh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjcáubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjžáh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjcáubjå)�”}”(hjnµh]”hŒf”…”�”}”(hj«áh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjcáubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjîàubjÜ)�”}”(hŒ...”h]”j®)�”}”(hjзh]”hŒ...”…”�”}”(hjÃáh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj¿áubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjîàubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjµàh²hh³jÇàh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj±àh²hh³jÇàh´Mubah}”(h]”j¬àah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jÇàh´Mhj®àh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ'print to a :c:type:`drm_printer` stream”h]”(hŒ print to a ”…”�”}”(hjìáh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hjöáh]”hŒ drm_printer”…”�”}”(hjøáh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjôáubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”j0ጠc.drm_printf”†”asbj Œ drm_printer”uh1hh³jCÞh´MhjìáubhŒ stream”…”�”}”(hjìáh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´Mhjéáh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®àh²hh³jÇàh´Mubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j,âj3j,âj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´Nubj8)�”}”(hŒ†**Parameters** ``struct drm_printer *p`` the :c:type:`drm_printer` ``const char *f`` format string ``...`` variable arguments”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hj6âh]”hŒ Parameters”…”�”}”(hj8âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj4âubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´Mhj0âubj„)�”}”(hhh]”(j‰)�”}”(hŒ4``struct drm_printer *p`` the :c:type:`drm_printer` ”h]”(j�)�”}”(hŒ``struct drm_printer *p``”h]”jî)�”}”(hjUâh]”hŒstruct drm_printer *p”…”�”}”(hjWâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjSâubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´MhjOâubj©)�”}”(hhh]”hÎ)�”}”(hŒthe :c:type:`drm_printer`”h]”(hŒthe ”…”�”}”(hjnâh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hjxâh]”hŒ drm_printer”…”�”}”(hjzâh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjvâubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_printer”uh1hh³jjâh´Mhjnâubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jjâh´Mhjkâubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjOâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jjâh´MhjLâubj‰)�”}”(hŒ ``const char *f`` format string ”h]”(j�)�”}”(hŒ``const char *f``”h]”jî)�”}”(hj­âh]”hŒ const char *f”…”�”}”(hj¯âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj«âubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´Mhj§âubj©)�”}”(hhh]”hÎ)�”}”(hŒ format string”h]”hŒ format string”…”�”}”(hjÆâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÂâh´MhjÃâubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj§âubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jÂâh´MhjLâubj‰)�”}”(hŒ``...`` variable arguments”h]”(j�)�”}”(hŒ``...``”h]”jî)�”}”(hjæâh]”hŒ...”…”�”}”(hjèâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjäâubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´Mhjàâubj©)�”}”(hhh]”hÎ)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hjÿâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´Khjüâubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjàâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jûâh´MhjLâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj0âubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_print_bits (C function)”Œc.drm_print_bits”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒovoid drm_print_bits (struct drm_printer *p, unsigned long value, const char * const bits[], unsigned int nbits)”h]”j¶)�”}”(hŒmvoid drm_print_bits(struct drm_printer *p, unsigned long value, const char *const bits[], unsigned int nbits)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj@ãh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj<ãh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´M ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOãh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj<ãh²hh³jNãh´M ubjß)�”}”(hŒdrm_print_bits”h]”jå)�”}”(hŒdrm_print_bits”h]”hŒdrm_print_bits”…”�”}”(hjaãh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj]ãubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj<ãh²hh³jNãh´M ubjÖ)�”}”(hŒZ(struct drm_printer *p, unsigned long value, const char *const bits[], unsigned int nbits)”h]”(jÜ)�”}”(hŒstruct drm_printer *p”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj}ãh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjyãubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠãh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjyãubh)�”}”(hhh]”jå)�”}”(hŒ drm_printer”h]”hŒ drm_printer”…”�”}”(hj›ãh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj˜ãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j�ãŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jcãsbŒc.drm_print_bits”†”asbuh1hhjyãubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»ãh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjyãubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjÉãh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjyãubjå)�”}”(hjºh]”hŒp”…”�”}”(hjÖãh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjyãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjuãubjÜ)�”}”(hŒunsigned long value”h]”(jŠ-)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjîãh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjêãubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüãh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjêãubjŠ-)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj äh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjêãubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjêãubjå)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hj&äh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjêãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjuãubjÜ)�”}”(hŒconst char *const bits[]”h]”(j¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hj?äh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj;äubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLäh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj;äubjŠ-)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjZäh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj;äubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhäh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj;äubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjväh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj;äubj¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hjƒäh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj;äubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�äh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj;äubjå)�”}”(hŒbits”h]”hŒbits”…”�”}”(hjžäh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj;äubj®)�”}”(hŒ[”h]”hŒ[”…”�”}”(hj¬äh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj;äubj®)�”}”(hŒ]”h]”hŒ]”…”�”}”(hjºäh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj;äubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjuãubjÜ)�”}”(hŒunsigned int nbits”h]”(jŠ-)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÓäh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjÏäubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáäh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÏäubjŠ-)�”}”(hŒint”h]”hŒint”…”�”}”(hjïäh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjÏäubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýäh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÏäubjå)�”}”(hŒnbits”h]”hŒnbits”…”�”}”(hj åh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÏäubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjuãubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj<ãh²hh³jNãh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj8ãh²hh³jNãh´M ubah}”(h]”j3ãah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jNãh´M hj5ãh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ,print bits to a :c:type:`drm_printer` stream”h]”(hŒprint bits to a ”…”�”}”(hj5åh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hj?åh]”hŒ drm_printer”…”�”}”(hjAåh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj=åubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”j·ãŒc.drm_print_bits”†”asbj Œ drm_printer”uh1hh³jCÞh´Mhj5åubhŒ stream”…”�”}”(hj5åh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´M hj2åh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5ãh²hh³jNãh´M ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2juåj3juåj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´Nubj8)�”}”(hX)**Parameters** ``struct drm_printer *p`` the :c:type:`drm_printer` ``unsigned long value`` field value. ``const char * const bits[]`` Array with bit names. ``unsigned int nbits`` Size of bit names array. **Description** Print bits (in flag fields for example) in human readable form.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjåh]”hŒ Parameters”…”�”}”(hj�åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj}åubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´M$hjyåubj„)�”}”(hhh]”(j‰)�”}”(hŒ4``struct drm_printer *p`` the :c:type:`drm_printer` ”h]”(j�)�”}”(hŒ``struct drm_printer *p``”h]”jî)�”}”(hjžåh]”hŒstruct drm_printer *p”…”�”}”(hj åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjœåubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´M$hj˜åubj©)�”}”(hhh]”hÎ)�”}”(hŒthe :c:type:`drm_printer`”h]”(hŒthe ”…”�”}”(hj·åh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hjÁåh]”hŒ drm_printer”…”�”}”(hjÃåh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj¿åubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_printer”uh1hh³j³åh´M$hj·åubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j³åh´M$hj´åubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj˜åubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j³åh´M$hj•åubj‰)�”}”(hŒ%``unsigned long value`` field value. ”h]”(j�)�”}”(hŒ``unsigned long value``”h]”jî)�”}”(hjöåh]”hŒunsigned long value”…”�”}”(hjøåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjôåubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´M%hjðåubj©)�”}”(hhh]”hÎ)�”}”(hŒ field value.”h]”hŒ field value.”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j æh´M%hj æubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjðåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j æh´M%hj•åubj‰)�”}”(hŒ4``const char * const bits[]`` Array with bit names. ”h]”(j�)�”}”(hŒ``const char * const bits[]``”h]”jî)�”}”(hj/æh]”hŒconst char * const bits[]”…”�”}”(hj1æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj-æubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´M&hj)æubj©)�”}”(hhh]”hÎ)�”}”(hŒArray with bit names.”h]”hŒArray with bit names.”…”�”}”(hjHæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jDæh´M&hjEæubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj)æubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jDæh´M&hj•åubj‰)�”}”(hŒ0``unsigned int nbits`` Size of bit names array. ”h]”(j�)�”}”(hŒ``unsigned int nbits``”h]”jî)�”}”(hjhæh]”hŒunsigned int nbits”…”�”}”(hjjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjfæubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´M'hjbæubj©)�”}”(hhh]”hÎ)�”}”(hŒSize of bit names array.”h]”hŒSize of bit names array.”…”�”}”(hj�æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j}æh´M'hj~æubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjbæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j}æh´M'hj•åubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjyåubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hj£æh]”hŒ Description”…”�”}”(hj¥æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¡æubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´M)hjyåubhÎ)�”}”(hŒ?Print bits (in flag fields for example) in human readable form.”h]”hŒ?Print bits (in flag fields for example) in human readable form.”…”�”}”(hj¹æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´M!hjyåubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_print_regset32 (C function)”Œc.drm_print_regset32”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒPvoid drm_print_regset32 (struct drm_printer *p, struct debugfs_regset32 *regset)”h]”j¶)�”}”(hŒOvoid drm_print_regset32(struct drm_printer *p, struct debugfs_regset32 *regset)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjèæh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjäæh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´MrubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷æh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjäæh²hh³jöæh´Mrubjß)�”}”(hŒdrm_print_regset32”h]”jå)�”}”(hŒdrm_print_regset32”h]”hŒdrm_print_regset32”…”�”}”(hj çh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjçubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjäæh²hh³jöæh´MrubjÖ)�”}”(hŒ8(struct drm_printer *p, struct debugfs_regset32 *regset)”h]”(jÜ)�”}”(hŒstruct drm_printer *p”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj%çh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj!çubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2çh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj!çubh)�”}”(hhh]”jå)�”}”(hŒ drm_printer”h]”hŒ drm_printer”…”�”}”(hjCçh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj@çubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jEçŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘j çsbŒc.drm_print_regset32”†”asbuh1hhj!çubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcçh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj!çubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjqçh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj!çubjå)�”}”(hjºh]”hŒp”…”�”}”(hj~çh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj!çubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjçubjÜ)�”}”(hŒstruct debugfs_regset32 *regset”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj–çh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj’çubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£çh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj’çubh)�”}”(hhh]”jå)�”}”(hŒdebugfs_regset32”h]”hŒdebugfs_regset32”…”�”}”(hj´çh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj±çubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j¶çŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j_çŒc.drm_print_regset32”†”asbuh1hhj’çubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒçh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj’çubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjàçh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj’çubjå)�”}”(hŒregset”h]”hŒregset”…”�”}”(hjíçh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj’çubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjçubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjäæh²hh³jöæh´Mrubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjàæh²hh³jöæh´Mrubah}”(h]”jÛæah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jöæh´MrhjÝæh²hubj)�”}”(hhh]”hÎ)�”}”(hŒBprint the contents of registers to a :c:type:`drm_printer` stream.”h]”(hŒ%print the contents of registers to a ”…”�”}”(hjèh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hj!èh]”hŒ drm_printer”…”�”}”(hj#èh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjèubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”j_çŒc.drm_print_regset32”†”asbj Œ drm_printer”uh1hh³jCÞh´MhjèubhŒ stream.”…”�”}”(hjèh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´Mrhjèh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÝæh²hh³jöæh´Mrubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jWèj3jWèj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´Nubj8)�”}”(hX‚**Parameters** ``struct drm_printer *p`` the :c:type:`drm` printer ``struct debugfs_regset32 *regset`` the list of registers to print. **Description** Often in driver debug, it's useful to be able to either capture the contents of registers in the steady state using debugfs or at specific points during operation. This lets the driver have a single list of registers for both.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjaèh]”hŒ Parameters”…”�”}”(hjcèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj_èubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´Mvhj[èubj„)�”}”(hhh]”(j‰)�”}”(hŒ4``struct drm_printer *p`` the :c:type:`drm` printer ”h]”(j�)�”}”(hŒ``struct drm_printer *p``”h]”jî)�”}”(hj€èh]”hŒstruct drm_printer *p”…”�”}”(hj‚èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj~èubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´Muhjzèubj©)�”}”(hhh]”hÎ)�”}”(hŒthe :c:type:`drm` printer”h]”(hŒthe ”…”�”}”(hj™èh²hh³Nh´Nubh)�”}”(hŒ :c:type:`drm`”h]”jî)�”}”(hj£èh]”hŒdrm”…”�”}”(hj¥èh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj¡èubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œdrm”uh1hh³j•èh´Muhj™èubhŒ printer”…”�”}”(hj™èh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j•èh´Muhj–èubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjzèubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j•èh´Muhjwèubj‰)�”}”(hŒD``struct debugfs_regset32 *regset`` the list of registers to print. ”h]”(j�)�”}”(hŒ#``struct debugfs_regset32 *regset``”h]”jî)�”}”(hjÜèh]”hŒstruct debugfs_regset32 *regset”…”�”}”(hjÞèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÚèubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´MvhjÖèubj©)�”}”(hhh]”hÎ)�”}”(hŒthe list of registers to print.”h]”hŒthe list of registers to print.”…”�”}”(hjõèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jñèh´Mvhjòèubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÖèubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jñèh´Mvhjwèubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj[èubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjéh]”hŒ Description”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´Mxhj[èubhÎ)�”}”(hŒãOften in driver debug, it's useful to be able to either capture the contents of registers in the steady state using debugfs or at specific points during operation. This lets the driver have a single list of registers for both.”h]”hŒåOften in driver debug, it’s useful to be able to either capture the contents of registers in the steady state using debugfs or at specific points during operation. This lets the driver have a single list of registers for both.”…”�”}”(hj-éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´Mwhj[èubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_print_hex_dump (C function)”Œc.drm_print_hex_dump”hNt”auh1j™hj6¹h²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒ^void drm_print_hex_dump (struct drm_printer *p, const char *prefix, const u8 *buf, size_t len)”h]”j¶)�”}”(hŒ]void drm_print_hex_dump(struct drm_printer *p, const char *prefix, const u8 *buf, size_t len)”h]”(jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj\éh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjXéh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´MŽubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkéh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjXéh²hh³jjéh´MŽubjß)�”}”(hŒdrm_print_hex_dump”h]”jå)�”}”(hŒdrm_print_hex_dump”h]”hŒdrm_print_hex_dump”…”�”}”(hj}éh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjyéubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhjXéh²hh³jjéh´MŽubjÖ)�”}”(hŒF(struct drm_printer *p, const char *prefix, const u8 *buf, size_t len)”h]”(jÜ)�”}”(hŒstruct drm_printer *p”h]”(j¼)�”}”(hj¿h]”hŒstruct”…”�”}”(hj™éh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hj•éubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦éh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj•éubh)�”}”(hhh]”jå)�”}”(hŒ drm_printer”h]”hŒ drm_printer”…”�”}”(hj·éh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj´éubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j¹éŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”j™)�”}”j‘jésbŒc.drm_print_hex_dump”†”asbuh1hhj•éubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×éh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj•éubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjåéh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hj•éubjå)�”}”(hjºh]”hŒp”…”�”}”(hjòéh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj•éubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj‘éubjÜ)�”}”(hŒconst char *prefix”h]”(j¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hj êh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjêubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjêubjŠ-)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj%êh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjêubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3êh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjêubj®)�”}”(hj±h]”hŒ*”…”�”}”(hjAêh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjêubjå)�”}”(hŒprefix”h]”hŒprefix”…”�”}”(hjNêh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj‘éubjÜ)�”}”(hŒ const u8 *buf”h]”(j¼)�”}”(hjZ/h]”hŒconst”…”�”}”(hjgêh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”uh1j»hjcêubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtêh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjcêubh)�”}”(hhh]”jå)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj…êh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj‚êubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”j‡êŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jÓéŒc.drm_print_hex_dump”†”asbuh1hhjcêubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£êh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjcêubj®)�”}”(hj±h]”hŒ*”…”�”}”(hj±êh²hh³Nh´Nubah}”(h]”h ]”jºah"]”h$]”h&]”uh1j­hjcêubjå)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj¾êh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjcêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj‘éubjÜ)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”jå)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÚêh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähj×êubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”júŒreftype”j‘Œ reftarget”jÜêŒmodname”NŒ classname”NjÔ j× )�”}”jÚ ]”jÓéŒc.drm_print_hex_dump”†”asbuh1hhjÓêubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøêh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhjÓêubjå)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjÓêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhj‘éubeh}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhjXéh²hh³jjéh´MŽubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhjTéh²hh³jjéh´MŽubah}”(h]”jOéah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³jjéh´MŽhjQéh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ2print a hex dump to a :c:type:`drm_printer` stream”h]”(hŒprint a hex dump to a ”…”�”}”(hj0ëh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hj:ëh]”hŒ drm_printer”…”�”}”(hj<ëh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj8ëubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ j× )�”}”jÚ ]”jÓéŒc.drm_print_hex_dump”†”asbj Œ drm_printer”uh1hh³jCÞh´Mhj0ëubhŒ stream”…”�”}”(hj0ëh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´MŽhj-ëh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQéh²hh³jjéh´MŽubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2jpëj3jpëj4‰j5‰j6‰uh1jªh²hhj6¹h³Nh´Nubj8)�”}”(hXˆ**Parameters** ``struct drm_printer *p`` The :c:type:`drm_printer` ``const char *prefix`` Prefix for each line, may be NULL for no prefix ``const u8 *buf`` Buffer to dump ``size_t len`` Length of buffer **Description** Print hex dump to :c:type:`drm_printer`, with 16 space-separated hex bytes per line, optionally with a prefix on each line. No separator is added after prefix.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjzëh]”hŒ Parameters”…”�”}”(hj|ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjxëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´M’hjtëubj„)�”}”(hhh]”(j‰)�”}”(hŒ4``struct drm_printer *p`` The :c:type:`drm_printer` ”h]”(j�)�”}”(hŒ``struct drm_printer *p``”h]”jî)�”}”(hj™ëh]”hŒstruct drm_printer *p”…”�”}”(hj›ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj—ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´M�hj“ëubj©)�”}”(hhh]”hÎ)�”}”(hŒThe :c:type:`drm_printer`”h]”(hŒThe ”…”�”}”(hj²ëh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hj¼ëh]”hŒ drm_printer”…”�”}”(hj¾ëh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjºëubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_printer”uh1hh³j®ëh´M�hj²ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j®ëh´M�hj¯ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj“ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j®ëh´M�hj�ëubj‰)�”}”(hŒG``const char *prefix`` Prefix for each line, may be NULL for no prefix ”h]”(j�)�”}”(hŒ``const char *prefix``”h]”jî)�”}”(hjñëh]”hŒconst char *prefix”…”�”}”(hjóëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjïëubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´M�hjëëubj©)�”}”(hhh]”hÎ)�”}”(hŒ/Prefix for each line, may be NULL for no prefix”h]”hŒ/Prefix for each line, may be NULL for no prefix”…”�”}”(hj ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jìh´M�hjìubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjëëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jìh´M�hj�ëubj‰)�”}”(hŒ!``const u8 *buf`` Buffer to dump ”h]”(j�)�”}”(hŒ``const u8 *buf``”h]”jî)�”}”(hj*ìh]”hŒ const u8 *buf”…”�”}”(hj,ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj(ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´M‘hj$ìubj©)�”}”(hhh]”hÎ)�”}”(hŒBuffer to dump”h]”hŒBuffer to dump”…”�”}”(hjCìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³j?ìh´M‘hj@ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj$ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³j?ìh´M‘hj�ëubj‰)�”}”(hŒ ``size_t len`` Length of buffer ”h]”(j�)�”}”(hŒ``size_t len``”h]”jî)�”}”(hjcìh]”hŒ size_t len”…”�”}”(hjeìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjaìubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´M’hj]ìubj©)�”}”(hhh]”hÎ)�”}”(hŒLength of buffer”h]”hŒLength of buffer”…”�”}”(hj|ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jxìh´M’hjyìubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj]ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jxìh´M’hj�ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjtëubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjžìh]”hŒ Description”…”�”}”(hj ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjœìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´M”hjtëubhÎ)�”}”(hŒŸPrint hex dump to :c:type:`drm_printer`, with 16 space-separated hex bytes per line, optionally with a prefix on each line. No separator is added after prefix.”h]”(hŒPrint hex dump to ”…”�”}”(hj´ìh²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_printer`”h]”jî)�”}”(hj¾ìh]”hŒ drm_printer”…”�”}”(hjÀìh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhj¼ìubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÔ jØ j Œ drm_printer”uh1hh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:169: ./drivers/gpu/drm/drm_print.c”h´M“hj´ìubhŒx, with 16 space-separated hex bytes per line, optionally with a prefix on each line. No separator is added after prefix.”…”�”}”(hj´ìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jÛìh´M“hjtëubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hj6¹h²hh³Nh´Nubeh}”(h]”jqah ]”h"]”Œprinter”ah$]”h&]”uh1hµhj%¹h²hh³hÌh´K¡ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Utilities”h]”hŒ Utilities”…”�”}”(hj÷ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊj�uh1hºhjôìh²hh³hÌh´K­ubhÎ)�”}”(hŒJMacros and inline functions that does not naturally belong in other places”h]”hŒJMacros and inline functions that does not naturally belong in other places”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:175: ./include/drm/drm_util.h”h´Khjôìh²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j¦Œdrm_can_sleep (C function)”Œc.drm_can_sleep”hNt”auh1j™hjôìh²hh³Nh´Nubj«)�”}”(hhh]”(j°)�”}”(hŒbool drm_can_sleep (void)”h]”j¶)�”}”(hŒbool drm_can_sleep(void)”h]”(jŠ-)�”}”(hj�-h]”hŒbool”…”�”}”(hj-íh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hj)íh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:178: ./include/drm/drm_util.h”h´K4ubjÎ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;íh²hh³Nh´Nubah}”(h]”h ]”jÚah"]”h$]”h&]”uh1jÍhj)íh²hh³j:íh´K4ubjß)�”}”(hŒ drm_can_sleep”h]”jå)�”}”(hŒ drm_can_sleep”h]”hŒ drm_can_sleep”…”�”}”(hjMíh²hh³Nh´Nubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jähjIíubah}”(h]”h ]”(j÷jøeh"]”h$]”h&]”j+j,uh1jÞhj)íh²hh³j:íh´K4ubjÖ)�”}”(hŒ(void)”h]”jÜ)�”}”(hŒvoid”h]”jŠ-)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjiíh²hh³Nh´Nubah}”(h]”h ]”j–-ah"]”h$]”h&]”uh1j‰-hjeíubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj+j,uh1jÛhjaíubah}”(h]”h ]”h"]”h$]”h&]”j+j,uh1jÕhj)íh²hh³j:íh´K4ubeh}”(h]”h ]”h"]”h$]”h&]”j+j,jˆuh1jµjjhj%íh²hh³j:íh´K4ubah}”(h]”j íah ]”(jj eh"]”h$]”h&]”j ˆj)jhuh1j¯h³j:íh´K4hj"íh²hubj)�”}”(hhh]”hÎ)�”}”(hŒ'returns true if currently okay to sleep”h]”hŒ'returns true if currently okay to sleep”…”�”}”(hj“íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:178: ./include/drm/drm_util.h”h´K4hj�íh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj"íh²hh³j:íh´K4ubeh}”(h]”h ]”(júŒfunction”eh"]”h$]”h&]”j1júj2j«íj3j«íj4‰j5‰j6‰uh1jªh²hhjôìh³Nh´Nubj8)�”}”(hXK**Parameters** ``void`` no arguments **Description** This function shall not be used in new code. The check for running in atomic context may not work - see linux/preempt.h. FIXME: All users of drm_can_sleep should be removed (see todo.rst) **Return** False if kgdb is active, we are in atomic context or irqs are disabled.”h]”(hÎ)�”}”(hŒ**Parameters**”h]”jB)�”}”(hjµíh]”hŒ Parameters”…”�”}”(hj·íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj³íubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:178: ./include/drm/drm_util.h”h´K8hj¯íubj„)�”}”(hhh]”j‰)�”}”(hŒ``void`` no arguments ”h]”(j�)�”}”(hŒ``void``”h]”jî)�”}”(hjÔíh]”hŒvoid”…”�”}”(hjÖíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÒíubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:178: ./include/drm/drm_util.h”h´KhjÎíubj©)�”}”(hhh]”hÎ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjííh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³jéíh´Khjêíubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjÎíubeh}”(h]”h ]”h"]”h$]”h&]”uh1jˆh³jéíh´KhjËíubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj¯íubhÎ)�”}”(hŒ**Description**”h]”jB)�”}”(hjîh]”hŒ Description”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj îubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:178: ./include/drm/drm_util.h”h´Khj¯íubhÎ)�”}”(hŒxThis function shall not be used in new code. The check for running in atomic context may not work - see linux/preempt.h.”h]”hŒxThis function shall not be used in new code. The check for running in atomic context may not work - see linux/preempt.h.”…”�”}”(hj%îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:178: ./include/drm/drm_util.h”h´K5hj¯íubhÎ)�”}”(hŒBFIXME: All users of drm_can_sleep should be removed (see todo.rst)”h]”hŒBFIXME: All users of drm_can_sleep should be removed (see todo.rst)”…”�”}”(hj4îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:178: ./include/drm/drm_util.h”h´K8hj¯íubhÎ)�”}”(hŒ **Return**”h]”jB)�”}”(hjEîh]”hŒReturn”…”�”}”(hjGîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjCîubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:178: ./include/drm/drm_util.h”h´K:hj¯íubhÎ)�”}”(hŒGFalse if kgdb is active, we are in atomic context or irqs are disabled.”h]”hŒGFalse if kgdb is active, we are in atomic context or irqs are disabled.”…”�”}”(hj[îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/drm-internals:178: ./include/drm/drm_util.h”h´K;hj¯íubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j7hjôìh²hh³Nh´Nubeh}”(h]”j“ah ]”h"]”Œ utilities”ah$]”h&]”uh1hµhj%¹h²hh³hÌh´K­ubeh}”(h]”jRah ]”h"]”Œmisc utilities”ah$]”h&]”uh1hµhh·h²hh³hÌh´Kžubh¶)�”}”(hhh]”(h»)�”}”(hŒ Unit testing”h]”hŒ Unit testing”…”�”}”(hj‚îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊj»uh1hºhjîh²hh³hÌh´K·ubh¶)�”}”(hhh]”(h»)�”}”(hŒKUnit”h]”hŒKUnit”…”�”}”(hj“îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊjÚuh1hºhj�îh²hh³hÌh´KºubhÎ)�”}”(hŒiKUnit (Kernel unit testing framework) provides a common framework for unit tests within the Linux kernel.”h]”hŒiKUnit (Kernel unit testing framework) provides a common framework for unit tests within the Linux kernel.”…”�”}”(hj¡îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´K¼hj�îh²hubhÎ)�”}”(hŒ–This section covers the specifics for the DRM subsystem. For general information about KUnit, please refer to Documentation/dev-tools/kunit/start.rst.”h]”hŒ–This section covers the specifics for the DRM subsystem. For general information about KUnit, please refer to Documentation/dev-tools/kunit/start.rst.”…”�”}”(hj¯îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´K¿hj�îh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒHow to run the tests?”h]”hŒHow to run the tests?”…”�”}”(hjÀîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊjùuh1hºhj½îh²hh³hÌh´KÃubhÎ)�”}”(hŒ¤In order to facilitate running the test suite, a configuration file is present in ``drivers/gpu/drm/tests/.kunitconfig``. It can be used by ``kunit.py`` as follows:”h]”(hŒRIn order to facilitate running the test suite, a configuration file is present in ”…”�”}”(hjÎîh²hh³Nh´Nubjî)�”}”(hŒ&``drivers/gpu/drm/tests/.kunitconfig``”h]”hŒ"drivers/gpu/drm/tests/.kunitconfig”…”�”}”(hjÖîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÎîubhŒ. It can be used by ”…”�”}”(hjÎîh²hh³Nh´Nubjî)�”}”(hŒ ``kunit.py``”h]”hŒkunit.py”…”�”}”(hjèîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjÎîubhŒ as follows:”…”�”}”(hjÎîh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´KÅhj½îh²hubj)�”}”(hŒ©$ ./tools/testing/kunit/kunit.py run --kunitconfig=drivers/gpu/drm/tests \ --kconfig_add CONFIG_VIRTIO_UML=y \ --kconfig_add CONFIG_UML_PCI_OVER_VIRTIO=y”h]”hŒ©$ ./tools/testing/kunit/kunit.py run --kunitconfig=drivers/gpu/drm/tests \ --kconfig_add CONFIG_VIRTIO_UML=y \ --kconfig_add CONFIG_UML_PCI_OVER_VIRTIO=y”…”�”}”hjïsbah}”(h]”h ]”h"]”h$]”h&]”j+j,j-‰j.Œbash”j/}”uh1jh³hÌh´KÉhj½îh²hubhŒnote”“”)�”}”(hŒÔThe configuration included in ``.kunitconfig`` should be as generic as possible. ``CONFIG_VIRTIO_UML`` and ``CONFIG_UML_PCI_OVER_VIRTIO`` are not included in it because they are only required for User Mode Linux.”h]”hÎ)�”}”(hŒÔThe configuration included in ``.kunitconfig`` should be as generic as possible. ``CONFIG_VIRTIO_UML`` and ``CONFIG_UML_PCI_OVER_VIRTIO`` are not included in it because they are only required for User Mode Linux.”h]”(hŒThe configuration included in ”…”�”}”(hjïh²hh³Nh´Nubjî)�”}”(hŒ``.kunitconfig``”h]”hŒ .kunitconfig”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjïubhŒ# should be as generic as possible. ”…”�”}”(hjïh²hh³Nh´Nubjî)�”}”(hŒ``CONFIG_VIRTIO_UML``”h]”hŒCONFIG_VIRTIO_UML”…”�”}”(hj0ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjïubhŒ and ”…”�”}”(hjïh²hh³Nh´Nubjî)�”}”(hŒ``CONFIG_UML_PCI_OVER_VIRTIO``”h]”hŒCONFIG_UML_PCI_OVER_VIRTIO”…”�”}”(hjBïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjïubhŒK are not included in it because they are only required for User Mode Linux.”…”�”}”(hjïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´KÐhjïubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj½îh²hh³hÌh´Nubeh}”(h]”jÿah ]”h"]”Œhow to run the tests?”ah$]”h&]”uh1hµhj�îh²hh³hÌh´KÃubh¶)�”}”(hhh]”(h»)�”}”(hŒKUnit Coverage Rules”h]”hŒKUnit Coverage Rules”…”�”}”(hjjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊjuh1hºhjgïh²hh³hÌh´KÖubhÎ)�”}”(hX*KUnit support is gradually added to the DRM framework and helpers. There's no general requirement for the framework and helpers to have KUnit tests at the moment. However, patches that are affecting a function or helper already covered by KUnit tests must provide tests if the change calls for one.”h]”hX,KUnit support is gradually added to the DRM framework and helpers. There’s no general requirement for the framework and helpers to have KUnit tests at the moment. However, patches that are affecting a function or helper already covered by KUnit tests must provide tests if the change calls for one.”…”�”}”(hjxïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´KØhjgïh²hubeh}”(h]”j!ah ]”h"]”Œkunit coverage rules”ah$]”h&]”uh1hµhj�îh²hh³hÌh´KÖubeh}”(h]”jàah ]”h"]”Œkunit”ah$]”h&]”uh1hµhjîh²hh³hÌh´Kºubeh}”(h]”jÁah ]”h"]”Œ unit testing”ah$]”h&]”uh1hµhh·h²hh³hÌh´K·ubh¶)�”}”(hhh]”(h»)�”}”(hŒLegacy Support Code”h]”hŒLegacy Support Code”…”�”}”(hjžïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊjUuh1hºhj›ïh²hh³hÌh´KÞubhÎ)�”}”(hXaThe section very briefly covers some of the old legacy support code which is only used by old DRM drivers which have done a so-called shadow-attach to the underlying device instead of registering as a real driver. This also includes some of the old generic buffer management and command submission code. Do not use any of this in new and modern drivers.”h]”hXaThe section very briefly covers some of the old legacy support code which is only used by old DRM drivers which have done a so-called shadow-attach to the underlying device instead of registering as a real driver. This also includes some of the old generic buffer management and command submission code. Do not use any of this in new and modern drivers.”…”�”}”(hj¬ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´Kàhj›ïh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒLegacy Suspend/Resume”h]”hŒLegacy Suspend/Resume”…”�”}”(hj½ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊjtuh1hºhjºïh²hh³hÌh´KèubhÎ)�”}”(hX/The DRM core provides some suspend/resume code, but drivers wanting full suspend/resume support should provide save() and restore() functions. These are called at suspend, hibernate, or resume time, and should perform any state save or restore required by your device across suspend or hibernate states.”h]”hX/The DRM core provides some suspend/resume code, but drivers wanting full suspend/resume support should provide save() and restore() functions. These are called at suspend, hibernate, or resume time, and should perform any state save or restore required by your device across suspend or hibernate states.”…”�”}”(hjËïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´Kêhjºïh²hubhÎ)�”}”(hXœint (\*suspend) (struct drm_device \*, pm_message_t state); int (\*resume) (struct drm_device \*); Those are legacy suspend and resume methods which *only* work with the legacy shadow-attach driver registration functions. New driver should use the power management interface provided by their bus type (usually through the :c:type:`struct device_driver ` dev_pm_ops) and set these methods to NULL.”h]”(hŒ•int (*suspend) (struct drm_device *, pm_message_t state); int (*resume) (struct drm_device *); Those are legacy suspend and resume methods which ”…”�”}”(hjÙïh²hh³Nh´NubjÑE)�”}”(hŒ*only*”h]”hŒonly”…”�”}”(hjáïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐEhjÙïubhŒ¨ work with the legacy shadow-attach driver registration functions. New driver should use the power management interface provided by their bus type (usually through the ”…”�”}”(hjÙïh²hh³Nh´Nubh)�”}”(hŒ.:c:type:`struct device_driver `”h]”jî)�”}”(hjõïh]”hŒstruct device_driver”…”�”}”(hj÷ïh²hh³Nh´Nubah}”(h]”h ]”(jùjúŒc-type”eh"]”h$]”h&]”uh1jíhjóïubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”júŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÔ jØ j Œ device_driver”uh1hh³hÌh´KðhjÙïubhŒ+ dev_pm_ops) and set these methods to NULL.”…”�”}”(hjÙïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´Kðhjºïh²hubeh}”(h]”jzah ]”h"]”Œlegacy suspend/resume”ah$]”h&]”uh1hµhj›ïh²hh³hÌh´Kèubh¶)�”}”(hhh]”(h»)�”}”(hŒLegacy DMA Services”h]”hŒLegacy DMA Services”…”�”}”(hj&ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÊj–uh1hºhj#ðh²hh³hÌh´KùubhÎ)�”}”(hŒwThis should cover how DMA mapping etc. is supported by the core. These functions are deprecated and should not be used.”h]”hŒwThis should cover how DMA mapping etc. is supported by the core. These functions are deprecated and should not be used.”…”�”}”(hj4ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍh³hÌh´Kûhj#ðh²hubeh}”(h]”jœah ]”h"]”Œlegacy dma services”ah$]”h&]”uh1hµhj›ïh²hh³hÌh´Kùubeh}”(h]”j[ah ]”h"]”Œlegacy support code”ah$]”h&]”uh1hµhh·h²hh³hÌh´KÞubeh}”(h]”j*ah ]”h"]”Œ drm internals”ah$]”h&]”uh1hµhhh²hh³hÌh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÌuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jzðŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÌŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”j¦r]”jœrasŒnameids”}”(jTðj*jÍjÉj†rjIjéjhj®j‡jâj©jEj×júSjùj–jj•UjFjBUjejhUj‡jŽUj©jrj×j"¹jj¹j¦rj¹j$j|îjRjñìjqjuîj“j˜ïjÁj‘ïjàjdïjÿjŠïj!jMðj[j ðjzjFðjœuŒ nametypes”}”(jTð‰j͉j†r‰jé‰j®‰jâ‰jE‰júS‰j–‰j•U‰jBU‰jhU‰jŽU‰jr‰j"¹‰j¹ˆj¹‰j|î‰jñì‰juî‰j˜ï‰j‘ï‰jdï‰jŠï‰jMð‰j ð‰jFð‰uh}”(j*h·jÉhûjIjÐjhjlj‡j}j©j±j×jìjùjHjjSj¨j±j j j£ j¨ jOjTj=jBjäjéj´*j¹*j|-j�-j/j/jÈ1jÍ1j›4j 4j6j 6jÒ7j×7jô9jù9j8;j=;jË<jÐ<j?j ?jKBjPBj4Fj9FjþHjIjÄJjÉJjWLj\LjOj„OjQRjVRjFjýSjejTj‡jEUj©jkUj×j˜UjKVjPVjBYjGYj\j\j_j _jZaj_aj]cjbcj*ej/ejhjhjXkj]kj¯nj´nj[pj`pjj‰rj¦rj§rj$j§rjAtjGtjuujzujyjyj÷†jü†júˆjÿˆjýŠj‹j�j�j�j�j«‘j°‘j”j$”j“–j˜–j9šj>šjÏœjÔœjÖ jÛ jܤjá¤j§j§jªj ªjs¬jx¬jà®jå®j0²j5²jY´j^´jµ¶jº¶jRj%¹jqj6¹j€¹j…¹jO½jT½j<¾jA¾jÁjÁj´Âj¹Âj0Äj5ÄjºÆj¿Æj`ÈjeÈj›Êj Êj¸Ìj½ÌjÐj ÐjºÒj¿Òj•ÖjšÖjØjØj´Ùj¹Ùj0Ûj5Ûj¬Üj±Üj(Þj-Þj¬àj±àj3ãj8ãjÛæjàæjOéjTéj“jôìj íj%íjÁjîjàj�îjÿj½îj!jgïj[j›ïjzjºïjœj#ðhËjjCj:jbjYj�jxj£jšjÑjÈjójêjj j@j7j_jVj�jxj£jšjÑjÈjÿjöjjjLjCjkjbj�j„j»j²jÚjÑjùjðjjjUjLjtjkj–j�uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”jˆðKs…”R”Œparse_messages”]”hŒsystem_message”“”)�”}”(hhh]”hÎ)�”}”(hŒeUnexpected possible title overline or transition. Treating it as ordinary text because it's so short.”h]”hŒgUnexpected possible title overline or transition. Treating it as ordinary text because it’s so short.”…”�”}”(hjâðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjßðubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œline”KXŒsource”jù¼uh1jÝðhjè¼ubaŒtransform_messages”]”jÞð)�”}”(hhh]”hÎ)�”}”(hhh]”hŒ5Hyperlink target "drm-driver-fops" is not referenced.”…”�”}”hjñsbah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjýðubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”jøðŒsource”hÌŒline”K�uh1jÝðubaŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.