[OpenBIOS] r667 - trunk/openbios-devel/include/sparc64
svn at openbios.org
svn at openbios.org
Fri Jan 22 19:50:55 CET 2010
Author: blueswirl
Date: 2010-01-22 19:50:54 +0100 (Fri, 22 Jan 2010)
New Revision: 667
Modified:
trunk/openbios-devel/include/sparc64/pci.h
Log:
Sparc64: use correct PCI probe mechanism
Signed-off-by: Blue Swirl <blauwirbel at gmail.com>
Modified: trunk/openbios-devel/include/sparc64/pci.h
===================================================================
--- trunk/openbios-devel/include/sparc64/pci.h 2010-01-16 10:35:58 UTC (rev 666)
+++ trunk/openbios-devel/include/sparc64/pci.h 2010-01-22 18:50:54 UTC (rev 667)
@@ -12,55 +12,53 @@
/* PCI Configuration Mechanism #1 */
#define PCI_ADDR(bus, dev, fn) \
- ((pci_addr) (arch->cfg_base \
- | (uint32_t) (bus) << 16 \
+ (((pci_addr) (uint32_t) (bus) << 16 \
| (uint32_t) (dev) << 11 \
| (uint32_t) (fn) << 8))
-#define PCI_BUS(pcidev) ((uint8_t) ((pcidev) >> 16))
+#define PCI_BUS(pcidev) ((uint8_t) ((pcidev) >> 16) & 0xff)
#define PCI_DEV(pcidev) ((uint8_t) ((pcidev) >> 11) & 0x1f)
#define PCI_FN(pcidev) ((uint8_t) ((pcidev) >> 8) & 7)
+#define PCI_CONFIG(dev) (arch->cfg_addr \
+ + (unsigned long)PCI_ADDR(PCI_BUS(dev), \
+ PCI_DEV(dev), \
+ PCI_FN(dev)))
+
static inline uint8_t pci_config_read8(pci_addr dev, uint8_t reg)
{
uint8_t res;
- out_le32((unsigned *)arch->cfg_addr, dev | (reg & ~3));
- res = in_8((unsigned char*)(arch->cfg_data + (reg & 3)));
+ res = in_8((unsigned char*)(PCI_CONFIG(dev) + reg));
return res;
}
static inline uint16_t pci_config_read16(pci_addr dev, uint8_t reg)
{
uint16_t res;
- out_le32((unsigned *)arch->cfg_addr, dev | (reg & ~3));
- res = in_le16((unsigned short*)(arch->cfg_data + (reg & 2)));
+ res = in_le16((uint16_t *)(PCI_CONFIG(dev) + reg));
return res;
}
static inline uint32_t pci_config_read32(pci_addr dev, uint8_t reg)
{
uint32_t res;
- out_le32((unsigned *)arch->cfg_addr, dev | reg);
- res = in_le32((unsigned *)(arch->cfg_data + reg));
+ res = in_le32((uint32_t *)(PCI_CONFIG(dev) + reg));
return res;
}
static inline void pci_config_write8(pci_addr dev, uint8_t reg, uint8_t val)
{
- out_le32((unsigned *)arch->cfg_addr, dev | (reg & ~3));
- out_8((unsigned char*)(arch->cfg_data + (reg & 3)), val);
+ out_8((unsigned char*)(PCI_CONFIG(dev) + reg), val);
}
static inline void pci_config_write16(pci_addr dev, uint8_t reg, uint16_t val)
{
- out_le32((unsigned *)arch->cfg_addr, dev | (reg & ~3));
- out_le16((unsigned short *)(arch->cfg_data + (reg & 2)), val);
+ out_le16((uint16_t *)(PCI_CONFIG(dev) + reg), val);
}
static inline void pci_config_write32(pci_addr dev, uint8_t reg, uint32_t val)
{
- out_le32((unsigned *)arch->cfg_addr, dev | reg);
- out_le32((unsigned *)(arch->cfg_data + reg), val);
+ out_le32((uint32_t *)(PCI_CONFIG(dev) + reg), val);
}
#else /* !PCI_CONFIG_1 */
#error PCI Configuration Mechanism is not specified or implemented
More information about the OpenBIOS
mailing list