summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrnoland <rnoland@FreeBSD.org>2009-03-25 01:41:56 +0000
committerrnoland <rnoland@FreeBSD.org>2009-03-25 01:41:56 +0000
commit164b031cdab9c3c6fde3eaf86f2c8497d090d300 (patch)
treeabfd0bec96a170c5e3d7eb89b1ccf5ec1218b4af
parentb4fc9c3e14f2dc044bbaf541db4994fff1522db5 (diff)
downloadFreeBSD-src-164b031cdab9c3c6fde3eaf86f2c8497d090d300.zip
FreeBSD-src-164b031cdab9c3c6fde3eaf86f2c8497d090d300.tar.gz
The GART allocations are a propery of the gart, not of scatter-gather
memory. Track them in the appropriate structure. MFC after: 3 days
-rw-r--r--sys/dev/drm/ati_pcigart.c12
-rw-r--r--sys/dev/drm/drmP.h3
-rw-r--r--sys/dev/drm/drm_scatter.c4
3 files changed, 9 insertions, 10 deletions
diff --git a/sys/dev/drm/ati_pcigart.c b/sys/dev/drm/ati_pcigart.c
index 7e5d207..e3fecd1 100644
--- a/sys/dev/drm/ati_pcigart.c
+++ b/sys/dev/drm/ati_pcigart.c
@@ -104,7 +104,7 @@ drm_ati_alloc_pcigart_table(struct drm_device *dev,
return ENOMEM;
}
- dev->sg->dmah = dmah;
+ gart_info->dmah = dmah;
return 0;
}
@@ -113,12 +113,12 @@ static void
drm_ati_free_pcigart_table(struct drm_device *dev,
struct drm_ati_pcigart_info *gart_info)
{
- struct drm_dma_handle *dmah = dev->sg->dmah;
+ struct drm_dma_handle *dmah = gart_info->dmah;
bus_dmamem_free(dmah->tag, dmah->vaddr, dmah->map);
bus_dma_tag_destroy(dmah->tag);
free(dmah, DRM_MEM_DMA);
- dev->sg->dmah = NULL;
+ gart_info->dmah = NULL;
}
int
@@ -134,7 +134,7 @@ drm_ati_pcigart_cleanup(struct drm_device *dev,
if (gart_info->bus_addr) {
if (gart_info->gart_table_location == DRM_ATI_GART_MAIN) {
gart_info->bus_addr = 0;
- if (dev->sg->dmah)
+ if (gart_info->dmah)
drm_ati_free_pcigart_table(dev, gart_info);
}
}
@@ -169,8 +169,8 @@ drm_ati_pcigart_init(struct drm_device *dev,
goto done;
}
- address = (void *)dev->sg->dmah->vaddr;
- bus_address = dev->sg->dmah->busaddr;
+ address = (void *)gart_info->dmah->vaddr;
+ bus_address = gart_info->dmah->busaddr;
} else {
address = gart_info->addr;
bus_address = gart_info->bus_addr;
diff --git a/sys/dev/drm/drmP.h b/sys/dev/drm/drmP.h
index 0452e23..602d906 100644
--- a/sys/dev/drm/drmP.h
+++ b/sys/dev/drm/drmP.h
@@ -480,9 +480,7 @@ typedef struct drm_sg_mem {
void *virtual;
int pages;
dma_addr_t *busaddr;
- struct drm_dma_handle *sg_dmah; /* Handle for sg_pages */
struct drm_dma_handle *dmah; /* Handle to PCI memory */
- /* for ATI PCIGART table */
} drm_sg_mem_t;
typedef TAILQ_HEAD(drm_map_list, drm_local_map) drm_map_list_t;
@@ -543,6 +541,7 @@ struct drm_ati_pcigart_info {
struct drm_dma_handle *table_handle;
drm_local_map_t mapping;
int table_size;
+ struct drm_dma_handle *dmah; /* handle for ATI PCIGART table */
};
#ifndef DMA_BIT_MASK
diff --git a/sys/dev/drm/drm_scatter.c b/sys/dev/drm/drm_scatter.c
index 6db7fcb..5f8b29b 100644
--- a/sys/dev/drm/drm_scatter.c
+++ b/sys/dev/drm/drm_scatter.c
@@ -112,7 +112,7 @@ drm_sg_alloc(struct drm_device *dev, struct drm_scatter_gather *request)
return ENOMEM;
}
- entry->sg_dmah = dmah;
+ entry->dmah = dmah;
entry->handle = (unsigned long)dmah->vaddr;
DRM_DEBUG("sg alloc handle = %08lx\n", entry->handle);
@@ -160,7 +160,7 @@ drm_sg_alloc_ioctl(struct drm_device *dev, void *data,
void
drm_sg_cleanup(struct drm_sg_mem *entry)
{
- struct drm_dma_handle *dmah = entry->sg_dmah;
+ struct drm_dma_handle *dmah = entry->dmah;
bus_dmamap_unload(dmah->tag, dmah->map);
bus_dmamem_free(dmah->tag, dmah->vaddr, dmah->map);
OpenPOWER on IntegriCloud