2011/8/19 Chia-I Wu <olva...@gmail.com>: > There is no libudev on Android. Use DRM to get the PCI ID directly. > --- > src/gallium/targets/egl-static/egl.c | 62 > ++++++++++++++++++++++++++++++++++ > 1 files changed, 62 insertions(+), 0 deletions(-) > > diff --git a/src/gallium/targets/egl-static/egl.c > b/src/gallium/targets/egl-static/egl.c > index 568f549..38ba6c2 100644 > --- a/src/gallium/targets/egl-static/egl.c > +++ b/src/gallium/targets/egl-static/egl.c > @@ -109,6 +109,68 @@ out: > return (*chip_id >= 0); > } > > +#elif defined(PIPE_OS_ANDROID)
Just want to mention that I appreciate doing this really only for android, and not as a fallback for no-libudev in general. (which would probably end up with more problems for none intel/radeon users and strange bugs..) > + > +#include <xf86drm.h> > +/* for i915 */ > +#include <i915_drm.h> > +/* for radeon */ > +#include <radeon_drm.h> > + > +static boolean > +drm_fd_get_pci_id(int fd, int *vendor_id, int *chip_id) > +{ > + drmVersionPtr version; > + > + *chip_id = -1; > + > + version = drmGetVersion(fd); > + if (!version) { > + _eglLog(_EGL_WARNING, "invalid drm fd"); > + return FALSE; > + } > + if (!version->name) { > + _eglLog(_EGL_WARNING, "unable to determine the driver name"); > + drmFreeVersion(version); > + return FALSE; > + } > + > + if (strcmp(version->name, "i915") == 0) { Shouldnt util_strcmp from util/u_string.h be used instead? > + struct drm_i915_getparam gp; > + int ret; > + > + *vendor_id = 0x8086; > + > + memset(&gp, 0, sizeof(gp)); > + gp.param = I915_PARAM_CHIPSET_ID; > + gp.value = chip_id; > + ret = drmCommandWriteRead(fd, DRM_I915_GETPARAM, &gp, sizeof(gp)); > + if (ret) { > + _eglLog(_EGL_WARNING, "failed to get param for i915"); > + *chip_id = -1; > + } > + } > + else if (strcmp(version->name, "radeon") == 0) { > + struct drm_radeon_info info; > + int ret; > + > + *vendor_id = 0x1002; > + > + memset(&info, 0, sizeof(info)); > + info.request = RADEON_INFO_DEVICE_ID; > + info.value = (long) chip_id; Just a little nitpick: value is of type uint64_t, so the cast should rather be to an unsigned type. Besides that: Reviewed-by: Benjamin Franzke <benjaminfran...@googlemail.com> > + ret = drmCommandWriteRead(fd, DRM_RADEON_INFO, &info, sizeof(info)); > + if (ret) { > + _eglLog(_EGL_WARNING, "failed to get info for radeon"); > + *chip_id = -1; > + } > + } > + > + drmFreeVersion(version); > + > + return (*chip_id >= 0); > +} > + > #else > > static boolean > -- > 1.7.5.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev