mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
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 <benjaminfranzke@googlemail.com>
This commit is contained in:
parent
15418a8505
commit
4b2b0b9fb8
1 changed files with 64 additions and 0 deletions
|
|
@ -109,6 +109,70 @@ out:
|
||||||
return (*chip_id >= 0);
|
return (*chip_id >= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif defined(PIPE_OS_ANDROID)
|
||||||
|
|
||||||
|
#include <xf86drm.h>
|
||||||
|
/* for i915 */
|
||||||
|
#include <i915_drm.h>
|
||||||
|
/* for radeon */
|
||||||
|
#include <radeon_drm.h>
|
||||||
|
/* 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
|
#else
|
||||||
|
|
||||||
static boolean
|
static boolean
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue