diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2002-05-14 17:10:17 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2002-05-14 17:10:17 +0000 |
commit | 69ed59f083a083fd96d08b5f6d54f2c80f267f03 (patch) | |
tree | 3d8fcd08bcface88cea636117b47dd1520b2874c /c/src/lib/libbsp/powerpc/shared/pci/pci.h | |
parent | 2001-05-14 Till Straumann <strauman@slac.stanford.edu> (diff) | |
download | rtems-69ed59f083a083fd96d08b5f6d54f2c80f267f03.tar.bz2 |
2001-05-14 Till Straumann <strauman@slac.stanford.edu>
* bootloader/misc.c, console/Makefile.am, console/console.c,
console/consoleIo.h, console/inch.c, console/polled_io.c,
console/uart.c, console/uart.h, include/bsp.h, irq/Makefile.am,
irq/irq.c, irq/irq.h, irq/irq_init.c, openpic/openpic.c,
openpic/openpic.h, pci/Makefile.am, pci/pci.c, pci/pci.h,
residual/Makefile.am, start/start.S, startup/bspstart.c,
vectors/vectors.S, vectors/vectors.h, vectors/vectors_init.c:
Per PR216, "libbsp/powerpc/shared" BSP has been modified considerably
with the goal to make it more flexible and reusable by other
BSPs. The main strategies were:
- eliminate hardcoded base addresses; devices use offsets
and a BSP defined base address.
- separate functionality into different files (e.g. reboot from
inch.c to reboot.c) which can be overridden by a 'derived' BSP.
- separate initialization code into separate files (e.g. PCI
bridge detection/initialization was separated from the more
generic PCI access routines), also to make it easier for
'derived' BSPs to substitute their own initialization code.
There are also a couple of enhancements and fixes:
- IRQ handling code now has a hook for attaching a VME bridge.
- OpenPIC is now explicitely initialized (polarities, senses).
Eliminated the implicit assumption on the presence of an ISA PIC.
- UART and console driver now supports more than 1 port. The current
maximum of 2 can easily be extended by enlarging a table (it
would even be easier if the ISR API was not broken by design).
- fixed polled_io.c so it correctly supports console on COM2
- fixed TLB invalidation code (start.S).
- exception handler prints a stack backtrace.
- added BSP_pciFindDevice() to scan the pci bus for a particular
vendor/device/instance.
Diffstat (limited to '')
-rw-r--r-- | c/src/lib/libbsp/powerpc/shared/pci/pci.h | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/c/src/lib/libbsp/powerpc/shared/pci/pci.h b/c/src/lib/libbsp/powerpc/shared/pci/pci.h index 2070bb434d..7327a6afbc 100644 --- a/c/src/lib/libbsp/powerpc/shared/pci/pci.h +++ b/c/src/lib/libbsp/powerpc/shared/pci/pci.h @@ -1082,7 +1082,10 @@ #define PCIBIOS_SET_FAILED 0x88 #define PCIBIOS_BUFFER_TOO_SMALL 0x89 -#define PCI_MAX_DEVICES 16 +/* T. Straumann, 7/31/2001: increased to 32 - PMC slots are not + * scanned on mvme2306 otherwise + */ +#define PCI_MAX_DEVICES 32 #define PCI_MAX_FUNCTIONS 8 typedef struct { @@ -1103,45 +1106,45 @@ typedef struct { typedef struct { volatile unsigned char* pci_config_addr; volatile unsigned char* pci_config_data; - pci_config_access_functions* pci_functions; + const pci_config_access_functions* pci_functions; } pci_config; -extern pci_config pci; +extern pci_config BSP_pci_configuration; extern inline int pci_read_config_byte(unsigned char bus, unsigned char slot, unsigned char function, unsigned char where, unsigned char * val) { - return pci.pci_functions->read_config_byte(bus, slot, function, where, val); + return BSP_pci_configuration.pci_functions->read_config_byte(bus, slot, function, where, val); } extern inline int pci_read_config_word(unsigned char bus, unsigned char slot, unsigned char function, unsigned char where, unsigned short * val) { - return pci.pci_functions->read_config_word(bus, slot, function, where, val); + return BSP_pci_configuration.pci_functions->read_config_word(bus, slot, function, where, val); } extern inline int pci_read_config_dword(unsigned char bus, unsigned char slot, unsigned char function, unsigned char where, unsigned int * val) { - return pci.pci_functions->read_config_dword(bus, slot, function, where, val); + return BSP_pci_configuration.pci_functions->read_config_dword(bus, slot, function, where, val); } extern inline int pci_write_config_byte(unsigned char bus, unsigned char slot, unsigned char function, unsigned char where, unsigned char val) { - return pci.pci_functions->write_config_byte(bus, slot, function, where, val); + return BSP_pci_configuration.pci_functions->write_config_byte(bus, slot, function, where, val); } extern inline int pci_write_config_word(unsigned char bus, unsigned char slot, unsigned char function, unsigned char where, unsigned short val) { - return pci.pci_functions->write_config_word(bus, slot, function, where, val); + return BSP_pci_configuration.pci_functions->write_config_word(bus, slot, function, where, val); } extern inline int pci_write_config_dword(unsigned char bus, unsigned char slot, unsigned char function, unsigned char where, unsigned int val) { - return pci.pci_functions->write_config_dword(bus, slot, function, where, val); + return BSP_pci_configuration.pci_functions->write_config_dword(bus, slot, function, where, val); } /* @@ -1150,4 +1153,14 @@ pci_write_config_dword(unsigned char bus, unsigned char slot, unsigned char func extern unsigned char BusCountPCI(); extern void InitializePCI(); +/* scan for a specific device */ +/* find a particular PCI device + * (currently, only bus0 is scanned for device/fun0) + * + * RETURNS: zero on success, bus/dev/fun in *pbus / *pdev / *pfun + */ +int +BSP_pciFindDevice(unsigned short vendorid, unsigned short deviceid, + int instance, int *pbus, int *pdev, int *pfun); + #endif /* RTEMS_PCI_H */ |