Print this page
3500 Support LSI SAS2008 (Falcon) Skinny FW for mr_sas(7D)
        
*** 21,30 ****
--- 21,34 ----
  /*
   * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
   * Use is subject to license terms.
   */
  
+ /*
+  * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
+  */
+ 
  #include <limits.h>
  #include <sys/mdb_modapi.h>
  #include <sys/sysinfo.h>
  #include <sys/sunmdi.h>
  #include <sys/scsi/scsi.h>
*** 55,103 ****
          }
          return (DCMD_OK);
  }
  
  void
! display_targets(struct mrsas_instance m, int verbose)
  {
          int     tgt;
!         struct mrsas_ld *mr_ldp;
          char    device_path[PATH_MAX];
  
          if (verbose) {
                  *device_path = 0;
!                 if (construct_path((uintptr_t)m.dip, device_path) != DCMD_OK) {
                          strcpy(device_path, "couldn't determine device path");
                  }
          }
  
          mdb_printf("\n");
          if (verbose)
                  mdb_printf("%s\n", device_path);
!         mdb_printf("dev_type target\n");
!         mdb_printf("----------");
!         mdb_printf("\n");
          for (tgt = 0; tgt < MRDRV_MAX_LD; tgt++) {
!                 mr_ldp = (struct mrsas_ld *)&m.mr_ld_list[tgt];
!                 if ((mr_ldp != NULL) && (mr_ldp->dip != NULL) &&
!                     (mr_ldp->lun_type == MRSAS_LD_LUN)) {
!                         mdb_printf("sd %d", tgt);
!                         mdb_printf("\n");
                  }
          }
          mdb_printf("\n");
  }
  
  void
! display_deviceinfo(struct mrsas_instance m)
  {
          uint16_t vid, did, svid, sid;
  
!         vid = m.vendor_id;
!         did = m.device_id;
!         svid = m.subsysvid;
!         sid = m.subsysid;
  
          mdb_printf("\n");
          mdb_printf("vendor_id device_id subsysvid subsysid");
          mdb_printf("\n");
          mdb_printf("--------------------------------------");
--- 59,120 ----
          }
          return (DCMD_OK);
  }
  
  void
! display_targets(struct mrsas_instance *m, int verbose)
  {
          int     tgt;
!         struct mrsas_ld mr_ldp[MRDRV_MAX_LD];
!         struct mrsas_tbolt_pd mr_pdp[MRSAS_TBOLT_PD_TGT_MAX];
          char    device_path[PATH_MAX];
  
          if (verbose) {
                  *device_path = 0;
!                 if (construct_path((uintptr_t)m->dip, device_path) != DCMD_OK) {
                          strcpy(device_path, "couldn't determine device path");
                  }
          }
  
          mdb_printf("\n");
          if (verbose)
                  mdb_printf("%s\n", device_path);
!         mdb_printf("Physical/Logical Target\n");
!         mdb_printf("-----------------------\n");
! 
!         if (mdb_vread(&mr_ldp, sizeof (mr_ldp), (uintptr_t)m->mr_ld_list)
!             == -1 ||
!             mdb_vread(&mr_pdp, sizeof (mr_pdp), (uintptr_t)m->mr_tbolt_pd_list)
!             == -1) {
!                 mdb_warn("can't read list of disks");
!                 return;
!         }
! 
          for (tgt = 0; tgt < MRDRV_MAX_LD; tgt++) {
!                 if (mr_ldp[tgt].dip != NULL &&
!                     mr_ldp[tgt].lun_type == MRSAS_LD_LUN) {
!                         mdb_printf("Logical          sd %d\n", tgt);
                  }
          }
+         for (tgt = 0; tgt < MRSAS_TBOLT_PD_TGT_MAX; tgt++) {
+                 if (mr_pdp[tgt].dip != NULL &&
+                     mr_pdp[tgt].lun_type == MRSAS_TBOLT_PD_LUN) {
+                         mdb_printf("Physical         sd %d\n", tgt);
+                 }
+         }
          mdb_printf("\n");
  }
  
  void
! display_deviceinfo(struct mrsas_instance *m)
  {
          uint16_t vid, did, svid, sid;
  
!         vid = m->vendor_id;
!         did = m->device_id;
!         svid = m->subsysvid;
!         sid = m->subsysid;
  
          mdb_printf("\n");
          mdb_printf("vendor_id device_id subsysvid subsysid");
          mdb_printf("\n");
          mdb_printf("--------------------------------------");
*** 176,189 ****
                          mdb_printf("INVALD");
          }
          mdb_printf("\n");
  
          if (target_info)
!                 display_targets(m, verbose);
  
          if (device_info)
!                 display_deviceinfo(m);
  
          return (rv);
  }
  
  void
--- 193,206 ----
                          mdb_printf("INVALD");
          }
          mdb_printf("\n");
  
          if (target_info)
!                 display_targets(&m, verbose);
  
          if (device_info)
!                 display_deviceinfo(&m);
  
          return (rv);
  }
  
  void