Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F105768723
D3263.id7586.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D3263.id7586.diff
View Options
Index: head/sys/dev/pms/freebsd/driver/common/lxutil.c
===================================================================
--- head/sys/dev/pms/freebsd/driver/common/lxutil.c
+++ head/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 @@
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;
}
Index: head/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c
===================================================================
--- head/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c
+++ head/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c
@@ -214,7 +214,6 @@
-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 @@
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
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Dec 21, 10:34 AM (17 h, 56 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15538346
Default Alt Text
D3263.id7586.diff (5 KB)
Attached To
Mode
D3263: Don't forget to check the vendor when probing. Also, there's no need to double check for if the card has probed before. In fact, there's no reason to single check either. Simplify the code as a result.
Attached
Detach File
Event Timeline
Log In to Comment