From: Chia-I Wu Date: Thu, 18 Aug 2011 02:24:25 +0000 (+0800) Subject: targets/egl-static: do not rely on libudev on Android X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4b2b0b9fb8d41e7a8df4cdc49d498fcfb99139df;p=mesa.git targets/egl-static: do not rely on libudev on Android There is no libudev on Android. Use DRM to get the PCI ID directly. Reviewed-by: Benjamin Franzke --- diff --git a/src/gallium/targets/egl-static/egl.c b/src/gallium/targets/egl-static/egl.c index 568f5498dd4..6e5f6f30b11 100644 --- a/src/gallium/targets/egl-static/egl.c +++ b/src/gallium/targets/egl-static/egl.c @@ -109,6 +109,70 @@ out: return (*chip_id >= 0); } +#elif defined(PIPE_OS_ANDROID) + +#include +/* for i915 */ +#include +/* for radeon */ +#include +/* for util_strcmp */ +#include "util/u_string.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 (util_strcmp(version->name, "i915") == 0) { + 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 (util_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 = (unsigned long) chip_id; + 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