Hi Kristian, On 20/01/14 20:42, Kristian Høgsberg wrote: > The udev hwdb is a mechanism for applying udev properties to devices at > hotplug time. The hwdb text files are compiled into a binary database > that lets udev efficiently look up and apply properties to devices that > match a given modalias. > > This patch exports the mesa PCI ID tables as hwdb files and extends the > loader code to try to look up the driver name from the DRI_DRIVER udev > property. The benefits to this approach are: > > - No longer PCI specific, any device udev can match with a modalias can > be assigned a DRI driver. > > - Available outside mesa; writing a DRI2 compatible generic DDX with > glamor needs to know the DRI driver name to send to the client. > > - Can be overridden by custom udev rules. > > Signed-off-by: Kristian Høgsberg <k...@bitplanet.net> > --- > configure.ac | 14 ++++++++++++++ > src/loader/Makefile.am | 15 +++++++++++++++ > src/loader/dump-hwdb.c | 31 +++++++++++++++++++++++++++++++ > src/loader/loader.c | 33 +++++++++++++++++++++++++-------- > src/loader/loader.h | 2 +- > 5 files changed, 86 insertions(+), 9 deletions(-) > create mode 100644 src/loader/dump-hwdb.c > > diff --git a/configure.ac b/configure.ac > index d9e1896..8670908 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -771,6 +771,20 @@ if test "x$have_libdrm" = xyes; then > DEFINES="$DEFINES -DHAVE_LIBDRM" > fi > > +# This /lib prefix does not change with 32/64 bits it's always /lib > +case "$prefix" in > +/usr) default_udevhwdbdir=/lib/udev/hwdb.d ;; > +NONE) default_udevhwdbdir=${ac_default_prefix}/lib/udev/hwdb.d ;; > +*) default_udevhwdbdir=$prefix/lib/udev/hwdb.d ;; > +esac > + > +AC_ARG_WITH([udev-hwdb-dir], > + [AS_HELP_STRING([--with-udev-hwdb-dir=DIR], > + [directory for the udev hwdb @<:@/lib/udev/hwdb.d@:>@])], > + [udevhwdbdir="$withval"], > + [udevhwdbdir=$default_udevhwdbdir]) > +AC_SUBST([udevhwdbdir]) > + > PKG_CHECK_MODULES([LIBUDEV], [libudev >= $LIBUDEV_REQUIRED], > have_libudev=yes, have_libudev=no) > > diff --git a/src/loader/Makefile.am b/src/loader/Makefile.am > index 371dd57..bf3918b 100644 > --- a/src/loader/Makefile.am > +++ b/src/loader/Makefile.am > @@ -44,3 +44,18 @@ libloader_la_LIBADD += \ > endif > > libloader_la_SOURCES = $(LOADER_C_FILES) > + > + > +noinst_PROGRAMS = dump-hwdb > +dump_hwdb_SOURCES = dump-hwdb.c > +dump_hwdb_CPPFLAGS = -I$(top_srcdir)/include > + > +dist_udevhwdb_DATA = 20-dri-driver.hwdb > + > +# Update hwdb on installation. Do not bother if installing > +# in DESTDIR, since this is likely for packaging purposes. > +install-data-hook: > + -test -n "$(DESTDIR)" || udevadm hwdb --update > + > +20-dri-driver.hwdb : dump-hwdb > + $(builddir)/dump-hwdb > $@ > diff --git a/src/loader/dump-hwdb.c b/src/loader/dump-hwdb.c > new file mode 100644 > index 0000000..d48452d > --- /dev/null > +++ b/src/loader/dump-hwdb.c > @@ -0,0 +1,31 @@ > +#include <stdlib.h> > +#include <stdio.h> > + > +#define DRIVER_MAP_DRI2_ONLY Mesa does not need/make use of DRIVER_MAP* since the loader patches. Feel free to drop the above define.
> +#define __IS_LOADER > + > +#include "loader.h" > +#include "pci_ids/pci_id_driver_map.h" > + > +#define PROP_NAME "DRI_DRIVER" > + > +int main(int argc, char *argv[]) > +{ > + int i, j; > + > + for (i = 0; driver_map[i].driver; i++) { > + if (driver_map[i].num_chips_ids == -1) { > + /* Add a match for display base class (bc03) for drivers that don't > + * export per-device IDs (nouveau) */ > + printf("pci:v%08x*bc03*\n " PROP_NAME "=%s\n\n", > + driver_map[i].vendor_id, driver_map[i].driver); > + continue; > + } > + > + for (j = 0; j < driver_map[i].num_chips_ids; j++) > + printf("pci:v%08xd%08x*\n " PROP_NAME "=%s\n\n", > + driver_map[i].vendor_id, > + driver_map[i].chip_ids[j], > + driver_map[i].driver); > + } Can you please add a return 0; to silence compiler warnings. Thanks -Emil _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev