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

📄 sysbuspci.c

📁 cpc-1631的BSP包for VxWorks操作系统
💻 C
字号:
/* sysBusPci.c - sandpoint platform-specific PCI bus support */

/* Copyright 1996-2000 Wind River Systems, Inc. */
#include "copyright_wrs.h"

/*
modification history
--------------------
01b,12sep00,ksn  replaced MPC107_ID with MPC107_DEV_ID (teamF1).
01a,10oct99,mtl  written from yk 750 by teamF1
*/

/*
DESCRIPTION
This is the Sandpoint 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 */

LOCAL PCI_SYSTEM sysParams;

/* INT LINE TO IRQ assignment for Sandpoint. */

LOCAL UCHAR sysPciIntRoute [NUM_PCI_SLOTS][4] = {
    {PCI_XINT1_LVL, PCI_XINT4_LVL, PCI_XINT3_LVL, PCI_XINT2_LVL}, /* slot 1 */
    {PCI_XINT2_LVL, PCI_XINT1_LVL, PCI_XINT4_LVL, PCI_XINT3_LVL}, /* slot 2 */
    {PCI_XINT3_LVL, PCI_XINT2_LVL, PCI_XINT1_LVL, PCI_XINT4_LVL}, /* slot 3 */
    {PCI_XINT4_LVL, PCI_XINT3_LVL, PCI_XINT2_LVL, PCI_XINT1_LVL}  /* slot 4 */
};


/*******************************************************************************
*
* sysPciAutoConfig - PCI autoconfig support routine
*
* RETURNS: N/A
*/


void sysPciAutoConfig (void)
    {

    /* 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;

    /* 16-bit ISA I/O Space */

    sysParams.pciIo16 		= PCI_ISA_IO_ADRS;
    sysParams.pciIo16Size 	= PCI_ISA_IO_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 =
			sysPciAutoconfigPreEnumBridgeInit;
    sysParams.bridgePostConfigInit =
			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. 
     */

    }

/*******************************************************************************
*
* sysPciAutoconfigInclude - PCI autoconfig support routine
*
* RETURNS: OK or ERROR for the MPC106 or via devices.
*/

STATUS sysPciAutoconfigInclude
    (
    PCI_SYSTEM * pSys,			/* PCI_SYSTEM structure pointer */
    PCI_LOC * pLoc,			/* pointer to function in question */
    UINT devVend			/* deviceID/vendorID of device */
    )
    {
    if ((devVend == PCI_ID_IBC) ||
	(devVend == PCI_ID_IDE) ||
	(devVend == MPC107_DEV_ID) ||
	(devVend == MPC107_DEV_VEN_ID)||
	(devVend == 0x10298086)||
	(devVend == 0x1029))
	{
	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)];
	}

    /* 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 + -