home | help
CAMCONTROL(8)		     System Manager's Manual		   CAMCONTROL(8)

NAME
     camcontrol -- CAM control program

SYNOPSIS
     camcontrol <command> [device id] [generic args] [command args]
     camcontrol devlist [-v]
     camcontrol periphlist [device id] [-n dev_name] [-u unit_number]
     camcontrol tur [device id] [generic args]
     camcontrol inquiry [device id] [generic args] [-D] [-S] [-R]
     camcontrol identify [device id] [generic args] [-v]
     camcontrol reportluns [device id] [generic args] [-c] [-l] [-r reporttype]
     camcontrol readcap [device id] [generic args] [-b] [-h] [-H] [-N] [-q] [-s]
     camcontrol start [device id] [generic args]
     camcontrol stop [device id] [generic args]
     camcontrol load [device id] [generic args]
     camcontrol eject [device id] [generic args]
     camcontrol rescan <all | bus[:target:lun]>
     camcontrol reset <all | bus[:target:lun]>
     camcontrol defects [device id] [generic args] <-f format> [-P] [-G]
     camcontrol modepage [device id] [generic args] <-m page | -l> [-P pgctl]
		[-b | -e] [-d]
     camcontrol cmd [device id] [generic args] <-a cmd [args]> <-c cmd [args]>
		[-d] [-f] [-i len fmt] [-o len fmt [args]] [-r fmt]
     camcontrol smpcmd [device id] [generic args] <-r len fmt [args]>
		<-R len fmt [args]>
     camcontrol smprg [device id] [generic args] [-l]
     camcontrol smppc [device id] [generic args] <-p phy> [-l] [-o operation]
		[-d name] [-m rate] [-M rate] [-T pp_timeout]
		[-a enable|disable] [-A enable|disable] [-s enable|disable]
		[-S enable|disable]
     camcontrol smpphylist [device id] [generic args] [-l] [-q]
     camcontrol smpmaninfo [device id] [generic args] [-l]
     camcontrol debug [-I] [-P] [-T] [-S] [-X] [-c] [-p]
		<all|off|bus[:target[:lun]]>
     camcontrol tags [device id] [generic args] [-N tags] [-q] [-v]
     camcontrol negotiate [device id] [generic args] [-c] [-D enable|disable]
		[-M mode] [-O offset] [-q] [-R syncrate] [-T enable|disable]
		[-U] [-W bus_width] [-v]
     camcontrol format [device id] [generic args] [-q] [-r] [-w] [-y]
     camcontrol idle [device id] [generic args] [-t time]
     camcontrol standby [device id] [generic args] [-t time]
     camcontrol sleep [device id] [generic args]
     camcontrol fwdownload [device id] [generic args] <-f fw_image> [-y] [-s]
     camcontrol help

