📄 sysbuspci.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 + -