[Nouveau] [libdrm v2 08/14] nouveau: stack legacy nouveau_device on top of nouveau_drm
Ben Skeggs
skeggsb at gmail.com
Thu Nov 26 17:02:47 PST 2015
From: Ben Skeggs <bskeggs at redhat.com>
Signed-off-by: Ben Skeggs <bskeggs at redhat.com>
---
nouveau/nouveau.c | 46 +++++++++++++++++++++-------------------------
1 file changed, 21 insertions(+), 25 deletions(-)
diff --git a/nouveau/nouveau.c b/nouveau/nouveau.c
index 2b16351..d129ae8 100644
--- a/nouveau/nouveau.c
+++ b/nouveau/nouveau.c
@@ -244,39 +244,36 @@ nouveau_device_open_existing(struct nouveau_device **pdev, int close, int fd,
int
nouveau_device_wrap(int fd, int close, struct nouveau_device **pdev)
{
- struct nouveau_device_priv *nvdev = calloc(1, sizeof(*nvdev));
- struct nouveau_device *dev = &nvdev->base;
+ struct nouveau_drm *drm;
+ struct nouveau_device_priv *nvdev;
+ struct nouveau_device *dev;
uint64_t chipset, vram, gart, bousage;
- drmVersionPtr ver;
int ret;
char *tmp;
-#ifdef DEBUG
- debug_init(getenv("NOUVEAU_LIBDRM_DEBUG"));
-#endif
-
- if (!nvdev)
+ if (!(nvdev = calloc(1, sizeof(*nvdev))))
return -ENOMEM;
+ dev = &nvdev->base;
+
ret = pthread_mutex_init(&nvdev->lock, NULL);
if (ret) {
free(nvdev);
return ret;
}
- nvdev->base.fd = fd;
-
- ver = drmGetVersion(fd);
- if (ver) dev->drm_version = (ver->version_major << 24) |
- (ver->version_minor << 8) |
- ver->version_patchlevel;
- drmFreeVersion(ver);
-
- if ( dev->drm_version != 0x00000010 &&
- (dev->drm_version < 0x01000000 ||
- dev->drm_version >= 0x02000000)) {
+ ret = nouveau_drm_new(fd, &drm);
+ if (ret) {
nouveau_device_del(&dev);
- return -EINVAL;
+ return ret;
}
+ drm->nvif = false;
+
+ nvdev->base.object.parent = &drm->client;
+ nvdev->base.object.oclass = NOUVEAU_DEVICE_CLASS;
+ nvdev->base.object.length = ~0;
+ nvdev->base.fd = drm->fd;
+ nvdev->base.drm_version = drm->drm_version;
+ nvdev->base.lib_version = drm->lib_version;
ret = nouveau_getparam(dev, NOUVEAU_GETPARAM_CHIPSET_ID, &chipset);
if (ret == 0)
@@ -305,9 +302,6 @@ nouveau_device_wrap(int fd, int close, struct nouveau_device **pdev)
else
nvdev->gart_limit_percent = 80;
DRMINITLISTHEAD(&nvdev->bo_list);
- nvdev->base.object.oclass = NOUVEAU_DEVICE_CLASS;
- nvdev->base.object.length = ~0;
- nvdev->base.lib_version = 0x01000000;
nvdev->base.chipset = chipset;
nvdev->base.vram_size = vram;
nvdev->base.gart_size = gart;
@@ -337,10 +331,12 @@ nouveau_device_del(struct nouveau_device **pdev)
{
struct nouveau_device_priv *nvdev = nouveau_device(*pdev);
if (nvdev) {
- if (nvdev->close)
- drmClose(nvdev->base.fd);
+ struct nouveau_drm *drm = nouveau_drm(&nvdev->base.object);
free(nvdev->client);
+ nouveau_drm_del(&drm);
pthread_mutex_destroy(&nvdev->lock);
+ if (nvdev->close)
+ drmClose(nvdev->base.fd);
free(nvdev);
*pdev = NULL;
}
--
2.6.3
More information about the Nouveau
mailing list