DESCRIPTION
     The camcontrol utility is designed to provide a way for users to access and
     control the FreeBSD CAM subsystem.

     The  camcontrol  utility  can cause a loss of data and/or system crashes if
     used improperly.  Even expert users are encouraged to exercise caution when
     using this command.  Novice users should stay away from this utility.

     The camcontrol utility has a number of primary  functions,  many  of  which
     support an optional device identifier.  A device identifier can take one of
     three forms:

     deviceUNIT      Specify  a  device  name  and unit number combination, like
		     "da5" or "cd3".

     bus:target      Specify a bus number and target id.  The bus number can  be
		     determined  from  the  output of "camcontrol devlist".  The
		     lun defaults to 0.

     bus:target:lun  Specify the bus, target and lun for a device.  (e.g. 1:2:0)

     The device identifier, if it is specified, must come immediately after  the
     function name, and before any generic or function-specific arguments.  Note
     that  the -n and -u arguments described below will override any device name
     or unit number specified beforehand.  The -n  and	-u  arguments  will  not
     override a specified bus:target or bus:target:lun, however.

     Most of the camcontrol primary functions support these generic arguments:

     -C count	     SCSI command retry count.	In order for this to work, error
		     recovery (-E) must be turned on.

     -E 	     Instruct  the kernel to perform generic SCSI error recovery
		     for the given command.  This is needed  in  order	for  the
		     retry  count  (-C) to be honored.	Other than retrying com-
		     mands, the generic error recovery in the code  will  gener-
		     ally  attempt  to spin up drives that are not spinning.  It
		     may take some other actions, depending upon the sense  code
		     returned from the command.

     -n dev_name     Specify the device type to operate on, e.g. "da", "cd".

     -t timeout      SCSI  command  timeout  in seconds.  This overrides the de-
		     fault timeout for any given command.

     -u unit_number  Specify the device unit number, e.g. "1", "5".

     -v 	     Be verbose, print out sense  information  for  failed  SCSI
		     commands.

     Primary command functions:

     devlist	 List  all  physical devices (logical units) attached to the CAM
		 subsystem.  This also includes a list of peripheral drivers at-
		 tached to each device.  With the -v argument, SCSI bus  number,
		 adapter name and unit numbers are printed as well.

     periphlist  List all peripheral drivers attached to a given physical device
		 (logical unit).

     tur	 Send  the  SCSI test unit ready (0x00) command to the given de-
		 vice.	The camcontrol utility will report whether the device is
		 ready or not.

     inquiry	 Send a SCSI inquiry command (0x12) to a  device.   By	default,
		 camcontrol will print out the standard inquiry data, device se-
		 rial number, and transfer rate information.  The user can spec-
		 ify that only certain types of inquiry data be printed:

		 -D    Get the standard inquiry data.

		 -S    Print  out  the	serial number.	If this flag is the only
		       one specified, camcontrol will not print out "Serial Num-
		       ber" before the value returned by the drive.  This is  to
		       aid in script writing.

		 -R    Print out transfer rate information.

     identify	 Send a ATA identify command (0xec) to a device.

     reportluns  Send  the  SCSI REPORT LUNS (0xA0) command to the given device.
		 By default, camcontrol will print out the list of logical units
		 (LUNs) supported by the target device.  There are a  couple  of
		 options to modify the output:

		 -c		 Just  print out a count of LUNs, not the actual
				 LUN numbers.

		 -l		 Just print out the LUNs, and  don't  print  out
				 the count.

		 -r reporttype	 Specify  the type of report to request from the
				 target:

				 default    Return the default report.	This  is
					    the  camcontrol  default.  Most tar-
					    gets will  support	this  report  if
					    they  support  the	REPORT LUNS com-
					    mand.

				 wellknown  Return only well known LUNs.

				 all	    Return all available LUNs.

		 camcontrol will try to print out LUN numbers  in  a  reasonable
		 format.   It  can  understand the peripheral, flat, LUN and ex-
		 tended LUN formats.

     readcap	 Send the SCSI READ CAPACITY command to  the  given  device  and
		 display  the  results.   If  the device is larger than 2TB, the
		 SCSI READ CAPACITY (16) service action will be sent  to  obtain
		 the full size of the device.  By default, camcontrol will print
		 out  the last logical block of the device, and the blocksize of
		 the device in bytes.  To modify the output format, use the fol-
		 lowing options:

		 -b	Just print out the blocksize, not the last block or  de-
			vice size.  This cannot be used with -N or -s.

		 -h	Print  out the device size in human readable (base 2, 1K
			== 1024) format.  This implies -N  and	cannot	be  used
			with -q or -b.

		 -H	Print out the device size in human readable (base 10, 1K
			== 1000) format.

		 -N	Print  out the number of blocks in the device instead of
			the last logical block.

		 -q	Quiet, print out the numbers only (separated by a  comma
			if -b or -s are not specified).

		 -s	Print  out the last logical block or the size of the de-
			vice only, and omit the blocksize.

     start	 Send the SCSI Start/Stop Unit (0x1B) command to the  given  de-
		 vice with the start bit set.

     stop	 Send  the  SCSI Start/Stop Unit (0x1B) command to the given de-
		 vice with the start bit cleared.

     load	 Send the SCSI Start/Stop Unit (0x1B) command to the  given  de-
		 vice with the start bit set and the load/eject bit set.

     eject	 Send  the  SCSI Start/Stop Unit (0x1B) command to the given de-
		 vice with the start bit cleared and the load/eject bit set.

     rescan	 Tell the kernel to scan all busses in the system (with the  all
		 argument),  the  given  bus  (XPT_SCAN_BUS),  or bus:target:lun
		 (XPT_SCAN_LUN) for new devices or devices that have gone  away.
		 The  user  may specify a scan of all busses, a single bus, or a
		 lun.  Scanning all luns on a target is not supported.

     reset	 Tell the kernel to reset all busses in the system (with the all
		 argument) or the given bus (XPT_RESET_BUS) by	issuing  a  SCSI
		 bus  reset  for  that bus, or to reset the given bus:target:lun
		 (XPT_RESET_DEV), typically by issuing a BUS DEVICE  RESET  mes-
		 sage  after connecting to that device.  Note that this can have
		 a destructive impact on the system.

     defects	 Send the SCSI READ DEFECT DATA (10) command (0x37) to the given
		 device, and print out any combination of: the total  number  of
		 defects,  the primary defect list (PLIST), and the grown defect
		 list (GLIST).

		 -f format    The three format options are: block, to print  out
			      the  list as logical blocks, bfi, to print out the
			      list in bytes from  index  format,  and  phys,  to
			      print out the list in physical sector format.  The
			      format  argument is required.  Most drives support
			      the physical sector format.  Some  drives  support
			      the logical block format.  Many drives, if they do
			      not  support the requested format, return the data
			      in an alternate format, along with sense	informa-
			      tion  indicating that the requested data format is
			      not supported.  The camcontrol utility attempts to
			      detect this, and print  out  whatever  format  the
			      drive  returns.	If the drive uses a non-standard
			      sense code to report that it does not support  the
			      requested format, camcontrol will probably see the
			      error as a failure to complete the request.

		 -G	      Print  out  the grown defect list.  This is a list
			      of bad blocks that have been  remapped  since  the
			      disk left the factory.

		 -P	      Print out the primary defect list.

		 If  neither  -P  nor -G is specified, camcontrol will print out
		 the number of defects given in the READ DEFECT DATA header  re-
		 turned  from  the  drive.  Some drives will report 0 defects if
		 neither the primary or grown defect lists are requested.

     modepage	 Allows the user to display and  optionally  edit  a  SCSI  mode
		 page.	   The	  mode	  page	  formats    are    located   in
		 /usr/share/misc/scsi_modes.  This can be overridden by specify-
		 ing a different file in the  SCSI_MODES  environment  variable.
		 The modepage command takes several arguments:

		 -d	       Disable block descriptors for mode sense.

		 -b	       Displays mode page data in binary format.

		 -e	       This  flag  allows the user to edit values in the
			       mode page.  The user may either	edit  mode  page
			       values  with  the  text	editor pointed to by his
			       EDITOR environment variable, or supply mode  page
			       values  via standard input, using the same format
			       that camcontrol uses to display mode page values.
			       The editor will be invoked if camcontrol  detects
			       that standard input is terminal.

		 -l	       Lists all available mode pages.

		 -m mode_page  This  specifies	the  number of the mode page the
			       user would like to view and/or edit.  This  argu-
			       ment is mandatory unless -l is specified.

		 -P pgctl      This  allows the user to specify the page control
			       field.  Possible values are:
			       0    Current values
			       1    Changeable values
			       2    Default values
			       3    Saved values

     cmd	 Allows the user to send an arbitrary ATA or SCSI CDB to any de-
		 vice.	The cmd function requires the  -c  argument  to  specify
		 SCSI CDB or the -a argument to specify ATA Command Block regis-
		 ters  values.	 Other	arguments are optional, depending on the
		 command type.	The command and  data  specification  syntax  is
		 documented  in  cam_cdbparse(3).   NOTE:  If  the CDB specified
		 causes data to be transferred to or from  the	SCSI  device  in
		 question, you MUST specify either -i or -o.

		 -a cmd [args]	    This specifies the content of 12 ATA Command
				    Block registers (command, features, lba_low,
				    lba_mid,   lba_high,   device,  lba_low_exp,
				    lba_mid_exp.   lba_high_exp,   features_exp,
				    sector_count, sector_count_exp).

		 -c cmd [args]	    This  specifies the SCSI CDB.  SCSI CDBs may
				    be 6, 10, 12 or 16 bytes.

		 -d		    Specifies DMA protocol to be  used	for  ATA
				    command.

		 -f		    Specifies  FPDMA  (NCQ)  protocol to be used
				    for ATA command.

		 -i len fmt	    This specifies the amount of data  to  read,
				    and how it should be displayed.  If the for-
				    mat  is  `-', len bytes of data will be read
				    from the device and written to standard out-
				    put.

		 -o len fmt [args]  This specifies the	amount	of  data  to  be
				    written to a device, and the data that is to
				    be written.  If the format is `-', len bytes
				    of data will be read from standard input and
				    written to the device.

		 -r fmt 	    This  specifies  that  11 result ATA Command
				    Block registers should be displayed (status,
				    error, lba_low, lba_mid,  lba_high,  device,
				    lba_low_exp, lba_mid_exp, lba_high_exp, sec-
				    tor_count,	sector_count_exp),  and how.  If
				    the format is `-', 11 result registers  will
				    be written to standard output in hex.

     smpcmd	 Allows the user to send an arbitrary Serial Management Protocol
		 (SMP) command to a device.  The smpcmd function requires the -r
		 argument  to specify the SMP request to be sent, and the -R ar-
		 gument to specify the format of the SMP response.   The  syntax
		 for  the  SMP	request  and response arguments is documented in
		 cam_cdbparse(3).

		 Note that SAS adapters that support SMP passthrough  (at  least
		 the  currently known adapters) do not accept CRC bytes from the
		 user in the request and do not pass CRC bytes back to the  user
		 in  the  response.   Therefore users should not include the CRC
		 bytes in the length of the request and not expect CRC bytes  to
		 be returned in the response.

		 -r len fmt [args]  This  specifies the size of the SMP request,
				    without the CRC bytes, and the  SMP  request
				    format.   If the format is `-', len bytes of
				    data will be read from  standard  input  and
				    written as the SMP request.

		 -R len fmt [args]  This  specifies the size of the buffer allo-
				    cated for the SMP response, and the SMP  re-
				    sponse  format.   If  the format is `-', len
				    bytes of data will be allocated for the  re-
				    sponse  and  the response will be written to
				    standard output.

     smprg	 Allows the user to send the Serial  Management  Protocol  (SMP)
		 Report  General  command  to a device.  camcontrol will display
		 the data returned by the Report General command.   If	the  SMP
		 target  supports  the long response format, the additional data
		 will be requested and displayed automatically.

		 -l	   Request the long response format only.  Not	all  SMP
			   targets  support  the long response format.	This op-
			   tion causes camcontrol to skip  sending  the  initial
			   report  general  request without the long bit set and
			   only issue a report general request with the long bit
			   set.

     smppc	 Allows the user to issue the Serial Management  Protocol  (SMP)
		 PHY  Control command to a device.  This function should be used
		 with some caution, as it can render devices  inaccessible,  and
		 could	potentially cause data corruption as well.  The -p argu-
		 ment is required to specify the PHY to operate on.

		 -p phy 	    Specify the PHY to operate on.   This  argu-
				    ment is required.

		 -l		    Request  the  long	request/response format.
				    Not all SMP targets  support  the  long  re-
				    sponse format.  For the PHY Control command,
				    this  currently only affects whether the re-
				    quest length is set to a value other than 0.

		 -o operation	    Specify a PHY control operation.   Only  one
				    -o	operation  may be specified.  The opera-
				    tion may be specified numerically (in  deci-
				    mal,  hexadecimal,	or  octal) or one of the
				    following operation names may be specified:

				    nop 	      No operation.  It  is  not
						      necessary  to specify this
						      argument.

				    linkreset	      Send the LINK  RESET  com-
						      mand to the phy.

				    hardreset	      Send  the  HARD RESET com-
						      mand to the phy.

				    disable	      Send the	DISABLE  command
						      to the phy.  Note that the
						      LINK  RESET  or HARD RESET
						      commands should  re-enable
						      the phy.

				    clearerrlog       Send  the  CLEAR ERROR LOG
						      command.	This clears  the
						      error log counters for the
						      specified phy.

				    clearaffiliation  Send the CLEAR AFFILIATION
						      command.	 This clears the
						      affiliation from	the  STP
						      initiator  port  with  the
						      same SAS	address  as  the
						      SMP   initiator  that  re-
						      quests  the  clear  opera-
						      tion.

				    sataportsel       Send   the  TRANSMIT  SATA
						      PORT SELECTION SIGNAL com-
						      mand  to	the  phy.   This
						      will cause a SATA port se-
						      lector  to  use  the given
						      phy as its active phy  and
						      make  the  other phy inac-
						      tive.

				    clearitnl	      Send  the  CLEAR	STP  I_T
						      NEXUS  LOSS command to the
						      PHY.

				    setdevname	      Send the SET ATTACHED  DE-
						      VICE  NAME  command to the
						      PHY.  This requires the -d
						      argument	to  specify  the
						      device name.

		 -d name	    Specify  the attached device name.	This op-
				    tion is needed with the  -o  setdevname  phy
				    operation.	The name is a 64-bit number, and
				    can  be specified in decimal, hexadecimal or
				    octal format.

		 -m rate	    Set the minimum physical link rate	for  the
				    phy.  This is a numeric argument.  Currently
				    known link rates are:

				    0x0    Do not change current value.

				    0x8    1.5 Gbps

				    0x9    3 Gbps

				    0xa    6 Gbps

				    Other  values  may	be  specified  for newer
				    physical link rates.

		 -M rate	    Set the maximum physical link rate	for  the
				    phy.   This  is a numeric argument.  See the
				    -m argument description for known link  rate
				    arguments.

		 -T pp_timeout	    Set  the  partial  pathway timeout value, in
				    microseconds.   See  the  ANSI  SAS  Protcol
				    Layer  (SPL) specification for more informa-
				    tion on this field.

		 -a enable|disable  Enable or disable  SATA  slumber  phy  power
				    conditions.

		 -A enable|disable  Enable  or disable SATA partial power condi-
				    tions.

		 -s enable|disable  Enable or disable SAS slumber phy power con-
				    ditions.

		 -S enable|disable  Enable or disable SAS partial phy power con-
				    ditions.

     smpphylist  List phys attached to a SAS expander, the address  of	the  end
		 device  attached  to the phy, and the inquiry data for that de-
		 vice and peripheral devices attached to that device.	The  in-
		 quiry data and peripheral devices are displayed if available.

		 -l	Turn  on the long response format for the underlying SMP
			commands used for this command.

		 -q	Only print out phys that are attached to a device in the
			CAM EDT (Existing Device Table).

     smpmaninfo  Send the SMP Report Manufacturer Information command to the de-
		 vice and display the response.

		 -l	Turn on the long response format for the underlying  SMP
			commands used for this command.

     debug	 Turn on CAM debugging printfs in the kernel.  This requires op-
		 tions	CAMDEBUG  in your kernel config file.  WARNING: enabling
		 debugging printfs currently causes an EXTREME number of  kernel
		 printfs.   You  may  have  difficulty turning off the debugging
		 printfs once they start, since the kernel will be busy printing
		 messages and unable to service  other	requests  quickly.   The
		 debug function takes a number of arguments:

		 -I		     Enable CAM_DEBUG_INFO printfs.

		 -P		     Enable CAM_DEBUG_PERIPH printfs.

		 -T		     Enable CAM_DEBUG_TRACE printfs.

		 -S		     Enable CAM_DEBUG_SUBTRACE printfs.

		 -X		     Enable CAM_DEBUG_XPT printfs.

		 -c		     Enable  CAM_DEBUG_CDB  printfs.   This will
				     cause the kernel to print out the SCSI CDBs
				     sent to the specified device(s).

		 -p		     Enable CAM_DEBUG_PROBE printfs.

		 all		     Enable debugging for all devices.

		 off		     Turn off debugging for all devices

		 bus[:target[:lun]]  Turn on debugging for the given bus, target
				     or lun.  If the lun or target and	lun  are
				     not specified, they are wildcarded.  (i.e.,
				     just  specifying  a  bus turns on debugging
				     printfs for all devices on that bus.)

     tags	 Show or set the number of  "tagged  openings"	or  simultaneous
		 transactions  we  attempt  to queue to a particular device.  By
		 default, the tags command, with no  command-specific  arguments
		 (i.e.,  only  generic	arguments) prints out the "soft" maximum
		 number of transactions that can be  queued  to  the  device  in
		 question.   For  more detailed information, use the -v argument
		 described below.

		 -N tags  Set the number of tags for  the  given  device.   This
			  must	be between the minimum and maximum number set in
			  the kernel quirk table.  The default for most  devices
			  that	support  tagged queueing is a minimum of 2 and a
			  maximum of 255.  The minimum and maximum values for  a
			  given device may be determined by using the -v switch.
			  The  meaning of the -v switch for this camcontrol sub-
			  command is described below.

		 -q	  Be quiet, and do not report the number of tags.   This
			  is generally used when setting the number of tags.

		 -v	  The  verbose	flag  has  special functionality for the
			  tags argument.  It causes camcontrol to print out  the
			  tagged  queueing  related  fields of the XPT_GDEV_TYPE
			  CCB:

			  dev_openings	 This is  the  amount  of  capacity  for
					 transactions queued to a given device.

			  dev_active	 This is the number of transactions cur-
					 rently queued to a device.

			  devq_openings  This  is  the	kernel	queue  space for
					 transactions.	This count usually  mir-
					 rors  dev_openings  except during error
					 recovery  operations  when  the  device
					 queue	is frozen (device is not allowed
					 to receive  commands),  the  number  of
					 dev_openings is reduced, or transaction
					 replay is occurring.

			  devq_queued	 This  is  the	number	of  transactions
					 waiting in the kernel queue for  capac-
					 ity on the device.  This number is usu-
					 ally  zero  unless error recovery is in
					 progress.

			  held		 The held count is the	number	of  CCBs
					 held  by  peripheral  drivers that have
					 either just been completed or are about
					 to be released to the	transport  layer
					 for service by a device.  Held CCBs re-
					 serve capacity on a given device.

			  mintags	 This is the current "hard" minimum num-
					 ber  of transactions that can be queued
					 to a device at once.  The  dev_openings
					 value	above  cannot go below this num-
					 ber.  The default value for mintags  is
					 2,  although  it  may	be set higher or
					 lower for various devices.

			  maxtags	 This is the "hard"  maximum  number  of
					 transactions  that  can  be queued to a
					 device at one time.   The  dev_openings
					 value cannot go above this number.  The
					 default  value  for maxtags is 255, al-
					 though it may be set  higher  or  lower
					 for various devices.

     negotiate	 Show  or negotiate various communication parameters.  Some con-
		 trollers may not support setting or changing some of these val-
		 ues.  For instance, the Adaptec 174x controllers do not support
		 changing a device's sync rate or offset.  The camcontrol  util-
		 ity will not attempt to set the parameter if the controller in-
		 dicates  that	it  does  not support setting the parameter.  To
		 find out what the controller supports, use the  -v  flag.   The
		 meaning  of  the -v flag for the negotiate command is described
		 below.  Also, some controller drivers do  not	support  setting
		 negotiation  parameters, even if the underlying controller sup-
		 ports negotiation changes.  Some controllers, such as	the  Ad-
		 vansys  wide  controllers,  support enabling and disabling syn-
		 chronous negotiation for a device, but do not	support  setting
		 the synchronous negotiation rate.

		 -a		    Attempt  to  make  the  negotiation settings
				    take effect immediately by	sending  a  Test
				    Unit Ready command to the device.

		 -c		    Show  or  set  current negotiation settings.
				    This is the default.

		 -D enable|disable  Enable or disable disconnection.

		 -M mode	    Set ATA mode.

		 -O offset	    Set the command delay offset.

		 -q		    Be quiet, do not print  anything.	This  is
				    generally  useful when you want to set a pa-
				    rameter, but do not want any status informa-
				    tion.

		 -R syncrate	    Change the synchronization rate  for  a  de-
				    vice.   The  sync  rate  is a floating point
				    value specified in MHz.  So,  for  instance,
				    `20.000' is a legal value, as is `20'.

		 -T enable|disable  Enable  or disable tagged queueing for a de-
				    vice.

		 -U		    Show or set user negotiation settings.   The
				    default  is  to show or set current negotia-
				    tion settings.

		 -v		    The verbose switch has special  meaning  for
				    the   negotiate   subcommand.    It   causes
				    camcontrol to print out the  contents  of  a
				    Path  Inquiry (XPT_PATH_INQ) CCB sent to the
				    controller driver.

		 -W bus_width	    Specify the bus width to  negotiate  with  a
				    device.  The bus width is specified in bits.
				    The only useful values to specify are 8, 16,
				    and  32  bits.   The controller must support
				    the bus width in question in order	for  the
				    setting to take effect.

		 In  general, sync rate and offset settings will not take effect
		 for a device until a command has been sent to the device.   The
		 -a  switch  above  will automatically send a Test Unit Ready to
		 the device so negotiation parameters will take effect.

     format	 Issue the SCSI FORMAT UNIT command to the named device.

		 WARNING! WARNING! WARNING!

		 Low level formatting a disk will destroy ALL data on the  disk.
		 Use extreme caution when issuing this command.  Many users low-
		 level format disks that do not really need to be low-level for-
		 matted.   There are relatively few scenarios that call for low-
		 level formatting a disk.  One reason for low-level formatting a
		 disk is to initialize the disk after changing its physical sec-
		 tor size.  Another reason for low-level formatting a disk is to
		 revive the disk if you are getting  "medium  format  corrupted"
		 errors from the disk in response to read and write requests.

		 Some  disks  take  longer  than others to format.  Users should
		 specify a timeout long enough to allow the format to  complete.
		 The  default  format  timeout	is 3 hours, which should be long
		 enough for most disks.  Some hard disks will complete a  format
		 operation  in	a  very  short period of time (on the order of 5
		 minutes or less).  This is often because the drive does not re-
		 ally support the FORMAT UNIT command --  it  just  accepts  the
		 command, waits a few minutes and then returns it.

		 The `format' subcommand takes several arguments that modify its
		 default  behavior.   The  -q and -y arguments can be useful for
		 scripts.

		 -q	 Be quiet, do not print any status messages.   This  op-
			 tion  will not disable the questions, however.  To dis-
			 able questions, use the -y argument, below.

		 -r	 Run in "report only" mode.  This will report status  on
			 a format that is already running on the drive.

		 -w	 Issue	a  non-immediate  format  command.   By default,
			 camcontrol issues the FORMAT UNIT command with the  im-
			 mediate  bit set.  This tells the device to immediately
			 return the format command, before the format has  actu-
			 ally  completed.   Then,  camcontrol gathers SCSI sense
			 information from the device every second  to  determine
			 how  far  along in the format process it is.  If the -w
			 argument is specified, camcontrol will issue a  non-im-
			 mediate format command, and will be unable to print any
			 information to let the user know what percentage of the
			 disk has been formatted.

		 -y	 Do  not ask any questions.  By default, camcontrol will
			 ask the user if he/she really wants to format the  disk
			 in  question,	and  also  if the default format command
			 timeout is acceptable.  The  user  will  not  be  asked
			 about the timeout if a timeout is specified on the com-
			 mand line.

     idle	 Put  ATA device into IDLE state. Optional parameter (-t) speci-
		 fies automatic standby timer value in seconds. Value 0 disables
		 timer.

     standby	 Put ATA device into  STANDBY  state.  Optional  parameter  (-t)
		 specifies  automatic  standby	timer  value in seconds. Value 0
		 disables timer.

     sleep	 Put ATA device into SLEEP state. Note that the only way get de-
		 vice out of this state may be reset.

     fwdownload  Program firmware of the named SCSI device using the image  file
		 provided.

		 Current list of supported vendors:
		       *   HITACHI
		       *   HP
		       *   IBM
		       *   PLEXTOR
		       *   QUANTUM
		       *   SEAGATE

		 WARNING! WARNING! WARNING!

		 Little testing has been done to make sure that different device
		 models from each vendor work correctly with the fwdownload com-
		 mand.	A vendor name appearing in the supported list means only
		 that  firmware of at least one device type from that vendor has
		 successfully been programmed with the fwdownload command.   Ex-
		 tra caution should be taken when using this command since there
		 is no guarantee it will not break a device from the listed ven-
		 dors.	 Ensure that you have a recent backup of the data on the
		 device before performing a firmware update.

		 -f fw_image  Path to the firmware image file to  be  downloaded
			      to the specified device.

		 -y	      Do not ask for confirmation.

		 -s	      Run in simulation mode.  Packet sizes that will be
			      sent  are  shown,  but no actual packet is sent to
			      the device.  No confimation is asked in simulation
			      mode.

		 -v	      Besides showing sense information  in  case  of  a
			      failure,	the  verbose option causes camcontrol to
			      output a line for every firmware segment	that  is
			      sent  to	the  device by the fwdownload command --
			      the same as the ones shown in simulation mode.

     help	 Print out verbose usage information.

ENVIRONMENT
     The SCSI_MODES variable allows the user to specify an alternate  mode  page
     format file.

     The  EDITOR  variable  determines	which text editor camcontrol starts when
     editing mode pages.

FILES
     /usr/share/misc/scsi_modes  is the SCSI mode format database.
     /dev/xpt0			 is the transport layer device.
     /dev/pass* 		 are the CAM application passthrough devices.

EXAMPLES
	   camcontrol eject -n cd -u 1 -v

     Eject the CD from cd1, and print SCSI  sense  information	if  the  command
     fails.

	   camcontrol tur da0

     Send  the SCSI test unit ready command to da0.  The camcontrol utility will
     report whether the disk is ready, but will not display sense information if
     the command fails since the -v switch was not specified.

	   camcontrol tur da1 -E -C 4 -t 50 -v

     Send a test unit ready command  to  da1.	Enable	kernel	error  recovery.
     Specify  a  retry	count  of  4, and a timeout of 50 seconds.  Enable sense
     printing (with the -v flag) if the command fails.	Since error recovery  is
     turned  on,  the disk will be spun up if it is not currently spinning.  The
     camcontrol utility will report whether the disk is ready.

	   camcontrol cmd -n cd -u 1 -v -c "3C 00 00 00 00 00 00 00 0e 00" \
		   -i 0xe "s1 i3 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1"

     Issue a READ BUFFER command (0x3C) to cd1.  Display the buffer size of cd1,
     and display the first 10 bytes from the cache on cd1.  Display  SCSI  sense
     information if the command fails.

	   camcontrol cmd -n cd -u 1 -v -c "3B 00 00 00 00 00 00 00 0e 00" \
		   -o 14 "00 00 00 00 1 2 3 4 5 6 v v v v" 7 8 9 8

     Issue  a  WRITE  BUFFER (0x3B) command to cd1.  Write out 10 bytes of data,
     not including the (reserved) 4 byte header.  Print out sense information if
     the command fails.  Be very careful with this  command,  improper	use  may
     cause data corruption.

	   camcontrol modepage da3 -m 1 -e -P 3

     Edit  mode page 1 (the Read-Write Error Recover page) for da3, and save the
     settings on the drive.  Mode page 1 contains a disk drive's auto  read  and
     write reallocation settings, among other things.

	   camcontrol rescan all

     Rescan  all SCSI busses in the system for devices that have been added, re-
     moved or changed.

	   camcontrol rescan 0

     Rescan SCSI bus 0 for devices that have been added, removed or changed.

	   camcontrol rescan 0:1:0

     Rescan SCSI bus 0, target 1, lun 0 to see if it has been added, removed, or
     changed.

	   camcontrol tags da5 -N 24

     Set the number of concurrent transactions for da5 to 24.

	   camcontrol negotiate -n da -u 4 -T disable

     Disable tagged queueing for da4.

	   camcontrol negotiate -n da -u 3 -R 20.000 -O 15 -a

     Negotiate a sync rate of 20MHz and an offset of 15 with da3.  Then  send  a
     Test Unit Ready command to make the settings take effect.

	   camcontrol smpcmd ses0 -v -r 4 "40 0 00 0" -R 1020 "s9 i1"

     Send the SMP REPORT GENERAL command to ses0, and display the number of PHYs
     it contains.  Display SMP errors if the command fails.

SEE ALSO
     cam(3), cam_cdbparse(3), cam(4), pass(4), xpt(4)

HISTORY
     The camcontrol utility first appeared in FreeBSD 3.0.

     The  mode	page editing code and arbitrary SCSI command code are based upon
     code in the old scsi(8) utility and  scsi(3)  library,  written  by  Julian
     Elischer  and  Peter Dufault.  The scsi(8) program first appeared in 386BSD
     0.1.2.4, and first appeared in FreeBSD in FreeBSD 2.0.5.

AUTHORS
     Kenneth Merry <ken@FreeBSD.org>

BUGS
     The code that parses the generic command line arguments does not know  that
     some  of the subcommands take multiple arguments.	So if, for instance, you
     tried something like this:

	   camcontrol cmd -n da -u 1 -c "00 00 00 00 00 v" 0x00 -v

     The sense information from the  test  unit  ready	command  would	not  get
     printed out, since the first getopt(3) call in camcontrol bails out when it
     sees  the	second argument to -c (0x00), above.  Fixing this behavior would
     take some gross code, or changes to the getopt(3) interface.  The best  way
     to  circumvent  this  problem  is	to  always  make sure to specify generic
     camcontrol arguments before any command-specific arguments.

FreeBSD 9.1			  June 4, 2012			   CAMCONTROL(8)

home | help