summaryrefslogtreecommitdiff
path: root/src/mesa/pipe
diff options
context:
space:
mode:
authorBen Skeggs <skeggsb@gmail.com>2008-01-30 00:05:50 +1100
committerBen Skeggs <skeggsb@gmail.com>2008-01-30 00:05:59 +1100
commitae7dcae81bc54bc16f16127f2fa1d01d9aa2332c (patch)
treecfeab4bc9aaab3d5db79b698437bb85c128ff4a3 /src/mesa/pipe
parentd342a6eeccb829dfbdb95f259bc9a272a16a8b4b (diff)
nouveau: support nv67
Diffstat (limited to 'src/mesa/pipe')
-rw-r--r--src/mesa/pipe/nv40/nv40_context.c34
1 files changed, 21 insertions, 13 deletions
diff --git a/src/mesa/pipe/nv40/nv40_context.c b/src/mesa/pipe/nv40/nv40_context.c
index f6fdd6b437..d0d9583e32 100644
--- a/src/mesa/pipe/nv40/nv40_context.c
+++ b/src/mesa/pipe/nv40/nv40_context.c
@@ -188,26 +188,34 @@ nv40_init_hwctx(struct nv40_context *nv40, int curie_class)
return TRUE;
}
-#define GRCLASS4097_CHIPSETS 0x00000baf
-#define GRCLASS4497_CHIPSETS 0x00005450
+#define NV4X_GRCLASS4097_CHIPSETS 0x00000baf
+#define NV4X_GRCLASS4497_CHIPSETS 0x00005450
+#define NV6X_GRCLASS4497_CHIPSETS 0x00000080
+
struct pipe_context *
nv40_create(struct pipe_winsys *pipe_winsys, struct nouveau_winsys *nvws,
unsigned chipset)
{
struct nv40_context *nv40;
- int curie_class, ret;
-
- if ((chipset & 0xf0) != 0x40) {
- NOUVEAU_ERR("Not a NV4X chipset\n");
- return NULL;
+ int curie_class = 0, ret;
+
+ switch (chipset & 0xf0) {
+ case 0x40:
+ if (NV4X_GRCLASS4097_CHIPSETS & (1 << (chipset & 0x0f)))
+ curie_class = NV40TCL;
+ else
+ if (NV4X_GRCLASS4497_CHIPSETS & (1 << (chipset & 0x0f)))
+ curie_class = NV44TCL;
+ break;
+ case 0x60:
+ if (NV6X_GRCLASS4497_CHIPSETS & (1 << (chipset & 0x0f)))
+ curie_class = NV44TCL;
+ break;
+ default:
+ break;
}
- if (GRCLASS4097_CHIPSETS & (1 << (chipset & 0x0f))) {
- curie_class = NV40TCL;
- } else
- if (GRCLASS4497_CHIPSETS & (1 << (chipset & 0x0f))) {
- curie_class = NV44TCL;
- } else {
+ if (!curie_class) {
NOUVEAU_ERR("Unknown NV4x chipset: NV%02x\n", chipset);
return NULL;
}