Blame include/drm/README

Packit Service 103f6b
What are these headers ?
Packit Service 103f6b
------------------------
Packit Service 103f6b
This is the canonical source of drm headers that user space should use for
Packit Service 103f6b
communicating with the kernel DRM subsystem.
Packit Service 103f6b
Packit Service 103f6b
They flow from the kernel, thus any changes must be merged there first.
Packit Service 103f6b
Do _not_ attempt to "fix" these by deviating from the kernel ones !
Packit Service 103f6b
Packit Service 103f6b
Packit Service 103f6b
Non-linux platforms - changes/patches
Packit Service 103f6b
-------------------------------------
Packit Service 103f6b
If your platform has local changes, please send them upstream for inclusion.
Packit Service 103f6b
Even if your patches don't get accepted in their current form, devs will
Packit Service 103f6b
give you feedback on how to address things properly.
Packit Service 103f6b
Packit Service 103f6b
git send-email --subject-prefix="PATCH libdrm" your patches to dri-devel
Packit Service 103f6b
mailing list.
Packit Service 103f6b
Packit Service 103f6b
Before doing so, please consider the following:
Packit Service 103f6b
 - Have the [libdrm vs kernel] headers on your platform deviated ?
Packit Service 103f6b
Consider unifying them first.
Packit Service 103f6b
Packit Service 103f6b
 - Have you introduced additional ABI that's not available in Linux ?
Packit Service 103f6b
Propose it for [Linux kernel] upstream inclusion.
Packit Service 103f6b
If that doesn't work out (hopefully it never does), move it to another header
Packit Service 103f6b
and/or keep the change(s) local ?
Packit Service 103f6b
Packit Service 103f6b
 - Are your changes DRI1/UMS specific ?
Packit Service 103f6b
There is virtually no interest/power in keeping those legacy interfaces. They
Packit Service 103f6b
are around due to the kernel "thou shalt not break existing user space" rule.
Packit Service 103f6b
Packit Service 103f6b
Consider porting the driver to DRI2/KMS - all (almost?) sensible hardware is
Packit Service 103f6b
capable of supporting those.
Packit Service 103f6b
Packit Service 103f6b
Packit Service 103f6b
Which headers go where ?
Packit Service 103f6b
------------------------
Packit Service 103f6b
A snipped from the, now removed, Makefile.am used to state:
Packit Service 103f6b
Packit Service 103f6b
  XXX airlied says, nothing besides *_drm.h and drm*.h should be necessary.
Packit Service 103f6b
  however, r300 and via need their reg headers installed in order to build.
Packit Service 103f6b
  better solutions are welcome.
