2008-12-08 09:22:59 +03:00
|
|
|
|
|
|
|
#define PCI_CLASS_BRIDGE_HOST 0x06
|
|
|
|
|
|
|
|
#define INTEL_82443LX_0 (0x7180<<16)|0x8086
|
|
|
|
#define INTEL_82443BX_0 (0x7190<<16)|0x8086
|
|
|
|
#define INTEL_82443GX_0 (0x71a0<<16)|0x8086
|
|
|
|
#define INTEL_82810_MC1 (0x7120<<16)|0x8086
|
|
|
|
#define INTEL_82810_MC3 (0x7122<<16)|0x8086
|
|
|
|
#define INTEL_82810E_MC (0x7124<<16)|0x8086
|
|
|
|
#define INTEL_82815_MC (0x1130<<16)|0x8086
|
|
|
|
#define INTEL_82820_HB (0x2500<<16)|0x8086
|
|
|
|
#define INTEL_82820_UP_HB (0x2501<<16)|0x8086
|
|
|
|
#define INTEL_82830_HB (0x3575<<16)|0x8086
|
|
|
|
#define INTEL_82840_HB (0x1a21<<16)|0x8086
|
|
|
|
#define INTEL_82845_HB (0x1a30<<16)|0x8086
|
|
|
|
#define INTEL_82845G_HB (0x2560<<16)|0x8086
|
|
|
|
#define INTEL_82850_HB (0x2530<<16)|0x8086
|
|
|
|
#define INTEL_82855PM_HB (0x3340<<16)|0x8086
|
|
|
|
#define INTEL_82855GM_HB (0x3580<<16)|0x8086
|
|
|
|
#define INTEL_82860_HB (0x2531<<16)|0x8086
|
|
|
|
#define INTEL_82865_HB (0x2570<<16)|0x8086
|
|
|
|
#define INTEL_82875_HB (0x2578<<16)|0x8086
|
|
|
|
#define INTEL_7505_0 (0x2550<<16)|0x8086
|
|
|
|
#define INTEL_7205_0 (0x255d<<16)|0x8086
|
|
|
|
#define INTEL_82915G_HB (0x2580<<16)|0x8086
|
|
|
|
#define INTEL_82915GM_HB (0x2590<<16)|0x8086
|
|
|
|
#define INTEL_82945G_HB (0x2770<<16)|0x8086
|
|
|
|
#define INTEL_82945GM_HB (0x27A0<<16)|0x8086
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
int id;
|
|
|
|
int driver;
|
|
|
|
}pci_device_t;
|
|
|
|
|
|
|
|
|
|
|
|
static pci_device_t agp_dev_table[] = {
|
|
|
|
|
|
|
|
// { INTEL_82443LX_0, 0 },
|
|
|
|
// { INTEL_82443BX_0, 0 },
|
|
|
|
// { INTEL_82443GX_0, 0 },
|
|
|
|
// { INTEL_82810_MC1, 0 },
|
|
|
|
// { INTEL_82810_MC3, 0 },
|
|
|
|
// { INTEL_82810E_MC, 0 },
|
|
|
|
// { INTEL_82815_MC, 0 },
|
|
|
|
// { INTEL_82820_HB, 0 },
|
|
|
|
// { INTEL_82820_UP_HB,0 },
|
|
|
|
// { INTEL_82830_HB, 0 },
|
|
|
|
// { INTEL_82840_HB, 0 },
|
|
|
|
// { INTEL_82845_HB, 0 },
|
|
|
|
// { INTEL_82845G_HB, 0 },
|
|
|
|
// { INTEL_82850_HB, 0 },
|
|
|
|
// { INTEL_82855PM_HB, 0 },
|
|
|
|
// { INTEL_82855GM_HB, 0 },
|
|
|
|
// { INTEL_82860_HB, 0 },
|
|
|
|
{ INTEL_82865_HB, 0 },
|
|
|
|
// { INTEL_82875_HB, 0 },
|
|
|
|
// { INTEL_7505_0, 0 },
|
|
|
|
// { INTEL_7205_0, 0 },
|
|
|
|
// { INTEL_82915G_HB, 0 },
|
|
|
|
// { INTEL_82915GM_HB, 0 },
|
|
|
|
// { INTEL_82945G_HB, 0 },
|
|
|
|
// { INTEL_82945GM_HB, 0 },
|
|
|
|
{ 0, 0 }
|
|
|
|
};
|
|
|
|
|
|
|
|
pci_device_t* agp_dev_match(u32_t dev, pci_device_t *list)
|
|
|
|
{
|
|
|
|
while(list->id)
|
|
|
|
{
|
|
|
|
if(dev == list->id)
|
|
|
|
return list;
|
|
|
|
list++;
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
int FindPciDevice()
|
|
|
|
{
|
|
|
|
u32_t bus, last_bus;
|
|
|
|
PCITAG tag;
|
|
|
|
|
|
|
|
if( (last_bus = PciApi(1))==-1)
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
for(bus=0;bus<=last_bus;bus++)
|
|
|
|
{
|
|
|
|
u32_t devfn;
|
|
|
|
|
|
|
|
for(devfn=0;devfn<256;devfn++)
|
|
|
|
{
|
|
|
|
u32_t pciId;
|
|
|
|
u8_t devclass;
|
|
|
|
pci_device_t *dev;
|
|
|
|
|
|
|
|
pciId = PciRead32(bus,devfn, 0);
|
|
|
|
devclass = PciRead8(bus,devfn, 0x0B);
|
|
|
|
|
|
|
|
if( devclass != PCI_CLASS_BRIDGE_HOST)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if( (dev = agp_dev_match(pciId, agp_dev_table))!=NULL)
|
|
|
|
{
|
|
|
|
dbgprintf("detect agp host %x\n",dev->id);
|
|
|
|
|
2008-12-09 06:41:11 +03:00
|
|
|
PCITAG PciTag = pciTag(bus,(devfn>>3)&0x1F,devfn&0x7);
|
2008-12-08 09:22:59 +03:00
|
|
|
|
2008-12-09 06:41:11 +03:00
|
|
|
return init_bridge(PciTag);
|
|
|
|
};
|
2008-12-08 09:22:59 +03:00
|
|
|
};
|
|
|
|
};
|
|
|
|
return 0;
|
|
|
|
};
|
2008-12-09 06:41:11 +03:00
|
|
|
|
|
|
|
|