From: James S. <jsi...@us...> - 2001-10-23 21:52:10
|
Update of /cvsroot/linux-mips/linux/arch/mips/cobalt In directory usw-pr-cvs1:/tmp/cvs-serv5269 Modified Files: pci_ops.c Log Message: Ah. Much better code. Index: pci_ops.c =================================================================== RCS file: /cvsroot/linux-mips/linux/arch/mips/cobalt/pci_ops.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- pci_ops.c 2001/10/23 18:08:27 1.1 +++ pci_ops.c 2001/10/23 21:52:05 1.2 @@ -80,16 +80,6 @@ { NULL, NULL, NULL, NULL, NULL} }; -static __inline__ int pci_range_ck(struct pci_dev *dev) -{ - if ((dev->bus->number == 0) - && ((PCI_SLOT (dev->devfn) == 0) - || ((PCI_SLOT (dev->devfn) > 6) - && (PCI_SLOT (dev->devfn) <= 12)))) - return 0; /* OK device number */ - return -1; /* NOT ok device number */ -} - #define PCI_CFG_DATA ((volatile unsigned long *)0xb4000cfc) #define PCI_CFG_CTRL ((volatile unsigned long *)0xb4000cf8) @@ -119,30 +109,34 @@ * if a pci config cycle read fails, the data returned * will be 0xffffffff. */ - return 0; + + if ((dev->bus->number == 0) + && ((PCI_SLOT (dev->devfn) == 0) + || ((PCI_SLOT (dev->devfn) > 6) + && (PCI_SLOT (dev->devfn) <= 12)))) { + /* OK device number */ + if (access_type == PCI_ACCESS_READ) { + PCI_CFG_SET(dev, (where & ~0x3)); + *data = *PCI_CFG_DATA; + } else + *PCI_CFG_DATA = *data; + return 0; + } + return -1; /* NOT ok device number */ } static int read_config_byte (struct pci_dev *dev, int where, u8 *val) { - if (pci_range_ck (dev)) { - *val = 0xff; - return PCIBIOS_DEVICE_NOT_FOUND; - } - PCI_CFG_SET(dev, (where & ~0x3)); - *val = *PCI_CFG_DATA >> ((where & 3) * 8); -/* u32 data = 0; if (config_access(PCI_ACCESS_READ, dev, where, &data)) { *val = 0xff; - return -1; + return PCIBIOS_DEVICE_NOT_FOUND; } - *val = (data >> ((where & 3) << 3)) & 0xff; DBG("cfg read byte: bus %d dev_fn %x where %x: val %x\n", dev->bus->number, dev->devfn, where, *val); -*/ return PCIBIOS_SUCCESSFUL; } @@ -150,59 +144,36 @@ static int read_config_word (struct pci_dev *dev, int where, u16 *val) { - if (where & 0x1) - return PCIBIOS_BAD_REGISTER_NUMBER; - if (pci_range_ck (dev)) { - *val = 0xffff; - return PCIBIOS_DEVICE_NOT_FOUND; - } - PCI_CFG_SET(dev, (where & ~0x3)); - *val = *PCI_CFG_DATA >> ((where & 3) * 8); -/* u32 data = 0; - if (where & 1) + if (where & 0x1) return PCIBIOS_BAD_REGISTER_NUMBER; if (config_access(PCI_ACCESS_READ, dev, where, &data)) { *val = 0xffff; - return -1; + return PCIBIOS_DEVICE_NOT_FOUND; } - *val = (data >> ((where & 3) << 3)) & 0xffff; DBG("cfg read word: bus %d dev_fn %x where %x: val %x\n", dev->bus->number, dev->devfn, where, *val); -*/ return PCIBIOS_SUCCESSFUL; } static int read_config_dword (struct pci_dev *dev, int where, u32 *val) { - if (where & 0x3) - return PCIBIOS_BAD_REGISTER_NUMBER; - if (pci_range_ck (dev)) { - *val = 0xFFFFFFFF; - return PCIBIOS_DEVICE_NOT_FOUND; - } - PCI_CFG_SET(dev, where); - *val = *PCI_CFG_DATA; - return PCIBIOS_SUCCESSFUL; -/* u32 data = 0; - if (where & 3) + if (where & 0x3) return PCIBIOS_BAD_REGISTER_NUMBER; - + if (config_access(PCI_ACCESS_READ, dev, where, &data)) { - *val = 0xffffffff; - return -1; + *val = 0xFFFFFFFF; + return PCIBIOS_DEVICE_NOT_FOUND; } - *val = data; DBG("cfg read dword: bus %d dev_fn %x where %x: val %x\n", dev->bus->number, dev->devfn, where, *val); -*/ return PCIBIOS_SUCCESSFUL; } @@ -210,63 +181,41 @@ static int write_config_byte (struct pci_dev *dev, int where, u8 val) { - unsigned long tmp; - - if (pci_range_ck (dev)) - return PCIBIOS_DEVICE_NOT_FOUND; - PCI_CFG_SET(dev, (where & ~0x3)); - tmp = *PCI_CFG_DATA; - tmp &= ~(0xff << ((where & 0x3) * 8)); - tmp |= (val << ((where & 0x3) * 8)); - *PCI_CFG_DATA = tmp; -/* u32 data = 0; - + if (config_access(PCI_ACCESS_READ, dev, where, &data)) - return -1; + return PCIBIOS_DEVICE_NOT_FOUND; data = (data & ~(0xff << ((where & 3) << 3))) | (val << ((where & 3) << 3)); - DBG("cfg write byte: bus %d dev_fn %x where %x: val %x\n", + + DBG("cfg write byte: bus %d dev_fn %x where %x: val %x\n", dev->bus->number, dev->devfn, where, val); - + if (config_access(PCI_ACCESS_WRITE, dev, where, &data)) return -1; -*/ return PCIBIOS_SUCCESSFUL; } static int write_config_word (struct pci_dev *dev, int where, u16 val) { - unsigned long tmp; + u32 data = 0; if (where & 0x1) return PCIBIOS_BAD_REGISTER_NUMBER; - if (pci_range_ck (dev)) - return PCIBIOS_DEVICE_NOT_FOUND; - PCI_CFG_SET(dev, (where & ~0x3)); - tmp = *PCI_CFG_DATA; - tmp &= ~(0xffff << ((where & 0x3) * 8)); - tmp |= (val << ((where & 0x3) * 8)); - *PCI_CFG_DATA = tmp; -/* - u32 data = 0; - if (where & 1) - return PCIBIOS_BAD_REGISTER_NUMBER; - if (config_access(PCI_ACCESS_READ, dev, where, &data)) - return -1; + return PCIBIOS_DEVICE_NOT_FOUND; data = (data & ~(0xffff << ((where & 3) << 3))) | (val << ((where & 3) << 3)); + DBG("cfg write word: bus %d dev_fn %x where %x: val %x\n", dev->bus->number, dev->devfn, where, val); if (config_access(PCI_ACCESS_WRITE, dev, where, &data)) - return -1; -*/ + return -1; return PCIBIOS_SUCCESSFUL; } @@ -275,19 +224,15 @@ { if (where & 0x3) return PCIBIOS_BAD_REGISTER_NUMBER; - if (pci_range_ck (dev)) - return PCIBIOS_DEVICE_NOT_FOUND; - PCI_CFG_SET(dev, where); - *PCI_CFG_DATA = val; -/* - if (where & 3) - return PCIBIOS_BAD_REGISTER_NUMBER; if (config_access(PCI_ACCESS_WRITE, dev, where, &val)) - return -1; - DBG("cfg write dword: bus %d dev_fn %x where %x: val %x\n", + return PCIBIOS_DEVICE_NOT_FOUND; + + DBG("cfg write dword: bus %d dev_fn %x where %x: val %x\n", dev->bus->number, dev->devfn, where, val); -*/ + + if (config_access(PCI_ACCESS_WRITE, dev, where, &val)) + return -1; return PCIBIOS_SUCCESSFUL; } |