⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atiprobe.c

📁 x.org上有关ati系列显卡最新驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
                                " not be enabled\n because it conflicts with"                                " another %s Mach64 at sparse I/O base"                                " 0x%04lX.\n",                                pVideo->bus, pVideo->device, pVideo->func,                                ATIBusNames[pATI->BusType],                                Mach64SparseIOBases[j]);                        break;#endif /* AVOID_NON_PCI */                    default:        /* Must be DoProbe */                        if (!xf86CheckPciSlot(pVideo->bus,                                              pVideo->device,                                              pVideo->func))                            continue;                        /* Possibly fix block I/O indicator */                        if (PciReg & 0x00000004U)                            pciWriteLong(pPCI->tag, PCI_REG_USERCONFIG,                                PciReg & ~0x00000004U);                        xf86SetPciVideo(pVideo, MEM_IO);                        Chip = ATIChipID(pVideo->chipType, pVideo->chipRev);                        pATI = ATIMach64Probe(pVideo, Mach64SparseIOBases[j],                            SPARSE_IO, Chip);                        if (!pATI)                        {                            xf86Msg(X_WARNING,                                ATI_NAME ":  PCI Mach64 in slot %d:%d:%d could"                                " not be detected!\n",                                pVideo->bus, pVideo->device, pVideo->func);                        }                        else                        {                            sprintf(Identifier,                                "Shared PCI Mach64 in slot %d:%d:%d",                                pVideo->bus, pVideo->device, pVideo->func);                            xf86MsgVerb(X_INFO, 3,                                ATI_NAME ":  %s with sparse PIO base 0x%04lX"                                " detected.\n", Identifier,                                Mach64SparseIOBases[j]);                            AddAdapter(pATI);                            pATI->SharedAccelerator = TRUE;                            pATI->PCIInfo = pVideo;                            if (pATI->VGAAdapter != ATI_ADAPTER_NONE)                                ATIFindVGA(pVideo, &pVGA, &pATI, p8514,                                    ProbeFlags);                        }                        xf86SetPciVideo(NULL, NONE);                        break;                }            }#else /* AVOID_CPIO */            for (i = 0;  (pVideo = xf86PciVideoInfo[i++]);  )            {                if ((pVideo->vendor != PCI_VENDOR_ATI) ||                    (pVideo->chipType == PCI_CHIP_MACH32) ||                    pVideo->size[1])                    continue;                /* Check if this one has already been detected */                for (j = 0;  j < nATIPtr;  j++)                {                    pATI = ATIPtrs[j];                    if (pATI->PCIInfo == pVideo)                        goto SkipThisSlot;                }                if (!xf86CheckPciSlot(pVideo->bus,                                      pVideo->device,                                      pVideo->func))                    continue;                xf86SetPciVideo(pVideo, MEM_IO);                Chip = ATIChipID(pVideo->chipType, pVideo->chipRev);                /* The adapter's CPIO base is of little concern here */                pATI = ATIMach64Probe(pVideo, 0, SPARSE_IO, Chip);                if (pATI)                {                    sprintf(Identifier, "Shared PCI Mach64 in slot %d:%d:%d",                        pVideo->bus, pVideo->device, pVideo->func);                    xf86MsgVerb(X_INFO, 3,                        ATI_NAME ":  %s with Block 0 base 0x%08lX detected.\n",                        Identifier, pATI->Block0Base);                    AddAdapter(pATI);                    pATI->SharedAccelerator = TRUE;                    pATI->PCIInfo = pVideo;                }                else                {                    xf86Msg(X_WARNING,                        ATI_NAME ":  PCI Mach64 in slot %d:%d:%d could not be"                        " detected!\n",                        pVideo->bus, pVideo->device, pVideo->func);                }                xf86SetPciVideo(NULL, NONE);        SkipThisSlot:;            }#endif /* AVOID_CPIO */        }        /* Lastly, look for block I/O devices */        for (i = 0;  (pVideo = xf86PciVideoInfo[i++]);  )        {            if ((pVideo->vendor != PCI_VENDOR_ATI) ||                (pVideo->chipType == PCI_CHIP_MACH32) ||                !pVideo->size[1])                continue;            /* Check for Rage128's, Radeon's and later adapters */            Chip = ATIChipID(pVideo->chipType, pVideo->chipRev);            if (Chip > ATI_CHIP_Mach64)            {                if (Chip <= ATI_CHIP_Rage128)                    DoRage128 = TRUE;                else if (Chip <= ATI_CHIP_Radeon)                    DoRadeon = TRUE;                continue;            }            if (!nATIGDev)                continue;            /* Check if this one has already been detected */            for (j = 0;  j < nATIPtr;  j++)            {                pATI = ATIPtrs[j];                if (pATI->CPIOBase == pVideo->ioBase[1])                    goto SetPCIInfo;            }            if (!xf86CheckPciSlot(pVideo->bus, pVideo->device, pVideo->func))                continue;            /* Probe for it */            xf86SetPciVideo(pVideo, MEM_IO);            pATI = ATIMach64Probe(pVideo, pVideo->ioBase[1], BLOCK_IO, Chip);            if (pATI)            {                sprintf(Identifier, "Shared PCI/AGP Mach64 in slot %d:%d:%d",                    pVideo->bus, pVideo->device, pVideo->func);                xf86MsgVerb(X_INFO, 3, ATI_NAME ":  %s detected.\n",                    Identifier);                AddAdapter(pATI);                pATI->SharedAccelerator = TRUE;#ifndef AVOID_CPIO                if (pATI->VGAAdapter != ATI_ADAPTER_NONE)                    ATIFindVGA(pVideo, &pVGA, &pATI, p8514, ProbeFlags);#endif /* AVOID_CPIO */            }            xf86SetPciVideo(NULL, NONE);            if (!pATI)            {                xf86Msg(X_WARNING,                    ATI_NAME ":  PCI/AGP Mach64 in slot %d:%d:%d could not be"                    " detected!\n", pVideo->bus, pVideo->device, pVideo->func);                continue;            }        SetPCIInfo:            pATI->PCIInfo = pVideo;        }    }#ifndef AVOID_CPIO    /*     * At this point, if there's a non-shareable VGA with its own framebuffer,     * find out if it's an ATI VGA Wonder.     */    do    {        if (!nATIGDev || !pVGA || (pVGA->VGAAdapter > ATI_ADAPTER_VGA))            break;        /* If it has not been assigned to a coprocessor, keep track of it */        if (pVGA->Coprocessor == ATI_CHIP_NONE)            AddAdapter(pVGA);        /*         * A VGA should have installed its int 10 vector.  Use that to find the         * VGA BIOS.  If this fails, scan all legacy BIOS segments, in 512-byte         * increments.         */        if (xf86ReadBIOS(0U, 0x42U, BIOS, 2) != 2)            goto NoVGAWonder;        pATI = NULL;        BIOSBase = 0;        if (!(BIOS[0] & 0x1FU)) /* Otherwise there's no 512-byte alignment */            BIOSBase = ((BIOS[1] << 8) | BIOS[0]) << 4;        /* Look for its BIOS */        for(;  ;  BIOSBase += 0x00000200U)        {            if (!BIOSBase)                goto SkipBiosSegment;            if (BIOSBase >= 0x000F8000U)                goto NoVGAWonder;            /* Skip over those that are already known */            for (i = 0;  i < nATIPtr;  i++)                if (ATIPtrs[i]->BIOSBase == BIOSBase)                    goto SkipBiosSegment;            /* Get first 80 bytes of video BIOS */            if (xf86ReadBIOS(BIOSBase, 0, BIOS, SizeOf(BIOS)) !=                SizeOf(BIOS))                goto NoVGAWonder;            if ((BIOS[0x00U] != 0x55U) || (BIOS[0x01U] != 0xAAU))                goto SkipBiosSegment;            if ((BIOS[0x1EU] == 'I') &&                (BIOS[0x1FU] == 'B') &&                (BIOS[0x20U] == 'M'))                break;            /* XXX Should PCI BIOS signature be checked for here ? */            if ((BIOS[0x20U] == 'P') &&                (BIOS[0x21U] == 'C') &&                (BIOS[0x22U] == 'I'))                break;    SkipBiosSegment:            if (pATI)                continue;            pATI = pVGA;            BIOSBase = 0x000C0000U - 0x00000200U;        }        pVGA->BIOSBase = BIOSBase;        /* Look for the ATI signature string */        if (memcmp(BIOS + BIOSSignature, ATISignature, SignatureSize))            break;        if (BIOS[0x40U] != '3')            break;        switch (BIOS[0x41U])        {            case '1':                /* This is a Mach8 or VGA Wonder adapter of some kind */                if ((BIOS[0x43U] >= '1') && (BIOS[0x43U] <= '6'))                    pVGA->Chip = BIOS[0x43U] - ('1' - ATI_CHIP_18800);                switch (BIOS[0x43U])                {                    case '1':   /* ATI_CHIP_18800 */                        pVGA->VGAOffset = 0xB0U;                        pVGA->VGAAdapter = ATI_ADAPTER_V3;                        break;                    case '2':   /* ATI_CHIP_18800_1 */                        pVGA->VGAOffset = 0xB0U;                        if (BIOS[0x42U] & 0x10U)                            pVGA->VGAAdapter = ATI_ADAPTER_V5;                        else                            pVGA->VGAAdapter = ATI_ADAPTER_V4;                        break;                    case '3':   /* ATI_CHIP_28800_2 */                    case '4':   /* ATI_CHIP_28800_4 */                    case '5':   /* ATI_CHIP_28800_5 */                    case '6':   /* ATI_CHIP_28800_6 */                        pVGA->VGAOffset = 0xA0U;                        if (BIOS[0x44U] & 0x80U)                            pVGA->VGAAdapter = ATI_ADAPTER_XL;                        else                            pVGA->VGAAdapter = ATI_ADAPTER_PLUS;                        break;                    case 'a':   /* A crippled Mach32 */                    case 'b':                    case 'c':                        pVGA->VGAOffset = 0x80U;                        pVGA->VGAAdapter = ATI_ADAPTER_NONISA;                        ATIMach32ChipID(pVGA);                        ProbeWaitIdleEmpty();                        if (inw(SUBSYS_STAT) != (CARD16)(-1))                            pVGA->ChipHasSUBSYS_CNTL = TRUE;                        break;#if 0                    case ' ':   /* A crippled Mach64 */                        pVGA->VGAOffset = 0x80U;                        pVGA->VGAAdapter = ATI_ADAPTER_NONISA;                        ATIMach64ChipID(pVGA, 0);                        break;#endif                    default:                        break;                }                if (pVGA->VGAAdapter == ATI_ADAPTER_NONE)                    break;                /* Set VGA Wonder I/O port */                pVGA->CPIO_VGAWonder = BIOSWord(0x10U) & SPARSE_IO_PORT;                if (!pVGA->CPIO_VGAWonder)                    pVGA->CPIO_VGAWonder = 0x01CEU;                ATIVGAWonderProbe(NULL, pVGA, p8514, ProbeFlags);                break;#if 0            case '2':                pVGA->VGAOffset = 0xB0U;            /* Presumably */                pVGA->VGAAdapter = ATI_ADAPTER_EGA_PLUS;                break;            case '3':                pVGA->VGAOffset = 0xB0U;            /* Presumably */                pVGA->VGAAdapter = ATI_ADAPTER_BASIC;                break;            case '?':           /* A crippled Mach64 */                pVGA->VGAAdapter = ATI_ADAPTER_NONISA;                ATIMach64ChipID(pVGA, 0);                break;#endif            default:                break;        }        if (pVGA->Adapter <= ATI_ADAPTER_VGA)            pVGA->Adapter = pVGA->VGAAdapter;NoVGAWonder:;    } while (0);#endif /* AVOID_CPIO */    /*     * Re-order list of detected devices so that the primary device is before     * any other PCI device.     */    for (i = 0;  i < nATIPtr;  i++)    {        if (!ATIPtrs[i]->PCIInfo)            continue;        for (j = i;  j < nATIPtr;  j++)        {            pATI = ATIPtrs[j];            if (!xf86IsPrimaryPci(pATI->PCIInfo))                continue;            for (;  j > i;  j--)                ATIPtrs[j] = ATIPtrs[j - 1];            ATIPtrs[j] = pATI;            break;        }        break;    }    if (flags & PROBE_DETECT)    {        /*         * No XF86Config information available, so use the default Chipset of         * "ati", and as many device sections as there are adapters.         */        for (i = 0;  i < nATIPtr;  i++)        {            pATI = ATIPtrs[i];#ifndef AVOID_CPIO            if ((pATI->Adapter != ATI_ADAPTER_VGA) &&                ((pATI->Adapter != ATI_ADAPTER_8514A) ||                 ((pATI->VGAAdapter != ATI_ADAPTER_VGA) &&                  (pATI->VGAAdapter != ATI_ADAPTER_NONE))))#endif /* AVOID_CPIO */            {                ProbeSuccess = TRUE;                pGDev = xf86AddDeviceToConfigure(ATI_DRIVER_NAME,                    pATI->PCIInfo, ATI_CHIPSET_ATI);                if (pGDev)                {                    /* Fill in additional information */       

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -