static struct fd_device * fd_device_new_impl(int fd) { struct fd_device *dev; drmVersionPtr version; /* figure out if we are kgsl or msm drm driver: */ version = drmGetVersion(fd); if (!version) { ERROR_MSG("cannot get version: %s", strerror(errno)); return NULL; } if (!strcmp(version->name, "kgsl")) { DEBUG_MSG("kgsl DRM device"); dev = kgsl_device_new(fd); } else if (!strcmp(version->name, "msm")) { DEBUG_MSG("msm DRM device"); dev = msm_device_new(fd); } else { ERROR_MSG("unknown device: %s", version->name); dev = NULL; } if (!dev) return NULL; atomic_set(&dev->refcnt, 1); dev->fd = fd; dev->handle_table = drmHashCreate(); dev->name_table = drmHashCreate(); init_cache_buckets(dev); return dev; }
struct fd_device * fd_device_new(int fd) { struct fd_device *dev; drmVersionPtr version; /* figure out if we are kgsl or msm drm driver: */ version = drmGetVersion(fd); if (!version) { ERROR_MSG("cannot get version: %s", strerror(errno)); return NULL; } if (!strcmp(version->name, "msm")) { DEBUG_MSG("msm DRM device"); if (version->version_major != 1) { ERROR_MSG("unsupported version: %u.%u.%u", version->version_major, version->version_minor, version->version_patchlevel); dev = NULL; goto out; } dev = msm_device_new(fd); dev->version = version->version_minor; #if HAVE_FREEDRENO_KGSL } else if (!strcmp(version->name, "kgsl")) { DEBUG_MSG("kgsl DRM device"); dev = kgsl_device_new(fd); #endif } else { ERROR_MSG("unknown device: %s", version->name); dev = NULL; } out: drmFreeVersion(version); if (!dev) return NULL; p_atomic_set(&dev->refcnt, 1); dev->fd = fd; dev->handle_table = _mesa_hash_table_create(NULL, u32_hash, u32_equals); dev->name_table = _mesa_hash_table_create(NULL, u32_hash, u32_equals); fd_bo_cache_init(&dev->bo_cache, FALSE); fd_bo_cache_init(&dev->ring_cache, TRUE); return dev; }