Merge branch 'mesa_7_5_branch'
[mesa.git] / src / gallium / drivers / r300 / r300_chipset.c
index 926a9dda50224341a65b1b704ae26ad2cb3dd094..00fae8d26f3df80d1efede5f938a2baf314be5a8 100644 (file)
  * USE OR OTHER DEALINGS IN THE SOFTWARE. */
 
 #include "r300_chipset.h"
+#include "util/u_debug.h"
 
 /* r300_chipset: A file all to itself for deducing the various properties of
  * Radeons. */
 
 /* Parse a PCI ID and fill an r300_capabilities struct with information. */
-void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
+void r300_parse_chipset(struct r300_capabilities* caps)
 {
-    caps->pci_id = pci_id;
+    /* Reasonable defaults */
+    caps->has_tcl = getenv("RADEON_NO_TCL") ? FALSE : TRUE;
+    caps->is_r500 = FALSE;
+    caps->num_vert_fpus = 4;
 
     /* Note: These are not ordered by PCI ID. I leave that task to GCC,
      * which will perform the ordering while collating jump tables. Instead,
      * I've tried to group them according to capabilities and age. */
-    switch (pci_id) {
+    switch (caps->pci_id) {
         case 0x4144:
             caps->family = CHIP_FAMILY_R300;
-            caps->num_pipes = 1;
-            caps->has_tcl = TRUE;
-            caps->has_us = FALSE;
             break;
 
         case 0x4145:
@@ -49,9 +50,6 @@ void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
         case 0x4E46:
         case 0x4E47:
             caps->family = CHIP_FAMILY_R300;
-            caps->num_pipes = 2;
-            caps->has_tcl = TRUE;
-            caps->has_us = FALSE;
             break;
 
         case 0x4150:
@@ -68,9 +66,6 @@ void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
         case 0x4E54:
         case 0x4E56:
             caps->family = CHIP_FAMILY_RV350;
-            caps->num_pipes = 1;
-            caps->has_tcl = TRUE;
-            caps->has_us = FALSE;
             break;
 
         case 0x4148:
@@ -81,16 +76,10 @@ void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
         case 0x4E49:
         case 0x4E4B:
             caps->family = CHIP_FAMILY_R350;
-            caps->num_pipes = 2;
-            caps->has_tcl = TRUE;
-            caps->has_us = FALSE;
             break;
 
         case 0x4E4A:
             caps->family = CHIP_FAMILY_R360;
-            caps->num_pipes = 2;
-            caps->has_tcl = TRUE;
-            caps->has_us = FALSE;
             break;
 
         case 0x5460:
@@ -102,9 +91,6 @@ void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
         case 0x5B64:
         case 0x5B65:
             caps->family = CHIP_FAMILY_RV370;
-            caps->num_pipes = 1;
-            caps->has_tcl = TRUE;
-            caps->has_us = FALSE;
             break;
 
         case 0x3150:
@@ -113,9 +99,6 @@ void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
         case 0x3E50:
         case 0x3E54:
             caps->family = CHIP_FAMILY_RV380;
-            caps->num_pipes = 1;
-            caps->has_tcl = TRUE;
-            caps->has_us = FALSE;
             break;
 
         case 0x4A48:
@@ -129,9 +112,7 @@ void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
         case 0x4A50:
         case 0x4A54:
             caps->family = CHIP_FAMILY_R420;
-            caps->num_pipes = 4;
-            caps->has_tcl = TRUE;
-            caps->has_us = FALSE;
+            caps->num_vert_fpus = 6;
             break;
 
         case 0x5548:
@@ -144,9 +125,7 @@ void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
         case 0x5554:
         case 0x5D57:
             caps->family = CHIP_FAMILY_R423;
-            caps->num_pipes = 4;
-            caps->has_tcl = TRUE;
-            caps->has_us = FALSE;
+            caps->num_vert_fpus = 6;
             break;
 
         case 0x554C:
@@ -157,9 +136,7 @@ void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
         case 0x5D49:
         case 0x5D4A:
             caps->family = CHIP_FAMILY_R430;
-            caps->num_pipes = 4;
-            caps->has_tcl = TRUE;
-            caps->has_us = FALSE;
+            caps->num_vert_fpus = 6;
             break;
 
         case 0x5D4C:
@@ -169,19 +146,16 @@ void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
         case 0x5D50:
         case 0x5D52:
             caps->family = CHIP_FAMILY_R480;
-            caps->num_pipes = 4;
-            caps->has_tcl = TRUE;
-            caps->has_us = FALSE;
+            caps->num_vert_fpus = 6;
             break;
 
+        case 0x4B48:
         case 0x4B49:
         case 0x4B4A:
         case 0x4B4B:
         case 0x4B4C:
             caps->family = CHIP_FAMILY_R481;
-            caps->num_pipes = 4;
-            caps->has_tcl = TRUE;
-            caps->has_us = FALSE;
+            caps->num_vert_fpus = 6;
             break;
 
         case 0x5E4C:
@@ -197,49 +171,44 @@ void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
         case 0x5E4B:
         case 0x5E4D:
             caps->family = CHIP_FAMILY_RV410;
-            caps->num_pipes = 1;
-            caps->has_tcl = TRUE;
-            caps->has_us = FALSE;
+            caps->num_vert_fpus = 6;
             break;
 
         case 0x5954:
         case 0x5955:
             caps->family = CHIP_FAMILY_RS480;
-            caps->num_pipes = 1; /* CHECK ME */
             caps->has_tcl = FALSE;
-            caps->has_us = FALSE;
             break;
 
         case 0x5974:
         case 0x5975:
             caps->family = CHIP_FAMILY_RS482;
-            caps->num_pipes = 1; /* CHECK ME */
             caps->has_tcl = FALSE;
-            caps->has_us = FALSE;
             break;
 
         case 0x5A41:
         case 0x5A42:
             caps->family = CHIP_FAMILY_RS400;
-            caps->num_pipes = 1; /* CHECK ME */
             caps->has_tcl = FALSE;
-            caps->has_us = FALSE;
             break;
 
         case 0x5A61:
         case 0x5A62:
             caps->family = CHIP_FAMILY_RC410;
-            caps->num_pipes = 1; /* CHECK ME */
             caps->has_tcl = FALSE;
-            caps->has_us = FALSE;
             break;
 
         case 0x791E:
         case 0x791F:
             caps->family = CHIP_FAMILY_RS690;
-            caps->num_pipes = 1; /* CHECK ME */
             caps->has_tcl = FALSE;
-            caps->has_us = FALSE; /* CHECK ME */
+            break;
+
+        case 0x793F:
+        case 0x7941:
+        case 0x7942:
+            caps->family = CHIP_FAMILY_RS600;
+            caps->has_tcl = FALSE;
             break;
 
         case 0x796C:
@@ -247,9 +216,7 @@ void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
         case 0x796E:
         case 0x796F:
             caps->family = CHIP_FAMILY_RS740;
-            caps->num_pipes = 1; /* CHECK ME */
             caps->has_tcl = FALSE;
-            caps->has_us = FALSE; /* CHECK ME */
             break;
 
         case 0x7100:
@@ -267,9 +234,8 @@ void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
         case 0x710E:
         case 0x710F:
             caps->family = CHIP_FAMILY_R520;
-            caps->num_pipes = 4;
-            caps->has_tcl = TRUE;
-            caps->has_us = TRUE;
+            caps->num_vert_fpus = 8;
+            caps->is_r500 = TRUE;
             break;
 
         case 0x7140:
@@ -311,9 +277,8 @@ void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
         case 0x7210:
         case 0x7211:
             caps->family = CHIP_FAMILY_RV515;
-            caps->num_pipes = 1;
-            caps->has_tcl = TRUE;
-            caps->has_us = TRUE;
+            caps->num_vert_fpus = 2;
+            caps->is_r500 = TRUE;
             break;
 
         case 0x71C0:
@@ -333,9 +298,8 @@ void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
         case 0x71DA:
         case 0x71DE:
             caps->family = CHIP_FAMILY_RV530;
-            caps->num_pipes = 1;
-            caps->has_tcl = TRUE;
-            caps->has_us = TRUE;
+            caps->num_vert_fpus = 5;
+            caps->is_r500 = TRUE;
             break;
 
         case 0x7240:
@@ -354,16 +318,14 @@ void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
         case 0x724F:
         case 0x7284:
             caps->family = CHIP_FAMILY_R580;
-            caps->num_pipes = 4;
-            caps->has_tcl = TRUE;
-            caps->has_us = TRUE;
+            caps->num_vert_fpus = 8;
+            caps->is_r500 = TRUE;
             break;
 
         case 0x7280:
             caps->family = CHIP_FAMILY_RV570;
-            caps->num_pipes = 4;
-            caps->has_tcl = TRUE;
-            caps->has_us = TRUE;
+            caps->num_vert_fpus = 5;
+            caps->is_r500 = TRUE;
             break;
 
         case 0x7281:
@@ -378,14 +340,13 @@ void r300_parse_chipset(uint32_t pci_id, struct r300_capabilities* caps)
         case 0x7293:
         case 0x7297:
             caps->family = CHIP_FAMILY_RV560;
-            caps->num_pipes = 4;
-            caps->has_tcl = TRUE;
-            caps->has_us = TRUE;
+            caps->num_vert_fpus = 5;
+            caps->is_r500 = TRUE;
             break;
 
         default:
-            /* XXX not an r300?! */
-            assert(0);
+            debug_printf("r300: Warning: Unknown chipset 0x%x\n",
+                caps->pci_id);
             break;
     }
 }