Packit Service 103f6b
Packit Service 103f6b
Obviously the r300 and via headers are no longer around ;-)
Packit Service 103f6b
Packit Service 103f6b
Reason behind is that the drm headers can be used as a basic communications
Packit Service 103f6b
channel with the respective kernel modules. If more advanced functionality is
Packit Service 103f6b
required one can pull the specific libdrm_$driver which is free to pull
Packit Service 103f6b
additional files from the kernel.
Packit Service 103f6b
Packit Service 103f6b
For example: nouveau has nouveau/nvif/*.h while vc4 has vc4/*.h
Packit Service 103f6b
Packit Service 103f6b
If your driver is still in prototyping/staging state, consider moving the
Packit Service 103f6b
$driver_drm.h into $driver and _not_ installing it. An header providing opaque
Packit Service 103f6b
definitions and access [via $driver_drmif.h or similar] would be better fit.
Packit Service 103f6b
Packit Service 103f6b
Packit Service 103f6b
When and which headers to update
Packit Service 103f6b
--------------------------------
Packit Service 103f6b
Ideally all files will be synced (updated) with the latest released kernel on
Packit Service 103f6b
each libdrm release. Sadly that's not yet possible since quite a few headers
Packit Service 103f6b
differ significantly - see Outdated or Broken Headers section below.
Packit Service 103f6b
Packit Service 103f6b
That said, it's up-to the individual developers to sync with newer version
Packit Service 103f6b
(from drm-next) as they see fit.
Packit Service 103f6b
Packit Service 103f6b
Packit Service 103f6b
When and how to update these files
Packit Service 103f6b
----------------------------------
Packit Service 103f6b
Note: One should not do _any_ changes to the files apart from the steps below.
Packit Service 103f6b
Packit Service 103f6b
In order to update the files do the following:
Packit Service 103f6b
 - Switch to a Linux kernel tree/branch which is not rebased.
Packit Service 103f6b
   For example: drm-next (https://cgit.freedesktop.org/drm/drm)
Packit Service 103f6b
 - Install the headers via `make headers_install' to a separate location.
Packit Service 103f6b
 - Copy the drm header[s] + git add + git commit.
Packit Service 103f6b
 - Note: Your commit message must include:
Packit Service 103f6b
   a) Brief summary on the delta. If there's any change that looks like an
Packit Service 103f6b
API/ABI break one _must_ explicitly state why it's safe to do so.
Packit Service 103f6b
   b) "Generated using make headers_install."
Packit Service 103f6b
   c) "Generated from $tree/branch commit $sha"
Packit Service 103f6b
Packit Service 103f6b
Packit Service 103f6b
Outdated or Broken Headers
Packit Service 103f6b
--------------------------
Packit Service 103f6b
This section contains a list of headers and the respective "issues" they might
Packit Service 103f6b
have relative to their kernel equivalent.
Packit Service 103f6b
Packit Service 103f6b
Most UMS headers:
Packit Service 103f6b
 - Not using fixed size integers - compat ioctls are broken.
Packit Service 103f6b
Status: ?
Packit Service 103f6b
Promote to fixed size ints, which match the current (32bit) ones.
Packit Service 103f6b
Packit Service 103f6b
nouveau_drm.h
Packit Service 103f6b
 - Missing macros NOUVEAU_GETPARAM*, NOUVEAU_DRM_HEADER_PATCHLEVEL, structs,
Packit Service 103f6b
enums
Packit Service 103f6b
Status: Deliberate UABI choice; nouveau hides the exact kernel ABI behind libdrm
Packit Service 103f6b
Packit Service 103f6b
r128_drm.h
Packit Service 103f6b
 - Broken compat ioctls.
Packit Service 103f6b
Packit Service 103f6b
radeon_drm.h
Packit Service 103f6b
 - Missing RADEON_TILING_R600_NO_SCANOUT, CIK_TILE_MODE_*, broken UMS ioctls
Packit Service 103f6b
 - Both kernel and libdrm: missing padding -
Packit Service 103f6b
drm_radeon_gem_{create,{g,s}et_tiling,set_domain} others ?
Packit Service 103f6b
Status: ?
Packit Service 103f6b
Packit Service 103f6b
savage_drm.h
Packit Service 103f6b
 - Renamed ioctls - DRM_IOCTL_SAVAGE_{,BCI}_EVENT_EMIT, compat ioctls are broken.
Packit Service 103f6b
Status: ?
Packit Service 103f6b
Packit Service 103f6b
sis_drm.h
Packit Service 103f6b
 - Borken ioctls + libdrm uses int vs kernel long
Packit Service 103f6b
Status: ?
Packit Service 103f6b
Packit Service 103f6b
via_drm.h
Packit Service 103f6b
 - Borken ioctls - libdrm int vs kernel long
Packit Service 103f6b
Status: ?
Packit Service 103f6b
Packit Service 103f6b
Packit Service 103f6b
omap_drm.h (living in $TOP/omap)
Packit Service 103f6b
 - License mismatch, missing DRM_IOCTL_OMAP_GEM_NEW and related struct
Packit Service 103f6b
Status: ?
Packit Service 103f6b
Packit Service 103f6b
exynos_drm.h (living in $TOP/exynos)
Packit Service 103f6b
 - License mismatch, now using fixed size ints (but not everywhere). Lots of
Packit Service 103f6b
new stuff.
Packit Service 103f6b
Status: ?