svn commit: r286208 - in head/sys/dev/pms/freebsd/driver: common ini/src

Warner Losh imp at FreeBSD.org
Sun Aug 2 16:26:42 UTC 2015


Author: imp
Date: Sun Aug  2 16:26:41 2015
New Revision: 286208
URL: https://svnweb.freebsd.org/changeset/base/286208

Log:
  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.
  $FreeBSD$ added to lxutil.c in a non-standard way to help keep the
  diffs with upstream to a minimum.
  
  Differential Revision: https://reviews.freebsd.org/D3263

Modified:
  head/sys/dev/pms/freebsd/driver/common/lxutil.c
  head/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c

Modified: head/sys/dev/pms/freebsd/driver/common/lxutil.c
==============================================================================
--- head/sys/dev/pms/freebsd/driver/common/lxutil.c	Sun Aug  2 16:25:21 2015	(r286207)
+++ head/sys/dev/pms/freebsd/driver/common/lxutil.c	Sun Aug  2 16:26:41 2015	(r286208)
@@ -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: head/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c
==============================================================================
--- head/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c	Sun Aug  2 16:25:21 2015	(r286207)
+++ head/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c	Sun Aug  2 16:26:41 2015	(r286208)
@@ -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-head mailing list