summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
authorMatthieu Herrb <matthieu@cvs.openbsd.org>2007-04-07 17:01:03 +0000
committerMatthieu Herrb <matthieu@cvs.openbsd.org>2007-04-07 17:01:03 +0000
commit3d871596882e725bb55609b95c362b939be7819b (patch)
treeac117a0baed4d60e983dd8b842cb5fefd6d89b88 /driver
parent98fd99841832353e0e8475953d5954494e87adcb (diff)
Bring back i945GM support that was left out because I used an
out-of-date XF4 tree when importing this driver. Noticed and tested by krw@. Thanks.
Diffstat (limited to 'driver')
-rw-r--r--driver/xf86-video-i810/src/common.h10
-rw-r--r--driver/xf86-video-i810/src/i810_driver.c3
-rw-r--r--driver/xf86-video-i810/src/i830_cursor.c8
-rw-r--r--driver/xf86-video-i810/src/i830_driver.c21
-rw-r--r--driver/xf86-video-i810/src/i830_memory.c8
-rw-r--r--driver/xf86-video-i810/src/i830_video.c40
6 files changed, 53 insertions, 37 deletions
diff --git a/driver/xf86-video-i810/src/common.h b/driver/xf86-video-i810/src/common.h
index 85a24ab34..32ea39900 100644
--- a/driver/xf86-video-i810/src/common.h
+++ b/driver/xf86-video-i810/src/common.h
@@ -322,6 +322,11 @@ extern int I810_DEBUG;
#define PCI_CHIP_I945_G_BRIDGE 0x2770
#endif
+#ifndef PCI_CHIP_I945_GM
+#define PCI_CHIP_I945_GM 0x27A2
+#define PCI_CHIP_I945_GM_BRIDGE 0x27A0
+#endif
+
#define IS_I810(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I810 || \
pI810->PciInfo->chipType == PCI_CHIP_I810_DC100 || \
pI810->PciInfo->chipType == PCI_CHIP_I810_E)
@@ -332,11 +337,14 @@ extern int I810_DEBUG;
#define IS_I852(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I855_GM && (pI810->variant == I852_GM || pI810->variant == I852_GME))
#define IS_I855(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I855_GM && (pI810->variant == I855_GM || pI810->variant == I855_GME))
#define IS_I865G(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I865_G)
+
#define IS_I915G(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I915_G || pI810->PciInfo->chipType == PCI_CHIP_E7221_G)
#define IS_I915GM(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I915_GM)
#define IS_I945G(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I945_G)
+#define IS_I945GM(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I945_GM)
+#define IS_I9XX(pI810) (IS_I915G(pI810) || IS_I915GM(pI810) || IS_I945G(pI810) || IS_I945GM(pI810))
-#define IS_MOBILE(pI810) (IS_I830(pI810) || IS_I85X(pI810) || IS_I915GM(pI810))
+#define IS_MOBILE(pI810) (IS_I830(pI810) || IS_I85X(pI810) || IS_I915GM(pI810) || IS_I945GM(pI810))
#define GTT_PAGE_SIZE KB(4)
#define ROUND_TO(x, y) (((x) + (y) - 1) / (y) * (y))
diff --git a/driver/xf86-video-i810/src/i810_driver.c b/driver/xf86-video-i810/src/i810_driver.c
index bfa1dae9a..5359b9b8d 100644
--- a/driver/xf86-video-i810/src/i810_driver.c
+++ b/driver/xf86-video-i810/src/i810_driver.c
@@ -136,6 +136,7 @@ static SymTabRec I810Chipsets[] = {
{PCI_CHIP_E7221_G, "E7221 (i915)"},
{PCI_CHIP_I915_GM, "915GM"},
{PCI_CHIP_I945_G, "945G"},
+ {PCI_CHIP_I945_GM, "945GM"},
{-1, NULL}
};
@@ -154,6 +155,7 @@ static PciChipsets I810PciChipsets[] = {
{PCI_CHIP_E7221_G, PCI_CHIP_E7221_G, RES_SHARED_VGA},
{PCI_CHIP_I915_GM, PCI_CHIP_I915_GM, RES_SHARED_VGA},
{PCI_CHIP_I945_G, PCI_CHIP_I945_G, RES_SHARED_VGA},
+ {PCI_CHIP_I945_GM, PCI_CHIP_I945_GM, RES_SHARED_VGA},
{-1, -1, RES_UNDEFINED }
};
@@ -569,6 +571,7 @@ I810Probe(DriverPtr drv, int flags)
case PCI_CHIP_E7221_G:
case PCI_CHIP_I915_GM:
case PCI_CHIP_I945_G:
+ case PCI_CHIP_I945_GM:
xf86SetEntitySharable(usedChips[i]);
/* Allocate an entity private if necessary */
diff --git a/driver/xf86-video-i810/src/i830_cursor.c b/driver/xf86-video-i810/src/i830_cursor.c
index 241141920..83cbcead2 100644
--- a/driver/xf86-video-i810/src/i830_cursor.c
+++ b/driver/xf86-video-i810/src/i830_cursor.c
@@ -86,7 +86,7 @@ I830InitHWCursor(ScrnInfoPtr pScrn)
DPRINTF(PFX, "I830InitHWCursor\n");
/* Initialise the HW cursor registers, leaving the cursor hidden. */
- if (IS_MOBILE(pI830) || IS_I915G(pI830) || IS_I945G(pI830)) {
+ if (IS_MOBILE(pI830) || IS_I9XX(pI830)) {
temp = INREG(CURSOR_A_CONTROL);
temp &= ~(CURSOR_MODE | MCURSOR_GAMMA_ENABLE | MCURSOR_MEM_TYPE_LOCAL |
MCURSOR_PIPE_SELECT);
@@ -308,7 +308,7 @@ I830SetCursorPosition(ScrnInfoPtr pScrn, int x, int y)
}
/* have to upload the base for the new position */
- if (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830)) {
+ if (IS_I9XX(pI830)) {
if (pI830->CursorIsARGB)
OUTREG(CURSOR_A_BASE, pI830->CursorMemARGB->Physical);
else
@@ -339,7 +339,7 @@ I830ShowCursor(ScrnInfoPtr pScrn)
pI830->CursorMemARGB->Physical, pI830->CursorMemARGB->Start);
pI830->cursorOn = TRUE;
- if (IS_MOBILE(pI830) || IS_I915G(pI830) || IS_I945G(pI830)) {
+ if (IS_MOBILE(pI830) || IS_I9XX(pI830)) {
temp = INREG(CURSOR_A_CONTROL);
temp &= ~(CURSOR_MODE | MCURSOR_PIPE_SELECT);
if (pI830->CursorIsARGB)
@@ -387,7 +387,7 @@ I830HideCursor(ScrnInfoPtr pScrn)
DPRINTF(PFX, "I830HideCursor\n");
pI830->cursorOn = FALSE;
- if (IS_MOBILE(pI830) || IS_I915G(pI830) || IS_I945G(pI830)) {
+ if (IS_MOBILE(pI830) || IS_I9XX(pI830)) {
temp = INREG(CURSOR_A_CONTROL);
temp &= ~CURSOR_MODE;
temp |= CURSOR_MODE_DISABLE;
diff --git a/driver/xf86-video-i810/src/i830_driver.c b/driver/xf86-video-i810/src/i830_driver.c
index b281affd5..4f01539ed 100644
--- a/driver/xf86-video-i810/src/i830_driver.c
+++ b/driver/xf86-video-i810/src/i830_driver.c
@@ -196,6 +196,7 @@ static SymTabRec I830BIOSChipsets[] = {
{PCI_CHIP_E7221_G, "E7221 (i915)"},
{PCI_CHIP_I915_GM, "915GM"},
{PCI_CHIP_I945_G, "945G"},
+ {PCI_CHIP_I945_GM, "945GM"},
{-1, NULL}
};
@@ -208,6 +209,7 @@ static PciChipsets I830BIOSPciChipsets[] = {
{PCI_CHIP_E7221_G, PCI_CHIP_E7221_G, RES_SHARED_VGA},
{PCI_CHIP_I915_GM, PCI_CHIP_I915_GM, RES_SHARED_VGA},
{PCI_CHIP_I945_G, PCI_CHIP_I945_G, RES_SHARED_VGA},
+ {PCI_CHIP_I945_GM, PCI_CHIP_I945_GM, RES_SHARED_VGA},
{-1, -1, RES_UNDEFINED}
};
@@ -1323,7 +1325,7 @@ I830DetectMemory(ScrnInfoPtr pScrn)
* The GTT varying according the the FbMapSize and the popup is 4KB */
range = (pI830->FbMapSize / (1024*1024)) + 4;
- if (IS_I85X(pI830) || IS_I865G(pI830) || IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830)) {
+ if (IS_I85X(pI830) || IS_I865G(pI830) || IS_I9XX(pI830)) {
switch (gmch_ctrl & I830_GMCH_GMS_MASK) {
case I855_GMCH_GMS_STOLEN_1M:
memsize = MB(1) - KB(range);
@@ -1341,11 +1343,11 @@ I830DetectMemory(ScrnInfoPtr pScrn)
memsize = MB(32) - KB(range);
break;
case I915G_GMCH_GMS_STOLEN_48M:
- if (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))
+ if (IS_I9XX(pI830))
memsize = MB(48) - KB(range);
break;
case I915G_GMCH_GMS_STOLEN_64M:
- if (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))
+ if (IS_I9XX(pI830))
memsize = MB(64) - KB(range);
break;
}
@@ -2090,6 +2092,9 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags)
case PCI_CHIP_I945_G:
chipname = "945G";
break;
+ case PCI_CHIP_I945_GM:
+ chipname = "945GM";
+ break;
default:
chipname = "unknown chipset";
break;
@@ -2127,7 +2132,7 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags)
pI830->LinearAddr = pI830->pEnt->device->MemBase;
from = X_CONFIG;
} else {
- if (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830)) {
+ if (IS_I9XX(pI830)) {
pI830->LinearAddr = pI830->PciInfo->memBase[2] & 0xF0000000;
from = X_PROBED;
} else if (pI830->PciInfo->memBase[1] != 0) {
@@ -2149,7 +2154,7 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags)
pI830->MMIOAddr = pI830->pEnt->device->IOBase;
from = X_CONFIG;
} else {
- if (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830)) {
+ if (IS_I9XX(pI830)) {
pI830->MMIOAddr = pI830->PciInfo->memBase[0] & 0xFFF80000;
from = X_PROBED;
} else if (pI830->PciInfo->memBase[1]) {
@@ -2194,7 +2199,7 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags)
pI830->FbMapSize = 0x4000000; /* 64MB - has this been tested ?? */
}
} else {
- if (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830)) {
+ if (IS_I9XX(pI830)) {
if (pI830->PciInfo->memBase[2] & 0x08000000)
pI830->FbMapSize = 0x8000000; /* 128MB aperture */
else
@@ -2227,7 +2232,7 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags)
if (pI830->PciInfo->chipType == PCI_CHIP_E7221_G)
pI830->availablePipes = 1;
else
- if (IS_MOBILE(pI830) || IS_I915G(pI830) || IS_I945G(pI830))
+ if (IS_MOBILE(pI830) || IS_I9XX(pI830))
pI830->availablePipes = 2;
else
pI830->availablePipes = 1;
@@ -2872,7 +2877,7 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags)
}
/* Check if the HW cursor needs physical address. */
- if (IS_MOBILE(pI830) || IS_I915G(pI830) || IS_I945G(pI830))
+ if (IS_MOBILE(pI830) || IS_I9XX(pI830))
pI830->CursorNeedsPhysical = TRUE;
else
pI830->CursorNeedsPhysical = FALSE;
diff --git a/driver/xf86-video-i810/src/i830_memory.c b/driver/xf86-video-i810/src/i830_memory.c
index 27cf01781..e4aab6872 100644
--- a/driver/xf86-video-i810/src/i830_memory.c
+++ b/driver/xf86-video-i810/src/i830_memory.c
@@ -1239,7 +1239,7 @@ SetFence(ScrnInfoPtr pScrn, int nr, unsigned int start, unsigned int pitch,
i830Reg->Fence[nr] = 0;
- if (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))
+ if (IS_I9XX(pI830))
fence_mask = ~I915G_FENCE_START_MASK;
else
fence_mask = ~I830_FENCE_START_MASK;
@@ -1247,7 +1247,7 @@ SetFence(ScrnInfoPtr pScrn, int nr, unsigned int start, unsigned int pitch,
if (start & fence_mask) {
xf86DrvMsg(X_WARNING, pScrn->scrnIndex,
"SetFence: %d: start (0x%08x) is not %s aligned\n",
- nr, start, (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830)) ? "1MB" : "512k");
+ nr, start, (IS_I9XX(pI830)) ? "1MB" : "512k");
return;
}
@@ -1267,7 +1267,7 @@ SetFence(ScrnInfoPtr pScrn, int nr, unsigned int start, unsigned int pitch,
val = (start | FENCE_X_MAJOR | FENCE_VALID);
- if (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830)) {
+ if (IS_I9XX(pI830)) {
switch (size) {
case MB(1):
val |= I915G_FENCE_SIZE_1M;
@@ -1328,7 +1328,7 @@ SetFence(ScrnInfoPtr pScrn, int nr, unsigned int start, unsigned int pitch,
}
}
- if (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))
+ if (IS_I9XX(pI830))
fence_pitch = pitch / 512;
else
fence_pitch = pitch / 128;
diff --git a/driver/xf86-video-i810/src/i830_video.c b/driver/xf86-video-i810/src/i830_video.c
index 12c25e054..4a7f1f78c 100644
--- a/driver/xf86-video-i810/src/i830_video.c
+++ b/driver/xf86-video-i810/src/i830_video.c
@@ -617,7 +617,7 @@ I830SetupImageVideo(ScreenPtr pScreen)
adapt->nAttributes = NUM_ATTRIBUTES;
if (pI830->Clone)
adapt->nAttributes += CLONE_ATTRIBUTES;
- if (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))
+ if (IS_I9XX(pI830))
adapt->nAttributes += GAMMA_ATTRIBUTES; /* has gamma */
adapt->pAttributes = xnfalloc(sizeof(XF86AttributeRec) * adapt->nAttributes);
/* Now copy the attributes */
@@ -628,7 +628,7 @@ I830SetupImageVideo(ScreenPtr pScreen)
memcpy((char*)att, (char*)CloneAttributes, sizeof(XF86AttributeRec) * CLONE_ATTRIBUTES);
att+=CLONE_ATTRIBUTES;
}
- if (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830)) {
+ if (IS_I9XX(pI830)) {
memcpy((char*)att, (char*)GammaAttributes, sizeof(XF86AttributeRec) * GAMMA_ATTRIBUTES);
att+=GAMMA_ATTRIBUTES;
}
@@ -688,7 +688,7 @@ I830SetupImageVideo(ScreenPtr pScreen)
if (pI830->Clone)
xvPipe = MAKE_ATOM("XV_PIPE");
- if (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830)) {
+ if (IS_I9XX(pI830)) {
xvGamma0 = MAKE_ATOM("XV_GAMMA0");
xvGamma1 = MAKE_ATOM("XV_GAMMA1");
xvGamma2 = MAKE_ATOM("XV_GAMMA2");
@@ -806,7 +806,7 @@ I830SetPortAttribute(ScrnInfoPtr pScrn,
overlay->OCONFIG |= OVERLAY_PIPE_B;
if (pPriv->overlayOK)
OVERLAY_UPDATE;
- } else if (attribute == xvGamma0 && (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))) {
+ } else if (attribute == xvGamma0 && (IS_I9XX(pI830))) {
/* Avoid video anomalies, so set gamma registers when overlay is off */
/* We also clamp the values if they are outside the ranges */
if (!*pI830->overlayOn) {
@@ -815,35 +815,35 @@ I830SetPortAttribute(ScrnInfoPtr pScrn,
pPriv->gamma1 = pPriv->gamma0 + 0x7d;
} else
return BadRequest;
- } else if (attribute == xvGamma1 && (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))) {
+ } else if (attribute == xvGamma1 && (IS_I9XX(pI830))) {
if (!*pI830->overlayOn) {
pPriv->gamma1 = value;
if (pPriv->gamma1 - pPriv->gamma0 > 0x7d)
pPriv->gamma0 = pPriv->gamma1 - 0x7d;
} else
return BadRequest;
- } else if (attribute == xvGamma2 && (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))) {
+ } else if (attribute == xvGamma2 && (IS_I9XX(pI830))) {
if (!*pI830->overlayOn) {
pPriv->gamma2 = value;
if (pPriv->gamma3 - pPriv->gamma2 > 0x7d)
pPriv->gamma3 = pPriv->gamma2 + 0x7d;
} else
return BadRequest;
- } else if (attribute == xvGamma3 && (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))) {
+ } else if (attribute == xvGamma3 && (IS_I9XX(pI830))) {
if (!*pI830->overlayOn) {
pPriv->gamma3 = value;
if (pPriv->gamma3 - pPriv->gamma2 > 0x7d)
pPriv->gamma2 = pPriv->gamma3 - 0x7d;
} else
return BadRequest;
- } else if (attribute == xvGamma4 && (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))) {
+ } else if (attribute == xvGamma4 && (IS_I9XX(pI830))) {
if (!*pI830->overlayOn) {
pPriv->gamma4 = value;
if (pPriv->gamma5 - pPriv->gamma4 > 0x7d)
pPriv->gamma5 = pPriv->gamma4 + 0x7d;
} else
return BadRequest;
- } else if (attribute == xvGamma5 && (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))) {
+ } else if (attribute == xvGamma5 && (IS_I9XX(pI830))) {
if (!*pI830->overlayOn) {
pPriv->gamma5 = value;
if (pPriv->gamma5 - pPriv->gamma4 > 0x7d)
@@ -875,7 +875,7 @@ I830SetPortAttribute(ScrnInfoPtr pScrn,
attribute == xvGamma2 ||
attribute == xvGamma3 ||
attribute == xvGamma4 ||
- attribute == xvGamma5) && (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))) {
+ attribute == xvGamma5) && (IS_I9XX(pI830))) {
I830UpdateGamma(pScrn);
}
@@ -895,17 +895,17 @@ I830GetPortAttribute(ScrnInfoPtr pScrn,
*value = pPriv->contrast;
} else if (pI830->Clone && attribute == xvPipe) {
*value = pPriv->pipe;
- } else if (attribute == xvGamma0 && (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))) {
+ } else if (attribute == xvGamma0 && (IS_I9XX(pI830))) {
*value = pPriv->gamma0;
- } else if (attribute == xvGamma1 && (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))) {
+ } else if (attribute == xvGamma1 && (IS_I9XX(pI830))) {
*value = pPriv->gamma1;
- } else if (attribute == xvGamma2 && (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))) {
+ } else if (attribute == xvGamma2 && (IS_I9XX(pI830))) {
*value = pPriv->gamma2;
- } else if (attribute == xvGamma3 && (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))) {
+ } else if (attribute == xvGamma3 && (IS_I9XX(pI830))) {
*value = pPriv->gamma3;
- } else if (attribute == xvGamma4 && (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))) {
+ } else if (attribute == xvGamma4 && (IS_I9XX(pI830))) {
*value = pPriv->gamma4;
- } else if (attribute == xvGamma5 && (IS_I915G(pI830) || IS_I915GM(pI830) || IS_I945G(pI830))) {
+ } else if (attribute == xvGamma5 && (IS_I9XX(pI830))) {
*value = pPriv->gamma5;
} else if (attribute == xvColorKey) {
*value = pPriv->colorKey;
@@ -1182,7 +1182,7 @@ I830DisplayVideo(ScrnInfoPtr pScrn, int id, short width, short height,
if (!pPriv->overlayOK)
return;
- if (IS_I915G(pI830) || IS_I915GM(pI830)) {
+ if (IS_I9XX(pI830)) {
shift = 6;
mask = 0x3f;
} else {
@@ -1221,7 +1221,7 @@ I830DisplayVideo(ScrnInfoPtr pScrn, int id, short width, short height,
swidth = ((offsety + width + mask) >> shift) -
(offsety >> shift);
- if (IS_I915G(pI830) || IS_I915GM(pI830))
+ if (IS_I9XX(pI830))
swidth <<= 1;
swidth -= 1;
@@ -1233,7 +1233,7 @@ I830DisplayVideo(ScrnInfoPtr pScrn, int id, short width, short height,
swidth = ((offsetu + (width / 2) + mask) >> shift) -
(offsetu >> shift);
- if (IS_I915G(pI830) || IS_I915GM(pI830))
+ if (IS_I9XX(pI830))
swidth <<= 1;
swidth -= 1;
@@ -1257,7 +1257,7 @@ I830DisplayVideo(ScrnInfoPtr pScrn, int id, short width, short height,
swidth = ((offsety + (width << 1) + mask) >> shift) -
(offsety >> shift);
- if (IS_I915G(pI830) || IS_I915GM(pI830))
+ if (IS_I9XX(pI830))
swidth <<= 1;
swidth -= 1;