Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 30 Nov 2010 22:39:46 +0000 (UTC)
From:      "Kenneth D. Merry" <ken@FreeBSD.org>
To:        cvs-src-old@freebsd.org
Subject:   cvs commit: src/lib/libcam Makefile src/sbin/camcontrol camcontrol.8 camcontrol.c src/sys/cam cam.c cam.h cam_ccb.h cam_periph.c cam_xpt.c cam_xpt_internal.h src/sys/cam/scsi scsi_all.c scsi_all.h scsi_pass.c scsi_xpt.c smp_all.c smp_all.h ...
Message-ID:  <201011302242.oAUMg6EA021202@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
ken         2010-11-30 22:39:46 UTC

  FreeBSD src repository

  Modified files:
    lib/libcam           Makefile 
    sbin/camcontrol      camcontrol.8 camcontrol.c 
    sys/cam              cam.c cam.h cam_ccb.h cam_periph.c 
                         cam_xpt.c cam_xpt_internal.h 
    sys/cam/scsi         scsi_all.c scsi_all.h scsi_pass.c 
                         scsi_xpt.c 
    sys/conf             files 
    sys/dev/mps          mps.c mps_pci.c mps_sas.c mps_user.c 
                         mpsvar.h 
    sys/sys              param.h 
  Added files:
    sys/cam/scsi         smp_all.c smp_all.h 
  Log:
  SVN rev 216088 on 2010-11-30 22:39:46Z by ken
  
  Add Serial Management Protocol (SMP) passthrough support to CAM.
  
  This includes support in the kernel, camcontrol(8), libcam and the mps(4)
  driver for SMP passthrough.
  
  The CAM SCSI probe code has been modified to fetch Inquiry VPD page 0x00
  to determine supported pages, and will now fetch page 0x83 in addition to
  page 0x80 if supported.
  
  Add two new CAM CCBs, XPT_SMP_IO, and XPT_GDEV_ADVINFO.  The SMP CCB is
  intended for SMP requests and responses.  The ADVINFO is currently used to
  fetch cached VPD page 0x83 data from the transport layer, but is intended
  to be extensible to fetch other types of device-specific data.
  
  SMP-only devices are not currently represented in the CAM topology, and so
  the current semantics are that the SIM will route SMP CCBs to either the
  addressed device, if it contains an SMP target, or its parent, if it
  contains an SMP target.  (This is noted in cam_ccb.h, since it will change
  later once we have the ability to have SMP-only devices in CAM's topology.)
  
  smp_all.c,
  smp_all.h:              New helper routines for SMP.  This includes
                          SMP request building routines, response parsing
                          routines, error decoding routines, and structure
                          definitions for a number of SMP commands.
  
  libcam/Makefile:        Add smp_all.c to libcam, so that SMP functionality
                          is available to userland applications.
  
  camcontrol.8,
  camcontrol.c:           Add smp passthrough support to camcontrol.  Several
                          new subcommands are now available:
  
                          'smpcmd' functions much like 'cmd', except that it
                          allows the user to send generic SMP commands.
  
                          'smprg' sends the SMP report general command, and
                          displays the decoded output.  It will automatically
                          fetch extended output if it is available.
  
                          'smppc' sends the SMP phy control command, with any
                          number of potential options.  Among other things,
                          this allows the user to reset a phy on a SAS
                          expander, or disable a phy on an expander.
  
                          'smpmaninfo' sends the SMP report manufacturer
                          information and displays the decoded output.
  
                          'smpphylist' displays a list of phys on an
                          expander, and the CAM devices attached to those
                          phys, if any.
  
  cam.h,
  cam.c:                  Add a status value for SMP errors
                          (CAM_SMP_STATUS_ERROR).
  
                          Add a missing description for CAM_SCSI_IT_NEXUS_LOST.
  
                          Add support for SMP commands to cam_error_string().
  
  cam_ccb.h:              Rename the CAM_DIR_RESV flag to CAM_DIR_BOTH.  SMP
                          commands are by nature bi-directional, and we may
                          need to support bi-directional SCSI commands later.
  
                          Add the XPT_SMP_IO CCB.  Since SMP commands are
                          bi-directional, there are pointers for both the
                          request and response.
  
                          Add a fill routine for SMP CCBs.
  
                          Add the XPT_GDEV_ADVINFO CCB.  This is currently
                          used to fetch cached page 0x83 data from the
                          transport later, but is extensible to fetch many
                          other types of data.
  
  cam_periph.c:           Add support in cam_periph_mapmem() for XPT_SMP_IO
                          and XPT_GDEV_ADVINFO CCBs.
  
  cam_xpt.c:              Add support for executing XPT_SMP_IO CCBs.
  
  cam_xpt_internal.h:     Add fields for VPD pages 0x00 and 0x83 in struct
                          cam_ed.
  
  scsi_all.c:             Add scsi_get_sas_addr(), a function that parses
                          VPD page 0x83 data and pulls out a SAS address.
  
  scsi_all.h:             Add VPD page 0x00 and 0x83 structures, and a
                          prototype for scsi_get_sas_addr().
  
  scsi_pass.c:            Add support for mapping buffers in XPT_SMP_IO and
                          XPT_GDEV_ADVINFO CCBs.
  
  scsi_xpt.c:             In the SCSI probe code, first ask the device for
                          VPD page 0x00.  If any VPD pages are supported,
                          that page is required to be implemented.  Based on
                          the response, we may probe for the serial number
                          (page 0x80) or device id (page 0x83).
  
                          Add support for the XPT_GDEV_ADVINFO CCB.
  
  sys/conf/files:         Add smp_all.c.
  
  mps.c:                  Add support for passing in a uio in mps_map_command(),
                          so we can map a S/G list at once.
  
                          Add support for SMP passthrough commands in
                          mps_data_cb().  SMP is a special case, because the
                          first buffer in the S/G list is outbound and the
                          second buffer is inbound.
  
                          Add support for warning the user if the busdma code
                          comes back with more buffers than will work for the
                          command.  This will, for example, help the user
                          determine why an SMP command failed if busdma comes
                          back with three buffers.
  
  mps_pci.c:              Add sys/uio.h.
  
  mps_sas.c:              Add the SAS address and the parent handle to the
                          list of fields we pull from device page 0 and cache
                          in struct mpssas_target.  These are needed for SMP
                          passthrough.
  
                          Add support for the XPT_SMP_IO CCB.  For now, this
                          CCB is routed to the addressed device if it supports
                          SMP, or to its parent if it does not and the parent
                          does.  This is necessary because CAM does not
                          currently support SMP-only nodes in the topology.
  
                          Make SMP passthrough support conditional on
                          __FreeBSD_version >= 900026.  This will make it
                          easier to MFC this change to the driver without
                          MFCing the CAM changes as well.
  
  mps_user.c:             Un-staticize mpi_init_sge() so we can use it for
                          the SMP passthrough code.
  
  mpsvar.h:               Add a uio and iovecs into struct mps_command for
                          SMP passthrough commands.
  
                          Add a cm_max_segs field to struct mps_command so
                          that we can warn the user if busdma comes back with
                          too many segments.
  
                          Clear the cm_reply when a command gets freed.  If
                          it is not cleared, reply frames will eventually get
                          freed into the pool multiple times and corrupt the
                          pool.  (This fix is from scottl.)
  
                          Add a prototype for mpi_init_sge().
  
  sys/param.h:            Bump __FreeBSD_version to 900026 for the for the
                          inclusion of the XPT_GDEV_ADVINFO and XPT_SMP_IO
                          CAM CCBs.
  
  Revision  Changes    Path
  1.15      +1 -1      src/lib/libcam/Makefile
  1.55      +217 -1    src/sbin/camcontrol/camcontrol.8
  1.83      +1380 -70  src/sbin/camcontrol/camcontrol.c
  1.18      +38 -0     src/sys/cam/cam.c
  1.18      +7 -0      src/sys/cam/cam.h
  1.48      +87 -1     src/sys/cam/cam_ccb.h
  1.91      +24 -0     src/sys/cam/cam_periph.c
  1.255     +1 -0      src/sys/cam/cam_xpt.c
  1.9       +4 -0      src/sys/cam/cam_xpt_internal.h
  1.59      +28 -0     src/sys/cam/scsi/scsi_all.c
  1.36      +161 -2    src/sys/cam/scsi/scsi_all.h
  1.57      +5 -3      src/sys/cam/scsi/scsi_pass.c
  1.13      +173 -47   src/sys/cam/scsi/scsi_xpt.c
  1.1       +620 -0    src/sys/cam/scsi/smp_all.c (new)
  1.1       +520 -0    src/sys/cam/scsi/smp_all.h (new)
  1.1546    +1 -0      src/sys/conf/files
  1.7       +51 -5     src/sys/dev/mps/mps.c
  1.2       +1 -0      src/sys/dev/mps/mps_pci.c
  1.6       +346 -0    src/sys/dev/mps/mps_sas.c
  1.9       +1 -1      src/sys/dev/mps/mps_user.c
  1.4       +15 -1     src/sys/dev/mps/mpsvar.h
  1.468     +1 -1      src/sys/sys/param.h



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201011302242.oAUMg6EA021202>