summaryrefslogtreecommitdiff
path: root/linux-core/xgi_cmdlist.c
diff options
context:
space:
mode:
authorIan Romanick <idr@us.ibm.com>2007-08-09 15:23:13 -0700
committerIan Romanick <idr@us.ibm.com>2007-08-09 15:23:13 -0700
commit25cb876f8513d02d4d189371eaa8b7b9a88e860d (patch)
tree6de640d6a211af99fd990f6a7455bd49d0bb7659 /linux-core/xgi_cmdlist.c
parentf7ba02b7458823627097a2320bf9befa84fc9c76 (diff)
Associate master file pointer with command list buffer.
Pass the master's file pointer, as supplied to xgi_bootstrap, to xgi_cmdlist_initialize. Associate that pointer with the memory allocated for the command list buffer. By doing this the memory will be automatically cleaned up when the master closes the device. This allows the removal of some clean up code.
Diffstat (limited to 'linux-core/xgi_cmdlist.c')
-rw-r--r--linux-core/xgi_cmdlist.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/linux-core/xgi_cmdlist.c b/linux-core/xgi_cmdlist.c
index e1653021..a1ec5720 100644
--- a/linux-core/xgi_cmdlist.c
+++ b/linux-core/xgi_cmdlist.c
@@ -34,7 +34,8 @@ static unsigned int get_batch_command(enum xgi_batch_type type);
static void triggerHWCommandList(struct xgi_info * info);
static void xgi_cmdlist_reset(struct xgi_info * info);
-int xgi_cmdlist_initialize(struct xgi_info * info, size_t size)
+int xgi_cmdlist_initialize(struct xgi_info * info, size_t size,
+ struct drm_file * filp)
{
struct xgi_mem_alloc mem_alloc = {
.location = XGI_MEMLOC_NON_LOCAL,
@@ -42,7 +43,7 @@ int xgi_cmdlist_initialize(struct xgi_info * info, size_t size)
};
int err;
- err = xgi_alloc(info, &mem_alloc, 0);
+ err = xgi_alloc(info, &mem_alloc, filp);
if (err) {
return err;
}
@@ -50,7 +51,6 @@ int xgi_cmdlist_initialize(struct xgi_info * info, size_t size)
info->cmdring.ptr = xgi_find_pcie_virt(info, mem_alloc.hw_addr);
info->cmdring.size = mem_alloc.size;
info->cmdring.ring_hw_base = mem_alloc.hw_addr;
- info->cmdring.ring_gart_base = mem_alloc.offset;
info->cmdring.last_ptr = NULL;
info->cmdring.ring_offset = 0;
@@ -202,12 +202,7 @@ void xgi_cmdlist_cleanup(struct xgi_info * info)
xgi_waitfor_pci_idle(info);
}
- xgi_free(info, (XGI_MEMLOC_NON_LOCAL
- | info->cmdring.ring_gart_base),
- NULL);
- info->cmdring.ring_hw_base = 0;
- info->cmdring.ring_offset = 0;
- info->cmdring.size = 0;
+ (void) memset(&info->cmdring, 0, sizeof(info->cmdring));
}
}