diff options
-rw-r--r-- | drivers/char/drm/i810_dma.c | 34 | ||||
-rw-r--r-- | drivers/char/drm/i810_drv.h | 2 | ||||
-rw-r--r-- | drivers/char/drm/i830_dma.c | 32 | ||||
-rw-r--r-- | drivers/char/drm/i830_drv.h | 2 |
4 files changed, 48 insertions, 22 deletions
diff --git a/drivers/char/drm/i810_dma.c b/drivers/char/drm/i810_dma.c index fa2de70f7401..60cb4e45a75e 100644 --- a/drivers/char/drm/i810_dma.c +++ b/drivers/char/drm/i810_dma.c | |||
@@ -219,8 +219,7 @@ static int i810_dma_cleanup(drm_device_t * dev) | |||
219 | (drm_i810_private_t *) dev->dev_private; | 219 | (drm_i810_private_t *) dev->dev_private; |
220 | 220 | ||
221 | if (dev_priv->ring.virtual_start) { | 221 | if (dev_priv->ring.virtual_start) { |
222 | drm_ioremapfree((void *)dev_priv->ring.virtual_start, | 222 | drm_core_ioremapfree(&dev_priv->ring.map, dev); |
223 | dev_priv->ring.Size, dev); | ||
224 | } | 223 | } |
225 | if (dev_priv->hw_status_page) { | 224 | if (dev_priv->hw_status_page) { |
226 | pci_free_consistent(dev->pdev, PAGE_SIZE, | 225 | pci_free_consistent(dev->pdev, PAGE_SIZE, |
@@ -236,9 +235,9 @@ static int i810_dma_cleanup(drm_device_t * dev) | |||
236 | for (i = 0; i < dma->buf_count; i++) { | 235 | for (i = 0; i < dma->buf_count; i++) { |
237 | drm_buf_t *buf = dma->buflist[i]; | 236 | drm_buf_t *buf = dma->buflist[i]; |
238 | drm_i810_buf_priv_t *buf_priv = buf->dev_private; | 237 | drm_i810_buf_priv_t *buf_priv = buf->dev_private; |
238 | |||
239 | if (buf_priv->kernel_virtual && buf->total) | 239 | if (buf_priv->kernel_virtual && buf->total) |
240 | drm_ioremapfree(buf_priv->kernel_virtual, | 240 | drm_core_ioremapfree(&buf_priv->map, dev); |
241 | buf->total, dev); | ||
242 | } | 241 | } |
243 | } | 242 | } |
244 | return 0; | 243 | return 0; |
@@ -311,8 +310,15 @@ static int i810_freelist_init(drm_device_t * dev, drm_i810_private_t * dev_priv) | |||
311 | 310 | ||
312 | *buf_priv->in_use = I810_BUF_FREE; | 311 | *buf_priv->in_use = I810_BUF_FREE; |
313 | 312 | ||
314 | buf_priv->kernel_virtual = drm_ioremap(buf->bus_address, | 313 | buf_priv->map.offset = buf->bus_address; |
315 | buf->total, dev); | 314 | buf_priv->map.size = buf->total; |
315 | buf_priv->map.type = _DRM_AGP; | ||
316 | buf_priv->map.flags = 0; | ||
317 | buf_priv->map.mtrr = 0; | ||
318 | |||
319 | drm_core_ioremap(&buf_priv->map, dev); | ||
320 | buf_priv->kernel_virtual = buf_priv->map.handle; | ||
321 | |||
316 | } | 322 | } |
317 | return 0; | 323 | return 0; |
318 | } | 324 | } |
@@ -363,18 +369,24 @@ static int i810_dma_initialize(drm_device_t * dev, | |||
363 | dev_priv->ring.End = init->ring_end; | 369 | dev_priv->ring.End = init->ring_end; |
364 | dev_priv->ring.Size = init->ring_size; | 370 | dev_priv->ring.Size = init->ring_size; |
365 | 371 | ||
366 | dev_priv->ring.virtual_start = drm_ioremap(dev->agp->base + | 372 | dev_priv->ring.map.offset = dev->agp->base + init->ring_start; |
367 | init->ring_start, | 373 | dev_priv->ring.map.size = init->ring_size; |
368 | init->ring_size, dev); | 374 | dev_priv->ring.map.type = _DRM_AGP; |
375 | dev_priv->ring.map.flags = 0; | ||
376 | dev_priv->ring.map.mtrr = 0; | ||
369 | 377 | ||
370 | if (dev_priv->ring.virtual_start == NULL) { | 378 | drm_core_ioremap(&dev_priv->ring.map, dev); |
379 | |||
380 | if (dev_priv->ring.map.handle == NULL) { | ||
371 | dev->dev_private = (void *)dev_priv; | 381 | dev->dev_private = (void *)dev_priv; |
372 | i810_dma_cleanup(dev); | 382 | i810_dma_cleanup(dev); |
373 | DRM_ERROR("can not ioremap virtual address for" | 383 | DRM_ERROR("can not ioremap virtual address for" |
374 | " ring buffer\n"); | 384 | " ring buffer\n"); |
375 | return -ENOMEM; | 385 | return DRM_ERR(ENOMEM); |
376 | } | 386 | } |
377 | 387 | ||
388 | dev_priv->ring.virtual_start = dev_priv->ring.map.handle; | ||
389 | |||
378 | dev_priv->ring.tail_mask = dev_priv->ring.Size - 1; | 390 | dev_priv->ring.tail_mask = dev_priv->ring.Size - 1; |
379 | 391 | ||
380 | dev_priv->w = init->w; | 392 | dev_priv->w = init->w; |
diff --git a/drivers/char/drm/i810_drv.h b/drivers/char/drm/i810_drv.h index e8cf3ff606f0..e6df49f4928a 100644 --- a/drivers/char/drm/i810_drv.h +++ b/drivers/char/drm/i810_drv.h | |||
@@ -61,6 +61,7 @@ typedef struct drm_i810_buf_priv { | |||
61 | int currently_mapped; | 61 | int currently_mapped; |
62 | void *virtual; | 62 | void *virtual; |
63 | void *kernel_virtual; | 63 | void *kernel_virtual; |
64 | drm_local_map_t map; | ||
64 | } drm_i810_buf_priv_t; | 65 | } drm_i810_buf_priv_t; |
65 | 66 | ||
66 | typedef struct _drm_i810_ring_buffer { | 67 | typedef struct _drm_i810_ring_buffer { |
@@ -72,6 +73,7 @@ typedef struct _drm_i810_ring_buffer { | |||
72 | int head; | 73 | int head; |
73 | int tail; | 74 | int tail; |
74 | int space; | 75 | int space; |
76 | drm_local_map_t map; | ||
75 | } drm_i810_ring_buffer_t; | 77 | } drm_i810_ring_buffer_t; |
76 | 78 | ||
77 | typedef struct drm_i810_private { | 79 | typedef struct drm_i810_private { |
diff --git a/drivers/char/drm/i830_dma.c b/drivers/char/drm/i830_dma.c index 4f0e5746ab33..95224455ec0c 100644 --- a/drivers/char/drm/i830_dma.c +++ b/drivers/char/drm/i830_dma.c | |||
@@ -223,8 +223,7 @@ static int i830_dma_cleanup(drm_device_t * dev) | |||
223 | (drm_i830_private_t *) dev->dev_private; | 223 | (drm_i830_private_t *) dev->dev_private; |
224 | 224 | ||
225 | if (dev_priv->ring.virtual_start) { | 225 | if (dev_priv->ring.virtual_start) { |
226 | drm_ioremapfree((void *)dev_priv->ring.virtual_start, | 226 | drm_core_ioremapfree(&dev_priv->ring.map, dev); |
227 | dev_priv->ring.Size, dev); | ||
228 | } | 227 | } |
229 | if (dev_priv->hw_status_page) { | 228 | if (dev_priv->hw_status_page) { |
230 | pci_free_consistent(dev->pdev, PAGE_SIZE, | 229 | pci_free_consistent(dev->pdev, PAGE_SIZE, |
@@ -242,8 +241,7 @@ static int i830_dma_cleanup(drm_device_t * dev) | |||
242 | drm_buf_t *buf = dma->buflist[i]; | 241 | drm_buf_t *buf = dma->buflist[i]; |
243 | drm_i830_buf_priv_t *buf_priv = buf->dev_private; | 242 | drm_i830_buf_priv_t *buf_priv = buf->dev_private; |
244 | if (buf_priv->kernel_virtual && buf->total) | 243 | if (buf_priv->kernel_virtual && buf->total) |
245 | drm_ioremapfree(buf_priv->kernel_virtual, | 244 | drm_core_ioremapfree(&buf_priv->map, dev); |
246 | buf->total, dev); | ||
247 | } | 245 | } |
248 | } | 246 | } |
249 | return 0; | 247 | return 0; |
@@ -320,8 +318,14 @@ static int i830_freelist_init(drm_device_t * dev, drm_i830_private_t * dev_priv) | |||
320 | 318 | ||
321 | *buf_priv->in_use = I830_BUF_FREE; | 319 | *buf_priv->in_use = I830_BUF_FREE; |
322 | 320 | ||
323 | buf_priv->kernel_virtual = drm_ioremap(buf->bus_address, | 321 | buf_priv->map.offset = buf->bus_address; |
324 | buf->total, dev); | 322 | buf_priv->map.size = buf->total; |
323 | buf_priv->map.type = _DRM_AGP; | ||
324 | buf_priv->map.flags = 0; | ||
325 | buf_priv->map.mtrr = 0; | ||
326 | |||
327 | drm_core_ioremap(&buf_priv->map, dev); | ||
328 | buf_priv->kernel_virtual = buf_priv->map.handle; | ||
325 | } | 329 | } |
326 | return 0; | 330 | return 0; |
327 | } | 331 | } |
@@ -373,18 +377,24 @@ static int i830_dma_initialize(drm_device_t * dev, | |||
373 | dev_priv->ring.End = init->ring_end; | 377 | dev_priv->ring.End = init->ring_end; |
374 | dev_priv->ring.Size = init->ring_size; | 378 | dev_priv->ring.Size = init->ring_size; |
375 | 379 | ||
376 | dev_priv->ring.virtual_start = drm_ioremap(dev->agp->base + | 380 | dev_priv->ring.map.offset = dev->agp->base + init->ring_start; |
377 | init->ring_start, | 381 | dev_priv->ring.map.size = init->ring_size; |
378 | init->ring_size, dev); | 382 | dev_priv->ring.map.type = _DRM_AGP; |
383 | dev_priv->ring.map.flags = 0; | ||
384 | dev_priv->ring.map.mtrr = 0; | ||
385 | |||
386 | drm_core_ioremap(&dev_priv->ring.map, dev); | ||
379 | 387 | ||
380 | if (dev_priv->ring.virtual_start == NULL) { | 388 | if (dev_priv->ring.map.handle == NULL) { |
381 | dev->dev_private = (void *)dev_priv; | 389 | dev->dev_private = (void *)dev_priv; |
382 | i830_dma_cleanup(dev); | 390 | i830_dma_cleanup(dev); |
383 | DRM_ERROR("can not ioremap virtual address for" | 391 | DRM_ERROR("can not ioremap virtual address for" |
384 | " ring buffer\n"); | 392 | " ring buffer\n"); |
385 | return -ENOMEM; | 393 | return DRM_ERR(ENOMEM); |
386 | } | 394 | } |
387 | 395 | ||
396 | dev_priv->ring.virtual_start = dev_priv->ring.map.handle; | ||
397 | |||
388 | dev_priv->ring.tail_mask = dev_priv->ring.Size - 1; | 398 | dev_priv->ring.tail_mask = dev_priv->ring.Size - 1; |
389 | 399 | ||
390 | dev_priv->w = init->w; | 400 | dev_priv->w = init->w; |
diff --git a/drivers/char/drm/i830_drv.h b/drivers/char/drm/i830_drv.h index 85bc5be6f916..e91f94afb4bb 100644 --- a/drivers/char/drm/i830_drv.h +++ b/drivers/char/drm/i830_drv.h | |||
@@ -68,6 +68,7 @@ typedef struct drm_i830_buf_priv { | |||
68 | int currently_mapped; | 68 | int currently_mapped; |
69 | void __user *virtual; | 69 | void __user *virtual; |
70 | void *kernel_virtual; | 70 | void *kernel_virtual; |
71 | drm_local_map_t map; | ||
71 | } drm_i830_buf_priv_t; | 72 | } drm_i830_buf_priv_t; |
72 | 73 | ||
73 | typedef struct _drm_i830_ring_buffer { | 74 | typedef struct _drm_i830_ring_buffer { |
@@ -79,6 +80,7 @@ typedef struct _drm_i830_ring_buffer { | |||
79 | int head; | 80 | int head; |
80 | int tail; | 81 | int tail; |
81 | int space; | 82 | int space; |
83 | drm_local_map_t map; | ||
82 | } drm_i830_ring_buffer_t; | 84 | } drm_i830_ring_buffer_t; |
83 | 85 | ||
84 | typedef struct drm_i830_private { | 86 | typedef struct drm_i830_private { |