Merge libdrm 2.4.98
This commit is contained in:
parent
a72cc7c7c5
commit
a8a2dab4a3
@ -1,6 +1,6 @@
|
||||
# $OpenBSD: Makefile.bsd-wrapper,v 1.17 2018/11/01 08:29:47 jsg Exp $
|
||||
# $OpenBSD: Makefile.bsd-wrapper,v 1.18 2019/04/26 07:45:37 jsg Exp $
|
||||
|
||||
SHARED_LIBS= drm 7.6 drm_radeon 4.0 drm_intel 5.4 \
|
||||
drm_amdgpu 1.7 drm_nouveau 3.0
|
||||
SHARED_LIBS= drm 7.7 drm_radeon 4.0 drm_intel 5.4 \
|
||||
drm_amdgpu 1.8 drm_nouveau 3.0
|
||||
|
||||
.include <bsd.xorg.mk>
|
||||
|
@ -72,11 +72,11 @@ PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
DIST_COMMON = README $(am__configure_deps) \
|
||||
$(am__klibdrminclude_HEADERS_DIST) $(libdrminclude_HEADERS) \
|
||||
$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
||||
$(srcdir)/Makefile.sources $(srcdir)/config.h.in \
|
||||
$(srcdir)/libdrm.pc.in $(top_srcdir)/build-aux/config.guess \
|
||||
DIST_COMMON = $(am__configure_deps) $(am__klibdrminclude_HEADERS_DIST) \
|
||||
$(libdrminclude_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/Makefile.sources \
|
||||
$(srcdir)/config.h.in $(srcdir)/libdrm.pc.in \
|
||||
$(top_srcdir)/build-aux/config.guess \
|
||||
$(top_srcdir)/build-aux/config.sub \
|
||||
$(top_srcdir)/build-aux/depcomp \
|
||||
$(top_srcdir)/build-aux/install-sh \
|
||||
|
@ -1,59 +0,0 @@
|
||||
libdrm - userspace library for drm
|
||||
|
||||
This is libdrm, a userspace library for accessing the DRM, direct
|
||||
rendering manager, on Linux, BSD and other operating systems that
|
||||
support the ioctl interface. The library provides wrapper functions
|
||||
for the ioctls to avoid exposing the kernel interface directly, and
|
||||
for chipsets with drm memory manager, support for tracking relocations
|
||||
and buffers. libdrm is a low-level library, typically used by
|
||||
graphics drivers such as the Mesa DRI drivers, the X drivers, libva
|
||||
and similar projects. New functionality in the kernel DRM drivers
|
||||
typically requires a new libdrm, but a new libdrm will always work
|
||||
with an older kernel.
|
||||
|
||||
|
||||
Compiling
|
||||
---------
|
||||
|
||||
libdrm has two build systems, a legacy autotools build system, and a newer
|
||||
meson build system. The meson build system is much faster, and offers a
|
||||
slightly different interface, but otherwise provides an equivalent feature set.
|
||||
|
||||
To use it:
|
||||
|
||||
meson builddir/
|
||||
|
||||
By default this will install into /usr/local, you can change your prefix
|
||||
with --prefix=/usr (or `meson configure builddir/ -Dprefix=/usr` after
|
||||
the initial meson setup).
|
||||
|
||||
Then use ninja to build and install:
|
||||
|
||||
ninja -C builddir/ install
|
||||
|
||||
If you are installing into a system location you will need to run install
|
||||
separately, and as root.
|
||||
|
||||
|
||||
Alternatively you can invoke autotools configure:
|
||||
|
||||
./configure
|
||||
|
||||
By default, libdrm will install into the /usr/local/ prefix. If you
|
||||
want to install this DRM to replace your system copy, pass
|
||||
--prefix=/usr and --exec-prefix=/ to configure. If you are building
|
||||
libdrm from a git checkout, you first need to run the autogen.sh
|
||||
script. You can pass any options to autogen.sh that you would other
|
||||
wise pass to configure, or you can just re-run configure with the
|
||||
options you need once autogen.sh finishes.
|
||||
|
||||
Next step is to build libdrm:
|
||||
|
||||
make
|
||||
|
||||
and once make finishes successfully, install the package using
|
||||
|
||||
make install
|
||||
|
||||
If you are installing into a system location, you will need to be root
|
||||
to perform the install step.
|
214
lib/libdrm/aclocal.m4
vendored
214
lib/libdrm/aclocal.m4
vendored
@ -19,32 +19,63 @@ You have another version of autoconf. It may work, but is not guaranteed to.
|
||||
If you have problems, you may need to regenerate the build system entirely.
|
||||
To do so, use the procedure documented by the package, typically 'autoreconf'.])])
|
||||
|
||||
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
|
||||
# serial 1 (pkg-config-0.24)
|
||||
#
|
||||
# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
|
||||
dnl serial 11 (pkg-config-0.29.1)
|
||||
dnl
|
||||
dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
|
||||
dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
|
||||
dnl
|
||||
dnl This program is free software; you can redistribute it and/or modify
|
||||
dnl it under the terms of the GNU General Public License as published by
|
||||
dnl the Free Software Foundation; either version 2 of the License, or
|
||||
dnl (at your option) any later version.
|
||||
dnl
|
||||
dnl This program is distributed in the hope that it will be useful, but
|
||||
dnl WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
dnl General Public License for more details.
|
||||
dnl
|
||||
dnl You should have received a copy of the GNU General Public License
|
||||
dnl along with this program; if not, write to the Free Software
|
||||
dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
dnl 02111-1307, USA.
|
||||
dnl
|
||||
dnl As a special exception to the GNU General Public License, if you
|
||||
dnl distribute this file as part of a program that contains a
|
||||
dnl configuration script generated by Autoconf, you may include it under
|
||||
dnl the same distribution terms that you use for the rest of that
|
||||
dnl program.
|
||||
|
||||
# PKG_PROG_PKG_CONFIG([MIN-VERSION])
|
||||
# ----------------------------------
|
||||
dnl PKG_PREREQ(MIN-VERSION)
|
||||
dnl -----------------------
|
||||
dnl Since: 0.29
|
||||
dnl
|
||||
dnl Verify that the version of the pkg-config macros are at least
|
||||
dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
|
||||
dnl installed version of pkg-config, this checks the developer's version
|
||||
dnl of pkg.m4 when generating configure.
|
||||
dnl
|
||||
dnl To ensure that this macro is defined, also add:
|
||||
dnl m4_ifndef([PKG_PREREQ],
|
||||
dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
|
||||
dnl
|
||||
dnl See the "Since" comment for each macro you use to see what version
|
||||
dnl of the macros you require.
|
||||
m4_defun([PKG_PREREQ],
|
||||
[m4_define([PKG_MACROS_VERSION], [0.29.1])
|
||||
m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
|
||||
[m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
|
||||
])dnl PKG_PREREQ
|
||||
|
||||
dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
|
||||
dnl ----------------------------------
|
||||
dnl Since: 0.16
|
||||
dnl
|
||||
dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
|
||||
dnl first found in the path. Checks that the version of pkg-config found
|
||||
dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
|
||||
dnl used since that's the first version where most current features of
|
||||
dnl pkg-config existed.
|
||||
AC_DEFUN([PKG_PROG_PKG_CONFIG],
|
||||
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
|
||||
m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
|
||||
@ -66,18 +97,19 @@ if test -n "$PKG_CONFIG"; then
|
||||
PKG_CONFIG=""
|
||||
fi
|
||||
fi[]dnl
|
||||
])# PKG_PROG_PKG_CONFIG
|
||||
])dnl PKG_PROG_PKG_CONFIG
|
||||
|
||||
# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||
#
|
||||
# Check to see whether a particular set of modules exists. Similar
|
||||
# to PKG_CHECK_MODULES(), but does not set variables or print errors.
|
||||
#
|
||||
# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
|
||||
# only at the first occurence in configure.ac, so if the first place
|
||||
# it's called might be skipped (such as if it is within an "if", you
|
||||
# have to call PKG_CHECK_EXISTS manually
|
||||
# --------------------------------------------------------------
|
||||
dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||
dnl -------------------------------------------------------------------
|
||||
dnl Since: 0.18
|
||||
dnl
|
||||
dnl Check to see whether a particular set of modules exists. Similar to
|
||||
dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
|
||||
dnl
|
||||
dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
|
||||
dnl only at the first occurence in configure.ac, so if the first place
|
||||
dnl it's called might be skipped (such as if it is within an "if", you
|
||||
dnl have to call PKG_CHECK_EXISTS manually
|
||||
AC_DEFUN([PKG_CHECK_EXISTS],
|
||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||
if test -n "$PKG_CONFIG" && \
|
||||
@ -87,8 +119,10 @@ m4_ifvaln([$3], [else
|
||||
$3])dnl
|
||||
fi])
|
||||
|
||||
# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
|
||||
# ---------------------------------------------
|
||||
dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
|
||||
dnl ---------------------------------------------
|
||||
dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
|
||||
dnl pkg_failed based on the result.
|
||||
m4_define([_PKG_CONFIG],
|
||||
[if test -n "$$1"; then
|
||||
pkg_cv_[]$1="$$1"
|
||||
@ -100,10 +134,11 @@ m4_define([_PKG_CONFIG],
|
||||
else
|
||||
pkg_failed=untried
|
||||
fi[]dnl
|
||||
])# _PKG_CONFIG
|
||||
])dnl _PKG_CONFIG
|
||||
|
||||
# _PKG_SHORT_ERRORS_SUPPORTED
|
||||
# -----------------------------
|
||||
dnl _PKG_SHORT_ERRORS_SUPPORTED
|
||||
dnl ---------------------------
|
||||
dnl Internal check to see if pkg-config supports short errors.
|
||||
AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
|
||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
|
||||
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
|
||||
@ -111,19 +146,17 @@ if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
|
||||
else
|
||||
_pkg_short_errors_supported=no
|
||||
fi[]dnl
|
||||
])# _PKG_SHORT_ERRORS_SUPPORTED
|
||||
])dnl _PKG_SHORT_ERRORS_SUPPORTED
|
||||
|
||||
|
||||
# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
|
||||
# [ACTION-IF-NOT-FOUND])
|
||||
#
|
||||
#
|
||||
# Note that if there is a possibility the first call to
|
||||
# PKG_CHECK_MODULES might not happen, you should be sure to include an
|
||||
# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
|
||||
#
|
||||
#
|
||||
# --------------------------------------------------------------
|
||||
dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
|
||||
dnl [ACTION-IF-NOT-FOUND])
|
||||
dnl --------------------------------------------------------------
|
||||
dnl Since: 0.4.0
|
||||
dnl
|
||||
dnl Note that if there is a possibility the first call to
|
||||
dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
|
||||
dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
|
||||
AC_DEFUN([PKG_CHECK_MODULES],
|
||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||
AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
|
||||
@ -177,16 +210,40 @@ else
|
||||
AC_MSG_RESULT([yes])
|
||||
$3
|
||||
fi[]dnl
|
||||
])# PKG_CHECK_MODULES
|
||||
])dnl PKG_CHECK_MODULES
|
||||
|
||||
|
||||
# PKG_INSTALLDIR(DIRECTORY)
|
||||
# -------------------------
|
||||
# Substitutes the variable pkgconfigdir as the location where a module
|
||||
# should install pkg-config .pc files. By default the directory is
|
||||
# $libdir/pkgconfig, but the default can be changed by passing
|
||||
# DIRECTORY. The user can override through the --with-pkgconfigdir
|
||||
# parameter.
|
||||
dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
|
||||
dnl [ACTION-IF-NOT-FOUND])
|
||||
dnl ---------------------------------------------------------------------
|
||||
dnl Since: 0.29
|
||||
dnl
|
||||
dnl Checks for existence of MODULES and gathers its build flags with
|
||||
dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
|
||||
dnl and VARIABLE-PREFIX_LIBS from --libs.
|
||||
dnl
|
||||
dnl Note that if there is a possibility the first call to
|
||||
dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
|
||||
dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
|
||||
dnl configure.ac.
|
||||
AC_DEFUN([PKG_CHECK_MODULES_STATIC],
|
||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||
_save_PKG_CONFIG=$PKG_CONFIG
|
||||
PKG_CONFIG="$PKG_CONFIG --static"
|
||||
PKG_CHECK_MODULES($@)
|
||||
PKG_CONFIG=$_save_PKG_CONFIG[]dnl
|
||||
])dnl PKG_CHECK_MODULES_STATIC
|
||||
|
||||
|
||||
dnl PKG_INSTALLDIR([DIRECTORY])
|
||||
dnl -------------------------
|
||||
dnl Since: 0.27
|
||||
dnl
|
||||
dnl Substitutes the variable pkgconfigdir as the location where a module
|
||||
dnl should install pkg-config .pc files. By default the directory is
|
||||
dnl $libdir/pkgconfig, but the default can be changed by passing
|
||||
dnl DIRECTORY. The user can override through the --with-pkgconfigdir
|
||||
dnl parameter.
|
||||
AC_DEFUN([PKG_INSTALLDIR],
|
||||
[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
|
||||
m4_pushdef([pkg_description],
|
||||
@ -197,16 +254,18 @@ AC_ARG_WITH([pkgconfigdir],
|
||||
AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
|
||||
m4_popdef([pkg_default])
|
||||
m4_popdef([pkg_description])
|
||||
]) dnl PKG_INSTALLDIR
|
||||
])dnl PKG_INSTALLDIR
|
||||
|
||||
|
||||
# PKG_NOARCH_INSTALLDIR(DIRECTORY)
|
||||
# -------------------------
|
||||
# Substitutes the variable noarch_pkgconfigdir as the location where a
|
||||
# module should install arch-independent pkg-config .pc files. By
|
||||
# default the directory is $datadir/pkgconfig, but the default can be
|
||||
# changed by passing DIRECTORY. The user can override through the
|
||||
# --with-noarch-pkgconfigdir parameter.
|
||||
dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
|
||||
dnl --------------------------------
|
||||
dnl Since: 0.27
|
||||
dnl
|
||||
dnl Substitutes the variable noarch_pkgconfigdir as the location where a
|
||||
dnl module should install arch-independent pkg-config .pc files. By
|
||||
dnl default the directory is $datadir/pkgconfig, but the default can be
|
||||
dnl changed by passing DIRECTORY. The user can override through the
|
||||
dnl --with-noarch-pkgconfigdir parameter.
|
||||
AC_DEFUN([PKG_NOARCH_INSTALLDIR],
|
||||
[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
|
||||
m4_pushdef([pkg_description],
|
||||
@ -217,7 +276,24 @@ AC_ARG_WITH([noarch-pkgconfigdir],
|
||||
AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
|
||||
m4_popdef([pkg_default])
|
||||
m4_popdef([pkg_description])
|
||||
]) dnl PKG_NOARCH_INSTALLDIR
|
||||
])dnl PKG_NOARCH_INSTALLDIR
|
||||
|
||||
|
||||
dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
|
||||
dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||
dnl -------------------------------------------
|
||||
dnl Since: 0.28
|
||||
dnl
|
||||
dnl Retrieves the value of the pkg-config variable for the given module.
|
||||
AC_DEFUN([PKG_CHECK_VAR],
|
||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||
AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
|
||||
|
||||
_PKG_CONFIG([$1], [variable="][$3]["], [$2])
|
||||
AS_VAR_COPY([$1], [pkg_cv_][$1])
|
||||
|
||||
AS_VAR_IF([$1], [""], [$5], [$4])dnl
|
||||
])dnl PKG_CHECK_VAR
|
||||
|
||||
# Copyright (C) 2002-2012 Free Software Foundation, Inc.
|
||||
#
|
||||
|
@ -618,6 +618,40 @@ out:
|
||||
return r;
|
||||
}
|
||||
|
||||
drm_public int amdgpu_bo_list_create_raw(amdgpu_device_handle dev,
|
||||
uint32_t number_of_buffers,
|
||||
struct drm_amdgpu_bo_list_entry *buffers,
|
||||
uint32_t *result)
|
||||
{
|
||||
union drm_amdgpu_bo_list args;
|
||||
int r;
|
||||
|
||||
memset(&args, 0, sizeof(args));
|
||||
args.in.operation = AMDGPU_BO_LIST_OP_CREATE;
|
||||
args.in.bo_number = number_of_buffers;
|
||||
args.in.bo_info_size = sizeof(struct drm_amdgpu_bo_list_entry);
|
||||
args.in.bo_info_ptr = (uint64_t)(uintptr_t)buffers;
|
||||
|
||||
r = drmCommandWriteRead(dev->fd, DRM_AMDGPU_BO_LIST,
|
||||
&args, sizeof(args));
|
||||
if (!r)
|
||||
*result = args.out.list_handle;
|
||||
return r;
|
||||
}
|
||||
|
||||
drm_public int amdgpu_bo_list_destroy_raw(amdgpu_device_handle dev,
|
||||
uint32_t bo_list)
|
||||
{
|
||||
union drm_amdgpu_bo_list args;
|
||||
|
||||
memset(&args, 0, sizeof(args));
|
||||
args.in.operation = AMDGPU_BO_LIST_OP_DESTROY;
|
||||
args.in.list_handle = bo_list;
|
||||
|
||||
return drmCommandWriteRead(dev->fd, DRM_AMDGPU_BO_LIST,
|
||||
&args, sizeof(args));
|
||||
}
|
||||
|
||||
drm_public int amdgpu_bo_list_create(amdgpu_device_handle dev,
|
||||
uint32_t number_of_resources,
|
||||
amdgpu_bo_handle *resources,
|
||||
|
22
lib/libdrm/configure
vendored
22
lib/libdrm/configure
vendored
@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for libdrm 2.4.96.
|
||||
# Generated by GNU Autoconf 2.69 for libdrm 2.4.98.
|
||||
#
|
||||
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=DRI>.
|
||||
#
|
||||
@ -591,8 +591,8 @@ MAKEFLAGS=
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='libdrm'
|
||||
PACKAGE_TARNAME='libdrm'
|
||||
PACKAGE_VERSION='2.4.96'
|
||||
PACKAGE_STRING='libdrm 2.4.96'
|
||||
PACKAGE_VERSION='2.4.98'
|
||||
PACKAGE_STRING='libdrm 2.4.98'
|
||||
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=DRI'
|
||||
PACKAGE_URL=''
|
||||
|
||||
@ -1423,7 +1423,7 @@ if test "$ac_init_help" = "long"; then
|
||||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures libdrm 2.4.96 to adapt to many kinds of systems.
|
||||
\`configure' configures libdrm 2.4.98 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@ -1493,7 +1493,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of libdrm 2.4.96:";;
|
||||
short | recursive ) echo "Configuration of libdrm 2.4.98:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@ -1663,7 +1663,7 @@ fi
|
||||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
libdrm configure 2.4.96
|
||||
libdrm configure 2.4.98
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
@ -2086,7 +2086,7 @@ cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by libdrm $as_me 2.4.96, which was
|
||||
It was created by libdrm $as_me 2.4.98, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
@ -3459,7 +3459,7 @@ fi
|
||||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='libdrm'
|
||||
VERSION='2.4.96'
|
||||
VERSION='2.4.98'
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
@ -14082,7 +14082,7 @@ else
|
||||
|
||||
fi
|
||||
|
||||
CFLAGS="$CFLAGS -include config.h"
|
||||
CPPFLAGS="$CPPFLAGS -include config.h"
|
||||
|
||||
|
||||
ac_config_files="$ac_config_files Makefile data/Makefile libkms/Makefile libkms/libkms.pc intel/Makefile intel/libdrm_intel.pc radeon/Makefile radeon/libdrm_radeon.pc amdgpu/Makefile amdgpu/libdrm_amdgpu.pc nouveau/Makefile nouveau/libdrm_nouveau.pc omap/Makefile omap/libdrm_omap.pc exynos/Makefile exynos/libdrm_exynos.pc freedreno/Makefile freedreno/libdrm_freedreno.pc tegra/Makefile tegra/libdrm_tegra.pc vc4/Makefile vc4/libdrm_vc4.pc etnaviv/Makefile etnaviv/libdrm_etnaviv.pc tests/Makefile tests/modeprint/Makefile tests/modetest/Makefile tests/kms/Makefile tests/kmstest/Makefile tests/proptest/Makefile tests/radeon/Makefile tests/amdgpu/Makefile tests/vbltest/Makefile tests/exynos/Makefile tests/tegra/Makefile tests/nouveau/Makefile tests/etnaviv/Makefile tests/util/Makefile man/Makefile libdrm.pc"
|
||||
@ -14697,7 +14697,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by libdrm $as_me 2.4.96, which was
|
||||
This file was extended by libdrm $as_me 2.4.98, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@ -14763,7 +14763,7 @@ _ACEOF
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
libdrm config.status 2.4.96
|
||||
libdrm config.status 2.4.98
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
|
||||
AC_PREREQ([2.63])
|
||||
AC_INIT([libdrm],
|
||||
[2.4.96],
|
||||
[2.4.98],
|
||||
[https://bugs.freedesktop.org/enter_bug.cgi?product=DRI],
|
||||
[libdrm])
|
||||
|
||||
@ -541,7 +541,7 @@ else
|
||||
AC_DEFINE(HAVE_VISIBILITY, 0)
|
||||
fi
|
||||
|
||||
CFLAGS="$CFLAGS -include config.h"
|
||||
CPPFLAGS="$CPPFLAGS -include config.h"
|
||||
|
||||
AC_SUBST(WARN_CFLAGS)
|
||||
AC_CONFIG_FILES([
|
||||
|
@ -729,8 +729,18 @@ struct drm_syncobj_handle {
|
||||
__u32 pad;
|
||||
};
|
||||
|
||||
struct drm_syncobj_transfer {
|
||||
__u32 src_handle;
|
||||
__u32 dst_handle;
|
||||
__u64 src_point;
|
||||
__u64 dst_point;
|
||||
__u32 flags;
|
||||
__u32 pad;
|
||||
};
|
||||
|
||||
#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL (1 << 0)
|
||||
#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT (1 << 1)
|
||||
#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE (1 << 2) /* wait for time point to become available */
|
||||
struct drm_syncobj_wait {
|
||||
__u64 handles;
|
||||
/* absolute timeout */
|
||||
@ -741,12 +751,33 @@ struct drm_syncobj_wait {
|
||||
__u32 pad;
|
||||
};
|
||||
|
||||
struct drm_syncobj_timeline_wait {
|
||||
__u64 handles;
|
||||
/* wait on specific timeline point for every handles*/
|
||||
__u64 points;
|
||||
/* absolute timeout */
|
||||
__s64 timeout_nsec;
|
||||
__u32 count_handles;
|
||||
__u32 flags;
|
||||
__u32 first_signaled; /* only valid when not waiting all */
|
||||
__u32 pad;
|
||||
};
|
||||
|
||||
|
||||
struct drm_syncobj_array {
|
||||
__u64 handles;
|
||||
__u32 count_handles;
|
||||
__u32 pad;
|
||||
};
|
||||
|
||||
struct drm_syncobj_timeline_array {
|
||||
__u64 handles;
|
||||
__u64 points;
|
||||
__u32 count_handles;
|
||||
__u32 pad;
|
||||
};
|
||||
|
||||
|
||||
/* Query current scanout sequence number */
|
||||
struct drm_crtc_get_sequence {
|
||||
__u32 crtc_id; /* requested crtc_id */
|
||||
@ -903,6 +934,11 @@ extern "C" {
|
||||
#define DRM_IOCTL_MODE_GET_LEASE DRM_IOWR(0xC8, struct drm_mode_get_lease)
|
||||
#define DRM_IOCTL_MODE_REVOKE_LEASE DRM_IOWR(0xC9, struct drm_mode_revoke_lease)
|
||||
|
||||
#define DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT DRM_IOWR(0xCA, struct drm_syncobj_timeline_wait)
|
||||
#define DRM_IOCTL_SYNCOBJ_QUERY DRM_IOWR(0xCB, struct drm_syncobj_timeline_array)
|
||||
#define DRM_IOCTL_SYNCOBJ_TRANSFER DRM_IOWR(0xCC, struct drm_syncobj_transfer)
|
||||
#define DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL DRM_IOWR(0xCD, struct drm_syncobj_timeline_array)
|
||||
|
||||
/**
|
||||
* Device specific ioctls should only be in their respective headers
|
||||
* The device specific ioctl range is from 0x40 to 0x9f.
|
||||
|
@ -62,6 +62,28 @@ extern "C" {
|
||||
#define I915_ERROR_UEVENT "ERROR"
|
||||
#define I915_RESET_UEVENT "RESET"
|
||||
|
||||
/*
|
||||
* i915_user_extension: Base class for defining a chain of extensions
|
||||
*
|
||||
* Many interfaces need to grow over time. In most cases we can simply
|
||||
* extend the struct and have userspace pass in more data. Another option,
|
||||
* as demonstrated by Vulkan's approach to providing extensions for forward
|
||||
* and backward compatibility, is to use a list of optional structs to
|
||||
* provide those extra details.
|
||||
*
|
||||
* The key advantage to using an extension chain is that it allows us to
|
||||
* redefine the interface more easily than an ever growing struct of
|
||||
* increasing complexity, and for large parts of that interface to be
|
||||
* entirely optional. The downside is more pointer chasing; chasing across
|
||||
* the boundary with pointers encapsulated inside u64.
|
||||
*/
|
||||
struct i915_user_extension {
|
||||
__u64 next_extension;
|
||||
__u32 name;
|
||||
__u32 flags; /* All undefined bits must be zero. */
|
||||
__u32 rsvd[4]; /* Reserved for future use; must be zero. */
|
||||
};
|
||||
|
||||
/*
|
||||
* MOCS indexes used for GPU surfaces, defining the cacheability of the
|
||||
* surface data and the coherency for this data wrt. CPU vs. GPU accesses.
|
||||
@ -99,6 +121,8 @@ enum drm_i915_gem_engine_class {
|
||||
I915_ENGINE_CLASS_VIDEO = 2,
|
||||
I915_ENGINE_CLASS_VIDEO_ENHANCE = 3,
|
||||
|
||||
/* should be kept compact */
|
||||
|
||||
I915_ENGINE_CLASS_INVALID = -1
|
||||
};
|
||||
|
||||
@ -319,6 +343,7 @@ typedef struct _drm_i915_sarea {
|
||||
#define DRM_I915_PERF_ADD_CONFIG 0x37
|
||||
#define DRM_I915_PERF_REMOVE_CONFIG 0x38
|
||||
#define DRM_I915_QUERY 0x39
|
||||
/* Must be kept compact -- no holes */
|
||||
|
||||
#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
|
||||
#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
|
||||
@ -367,6 +392,7 @@ typedef struct _drm_i915_sarea {
|
||||
#define DRM_IOCTL_I915_GET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey)
|
||||
#define DRM_IOCTL_I915_GEM_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_WAIT, struct drm_i915_gem_wait)
|
||||
#define DRM_IOCTL_I915_GEM_CONTEXT_CREATE DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create)
|
||||
#define DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create_ext)
|
||||
#define DRM_IOCTL_I915_GEM_CONTEXT_DESTROY DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_DESTROY, struct drm_i915_gem_context_destroy)
|
||||
#define DRM_IOCTL_I915_REG_READ DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_REG_READ, struct drm_i915_reg_read)
|
||||
#define DRM_IOCTL_I915_GET_RESET_STATS DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GET_RESET_STATS, struct drm_i915_reset_stats)
|
||||
@ -412,6 +438,14 @@ typedef struct drm_i915_irq_wait {
|
||||
int irq_seq;
|
||||
} drm_i915_irq_wait_t;
|
||||
|
||||
/*
|
||||
* Different modes of per-process Graphics Translation Table,
|
||||
* see I915_PARAM_HAS_ALIASING_PPGTT
|
||||
*/
|
||||
#define I915_GEM_PPGTT_NONE 0
|
||||
#define I915_GEM_PPGTT_ALIASING 1
|
||||
#define I915_GEM_PPGTT_FULL 2
|
||||
|
||||
/* Ioctl to query kernel params:
|
||||
*/
|
||||
#define I915_PARAM_IRQ_ACTIVE 1
|
||||
@ -468,6 +502,7 @@ typedef struct drm_i915_irq_wait {
|
||||
#define I915_SCHEDULER_CAP_ENABLED (1ul << 0)
|
||||
#define I915_SCHEDULER_CAP_PRIORITY (1ul << 1)
|
||||
#define I915_SCHEDULER_CAP_PREEMPTION (1ul << 2)
|
||||
#define I915_SCHEDULER_CAP_SEMAPHORES (1ul << 3)
|
||||
|
||||
#define I915_PARAM_HUC_STATUS 42
|
||||
|
||||
@ -485,7 +520,7 @@ typedef struct drm_i915_irq_wait {
|
||||
#define I915_PARAM_HAS_EXEC_FENCE 44
|
||||
|
||||
/* Query whether DRM_I915_GEM_EXECBUFFER2 supports the ability to capture
|
||||
* user specified bufffers for post-mortem debugging of GPU hangs. See
|
||||
* user specified buffers for post-mortem debugging of GPU hangs. See
|
||||
* EXEC_OBJECT_CAPTURE.
|
||||
*/
|
||||
#define I915_PARAM_HAS_EXEC_CAPTURE 45
|
||||
@ -551,6 +586,8 @@ typedef struct drm_i915_irq_wait {
|
||||
*/
|
||||
#define I915_PARAM_MMAP_GTT_COHERENT 52
|
||||
|
||||
/* Must be kept compact -- no holes and well documented */
|
||||
|
||||
typedef struct drm_i915_getparam {
|
||||
__s32 param;
|
||||
/*
|
||||
@ -566,6 +603,7 @@ typedef struct drm_i915_getparam {
|
||||
#define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY 2
|
||||
#define I915_SETPARAM_ALLOW_BATCHBUFFER 3
|
||||
#define I915_SETPARAM_NUM_USED_FENCES 4
|
||||
/* Must be kept compact -- no holes */
|
||||
|
||||
typedef struct drm_i915_setparam {
|
||||
int param;
|
||||
@ -964,7 +1002,7 @@ struct drm_i915_gem_execbuffer2 {
|
||||
* struct drm_i915_gem_exec_fence *fences.
|
||||
*/
|
||||
__u64 cliprects_ptr;
|
||||
#define I915_EXEC_RING_MASK (7<<0)
|
||||
#define I915_EXEC_RING_MASK (0x3f)
|
||||
#define I915_EXEC_DEFAULT (0<<0)
|
||||
#define I915_EXEC_RENDER (1<<0)
|
||||
#define I915_EXEC_BSD (2<<0)
|
||||
@ -1112,32 +1150,34 @@ struct drm_i915_gem_busy {
|
||||
* as busy may become idle before the ioctl is completed.
|
||||
*
|
||||
* Furthermore, if the object is busy, which engine is busy is only
|
||||
* provided as a guide. There are race conditions which prevent the
|
||||
* report of which engines are busy from being always accurate.
|
||||
* However, the converse is not true. If the object is idle, the
|
||||
* result of the ioctl, that all engines are idle, is accurate.
|
||||
* provided as a guide and only indirectly by reporting its class
|
||||
* (there may be more than one engine in each class). There are race
|
||||
* conditions which prevent the report of which engines are busy from
|
||||
* being always accurate. However, the converse is not true. If the
|
||||
* object is idle, the result of the ioctl, that all engines are idle,
|
||||
* is accurate.
|
||||
*
|
||||
* The returned dword is split into two fields to indicate both
|
||||
* the engines on which the object is being read, and the
|
||||
* engine on which it is currently being written (if any).
|
||||
* the engine classess on which the object is being read, and the
|
||||
* engine class on which it is currently being written (if any).
|
||||
*
|
||||
* The low word (bits 0:15) indicate if the object is being written
|
||||
* to by any engine (there can only be one, as the GEM implicit
|
||||
* synchronisation rules force writes to be serialised). Only the
|
||||
* engine for the last write is reported.
|
||||
* engine class (offset by 1, I915_ENGINE_CLASS_RENDER is reported as
|
||||
* 1 not 0 etc) for the last write is reported.
|
||||
*
|
||||
* The high word (bits 16:31) are a bitmask of which engines are
|
||||
* currently reading from the object. Multiple engines may be
|
||||
* The high word (bits 16:31) are a bitmask of which engines classes
|
||||
* are currently reading from the object. Multiple engines may be
|
||||
* reading from the object simultaneously.
|
||||
*
|
||||
* The value of each engine is the same as specified in the
|
||||
* EXECBUFFER2 ioctl, i.e. I915_EXEC_RENDER, I915_EXEC_BSD etc.
|
||||
* Note I915_EXEC_DEFAULT is a symbolic value and is mapped to
|
||||
* the I915_EXEC_RENDER engine for execution, and so it is never
|
||||
* The value of each engine class is the same as specified in the
|
||||
* I915_CONTEXT_SET_ENGINES parameter and via perf, i.e.
|
||||
* I915_ENGINE_CLASS_RENDER, I915_ENGINE_CLASS_COPY, etc.
|
||||
* reported as active itself. Some hardware may have parallel
|
||||
* execution engines, e.g. multiple media engines, which are
|
||||
* mapped to the same identifier in the EXECBUFFER2 ioctl and
|
||||
* so are not separately reported for busyness.
|
||||
* mapped to the same class identifier and so are not separately
|
||||
* reported for busyness.
|
||||
*
|
||||
* Caveat emptor:
|
||||
* Only the boolean result of this query is reliable; that is whether
|
||||
@ -1180,7 +1220,7 @@ struct drm_i915_gem_caching {
|
||||
__u32 handle;
|
||||
|
||||
/**
|
||||
* Cacheing level to apply or return value
|
||||
* Caching level to apply or return value
|
||||
*
|
||||
* bits0-15 are for generic caching control (i.e. the above defined
|
||||
* values). bits16-31 are reserved for platform-specific variations
|
||||
@ -1404,16 +1444,159 @@ struct drm_i915_gem_wait {
|
||||
};
|
||||
|
||||
struct drm_i915_gem_context_create {
|
||||
/* output: id of new context*/
|
||||
__u32 ctx_id;
|
||||
__u32 ctx_id; /* output: id of new context*/
|
||||
__u32 pad;
|
||||
};
|
||||
|
||||
struct drm_i915_gem_context_create_ext {
|
||||
__u32 ctx_id; /* output: id of new context*/
|
||||
__u32 flags;
|
||||
#define I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS (1u << 0)
|
||||
#define I915_CONTEXT_CREATE_FLAGS_UNKNOWN \
|
||||
(-(I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS << 1))
|
||||
__u64 extensions;
|
||||
};
|
||||
|
||||
struct drm_i915_gem_context_param {
|
||||
__u32 ctx_id;
|
||||
__u32 size;
|
||||
__u64 param;
|
||||
#define I915_CONTEXT_PARAM_BAN_PERIOD 0x1
|
||||
#define I915_CONTEXT_PARAM_NO_ZEROMAP 0x2
|
||||
#define I915_CONTEXT_PARAM_GTT_SIZE 0x3
|
||||
#define I915_CONTEXT_PARAM_NO_ERROR_CAPTURE 0x4
|
||||
#define I915_CONTEXT_PARAM_BANNABLE 0x5
|
||||
#define I915_CONTEXT_PARAM_PRIORITY 0x6
|
||||
#define I915_CONTEXT_MAX_USER_PRIORITY 1023 /* inclusive */
|
||||
#define I915_CONTEXT_DEFAULT_PRIORITY 0
|
||||
#define I915_CONTEXT_MIN_USER_PRIORITY -1023 /* inclusive */
|
||||
/*
|
||||
* When using the following param, value should be a pointer to
|
||||
* drm_i915_gem_context_param_sseu.
|
||||
*/
|
||||
#define I915_CONTEXT_PARAM_SSEU 0x7
|
||||
|
||||
/*
|
||||
* Not all clients may want to attempt automatic recover of a context after
|
||||
* a hang (for example, some clients may only submit very small incremental
|
||||
* batches relying on known logical state of previous batches which will never
|
||||
* recover correctly and each attempt will hang), and so would prefer that
|
||||
* the context is forever banned instead.
|
||||
*
|
||||
* If set to false (0), after a reset, subsequent (and in flight) rendering
|
||||
* from this context is discarded, and the client will need to create a new
|
||||
* context to use instead.
|
||||
*
|
||||
* If set to true (1), the kernel will automatically attempt to recover the
|
||||
* context by skipping the hanging batch and executing the next batch starting
|
||||
* from the default context state (discarding the incomplete logical context
|
||||
* state lost due to the reset).
|
||||
*
|
||||
* On creation, all new contexts are marked as recoverable.
|
||||
*/
|
||||
#define I915_CONTEXT_PARAM_RECOVERABLE 0x8
|
||||
/* Must be kept compact -- no holes and well documented */
|
||||
|
||||
__u64 value;
|
||||
};
|
||||
|
||||
/**
|
||||
* Context SSEU programming
|
||||
*
|
||||
* It may be necessary for either functional or performance reason to configure
|
||||
* a context to run with a reduced number of SSEU (where SSEU stands for Slice/
|
||||
* Sub-slice/EU).
|
||||
*
|
||||
* This is done by configuring SSEU configuration using the below
|
||||
* @struct drm_i915_gem_context_param_sseu for every supported engine which
|
||||
* userspace intends to use.
|
||||
*
|
||||
* Not all GPUs or engines support this functionality in which case an error
|
||||
* code -ENODEV will be returned.
|
||||
*
|
||||
* Also, flexibility of possible SSEU configuration permutations varies between
|
||||
* GPU generations and software imposed limitations. Requesting such a
|
||||
* combination will return an error code of -EINVAL.
|
||||
*
|
||||
* NOTE: When perf/OA is active the context's SSEU configuration is ignored in
|
||||
* favour of a single global setting.
|
||||
*/
|
||||
struct drm_i915_gem_context_param_sseu {
|
||||
/*
|
||||
* Engine class & instance to be configured or queried.
|
||||
*/
|
||||
__u16 engine_class;
|
||||
__u16 engine_instance;
|
||||
|
||||
/*
|
||||
* Unused for now. Must be cleared to zero.
|
||||
*/
|
||||
__u32 flags;
|
||||
|
||||
/*
|
||||
* Mask of slices to enable for the context. Valid values are a subset
|
||||
* of the bitmask value returned for I915_PARAM_SLICE_MASK.
|
||||
*/
|
||||
__u64 slice_mask;
|
||||
|
||||
/*
|
||||
* Mask of subslices to enable for the context. Valid values are a
|
||||
* subset of the bitmask value return by I915_PARAM_SUBSLICE_MASK.
|
||||
*/
|
||||
__u64 subslice_mask;
|
||||
|
||||
/*
|
||||
* Minimum/Maximum number of EUs to enable per subslice for the
|
||||
* context. min_eus_per_subslice must be inferior or equal to
|
||||
* max_eus_per_subslice.
|
||||
*/
|
||||
__u16 min_eus_per_subslice;
|
||||
__u16 max_eus_per_subslice;
|
||||
|
||||
/*
|
||||
* Unused for now. Must be cleared to zero.
|
||||
*/
|
||||
__u32 rsvd;
|
||||
};
|
||||
|
||||
struct drm_i915_gem_context_create_ext_setparam {
|
||||
#define I915_CONTEXT_CREATE_EXT_SETPARAM 0
|
||||
struct i915_user_extension base;
|
||||
struct drm_i915_gem_context_param param;
|
||||
};
|
||||
|
||||
struct drm_i915_gem_context_destroy {
|
||||
__u32 ctx_id;
|
||||
__u32 pad;
|
||||
};
|
||||
|
||||
/*
|
||||
* DRM_I915_GEM_VM_CREATE -
|
||||
*
|
||||
* Create a new virtual memory address space (ppGTT) for use within a context
|
||||
* on the same file. Extensions can be provided to configure exactly how the
|
||||
* address space is setup upon creation.
|
||||
*
|
||||
* The id of new VM (bound to the fd) for use with I915_CONTEXT_PARAM_VM is
|
||||
* returned in the outparam @id.
|
||||
*
|
||||
* No flags are defined, with all bits reserved and must be zero.
|
||||
*
|
||||
* An extension chain maybe provided, starting with @extensions, and terminated
|
||||
* by the @next_extension being 0. Currently, no extensions are defined.
|
||||
*
|
||||
* DRM_I915_GEM_VM_DESTROY -
|
||||
*
|
||||
* Destroys a previously created VM id, specified in @id.
|
||||
*
|
||||
* No extensions or flags are allowed currently, and so must be zero.
|
||||
*/
|
||||
struct drm_i915_gem_vm_control {
|
||||
__u64 extensions;
|
||||
__u32 flags;
|
||||
__u32 vm_id;
|
||||
};
|
||||
|
||||
struct drm_i915_reg_read {
|
||||
/*
|
||||
* Register offset.
|
||||
@ -1426,6 +1609,7 @@ struct drm_i915_reg_read {
|
||||
|
||||
__u64 val; /* Return value */
|
||||
};
|
||||
|
||||
/* Known registers:
|
||||
*
|
||||
* Render engine timestamp - 0x2358 + 64bit - gen7+
|
||||
@ -1465,22 +1649,6 @@ struct drm_i915_gem_userptr {
|
||||
__u32 handle;
|
||||
};
|
||||
|
||||
struct drm_i915_gem_context_param {
|
||||
__u32 ctx_id;
|
||||
__u32 size;
|
||||
__u64 param;
|
||||
#define I915_CONTEXT_PARAM_BAN_PERIOD 0x1
|
||||
#define I915_CONTEXT_PARAM_NO_ZEROMAP 0x2
|
||||
#define I915_CONTEXT_PARAM_GTT_SIZE 0x3
|
||||
#define I915_CONTEXT_PARAM_NO_ERROR_CAPTURE 0x4
|
||||
#define I915_CONTEXT_PARAM_BANNABLE 0x5
|
||||
#define I915_CONTEXT_PARAM_PRIORITY 0x6
|
||||
#define I915_CONTEXT_MAX_USER_PRIORITY 1023 /* inclusive */
|
||||
#define I915_CONTEXT_DEFAULT_PRIORITY 0
|
||||
#define I915_CONTEXT_MIN_USER_PRIORITY -1023 /* inclusive */
|
||||
__u64 value;
|
||||
};
|
||||
|
||||
enum drm_i915_oa_format {
|
||||
I915_OA_FORMAT_A13 = 1, /* HSW only */
|
||||
I915_OA_FORMAT_A29, /* HSW only */
|
||||
@ -1642,6 +1810,7 @@ struct drm_i915_perf_oa_config {
|
||||
struct drm_i915_query_item {
|
||||
__u64 query_id;
|
||||
#define DRM_I915_QUERY_TOPOLOGY_INFO 1
|
||||
/* Must be kept compact -- no holes and well documented */
|
||||
|
||||
/*
|
||||
* When set to zero by userspace, this is filled with the size of the
|
||||
|
@ -373,6 +373,30 @@
|
||||
#define INTEL_AML_CFL_GT2_IDS(info) \
|
||||
INTEL_VGA_DEVICE(0x87CA, info)
|
||||
|
||||
/* CML GT1 */
|
||||
#define INTEL_CML_GT1_IDS(info) \
|
||||
INTEL_VGA_DEVICE(0x9B21, info), \
|
||||
INTEL_VGA_DEVICE(0x9BAA, info), \
|
||||
INTEL_VGA_DEVICE(0x9BAB, info), \
|
||||
INTEL_VGA_DEVICE(0x9BAC, info), \
|
||||
INTEL_VGA_DEVICE(0x9BA0, info), \
|
||||
INTEL_VGA_DEVICE(0x9BA5, info), \
|
||||
INTEL_VGA_DEVICE(0x9BA8, info), \
|
||||
INTEL_VGA_DEVICE(0x9BA4, info), \
|
||||
INTEL_VGA_DEVICE(0x9BA2, info)
|
||||
|
||||
/* CML GT2 */
|
||||
#define INTEL_CML_GT2_IDS(info) \
|
||||
INTEL_VGA_DEVICE(0x9B41, info), \
|
||||
INTEL_VGA_DEVICE(0x9BCA, info), \
|
||||
INTEL_VGA_DEVICE(0x9BCB, info), \
|
||||
INTEL_VGA_DEVICE(0x9BCC, info), \
|
||||
INTEL_VGA_DEVICE(0x9BC0, info), \
|
||||
INTEL_VGA_DEVICE(0x9BC5, info), \
|
||||
INTEL_VGA_DEVICE(0x9BC8, info), \
|
||||
INTEL_VGA_DEVICE(0x9BC4, info), \
|
||||
INTEL_VGA_DEVICE(0x9BC2, info)
|
||||
|
||||
#define INTEL_KBL_IDS(info) \
|
||||
INTEL_KBL_GT1_IDS(info), \
|
||||
INTEL_KBL_GT2_IDS(info), \
|
||||
@ -436,7 +460,9 @@
|
||||
INTEL_WHL_U_GT1_IDS(info), \
|
||||
INTEL_WHL_U_GT2_IDS(info), \
|
||||
INTEL_WHL_U_GT3_IDS(info), \
|
||||
INTEL_AML_CFL_GT2_IDS(info)
|
||||
INTEL_AML_CFL_GT2_IDS(info), \
|
||||
INTEL_CML_GT1_IDS(info), \
|
||||
INTEL_CML_GT2_IDS(info)
|
||||
|
||||
/* CNL */
|
||||
#define INTEL_CNL_IDS(info) \
|
||||
@ -469,6 +495,14 @@
|
||||
INTEL_VGA_DEVICE(0x8A57, info), \
|
||||
INTEL_VGA_DEVICE(0x8A56, info), \
|
||||
INTEL_VGA_DEVICE(0x8A71, info), \
|
||||
INTEL_VGA_DEVICE(0x8A70, info)
|
||||
INTEL_VGA_DEVICE(0x8A70, info), \
|
||||
INTEL_VGA_DEVICE(0x8A53, info)
|
||||
|
||||
/* EHL */
|
||||
#define INTEL_EHL_IDS(info) \
|
||||
INTEL_VGA_DEVICE(0x4500, info), \
|
||||
INTEL_VGA_DEVICE(0x4571, info), \
|
||||
INTEL_VGA_DEVICE(0x4551, info), \
|
||||
INTEL_VGA_DEVICE(0x4541, info)
|
||||
|
||||
#endif /* _I915_PCIIDS_H */
|
||||
|
@ -156,7 +156,7 @@ struct _drm_intel_bufmgr {
|
||||
* address range (2^48).
|
||||
*
|
||||
* Any resource used with flat/heapless (0x00000000-0xfffff000)
|
||||
* General State Heap (GSH) or Intructions State Heap (ISH) must
|
||||
* General State Heap (GSH) or Instructions State Heap (ISH) must
|
||||
* be in a 32-bit range. 48-bit range will only be used when explicitly
|
||||
* requested.
|
||||
*
|
||||
|
@ -73,7 +73,7 @@ drm_private extern int mmFreeMem(struct mem_block *b);
|
||||
drm_private extern void mmDestroy(struct mem_block *mmInit);
|
||||
|
||||
/**
|
||||
* For debuging purpose.
|
||||
* For debugging purpose.
|
||||
*/
|
||||
drm_private extern void mmDumpMemInfo(const struct mem_block *mmInit);
|
||||
|
||||
|
@ -4,7 +4,7 @@ libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
|
||||
Name: libkms
|
||||
Description: Library that abstract aways the different mm interface for kernel drivers
|
||||
Description: Library that abstracts away the different mm interface for kernel drivers
|
||||
Version: 1.0.0
|
||||
Libs: -L${libdir} -lkms
|
||||
Cflags: -I${includedir}/libkms
|
||||
|
@ -75,7 +75,7 @@ am_amdgpu_test_OBJECTS = amdgpu_test-amdgpu_test.$(OBJEXT) \
|
||||
amdgpu_test-uvd_enc_tests.$(OBJEXT) \
|
||||
amdgpu_test-vcn_tests.$(OBJEXT) \
|
||||
amdgpu_test-deadlock_tests.$(OBJEXT) \
|
||||
amdgpu_test-vm_tests.$(OBJEXT)
|
||||
amdgpu_test-vm_tests.$(OBJEXT) amdgpu_test-ras_tests.$(OBJEXT)
|
||||
amdgpu_test_OBJECTS = $(am_amdgpu_test_OBJECTS)
|
||||
amdgpu_test_LDADD = $(LDADD)
|
||||
am__DEPENDENCIES_1 =
|
||||
@ -305,7 +305,8 @@ amdgpu_test_SOURCES = \
|
||||
vcn_tests.c \
|
||||
uve_ib.h \
|
||||
deadlock_tests.c \
|
||||
vm_tests.c
|
||||
vm_tests.c \
|
||||
ras_tests.c
|
||||
|
||||
all: all-am
|
||||
|
||||
@ -411,6 +412,7 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amdgpu_test-bo_tests.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amdgpu_test-cs_tests.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amdgpu_test-deadlock_tests.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amdgpu_test-ras_tests.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amdgpu_test-uvd_enc_tests.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amdgpu_test-vce_tests.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amdgpu_test-vcn_tests.Po@am__quote@
|
||||
@ -563,6 +565,20 @@ amdgpu_test-vm_tests.obj: vm_tests.c
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amdgpu_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o amdgpu_test-vm_tests.obj `if test -f 'vm_tests.c'; then $(CYGPATH_W) 'vm_tests.c'; else $(CYGPATH_W) '$(srcdir)/vm_tests.c'; fi`
|
||||
|
||||
amdgpu_test-ras_tests.o: ras_tests.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amdgpu_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT amdgpu_test-ras_tests.o -MD -MP -MF $(DEPDIR)/amdgpu_test-ras_tests.Tpo -c -o amdgpu_test-ras_tests.o `test -f 'ras_tests.c' || echo '$(srcdir)/'`ras_tests.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amdgpu_test-ras_tests.Tpo $(DEPDIR)/amdgpu_test-ras_tests.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ras_tests.c' object='amdgpu_test-ras_tests.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amdgpu_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o amdgpu_test-ras_tests.o `test -f 'ras_tests.c' || echo '$(srcdir)/'`ras_tests.c
|
||||
|
||||
amdgpu_test-ras_tests.obj: ras_tests.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amdgpu_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT amdgpu_test-ras_tests.obj -MD -MP -MF $(DEPDIR)/amdgpu_test-ras_tests.Tpo -c -o amdgpu_test-ras_tests.obj `if test -f 'ras_tests.c'; then $(CYGPATH_W) 'ras_tests.c'; else $(CYGPATH_W) '$(srcdir)/ras_tests.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amdgpu_test-ras_tests.Tpo $(DEPDIR)/amdgpu_test-ras_tests.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ras_tests.c' object='amdgpu_test-ras_tests.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amdgpu_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o amdgpu_test-ras_tests.obj `if test -f 'ras_tests.c'; then $(CYGPATH_W) 'ras_tests.c'; else $(CYGPATH_W) '$(srcdir)/ras_tests.c'; fi`
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
|
@ -59,6 +59,8 @@
|
||||
#endif
|
||||
#include <math.h>
|
||||
|
||||
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
|
||||
|
||||
/* Not all systems have MAP_FAILED defined */
|
||||
#ifndef MAP_FAILED
|
||||
#define MAP_FAILED ((void *)-1)
|
||||
@ -101,7 +103,9 @@
|
||||
|
||||
#ifdef __OpenBSD__
|
||||
#define X_PRIVSEP
|
||||
#endif
|
||||
|
||||
#if defined(__OpenBSD__) || defined(__DragonFly__)
|
||||
struct drm_pciinfo {
|
||||
uint16_t domain;
|
||||
uint8_t bus;
|
||||
@ -179,7 +183,7 @@ drm_public void drmFree(void *pt)
|
||||
}
|
||||
|
||||
/**
|
||||
* Call ioctl, restarting if it is interupted
|
||||
* Call ioctl, restarting if it is interrupted
|
||||
*/
|
||||
drm_public int
|
||||
drmIoctl(int fd, unsigned long request, void *arg)
|
||||
@ -289,7 +293,7 @@ static int drmMatchBusID(const char *id1, const char *id2, int pci_domain_ok)
|
||||
*
|
||||
* \internal
|
||||
* Checks for failure. If failure was caused by signal call chown again.
|
||||
* If any other failure happened then it will output error mesage using
|
||||
* If any other failure happened then it will output error message using
|
||||
* drmMsg() call.
|
||||
*/
|
||||
#if !UDEV
|
||||
@ -1481,7 +1485,7 @@ drm_public int drmDMA(int fd, drmDMAReqPtr request)
|
||||
*
|
||||
* \param fd file descriptor.
|
||||
* \param context context.
|
||||
* \param flags flags that determine the sate of the hardware when the function
|
||||
* \param flags flags that determine the state of the hardware when the function
|
||||
* returns.
|
||||
*
|
||||
* \return always zero.
|
||||
@ -2766,6 +2770,24 @@ drm_public int drmDropMaster(int fd)
|
||||
return drmIoctl(fd, DRM_IOCTL_DROP_MASTER, NULL);
|
||||
}
|
||||
|
||||
drm_public int drmIsMaster(int fd)
|
||||
{
|
||||
/* Detect master by attempting something that requires master.
|
||||
*
|
||||
* Authenticating magic tokens requires master and 0 is an
|
||||
* internal kernel detail which we could use. Attempting this on
|
||||
* a master fd would fail therefore fail with EINVAL because 0
|
||||
* is invalid.
|
||||
*
|
||||
* A non-master fd will fail with EACCES, as the kernel checks
|
||||
* for master before attempting to do anything else.
|
||||
*
|
||||
* Since we don't want to leak implementation details, use
|
||||
* EACCES.
|
||||
*/
|
||||
return drmAuthMagic(fd, 0) != -EACCES;
|
||||
}
|
||||
|
||||
drm_public char *drmGetDeviceNameFromFd(int fd)
|
||||
{
|
||||
char name[128];
|
||||
@ -3009,6 +3031,17 @@ static int drmParseSubsystemType(int maj, int min)
|
||||
char path[PATH_MAX + 1];
|
||||
char link[PATH_MAX + 1] = "";
|
||||
char *name;
|
||||
struct {
|
||||
const char *name;
|
||||
int bus_type;
|
||||
} bus_types[] = {
|
||||
{ "/pci", DRM_BUS_PCI },
|
||||
{ "/usb", DRM_BUS_USB },
|
||||
{ "/platform", DRM_BUS_PLATFORM },
|
||||
{ "/spi", DRM_BUS_PLATFORM },
|
||||
{ "/host1x", DRM_BUS_HOST1X },
|
||||
{ "/virtio", DRM_BUS_VIRTIO },
|
||||
};
|
||||
|
||||
snprintf(path, PATH_MAX, "/sys/dev/char/%d:%d/device/subsystem",
|
||||
maj, min);
|
||||
@ -3020,23 +3053,13 @@ static int drmParseSubsystemType(int maj, int min)
|
||||
if (!name)
|
||||
return -EINVAL;
|
||||
|
||||
if (strncmp(name, "/pci", 4) == 0)
|
||||
return DRM_BUS_PCI;
|
||||
|
||||
if (strncmp(name, "/usb", 4) == 0)
|
||||
return DRM_BUS_USB;
|
||||
|
||||
if (strncmp(name, "/platform", 9) == 0)
|
||||
return DRM_BUS_PLATFORM;
|
||||
|
||||
if (strncmp(name, "/host1x", 7) == 0)
|
||||
return DRM_BUS_HOST1X;
|
||||
|
||||
if (strncmp(name, "/virtio", 7) == 0)
|
||||
return DRM_BUS_VIRTIO;
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(bus_types); i++) {
|
||||
if (strncmp(name, bus_types[i].name, strlen(bus_types[i].name)) == 0)
|
||||
return bus_types[i].bus_type;
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
#elif defined(__OpenBSD__)
|
||||
#elif defined(__OpenBSD__) || defined(__DragonFly__)
|
||||
return DRM_BUS_PCI;
|
||||
#else
|
||||
#warning "Missing implementation of drmParseSubsystemType"
|
||||
@ -3085,7 +3108,7 @@ static int drmParsePciBusInfo(int maj, int min, drmPciBusInfoPtr info)
|
||||
info->func = func;
|
||||
|
||||
return 0;
|
||||
#elif defined(__OpenBSD__)
|
||||
#elif defined(__OpenBSD__) || defined(__DragonFly__)
|
||||
struct drm_pciinfo pinfo;
|
||||
int fd, type;
|
||||
|
||||
@ -3174,7 +3197,6 @@ static int parse_separate_sysfs_files(int maj, int min,
|
||||
drmPciDeviceInfoPtr device,
|
||||
bool ignore_revision)
|
||||
{
|
||||
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
|
||||
static const char *attrs[] = {
|
||||
"revision", /* Older kernels are missing the file, so check for it first */
|
||||
"vendor",
|
||||
@ -3252,7 +3274,7 @@ static int drmParsePciDeviceInfo(int maj, int min,
|
||||
return parse_config_sysfs_file(maj, min, device);
|
||||
|
||||
return 0;
|
||||
#elif defined(__OpenBSD__)
|
||||
#elif defined(__OpenBSD__) || defined(__DragonFly__)
|
||||
struct drm_pciinfo pinfo;
|
||||
int fd, type;
|
||||
|
||||
@ -3533,69 +3555,97 @@ free_device:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int drmParsePlatformBusInfo(int maj, int min, drmPlatformBusInfoPtr info)
|
||||
static int drmParseOFBusInfo(int maj, int min, char *fullname)
|
||||
{
|
||||
#ifdef __linux__
|
||||
char path[PATH_MAX + 1], *name;
|
||||
char path[PATH_MAX + 1], *name, *tmp_name;
|
||||
|
||||
snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min);
|
||||
|
||||
name = sysfs_uevent_get(path, "OF_FULLNAME");
|
||||
if (!name)
|
||||
return -ENOENT;
|
||||
tmp_name = name;
|
||||
if (!name) {
|
||||
/* If the device lacks OF data, pick the MODALIAS info */
|
||||
name = sysfs_uevent_get(path, "MODALIAS");
|
||||
if (!name)
|
||||
return -ENOENT;
|
||||
|
||||
strncpy(info->fullname, name, DRM_PLATFORM_DEVICE_NAME_LEN);
|
||||
info->fullname[DRM_PLATFORM_DEVICE_NAME_LEN - 1] = '\0';
|
||||
/* .. and strip the MODALIAS=[platform,usb...]: part. */
|
||||
tmp_name = strrchr(name, ':');
|
||||
if (!tmp_name) {
|
||||
free(name);
|
||||
return -ENOENT;
|
||||
}
|
||||
tmp_name++;
|
||||
}
|
||||
|
||||
strncpy(fullname, tmp_name, DRM_PLATFORM_DEVICE_NAME_LEN);
|
||||
fullname[DRM_PLATFORM_DEVICE_NAME_LEN - 1] = '\0';
|
||||
free(name);
|
||||
|
||||
return 0;
|
||||
#else
|
||||
#warning "Missing implementation of drmParsePlatformBusInfo"
|
||||
#warning "Missing implementation of drmParseOFBusInfo"
|
||||
return -EINVAL;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int drmParsePlatformDeviceInfo(int maj, int min,
|
||||
drmPlatformDeviceInfoPtr info)
|
||||
static int drmParseOFDeviceInfo(int maj, int min, char ***compatible)
|
||||
{
|
||||
#ifdef __linux__
|
||||
char path[PATH_MAX + 1], *value;
|
||||
char path[PATH_MAX + 1], *value, *tmp_name;
|
||||
unsigned int count, i;
|
||||
int err;
|
||||
|
||||
snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min);
|
||||
|
||||
value = sysfs_uevent_get(path, "OF_COMPATIBLE_N");
|
||||
if (!value)
|
||||
return -ENOENT;
|
||||
if (value) {
|
||||
sscanf(value, "%u", &count);
|
||||
free(value);
|
||||
} else {
|
||||
/* Assume one entry if the device lack OF data */
|
||||
count = 1;
|
||||
}
|
||||
|
||||
sscanf(value, "%u", &count);
|
||||
free(value);
|
||||
|
||||
info->compatible = calloc(count + 1, sizeof(*info->compatible));
|
||||
if (!info->compatible)
|
||||
*compatible = calloc(count + 1, sizeof(char *));
|
||||
if (!*compatible)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
value = sysfs_uevent_get(path, "OF_COMPATIBLE_%u", i);
|
||||
tmp_name = value;
|
||||
if (!value) {
|
||||
err = -ENOENT;
|
||||
goto free;
|
||||
/* If the device lacks OF data, pick the MODALIAS info */
|
||||
value = sysfs_uevent_get(path, "MODALIAS");
|
||||
if (!value) {
|
||||
err = -ENOENT;
|
||||
goto free;
|
||||
}
|
||||
|
||||
/* .. and strip the MODALIAS=[platform,usb...]: part. */
|
||||
tmp_name = strrchr(value, ':');
|
||||
if (!tmp_name) {
|
||||
free(value);
|
||||
return -ENOENT;
|
||||
}
|
||||
tmp_name = strdup(tmp_name + 1);
|
||||
free(value);
|
||||
}
|
||||
|
||||
info->compatible[i] = value;
|
||||
(*compatible)[i] = tmp_name;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
free:
|
||||
while (i--)
|
||||
free(info->compatible[i]);
|
||||
free((*compatible)[i]);
|
||||
|
||||
free(info->compatible);
|
||||
free(*compatible);
|
||||
return err;
|
||||
#else
|
||||
#warning "Missing implementation of drmParsePlatformDeviceInfo"
|
||||
#warning "Missing implementation of drmParseOFDeviceInfo"
|
||||
return -EINVAL;
|
||||
#endif
|
||||
}
|
||||
@ -3618,7 +3668,7 @@ static int drmProcessPlatformDevice(drmDevicePtr *device,
|
||||
|
||||
dev->businfo.platform = (drmPlatformBusInfoPtr)ptr;
|
||||
|
||||
ret = drmParsePlatformBusInfo(maj, min, dev->businfo.platform);
|
||||
ret = drmParseOFBusInfo(maj, min, dev->businfo.platform->fullname);
|
||||
if (ret < 0)
|
||||
goto free_device;
|
||||
|
||||
@ -3626,7 +3676,7 @@ static int drmProcessPlatformDevice(drmDevicePtr *device,
|
||||
ptr += sizeof(drmPlatformBusInfo);
|
||||
dev->deviceinfo.platform = (drmPlatformDeviceInfoPtr)ptr;
|
||||
|
||||
ret = drmParsePlatformDeviceInfo(maj, min, dev->deviceinfo.platform);
|
||||
ret = drmParseOFDeviceInfo(maj, min, &dev->deviceinfo.platform->compatible);
|
||||
if (ret < 0)
|
||||
goto free_device;
|
||||
}
|
||||
@ -3640,73 +3690,6 @@ free_device:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int drmParseHost1xBusInfo(int maj, int min, drmHost1xBusInfoPtr info)
|
||||
{
|
||||
#ifdef __linux__
|
||||
char path[PATH_MAX + 1], *name;
|
||||
|
||||
snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min);
|
||||
|
||||
name = sysfs_uevent_get(path, "OF_FULLNAME");
|
||||
if (!name)
|
||||
return -ENOENT;
|
||||
|
||||
strncpy(info->fullname, name, DRM_HOST1X_DEVICE_NAME_LEN);
|
||||
info->fullname[DRM_HOST1X_DEVICE_NAME_LEN - 1] = '\0';
|
||||
free(name);
|
||||
|
||||
return 0;
|
||||
#else
|
||||
#warning "Missing implementation of drmParseHost1xBusInfo"
|
||||
return -EINVAL;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int drmParseHost1xDeviceInfo(int maj, int min,
|
||||
drmHost1xDeviceInfoPtr info)
|
||||
{
|
||||
#ifdef __linux__
|
||||
char path[PATH_MAX + 1], *value;
|
||||
unsigned int count, i;
|
||||
int err;
|
||||
|
||||
snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min);
|
||||
|
||||
value = sysfs_uevent_get(path, "OF_COMPATIBLE_N");
|
||||
if (!value)
|
||||
return -ENOENT;
|
||||
|
||||
sscanf(value, "%u", &count);
|
||||
free(value);
|
||||
|
||||
info->compatible = calloc(count + 1, sizeof(*info->compatible));
|
||||
if (!info->compatible)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
value = sysfs_uevent_get(path, "OF_COMPATIBLE_%u", i);
|
||||
if (!value) {
|
||||
err = -ENOENT;
|
||||
goto free;
|
||||
}
|
||||
|
||||
info->compatible[i] = value;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
free:
|
||||
while (i--)
|
||||
free(info->compatible[i]);
|
||||
|
||||
free(info->compatible);
|
||||
return err;
|
||||
#else
|
||||
#warning "Missing implementation of drmParseHost1xDeviceInfo"
|
||||
return -EINVAL;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int drmProcessHost1xDevice(drmDevicePtr *device,
|
||||
const char *node, int node_type,
|
||||
int maj, int min, bool fetch_deviceinfo,
|
||||
@ -3725,7 +3708,7 @@ static int drmProcessHost1xDevice(drmDevicePtr *device,
|
||||
|
||||
dev->businfo.host1x = (drmHost1xBusInfoPtr)ptr;
|
||||
|
||||
ret = drmParseHost1xBusInfo(maj, min, dev->businfo.host1x);
|
||||
ret = drmParseOFBusInfo(maj, min, dev->businfo.host1x->fullname);
|
||||
if (ret < 0)
|
||||
goto free_device;
|
||||
|
||||
@ -3733,7 +3716,7 @@ static int drmProcessHost1xDevice(drmDevicePtr *device,
|
||||
ptr += sizeof(drmHost1xBusInfo);
|
||||
dev->deviceinfo.host1x = (drmHost1xDeviceInfoPtr)ptr;
|
||||
|
||||
ret = drmParseHost1xDeviceInfo(maj, min, dev->deviceinfo.host1x);
|
||||
ret = drmParseOFDeviceInfo(maj, min, &dev->deviceinfo.host1x->compatible);
|
||||
if (ret < 0)
|
||||
goto free_device;
|
||||
}
|
||||
|
@ -733,6 +733,7 @@ extern void drmMsg(const char *format, ...) DRM_PRINTFLIKE(1, 2);
|
||||
|
||||
extern int drmSetMaster(int fd);
|
||||
extern int drmDropMaster(int fd);
|
||||
extern int drmIsMaster(int fd);
|
||||
|
||||
#define DRM_EVENT_CONTEXT_VERSION 4
|
||||
|
||||
|
@ -105,7 +105,6 @@ static unsigned long HashHash(unsigned long key)
|
||||
drm_public void *drmHashCreate(void)
|
||||
{
|
||||
HashTablePtr table;
|
||||
int i;
|
||||
|
||||
table = drmMalloc(sizeof(*table));
|
||||
if (!table) return NULL;
|
||||
|
@ -49,12 +49,12 @@ extern "C" {
|
||||
* header defining uint32_t, int32_t and uint16_t.
|
||||
*
|
||||
* It aims to provide a randr1.2 compatible interface for modesettings in the
|
||||
* kernel, the interface is also ment to be used by libraries like EGL.
|
||||
* kernel, the interface is also meant to be used by libraries like EGL.
|
||||
*
|
||||
* More information can be found in randrproto.txt which can be found here:
|
||||
* http://gitweb.freedesktop.org/?p=xorg/proto/randrproto.git
|
||||
*
|
||||
* There are some major diffrences to be noted. Unlike the randr1.2 proto you
|
||||
* There are some major differences to be noted. Unlike the randr1.2 proto you
|
||||
* need to create the memory object of the framebuffer yourself with the ttm
|
||||
* buffer object interface. This object needs to be pinned.
|
||||
*/
|
||||
@ -348,7 +348,7 @@ extern void drmModeFreePlane( drmModePlanePtr ptr );
|
||||
extern void drmModeFreePlaneResources(drmModePlaneResPtr ptr);
|
||||
|
||||
/**
|
||||
* Retrives all of the resources associated with a card.
|
||||
* Retrieves all of the resources associated with a card.
|
||||
*/
|
||||
extern drmModeResPtr drmModeGetResources(int fd);
|
||||
|
||||
@ -357,7 +357,7 @@ extern drmModeResPtr drmModeGetResources(int fd);
|
||||
*/
|
||||
|
||||
/**
|
||||
* Retrive information about framebuffer bufferId
|
||||
* Retrieve information about framebuffer bufferId
|
||||
*/
|
||||
extern drmModeFBPtr drmModeGetFB(int fd, uint32_t bufferId);
|
||||
|
||||
@ -397,7 +397,7 @@ extern int drmModeDirtyFB(int fd, uint32_t bufferId,
|
||||
*/
|
||||
|
||||
/**
|
||||
* Retrive information about the ctrt crtcId
|
||||
* Retrieve information about the ctrt crtcId
|
||||
*/
|
||||
extern drmModeCrtcPtr drmModeGetCrtc(int fd, uint32_t crtcId);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user