summaryrefslogtreecommitdiff
path: root/linux-core
diff options
context:
space:
mode:
authorIan Romanick <idr@us.ibm.com>2007-07-21 20:39:22 -0700
committerIan Romanick <idr@us.ibm.com>2007-07-21 20:39:22 -0700
commit3265a61f895a1d35072984e9cdc71aad898647fa (patch)
tree06c2ebc634d0d5b476285cefd111753c1d8d5490 /linux-core
parent5d6fdd9d7924fde8ce62631e6bdce8d5fe33fc3d (diff)
Make s_cmdring a field in the xgi_info structure instead of a global.
Diffstat (limited to 'linux-core')
-rw-r--r--linux-core/xgi_cmdlist.c54
-rw-r--r--linux-core/xgi_cmdlist.h1
-rw-r--r--linux-core/xgi_drv.h3
3 files changed, 30 insertions, 28 deletions
diff --git a/linux-core/xgi_cmdlist.c b/linux-core/xgi_cmdlist.c
index 5c31fa27..a040fa15 100644
--- a/linux-core/xgi_cmdlist.c
+++ b/linux-core/xgi_cmdlist.c
@@ -31,12 +31,10 @@
#include "xgi_misc.h"
#include "xgi_cmdlist.h"
-struct xgi_cmdring_info s_cmdring;
-
static void addFlush2D(struct xgi_info * info);
static unsigned int get_batch_command(enum xgi_batch_type type);
static void triggerHWCommandList(struct xgi_info * info);
-static void xgi_cmdlist_reset(void);
+static void xgi_cmdlist_reset(struct xgi_info * info);
int xgi_cmdlist_initialize(struct xgi_info * info, size_t size)
{
@@ -51,11 +49,11 @@ int xgi_cmdlist_initialize(struct xgi_info * info, size_t size)
return err;
}
- s_cmdring._cmdRingSize = mem_alloc.size;
- s_cmdring._cmdRingBuffer = mem_alloc.hw_addr;
- s_cmdring._cmdRingAllocOffset = mem_alloc.offset;
- s_cmdring._lastBatchStartAddr = 0;
- s_cmdring._cmdRingOffset = 0;
+ info->cmdring._cmdRingSize = mem_alloc.size;
+ info->cmdring._cmdRingBuffer = mem_alloc.hw_addr;
+ info->cmdring._cmdRingAllocOffset = mem_alloc.offset;
+ info->cmdring._lastBatchStartAddr = 0;
+ info->cmdring._cmdRingOffset = 0;
return 0;
}
@@ -92,7 +90,7 @@ static void xgi_submit_cmdlist(struct xgi_info * info,
begin[2] = pCmdInfo->hw_addr >> 4;
begin[3] = 0;
- if (s_cmdring._lastBatchStartAddr == 0) {
+ if (info->cmdring._lastBatchStartAddr == 0) {
const unsigned int portOffset = BASE_3D_ENG + (cmd << 2);
@@ -124,7 +122,7 @@ static void xgi_submit_cmdlist(struct xgi_info * info,
} else {
u32 *lastBatchVirtAddr;
- DRM_INFO("s_cmdring._lastBatchStartAddr != 0\n");
+ DRM_INFO("info->cmdring._lastBatchStartAddr != 0\n");
if (pCmdInfo->type == BTYPE_3D) {
addFlush2D(info);
@@ -132,7 +130,7 @@ static void xgi_submit_cmdlist(struct xgi_info * info,
lastBatchVirtAddr =
xgi_find_pcie_virt(info,
- s_cmdring._lastBatchStartAddr);
+ info->cmdring._lastBatchStartAddr);
lastBatchVirtAddr[1] = begin[1];
lastBatchVirtAddr[2] = begin[2];
@@ -143,7 +141,7 @@ static void xgi_submit_cmdlist(struct xgi_info * info,
triggerHWCommandList(info);
}
- s_cmdring._lastBatchStartAddr = pCmdInfo->hw_addr;
+ info->cmdring._lastBatchStartAddr = pCmdInfo->hw_addr;
DRM_INFO("%s: exit\n", __func__);
}
@@ -188,7 +186,7 @@ int xgi_state_change(struct xgi_info * info, unsigned int to,
// stop to received batch
} else if ((from == STATE_CONSOLE) && (to == STATE_GRAPHIC)) {
DRM_INFO("[kd] I see, now is to enterVT\n");
- xgi_cmdlist_reset();
+ xgi_cmdlist_reset(info);
} else if ((from == STATE_GRAPHIC)
&& ((to == STATE_LOGOUT)
|| (to == STATE_REBOOT)
@@ -217,19 +215,19 @@ int xgi_state_change_ioctl(DRM_IOCTL_ARGS)
}
-void xgi_cmdlist_reset(void)
+void xgi_cmdlist_reset(struct xgi_info * info)
{
- s_cmdring._lastBatchStartAddr = 0;
- s_cmdring._cmdRingOffset = 0;
+ info->cmdring._lastBatchStartAddr = 0;
+ info->cmdring._cmdRingOffset = 0;
}
void xgi_cmdlist_cleanup(struct xgi_info * info)
{
- if (s_cmdring._cmdRingBuffer != 0) {
- xgi_pcie_free(info, s_cmdring._cmdRingAllocOffset, NULL);
- s_cmdring._cmdRingBuffer = 0;
- s_cmdring._cmdRingOffset = 0;
- s_cmdring._cmdRingSize = 0;
+ if (info->cmdring._cmdRingBuffer != 0) {
+ xgi_pcie_free(info, info->cmdring._cmdRingAllocOffset, NULL);
+ info->cmdring._cmdRingBuffer = 0;
+ info->cmdring._cmdRingOffset = 0;
+ info->cmdring._cmdRingSize = 0;
}
}
@@ -250,11 +248,11 @@ static void addFlush2D(struct xgi_info * info)
u32 *lastBatchVirtAddr;
/* check buf is large enough to contain a new flush batch */
- if ((s_cmdring._cmdRingOffset + 0x20) >= s_cmdring._cmdRingSize) {
- s_cmdring._cmdRingOffset = 0;
+ if ((info->cmdring._cmdRingOffset + 0x20) >= info->cmdring._cmdRingSize) {
+ info->cmdring._cmdRingOffset = 0;
}
- flushBatchHWAddr = s_cmdring._cmdRingBuffer + s_cmdring._cmdRingOffset;
+ flushBatchHWAddr = info->cmdring._cmdRingBuffer + info->cmdring._cmdRingOffset;
flushBatchVirtAddr = xgi_find_pcie_virt(info, flushBatchHWAddr);
/* not using memcpy for I assume the address is discrete */
@@ -267,9 +265,9 @@ static void addFlush2D(struct xgi_info * info)
*(flushBatchVirtAddr + 6) = FLUSH_2D;
*(flushBatchVirtAddr + 7) = FLUSH_2D;
- // ASSERT(s_cmdring._lastBatchStartAddr != NULL);
+ // ASSERT(info->cmdring._lastBatchStartAddr != NULL);
lastBatchVirtAddr =
- xgi_find_pcie_virt(info, s_cmdring._lastBatchStartAddr);
+ xgi_find_pcie_virt(info, info->cmdring._lastBatchStartAddr);
lastBatchVirtAddr[1] = BEGIN_LINK_ENABLE_MASK + 0x08;
lastBatchVirtAddr[2] = flushBatchHWAddr >> 4;
@@ -280,6 +278,6 @@ static void addFlush2D(struct xgi_info * info)
triggerHWCommandList(info);
- s_cmdring._cmdRingOffset += 0x20;
- s_cmdring._lastBatchStartAddr = flushBatchHWAddr;
+ info->cmdring._cmdRingOffset += 0x20;
+ info->cmdring._lastBatchStartAddr = flushBatchHWAddr;
}
diff --git a/linux-core/xgi_cmdlist.h b/linux-core/xgi_cmdlist.h
index 08029386..7f2c54ac 100644
--- a/linux-core/xgi_cmdlist.h
+++ b/linux-core/xgi_cmdlist.h
@@ -66,6 +66,7 @@ struct xgi_cmdring_info {
u32 _cmdRingOffset;
};
+struct xgi_info;
extern int xgi_cmdlist_initialize(struct xgi_info * info, size_t size);
extern int xgi_state_change(struct xgi_info * info, unsigned int to,
diff --git a/linux-core/xgi_drv.h b/linux-core/xgi_drv.h
index 20965876..0aab04d8 100644
--- a/linux-core/xgi_drv.h
+++ b/linux-core/xgi_drv.h
@@ -42,6 +42,7 @@
#define DRIVER_MINOR 8
#define DRIVER_PATCHLEVEL 0
+#include "xgi_cmdlist.h"
#include "xgi_drm.h"
struct xgi_aperture {
@@ -90,6 +91,8 @@ struct xgi_info {
struct semaphore fb_sem;
struct semaphore pcie_sem;
+
+ struct xgi_cmdring_info cmdring;
};
enum PcieOwner {