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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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) { -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]