1*7688df22SAndroid Build Coastguard WorkerWhat are these headers ? 2*7688df22SAndroid Build Coastguard Worker------------------------ 3*7688df22SAndroid Build Coastguard WorkerThis is the canonical source of drm headers that user space should use for 4*7688df22SAndroid Build Coastguard Workercommunicating with the kernel DRM subsystem. 5*7688df22SAndroid Build Coastguard Worker 6*7688df22SAndroid Build Coastguard WorkerThey flow from the kernel, thus any changes must be merged there first. 7*7688df22SAndroid Build Coastguard WorkerDo _not_ attempt to "fix" these by deviating from the kernel ones ! 8*7688df22SAndroid Build Coastguard Worker 9*7688df22SAndroid Build Coastguard Worker 10*7688df22SAndroid Build Coastguard WorkerNon-linux platforms - changes/patches 11*7688df22SAndroid Build Coastguard Worker------------------------------------- 12*7688df22SAndroid Build Coastguard WorkerIf your platform has local changes, please send them upstream for inclusion. 13*7688df22SAndroid Build Coastguard WorkerEven if your patches don't get accepted in their current form, devs will 14*7688df22SAndroid Build Coastguard Workergive you feedback on how to address things properly. 15*7688df22SAndroid Build Coastguard Worker 16*7688df22SAndroid Build Coastguard Workergit send-email --subject-prefix="PATCH libdrm" your patches to dri-devel 17*7688df22SAndroid Build Coastguard Workermailing list. 18*7688df22SAndroid Build Coastguard Worker 19*7688df22SAndroid Build Coastguard WorkerBefore doing so, please consider the following: 20*7688df22SAndroid Build Coastguard Worker - Have the [libdrm vs kernel] headers on your platform deviated ? 21*7688df22SAndroid Build Coastguard WorkerConsider unifying them first. 22*7688df22SAndroid Build Coastguard Worker 23*7688df22SAndroid Build Coastguard Worker - Have you introduced additional ABI that's not available in Linux ? 24*7688df22SAndroid Build Coastguard WorkerPropose it for [Linux kernel] upstream inclusion. 25*7688df22SAndroid Build Coastguard WorkerIf that doesn't work out (hopefully it never does), move it to another header 26*7688df22SAndroid Build Coastguard Workerand/or keep the change(s) local ? 27*7688df22SAndroid Build Coastguard Worker 28*7688df22SAndroid Build Coastguard Worker - Are your changes DRI1/UMS specific ? 29*7688df22SAndroid Build Coastguard WorkerThere is virtually no interest/power in keeping those legacy interfaces. They 30*7688df22SAndroid Build Coastguard Workerare around due to the kernel "thou shalt not break existing user space" rule. 31*7688df22SAndroid Build Coastguard Worker 32*7688df22SAndroid Build Coastguard WorkerConsider porting the driver to DRI2/KMS - all (almost?) sensible hardware is 33*7688df22SAndroid Build Coastguard Workercapable of supporting those. 34*7688df22SAndroid Build Coastguard Worker 35*7688df22SAndroid Build Coastguard Worker 36*7688df22SAndroid Build Coastguard WorkerWhich headers go where ? 37*7688df22SAndroid Build Coastguard Worker------------------------ 38*7688df22SAndroid Build Coastguard WorkerA snipped from the, now removed, Makefile.am used to state: 39*7688df22SAndroid Build Coastguard Worker 40*7688df22SAndroid Build Coastguard Worker XXX airlied says, nothing besides *_drm.h and drm*.h should be necessary. 41*7688df22SAndroid Build Coastguard Worker however, r300 and via need their reg headers installed in order to build. 42*7688df22SAndroid Build Coastguard Worker better solutions are welcome. 43*7688df22SAndroid Build Coastguard Worker 44*7688df22SAndroid Build Coastguard WorkerObviously the r300 and via headers are no longer around ;-) 45*7688df22SAndroid Build Coastguard Worker 46*7688df22SAndroid Build Coastguard WorkerReason behind is that the drm headers can be used as a basic communications 47*7688df22SAndroid Build Coastguard Workerchannel with the respective kernel modules. If more advanced functionality is 48*7688df22SAndroid Build Coastguard Workerrequired one can pull the specific libdrm_$driver which is free to pull 49*7688df22SAndroid Build Coastguard Workeradditional files from the kernel. 50*7688df22SAndroid Build Coastguard Worker 51*7688df22SAndroid Build Coastguard WorkerFor example: nouveau has nouveau/nvif/*.h while vc4 has vc4/*.h 52*7688df22SAndroid Build Coastguard Worker 53*7688df22SAndroid Build Coastguard WorkerIf your driver is still in prototyping/staging state, consider moving the 54*7688df22SAndroid Build Coastguard Worker$driver_drm.h into $driver and _not_ installing it. An header providing opaque 55*7688df22SAndroid Build Coastguard Workerdefinitions and access [via $driver_drmif.h or similar] would be better fit. 56*7688df22SAndroid Build Coastguard Worker 57*7688df22SAndroid Build Coastguard Worker 58*7688df22SAndroid Build Coastguard WorkerWhen and which headers to update 59*7688df22SAndroid Build Coastguard Worker-------------------------------- 60*7688df22SAndroid Build Coastguard WorkerIdeally all files will be synced (updated) with the latest released kernel on 61*7688df22SAndroid Build Coastguard Workereach libdrm release. Sadly that's not yet possible since quite a few headers 62*7688df22SAndroid Build Coastguard Workerdiffer significantly - see Outdated or Broken Headers section below. 63*7688df22SAndroid Build Coastguard Worker 64*7688df22SAndroid Build Coastguard WorkerThat said, it's up-to the individual developers to sync with newer version 65*7688df22SAndroid Build Coastguard Worker(from drm-next) as they see fit. 66*7688df22SAndroid Build Coastguard Worker 67*7688df22SAndroid Build Coastguard Worker 68*7688df22SAndroid Build Coastguard WorkerWhen and how to update these files 69*7688df22SAndroid Build Coastguard Worker---------------------------------- 70*7688df22SAndroid Build Coastguard WorkerNote: One should not do _any_ changes to the files apart from the steps below. 71*7688df22SAndroid Build Coastguard Worker 72*7688df22SAndroid Build Coastguard WorkerIn order to update the files do the following: 73*7688df22SAndroid Build Coastguard Worker - Switch to a Linux kernel tree/branch which is not rebased. 74*7688df22SAndroid Build Coastguard Worker For example: drm-next (https://gitlab.freedesktop.org/drm/kernel/) 75*7688df22SAndroid Build Coastguard Worker - Install the headers via `make headers_install' to a separate location. 76*7688df22SAndroid Build Coastguard Worker - Copy the drm header[s] + git add + git commit. 77*7688df22SAndroid Build Coastguard Worker - Note: Your commit message must include: 78*7688df22SAndroid Build Coastguard Worker a) Brief summary on the delta. If there's any change that looks like an 79*7688df22SAndroid Build Coastguard WorkerAPI/ABI break one _must_ explicitly state why it's safe to do so. 80*7688df22SAndroid Build Coastguard Worker b) "Generated using make headers_install." 81*7688df22SAndroid Build Coastguard Worker c) "Generated from $tree/branch commit $sha" 82*7688df22SAndroid Build Coastguard Worker 83*7688df22SAndroid Build Coastguard Worker 84*7688df22SAndroid Build Coastguard WorkerOutdated or Broken Headers 85*7688df22SAndroid Build Coastguard Worker-------------------------- 86*7688df22SAndroid Build Coastguard WorkerThis section contains a list of headers and the respective "issues" they might 87*7688df22SAndroid Build Coastguard Workerhave relative to their kernel equivalent. 88*7688df22SAndroid Build Coastguard Worker 89*7688df22SAndroid Build Coastguard WorkerMost UMS headers: 90*7688df22SAndroid Build Coastguard Worker - Not using fixed size integers - compat ioctls are broken. 91*7688df22SAndroid Build Coastguard WorkerStatus: ? 92*7688df22SAndroid Build Coastguard WorkerPromote to fixed size ints, which match the current (32bit) ones. 93*7688df22SAndroid Build Coastguard Worker 94*7688df22SAndroid Build Coastguard Workernouveau_drm.h 95*7688df22SAndroid Build Coastguard Worker - Missing macros NOUVEAU_GETPARAM*, NOUVEAU_DRM_HEADER_PATCHLEVEL, structs, 96*7688df22SAndroid Build Coastguard Workerenums 97*7688df22SAndroid Build Coastguard WorkerStatus: Deliberate UABI choice; nouveau hides the exact kernel ABI behind libdrm 98*7688df22SAndroid Build Coastguard Worker 99*7688df22SAndroid Build Coastguard Workerr128_drm.h 100*7688df22SAndroid Build Coastguard Worker - Broken compat ioctls. 101*7688df22SAndroid Build Coastguard Worker 102*7688df22SAndroid Build Coastguard Workerradeon_drm.h 103*7688df22SAndroid Build Coastguard Worker - Missing RADEON_TILING_R600_NO_SCANOUT, CIK_TILE_MODE_*, broken UMS ioctls 104*7688df22SAndroid Build Coastguard Worker - Both kernel and libdrm: missing padding - 105*7688df22SAndroid Build Coastguard Workerdrm_radeon_gem_{create,{g,s}et_tiling,set_domain} others ? 106*7688df22SAndroid Build Coastguard WorkerStatus: ? 107*7688df22SAndroid Build Coastguard Worker 108*7688df22SAndroid Build Coastguard Workersavage_drm.h 109*7688df22SAndroid Build Coastguard Worker - Renamed ioctls - DRM_IOCTL_SAVAGE_{,BCI}_EVENT_EMIT, compat ioctls are broken. 110*7688df22SAndroid Build Coastguard WorkerStatus: ? 111*7688df22SAndroid Build Coastguard Worker 112*7688df22SAndroid Build Coastguard Workersis_drm.h 113*7688df22SAndroid Build Coastguard Worker - Borken ioctls + libdrm uses int vs kernel long 114*7688df22SAndroid Build Coastguard WorkerStatus: ? 115*7688df22SAndroid Build Coastguard Worker 116*7688df22SAndroid Build Coastguard Workervia_drm.h 117*7688df22SAndroid Build Coastguard Worker - Borken ioctls - libdrm int vs kernel long 118*7688df22SAndroid Build Coastguard WorkerStatus: ? 119*7688df22SAndroid Build Coastguard Worker 120*7688df22SAndroid Build Coastguard Worker 121*7688df22SAndroid Build Coastguard Workeromap_drm.h (living in $TOP/omap) 122*7688df22SAndroid Build Coastguard Worker - License mismatch, missing DRM_IOCTL_OMAP_GEM_NEW and related struct 123*7688df22SAndroid Build Coastguard WorkerStatus: ? 124*7688df22SAndroid Build Coastguard Worker 125*7688df22SAndroid Build Coastguard Workerexynos_drm.h (living in $TOP/exynos) 126*7688df22SAndroid Build Coastguard Worker - License mismatch, now using fixed size ints (but not everywhere). Lots of 127*7688df22SAndroid Build Coastguard Workernew stuff. 128*7688df22SAndroid Build Coastguard WorkerStatus: ? 129