Index: helper_exec.c =================================================================== RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/int10/helper_exec.c,v retrieving revision 1.3 diff -u -r1.3 helper_exec.c --- helper_exec.c 1 Apr 2005 20:21:38 -0000 1.3 +++ helper_exec.c 27 Apr 2005 14:16:24 -0000 @@ -25,6 +25,10 @@ static int pciCfg1in(CARD16 addr, CARD32 *val); static int pciCfg1out(CARD16 addr, CARD32 val); +static int pciCfg1inw(CARD16 addr, CARD16 *val); +static int pciCfg1outw(CARD16 addr, CARD16 val); +static int pciCfg1inb(CARD16 addr, CARD8 *val); +static int pciCfg1outb(CARD16 addr, CARD8 val); #if defined (_PC) static void SetResetBIOSVars(xf86Int10InfoPtr pInt, Bool set); #endif @@ -319,7 +323,8 @@ } #endif /* __NOT_YET__ */ } else { - val = inb(Int10Current->ioBase + port); + if (!pciCfg1inb(port, &val)) + val = inb(Int10Current->ioBase + port); #ifdef PRINT_PORT ErrorF(" inb(%#x) = %2.2x\n", port, val); #endif @@ -341,7 +346,8 @@ (void)getsecs(&sec, &usec); val = (CARD16)(usec / 3); } else { - val = inw(Int10Current->ioBase + port); + if (!pciCfg1inw(port, &val)) + val = inw(Int10Current->ioBase + port); } #ifdef PRINT_PORT ErrorF(" inw(%#x) = %4.4x\n", port, val); @@ -378,7 +384,8 @@ #ifdef PRINT_PORT ErrorF(" outb(%#x, %2.2x)\n", port, val); #endif - outb(Int10Current->ioBase + port, val); + if (!pciCfg1outb(port, val)) + outb(Int10Current->ioBase + port, val); } } @@ -389,7 +396,8 @@ ErrorF(" outw(%#x, %4.4x)\n", port, val); #endif - outw(Int10Current->ioBase + port, val); + if (!pciCfg1outw(port, val)) + outw(Int10Current->ioBase + port, val); } CARD32 @@ -486,6 +494,64 @@ return 0; } +static int +pciCfg1inw(CARD16 addr, CARD16 *val) +{ + if (addr == 0xCF8) { + *val = PciCfg1Addr & 0xffff; + return 1; + } + if (addr == 0xCFC) { + *val = pciReadWord(TAG(PciCfg1Addr), OFFSET(PciCfg1Addr)); + return 1; + } + return 0; +} + +static int +pciCfg1outw(CARD16 addr, CARD16 val) +{ + if (addr == 0xCF8) { + PciCfg1Addr &= 0xffff0000; + PciCfg1Addr |= val; + return 1; + } + if (addr == 0xCFC) { + pciWriteWord(TAG(PciCfg1Addr), OFFSET(PciCfg1Addr),val); + return 1; + } + return 0; +} + +static int +pciCfg1inb(CARD16 addr, CARD8 *val) +{ + if (addr == 0xCF8) { + *val = PciCfg1Addr & 0xff; + return 1; + } + if (addr == 0xCFC) { + *val = pciReadByte(TAG(PciCfg1Addr), OFFSET(PciCfg1Addr)); + return 1; + } + return 0; +} + +static int +pciCfg1outb(CARD16 addr, CARD8 val) +{ + if (addr == 0xCF8) { + PciCfg1Addr &= 0xffffff00; + PciCfg1Addr |= val; + return 1; + } + if (addr == 0xCFC) { + pciWriteByte(TAG(PciCfg1Addr), OFFSET(PciCfg1Addr),val); + return 1; + } + return 0; +} + CARD8 bios_checksum(CARD8 *start, int size) {