Directly open the files in sysfs to remove the last usage of the deprecated libsysfs library in fbdev.c and remove libsysfs from the build system.
v2: actually set vendor, model and remove unnecessary linux/limits.h include --- configure.in | 28 ----------- directfb-config.in | 5 +- systems/fbdev/Makefile.am | 3 +- systems/fbdev/fbdev.c | 119 +++++++++++++++++++++++++-------------------- 4 files changed, 69 insertions(+), 86 deletions(-) diff --git a/configure.in b/configure.in index 374bf7f..c5aa8c5 100644 --- a/configure.in +++ b/configure.in @@ -839,33 +839,6 @@ AC_SUBST(MESA_CFLAGS) -dnl Test for libsysfs -AC_ARG_ENABLE(sysfs, - AC_HELP_STRING([--enable-sysfs], - [build with sysfs support @<:@default=auto@:>@]), - [], [enable_sysfs=yes]) - -use_sysfs=no -SYSFS_LIBS= - -if test "$enable_sysfs" = "yes"; then - AC_CHECK_LIB(sysfs, sysfs_get_mnt_path, - [ - AC_CHECK_HEADER(sysfs/libsysfs.h, - use_sysfs=yes - AC_DEFINE(USE_SYSFS,1,[Define to 1 to build with sysfs support.]) - SYSFS_LIBS='-lsysfs', - AC_MSG_WARN([ -*** libsysfs header files not found -- Building without sysfs support.])) - ],[ - AC_MSG_WARN([ *** libsysfs not found -- Building without sysfs support.]) - ]) -fi - -AC_SUBST(SYSFS_LIBS) - - - dnl Test for libjpeg JPEG=no @@ -2216,7 +2189,6 @@ Misc options: Dithering $with_dither Dithering 565 $with_dither_rgb16 zlib compression $use_zlib $ZLIB_LIBS - sysfs support $use_sysfs $SYSFS_LIBS Using setsockopt $with_setsockopt Building Tests $with_tests diff --git a/directfb-config.in b/directfb-config.in index 212675c..0fa0bb7 100644 --- a/directfb-config.in +++ b/directfb-config.in @@ -126,9 +126,6 @@ while test $# -gt 0; do for i in `echo $optarg | sed 's/,/ /g'`; do echo_system="$echo_system $moduledir/systems/libdirectfb_$i.o" case $i in - fbdev) - echo_system="$echo_system @SYSFS_LIBS@" - ;; sdl) echo_system="$echo_system @SDL_LIBS@" ;; @@ -233,7 +230,7 @@ if test -n "$echo_static"; then echo -static if test -z "$echo_system"; then - echo $moduledir/systems/libdirectfb_fbdev.o @SYSFS_LIBS@ + echo $moduledir/systems/libdirectfb_fbdev.o fi if test -z "$echo_wm"; then diff --git a/systems/fbdev/Makefile.am b/systems/fbdev/Makefile.am index cf4ff8f..2911ad8 100644 --- a/systems/fbdev/Makefile.am +++ b/systems/fbdev/Makefile.am @@ -29,8 +29,7 @@ systems_LTLIBRARIES = libdirectfb_fbdev.la libdirectfb_fbdev_la_LDFLAGS = \ -avoid-version \ - -module \ - $(SYSFS_LIBS) + -module libdirectfb_fbdev_la_SOURCES = \ agp.c \ diff --git a/systems/fbdev/fbdev.c b/systems/fbdev/fbdev.c index 242469b..96356b0 100644 --- a/systems/fbdev/fbdev.c +++ b/systems/fbdev/fbdev.c @@ -48,9 +48,10 @@ #include <pthread.h> -#ifdef USE_SYSFS -# include <sysfs/libsysfs.h> -#endif +#define SYS_CLASS_GRAPHICS_DEV "/sys/class/graphics/%s/device" +#define SYS_CLASS_GRAPHICS_DEV_VENDOR "/sys/class/graphics/%s/device/vendor" +#define SYS_CLASS_GRAPHICS_DEV_MODEL "/sys/class/graphics/%s/device/device" +#define SYSFS_PATH_MAX 128 #include <fusion/arena.h> #include <fusion/fusion.h> @@ -324,65 +325,79 @@ error: static void dfb_fbdev_get_pci_info( FBDevShared *shared ) { - char buf[512]; - int vendor = -1; - int model = -1; - -#ifdef USE_SYSFS - if (!sysfs_get_mnt_path( buf, 512 )) { - struct sysfs_class_device *classdev; - struct sysfs_device *device; - struct sysfs_attribute *attr; - char *fbdev; - char dev[5] = { 'f', 'b', '0', 0, 0 }; - - fbdev = dfb_config->fb_device; - if (!fbdev) - fbdev = getenv( "FRAMEBUFFER" ); - - if (fbdev) { - if (!strncmp( fbdev, "/dev/fb/", 8 )) - snprintf( dev, 5, "fb%s", fbdev+8 ); - else if (!strncmp( fbdev, "/dev/fb", 7 )) - snprintf( dev, 5, "fb%s", fbdev+7 ); + char buf[512]; + int vendor = -1; + int model = -1; + FILE *fp; + int bus; + int dev; + int func; + char *fbdev; + char devname[5] = { 'f', 'b', '0', 0, 0 }; + char path[SYSFS_PATH_MAX]; + int len; + + /* try sysfs interface */ + fbdev = dfb_config->fb_device; + if (!fbdev) + fbdev = getenv( "FRAMEBUFFER" ); + + if (fbdev) { + if (!strncmp( fbdev, "/dev/fb/", 8 )) + snprintf( devname, 5, "fb%s", fbdev+8 ); + else if (!strncmp( fbdev, "/dev/fb", 7 )) + snprintf( devname, 5, "fb%s", fbdev+7 ); + } + + snprintf(path, SYSFS_PATH_MAX, SYS_CLASS_GRAPHICS_DEV, devname); + + len = readlink(path,buf,512); + if(len != -1) { + char * base; + buf[len] = '\0'; + base = basename(buf); + + if (sscanf( base, "0000:%02x:%02x.%1x", &bus, &dev, &func ) == 3) { + shared->pci.bus = bus; + shared->pci.dev = dev; + shared->pci.func = func; + } + + snprintf(path, SYSFS_PATH_MAX, SYS_CLASS_GRAPHICS_DEV_VENDOR, devname); + + fp = fopen(path,"r"); + if(fp) { + if(fgets(buf,512,fp)) { + if(sscanf(buf,"0x%04x", &vendor) == 1) + shared->device.vendor = vendor; + } + fclose(fp); + } else { + D_DEBUG( "DirectFB/FBDev: " + "couldn't access %s!\n", path ); } - classdev = sysfs_open_class_device( "graphics", dev ); - if (classdev) { - device = sysfs_get_classdev_device( classdev ); - - if (device) { - attr = sysfs_get_device_attr( device, "vendor" ); - if (attr) - sscanf( attr->value, "0x%04x", &vendor ); - - attr = sysfs_get_device_attr( device, "device" ); - if (attr) - sscanf( attr->value, "0x%04x", &model ); - - if (vendor != -1 && model != -1) { - sscanf( device->name, "0000:%02x:%02x.%1x", - &shared->pci.bus, - &shared->pci.dev, - &shared->pci.func ); + snprintf(path, SYSFS_PATH_MAX, SYS_CLASS_GRAPHICS_DEV_MODEL, devname); - shared->device.vendor = vendor; - shared->device.model = model; - } + fp = fopen(path,"r"); + if(fp) { + if(fgets(buf,512,fp)) { + if(sscanf(buf,"0x%04x", &model) == 1) + shared->device.model = model; } - - sysfs_close_class_device( classdev ); + fclose(fp); + } else { + D_DEBUG( "DirectFB/FBDev: " + "couldn't access %s!\n", path ); } + } else { + D_DEBUG( "DirectFB/FBDev: " + "couldn't access %s!\n", path ); } -#endif /* USE_SYSFS */ /* try /proc interface */ if (vendor == -1 || model == -1) { - FILE *fp; int id; - int bus; - int dev; - int func; fp = fopen( "/proc/bus/pci/devices", "r" ); if (!fp) { -- 1.7.10 _______________________________________________ directfb-dev mailing list directfb-dev@directfb.org http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev