summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <anholt@freebsd.org>2004-01-09 08:43:48 +0000
committerEric Anholt <anholt@freebsd.org>2004-01-09 08:43:48 +0000
commit92702565657d48f1fcc2bae1b5989b1d6d3dd164 (patch)
tree8cc182fb4648abbe3f31b86814b9853a98087ccf
parent5d51dfc69cb245f6a1c7b106954a3365524741e2 (diff)
Change PCI ID information field to be one of r128, r100, r200, r300. This
is all the information we need so far. Put that information into atic, and use it correctly in the code (unlike before).
-rw-r--r--hw/kdrive/ati/ati.c235
-rw-r--r--hw/kdrive/ati/ati.h6
-rw-r--r--hw/kdrive/ati/ati_draw.c2
-rw-r--r--hw/kdrive/ati/ati_draw.h2
-rw-r--r--hw/kdrive/ati/ati_dri.c6
5 files changed, 132 insertions, 119 deletions
diff --git a/hw/kdrive/ati/ati.c b/hw/kdrive/ati/ati.c
index 1e6fa18b8..97a28f2e4 100644
--- a/hw/kdrive/ati/ati.c
+++ b/hw/kdrive/ati/ati.c
@@ -29,115 +29,120 @@
#include "ati.h"
#include "ati_reg.h"
+#define CAP_R128 0x1 /* If it's a Rage 128 */
+#define CAP_R100 0x2 /* If it's an r100 series radeon. */
+#define CAP_R200 0x3 /* If it's an r200 series radeon. */
+#define CAP_R300 0x4 /* If it's an r300 series radeon. */
+
struct pci_id_entry ati_pci_ids[] = {
- {0x1002, 0x4136, 0x1, "ATI Radeon RS100"},
- {0x1002, 0x4137, 0x3, "ATI Radeon RS200"},
- {0x1002, 0x4237, 0x3, "ATI Radeon RS250"},
- {0x1002, 0x4144, 0x5, "ATI Radeon R300 AD"},
- {0x1002, 0x4145, 0x5, "ATI Radeon R300 AE"},
- {0x1002, 0x4146, 0x5, "ATI Radeon R300 AF"},
- {0x1002, 0x4147, 0x5, "ATI Radeon R300 AG"},
- {0x1002, 0x4148, 0x5, "ATI Radeon R350 AH"},
- {0x1002, 0x4149, 0x5, "ATI Radeon R350 AI"},
- {0x1002, 0x414a, 0x5, "ATI Radeon R350 AJ"},
- {0x1002, 0x414b, 0x5, "ATI Radeon R350 AK"},
- {0x1002, 0x4150, 0x5, "ATI Radeon RV350 AP"},
- {0x1002, 0x4151, 0x5, "ATI Radeon RV350 AQ"},
- {0x1002, 0x4152, 0x5, "ATI Radeon RV350 AR"},
- {0x1002, 0x4153, 0x5, "ATI Radeon RV350 AS"},
- {0x1002, 0x4154, 0x5, "ATI Radeon RV350 AT"},
- {0x1002, 0x4156, 0x5, "ATI Radeon RV350 AV"},
+ {0x1002, 0x4136, 0x2, "ATI Radeon RS100"},
+ {0x1002, 0x4137, 0x2, "ATI Radeon RS200"},
+ {0x1002, 0x4237, 0x2, "ATI Radeon RS250"},
+ {0x1002, 0x4144, 0x4, "ATI Radeon R300 AD"},
+ {0x1002, 0x4145, 0x4, "ATI Radeon R300 AE"},
+ {0x1002, 0x4146, 0x4, "ATI Radeon R300 AF"},
+ {0x1002, 0x4147, 0x4, "ATI Radeon R300 AG"},
+ {0x1002, 0x4148, 0x4, "ATI Radeon R350 AH"},
+ {0x1002, 0x4149, 0x4, "ATI Radeon R350 AI"},
+ {0x1002, 0x414a, 0x4, "ATI Radeon R350 AJ"},
+ {0x1002, 0x414b, 0x4, "ATI Radeon R350 AK"},
+ {0x1002, 0x4150, 0x4, "ATI Radeon RV350 AP"},
+ {0x1002, 0x4151, 0x4, "ATI Radeon RV350 AQ"},
+ {0x1002, 0x4152, 0x4, "ATI Radeon RV350 AR"},
+ {0x1002, 0x4153, 0x4, "ATI Radeon RV350 AS"},
+ {0x1002, 0x4154, 0x4, "ATI Radeon RV350 AT"},
+ {0x1002, 0x4156, 0x4, "ATI Radeon RV350 AV"},
{0x1002, 0x4242, 0x3, "ATI Radeon R200 BB"},
{0x1002, 0x4243, 0x3, "ATI Radeon R200 BC"},
- {0x1002, 0x4336, 0x1, "ATI Radeon RS100"},
- {0x1002, 0x4337, 0x3, "ATI Radeon RS200"},
- {0x1002, 0x4437, 0x3, "ATI Radeon RS250"},
- {0x1002, 0x4964, 0x3, "ATI Radeon RV250 Id"},
- {0x1002, 0x4965, 0x3, "ATI Radeon RV250 Ie"},
- {0x1002, 0x4966, 0x3, "ATI Radeon RV250 If"},
- {0x1002, 0x4967, 0x3, "ATI Radeon RV250 Ig"},
- {0x1002, 0x4c45, 0x0, "ATI Rage 128 LE"},
- {0x1002, 0x4c46, 0x0, "ATI Rage 128 LF"},
- {0x1002, 0x4c57, 0x3, "ATI Radeon RV200 LW"},
- {0x1002, 0x4c58, 0x3, "ATI Radeon RV200 LX"},
- {0x1002, 0x4c59, 0x3, "ATI Radeon Mobility M6 LY"},
- {0x1002, 0x4c5a, 0x3, "ATI Radeon Mobility LZ"},
+ {0x1002, 0x4336, 0x2, "ATI Radeon RS100"},
+ {0x1002, 0x4337, 0x2, "ATI Radeon RS200"},
+ {0x1002, 0x4437, 0x2, "ATI Radeon RS250"},
+ {0x1002, 0x4964, 0x2, "ATI Radeon RV250 Id"},
+ {0x1002, 0x4965, 0x2, "ATI Radeon RV250 Ie"},
+ {0x1002, 0x4966, 0x2, "ATI Radeon RV250 If"},
+ {0x1002, 0x4967, 0x2, "ATI Radeon RV250 Ig"},
+ {0x1002, 0x4c45, 0x1, "ATI Rage 128 LE"},
+ {0x1002, 0x4c46, 0x1, "ATI Rage 128 LF"},
+ {0x1002, 0x4c57, 0x2, "ATI Radeon RV200 LW"},
+ {0x1002, 0x4c58, 0x2, "ATI Radeon RV200 LX"},
+ {0x1002, 0x4c59, 0x2, "ATI Radeon Mobility M6 LY"},
+ {0x1002, 0x4c5a, 0x2, "ATI Radeon Mobility LZ"},
{0x1002, 0x4c64, 0x3, "ATI Radeon RV250 Ld"},
{0x1002, 0x4c65, 0x3, "ATI Radeon RV250 Le"},
{0x1002, 0x4c66, 0x3, "ATI Radeon Mobility M9 RV250 Lf"},
{0x1002, 0x4c67, 0x3, "ATI Radeon RV250 Lg"},
- {0x1002, 0x4d46, 0x0, "ATI Rage 128 MF"},
- {0x1002, 0x4d46, 0x0, "ATI Rage 128 ML"},
- {0x1002, 0x4e44, 0x5, "ATI Radeon R300 ND"},
- {0x1002, 0x4e45, 0x5, "ATI Radeon R300 NE"},
- {0x1002, 0x4e46, 0x5, "ATI Radeon R300 NF"},
- {0x1002, 0x4e47, 0x5, "ATI Radeon R300 NG"},
- {0x1002, 0x4e48, 0x5, "ATI Radeon R350 NH"},
- {0x1002, 0x4e49, 0x5, "ATI Radeon R350 NI"},
- {0x1002, 0x4e4a, 0x5, "ATI Radeon R350 NJ"},
- {0x1002, 0x4e4b, 0x5, "ATI Radeon R350 NK"},
- {0x1002, 0x4e50, 0x5, "ATI Radeon Mobility RV350 NP"},
- {0x1002, 0x4e51, 0x5, "ATI Radeon Mobility RV350 NQ"},
- {0x1002, 0x4e52, 0x5, "ATI Radeon Mobility RV350 NR"},
- {0x1002, 0x4e53, 0x5, "ATI Radeon Mobility RV350 NS"},
- {0x1002, 0x4e54, 0x5, "ATI Radeon Mobility RV350 NT"},
- {0x1002, 0x4e56, 0x5, "ATI Radeon Mobility RV350 NV"},
- {0x1002, 0x5041, 0x0, "ATI Rage 128 PA"},
- {0x1002, 0x5042, 0x0, "ATI Rage 128 PB"},
- {0x1002, 0x5043, 0x0, "ATI Rage 128 PC"},
- {0x1002, 0x5044, 0x0, "ATI Rage 128 PD"},
- {0x1002, 0x5045, 0x0, "ATI Rage 128 PE"},
- {0x1002, 0x5046, 0x0, "ATI Rage 128 PF"},
- {0x1002, 0x5047, 0x0, "ATI Rage 128 PG"},
- {0x1002, 0x5048, 0x0, "ATI Rage 128 PH"},
- {0x1002, 0x5049, 0x0, "ATI Rage 128 PI"},
- {0x1002, 0x504a, 0x0, "ATI Rage 128 PJ"},
- {0x1002, 0x504b, 0x0, "ATI Rage 128 PK"},
- {0x1002, 0x504c, 0x0, "ATI Rage 128 PL"},
- {0x1002, 0x504d, 0x0, "ATI Rage 128 PM"},
- {0x1002, 0x504e, 0x0, "ATI Rage 128 PN"},
- {0x1002, 0x504f, 0x0, "ATI Rage 128 PO"},
- {0x1002, 0x5050, 0x0, "ATI Rage 128 PP"},
- {0x1002, 0x5051, 0x0, "ATI Rage 128 PQ"},
- {0x1002, 0x5052, 0x0, "ATI Rage 128 PR"},
- {0x1002, 0x5053, 0x0, "ATI Rage 128 PS"},
- {0x1002, 0x5054, 0x0, "ATI Rage 128 PT"},
- {0x1002, 0x5055, 0x0, "ATI Rage 128 PU"},
- {0x1002, 0x5056, 0x0, "ATI Rage 128 PV"},
- {0x1002, 0x5057, 0x0, "ATI Rage 128 PW"},
- {0x1002, 0x5058, 0x0, "ATI Rage 128 PX"},
- {0x1002, 0x5144, 0x1, "ATI Radeon R100 QD"},
- {0x1002, 0x5145, 0x1, "ATI Radeon R100 QE"},
- {0x1002, 0x5146, 0x1, "ATI Radeon R100 QF"},
- {0x1002, 0x5147, 0x1, "ATI Radeon R100 QG"},
- {0x1002, 0x5148, 0x1, "ATI Radeon R200 QH"},
- {0x1002, 0x514c, 0x1, "ATI Radeon R200 QL"},
- {0x1002, 0x514d, 0x1, "ATI Radeon R200 QM"},
- {0x1002, 0x5157, 0x1, "ATI Radeon RV200 QW"},
- {0x1002, 0x5158, 0x1, "ATI Radeon RV200 QX"},
- {0x1002, 0x5159, 0x1, "ATI Radeon RV100 QY"},
- {0x1002, 0x515a, 0x1, "ATI Radeon RV100 QZ"},
- {0x1002, 0x5245, 0x0, "ATI Rage 128 RE"},
- {0x1002, 0x5246, 0x0, "ATI Rage 128 RF"},
- {0x1002, 0x5247, 0x0, "ATI Rage 128 RG"},
- {0x1002, 0x524b, 0x0, "ATI Rage 128 RK"},
- {0x1002, 0x524c, 0x0, "ATI Rage 128 RL"},
- {0x1002, 0x5345, 0x0, "ATI Rage 128 SE"},
- {0x1002, 0x5346, 0x0, "ATI Rage 128 SF"},
- {0x1002, 0x5347, 0x0, "ATI Rage 128 SG"},
- {0x1002, 0x5348, 0x0, "ATI Rage 128 SH"},
- {0x1002, 0x534b, 0x0, "ATI Rage 128 SK"},
- {0x1002, 0x534c, 0x0, "ATI Rage 128 SL"},
- {0x1002, 0x534d, 0x0, "ATI Rage 128 SM"},
- {0x1002, 0x534e, 0x0, "ATI Rage 128 SN"},
- {0x1002, 0x5446, 0x0, "ATI Rage 128 TF"},
- {0x1002, 0x544c, 0x0, "ATI Rage 128 TL"},
- {0x1002, 0x5452, 0x0, "ATI Rage 128 TR"},
- {0x1002, 0x5453, 0x0, "ATI Rage 128 TS"},
- {0x1002, 0x5454, 0x0, "ATI Rage 128 TT"},
- {0x1002, 0x5455, 0x0, "ATI Rage 128 TU"},
- {0x1002, 0x5834, 0x5, "ATI Radeon RS300"},
- {0x1002, 0x5835, 0x5, "ATI Radeon RS300 Mobility"},
+ {0x1002, 0x4d46, 0x1, "ATI Rage 128 MF"},
+ {0x1002, 0x4d46, 0x1, "ATI Rage 128 ML"},
+ {0x1002, 0x4e44, 0x4, "ATI Radeon R300 ND"},
+ {0x1002, 0x4e45, 0x4, "ATI Radeon R300 NE"},
+ {0x1002, 0x4e46, 0x4, "ATI Radeon R300 NF"},
+ {0x1002, 0x4e47, 0x4, "ATI Radeon R300 NG"},
+ {0x1002, 0x4e48, 0x4, "ATI Radeon R350 NH"},
+ {0x1002, 0x4e49, 0x4, "ATI Radeon R350 NI"},
+ {0x1002, 0x4e4a, 0x4, "ATI Radeon R350 NJ"},
+ {0x1002, 0x4e4b, 0x4, "ATI Radeon R350 NK"},
+ {0x1002, 0x4e50, 0x4, "ATI Radeon Mobility RV350 NP"},
+ {0x1002, 0x4e51, 0x4, "ATI Radeon Mobility RV350 NQ"},
+ {0x1002, 0x4e52, 0x4, "ATI Radeon Mobility RV350 NR"},
+ {0x1002, 0x4e53, 0x4, "ATI Radeon Mobility RV350 NS"},
+ {0x1002, 0x4e54, 0x4, "ATI Radeon Mobility RV350 NT"},
+ {0x1002, 0x4e56, 0x4, "ATI Radeon Mobility RV350 NV"},
+ {0x1002, 0x5041, 0x1, "ATI Rage 128 PA"},
+ {0x1002, 0x5042, 0x1, "ATI Rage 128 PB"},
+ {0x1002, 0x5043, 0x1, "ATI Rage 128 PC"},
+ {0x1002, 0x5044, 0x1, "ATI Rage 128 PD"},
+ {0x1002, 0x5045, 0x1, "ATI Rage 128 PE"},
+ {0x1002, 0x5046, 0x1, "ATI Rage 128 PF"},
+ {0x1002, 0x5047, 0x1, "ATI Rage 128 PG"},
+ {0x1002, 0x5048, 0x1, "ATI Rage 128 PH"},
+ {0x1002, 0x5049, 0x1, "ATI Rage 128 PI"},
+ {0x1002, 0x504a, 0x1, "ATI Rage 128 PJ"},
+ {0x1002, 0x504b, 0x1, "ATI Rage 128 PK"},
+ {0x1002, 0x504c, 0x1, "ATI Rage 128 PL"},
+ {0x1002, 0x504d, 0x1, "ATI Rage 128 PM"},
+ {0x1002, 0x504e, 0x1, "ATI Rage 128 PN"},
+ {0x1002, 0x504f, 0x1, "ATI Rage 128 PO"},
+ {0x1002, 0x5050, 0x1, "ATI Rage 128 PP"},
+ {0x1002, 0x5051, 0x1, "ATI Rage 128 PQ"},
+ {0x1002, 0x5052, 0x1, "ATI Rage 128 PR"},
+ {0x1002, 0x5053, 0x1, "ATI Rage 128 PS"},
+ {0x1002, 0x5054, 0x1, "ATI Rage 128 PT"},
+ {0x1002, 0x5055, 0x1, "ATI Rage 128 PU"},
+ {0x1002, 0x5056, 0x1, "ATI Rage 128 PV"},
+ {0x1002, 0x5057, 0x1, "ATI Rage 128 PW"},
+ {0x1002, 0x5058, 0x1, "ATI Rage 128 PX"},
+ {0x1002, 0x5144, 0x2, "ATI Radeon R100 QD"},
+ {0x1002, 0x5145, 0x2, "ATI Radeon R100 QE"},
+ {0x1002, 0x5146, 0x2, "ATI Radeon R100 QF"},
+ {0x1002, 0x5147, 0x2, "ATI Radeon R100 QG"},
+ {0x1002, 0x5148, 0x3, "ATI Radeon R200 QH"},
+ {0x1002, 0x514c, 0x3, "ATI Radeon R200 QL"},
+ {0x1002, 0x514d, 0x3, "ATI Radeon R200 QM"},
+ {0x1002, 0x5157, 0x2, "ATI Radeon RV200 QW"},
+ {0x1002, 0x5158, 0x2, "ATI Radeon RV200 QX"},
+ {0x1002, 0x5159, 0x2, "ATI Radeon RV100 QY"},
+ {0x1002, 0x515a, 0x2, "ATI Radeon RV100 QZ"},
+ {0x1002, 0x5245, 0x1, "ATI Rage 128 RE"},
+ {0x1002, 0x5246, 0x1, "ATI Rage 128 RF"},
+ {0x1002, 0x5247, 0x1, "ATI Rage 128 RG"},
+ {0x1002, 0x524b, 0x1, "ATI Rage 128 RK"},
+ {0x1002, 0x524c, 0x1, "ATI Rage 128 RL"},
+ {0x1002, 0x5345, 0x1, "ATI Rage 128 SE"},
+ {0x1002, 0x5346, 0x1, "ATI Rage 128 SF"},
+ {0x1002, 0x5347, 0x1, "ATI Rage 128 SG"},
+ {0x1002, 0x5348, 0x1, "ATI Rage 128 SH"},
+ {0x1002, 0x534b, 0x1, "ATI Rage 128 SK"},
+ {0x1002, 0x534c, 0x1, "ATI Rage 128 SL"},
+ {0x1002, 0x534d, 0x1, "ATI Rage 128 SM"},
+ {0x1002, 0x534e, 0x1, "ATI Rage 128 SN"},
+ {0x1002, 0x5446, 0x1, "ATI Rage 128 TF"},
+ {0x1002, 0x544c, 0x1, "ATI Rage 128 TL"},
+ {0x1002, 0x5452, 0x1, "ATI Rage 128 TR"},
+ {0x1002, 0x5453, 0x1, "ATI Rage 128 TS"},
+ {0x1002, 0x5454, 0x1, "ATI Rage 128 TT"},
+ {0x1002, 0x5455, 0x1, "ATI Rage 128 TU"},
+ {0x1002, 0x5834, 0x3, "ATI Radeon RS300"},
+ {0x1002, 0x5835, 0x3, "ATI Radeon RS300 Mobility"},
{0x1002, 0x5941, 0x3, "ATI Radeon RV280 (9200)"},
{0x1002, 0x5961, 0x3, "ATI Radeon RV280 (9200 SE)"},
{0x1002, 0x5964, 0x3, "ATI Radeon RV280 (9200 SE)"},
@@ -216,8 +221,10 @@ ATICardInit(KdCardInfo *card)
}
atic->busid = make_busid(&card->attr);
- if (atic->busid == NULL)
+ if (atic->busid == NULL) {
+ xfree(atic);
return FALSE;
+ }
#ifdef USE_DRI
/* We demand identification by busid, not driver name */
@@ -229,15 +236,23 @@ ATICardInit(KdCardInfo *card)
card->driver = atic;
for (i = 0; ati_pci_ids[i].name != NULL; i++) {
- struct pci_id_entry *id = &ati_pci_ids[i];
- if (id->device == card->attr.deviceID) {
- if (id->caps & CAP_RADEON) {
- if (id->caps & CAP_R200)
- atic->is_r200 = TRUE;
- atic->is_radeon = TRUE;
- }
+ if (ati_pci_ids[i].device == card->attr.deviceID) {
+ atic->pci_id = &ati_pci_ids[i];
+ break;
}
}
+
+ if (atic->pci_id->caps != CAP_R128)
+ atic->is_radeon = TRUE;
+ if (atic->pci_id->caps == CAP_R100)
+ atic->is_r100 = TRUE;
+ if (atic->pci_id->caps == CAP_R200)
+ atic->is_r200 = TRUE;
+ if (atic->pci_id->caps == CAP_R300)
+ atic->is_r300 = TRUE;
+
+ ErrorF("Using ATI card: %s at %s\n", atic->pci_id->name, atic->busid);
+
return TRUE;
}
diff --git a/hw/kdrive/ati/ati.h b/hw/kdrive/ati/ati.h
index 5d10d9253..ea95abdb4 100644
--- a/hw/kdrive/ati/ati.h
+++ b/hw/kdrive/ati/ati.h
@@ -81,10 +81,6 @@ typedef volatile CARD8 VOL8;
typedef volatile CARD16 VOL16;
typedef volatile CARD32 VOL32;
-#define CAP_RADEON 0x1 /* Whether it's a Radeon vs R128 */
-#define CAP_R200 0x2 /* If CAP_RADEON, whether it's an R200 */
-#define CAP_NODRM 0x4 /* Set if no initialization for the DRM yet. */
-
struct pci_id_entry {
CARD16 vendor;
CARD16 device;
@@ -121,7 +117,9 @@ typedef struct _ATICardInfo {
struct pci_id_entry *pci_id;
CARD8 *reg_base;
Bool is_radeon;
+ Bool is_r100;
Bool is_r200;
+ Bool is_r300;
char *busid;
#ifdef USE_DRI
int drmFd;
diff --git a/hw/kdrive/ati/ati_draw.c b/hw/kdrive/ati/ati_draw.c
index 27c60df9f..45b94831f 100644
--- a/hw/kdrive/ati/ati_draw.c
+++ b/hw/kdrive/ati/ati_draw.c
@@ -504,7 +504,7 @@ ATIDrawInit(ScreenPtr pScreen)
if (atis->using_dri)
ATIDMAStart(pScreen);
else {
- if (ATIDRIScreenInit(pScreen))
+ if (!atic->is_r300 && ATIDRIScreenInit(pScreen))
atis->using_dri = TRUE;
}
#endif /* USE_DRI */
diff --git a/hw/kdrive/ati/ati_draw.h b/hw/kdrive/ati/ati_draw.h
index af2a95ce4..8127d69bf 100644
--- a/hw/kdrive/ati/ati_draw.h
+++ b/hw/kdrive/ati/ati_draw.h
@@ -84,7 +84,7 @@ void RadeonSwitchTo3D(void);
void
ATIWaitIdle(void);
-#if 0
+#if 1
#define ATI_FALLBACK(x) \
do { \
ErrorF x; \
diff --git a/hw/kdrive/ati/ati_dri.c b/hw/kdrive/ati/ati_dri.c
index 65ca0f72e..2ce6f1440 100644
--- a/hw/kdrive/ati/ati_dri.c
+++ b/hw/kdrive/ati/ati_dri.c
@@ -539,7 +539,7 @@ ATIDRIScreenInit(ScreenPtr pScreen)
pDRIInfo->busIdString = atic->busid;
if (atic->is_radeon) {
pDRIInfo->drmDriverName = "radeon";
- if (atic->is_r200)
+ if (atic->is_r100)
pDRIInfo->clientDriverName = "radeon";
else
pDRIInfo->clientDriverName = "r200";
@@ -562,7 +562,7 @@ ATIDRIScreenInit(ScreenPtr pScreen)
*/
pDRIInfo->SAREASize = SAREA_MAX;
- if (atic->is_radeon) {
+ if (!atic->is_radeon) {
pDRIInfo->devPrivateSize = sizeof(R128DRIRec);
devSareaSize = sizeof(R128SAREAPriv);
} else {
@@ -862,7 +862,7 @@ ATIDRICloseScreen(ScreenPtr pScreen)
}
/* De-allocate all kernel resources */
- if (atic->is_radeon) {
+ if (!atic->is_radeon) {
memset(&drmR128Info, 0, sizeof(drmR128Init));
drmR128Info.func = DRM_R128_CLEANUP_CCE;
drmCommandWrite(atic->drmFd, DRM_R128_INIT, &drmR128Info,