no need for assembly

git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1194 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Greg Watson 2003-10-05 05:15:10 +00:00
parent e046fbbb2c
commit b6a259b0d2
1 changed files with 42 additions and 9 deletions

View File

@ -17,12 +17,41 @@ struct pci_ops {
struct pci_ops pci_direct_ppc;
extern unsigned __pci_config_read_32(unsigned address);
extern unsigned __pci_config_read_16(unsigned address);
extern unsigned __pci_config_read_8(unsigned address);
extern void __pci_config_write_32(unsigned address, unsigned data);
extern void __pci_config_write_16(unsigned address, unsigned short data);
extern void __pci_config_write_8(unsigned address, unsigned char data);
static unsigned __pci_config_read_32(unsigned address)
{
out_le32((unsigned *)PCIC0_CFGADDR, address);
return in_le32((unsigned *)PCIC0_CFGDATA);
}
static unsigned __pci_config_read_16(unsigned address)
{
out_le32((unsigned *)PCIC0_CFGADDR, address);
return in_le16((unsigned short *)PCIC0_CFGDATA);
}
static unsigned __pci_config_read_8(unsigned address)
{
out_le32((unsigned *)PCIC0_CFGADDR, address);
return in_8((unsigned char *)PCIC0_CFGDATA);
}
static void __pci_config_write_32(unsigned address, unsigned data)
{
out_le32((unsigned *)PCIC0_CFGADDR, address);
out_le32((unsigned *)PCIC0_CFGDATA, data);
}
static void __pci_config_write_16(unsigned address, unsigned short data)
{
out_le32((unsigned *)PCIC0_CFGADDR, address);
out_le16((unsigned short *)PCIC0_CFGDATA, data);
}
static void __pci_config_write_8(unsigned address, unsigned char data)
{
out_le32((unsigned *)PCIC0_CFGADDR, address);
out_8((unsigned char *)PCIC0_CFGDATA, data);
}
#define CONFIG_CMD(bus,devfn,where) (bus << 16 | devfn << 8 | where | 0x80000000)
@ -50,13 +79,17 @@ static int pci_sanity_check(const struct pci_ops *o)
#define PCI_VENDOR_ID_COMPAQ 0x0e11
#define PCI_VENDOR_ID_INTEL 0x8086
#define PCI_VENDOR_ID_MOTOROLA 0x1057
#define PCI_VENDOR_ID_IBM 0x1014
for (bus = 0, devfn = 0; devfn < 0x100; devfn++) {
class = o->read16(bus, devfn, PCI_CLASS_DEVICE);
vendor = o->read16(bus, devfn, PCI_VENDOR_ID);
if (((class == PCI_CLASS_BRIDGE_HOST) || (class == PCI_CLASS_DISPLAY_VGA)) ||
((vendor == PCI_VENDOR_ID_INTEL) || (vendor == PCI_VENDOR_ID_COMPAQ) ||
(vendor == PCI_VENDOR_ID_MOTOROLA))) {
if (((class == PCI_CLASS_BRIDGE_HOST) ||
(class == PCI_CLASS_DISPLAY_VGA)) ||
((vendor == PCI_VENDOR_ID_INTEL) ||
(vendor == PCI_VENDOR_ID_COMPAQ) ||
(vendor == PCI_VENDOR_ID_MOTOROLA) ||
(vendor == PCI_VENDOR_ID_IBM))) {
return 1;
}
}