diff options
author | Paul Mundt <lethal@linux-sh.org> | 2011-01-12 00:37:42 -0500 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2011-01-12 00:37:42 -0500 |
commit | 83eb95b852902f952ba594447a796ad8146b9462 (patch) | |
tree | 33c199aeeae58b69ad8d6d2a33c2d96ba2b98ddf /drivers/gpu/drm/nouveau/nv04_instmem.c | |
parent | efb3e34b6176d30c4fe8635fa8e1beb6280cc2cd (diff) | |
parent | 9bbe7b984096ac45586da2adf26c14069ecb79b2 (diff) |
Merge branch 'sh/sdio' into sh-latest
Diffstat (limited to 'drivers/gpu/drm/nouveau/nv04_instmem.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nv04_instmem.c | 50 |
1 files changed, 37 insertions, 13 deletions
diff --git a/drivers/gpu/drm/nouveau/nv04_instmem.c b/drivers/gpu/drm/nouveau/nv04_instmem.c index 0b5ae297abde..b8e3edb5c063 100644 --- a/drivers/gpu/drm/nouveau/nv04_instmem.c +++ b/drivers/gpu/drm/nouveau/nv04_instmem.c | |||
@@ -98,42 +98,66 @@ nv04_instmem_takedown(struct drm_device *dev) | |||
98 | } | 98 | } |
99 | 99 | ||
100 | int | 100 | int |
101 | nv04_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj, | 101 | nv04_instmem_suspend(struct drm_device *dev) |
102 | uint32_t *sz) | ||
103 | { | 102 | { |
104 | return 0; | 103 | return 0; |
105 | } | 104 | } |
106 | 105 | ||
107 | void | 106 | void |
108 | nv04_instmem_clear(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) | 107 | nv04_instmem_resume(struct drm_device *dev) |
109 | { | ||
110 | } | ||
111 | |||
112 | int | ||
113 | nv04_instmem_bind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) | ||
114 | { | 108 | { |
115 | return 0; | ||
116 | } | 109 | } |
117 | 110 | ||
118 | int | 111 | int |
119 | nv04_instmem_unbind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) | 112 | nv04_instmem_get(struct nouveau_gpuobj *gpuobj, u32 size, u32 align) |
120 | { | 113 | { |
114 | struct drm_nouveau_private *dev_priv = gpuobj->dev->dev_private; | ||
115 | struct drm_mm_node *ramin = NULL; | ||
116 | |||
117 | do { | ||
118 | if (drm_mm_pre_get(&dev_priv->ramin_heap)) | ||
119 | return -ENOMEM; | ||
120 | |||
121 | spin_lock(&dev_priv->ramin_lock); | ||
122 | ramin = drm_mm_search_free(&dev_priv->ramin_heap, size, align, 0); | ||
123 | if (ramin == NULL) { | ||
124 | spin_unlock(&dev_priv->ramin_lock); | ||
125 | return -ENOMEM; | ||
126 | } | ||
127 | |||
128 | ramin = drm_mm_get_block_atomic(ramin, size, align); | ||
129 | spin_unlock(&dev_priv->ramin_lock); | ||
130 | } while (ramin == NULL); | ||
131 | |||
132 | gpuobj->node = ramin; | ||
133 | gpuobj->vinst = ramin->start; | ||
121 | return 0; | 134 | return 0; |
122 | } | 135 | } |
123 | 136 | ||
124 | void | 137 | void |
125 | nv04_instmem_flush(struct drm_device *dev) | 138 | nv04_instmem_put(struct nouveau_gpuobj *gpuobj) |
126 | { | 139 | { |
140 | struct drm_nouveau_private *dev_priv = gpuobj->dev->dev_private; | ||
141 | |||
142 | spin_lock(&dev_priv->ramin_lock); | ||
143 | drm_mm_put_block(gpuobj->node); | ||
144 | gpuobj->node = NULL; | ||
145 | spin_unlock(&dev_priv->ramin_lock); | ||
127 | } | 146 | } |
128 | 147 | ||
129 | int | 148 | int |
130 | nv04_instmem_suspend(struct drm_device *dev) | 149 | nv04_instmem_map(struct nouveau_gpuobj *gpuobj) |
131 | { | 150 | { |
151 | gpuobj->pinst = gpuobj->vinst; | ||
132 | return 0; | 152 | return 0; |
133 | } | 153 | } |
134 | 154 | ||
135 | void | 155 | void |
136 | nv04_instmem_resume(struct drm_device *dev) | 156 | nv04_instmem_unmap(struct nouveau_gpuobj *gpuobj) |
137 | { | 157 | { |
138 | } | 158 | } |
139 | 159 | ||
160 | void | ||
161 | nv04_instmem_flush(struct drm_device *dev) | ||
162 | { | ||
163 | } | ||