/** * @file */ /* * COPYRIGHT (c) 1989-2012. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.org/license/LICENSE. */ /* * * PCI defines and function prototypes * Copyright 1994, Drew Eckhardt * Copyright 1997, 1998 Martin Mares * * For more information, please consult the following manuals (look at * http://www.pcisig.com/ for how to get them): * * PCI BIOS Specification * PCI Local Bus Specification * PCI to PCI Bridge Specification * PCI System Design Guide */ #ifndef BSP_PCI_H #define BSP_PCI_H #include #include #include struct _pin_routes { int pin, int_name[4]; }; struct _int_map { int bus, slot, opts; struct _pin_routes pin_route[5]; }; struct pcibridge { int bus; int slot; }; /* If there's a conflict between a name in the routing table and * what's already set on the device, reprogram the device setting * to reflect int_name[0] for the routing table entry */ #define PCI_FIXUP_OPT_OVERRIDE_NAME (1<<0) void FixupPCI( const struct _int_map *, int (*swizzler)(int,int) ); /* FIXME: This probably belongs into rtems/pci.h */ extern unsigned char pci_bus_count(); int indirect_pci_read_config_byte( unsigned char bus, unsigned char slot, unsigned char function, unsigned char offset, uint8_t *val ); int indirect_pci_read_config_word( unsigned char bus, unsigned char slot, unsigned char function, unsigned char offset, uint16_t *val ); int indirect_pci_read_config_dword( unsigned char bus, unsigned char slot, unsigned char function, unsigned char offset, uint32_t *val ); int indirect_pci_write_config_byte( unsigned char bus, unsigned char slot, unsigned char function, unsigned char offset, uint8_t val ); int indirect_pci_write_config_word( unsigned char bus, unsigned char slot, unsigned char function, unsigned char offset, uint16_t val ); int indirect_pci_write_config_dword( unsigned char bus, unsigned char slot, unsigned char function, unsigned char offset, uint32_t val ); /* Can these be moved to the rtems pci.h? */ int FindPCIbridge( int mybus, struct pcibridge *pb ); const pci_config_access_functions pci_indirect_functions; void pci_out_le32( uint32_t base, uint32_t addr, uint32_t val); void pci_out_32( uint32_t base, uint32_t addr, uint32_t val); uint8_t pci_in_8 ( uint32_t base, uint32_t addr ); int16_t pci_in_le16 ( uint32_t base, uint32_t addr ); uint32_t pci_in_le32 ( uint32_t base, uint32_t addr ); int16_t pci_in_16 ( uint32_t base, uint32_t addr ); uint32_t pci_in_32 ( uint32_t base, uint32_t addr ); void pci_out_8 ( uint32_t base, uint32_t addr, uint8_t val ); void pci_out_le16( uint32_t base, uint32_t addr, uint16_t val ); void pci_out_16( uint32_t base, uint32_t addr, uint16_t val ); void pci_out_32 ( uint32_t base, uint32_t addr, uint32_t val); #define out_32(_addr, _val) pci_out_32(BSP_PCI_BASE_ADDRESS, _addr, _val) #define out_le32(_addr, _val) pci_out_le32(BSP_PCI_BASE_ADDRESS, _addr, _val) #define out_32(_addr, _val) pci_out_32(BSP_PCI_BASE_ADDRESS, _addr, _val) #define in_8(_addr) pci_in_8( BSP_PCI_BASE_ADDRESS, _addr ) #define in_le16(_addr) pci_in_le16( BSP_PCI_BASE_ADDRESS, _addr ) #define in_le32(_addr) pci_in_le32( BSP_PCI_BASE_ADDRESS, _addr ) #define in_16(_addr) pci_in_16( BSP_PCI_BASE_ADDRESS, _addr ) #define in_32(_addr) pci_in_32( BSP_PCI_BASE_ADDRESS, _addr ) #define out_8(_addr,_val) pci_out_8( BSP_PCI_BASE_ADDRESS, _addr, _val ) #define out_le16(_addr,_val) pci_out_le16( BSP_PCI_BASE_ADDRESS, _addr, _val ) #define out_16(_addr,_val) pci_out_16( BSP_PCI_BASE_ADDRESS, _addr, _val ) #endif /* BSP_PCI_H */