@ -2,7 +2,7 @@
* ( C ) Copyright 2001 Sysgo Real - Time Solutions , GmbH < www . elinos . com >
* Andreas Heppel < aheppel @ sysgo . de >
*
* ( C ) Copyright 2002
* ( C ) Copyright 2002 , 2003
* Wolfgang Denk , DENX Software Engineering , wd @ denx . de .
*
* See file CREDITS for list of people who contributed to this
@ -148,8 +148,7 @@ struct pci_controller* pci_bus_to_hose(int bus)
struct pci_controller * hose ;
for ( hose = hose_head ; hose ; hose = hose - > next )
if ( bus > = hose - > first_busno & &
bus < = hose - > last_busno )
if ( bus > = hose - > first_busno & & bus < = hose - > last_busno )
return hose ;
return NULL ;
@ -178,16 +177,13 @@ pci_dev_t pci_find_devices(struct pci_device_id *ids, int index)
# endif
bdf + = PCI_BDF ( 0 , 0 , 1 ) )
{
if ( ! PCI_FUNC ( bdf ) )
{
if ( ! PCI_FUNC ( bdf ) ) {
pci_read_config_byte ( bdf ,
PCI_HEADER_TYPE ,
& header_type ) ;
found_multi = header_type & 0x80 ;
}
else
{
} else {
if ( ! found_multi )
continue ;
}
@ -236,14 +232,12 @@ unsigned long pci_hose_phys_to_bus(struct pci_controller* hose,
unsigned long bus_addr ;
int i ;
if ( ! hose )
{
if ( ! hose ) {
printf ( " pci_hose_phys_to_bus: %s \n " , " invalid hose " ) ;
goto Done ;
}
for ( i = 0 ; i < hose - > region_count ; i + + )
{
for ( i = 0 ; i < hose - > region_count ; i + + ) {
res = & hose - > regions [ i ] ;
if ( ( ( res - > flags ^ flags ) & PCI_REGION_TYPE ) ! = 0 )
@ -252,8 +246,7 @@ unsigned long pci_hose_phys_to_bus(struct pci_controller* hose,
bus_addr = phys_addr - res - > phys_start + res - > bus_start ;
if ( bus_addr > = res - > bus_start & &
bus_addr < res - > bus_start + res - > size )
{
bus_addr < res - > bus_start + res - > size ) {
return bus_addr ;
}
}
@ -271,22 +264,19 @@ unsigned long pci_hose_bus_to_phys(struct pci_controller* hose,
struct pci_region * res ;
int i ;
if ( ! hose )
{
if ( ! hose ) {
printf ( " pci_hose_bus_to_phys: %s \n " , " invalid hose " ) ;
goto Done ;
}
for ( i = 0 ; i < hose - > region_count ; i + + )
{
for ( i = 0 ; i < hose - > region_count ; i + + ) {
res = & hose - > regions [ i ] ;
if ( ( ( res - > flags ^ flags ) & PCI_REGION_TYPE ) ! = 0 )
continue ;
if ( bus_addr > = res - > bus_start & &
bus_addr < res - > bus_start + res - > size )
{
bus_addr < res - > bus_start + res - > size ) {
return bus_addr - res - > bus_start + res - > phys_start ;
}
}
@ -311,12 +301,12 @@ int pci_hose_config_device(struct pci_controller *hose,
unsigned char pin ;
int bar , found_mem64 ;
DEBUGF ( " PCI Config: I/O=0x%lx, Memory=0x%lx, Command=0x%lx \n " , io , mem , command ) ;
DEBUGF ( " PCI Config: I/O=0x%lx, Memory=0x%lx, Command=0x%lx \n " ,
io , mem , command ) ;
pci_hose_write_config_dword ( hose , dev , PCI_COMMAND , 0 ) ;
for ( bar = PCI_BASE_ADDRESS_0 ; bar < PCI_BASE_ADDRESS_5 ; bar + = 4 )
{
for ( bar = PCI_BASE_ADDRESS_0 ; bar < PCI_BASE_ADDRESS_5 ; bar + = 4 ) {
pci_hose_write_config_dword ( hose , dev , bar , 0xffffffff ) ;
pci_hose_read_config_dword ( hose , dev , bar , & bar_response ) ;
@ -326,30 +316,31 @@ int pci_hose_config_device(struct pci_controller *hose,
found_mem64 = 0 ;
/* Check the BAR type and set our address mask */
if ( bar_response & PCI_BASE_ADDRESS_SPACE )
{
if ( bar_response & PCI_BASE_ADDRESS_SPACE ) {
bar_size = ~ ( bar_response & PCI_BASE_ADDRESS_IO_MASK ) + 1 ;
bar_value = io ;
/* round up region base address to a multiple of size */
io = ( ( io - 1 ) | ( bar_size - 1 ) ) + 1 ;
}
else
{
bar_value = io ;
/* compute new region base address */
io = io + bar_size ;
} else {
if ( ( bar_response & PCI_BASE_ADDRESS_MEM_TYPE_MASK ) = =
PCI_BASE_ADDRESS_MEM_TYPE_64 )
found_mem64 = 1 ;
bar_size = ~ ( bar_response & PCI_BASE_ADDRESS_MEM_MASK ) + 1 ;
bar_value = mem ;
/* round up region base address to multiple of size */
mem = ( ( mem - 1 ) | ( bar_size - 1 ) ) + 1 ;
bar_value = mem ;
/* compute new region base address */
mem = mem + bar_size ;
}
/* Write it out and update our limit */
pci_hose_write_config_dword ( hose , dev , bar , bar_value ) ;
if ( found_mem64 )
{
if ( found_mem64 ) {
bar + = 4 ;
pci_hose_write_config_dword ( hose , dev , bar , 0x00000000 ) ;
}
@ -363,8 +354,7 @@ int pci_hose_config_device(struct pci_controller *hose,
/* Disable interrupt line, if device says it wants to use interrupts */
pci_hose_read_config_byte ( hose , dev , PCI_INTERRUPT_PIN , & pin ) ;
if ( pin ! = 0 )
{
if ( pin ! = 0 ) {
pci_hose_write_config_byte ( hose , dev , PCI_INTERRUPT_LINE , 0xff ) ;
}
@ -389,15 +379,13 @@ struct pci_config_table *pci_find_config(struct pci_controller *hose,
{
struct pci_config_table * table ;
for ( table = hose - > config_table ; table & & table - > vendor ; table + + )
{
for ( table = hose - > config_table ; table & & table - > vendor ; table + + ) {
if ( ( table - > vendor = = PCI_ANY_ID | | table - > vendor = = vendor ) & &
( table - > device = = PCI_ANY_ID | | table - > device = = device ) & &
( table - > class = = PCI_ANY_ID | | table - > class = = class ) & &
( table - > bus = = PCI_ANY_ID | | table - > bus = = bus ) & &
( table - > dev = = PCI_ANY_ID | | table - > dev = = dev ) & &
( table - > func = = PCI_ANY_ID | | table - > func = = func ) )
{
( table - > func = = PCI_ANY_ID | | table - > func = = func ) ) {
return table ;
}
}