summaryrefslogtreecommitdiffstats
path: root/sys/dev/pms
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2015-08-03 23:12:29 +0000
committerimp <imp@FreeBSD.org>2015-08-03 23:12:29 +0000
commit0d33ce41f504ff7fea3ad78ea24b6bc9fa9e08e6 (patch)
treed511f4c2570427684b922e8fc64ab4774fd52c4f /sys/dev/pms
parentc23e13ae13b33ecb4b7cffd01810845da815996f (diff)
downloadFreeBSD-src-0d33ce41f504ff7fea3ad78ea24b6bc9fa9e08e6.zip
FreeBSD-src-0d33ce41f504ff7fea3ad78ea24b6bc9fa9e08e6.tar.gz
MFC r286208:
Only match devices that belong to this driver.
Diffstat (limited to 'sys/dev/pms')
-rw-r--r--sys/dev/pms/freebsd/driver/common/lxutil.c48
-rw-r--r--sys/dev/pms/freebsd/driver/ini/src/agtiapi.c42
2 files changed, 33 insertions, 57 deletions
diff --git a/sys/dev/pms/freebsd/driver/common/lxutil.c b/sys/dev/pms/freebsd/driver/common/lxutil.c
index 4cc16c1..365ba5a 100644
--- a/sys/dev/pms/freebsd/driver/common/lxutil.c
+++ b/sys/dev/pms/freebsd/driver/common/lxutil.c
@@ -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 dev,
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;
}
diff --git a/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c b/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c
index 47922db..0a500cb 100644
--- a/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c
+++ b/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c
@@ -214,7 +214,6 @@ STATIC void agtiapi_CheckIOTimeout(void *data);
-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
}
OpenPOWER on IntegriCloud