diff options
Diffstat (limited to 'drivers/pci_indirect.c')
| -rw-r--r-- | drivers/pci_indirect.c | 16 | 
1 files changed, 16 insertions, 0 deletions
| diff --git a/drivers/pci_indirect.c b/drivers/pci_indirect.c index e8f19f570..f0c4a1ccf 100644 --- a/drivers/pci_indirect.c +++ b/drivers/pci_indirect.c @@ -36,6 +36,10 @@ static int								 \  indirect_##rw##_config_##size(struct pci_controller *hose, 		 \  			      pci_dev_t dev, int offset, type val)	 \  {									 \ +	u32 b, d,f;							 \ +	b = PCI_BUS(dev); d = PCI_DEV(dev); f = PCI_FUNC(dev);		 \ +	b = b - hose->first_busno;					 \ +	dev = PCI_BDF(b, d, f);						 \  	out_le32(hose->cfg_addr, dev | (offset & 0xfc) | 0x80000000); 	 \  	sync();								 \  	cfg_##rw(val, hose->cfg_data + (offset & mask), type, op);	 \ @@ -47,6 +51,10 @@ static int                                                               \  indirect_##rw##_config_##size(struct pci_controller *hose,               \  			      pci_dev_t dev, int offset, type val)       \  {                                                                        \ +	u32 b, d,f;							 \ +	b = PCI_BUS(dev); d = PCI_DEV(dev); f = PCI_FUNC(dev);		 \ +	b = b - hose->first_busno;					 \ +	dev = PCI_BDF(b, d, f);						 \  	*(hose->cfg_addr) = dev | (offset & 0xfc) | 0x80000000;          \  	sync();                                                          \  	cfg_##rw(val, hose->cfg_data + (offset & mask), type, op);       \ @@ -58,6 +66,10 @@ static int								 \  indirect_##rw##_config_##size(struct pci_controller *hose, 		 \  			      pci_dev_t dev, int offset, type val)	 \  {									 \ +	u32 b, d,f;							 \ +	b = PCI_BUS(dev); d = PCI_DEV(dev); f = PCI_FUNC(dev);		 \ +	b = b - hose->first_busno;					 \ +	dev = PCI_BDF(b, d, f);						 \  	if (PCI_BUS(dev) > 0)                                            \  		out_le32(hose->cfg_addr, dev | (offset & 0xfc) | 0x80000001); \  	else                                                             \ @@ -71,6 +83,10 @@ static int								 \  indirect_##rw##_config_##size(struct pci_controller *hose, 		 \  			      pci_dev_t dev, int offset, type val)	 \  {									 \ +	u32 b, d,f;							 \ +	b = PCI_BUS(dev); d = PCI_DEV(dev); f = PCI_FUNC(dev);		 \ +	b = b - hose->first_busno;					 \ +	dev = PCI_BDF(b, d, f);						 \  	out_le32(hose->cfg_addr, dev | (offset & 0xfc) | 0x80000000); 	 \  	cfg_##rw(val, hose->cfg_data + (offset & mask), type, op);	 \  	return 0;    					 		 \ |