svn commit: r286263 - in stable/10/sys/dev/pms/freebsd/driver: common ini/src
Warner Losh
imp at FreeBSD.org
Mon Aug 3 23:12:30 UTC 2015
Author: imp
Date: Mon Aug 3 23:12:29 2015
New Revision: 286263
URL: https://svnweb.freebsd.org/changeset/base/286263
Log:
MFC r286208:
Only match devices that belong to this driver.
Modified:
stable/10/sys/dev/pms/freebsd/driver/common/lxutil.c
stable/10/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/dev/pms/freebsd/driver/common/lxutil.c
==============================================================================
--- stable/10/sys/dev/pms/freebsd/driver/common/lxutil.c Mon Aug 3 23:08:40 2015 (r286262)
+++ stable/10/sys/dev/pms/freebsd/driver/common/lxutil.c Mon Aug 3 23:12:29 2015 (r286263)
@@ -19,6 +19,7 @@
*SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
******************************************************************************/
+/* $FreeBSD$ */
/******************************************************************************
This program is part of PMC-Sierra initiator/target device driver.
The functions here are commonly used by different type of drivers that support
@@ -756,37 +757,30 @@ STATIC int agtiapi_ProbeCard( device_t d
int thisCard )
{
int idx;
- static U32 cardMap[4] = { 0, 0, 0, 0 };
+ u_int16_t agtiapi_vendor; // PCI vendor ID
u_int16_t agtiapi_dev; // PCI device ID
AGTIAPI_PRINTK("agtiapi_ProbeCard: start\n");
- if ( ! atomic_cmpset_32( &cardMap[thisCard], 0, 5 ) ) { // card already ran
- AGTIAPI_PRINTK( "We'll only ID this card once -- %d\n", thisCard );
- return 2; // error return value; card already ran this function
- }
- else {
- agtiapi_dev = pci_get_device( dev ); // get PCI device ID
- for( idx = 0; idx < COUNT(ag_card_type); idx++ )
- {
- if( ag_card_type[idx].deviceId == agtiapi_dev )
- { // device ID match
- memset( (void *)&agCardInfoList[ thisCard ], 0,
- sizeof(ag_card_info_t) );
- thisCardInst->cardIdIndex = idx;
- thisCardInst->pPCIDev = dev;
- thisCardInst->cardNameIndex = ag_card_type[idx].cardNameIndex;
- thisCardInst->cardID =
- pci_read_config( dev, ag_card_type[idx].membar, 4 ); // memAddr
- AGTIAPI_PRINTK("agtiapi_ProbeCard: We've got PMC SAS, probe successful %p / %p\n",
- thisCardInst->pPCIDev, thisCardInst );
- device_printf( dev,
- "agtiapi PCI Probe Vendor ID : 0x%x Device ID : 0x%x\n",
- pci_get_vendor(dev), agtiapi_dev );
- device_set_desc( dev, ag_card_names[ag_card_type[idx].cardNameIndex] );
- return 0;
- }
+ agtiapi_vendor = pci_get_vendor( dev ); // get PCI vendor ID
+ agtiapi_dev = pci_get_device( dev ); // get PCI device ID
+ for( idx = 0; idx < COUNT(ag_card_type); idx++ )
+ {
+ if ( ag_card_type[idx].deviceId == agtiapi_dev &&
+ ag_card_type[idx].vendorId == agtiapi_vendor)
+ { // device ID match
+ memset( (void *)&agCardInfoList[ thisCard ], 0,
+ sizeof(ag_card_info_t) );
+ thisCardInst->cardIdIndex = idx;
+ thisCardInst->pPCIDev = dev;
+ thisCardInst->cardNameIndex = ag_card_type[idx].cardNameIndex;
+ thisCardInst->cardID =
+ pci_read_config( dev, ag_card_type[idx].membar, 4 ); // memAddr
+ AGTIAPI_PRINTK("agtiapi_ProbeCard: We've got PMC SAS, probe successful %p / %p\n",
+ thisCardInst->pPCIDev, thisCardInst );
+ device_set_desc( dev, ag_card_names[ag_card_type[idx].cardNameIndex] );
+ return 0;
}
}
- return 7;
+ return 1;
}
Modified: stable/10/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c
==============================================================================
--- stable/10/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c Mon Aug 3 23:08:40 2015 (r286262)
+++ stable/10/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c Mon Aug 3 23:12:29 2015 (r286263)
@@ -214,7 +214,6 @@ STATIC void agtiapi_CheckIOTimeout(void
-static unsigned char cardMap[AGTIAPI_MAX_CARDS] = { 0, 0, 0, 0 };
static ag_card_info_t agCardInfoList[ AGTIAPI_MAX_CARDS ]; // card info list
static void agtiapi_cam_action( struct cam_sim *, union ccb * );
static void agtiapi_cam_poll( struct cam_sim * );
@@ -695,37 +694,20 @@ Note:
static int agtiapi_probe( device_t dev )
{
int retVal;
-
- if ( pci_get_vendor(dev) == PCI_VENDOR_ID_PMC_SIERRA ||
- pci_get_vendor(dev) == PCI_VENDOR_ID_HIALEAH )
+ int thisCard;
+ ag_card_info_t *thisCardInst;
+
+ thisCard = device_get_unit( dev );
+ if ( thisCard >= AGTIAPI_MAX_CARDS )
{
- int thisCard = device_get_unit( dev );
-// AGTIAPI_PRINTK("agtiapi_probe: thisCard %d\n", thisCard);
- if( thisCard >= AGTIAPI_MAX_CARDS)
- {
- device_printf( dev, "Too many PMC-Sierra cards detected ERROR!\n" );
- return (ENXIO); // maybe change to different return value?
- }
- ag_card_info_t *thisCardInst = &agCardInfoList[ thisCard ];
- retVal = agtiapi_ProbeCard( dev, thisCardInst, thisCard );
- if ( retVal ) {
- // error on probe
- if( retVal == 2 ) return 0; // another thread ran probe on this card
- device_printf( dev,
- "agtiapi_probe: PCI DEVICE NOT SUPPORTED by this driver!!"
- "Vendor ID : 0x%x Device ID : 0x%x\n",
- pci_get_vendor(dev), pci_get_device( dev ) );
- return (ENXIO); // maybe change to different return value?
- }
- else {
- // AGTIAPI_PRINTK( "agtiapi_ProbeCard: returned with pointer values "
- // "%p / %p\n",
- // thisCardInst->pPCIDev, thisCardInst );
- cardMap[thisCard] = 11; // record this card is present
- return( BUS_PROBE_DEFAULT ); // successful probe
- }
+ device_printf( dev, "Too many PMC-Sierra cards detected ERROR!\n" );
+ return (ENXIO); // maybe change to different return value?
}
- return (ENXIO);
+ thisCardInst = &agCardInfoList[ thisCard ];
+ retVal = agtiapi_ProbeCard( dev, thisCardInst, thisCard );
+ if ( retVal )
+ return (ENXIO); // maybe change to different return value?
+ return( BUS_PROBE_DEFAULT ); // successful probe
}
More information about the svn-src-stable-10
mailing list