⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysbuspci.c

📁 MPC8360MDS VXWORKS BSP
💻 C
字号:
/* sysBusPci.c - Motorola MPC83xx platform-specific PCI bus support *//* Copyright 1996-2005 Wind River Systems, Inc. *//*modification history--------------------01e,16aug05,dtr  Update interrupt routing table for PIB and add PCI2 support.01d,19nov04,dtr  Mod to interrupt line order.01c,18mar04,dtr  Add support for Rev 2 silicon - new device ID for bridge.01b,31jul03,dtr  Temporary fix for bad interrupt wiring on board.01a,04jul02,dtr  Motorola MPC85xx file created from ads826x BSP.*//*DESCRIPTIONThis is the  platform specific pciAutoConfigLib information.*//* includes */#include "vxWorks.h"#include "config.h"#include "sysLib.h"#include "drv/pci/pciConfigLib.h" 	#include "drv/pci/pciIntLib.h" 	#include "drv/pci/pciAutoConfigLib.h"	#include "sysBusPci.h"/* static file scope locals */IMPORT void sysPciOutLong(UINT32*,UINT32);IMPORT UINT32 sysPciInLong (UINT32*); LOCAL PCI_SYSTEM sysParams;#ifdef INCLUDE_SECONDARY_PCILOCAL PCI_SYSTEM sysParams2;#endif /* INCLUDE_SECONDARY_PCI *//* INT LINE TO IRQ assignment for MPC85xxADS-PCI board. */LOCAL UCHAR sysPciIntRoute [NUM_PCI_SLOTS][4] = {    {PCI_XINT4_LVL, PCI_XINT1_LVL, PCI_XINT2_LVL, PCI_XINT3_LVL}, /* slot 1 */    {PCI_XINT1_LVL, PCI_XINT2_LVL, PCI_XINT3_LVL, PCI_XINT4_LVL}, /* slot 2 */    {PCI_XINT3_LVL, PCI_XINT4_LVL, PCI_XINT1_LVL, PCI_XINT2_LVL}, /* slot 3 */    {PCI_XINT4_LVL, PCI_XINT1_LVL, PCI_XINT2_LVL, PCI_XINT3_LVL}, /* slot 4 */};LOCAL UCHAR sysPci2IntRoute [NUM_PCI_SLOTS][4] = {    {PCI_XINT4_LVL, PCI_XINT1_LVL, PCI_XINT2_LVL, PCI_XINT3_LVL}, /* slot 1 */    {PCI_XINT1_LVL, PCI_XINT2_LVL, PCI_XINT3_LVL, PCI_XINT4_LVL}, /* slot 2 */    {PCI_XINT3_LVL, PCI_XINT4_LVL, PCI_XINT1_LVL, PCI_XINT2_LVL}, /* slot 3 */    {PCI_XINT4_LVL, PCI_XINT1_LVL, PCI_XINT2_LVL, PCI_XINT3_LVL}, /* slot 4 */};/********************************************************************************* sysPciAutoConfig - PCI autoconfig support routine** RETURNS: N/A*/void sysPciAutoConfig (void)    {#ifdef INCLUDE_SECONDARY_PCI    void * pCookie;#endif    /* 32-bit Prefetchable Memory Space */    sysParams.pciMem32 		= PCI_MEM_ADRS;    sysParams.pciMem32Size 	= PCI_MEM_SIZE;    /* 32-bit Non-prefetchable Memory Space */    sysParams.pciMemIo32 	= PCI_MEMIO_ADRS;    sysParams.pciMemIo32Size 	= PCI_MEMIO_SIZE;    /* 32-bit PCI I/O Space */    sysParams.pciIo32 		= PCI_IO_ADRS;    sysParams.pciIo32Size 	= PCI_IO_SIZE;    /* Configuration space parameters */    sysParams.maxBus 		= 0;    sysParams.cacheSize 	= ( _CACHE_ALIGN_SIZE / 4 );    sysParams.maxLatency 	= PCI_LAT_TIMER;    /*     * Interrupt routing strategy     * across PCI-to-PCI Bridges     */    sysParams.autoIntRouting 	= TRUE;    /* Device inclusion and interrupt routing routines */    sysParams.includeRtn 	= sysPciAutoconfigInclude;    sysParams.intAssignRtn 	= sysPciAutoconfigIntrAssign;    /*     * PCI-to-PCI Bridge Pre-     * and Post-enumeration init     * routines     */    sysParams.bridgePreConfigInit = NULL;			/* sysPciAutoconfigPreEnumBridgeInit; */    sysParams.bridgePostConfigInit = NULL;			/* sysPciAutoconfigPostEnumBridgeInit; */    /*     * Perform any needed PCI Host Bridge     * Initialization that needs to be done     * before pciAutoConfig is invoked here      * utilizing the information in the      * newly-populated sysParams structure.      */    pciAutoConfig (&sysParams);    /*     * Perform any needed post-enumeration     * PCI Host Bridge Initialization here     * utilizing the information in the      * sysParams structure that has been      * updated as a result of the scan      * and configuration passes.      */#ifdef INCLUDE_SECONDARY_PCI    /* PCI 2 Auto configuration */    sysPciConfigEnable (PCI_2_BUS);    /* 32-bit Prefetchable Memory Space */    sysParams2.pciMem32 	= PCI2_MEM_ADRS;    sysParams2.pciMem32Size 	= PCI2_MEM_SIZE;    /* 32-bit Non-prefetchable Memory Space */    sysParams2.pciMemIo32 	= PCI2_MEMIO_ADRS;    sysParams2.pciMemIo32Size 	= PCI2_MEMIO_SIZE;    /* 32-bit PCI I/O Space */    sysParams2.pciIo32 		= PCI2_IO_ADRS;    sysParams2.pciIo32Size 	= PCI2_IO_SIZE;    /* Configuration space parameters */    sysParams2.maxBus 		= 0;    sysParams2.cacheSize 	= ( _CACHE_ALIGN_SIZE / 4 );    sysParams2.maxLatency 	= PCI_LAT_TIMER;    /*     * Interrupt routing strategy     * across PCI-to-PCI Bridges     */    sysParams2.autoIntRouting 	= TRUE;    /* Device inclusion and interrupt routing routines */    sysParams2.includeRtn 	= sysPci2AutoconfigInclude;    sysParams2.intAssignRtn 	= sysPci2AutoconfigIntrAssign;    /*     * PCI-to-PCI Bridge Pre-     * and Post-enumeration init     * routines     */    sysParams2.bridgePreConfigInit = NULL;			/* sysPciAutoconfigPreEnumBridgeInit; */    sysParams2.bridgePostConfigInit = NULL;			/* sysPciAutoconfigPostEnumBridgeInit; */    /*     * Perform any needed PCI Host Bridge     * Initialization that needs to be done     * before pciAutoConfig is invoked here      * utilizing the information in the      * newly-populated sysParams structure.      */    pCookie = pciAutoConfigLibInit (NULL);    pciAutoCfgCtl (pCookie, PCI_PSYSTEM_STRUCT_COPY, &sysParams2);    pciAutoCfg (pCookie);#endif /* INCLUDE_CDS85XX_SECONDARY_PCI */    }/********************************************************************************* sysPciAutoconfigInclude - PCI autoconfig support routine** RETURNS: OK or ERROR for the MPC106 or WINBOND devices.*/STATUS sysPciAutoconfigInclude    (    PCI_SYSTEM * pSys,			/* PCI_SYSTEM structure pointer */    PCI_LOC * pLoc,			/* pointer to function in question */    UINT devVend			/* deviceID/vendorID of device */    )    {        /* Don't want to auto configure the bridge */     if ((pLoc->bus > 0) ||        (pLoc->bus == 0 && pLoc->device == 0 && pLoc->function == 0))          return(ERROR);      return OK; /* Autoconfigure all devices */    }/********************************************************************************* sysPci2AutoconfigInclude - PCI 2 autoconfig support routine** RETURNS: OK or ERROR*/STATUS sysPci2AutoconfigInclude    (    PCI_SYSTEM * pSys,			/* PCI_SYSTEM structure pointer */    PCI_LOC * pLoc,			/* pointer to function in question */    UINT devVend			/* deviceID/vendorID of device */    )    {        /*      * Only support BUS 0;     * Host controller itself (device number is 0) won't be configured;     */     if ((pLoc->bus > 0) ||        (pLoc->bus == 0 && pLoc->device == 0 && pLoc->function == 0))          return(ERROR);    return OK; /* Autoconfigure all devices */    }/********************************************************************************* sysPciAutoconfigIntrAssign - PCI autoconfig support routine** RETURNS: PCI interrupt line number given pin mask*/UCHAR sysPciAutoconfigIntrAssign    (    PCI_SYSTEM * pSys,			/* PCI_SYSTEM structure pointer */    PCI_LOC * pLoc,			/* pointer to function in question */    UCHAR pin				/* contents of PCI int pin register */    )    {    UCHAR tmpChar = 0xff;    /*      * Ensure this is a resonable value for bus zero.     * If OK, return INT level, else we return 0xff.     */    if (((pin > 0) && (pin < 5))       				&& 	(((pLoc->device) - PCI_SLOT1_DEVNO) < NUM_PCI_SLOTS) 	&&	(((pLoc->device) - PCI_SLOT1_DEVNO) >= 0))	{	tmpChar = 	    sysPciIntRoute [((pLoc->device) - PCI_SLOT1_DEVNO)][(pin-1)] + INUM_IRQ4;	}    /* return the value to be assigned to the pin */    return (tmpChar);    }/********************************************************************************* sysPci2AutoconfigIntrAssign - PCI 2 autoconfig support routine** RETURNS: PCI interrupt line number given pin mask*/UCHAR sysPci2AutoconfigIntrAssign    (    PCI_SYSTEM * pSys,			/* PCI_SYSTEM structure pointer */    PCI_LOC * pLoc,			/* pointer to function in question */    UCHAR pin				/* contents of PCI int pin register */    )    {    UCHAR tmpChar = 0xff;    /*      * Ensure this is a reasonable value for bus zero.     * If OK, return INT level, else we return 0xff.     */    if (((pin > 0) && (pin < 5))	&&	(((pLoc->device) - PCI_SLOT1_DEVNO) < NUM_PCI_SLOTS) 	&&	(((pLoc->device) - PCI_SLOT1_DEVNO) >= 0))	tmpChar = sysPci2IntRoute[((pLoc->device) - PCI_SLOT1_DEVNO)] [(pin-1)] + INUM_IRQ4;    /* return the value to be assigned to the pin */    return (tmpChar);    }/********************************************************************************* sysPciAutoconfigPreEnumBridgeInit - PCI autoconfig support routine** RETURNS: N/A*/void sysPciAutoconfigPreEnumBridgeInit    (    PCI_SYSTEM * pSys,			/* PCI_SYSTEM structure pointer */    PCI_LOC * pLoc,			/* pointer to function in question */    UINT devVend			/* deviceID/vendorID of device */    )    {    return;    }/********************************************************************************* sysPciAutoconfigPostEnumBridgeInit - PCI autoconfig support routine** RETURNS: N/A*/void sysPciAutoconfigPostEnumBridgeInit    (    PCI_SYSTEM * pSys,			/* PCI_SYSTEM structure pointer */    PCI_LOC * pLoc,			/* pointer to function in question */    UINT devVend			/* deviceID/vendorID of device */    )    {    return;    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -