]> Pileus Git - ~andy/linux/blobdiff - drivers/gpu/drm/nouveau/nouveau_gem.c
drm/nouveau: convert some bo.offset use to vma.offset
[~andy/linux] / drivers / gpu / drm / nouveau / nouveau_gem.c
index b52e46018245801776dc77ab490ce95942fbbbad..d314f34f39d67104705f9f463df2a93161da5f6a 100644 (file)
@@ -60,9 +60,29 @@ nouveau_gem_object_del(struct drm_gem_object *gem)
 }
 
 int
-nouveau_gem_new(struct drm_device *dev, struct nouveau_channel *chan,
-               int size, int align, uint32_t domain, uint32_t tile_mode,
-               uint32_t tile_flags, struct nouveau_bo **pnvbo)
+nouveau_gem_object_open(struct drm_gem_object *gem, struct drm_file *file_priv)
+{
+       struct nouveau_fpriv *fpriv = nouveau_fpriv(file_priv);
+
+       if (!fpriv->vm)
+               return 0;
+
+       return 0;
+}
+
+void
+nouveau_gem_object_close(struct drm_gem_object *gem, struct drm_file *file_priv)
+{
+       struct nouveau_fpriv *fpriv = nouveau_fpriv(file_priv);
+
+       if (!fpriv->vm)
+               return;
+}
+
+int
+nouveau_gem_new(struct drm_device *dev, int size, int align, uint32_t domain,
+               uint32_t tile_mode, uint32_t tile_flags,
+               struct nouveau_bo **pnvbo)
 {
        struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_bo *nvbo;
@@ -76,7 +96,7 @@ nouveau_gem_new(struct drm_device *dev, struct nouveau_channel *chan,
        if (!flags || domain & NOUVEAU_GEM_DOMAIN_CPU)
                flags |= TTM_PL_FLAG_SYSTEM;
 
-       ret = nouveau_bo_new(dev, chan, size, align, flags, tile_mode,
+       ret = nouveau_bo_new(dev, NULL, size, align, flags, tile_mode,
                             tile_flags, pnvbo);
        if (ret)
                return ret;
@@ -105,6 +125,7 @@ nouveau_gem_new(struct drm_device *dev, struct nouveau_channel *chan,
 static int
 nouveau_gem_info(struct drm_gem_object *gem, struct drm_nouveau_gem_info *rep)
 {
+       struct drm_nouveau_private *dev_priv = gem->dev->dev_private;
        struct nouveau_bo *nvbo = nouveau_gem_object(gem);
 
        if (nvbo->bo.mem.mem_type == TTM_PL_TT)
@@ -113,7 +134,10 @@ nouveau_gem_info(struct drm_gem_object *gem, struct drm_nouveau_gem_info *rep)
                rep->domain = NOUVEAU_GEM_DOMAIN_VRAM;
 
        rep->size = nvbo->bo.mem.num_pages << PAGE_SHIFT;
-       rep->offset = nvbo->bo.offset;
+       if (dev_priv->card_type < NV_50)
+               rep->offset = nvbo->bo.offset;
+       else
+               rep->offset = nvbo->vma.offset;
        rep->map_handle = nvbo->bo.addr_space_offset;
        rep->tile_mode = nvbo->tile_mode;
        rep->tile_flags = nvbo->tile_flags;
@@ -127,7 +151,6 @@ nouveau_gem_ioctl_new(struct drm_device *dev, void *data,
        struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct drm_nouveau_gem_new *req = data;
        struct nouveau_bo *nvbo = NULL;
-       struct nouveau_channel *chan = NULL;
        int ret = 0;
 
        if (unlikely(dev_priv->ttm.bdev.dev_mapping == NULL))
@@ -138,17 +161,9 @@ nouveau_gem_ioctl_new(struct drm_device *dev, void *data,
                return -EINVAL;
        }
 
-       if (req->channel_hint) {
-               chan = nouveau_channel_get(dev, file_priv, req->channel_hint);
-               if (IS_ERR(chan))
-                       return PTR_ERR(chan);
-       }
-
-       ret = nouveau_gem_new(dev, chan, req->info.size, req->align,
+       ret = nouveau_gem_new(dev, req->info.size, req->align,
                              req->info.domain, req->info.tile_mode,
                              req->info.tile_flags, &nvbo);
-       if (chan)
-               nouveau_channel_put(&chan);
        if (ret)
                return ret;
 
@@ -548,7 +563,7 @@ nouveau_gem_ioctl_pushbuf(struct drm_device *dev, void *data,
        struct nouveau_fence *fence = NULL;
        int i, j, ret = 0, do_reloc = 0;
 
-       chan = nouveau_channel_get(dev, file_priv, req->channel);
+       chan = nouveau_channel_get(file_priv, req->channel);
        if (IS_ERR(chan))
                return PTR_ERR(chan);