#include "ati.h"
#include "atiadapter.h"
#include "atibus.h"
#include "atichip.h"
#include "atiio.h"
#include "atistruct.h"
#include "ativersion.h"
const char *ATIBusNames[] =
{
"16-Bit ISA",
"EISA",
"16-Bit MicroChannel",
"32-Bit MicroChannel",
"386SX Local Bus",
"386DX Local Bus",
"VESA Local Bus",
"PCI",
"AGP"
};
static void
ATIClaimResources
(
ATIPtr pATI,
Bool Active
)
{
resPtr pResources;
#ifndef AVOID_CPIO
resRange Resources[2] = {{0, 0, 0}, _END};
if ((pATI->VGAAdapter != ATI_ADAPTER_NONE) && (Active || !pATI->SharedVGA))
{
xf86ClaimFixedResources(
(pATI->Chip <= ATI_CHIP_18800_1) ?
(pATI->SharedVGA ? resVgaSparseShared : resVgaSparseExclusive) :
(pATI->SharedVGA ? resVgaShared : resVgaExclusive),
pATI->iEntity);
if (pATI->CPIO_VGAWonder)
{
if (pATI->SharedVGA)
Resources[0].type = ResShrIoSparse | ResBus;
else
Resources[0].type = ResExcIoSparse | ResBus;
Resources[0].rBase = pATI->CPIO_VGAWonder;
if (pATI->Chip <= ATI_CHIP_18800_1)
Resources[0].rMask = 0x03FEU;
else
Resources[0].rMask = 0xF3FEU;
xf86ClaimFixedResources(Resources, pATI->iEntity);
(void)memcpy(pATI->VGAWonderResources,
Resources, SizeOf(Resources));
}
}
if (!Active && pATI->SharedAccelerator)
return;
if (pATI->ChipHasSUBSYS_CNTL)
xf86ClaimFixedResources(
pATI->SharedAccelerator ? res8514Shared : res8514Exclusive,
pATI->iEntity);
if ((pATI->Adapter == ATI_ADAPTER_MACH64) &&
(pATI->CPIODecoding == SPARSE_IO))
{
if (pATI->SharedAccelerator)
Resources[0].type = ResShrIoSparse | ResBus;
else
Resources[0].type = ResExcIoSparse | ResBus;
Resources[0].rBase = pATI->CPIOBase;
Resources[0].rMask = 0x03FCU;
xf86ClaimFixedResources(Resources, pATI->iEntity);
}
if (Active)
return;
#else
if (pATI->SharedAccelerator)
return;
#endif
do
{
pResources = xf86RegisterResources(pATI->iEntity, NULL, ResExclusive);
if (!pResources)
return;
pResources = xf86ReallocatePciResources(pATI->iEntity, pResources);
} while (!pResources);
xf86Msg(X_WARNING,
ATI_NAME ": Unable to register the following resources for inactive"
" adapter:\n");
xf86PrintResList(1, pResources);
xf86FreeResList(pResources);
}
int
ATIClaimBusSlot
(
DriverPtr pDriver,
int Chipset,
GDevPtr pGDev,
Bool Active,
ATIPtr pATI
)
{
pciVideoPtr pVideo = pATI->PCIInfo;
if (pVideo)
pATI->iEntity =
xf86ClaimPciSlot(pVideo->bus, pVideo->device, pVideo->func,
pDriver, Chipset, pGDev, Active);
else
pATI->iEntity = xf86ClaimIsaSlot(pDriver, Chipset, pGDev, Active);
if (pATI->iEntity >= 0)
ATIClaimResources(pATI, Active);
return pATI->iEntity;
}