[Mesa-dev] [PATCHv2 10/21] targets/egl-static: do not rely on libudev on Android

Benjamin Franzke benjaminfranzke at googlemail.com
Fri Aug 19 03:19:39 PDT 2011


2011/8/19 Chia-I Wu <olvaffe at gmail.com>:
> On Fri, Aug 19, 2011 at 5:59 PM, Benjamin Franzke
> <benjaminfranzke at googlemail.com> wrote:
>> 2011/8/19 Chia-I Wu <olvaffe at 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..)
> Can you elaborate?  I have no intention to make it a fallback, but I
> am curious about the potential problems.

The problem I meant is that it wouldnt work for nouveau right now, e.g. with the
wayland or drm platforms we would endup with "failed to get driver
name for fd ..".
>
>>> +
>>> +#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?
> Yes, will do.
>>> +      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.
> I will make it "unsigned long".
>> Besides that:
>> Reviewed-by: Benjamin Franzke <benjaminfranzke at googlemail.com>
> Thanks.
>>> +      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 at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>>
>>
>
>
>
> --
> olv at LunarG.com
>


More information about the mesa-dev mailing list