diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2010-11-15 20:50:09 -0500 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2010-12-03 00:11:59 -0500 |
commit | 7f4a195fcbd8b16f25f1de7f1419414d7505daa5 (patch) | |
tree | d54405e52a42c41f6e88ff3ae3685afe2aa57f34 /drivers/gpu/drm/nouveau/nouveau_notifier.c | |
parent | 6d6c5a157af45a5bd50ab913b07d826811a9ea0a (diff) |
drm/nouveau: tidy up and extend dma object creation interfaces
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_notifier.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_notifier.c | 29 |
1 files changed, 6 insertions, 23 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_notifier.c b/drivers/gpu/drm/nouveau/nouveau_notifier.c index 2c5a1f66f7f0..a050b7b69782 100644 --- a/drivers/gpu/drm/nouveau/nouveau_notifier.c +++ b/drivers/gpu/drm/nouveau/nouveau_notifier.c | |||
@@ -99,7 +99,6 @@ nouveau_notifier_alloc(struct nouveau_channel *chan, uint32_t handle, | |||
99 | int size, uint32_t *b_offset) | 99 | int size, uint32_t *b_offset) |
100 | { | 100 | { |
101 | struct drm_device *dev = chan->dev; | 101 | struct drm_device *dev = chan->dev; |
102 | struct drm_nouveau_private *dev_priv = dev->dev_private; | ||
103 | struct nouveau_gpuobj *nobj = NULL; | 102 | struct nouveau_gpuobj *nobj = NULL; |
104 | struct drm_mm_node *mem; | 103 | struct drm_mm_node *mem; |
105 | uint32_t offset; | 104 | uint32_t offset; |
@@ -113,31 +112,15 @@ nouveau_notifier_alloc(struct nouveau_channel *chan, uint32_t handle, | |||
113 | return -ENOMEM; | 112 | return -ENOMEM; |
114 | } | 113 | } |
115 | 114 | ||
116 | offset = chan->notifier_bo->bo.mem.start << PAGE_SHIFT; | 115 | if (chan->notifier_bo->bo.mem.mem_type == TTM_PL_VRAM) |
117 | if (chan->notifier_bo->bo.mem.mem_type == TTM_PL_VRAM) { | 116 | target = NV_MEM_TARGET_VRAM; |
118 | target = NV_DMA_TARGET_VIDMEM; | 117 | else |
119 | } else | 118 | target = NV_MEM_TARGET_GART; |
120 | if (chan->notifier_bo->bo.mem.mem_type == TTM_PL_TT) { | 119 | offset = chan->notifier_bo->bo.mem.start << PAGE_SHIFT; |
121 | if (dev_priv->gart_info.type == NOUVEAU_GART_SGDMA && | ||
122 | dev_priv->card_type < NV_50) { | ||
123 | ret = nouveau_sgdma_get_page(dev, offset, &offset); | ||
124 | if (ret) | ||
125 | return ret; | ||
126 | target = NV_DMA_TARGET_PCI; | ||
127 | } else { | ||
128 | target = NV_DMA_TARGET_AGP; | ||
129 | if (dev_priv->card_type >= NV_50) | ||
130 | offset += dev_priv->vm_gart_base; | ||
131 | } | ||
132 | } else { | ||
133 | NV_ERROR(dev, "Bad DMA target, mem_type %d!\n", | ||
134 | chan->notifier_bo->bo.mem.mem_type); | ||
135 | return -EINVAL; | ||
136 | } | ||
137 | offset += mem->start; | 120 | offset += mem->start; |
138 | 121 | ||
139 | ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, offset, | 122 | ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, offset, |
140 | mem->size, NV_DMA_ACCESS_RW, target, | 123 | mem->size, NV_MEM_ACCESS_RW, target, |
141 | &nobj); | 124 | &nobj); |
142 | if (ret) { | 125 | if (ret) { |
143 | drm_mm_put_block(mem); | 126 | drm_mm_put_block(mem); |