xserver-xorg-video-mga: Changes to 'upstream-experimental'
Makefile.am | 2
README_HALLIB | 209 -----
configure.ac | 4
man/mga.man | 11
src/Makefile.am | 17
src/binding.h | 254 -------
src/client.h | 68 -
src/clientlx.c | 848 -----------------------
src/mga.h | 214 +----
src/mga_2064_crtc.c | 951 ++++++++++++++++++++++++++
src/mga_2064_output.c | 196 +++++
src/mga_bios.c | 10
src/mga_dac3026.c | 843 -----------------------
src/mga_dac3026.h | 30
src/mga_dacG.c | 1023 ----------------------------
src/mga_dacG.h | 12
src/mga_dh.c | 451 ------------
src/mga_dri.c | 86 --
src/mga_driver.c | 1801 +++++++-------------------------------------------
src/mga_esc.c | 795 ----------------------
src/mga_g450pll.c | 61 -
src/mga_g_crtc.c | 929 +++++++++++++++++++++++++
src/mga_g_crtc2.c | 388 ++++++++++
src/mga_g_output.c | 526 ++++++++++++++
src/mga_halmod.c | 42 -
src/mga_macros.h | 16
src/mga_merge.c | 977 ---------------------------
src/mga_merge.h | 19
src/mga_reg.h | 20
src/mga_vga.c | 90 +-
30 files changed, 3539 insertions(+), 7354 deletions(-)
New commits:
commit 94ed9651ebb2da7b845f836aee3a294adba37ad9
Author: Tilman Sauerbeck <tilman@code-monkey.de>
Date: Sat Sep 15 00:36:12 2007 +0200
Bumped the xorg-server requirement to 1.3.
diff --git a/configure.ac b/configure.ac
index 9d97c71..ec72bc1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -68,7 +68,7 @@ XORG_DRIVER_CHECK_EXT(XV, videoproto)
XORG_DRIVER_CHECK_EXT(DPMSExtension, xextproto)
# Checks for pkg-config packages
-PKG_CHECK_MODULES(XORG, [xorg-server >= 1.1.0 xproto fontsproto $REQUIRED_MODULES])
+PKG_CHECK_MODULES(XORG, [xorg-server >= 1.3.0 xproto fontsproto $REQUIRED_MODULES])
sdkdir=$(pkg-config --variable=sdkdir xorg-server)
# Checks for libraries.
commit 74876b21c9393020a3c2ffe5db6e3305e54c068d
Author: Tilman Sauerbeck <tilman@code-monkey.de>
Date: Sat Sep 15 00:31:35 2007 +0200
Distribute mga_dac3026.h and mga_dacG.h
diff --git a/src/Makefile.am b/src/Makefile.am
index 61c2b26..1d42c2e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -34,7 +34,9 @@ mga_drv_la_SOURCES = \
mga_bios.c \
mga_common.h \
mga_dac3026.c \
+ mga_dac3026.h \
mga_dacG.c \
+ mga_dacG.h \
mga_dga.c \
mga_driver.c \
mga_g450pll.c \
commit 7e31991c28e9a1e26ff78d3426b90f4213626a0a
Author: Tilman Sauerbeck <tilman@code-monkey.de>
Date: Sat Sep 15 00:19:51 2007 +0200
Bumped version to 1.9.99.
diff --git a/configure.ac b/configure.ac
index 9f8f1a7..9d97c71 100644
--- a/configure.ac
+++ b/configure.ac
@@ -24,7 +24,7 @@ AC_PREREQ(2.57)
# When the version number is modified here, also modify it in src/mga.h.
AC_INIT([xf86-video-mga],
- 1.4.7,
+ 1.9.99,
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
xf86-video-mga)
commit 10d452ad86b4798f3ded6c4c2446f08aaab6af00
Author: Tilman Sauerbeck <tilman@code-monkey.de>
Date: Sat Sep 15 00:16:16 2007 +0200
Oops, don't access the "memory" field in struct pci_mem_region either.
diff --git a/src/mga_driver.c b/src/mga_driver.c
index 1ec20dd..c881b9d 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -2776,18 +2776,22 @@ MGAMapMem(ScrnInfoPtr pScrn)
#ifdef XSERVER_LIBPCIACCESS
struct pci_device *const dev = pMga->PciInfo;
struct pci_mem_region *region;
+ void **memory[2];
int i, err;
#endif
if (!pMga->FBDev) {
#ifdef XSERVER_LIBPCIACCESS
+ memory[pMga->io_bar] = &pMga->IOBase;
+ memory[pMga->framebuffer_bar] = &pMga->FbBase;
+
for (i = 0; i < 2; i++) {
region = &dev->regions[i];
err = pci_device_map_range(dev,
region->base_addr, region->size,
PCI_DEV_MAP_FLAG_WRITABLE,
- ®ion->memory);
+ memory[i]);
if (err) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
@@ -2796,9 +2800,6 @@ MGAMapMem(ScrnInfoPtr pScrn)
return FALSE;
}
}
-
- pMga->IOBase = dev->regions[ pMga->io_bar ].memory;
- pMga->FbBase = dev->regions[ pMga->framebuffer_bar ].memory;
#else
/*
* For Alpha, we need to map SPARSE memory, since we need
@@ -2843,15 +2844,13 @@ MGAMapMem(ScrnInfoPtr pScrn)
err = pci_device_map_range(dev,
region->base_addr, region->size,
PCI_DEV_MAP_FLAG_WRITABLE,
- ®ion->memory);
+ (void *) &pMga->ILOADBase);
if (err) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"Unable to map BAR 2 (ILOAD region). %s (%d)\n",
strerror(err), err);
return FALSE;
}
-
- pMga->ILOADBase = dev->regions[pMga->iload_bar].memory;
#else
pMga->ILOADBase = xf86MapPciMem(pScrn->scrnIndex,
VIDMEM_MMIO | VIDMEM_MMIO_32BIT |
@@ -2876,17 +2875,13 @@ MGAUnmapMem(ScrnInfoPtr pScrn)
MGAPtr pMga = MGAPTR(pScrn);
#ifdef XSERVER_LIBPCIACCESS
struct pci_device * const dev = pMga->PciInfo;
- struct pci_mem_region *region;
- int i;
#endif
if (!pMga->FBDev) {
#ifdef XSERVER_LIBPCIACCESS
- for (i = 0; i < 2; i++) {
- region = &dev->regions[i];
- pci_device_unmap_range(dev, region->memory, region->size);
- }
+ pci_device_unmap_range(dev, pMga->IOBase, 0x4000);
+ pci_device_unmap_range(dev, pMga->FbBase, pMga->FbMapSize);
#else
xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pMga->IOBase, 0x4000);
xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pMga->FbBase, pMga->FbMapSize);
@@ -2897,16 +2892,9 @@ MGAUnmapMem(ScrnInfoPtr pScrn)
fbdevHWUnmapMMIO(pScrn);
}
- if ((pMga->iload_bar != -1)
-#ifdef XSERVER_LIBPCIACCESS
- && (dev->regions[pMga->iload_bar].memory != NULL)
-#else
- && (pMga->ILOADBase != NULL)
-#endif
- ) {
+ if ((pMga->iload_bar != -1) && (pMga->ILOADBase != NULL)) {
#ifdef XSERVER_LIBPCIACCESS
- region = &dev->regions[pMga->iload_bar];
- pci_device_unmap_range(dev, region->memory, region->size);
+ pci_device_unmap_range(dev, pMga->ILOADBase, 0x800000);
#else
xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pMga->ILOADBase, 0x800000);
#endif
commit 485fb9aa1e5d90c75d763db4b7bf5a80e51e83e9
Author: Tilman Sauerbeck <tilman@code-monkey.de>
Date: Fri Sep 14 23:10:09 2007 +0200
Use pci_device_map_range() instead of pci_device_map_region().
Likewise for pci_device_unmap_region().
diff --git a/src/mga_driver.c b/src/mga_driver.c
index d9b786f..1ec20dd 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -2775,27 +2775,27 @@ MGAMapMem(ScrnInfoPtr pScrn)
MGAPtr pMga = MGAPTR(pScrn);
#ifdef XSERVER_LIBPCIACCESS
struct pci_device *const dev = pMga->PciInfo;
- int err;
+ struct pci_mem_region *region;
+ int i, err;
#endif
if (!pMga->FBDev) {
#ifdef XSERVER_LIBPCIACCESS
- err = pci_device_map_region(dev, 0, TRUE);
- if (err) {
- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
- "Unable to map BAR 0. %s (%d)\n",
- strerror(err), err);
- return FALSE;
- }
-
- err = pci_device_map_region(dev, 1, TRUE);
- if (err) {
- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
- "Unable to map BAR 1. %s (%d)\n",
- strerror(err), err);
- return FALSE;
- }
+ for (i = 0; i < 2; i++) {
+ region = &dev->regions[i];
+ err = pci_device_map_range(dev,
+ region->base_addr, region->size,
+ PCI_DEV_MAP_FLAG_WRITABLE,
+ ®ion->memory);
+
+ if (err) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "Unable to map BAR %i. %s (%d)\n",
+ i, strerror(err), err);
+ return FALSE;
+ }
+ }
pMga->IOBase = dev->regions[ pMga->io_bar ].memory;
pMga->FbBase = dev->regions[ pMga->framebuffer_bar ].memory;
@@ -2839,7 +2839,11 @@ MGAMapMem(ScrnInfoPtr pScrn)
pMga->ILOADBase = NULL;
if (pMga->iload_bar != -1) {
#ifdef XSERVER_LIBPCIACCESS
- err = pci_device_map_region(dev, pMga->iload_bar, TRUE);
+ region = &dev->regions[pMga->iload_bar];
+ err = pci_device_map_range(dev,
+ region->base_addr, region->size,
+ PCI_DEV_MAP_FLAG_WRITABLE,
+ ®ion->memory);
if (err) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"Unable to map BAR 2 (ILOAD region). %s (%d)\n",
@@ -2872,13 +2876,17 @@ MGAUnmapMem(ScrnInfoPtr pScrn)
MGAPtr pMga = MGAPTR(pScrn);
#ifdef XSERVER_LIBPCIACCESS
struct pci_device * const dev = pMga->PciInfo;
+ struct pci_mem_region *region;
+ int i;
#endif
if (!pMga->FBDev) {
#ifdef XSERVER_LIBPCIACCESS
- pci_device_unmap_region(dev, 0);
- pci_device_unmap_region(dev, 1);
+ for (i = 0; i < 2; i++) {
+ region = &dev->regions[i];
+ pci_device_unmap_range(dev, region->memory, region->size);
+ }
#else
xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pMga->IOBase, 0x4000);
xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pMga->FbBase, pMga->FbMapSize);
@@ -2897,7 +2905,8 @@ MGAUnmapMem(ScrnInfoPtr pScrn)
#endif
) {
#ifdef XSERVER_LIBPCIACCESS
- pci_device_unmap_region(dev, pMga->iload_bar);
+ region = &dev->regions[pMga->iload_bar];
+ pci_device_unmap_range(dev, region->memory, region->size);
#else
xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pMga->ILOADBase, 0x800000);
#endif
commit c9fb0e6de97f55f50bf0a63faa8da47d007e9c34
Author: Tilman Sauerbeck <tilman@code-monkey.de>
Date: Fri Sep 14 22:42:08 2007 +0200
Added missing libpciaccess bits.
diff --git a/src/mga_2064_crtc.c b/src/mga_2064_crtc.c
index 1230420..0277172 100644
--- a/src/mga_2064_crtc.c
+++ b/src/mga_2064_crtc.c
@@ -729,8 +729,13 @@ state_restore(xf86CrtcPtr crtc, MgaCrtcStatePtr state,
for (i = 0; i < 6; i++)
OUTREG16(0x1FDE, (state->ExtVga[i] << 8) | i);
+#ifdef XSERVER_LIBPCIACCESS
+ pci_device_cfg_write_bits(pMga->PciInfo, OPTION_MASK,
+ state->Option, PCI_OPTION_REG);
+#else
pciSetBitsLong(pMga->PciTag, PCI_OPTION_REG, OPTION_MASK,
state->Option);
+#endif
/* select pixel clock PLL as clock source */
outTi3026(TVP3026_CLK_SEL, 0, state->DacRegs[3]);
@@ -837,7 +842,11 @@ state_save(xf86CrtcPtr crtc, MgaCrtcStatePtr state, int vga_flags)
for (i = 0; i < DACREGSIZE; i++)
state->DacRegs[i] = inTi3026(MGADACregs[i]);
+#ifdef XSERVER_LIBPCIACCESS
+ pci_device_cfg_read_u32(pMga->PciInfo, &state->Option, PCI_OPTION_REG);
+#else
state->Option = pciReadLong(pMga->PciTag, PCI_OPTION_REG);
+#endif
#ifdef DEBUG
ErrorF("read: %02X %02X %02X %02X %02X %02X %08lX\n",
diff --git a/src/mga_g_crtc.c b/src/mga_g_crtc.c
index 030a6bd..e6ef324 100644
--- a/src/mga_g_crtc.c
+++ b/src/mga_g_crtc.c
@@ -678,6 +678,18 @@ state_restore(xf86CrtcPtr crtc, MgaCrtcStatePtr state,
if (!MGAISGx50(pMga)) {
/* restore pci_option register */
+#ifdef XSERVER_LIBPCIACCESS
+ pci_device_cfg_write_bits(pMga->PciInfo, optionMask,
+ state->Option, PCI_OPTION_REG);
+
+ if (pMga->Chipset != PCI_CHIP_MGA1064)
+ pci_device_cfg_write_bits(pMga->PciInfo, OPTION2_MASK,
+ state->Option2, PCI_MGA_OPTION2);
+
+ if (pMga->Chipset == PCI_CHIP_MGAG400 || pMga->Chipset == PCI_CHIP_MGAG550)
+ pci_device_cfg_write_bits(pMga->PciInfo, OPTION3_MASK,
+ state->Option3, PCI_MGA_OPTION3);
+#else
pciSetBitsLong(pMga->PciTag, PCI_OPTION_REG, optionMask,
state->Option);
@@ -688,6 +700,7 @@ state_restore(xf86CrtcPtr crtc, MgaCrtcStatePtr state,
if (pMga->Chipset == PCI_CHIP_MGAG400 || pMga->Chipset == PCI_CHIP_MGAG550)
pciSetBitsLong(pMga->PciTag, PCI_MGA_OPTION3, OPTION3_MASK,
state->Option3);
+#endif
}
/* restore CRTCEXT regs */
@@ -767,11 +780,23 @@ state_save(xf86CrtcPtr crtc, MgaCrtcStatePtr state, int vga_flags)
state->PIXPLLCSaved = TRUE;
+
+#ifdef XSERVER_LIBPCIACCESS
+ pci_device_cfg_read_u32(pMga->PciInfo, &state->Option,
+ PCI_OPTION_REG);
+ pci_device_cfg_read_u32(pMga->PciInfo, &state->Option2,
+ PCI_MGA_OPTION2);
+
+ if (pMga->Chipset == PCI_CHIP_MGAG400 || pMga->Chipset == PCI_CHIP_MGAG550)
+ pci_device_cfg_read_u32(pMga->PciInfo, &state->Option3,
+ PCI_MGA_OPTION3);
+#else
state->Option = pciReadLong(pMga->PciTag, PCI_OPTION_REG);
state->Option2 = pciReadLong(pMga->PciTag, PCI_MGA_OPTION2);
if (pMga->Chipset == PCI_CHIP_MGAG400 || pMga->Chipset == PCI_CHIP_MGAG550)
state->Option3 = pciReadLong(pMga->PciTag, PCI_MGA_OPTION3);
+#endif
for (i = 0; i < 6; i++) {
OUTREG8(MGAREG_CRTCEXT_INDEX, i);
commit 5fa65b9924fbff1e88c6ec229e8deeb687cc9a7d
Author: Tilman Sauerbeck <tilman@code-monkey.de>
Date: Wed Aug 8 13:35:06 2007 +0200
Power off the panel(s) when there's no users.
diff --git a/src/mga_g_output.c b/src/mga_g_output.c
index ff8a7e6..a5cf7e0 100644
--- a/src/mga_g_output.c
+++ b/src/mga_g_output.c
@@ -122,6 +122,8 @@ static const xf86OutputFuncsRec output_panel2_funcs = {
.destroy = output_destroy
};
+static int panel_users = 0;
+
static void
output_dac1_dpms(xf86OutputPtr output, int mode)
{
@@ -230,11 +232,15 @@ output_panel1_dpms(xf86OutputPtr output, int mode)
pwr_ctl = inMGAdac(MGA1064_PWR_CTL);
mask = MGA1064_PWR_CTL_PANEL_EN;
- /* we could drop MGA1064_PWR_CTL_PANEL_EN here,
- * but since that affects _both_ panels, it's somewhat useless.
- */
- if (mode == DPMSModeOn)
+ if (mode == DPMSModeOn) {
+ panel_users |= 1;
outMGAdac(MGA1064_PWR_CTL, pwr_ctl | mask);
+ } else {
+ panel_users &= ~1;
+
+ if (!panel_users)
+ outMGAdac(MGA1064_PWR_CTL, pwr_ctl & ~mask);
+ }
}
static void
@@ -247,13 +253,16 @@ output_panel2_dpms(xf86OutputPtr output, int mode)
mask = MGA1064_PWR_CTL_PANEL_EN;
if (mode == DPMSModeOn) {
+ panel_users |= 2;
+
outMGAdac(MGA1064_PWR_CTL, pwr_ctl | mask);
outMGAdac(MGA1064_DVI_PIPE_CTL, 0x20);
} else {
- /* see above
- *
- * outMGAdac(MGA1064_PWR_CTL, pwr_ctl & ~mask);
- */
+ panel_users &= ~2;
+
+ if (!panel_users)
+ outMGAdac(MGA1064_PWR_CTL, pwr_ctl & ~mask);
+
outMGAdac(MGA1064_DVI_PIPE_CTL, 0x0);
}
}
commit 0802b9147ba9f58be5f3122f7ad1f78018b4db94
Author: Tilman Sauerbeck <tilman@code-monkey.de>
Date: Thu Aug 2 16:16:44 2007 +0200
Removed unused driver options.
diff --git a/src/mga.h b/src/mga.h
index eb371e2..cd69931 100644
--- a/src/mga.h
+++ b/src/mga.h
@@ -44,12 +44,10 @@
#endif
typedef enum {
- OPTION_SW_CURSOR,
OPTION_HW_CURSOR,
OPTION_PCI_RETRY,
OPTION_SYNC_ON_GREEN,
OPTION_NOACCEL,
- OPTION_SHOWCACHE,
OPTION_OVERLAY,
OPTION_MGA_SDRAM,
OPTION_SHADOW_FB,
@@ -59,24 +57,10 @@ typedef enum {
OPTION_OVERCLOCK_MEM,
OPTION_VIDEO_KEY,
OPTION_TEXTURED_VIDEO,
- OPTION_CRTC2HALF,
- OPTION_CRTC2RAM,
OPTION_INT10,
OPTION_AGP_MODE,
OPTION_AGP_SIZE,
- OPTION_DIGITAL1,
- OPTION_DIGITAL2,
- OPTION_TV,
- OPTION_TVSTANDARD,
- OPTION_CABLETYPE,
- OPTION_USEIRQZERO,
- OPTION_SWAPPED_HEAD,
OPTION_DRI,
- OPTION_MERGEDFB,
- OPTION_HSYNC2,
- OPTION_VREFRESH2,
- OPTION_MONITOR2POS,
- OPTION_METAMODES,
OPTION_OLDDMA,
OPTION_PCIDMA,
OPTION_ACCELMETHOD
@@ -402,7 +386,6 @@ typedef struct {
Bool Dac6Bit;
Bool HWCursor;
Bool UsePCIRetry;
- Bool ShowCache;
Bool Overlay8Plus24;
Bool ShadowFB;
unsigned char * ShadowPtr;
diff --git a/src/mga_driver.c b/src/mga_driver.c
index fef67df..d859e2e 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -198,12 +198,10 @@ static PciChipsets MGAPciChipsets[] = {
};
static const OptionInfoRec MGAOptions[] = {
- { OPTION_SW_CURSOR, "SWcursor", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_HW_CURSOR, "HWcursor", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_PCI_RETRY, "PciRetry", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_SYNC_ON_GREEN, "SyncOnGreen", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_NOACCEL, "NoAccel", OPTV_BOOLEAN, {0}, FALSE },
- { OPTION_SHOWCACHE, "ShowCache", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_OVERLAY, "Overlay", OPTV_ANYSTR, {0}, FALSE },
{ OPTION_MGA_SDRAM, "MGASDRAM", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_SHADOW_FB, "ShadowFB", OPTV_BOOLEAN, {0}, FALSE },
@@ -213,23 +211,10 @@ static const OptionInfoRec MGAOptions[] = {
{ OPTION_OVERCLOCK_MEM, "OverclockMem", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_VIDEO_KEY, "VideoKey", OPTV_INTEGER, {0}, FALSE },
{ OPTION_TEXTURED_VIDEO, "TexturedVideo",OPTV_BOOLEAN, {0}, FALSE },
- { OPTION_CRTC2HALF, "Crtc2Half", OPTV_BOOLEAN, {0}, FALSE },
- { OPTION_CRTC2RAM, "Crtc2Ram", OPTV_INTEGER, {0}, FALSE },
{ OPTION_INT10, "Int10", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_AGP_MODE, "AGPMode", OPTV_INTEGER, {0}, FALSE },
{ OPTION_AGP_SIZE, "AGPSize", OPTV_INTEGER, {0}, FALSE },
- { OPTION_DIGITAL1, "DigitalScreen1",OPTV_BOOLEAN, {0}, FALSE },
- { OPTION_DIGITAL2, "DigitalScreen2",OPTV_BOOLEAN, {0}, FALSE },
- { OPTION_TV, "TV", OPTV_BOOLEAN, {0}, FALSE },
- { OPTION_TVSTANDARD, "TVStandard", OPTV_ANYSTR, {0}, FALSE },
- { OPTION_CABLETYPE, "CableType", OPTV_ANYSTR, {0}, FALSE },
- { OPTION_SWAPPED_HEAD, "SwappedHead", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_DRI, "DRI", OPTV_BOOLEAN, {0}, FALSE },
- { OPTION_MERGEDFB, "MergedFB", OPTV_BOOLEAN, {0}, FALSE },
- { OPTION_HSYNC2, "Monitor2HSync", OPTV_ANYSTR, {0}, FALSE },
- { OPTION_VREFRESH2, "Monitor2VRefresh", OPTV_ANYSTR, {0}, FALSE },
- { OPTION_MONITOR2POS, "Monitor2Position", OPTV_ANYSTR, {0}, FALSE },
- { OPTION_METAMODES, "MetaModes", OPTV_ANYSTR, {0}, FALSE },
{ OPTION_OLDDMA, "OldDmaInit", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_PCIDMA, "ForcePciDma", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_ACCELMETHOD, "AccelMethod", OPTV_ANYSTR, {0}, FALSE },
@@ -1455,10 +1440,6 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
pMga->SyncOnGreen = TRUE;
xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Sync-on-Green enabled\n");
}
- if (xf86ReturnOptValBool(pMga->Options, OPTION_SHOWCACHE, FALSE)) {
- pMga->ShowCache = TRUE;
- xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "ShowCache enabled\n");
- }
if (xf86ReturnOptValBool(pMga->Options, OPTION_MGA_SDRAM, FALSE)) {
pMga->HasSDRAM = TRUE;
xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Has SDRAM\n");
@@ -1514,10 +1495,6 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
if (xf86ReturnOptValBool(pMga->Options, OPTION_TEXTURED_VIDEO, FALSE)) {
pMga->TexturedVideo = TRUE;
}
- if (xf86ReturnOptValBool(pMga->Options, OPTION_MERGEDFB, FALSE)) {
- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
- "\"Merged Framebuffer\" mode not supported.\n");
- }
if (pMga->FBDev) {
/* check for linux framebuffer device */
if (!xf86LoadSubModule(pScrn, "fbdevhw"))
commit aeda6773a4d92d498fe439716733db5ea189ab0d
Author: Tilman Sauerbeck <tilman@code-monkey.de>
Date: Thu Aug 2 16:06:10 2007 +0200
Removed documentation for the NoHal option.
diff --git a/man/mga.man b/man/mga.man
index abc9ae0..259b5ec 100644
--- a/man/mga.man
+++ b/man/mga.man
@@ -115,10 +115,6 @@ the Render and Composite extensions, but the rendering code for it is newer and
possibly unstable. The default is
.B XAA.
.TP
-.BI "Option \*qNoHal\*q \*q" boolean \*q
-Disable or enable loading the "mga_hal" module. Default: the module is
-loaded when available and when using hardware that it supports.
-.TP
.BI "Option \*qOverclockMem\*q"
Set clocks to values used by some commercial X Servers (G100, G200 and G400
only). Default: off.
commit 2bc283e9fccb3de49ff2a7819f89f6a173af6024
Author: Tilman Sauerbeck <tilman@code-monkey.de>
Date: Thu Aug 2 16:01:14 2007 +0200
Removed unused MGA_DH_NEEDS_HAL macro.
diff --git a/src/mga_macros.h b/src/mga_macros.h
index 36690d1..404501f 100644
--- a/src/mga_macros.h
+++ b/src/mga_macros.h
@@ -64,7 +64,4 @@ while(INREG(MGAREG_DWGSYNC) != MGA_SYNC_XTAG) ; \
#define MGAISGx50(x) ((x)->is_Gx50)
-#define MGA_DH_NEEDS_HAL(x) (((x)->Chipset == PCI_CHIP_MGAG400) && \
- ((x)->ChipRev < 0x80))
-
#endif /* _MGA_MACROS_H_ */
commit 7e0511a17127f1051ee1b5489d292f2ff304ce26
Author: Tilman Sauerbeck <tilman@code-monkey.de>
Date: Thu Aug 2 00:30:17 2007 +0200
Added (broken) support for the second output on G550 dual-dvi.
This still has the original problem that a horizontal and vertical
offset is applied to that output.
I also renamed the "Panel" outputs to "DVI".
diff --git a/src/mga.h b/src/mga.h
index 30569c3..eb371e2 100644
--- a/src/mga.h
+++ b/src/mga.h
@@ -644,7 +644,8 @@ Bool MgaGCrtc2Init(ScrnInfoPtr pScrn);
xf86OutputPtr MgaGOutputDac1Init(ScrnInfoPtr pScrn, Bool number);
xf86OutputPtr MgaGOutputDac2Init(ScrnInfoPtr pScrn, Bool number);
-xf86OutputPtr MgaGOutputPanelInit(ScrnInfoPtr pScrn);
+xf86OutputPtr MgaGOutputPanel1Init(ScrnInfoPtr pScrn, Bool number);
+xf86OutputPtr MgaGOutputPanel2Init(ScrnInfoPtr pScrn, Bool number);
static __inline__ void
MGA_MARK_SYNC(MGAPtr pMga, ScrnInfoPtr pScrn)
diff --git a/src/mga_driver.c b/src/mga_driver.c
index eeca190..fef67df 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -1080,14 +1080,15 @@ setup_g_outputs(ScrnInfoPtr scrn)
{
MGAPtr pMga;
xf86OutputPtr output;
- Bool number_vga = FALSE;
+ Bool number_vga = FALSE, number_dvi = FALSE;
pMga = MGAPTR(scrn);
/* first output */
switch (pMga->bios.connector[0]) {
case MGA_CONNECTOR_DVI:
- output = MgaGOutputPanelInit (scrn);
+ number_dvi = pMga->bios.connector[1] == MGA_CONNECTOR_DVI;
+ output = MgaGOutputPanel1Init (scrn, number_dvi);
break;
default:
/* in case PInS doesn't contain connector info
@@ -1107,6 +1108,9 @@ setup_g_outputs(ScrnInfoPtr scrn)
case MGA_CONNECTOR_HD15:
output = MgaGOutputDac2Init (scrn, number_vga);
break;
+ case MGA_CONNECTOR_DVI:
+ output = MgaGOutputPanel2Init (scrn, number_dvi);
+ break;
default:
output = NULL;
break;
diff --git a/src/mga_g_output.c b/src/mga_g_output.c
index 0914423..ff8a7e6 100644
--- a/src/mga_g_output.c
+++ b/src/mga_g_output.c
@@ -44,7 +44,8 @@ typedef struct {
static void output_dac1_dpms(xf86OutputPtr output, int mode);
static void output_dac2_dpms(xf86OutputPtr output, int mode);
-static void output_panel_dpms(xf86OutputPtr output, int mode);
+static void output_panel1_dpms(xf86OutputPtr output, int mode);
+static void output_panel2_dpms(xf86OutputPtr output, int mode);
static void output_save(xf86OutputPtr output);
static void output_restore(xf86OutputPtr output);
static void output_panel_restore(xf86OutputPtr output);
@@ -56,8 +57,10 @@ static void output_mode_set(xf86OutputPtr output, DisplayModePtr mode,
DisplayModePtr adjusted_mode);
static void output_dac2_mode_set(xf86OutputPtr output, DisplayModePtr mode,
DisplayModePtr adjusted_mode);
-static void output_panel_mode_set(xf86OutputPtr output, DisplayModePtr mode,
- DisplayModePtr adjusted_mode);
+static void output_panel1_mode_set(xf86OutputPtr output, DisplayModePtr mode,
+ DisplayModePtr adjusted_mode);
+static void output_panel2_mode_set(xf86OutputPtr output, DisplayModePtr mode,
+ DisplayModePtr adjusted_mode);
static void output_commit(xf86OutputPtr output);
static xf86OutputStatus output_detect(xf86OutputPtr output);
static DisplayModePtr output_get_modes(xf86OutputPtr output);
@@ -91,14 +94,28 @@ static const xf86OutputFuncsRec output_dac2_funcs = {
.destroy = output_destroy
};
-static const xf86OutputFuncsRec output_panel_funcs = {
- .dpms = output_panel_dpms,
+static const xf86OutputFuncsRec output_panel1_funcs = {
+ .dpms = output_panel1_dpms,
.save = output_save,
.restore = output_panel_restore,
.mode_valid = output_mode_valid,
.mode_fixup = output_mode_fixup,
.prepare = output_prepare,
- .mode_set = output_panel_mode_set,
+ .mode_set = output_panel1_mode_set,
+ .commit = output_commit,
+ .detect = output_detect,
+ .get_modes = output_get_modes,
+ .destroy = output_destroy
+};
+
+static const xf86OutputFuncsRec output_panel2_funcs = {
+ .dpms = output_panel2_dpms,
+ .save = output_save,
+ .restore = output_panel_restore,
+ .mode_valid = output_mode_valid,
+ .mode_fixup = output_mode_fixup,
+ .prepare = output_prepare,
+ .mode_set = output_panel2_mode_set,
.commit = output_commit,
.detect = output_detect,
.get_modes = output_get_modes,
@@ -205,7 +222,7 @@ output_dac2_dpms(xf86OutputPtr output, int mode)
}
static void
-output_panel_dpms(xf86OutputPtr output, int mode)
+output_panel1_dpms(xf86OutputPtr output, int mode)
{
MGAPtr pMga = MGAPTR(output->scrn);
CARD8 pwr_ctl, mask;
@@ -221,6 +238,27 @@ output_panel_dpms(xf86OutputPtr output, int mode)
}
static void
+output_panel2_dpms(xf86OutputPtr output, int mode)
+{
+ MGAPtr pMga = MGAPTR(output->scrn);
+ CARD8 pwr_ctl, mask;
+
+ pwr_ctl = inMGAdac(MGA1064_PWR_CTL);
+ mask = MGA1064_PWR_CTL_PANEL_EN;
+
+ if (mode == DPMSModeOn) {
+ outMGAdac(MGA1064_PWR_CTL, pwr_ctl | mask);
+ outMGAdac(MGA1064_DVI_PIPE_CTL, 0x20);
+ } else {
+ /* see above
+ *
+ * outMGAdac(MGA1064_PWR_CTL, pwr_ctl & ~mask);
+ */
+ outMGAdac(MGA1064_DVI_PIPE_CTL, 0x0);
+ }
+}
+
+static void
output_save(xf86OutputPtr output)
{
}
@@ -320,7 +358,7 @@ get_pan_ctl_value(xf86OutputPtr output, DisplayModePtr mode)
}
static void
-output_panel_mode_set(xf86OutputPtr output, DisplayModePtr mode,
+output_panel1_mode_set(xf86OutputPtr output, DisplayModePtr mode,
DisplayModePtr adjusted_mode)
{
MGAPtr pMga = MGAPTR(output->scrn);
@@ -339,7 +377,12 @@ output_panel_mode_set(xf86OutputPtr output, DisplayModePtr mode,
disp_ctl |= MGA1064_DISP_CTL_PANOUTSEL_CRTC2RGB;
outMGAdac(MGA1064_DISP_CTL, disp_ctl);
+}
+static void
+output_panel2_mode_set(xf86OutputPtr output, DisplayModePtr mode,
+ DisplayModePtr adjusted_mode)
+{
}
static xf86OutputStatus
@@ -424,17 +467,18 @@ MgaGOutputDac2Init(ScrnInfoPtr scrn, Bool number)
}
xf86OutputPtr
-MgaGOutputPanelInit(ScrnInfoPtr scrn)
+MgaGOutputPanel1Init(ScrnInfoPtr scrn, Bool number)
{
MGAPtr pMga = MGAPTR(scrn);
xf86OutputPtr output;
MgaOutputDataPtr data;
+ const char *name = number ? "DVI1" : "DVI";
data = xnfcalloc(sizeof(MgaOutputDataRec), 1);
if (!data)
return NULL;
- output = xf86OutputCreate(scrn, &output_panel_funcs, "Panel");
+ output = xf86OutputCreate(scrn, &output_panel1_funcs, name);
if (!output) {
xfree(data);
return NULL;
@@ -446,3 +490,28 @@ MgaGOutputPanelInit(ScrnInfoPtr scrn)
return output;
}
+
+xf86OutputPtr
+MgaGOutputPanel2Init(ScrnInfoPtr scrn, Bool number)
+{
+ MGAPtr pMga = MGAPTR(scrn);
+ xf86OutputPtr output;
+ MgaOutputDataPtr data;
+ const char *name = number ? "DVI2" : "DVI";
+
+ data = xnfcalloc(sizeof(MgaOutputDataRec), 1);
+ if (!data)
+ return NULL;
+
+ output = xf86OutputCreate(scrn, &output_panel2_funcs, name);
+ if (!output) {
+ xfree(data);
+ return NULL;
+ }
+
+ output->driver_private = data;
+
+ data->ddc_bus = pMga->DDC_Bus2;
+
+ return output;
+}
commit 45033be06ccf71dd8db707c8704012102fdef2da
Author: Tilman Sauerbeck <tilman@code-monkey.de>
Date: Wed Aug 1 22:55:05 2007 +0200
Only number outputs if necessary.
diff --git a/src/mga.h b/src/mga.h
index 7c1eb22..30569c3 100644
--- a/src/mga.h
+++ b/src/mga.h
@@ -642,8 +642,8 @@ xf86OutputPtr Mga2064OutputInit(ScrnInfoPtr pScrn);
Bool MgaGCrtc1Init(ScrnInfoPtr pScrn);
Bool MgaGCrtc2Init(ScrnInfoPtr pScrn);
-xf86OutputPtr MgaGOutputDac1Init(ScrnInfoPtr pScrn);
-xf86OutputPtr MgaGOutputDac2Init(ScrnInfoPtr pScrn);
+xf86OutputPtr MgaGOutputDac1Init(ScrnInfoPtr pScrn, Bool number);
+xf86OutputPtr MgaGOutputDac2Init(ScrnInfoPtr pScrn, Bool number);
xf86OutputPtr MgaGOutputPanelInit(ScrnInfoPtr pScrn);
static __inline__ void
diff --git a/src/mga_2064_output.c b/src/mga_2064_output.c
index d2d148c..e344b6a 100644
--- a/src/mga_2064_output.c
+++ b/src/mga_2064_output.c
@@ -182,7 +182,7 @@ Mga2064OutputInit(ScrnInfoPtr scrn)
if (!data)
return NULL;
- output = xf86OutputCreate(scrn, &output_funcs, "VGA 1");
+ output = xf86OutputCreate(scrn, &output_funcs, "VGA");
if (!output) {
xfree(data);
return NULL;
diff --git a/src/mga_driver.c b/src/mga_driver.c
index ac23634..eeca190 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -1080,6 +1080,7 @@ setup_g_outputs(ScrnInfoPtr scrn)
{
MGAPtr pMga;
xf86OutputPtr output;
+ Bool number_vga = FALSE;
pMga = MGAPTR(scrn);
@@ -1093,7 +1094,8 @@ setup_g_outputs(ScrnInfoPtr scrn)
* or it claims there's no primary output
* we just assume it's VGA.
*/
- output = MgaGOutputDac1Init (scrn);
+ number_vga = pMga->bios.connector[1] == MGA_CONNECTOR_HD15;
+ output = MgaGOutputDac1Init (scrn, number_vga);
break;
}
@@ -1103,7 +1105,7 @@ setup_g_outputs(ScrnInfoPtr scrn)
/* second output */
switch (pMga->bios.connector[1]) {
case MGA_CONNECTOR_HD15:
- output = MgaGOutputDac2Init (scrn);
+ output = MgaGOutputDac2Init (scrn, number_vga);
break;
default:
output = NULL;
diff --git a/src/mga_g_output.c b/src/mga_g_output.c
index 2234219..0914423 100644
--- a/src/mga_g_output.c
+++ b/src/mga_g_output.c
@@ -374,17 +374,18 @@ output_destroy(xf86OutputPtr output)
}
xf86OutputPtr
-MgaGOutputDac1Init(ScrnInfoPtr scrn)
+MgaGOutputDac1Init(ScrnInfoPtr scrn, Bool number)
{
MGAPtr pMga = MGAPTR(scrn);
xf86OutputPtr output;
MgaOutputDataPtr data;
+ const char *name = number ? "VGA1" : "VGA";
data = xnfcalloc(sizeof(MgaOutputDataRec), 1);
if (!data)
return NULL;
- output = xf86OutputCreate(scrn, &output_dac1_funcs, "VGA1");
+ output = xf86OutputCreate(scrn, &output_dac1_funcs, name);
if (!output) {
xfree(data);
return NULL;
@@ -398,17 +399,18 @@ MgaGOutputDac1Init(ScrnInfoPtr scrn)
}
xf86OutputPtr
-MgaGOutputDac2Init(ScrnInfoPtr scrn)
+MgaGOutputDac2Init(ScrnInfoPtr scrn, Bool number)
{
MGAPtr pMga = MGAPTR(scrn);
xf86OutputPtr output;
MgaOutputDataPtr data;
+ const char *name = number ? "VGA2" : "VGA";
data = xnfcalloc(sizeof(MgaOutputDataRec), 1);
if (!data)
return NULL;
- output = xf86OutputCreate(scrn, &output_dac2_funcs, "VGA2");
+ output = xf86OutputCreate(scrn, &output_dac2_funcs, name);
if (!output) {
xfree(data);
return NULL;
@@ -432,7 +434,7 @@ MgaGOutputPanelInit(ScrnInfoPtr scrn)
if (!data)
return NULL;
- output = xf86OutputCreate(scrn, &output_panel_funcs, "Panel1");
+ output = xf86OutputCreate(scrn, &output_panel_funcs, "Panel");
if (!output) {
xfree(data);
return NULL;
commit cda9ccbe2723c13052f48aed516f07263a02d347
Author: Tilman Sauerbeck <tilman@code-monkey.de>
Date: Wed Aug 1 22:31:47 2007 +0200
Fixed CRTC and output instantiation.
Now the G-class crtc and outputs are actually only used on G-class
cards. Also hooked up the 2064 crtc and output.
diff --git a/src/mga.h b/src/mga.h
index 43595a3..7c1eb22 100644
--- a/src/mga.h
+++ b/src/mga.h
@@ -636,6 +636,9 @@ void MGAG200SESaveMode(ScrnInfoPtr, vgaRegPtr);
void MGAG200SERestoreMode(ScrnInfoPtr, vgaRegPtr);
void MGAG200SEHWProtect(ScrnInfoPtr, Bool);
+Bool Mga2064CrtcInit(ScrnInfoPtr pScrn);
+xf86OutputPtr Mga2064OutputInit(ScrnInfoPtr pScrn);
+
Bool MgaGCrtc1Init(ScrnInfoPtr pScrn);
Bool MgaGCrtc2Init(ScrnInfoPtr pScrn);
diff --git a/src/mga_2064_crtc.c b/src/mga_2064_crtc.c
index fa4fb1f..1230420 100644
--- a/src/mga_2064_crtc.c
+++ b/src/mga_2064_crtc.c
@@ -919,3 +919,24 @@ crtc_destroy(xf86CrtcPtr crtc)
if (crtc->driver_private)
xfree (crtc->driver_private);
}
+
+Bool
+Mga2064CrtcInit(ScrnInfoPtr scrn)
+{
+ xf86CrtcPtr crtc;
+ MgaCrtcDataPtr data;
+
+ data = xnfcalloc (sizeof (MgaCrtcDataRec), 1);
+ if (!data)
+ return FALSE;
+
+ crtc = xf86CrtcCreate (scrn, &crtc_funcs);
+ if (!crtc) {
Reply to: