Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) =============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) DRM Internals
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) =============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) This chapter documents DRM internals relevant to driver authors and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) developers working to add support for the latest features to existing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) drivers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) First, we go over some typical driver initialization requirements, like
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) setting up command buffers, creating an initial output configuration,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) and initializing core services. Subsequent sections cover core internals
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) in more detail, providing implementation notes and examples.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) The DRM layer provides several services to graphics drivers, many of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) them driven by the application interfaces it provides through libdrm,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) the library that wraps most of the DRM ioctls. These include vblank
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) event handling, memory management, output management, framebuffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) management, command submission & fencing, suspend/resume support, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) DMA services.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) Driver Initialization
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) =====================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) At the core of every DRM driver is a :c:type:`struct drm_driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) <drm_driver>` structure. Drivers typically statically initialize
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) a drm_driver structure, and then pass it to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) drm_dev_alloc() to allocate a device instance. After the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) device instance is fully initialized it can be registered (which makes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) it accessible from userspace) using drm_dev_register().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) The :c:type:`struct drm_driver <drm_driver>` structure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) contains static information that describes the driver and features it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) supports, and pointers to methods that the DRM core will call to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) implement the DRM API. We will first go through the :c:type:`struct
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) drm_driver <drm_driver>` static information fields, and will
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) then describe individual operations in details as they get used in later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) sections.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) Driver Information
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) ------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) Major, Minor and Patchlevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) ~~~~~~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) int major; int minor; int patchlevel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) The DRM core identifies driver versions by a major, minor and patch
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) level triplet. The information is printed to the kernel log at
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) initialization time and passed to userspace through the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) DRM_IOCTL_VERSION ioctl.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) The major and minor numbers are also used to verify the requested driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) API version passed to DRM_IOCTL_SET_VERSION. When the driver API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) changes between minor versions, applications can call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) DRM_IOCTL_SET_VERSION to select a specific version of the API. If the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) requested major isn't equal to the driver major, or the requested minor
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) is larger than the driver minor, the DRM_IOCTL_SET_VERSION call will
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) return an error. Otherwise the driver's set_version() method will be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) called with the requested version.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) Name, Description and Date
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) ~~~~~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) char \*name; char \*desc; char \*date;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) The driver name is printed to the kernel log at initialization time,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) used for IRQ registration and passed to userspace through
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) DRM_IOCTL_VERSION.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) The driver description is a purely informative string passed to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) userspace through the DRM_IOCTL_VERSION ioctl and otherwise unused by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) the kernel.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) The driver date, formatted as YYYYMMDD, is meant to identify the date of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) the latest modification to the driver. However, as most drivers fail to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) update it, its value is mostly useless. The DRM core prints it to the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) kernel log at initialization time and passes it to userspace through the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) DRM_IOCTL_VERSION ioctl.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) Device Instance and Driver Handling
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) -----------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) .. kernel-doc:: drivers/gpu/drm/drm_drv.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82)    :doc: driver instance overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) .. kernel-doc:: include/drm/drm_device.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85)    :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) .. kernel-doc:: include/drm/drm_drv.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88)    :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) .. kernel-doc:: drivers/gpu/drm/drm_drv.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91)    :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) Driver Load
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) -----------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) Component Helper Usage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) ~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) .. kernel-doc:: drivers/gpu/drm/drm_drv.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)    :doc: component helper usage recommendations
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) IRQ Helper Library
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) ~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) .. kernel-doc:: drivers/gpu/drm/drm_irq.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)    :doc: irq helpers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) .. kernel-doc:: drivers/gpu/drm/drm_irq.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)    :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) Memory Manager Initialization
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) Every DRM driver requires a memory manager which must be initialized at
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) load time. DRM currently contains two memory managers, the Translation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) Table Manager (TTM) and the Graphics Execution Manager (GEM). This
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) document describes the use of the GEM memory manager only. See ? for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) Miscellaneous Device Configuration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) Another task that may be necessary for PCI devices during configuration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) is mapping the video BIOS. On many devices, the VBIOS describes device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) configuration, LCD panel timings (if any), and contains flags indicating
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) device state. Mapping the BIOS can be done using the pci_map_rom()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) call, a convenience function that takes care of mapping the actual ROM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) whether it has been shadowed into memory (typically at address 0xc0000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) or exists on the PCI device in the ROM BAR. Note that after the ROM has
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) been mapped and any necessary information has been extracted, it should
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) be unmapped; on many devices, the ROM address decoder is shared with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) other BARs, so leaving it mapped could cause undesired behaviour like
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) hangs or memory corruption.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) Managed Resources
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) -----------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) .. kernel-doc:: drivers/gpu/drm/drm_managed.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)    :doc: managed resources
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) .. kernel-doc:: drivers/gpu/drm/drm_managed.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)    :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) .. kernel-doc:: include/drm/drm_managed.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145)    :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) Bus-specific Device Registration and PCI Support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) ------------------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) A number of functions are provided to help with device registration. The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) functions deal with PCI and platform devices respectively and are only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) provided for historical reasons. These are all deprecated and shouldn't
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) be used in new drivers. Besides that there's a few helpers for pci
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) drivers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) .. kernel-doc:: drivers/gpu/drm/drm_pci.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157)    :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) Open/Close, File Operations and IOCTLs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) ======================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) .. _drm_driver_fops:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) File Operations
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) ---------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) .. kernel-doc:: drivers/gpu/drm/drm_file.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)    :doc: file operations
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) .. kernel-doc:: include/drm/drm_file.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171)    :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) .. kernel-doc:: drivers/gpu/drm/drm_file.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174)    :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) Misc Utilities
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) ==============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) Printer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) -------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) .. kernel-doc:: include/drm/drm_print.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)    :doc: print
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) .. kernel-doc:: include/drm/drm_print.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186)    :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) .. kernel-doc:: drivers/gpu/drm/drm_print.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189)    :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) Utilities
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) ---------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) .. kernel-doc:: include/drm/drm_util.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195)    :doc: drm utils
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) .. kernel-doc:: include/drm/drm_util.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198)    :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) Legacy Support Code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) ===================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) The section very briefly covers some of the old legacy support code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) which is only used by old DRM drivers which have done a so-called
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) shadow-attach to the underlying device instead of registering as a real
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) driver. This also includes some of the old generic buffer management and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) command submission code. Do not use any of this in new and modern
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) drivers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) Legacy Suspend/Resume
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) ---------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) The DRM core provides some suspend/resume code, but drivers wanting full
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) suspend/resume support should provide save() and restore() functions.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) These are called at suspend, hibernate, or resume time, and should
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) perform any state save or restore required by your device across suspend
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) or hibernate states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) int (\*suspend) (struct drm_device \*, pm_message_t state); int
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) (\*resume) (struct drm_device \*);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) Those are legacy suspend and resume methods which *only* work with the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) legacy shadow-attach driver registration functions. New driver should
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) use the power management interface provided by their bus type (usually
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) through the :c:type:`struct device_driver <device_driver>`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) dev_pm_ops) and set these methods to NULL.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) Legacy DMA Services
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) -------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) This should cover how DMA mapping etc. is supported by the core. These
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) functions are deprecated and should not be used.