xref: /freebsd/sbin/camcontrol/camcontrol.8 (revision 783d3ff6)
1.\"
2.\" Copyright (c) 1998, 1999, 2000, 2002, 2005, 2006, 2007 Kenneth D. Merry.
3.\" All rights reserved.
4.\"
5.\" Redistribution and use in source and binary forms, with or without
6.\" modification, are permitted provided that the following conditions
7.\" are met:
8.\" 1. Redistributions of source code must retain the above copyright
9.\"    notice, this list of conditions and the following disclaimer.
10.\" 2. Redistributions in binary form must reproduce the above copyright
11.\"    notice, this list of conditions and the following disclaimer in the
12.\"    documentation and/or other materials provided with the distribution.
13.\" 3. The name of the author may not be used to endorse or promote products
14.\"    derived from this software without specific prior written permission.
15.\"
16.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26.\" SUCH DAMAGE.
27.\"
28.Dd December 28, 2023
29.Dt CAMCONTROL 8
30.Os
31.Sh NAME
32.Nm camcontrol
33.Nd CAM control program
34.Sh SYNOPSIS
35.Nm
36.Aq Ar command
37.Op device id
38.Op generic args
39.Op command args
40.Nm
41.Ic devlist
42.Op Fl b
43.Op Fl v
44.Nm
45.Ic periphlist
46.Op device id
47.Op Fl n Ar dev_name
48.Op Fl u Ar unit_number
49.Nm
50.Ic tur
51.Op device id
52.Op generic args
53.Nm
54.Ic sense
55.Op device id
56.Op generic args
57.Op Fl D
58.Op Fl x
59.Nm
60.Ic inquiry
61.Op device id
62.Op generic args
63.Op Fl D
64.Op Fl S
65.Op Fl R
66.Nm
67.Ic identify
68.Op device id
69.Op generic args
70.Op Fl v
71.Nm
72.Ic reportluns
73.Op device id
74.Op generic args
75.Op Fl c
76.Op Fl l
77.Op Fl r Ar reporttype
78.Nm
79.Ic readcap
80.Op device id
81.Op generic args
82.Op Fl b
83.Op Fl h
84.Op Fl H
85.Op Fl l
86.Op Fl N
87.Op Fl q
88.Op Fl s
89.Nm
90.Ic start
91.Op device id
92.Op generic args
93.Nm
94.Ic stop
95.Op device id
96.Op generic args
97.Nm
98.Ic load
99.Op device id
100.Op generic args
101.Nm
102.Ic eject
103.Op device id
104.Op generic args
105.Nm
106.Ic reprobe
107.Op device id
108.Nm
109.Ic rescan
110.Aq all | device id | bus Ns Op :target:lun
111.Nm
112.Ic reset
113.Aq all | device id | bus Ns Op :target:lun
114.Nm
115.Ic defects
116.Op device id
117.Op generic args
118.Aq Fl f Ar format
119.Op Fl P
120.Op Fl G
121.Op Fl q
122.Op Fl s
123.Op Fl S Ar offset
124.Op Fl X
125.Nm
126.Ic modepage
127.Op device id
128.Op generic args
129.Op Fl 6
130.Aq Fl m Ar page[,subpage] | Fl l
131.Op Fl P Ar pgctl
132.Op Fl D
133.Op Fl L
134.Op Fl b | Fl e
135.Op Fl d
136.Nm
137.Ic cmd
138.Op device id
139.Op generic args
140.Aq Fl a Ar cmd Op args
141.Aq Fl c Ar cmd Op args
142.Op Fl d
143.Op Fl f
144.Op Fl i Ar len Ar fmt
145.Bk -words
146.Op Fl o Ar len Ar fmt Op args
147.Op Fl r Ar fmt
148.Ek
149.Nm
150.Ic smpcmd
151.Op device id
152.Op generic args
153.Aq Fl r Ar len Ar fmt Op args
154.Aq Fl R Ar len Ar fmt Op args
155.Nm
156.Ic smprg
157.Op device id
158.Op generic args
159.Op Fl l
160.Nm
161.Ic smppc
162.Op device id
163.Op generic args
164.Aq Fl p Ar phy
165.Op Fl l
166.Op Fl o Ar operation
167.Op Fl d Ar name
168.Op Fl m Ar rate
169.Op Fl M Ar rate
170.Op Fl T Ar pp_timeout
171.Op Fl a Ar enable|disable
172.Op Fl A Ar enable|disable
173.Op Fl s Ar enable|disable
174.Op Fl S Ar enable|disable
175.Nm
176.Ic smpphylist
177.Op device id
178.Op generic args
179.Op Fl l
180.Op Fl q
181.Nm
182.Ic smpmaninfo
183.Op device id
184.Op generic args
185.Op Fl l
186.Nm
187.Ic debug
188.Op Fl I
189.Op Fl P
190.Op Fl T
191.Op Fl S
192.Op Fl X
193.Op Fl c
194.Op Fl p
195.Aq all | off | device id | bus Ns Op :target Ns Op :lun
196.Nm
197.Ic tags
198.Op device id
199.Op generic args
200.Op Fl N Ar tags
201.Op Fl q
202.Op Fl v
203.Nm
204.Ic negotiate
205.Op device id
206.Op generic args
207.Op Fl c
208.Op Fl D Ar enable|disable
209.Op Fl M Ar mode
210.Op Fl O Ar offset
211.Op Fl q
212.Op Fl R Ar syncrate
213.Op Fl T Ar enable|disable
214.Op Fl U
215.Op Fl W Ar bus_width
216.Op Fl v
217.Nm
218.Ic format
219.Op device id
220.Op generic args
221.Op Fl q
222.Op Fl r
223.Op Fl w
224.Op Fl y
225.Nm
226.Ic sanitize
227.Op device id
228.Op generic args
229.Aq Fl a Ar overwrite | block | crypto | exitfailure
230.Op Fl c Ar passes
231.Op Fl I
232.Op Fl P Ar pattern
233.Op Fl q
234.Op Fl U
235.Op Fl r
236.Op Fl w
237.Op Fl y
238.Nm
239.Ic idle
240.Op device id
241.Op generic args
242.Op Fl t Ar time
243.Nm
244.Ic standby
245.Op device id
246.Op generic args
247.Op Fl t Ar time
248.Nm
249.Ic sleep
250.Op device id
251.Op generic args
252.Nm
253.Ic powermode
254.Op device id
255.Op generic args
256.Nm
257.Ic apm
258.Op device id
259.Op generic args
260.Op Fl l Ar level
261.Nm
262.Ic aam
263.Op device id
264.Op generic args
265.Op Fl l Ar level
266.Nm
267.Ic fwdownload
268.Op device id
269.Op generic args
270.Aq Fl f Ar fw_image
271.Op Fl q
272.Op Fl s
273.Op Fl y
274.Nm
275.Ic security
276.Op device id
277.Op generic args
278.Op Fl d Ar pwd
279.Op Fl e Ar pwd
280.Op Fl f
281.Op Fl h Ar pwd
282.Op Fl k Ar pwd
283.Op Fl l Ar high|maximum
284.Op Fl q
285.Op Fl s Ar pwd
286.Op Fl T Ar timeout
287.Op Fl U Ar user|master
288.Op Fl y
289.Nm
290.Ic hpa
291.Op device id
292.Op generic args
293.Op Fl f
294.Op Fl l
295.Op Fl P
296.Op Fl p Ar pwd
297.Op Fl q
298.Op Fl s Ar max_sectors
299.Op Fl U Ar pwd
300.Op Fl y
301.Nm
302.Ic ama
303.Op device id
304.Op generic args
305.Op Fl f
306.Op Fl q
307.Op Fl s Ar max_sectors
308.Nm
309.Ic persist
310.Op device id
311.Op generic args
312.Aq Fl i Ar action | Fl o Ar action
313.Op Fl a
314.Op Fl I Ar trans_id
315.Op Fl k Ar key
316.Op Fl K Ar sa_key
317.Op Fl p
318.Op Fl R Ar rel_tgt_port
319.Op Fl s Ar scope
320.Op Fl S
321.Op Fl T Ar res_type
322.Op Fl U
323.Nm
324.Ic attrib
325.Op device id
326.Op generic args
327.Aq Fl r Ar action | Fl w Ar attrib
328.Op Fl a Ar attr_num
329.Op Fl c
330.Op Fl e Ar elem_addr
331.Op Fl F Ar form1,form2
332.Op Fl p Ar part
333.Op Fl s Ar start_addr
334.Op Fl T Ar elem_type
335.Op Fl V Ar lv_num
336.Nm
337.Ic opcodes
338.Op device id
339.Op generic args
340.Op Fl o Ar opcode
341.Op Fl s Ar service_action
342.Op Fl N
343.Op Fl T
344.Nm
345.Ic zone
346.Aq Fl c Ar cmd
347.Op Fl a
348.Op Fl l Ar lba
349.Op Fl o Ar rep_opts
350.Op Fl P Ar print_opts
351.Nm
352.Ic epc
353.Aq Fl c Ar cmd
354.Op Fl d
355.Op Fl D
356.Op Fl e
357.Op Fl H
358.Op Fl p Ar power_cond
359.Op Fl P
360.Op Fl r Ar restore_src
361.Op Fl s
362.Op Fl S Ar power_src
363.Op Fl T Ar timer
364.Nm
365.Ic timestamp
366.Op device id
367.Op generic args
368.Ao Fl r Oo Ns Fl f Ar format | Fl m | Fl U Oc | Fl s Ao Fl f Ar format Fl T Ar time | Fl U Ac Ac
369.Nm
370.Ic devtype
371.Op device id
372.Nm
373.Ic depop
374.Op device id
375.Op generic args
376.Ao Fl l | Fl d | Fl r Ac
377.Op Fl e Ar elem
378.Op Fl c Ar capacity
379.Nm
380.Ic help
381.Sh DESCRIPTION
382The
383.Nm
384utility allows users to access and control the
385.Fx
386CAM subsystem described in
387.Xr cam 4 .
388.Pp
389The
390.Nm
391utility
392can cause a loss of data and/or system crashes if used improperly.
393Even
394expert users are encouraged to exercise caution when using this command.
395Novice users should stay away from this utility.
396.Pp
397The
398.Nm
399utility has a number of primary functions, many of which support an optional
400device identifier.
401A device identifier can take one of three forms:
402.Bl -tag -width 14n
403.It deviceUNIT
404Specify a device name and unit number combination, like "da5" or "cd3".
405.It bus:target
406Specify a bus number and target id.
407The bus number can be determined from
408the output of
409.Dq camcontrol devlist .
410The lun defaults to 0.
411.It bus:target:lun
412Specify the bus, target and lun for a device.
413(e.g.\& 1:2:0)
414.El
415.Pp
416The device identifier, if it is specified,
417.Em must
418come immediately after the function name, and before any generic or
419function-specific arguments.
420Note that the
421.Fl n
422and
423.Fl u
424arguments described below will override any device name or unit number
425specified beforehand.
426The
427.Fl n
428and
429.Fl u
430arguments will
431.Em not
432override a specified bus:target or bus:target:lun, however.
433.Pp
434Most of the
435.Nm
436primary functions support these generic arguments:
437.Bl -tag -width 14n
438.It Fl C Ar count
439SCSI command retry count.
440In order for this to work, error recovery
441.Pq Fl E
442must be turned on.
443.It Fl E
444Instruct the kernel to perform generic SCSI error recovery for the given
445command.
446This is needed in order for the retry count
447.Pq Fl C
448to be honored.
449Other than retrying commands, the generic error recovery in
450the code will generally attempt to spin up drives that are not spinning.
451It may take some other actions, depending upon the sense code returned from
452the command.
453.It Fl n Ar dev_name
454Specify the device type to operate on, e.g.\& "da", "cd".
455.It Fl Q Ar task_attr
456.Tn SCSI
457task attribute for the command, if it is a
458.Tn SCSI
459command.
460This may be ordered, simple, head, or aca.
461In most cases this is not needed.
462The default is simple, which works with all
463.Tn SCSI
464devices.
465The task attribute may also be specified numerically.
466.It Fl t Ar timeout
467SCSI command timeout in seconds.
468This overrides the default timeout for
469any given command.
470.It Fl u Ar unit_number
471Specify the device unit number, e.g.\& "1", "5".
472.It Fl v
473Be verbose, print out sense information for failed SCSI commands.
474.El
475.Pp
476Primary command functions:
477.Bl -tag -width periphlist
478.It Ic devlist
479List all physical devices (logical units) attached to the CAM subsystem.
480This also includes a list of peripheral drivers attached to each device.
481With the
482.Fl v
483argument, SCSI bus number, adapter name and unit numbers are printed as
484well.
485On the other hand, with the
486.Fl b
487argument, only the bus adapter, and unit information will be printed, and
488device information will be omitted.
489.It Ic periphlist
490List all peripheral drivers attached to a given physical device (logical
491unit).
492.It Ic tur
493Send the SCSI test unit ready (0x00) command to the given device.
494The
495.Nm
496utility will report whether the device is ready or not.
497.It Ic sense
498Send a SCSI REQUEST SENSE command (0x03) to a device.
499The decoded sense (or hexdump) is printed to stdout.
500.Bl -tag -width 4n
501.It Fl D
502Request descriptor sense instead of fixed sense.
503.It Fl x
504Do a hexdump of the returned sense data.
505.El
506.It Ic inquiry
507Send a SCSI inquiry command (0x12) to a device.
508By default,
509.Nm
510will print out the standard inquiry data, device serial number, and
511transfer rate information.
512The user can specify that only certain types of
513inquiry data be printed:
514.Bl -tag -width 4n
515.It Fl D
516Get the standard inquiry data.
517.It Fl S
518Print out the serial number.
519If this flag is the only one specified,
520.Nm
521will not print out "Serial Number" before the value returned by the drive.
522This is to aid in script writing.
523.It Fl R
524Print out transfer rate information.
525.El
526.It Ic identify
527Send an ATA identify command (0xec) to a device.
528.It Ic reportluns
529Send the SCSI REPORT LUNS (0xA0) command to the given device.
530By default,
531.Nm
532will print out the list of logical units (LUNs) supported by the target device.
533There are a couple of options to modify the output:
534.Bl -tag -width 14n
535.It Fl c
536Just print out a count of LUNs, not the actual LUN numbers.
537.It Fl l
538Just print out the LUNs, and do not print out the count.
539.It Fl r Ar reporttype
540Specify the type of report to request from the target:
541.Bl -tag -width 012345678
542.It default
543Return the default report.
544This is the
545.Nm
546default.
547Most targets will support this report if they support the REPORT LUNS
548command.
549.It wellknown
550Return only well known LUNs.
551.It all
552Return all available LUNs.
553.El
554.El
555.Pp
556.Nm
557will try to print out LUN numbers in a reasonable format.
558It can understand the peripheral, flat, LUN and extended LUN formats.
559.It Ic readcap
560Send the SCSI READ CAPACITY command to the given device and display
561the results.
562If the device is larger than 2TB, the SCSI READ CAPACITY (16) service
563action will be sent to obtain the full size of the device.
564By default,
565.Nm
566will print out the last logical block of the device, and the blocksize of
567the device in bytes.
568To modify the output format, use the following options:
569.Bl -tag -width 5n
570.It Fl b
571Just print out the blocksize, not the last block or device size.
572This cannot be used with
573.Fl N
574or
575.Fl s .
576.It Fl h
577Print out the device size in human readable (base 2, 1K == 1024) format.
578This implies
579.Fl N
580and cannot be used with
581.Fl q
582or
583.Fl b .
584.It Fl H
585Print out the device size in human readable (base 10, 1K == 1000) format.
586.It Fl l
587Skip sending the SCSI READ CAPACITY (10) command.
588Send only the SCSI READ CAPACITY (16) service action and report
589its results.
590When the two do not match, a quirk is needed to resolve the ambiguity.
591.It Fl N
592Print out the number of blocks in the device instead of the last logical
593block.
594.It Fl q
595Quiet, print out the numbers only (separated by a comma if
596.Fl b
597or
598.Fl s
599are not specified).
600.It Fl s
601Print out the last logical block or the size of the device only, and omit
602the blocksize.
603.El
604.Pp
605Note that this command only displays the information, it does not update
606the kernel data structures.
607Use the
608.Nm
609reprobe subcommand to do that.
610.It Ic start
611Send the SCSI Start/Stop Unit (0x1B) command to the given device with the
612start bit set.
613.It Ic stop
614Send the SCSI Start/Stop Unit (0x1B) command to the given device with the
615start bit cleared.
616.It Ic load
617Send the SCSI Start/Stop Unit (0x1B) command to the given device with the
618start bit set and the load/eject bit set.
619.It Ic eject
620Send the SCSI Start/Stop Unit (0x1B) command to the given device with the
621start bit cleared and the load/eject bit set.
622.It Ic rescan
623Tell the kernel to scan all buses in the system (with the
624.Ar all
625argument), the given bus (XPT_SCAN_BUS), bus:target:lun or device
626(XPT_SCAN_LUN) for new devices or devices that have gone away.
627The user
628may specify a scan of all buses, a single bus, or a lun.
629Scanning all luns
630on a target is not supported.
631.Pp
632If a device is specified by peripheral name and unit number, for instance
633da4, it may only be rescanned if that device currently exists in the CAM EDT
634(Existing Device Table).
635If the device is no longer there (see
636.Nm
637devlist ),
638you must use the bus:target:lun form to rescan it.
639.It Ic reprobe
640Tell the kernel to refresh the information about the device and
641notify the upper layer,
642.Xr GEOM 4 .
643This includes sending the SCSI READ CAPACITY command and updating
644the disk size visible to the rest of the system.
645.It Ic reset
646Tell the kernel to reset all buses in the system (with the
647.Ar all
648argument), the given bus (XPT_RESET_BUS) by issuing a SCSI bus
649reset for that bus, or to reset the given bus:target:lun or device
650(XPT_RESET_DEV), typically by issuing a BUS DEVICE RESET message after
651connecting to that device.
652Note that this can have a destructive impact
653on the system.
654.It Ic defects
655Send the
656.Tn SCSI
657READ DEFECT DATA (10) command (0x37) or the
658.Tn SCSI
659READ DEFECT DATA (12) command (0xB7) to the given device, and
660print out any combination of: the total number of defects, the primary
661defect list (PLIST), and the grown defect list (GLIST).
662.Bl -tag -width 11n
663.It Fl f Ar format
664Specify the requested format of the defect list.
665The format argument is
666required.
667Most drives support the physical sector format.
668Some drives
669support the logical block format.
670Many drives, if they do not support the
671requested format, return the data in an alternate format, along with sense
672information indicating that the requested data format is not supported.
673The
674.Nm
675utility
676attempts to detect this, and print out whatever format the drive returns.
677If the drive uses a non-standard sense code to report that it does not
678support the requested format,
679.Nm
680will probably see the error as a failure to complete the request.
681.Pp
682The format options are:
683.Bl -tag -width 9n
684.It block
685Print out the list as logical blocks.
686This is limited to 32-bit block sizes, and isn't supported by many modern
687drives.
688.It longblock
689Print out the list as logical blocks.
690This option uses a 64-bit block size.
691.It bfi
692Print out the list in bytes from index format.
693.It extbfi
694Print out the list in extended bytes from index format.
695The extended format allows for ranges of blocks to be printed.
696.It phys
697Print out the list in physical sector format.
698Most drives support this format.
699.It extphys
700Print out the list in extended physical sector format.
701The extended format allows for ranges of blocks to be printed.
702.El
703.It Fl G
704Print out the grown defect list.
705This is a list of bad blocks that have
706been remapped since the disk left the factory.
707.It Fl P
708Print out the primary defect list.
709This is the list of defects that were present in the factory.
710.It Fl q
711When printing status information with
712.Fl s ,
713only print the number of defects.
714.It Fl s
715Just print the number of defects, not the list of defects.
716.It Fl S Ar offset
717Specify the starting offset into the defect list.
718This implies using the
719.Tn SCSI
720READ DEFECT DATA (12) command, as the 10 byte version of the command
721doesn't support the address descriptor index field.
722Not all drives support the 12 byte command, and some drives that support
723the 12 byte command don't support the address descriptor index field.
724.It Fl X
725Print out defects in hexadecimal (base 16) form instead of base 10 form.
726.El
727.Pp
728If neither
729.Fl P
730nor
731.Fl G
732is specified,
733.Nm
734will print out the number of defects given in the READ DEFECT DATA header
735returned from the drive.
736Some drives will report 0 defects if neither the primary or grown defect
737lists are requested.
738.It Ic modepage
739Allows the user to display and optionally edit a SCSI mode page.
740The mode
741page formats are located in
742.Pa /usr/share/misc/scsi_modes .
743This can be overridden by specifying a different file in the
744.Ev SCSI_MODES
745environment variable.
746The
747.Ic modepage
748command takes several arguments:
749.Bl -tag -width 12n
750.It Fl 6
751Use 6 byte MODE commands instead of default 10 byte.
752Old devices may not support 10 byte MODE commands, while new devices may
753not be able to report all mode pages with 6 byte commands.
754If not specified,
755.Nm
756starts with 10 byte commands and falls back to 6 byte on error.
757.It Fl d
758Disable block descriptors for mode sense.
759.It Fl D
760Display/edit block descriptors instead of mode page.
761.It Fl L
762Use long LBA block descriptors.
763Allows number of LBAs bigger than 2^^32.
764.It Fl b
765Displays mode page data in binary format.
766.It Fl e
767This flag allows the user to edit values in the mode page.
768The user may
769either edit mode page values with the text editor pointed to by his
770.Ev EDITOR
771environment variable, or supply mode page values via standard input, using
772the same format that
773.Nm
774uses to display mode page values.
775The editor will be invoked if
776.Nm
777detects that standard input is terminal.
778.It Fl l
779Lists all available mode pages.
780If specified more than once, also lists subpages.
781.It Fl m Ar page[,subpage]
782This specifies the number of the mode page and optionally subpage the user
783would like to view and/or edit.
784This argument is mandatory unless
785.Fl l
786is specified.
787.It Fl P Ar pgctl
788This allows the user to specify the page control field.
789Possible values are:
790.Bl -tag -width xxx -compact
791.It 0
792Current values
793.It 1
794Changeable values
795.It 2
796Default values
797.It 3
798Saved values
799.El
800.El
801.It Ic cmd
802Allows the user to send an arbitrary ATA or SCSI CDB to any device.
803The
804.Ic cmd
805function requires the
806.Fl c
807argument to specify SCSI CDB or the
808.Fl a
809argument to specify ATA Command Block registers values.
810Other arguments are optional, depending on
811the command type.
812The command and data specification syntax is documented
813in
814.Xr cam_cdbparse 3 .
815NOTE: If the CDB specified causes data to be transferred to or from the
816SCSI device in question, you MUST specify either
817.Fl i
818or
819.Fl o .
820.Bl -tag -width 17n
821.It Fl a Ar cmd Op args
822This specifies the content of 12 ATA Command Block registers (command,
823features, lba_low, lba_mid, lba_high, device, lba_low_exp, lba_mid_exp.
824lba_high_exp, features_exp, sector_count, sector_count_exp).
825.It Fl c Ar cmd Op args
826This specifies the SCSI CDB.
827SCSI CDBs may be 6, 10, 12 or 16 bytes.
828.It Fl d
829Specifies DMA protocol to be used for ATA command.
830.It Fl f
831Specifies FPDMA (NCQ) protocol to be used for ATA command.
832.It Fl i Ar len Ar fmt
833This specifies the amount of data to read, and how it should be displayed.
834If the format is
835.Sq - ,
836.Ar len
837bytes of data will be read from the device and written to standard output.
838.It Fl o Ar len Ar fmt Op args
839This specifies the amount of data to be written to a device, and the data
840that is to be written.
841If the format is
842.Sq - ,
843.Ar len
844bytes of data will be read from standard input and written to the device.
845.It Fl r Ar fmt
846This specifies that 11 result ATA Command Block registers should be displayed
847(status, error, lba_low, lba_mid, lba_high, device, lba_low_exp, lba_mid_exp,
848lba_high_exp, sector_count, sector_count_exp), and how.
849If the format is
850.Sq - ,
85111 result registers will be written to standard output in hex.
852.El
853.It Ic smpcmd
854Allows the user to send an arbitrary Serial
855Management Protocol (SMP) command to a device.
856The
857.Ic smpcmd
858function requires the
859.Fl r
860argument to specify the SMP request to be sent, and the
861.Fl R
862argument to specify the format of the SMP response.
863The syntax for the SMP request and response arguments is documented in
864.Xr cam_cdbparse 3 .
865.Pp
866Note that SAS adapters that support SMP passthrough (at least the currently
867known adapters) do not accept CRC bytes from the user in the request and do
868not pass CRC bytes back to the user in the response.
869Therefore users should not include the CRC bytes in the length of the
870request and not expect CRC bytes to be returned in the response.
871.Bl -tag -width 17n
872.It Fl r Ar len Ar fmt Op args
873This specifies the size of the SMP request, without the CRC bytes, and the
874SMP request format.
875If the format is
876.Sq - ,
877.Ar len
878bytes of data will be read from standard input and written as the SMP
879request.
880.It Fl R Ar len Ar fmt Op args
881This specifies the size of the buffer allocated for the SMP response, and
882the SMP response format.
883If the format is
884.Sq - ,
885.Ar len
886bytes of data will be allocated for the response and the response will be
887written to standard output.
888.El
889.It Ic smprg
890Allows the user to send the Serial Management Protocol (SMP) Report General
891command to a device.
892.Nm
893will display the data returned by the Report General command.
894If the SMP target supports the long response format, the additional data
895will be requested and displayed automatically.
896.Bl -tag -width 8n
897.It Fl l
898Request the long response format only.
899Not all SMP targets support the long response format.
900This option causes
901.Nm
902to skip sending the initial report general request without the long bit set
903and only issue a report general request with the long bit set.
904.El
905.It Ic smppc
906Allows the user to issue the Serial Management Protocol (SMP) PHY Control
907command to a device.
908This function should be used with some caution, as it can render devices
909inaccessible, and could potentially cause data corruption as well.
910The
911.Fl p
912argument is required to specify the PHY to operate on.
913.Bl -tag -width 17n
914.It Fl p Ar phy
915Specify the PHY to operate on.
916This argument is required.
917.It Fl l
918Request the long request/response format.
919Not all SMP targets support the long response format.
920For the PHY Control command, this currently only affects whether the
921request length is set to a value other than 0.
922.It Fl o Ar operation
923Specify a PHY control operation.
924Only one
925.Fl o
926operation may be specified.
927The operation may be specified numerically (in decimal, hexadecimal, or octal)
928or one of the following operation names may be specified:
929.Bl -tag -width 16n
930.It nop
931No operation.
932It is not necessary to specify this argument.
933.It linkreset
934Send the LINK RESET command to the phy.
935.It hardreset
936Send the HARD RESET command to the phy.
937.It disable
938Send the DISABLE command to the phy.
939Note that the LINK RESET or HARD RESET commands should re-enable the phy.
940.It clearerrlog
941Send the CLEAR ERROR LOG command.
942This clears the error log counters for the specified phy.
943.It clearaffiliation
944Send the CLEAR AFFILIATION command.
945This clears the affiliation from the STP initiator port with the same SAS
946address as the SMP initiator that requests the clear operation.
947.It sataportsel
948Send the TRANSMIT SATA PORT SELECTION SIGNAL command to the phy.
949This will cause a SATA port selector to use the given phy as its active phy
950and make the other phy inactive.
951.It clearitnl
952Send the CLEAR STP I_T NEXUS LOSS command to the PHY.
953.It setdevname
954Send the SET ATTACHED DEVICE NAME command to the PHY.
955This requires the
956.Fl d
957argument to specify the device name.
958.El
959.It Fl d Ar name
960Specify the attached device name.
961This option is needed with the
962.Fl o Ar setdevname
963phy operation.
964The name is a 64-bit number, and can be specified in decimal, hexadecimal
965or octal format.
966.It Fl m Ar rate
967Set the minimum physical link rate for the phy.
968This is a numeric argument.
969Currently known link rates are:
970.Bl -tag -width 5n
971.It 0x0
972Do not change current value.
973.It 0x8
9741.5 Gbps
975.It 0x9
9763 Gbps
977.It 0xa
9786 Gbps
979.El
980.Pp
981Other values may be specified for newer physical link rates.
982.It Fl M Ar rate
983Set the maximum physical link rate for the phy.
984This is a numeric argument.
985See the
986.Fl m
987argument description for known link rate arguments.
988.It Fl T Ar pp_timeout
989Set the partial pathway timeout value, in microseconds.
990See the
991.Tn ANSI
992.Tn SAS
993Protocol Layer (SPL)
994specification for more information on this field.
995.It Fl a Ar enable|disable
996Enable or disable SATA slumber phy power conditions.
997.It Fl A Ar enable|disable
998Enable or disable SATA partial power conditions.
999.It Fl s Ar enable|disable
1000Enable or disable SAS slumber phy power conditions.
1001.It Fl S Ar enable|disable
1002Enable or disable SAS partial phy power conditions.
1003.El
1004.It Ic smpphylist
1005List phys attached to a SAS expander, the address of the end device
1006attached to the phy, and the inquiry data for that device and peripheral
1007devices attached to that device.
1008The inquiry data and peripheral devices are displayed if available.
1009.Bl -tag -width 5n
1010.It Fl l
1011Turn on the long response format for the underlying SMP commands used for
1012this command.
1013.It Fl q
1014Only print out phys that are attached to a device in the CAM EDT (Existing
1015Device Table).
1016.El
1017.It Ic smpmaninfo
1018Send the SMP Report Manufacturer Information command to the device and
1019display the response.
1020.Bl -tag -width 5n
1021.It Fl l
1022Turn on the long response format for the underlying SMP commands used for
1023this command.
1024.El
1025.It Ic debug
1026Turn on CAM debugging printfs in the kernel.
1027This requires options CAMDEBUG
1028in your kernel config file.
1029WARNING: enabling debugging printfs currently
1030causes an EXTREME number of kernel printfs.
1031You may have difficulty
1032turning off the debugging printfs once they start, since the kernel will be
1033busy printing messages and unable to service other requests quickly.
1034The
1035.Ic debug
1036function takes a number of arguments:
1037.Bl -tag -width 18n
1038.It Fl I
1039Enable CAM_DEBUG_INFO printfs.
1040.It Fl P
1041Enable CAM_DEBUG_PERIPH printfs.
1042.It Fl T
1043Enable CAM_DEBUG_TRACE printfs.
1044.It Fl S
1045Enable CAM_DEBUG_SUBTRACE printfs.
1046.It Fl X
1047Enable CAM_DEBUG_XPT printfs.
1048.It Fl c
1049Enable CAM_DEBUG_CDB printfs.
1050This will cause the kernel to print out the
1051SCSI CDBs sent to the specified device(s).
1052.It Fl p
1053Enable CAM_DEBUG_PROBE printfs.
1054.It all
1055Enable debugging for all devices.
1056.It off
1057Turn off debugging for all devices
1058.It bus Ns Op :target Ns Op :lun
1059Turn on debugging for the given bus, target or lun.
1060If the lun or target
1061and lun are not specified, they are wildcarded.
1062(i.e., just specifying a
1063bus turns on debugging printfs for all devices on that bus.)
1064.El
1065.It Ic tags
1066Show or set the number of "tagged openings" or simultaneous transactions
1067we attempt to queue to a particular device.
1068By default, the
1069.Ic tags
1070command, with no command-specific arguments (i.e., only generic arguments)
1071prints out the "soft" maximum number of transactions that can be queued to
1072the device in question.
1073For more detailed information, use the
1074.Fl v
1075argument described below.
1076.Bl -tag -width 7n
1077.It Fl N Ar tags
1078Set the number of tags for the given device.
1079This must be between the
1080minimum and maximum number set in the kernel quirk table.
1081The default for
1082most devices that support tagged queueing is a minimum of 2 and a maximum
1083of 255.
1084The minimum and maximum values for a given device may be
1085determined by using the
1086.Fl v
1087switch.
1088The meaning of the
1089.Fl v
1090switch for this
1091.Nm
1092subcommand is described below.
1093.It Fl q
1094Be quiet, and do not report the number of tags.
1095This is generally used when
1096setting the number of tags.
1097.It Fl v
1098The verbose flag has special functionality for the
1099.Em tags
1100argument.
1101It causes
1102.Nm
1103to print out the tagged queueing related fields of the XPT_GDEV_TYPE CCB:
1104.Bl -tag -width 13n
1105.It dev_openings
1106This is the amount of capacity for transactions queued to a given device.
1107.It dev_active
1108This is the number of transactions currently queued to a device.
1109.It allocated
1110This is the number of CCBs allocated for the device.
1111.It held
1112The held count is the number of CCBs held by peripheral drivers that have
1113either just been completed or are about to be released to the transport
1114layer for service by a device.
1115Held CCBs reserve capacity on a given
1116device.
1117.It mintags
1118This is the current "hard" minimum number of transactions that can be
1119queued to a device at once.
1120The
1121.Ar dev_openings
1122value above cannot go below this number.
1123The default value for
1124.Ar mintags
1125is 2, although it may be set higher or lower for various devices.
1126.It maxtags
1127This is the "hard" maximum number of transactions that can be queued to a
1128device at one time.
1129The
1130.Ar dev_openings
1131value cannot go above this number.
1132The default value for
1133.Ar maxtags
1134is 255, although it may be set higher or lower for various devices.
1135.El
1136.El
1137.It Ic negotiate
1138Show or negotiate various communication parameters.
1139Some controllers may
1140not support setting or changing some of these values.
1141For instance, the
1142Adaptec 174x controllers do not support changing a device's sync rate or
1143offset.
1144The
1145.Nm
1146utility
1147will not attempt to set the parameter if the controller indicates that it
1148does not support setting the parameter.
1149To find out what the controller
1150supports, use the
1151.Fl v
1152flag.
1153The meaning of the
1154.Fl v
1155flag for the
1156.Ic negotiate
1157command is described below.
1158Also, some controller drivers do not support
1159setting negotiation parameters, even if the underlying controller supports
1160negotiation changes.
1161Some controllers, such as the Advansys wide
1162controllers, support enabling and disabling synchronous negotiation for
1163a device, but do not support setting the synchronous negotiation rate.
1164.Bl -tag -width 17n
1165.It Fl a
1166Attempt to make the negotiation settings take effect immediately by sending
1167a Test Unit Ready command to the device.
1168.It Fl c
1169Show or set current negotiation settings.
1170This is the default.
1171.It Fl D Ar enable|disable
1172Enable or disable disconnection.
1173.It Fl M Ar mode
1174Set ATA mode.
1175.It Fl O Ar offset
1176Set the command delay offset.
1177.It Fl q
1178Be quiet, do not print anything.
1179This is generally useful when you want to
1180set a parameter, but do not want any status information.
1181.It Fl R Ar syncrate
1182Change the synchronization rate for a device.
1183The sync rate is a floating
1184point value specified in MHz.
1185So, for instance,
1186.Sq 20.000
1187is a legal value, as is
1188.Sq 20 .
1189.It Fl T Ar enable|disable
1190Enable or disable tagged queueing for a device.
1191.It Fl U
1192Show or set user negotiation settings.
1193The default is to show or set
1194current negotiation settings.
1195.It Fl v
1196The verbose switch has special meaning for the
1197.Ic negotiate
1198subcommand.
1199It causes
1200.Nm
1201to print out the contents of a Path Inquiry (XPT_PATH_INQ) CCB sent to the
1202controller driver.
1203.It Fl W Ar bus_width
1204Specify the bus width to negotiate with a device.
1205The bus width is
1206specified in bits.
1207The only useful values to specify are 8, 16, and 32
1208bits.
1209The controller must support the bus width in question in order for
1210the setting to take effect.
1211.El
1212.Pp
1213In general, sync rate and offset settings will not take effect for a
1214device until a command has been sent to the device.
1215The
1216.Fl a
1217switch above will automatically send a Test Unit Ready to the device so
1218negotiation parameters will take effect.
1219.It Ic format
1220Issue the
1221.Tn SCSI
1222FORMAT UNIT command to the named device.
1223.Pp
1224.Em WARNING! WARNING! WARNING!
1225.Pp
1226Low level formatting a disk will destroy ALL data on the disk.
1227Use
1228extreme caution when issuing this command.
1229Many users low-level format
1230disks that do not really need to be low-level formatted.
1231There are
1232relatively few scenarios that call for low-level formatting a disk.
1233One reason for
1234low-level formatting a disk is to initialize the disk after changing
1235its physical sector size.
1236Another reason for low-level formatting a disk
1237is to revive the disk if you are getting "medium format corrupted" errors
1238from the disk in response to read and write requests.
1239.Pp
1240Some disks take longer than others to format.
1241Users should specify a
1242timeout long enough to allow the format to complete.
1243The default format
1244timeout is 3 hours, which should be long enough for most disks.
1245Some hard
1246disks will complete a format operation in a very short period of time
1247(on the order of 5 minutes or less).
1248This is often because the drive
1249does not really support the FORMAT UNIT command -- it just accepts the
1250command, waits a few minutes and then returns it.
1251.Pp
1252The
1253.Sq format
1254subcommand takes several arguments that modify its default behavior.
1255The
1256.Fl q
1257and
1258.Fl y
1259arguments can be useful for scripts.
1260.Bl -tag -width 6n
1261.It Fl q
1262Be quiet, do not print any status messages.
1263This option will not disable
1264the questions, however.
1265To disable questions, use the
1266.Fl y
1267argument, below.
1268.It Fl r
1269Run in
1270.Dq report only
1271mode.
1272This will report status on a format that is already running on the drive.
1273.It Fl w
1274Issue a non-immediate format command.
1275By default,
1276.Nm
1277issues the FORMAT UNIT command with the immediate bit set.
1278This tells the
1279device to immediately return the format command, before the format has
1280actually completed.
1281Then,
1282.Nm
1283gathers
1284.Tn SCSI
1285sense information from the device every second to determine how far along
1286in the format process it is.
1287If the
1288.Fl w
1289argument is specified,
1290.Nm
1291will issue a non-immediate format command, and will be unable to print any
1292information to let the user know what percentage of the disk has been
1293formatted.
1294.It Fl y
1295Do not ask any questions.
1296By default,
1297.Nm
1298will ask the user if he/she really wants to format the disk in question,
1299and also if the default format command timeout is acceptable.
1300The user
1301will not be asked about the timeout if a timeout is specified on the
1302command line.
1303.El
1304.It Ic sanitize
1305Issue the SANITIZE command to the named device.
1306.Pp
1307.Em WARNING! WARNING! WARNING!
1308.Pp
1309ALL data on the disk will be destroyed or made inaccessible.
1310Recovery of the data is not possible.
1311Use extreme caution when issuing this command.
1312.Pp
1313The
1314.Sq sanitize
1315subcommand takes several arguments that modify its default behavior.
1316The
1317.Fl q
1318and
1319.Fl y
1320arguments can be useful for scripts.
1321.Bl -tag -width 6n
1322.It Fl a Ar operation
1323Specify the sanitize operation to perform.
1324.Bl -tag -width 16n
1325.It overwrite
1326Perform an overwrite operation by writing a user supplied
1327data pattern to the device one or more times.
1328The pattern is given by the
1329.Fl P
1330argument.
1331The number of times is given by the
1332.Fl c
1333argument.
1334.It block
1335Perform a block erase operation.
1336All the device's blocks are set to a vendor defined
1337value, typically zero.
1338.It crypto
1339Perform a cryptographic erase operation.
1340The encryption keys are changed to prevent the decryption
1341of the data.
1342.It exitfailure
1343Exits a previously failed sanitize operation.
1344A failed sanitize operation can only be exited if it was
1345run in the unrestricted completion mode, as provided by the
1346.Fl U
1347argument.
1348.El
1349.It Fl c Ar passes
1350The number of passes when performing an
1351.Sq overwrite
1352operation.
1353Valid values are between 1 and 31.
1354The default is 1.
1355.It Fl I
1356When performing an
1357.Sq overwrite
1358operation, the pattern is inverted between consecutive passes.
1359.It Fl P Ar pattern
1360Path to the file containing the pattern to use when
1361performing an
1362.Sq overwrite
1363operation.
1364The pattern is repeated as needed to fill each block.
1365.It Fl q
1366Be quiet, do not print any status messages.
1367This option will not disable
1368the questions, however.
1369To disable questions, use the
1370.Fl y
1371argument, below.
1372.It Fl U
1373Perform the sanitize in the unrestricted completion mode.
1374If the operation fails, it can later be exited with the
1375.Sq exitfailure
1376operation.
1377.It Fl r
1378Run in
1379.Dq report only
1380mode.
1381This will report status on a sanitize that is already running on the drive.
1382.It Fl w
1383Issue a non-immediate sanitize command.
1384By default,
1385.Nm
1386issues the SANITIZE command with the immediate bit set.
1387This tells the
1388device to immediately return the sanitize command, before
1389the sanitize has actually completed.
1390Then,
1391.Nm
1392gathers
1393.Tn SCSI
1394sense information from the device every second to determine how far along
1395in the sanitize process it is.
1396If the
1397.Fl w
1398argument is specified,
1399.Nm
1400will issue a non-immediate sanitize command, and will be unable to print any
1401information to let the user know what percentage of the disk has been
1402sanitized.
1403.It Fl y
1404Do not ask any questions.
1405By default,
1406.Nm
1407will ask the user if he/she really wants to sanitize the disk in question,
1408and also if the default sanitize command timeout is acceptable.
1409The user
1410will not be asked about the timeout if a timeout is specified on the
1411command line.
1412.El
1413.It Ic idle
1414Put ATA device into IDLE state.
1415Optional parameter
1416.Pq Fl t
1417specifies automatic standby timer value in seconds.
1418Value 0 disables timer.
1419.It Ic standby
1420Put ATA device into STANDBY state.
1421Optional parameter
1422.Pq Fl t
1423specifies automatic standby timer value in seconds.
1424Value 0 disables timer.
1425.It Ic sleep
1426Put ATA device into SLEEP state.
1427Note that the only way get device out of
1428this state may be reset.
1429.It Ic powermode
1430Report ATA device power mode.
1431.It Ic apm
1432It optional parameter
1433.Pq Fl l
1434specified, enables and sets advanced power management level, where
14351 -- minimum power, 127 -- maximum performance with standby,
1436128 -- minimum power without standby, 254 -- maximum performance.
1437If not specified -- APM is disabled.
1438.It Ic aam
1439It optional parameter
1440.Pq Fl l
1441specified, enables and sets automatic acoustic management level, where
14421 -- minimum noise, 254 -- maximum performance.
1443If not specified -- AAM is disabled.
1444.It Ic security
1445Update or report security settings, using an ATA identify command (0xec).
1446By default,
1447.Nm
1448will print out the security support and associated settings of the device.
1449The
1450.Ic security
1451command takes several arguments:
1452.Bl -tag -width 0n
1453.It Fl d Ar pwd
1454.Pp
1455Disable device security using the given password for the selected user according
1456to the devices configured security level.
1457.It Fl e Ar pwd
1458.Pp
1459Erase the device using the given password for the selected user.
1460.Pp
1461.Em WARNING! WARNING! WARNING!
1462.Pp
1463Issuing a secure erase will
1464.Em ERASE ALL
1465user data on the device and may take several hours to complete.
1466.Pp
1467When this command is used against an SSD drive all its cells will be marked as
1468empty, restoring it to factory default write performance.
1469For SSD's this action
1470usually takes just a few seconds.
1471.It Fl f
1472.Pp
1473Freeze the security configuration of the specified device.
1474.Pp
1475After command completion any other commands that update the device lock mode
1476shall be command aborted.
1477Frozen mode is disabled by power-off or hardware reset.
1478.It Fl h Ar pwd
1479.Pp
1480Enhanced erase the device using the given password for the selected user.
1481.Pp
1482.Em WARNING! WARNING! WARNING!
1483.Pp
1484Issuing an enhanced secure erase will
1485.Em ERASE ALL
1486user data on the device and may take several hours to complete.
1487.Pp
1488An enhanced erase writes predetermined data patterns to all user data areas,
1489all previously written user data shall be overwritten, including sectors that
1490are no longer in use due to reallocation.
1491.It Fl k Ar pwd
1492.Pp
1493Unlock the device using the given password for the selected user according to
1494the devices configured security level.
1495.It Fl l Ar high|maximum
1496.Pp
1497Specifies which security level to set when issuing a
1498.Fl s Ar pwd
1499command.
1500The security level determines device behavior when the master
1501password is used to unlock the device.
1502When the security level is set to high
1503the device requires the unlock command and the master password to unlock.
1504When the security level is set to maximum the device requires a secure erase
1505with the master password to unlock.
1506.Pp
1507This option must be used in conjunction with one of the security action commands.
1508.Pp
1509Defaults to
1510.Em high
1511.It Fl q
1512.Pp
1513Be quiet, do not print any status messages.
1514This option will not disable the questions, however.
1515To disable questions, use the
1516.Fl y
1517argument, below.
1518.It Fl s Ar pwd
1519.Pp
1520Password the device (enable security) using the given password for the selected
1521user.
1522This option can be combined with other options such as
1523.Fl e Em pwd
1524.Pp
1525A master password may be set in a addition to the user password.
1526The purpose of the master password is to allow an administrator to establish
1527a password that is kept secret from the user, and which may be used to unlock
1528the device if the user password is lost.
1529.Pp
1530.Em Note:
1531Setting the master password does not enable device security.
1532.Pp
1533If the master password is set and the drive supports a Master Revision Code
1534feature the Master Password Revision Code will be decremented.
1535.It Fl T Ar timeout
1536.Pp
1537Overrides the default timeout, specified in seconds, used for both
1538.Fl e
1539and
1540.Fl h
1541this is useful if your system has problems processing long timeouts correctly.
1542.Pp
1543Usually the timeout is calculated from the information stored on the drive if
1544present, otherwise it defaults to 2 hours.
1545.It Fl U Ar user|master
1546.Pp
1547Specifies which user to set / use for the running action command, valid values
1548are user or master and defaults to master if not set.
1549.Pp
1550This option must be used in conjunction with one of the security action commands.
1551.Pp
1552Defaults to
1553.Em master
1554.It Fl y
1555.Pp
1556Confirm yes to dangerous options such as
1557.Fl e
1558without prompting for confirmation.
1559.El
1560.Pp
1561If the password specified for any action commands does not match the configured
1562password for the specified user the command will fail.
1563.Pp
1564The password in all cases is limited to 32 characters, longer passwords will
1565fail.
1566.It Ic hpa
1567Update or report Host Protected Area details.
1568By default
1569.Nm
1570will print out the HPA support and associated settings of the device.
1571The
1572.Ic hpa
1573command takes several optional arguments:
1574.Bl -tag -width 0n
1575.It Fl f
1576.Pp
1577Freeze the HPA configuration of the specified device.
1578.Pp
1579After command completion any other commands that update the HPA configuration
1580shall be command aborted.
1581Frozen mode is disabled by power-off or hardware reset.
1582.It Fl l
1583.Pp
1584Lock the HPA configuration of the device until a successful call to unlock or
1585the next power-on reset occurs.
1586.It Fl P
1587.Pp
1588Make the HPA max sectors persist across power-on reset or a hardware reset.
1589This must be used in combination with
1590.Fl s Ar max_sectors
1591.
1592.It Fl p Ar pwd
1593.Pp
1594Set the HPA configuration password required for unlock calls.
1595.It Fl q
1596.Pp
1597Be quiet, do not print any status messages.
1598This option will not disable the questions.
1599To disable questions, use the
1600.Fl y
1601argument, below.
1602.It Fl s Ar max_sectors
1603.Pp
1604Configures the maximum user accessible sectors of the device.
1605This will change the number of sectors the device reports.
1606.Pp
1607.Em WARNING! WARNING! WARNING!
1608.Pp
1609Changing the max sectors of a device using this option will make the data on
1610the device beyond the specified value inaccessible.
1611.Pp
1612Only one successful
1613.Fl s Ar max_sectors
1614call can be made without a power-on reset or a hardware reset of the device.
1615.It Fl U Ar pwd
1616.Pp
1617Unlock the HPA configuration of the specified device using the given password.
1618If the password specified does not match the password configured via
1619.Fl p Ar pwd
1620the command will fail.
1621.Pp
1622After 5 failed unlock calls, due to password miss-match, the device will refuse
1623additional unlock calls until after a power-on reset.
1624.It Fl y
1625.Pp
1626Confirm yes to dangerous options such as
1627.Fl e
1628without prompting for confirmation
1629.El
1630.Pp
1631The password for all HPA commands is limited to 32 characters, longer passwords
1632will fail.
1633.It Ic ama
1634Update or report Accessible Max Address Configuration.
1635By default
1636.Nm
1637will print out the Accessible Max Address Configuration support and associated
1638settings of the device.
1639The
1640.Ic ama
1641command takes several optional arguments:
1642.Bl -tag -width 0n
1643.It Fl f
1644.Pp
1645Freeze the Accessible Max Address Configuration of the specified device.
1646.Pp
1647After command completion any other commands that update the configuration
1648shall be command aborted.
1649Frozen mode is disabled by power-off.
1650.It Fl q
1651.Pp
1652Be quiet, do not print any status messages.
1653.It Fl s Ar max_sectors
1654.Pp
1655Configures the maximum user accessible sectors of the device.
1656This will change the number of sectors the device reports.
1657.Pp
1658.Em WARNING! WARNING! WARNING!
1659.Pp
1660Changing the max sectors of a device using this option will make the data on
1661the device beyond the specified value indeterminate.
1662.Pp
1663Only one successful
1664.Fl s Ar max_sectors
1665call can be made without a power-on reset of the device.
1666.El
1667.It Ic fwdownload
1668Program firmware of the named
1669.Tn SCSI
1670or ATA device using the image file provided.
1671.Pp
1672If the device is a
1673.Tn SCSI
1674device and it provides a recommended timeout for the WRITE BUFFER command
1675(see the
1676.Nm
1677opcodes subcommand), that timeout will be used for the firmware download.
1678The drive-recommended timeout value may be overridden on the command line
1679with the
1680.Fl t
1681option.
1682.Pp
1683Current list of supported vendors for SCSI/SAS drives:
1684.Bl -tag -width 10n
1685.It HGST
1686Tested with 4TB SAS drives, model number HUS724040ALS640.
1687.It HITACHI
1688.It HP
1689.It IBM
1690Tested with LTO-5 (ULTRIUM-HH5) and LTO-6 (ULTRIUM-HH6) tape drives.
1691There is a separate table entry for hard drives, because the update method
1692for hard drives is different than the method for tape drives.
1693.It PLEXTOR
1694.It QUALSTAR
1695.It QUANTUM
1696.It SAMSUNG
1697Tested with SM1625 SSDs.
1698.It SEAGATE
1699Tested with Constellation ES (ST32000444SS), ES.2 (ST33000651SS) and
1700ES.3 (ST1000NM0023) drives.
1701.It SmrtStor
1702Tested with 400GB Optimus SSDs (TXA2D20400GA6001).
1703.It TOSHIBA
1704Tested with 22TB MG10SFA22TE SAS drives.
1705.El
1706.Pp
1707.Em WARNING! WARNING! WARNING!
1708.Pp
1709Little testing has been done to make sure that different device models from
1710each vendor work correctly with the fwdownload command.
1711A vendor name appearing in the supported list means only that firmware of at
1712least one device type from that vendor has successfully been programmed with
1713the fwdownload command.
1714Extra caution should be taken when using this command since there is no
1715guarantee it will not break a device from the listed vendors.
1716Ensure that you have a recent backup of the data on the device before
1717performing a firmware update.
1718.Pp
1719Note that unknown
1720.Tn SCSI
1721protocol devices will not be programmed, since there is little chance of
1722the firmware download succeeding.
1723.Pp
1724.Nm
1725will currently attempt a firmware download to any
1726.Tn ATA
1727or
1728.Tn SATA
1729device, since the standard
1730.Tn ATA
1731DOWNLOAD MICROCODE command may work.
1732Firmware downloads to
1733.Tn ATA
1734and
1735.Tn SATA
1736devices are supported for devices connected
1737to standard
1738.Tn ATA
1739and
1740.Tn SATA
1741controllers, and devices connected to SAS controllers
1742with
1743.Tn SCSI
1744to
1745.Tn ATA
1746translation capability.
1747In the latter case,
1748.Nm
1749uses the
1750.Tn SCSI
1751.Tn ATA
1752PASS-THROUGH command to send the
1753.Tn ATA
1754DOWNLOAD MICROCODE command to the drive.
1755Some
1756.Tn SCSI
1757to
1758.Tn ATA
1759translation implementations don't work fully when translating
1760.Tn SCSI
1761WRITE BUFFER commands to
1762.Tn ATA
1763DOWNLOAD MICROCODE commands, but do support
1764.Tn ATA
1765passthrough well enough to do a firmware download.
1766.Bl -tag -width 11n
1767.It Fl f Ar fw_image
1768Path to the firmware image file to be downloaded to the specified device.
1769.It Fl q
1770Do not print informational messages, only print errors.
1771This option should be used with the
1772.Fl y
1773option to suppress all output.
1774.It Fl s
1775Run in simulation mode.
1776Device checks are run and the confirmation dialog is shown, but no firmware
1777download will occur.
1778.It Fl v
1779Show
1780.Tn SCSI
1781or
1782.Tn ATA
1783errors in the event of a failure.
1784.Pp
1785In simulation mode, print out the
1786.Tn SCSI
1787CDB
1788or
1789.Tn ATA
1790register values that would be used for the firmware download command.
1791.It Fl y
1792Do not ask for confirmation.
1793.El
1794.It Ic persist
1795Persistent reservation support.
1796Persistent reservations are a way to reserve a particular
1797.Tn SCSI
1798LUN for use by one or more
1799.Tn SCSI
1800initiators.
1801If the
1802.Fl i
1803option is specified,
1804.Nm
1805will issue the
1806.Tn SCSI
1807PERSISTENT RESERVE IN
1808command using the requested service action.
1809If the
1810.Fl o
1811option is specified,
1812.Nm
1813will issue the
1814.Tn SCSI
1815PERSISTENT RESERVE OUT
1816command using the requested service action.
1817One of those two options is required.
1818.Pp
1819Persistent reservations are complex, and fully explaining them is outside
1820the scope of this manual.
1821Please visit
1822https://www.t10.org
1823and download the latest SPC spec for a full explanation of persistent
1824reservations.
1825.Bl -tag -width 8n
1826.It Fl i Ar mode
1827Specify the service action for the PERSISTENT RESERVE IN command.
1828Supported service actions:
1829.Bl -tag -width 19n
1830.It read_keys
1831Report the current persistent reservation generation (PRgeneration) and any
1832registered keys.
1833.It read_reservation
1834Report the persistent reservation, if any.
1835.It report_capabilities
1836Report the persistent reservation capabilities of the LUN.
1837.It read_full_status
1838Report the full status of persistent reservations on the LUN.
1839.El
1840.It Fl o Ar mode
1841Specify the service action for the PERSISTENT RESERVE OUT command.
1842For service actions like register that are components of other service
1843action names, the entire name must be specified.
1844Otherwise, enough of the service action name must be specified to
1845distinguish it from other possible service actions.
1846Supported service actions:
1847.Bl -tag -width 15n
1848.It register
1849Register a reservation key with the LUN or unregister a reservation key.
1850To register a key, specify the requested key as the Service Action
1851Reservation Key.
1852To unregister a key, specify the previously registered key as the
1853Reservation Key.
1854To change a key, specify the old key as the Reservation Key and the new
1855key as the Service Action Reservation Key.
1856.It register_ignore
1857This is similar to the register subcommand, except that the Reservation Key
1858is ignored.
1859The Service Action Reservation Key will overwrite any previous key
1860registered for the initiator.
1861.It reserve
1862Create a reservation.
1863A key must be registered with the LUN before the LUN can be reserved, and
1864it must be specified as the Reservation Key.
1865The type of reservation must also be specified.
1866The scope defaults to LUN scope (LU_SCOPE), but may be changed.
1867.It release
1868Release a reservation.
1869The Reservation Key must be specified.
1870.It clear
1871Release a reservation and remove all keys from the device.
1872The Reservation Key must be specified.
1873.It preempt
1874Remove a reservation belonging to another initiator.
1875The Reservation Key must be specified.
1876The Service Action Reservation Key may be specified, depending on the
1877operation being performed.
1878.It preempt_abort
1879Remove a reservation belonging to another initiator and abort all
1880outstanding commands from that initiator.
1881The Reservation Key must be specified.
1882The Service Action Reservation Key may be specified, depending on the
1883operation being performed.
1884.It register_move
1885Register another initiator with the LUN, and establish a reservation on the
1886LUN for that initiator.
1887The Reservation Key and Service Action Reservation Key must be specified.
1888.It replace_lost
1889Replace Lost Reservation information.
1890.El
1891.It Fl a
1892Set the All Target Ports (ALL_TG_PT) bit.
1893This requests that the key registration be applied to all target ports and
1894not just the particular target port that receives the command.
1895This only applies to the register and register_ignore actions.
1896.It Fl I Ar tid
1897Specify a Transport ID.
1898This only applies to the Register and Register and Move service actions for
1899Persistent Reserve Out.
1900Multiple Transport IDs may be specified with multiple
1901.Fl I
1902arguments.
1903With the Register service action, specifying one or more Transport IDs
1904implicitly enables the
1905.Fl S
1906option which turns on the SPEC_I_PT bit.
1907Transport IDs generally have the format protocol,id.
1908.Bl -tag -width 5n
1909.It SAS
1910A SAS Transport ID consists of
1911.Dq sas,
1912followed by a 64-bit SAS address.
1913For example:
1914.Pp
1915.Dl sas,0x1234567812345678
1916.It FC
1917A Fibre Channel Transport ID consists of
1918.Dq fcp,
1919followed by a 64-bit Fibre Channel World Wide Name.
1920For example:
1921.Pp
1922.Dl fcp,0x1234567812345678
1923.It SPI
1924A Parallel SCSI address consists of
1925.Dq spi,
1926followed by a SCSI target ID and a relative target port identifier.
1927For example:
1928.Pp
1929.Dl spi,4,1
1930.It 1394
1931An IEEE 1394 (Firewire) Transport ID consists of
1932.Dq sbp,
1933followed by a 64-bit EUI-64 IEEE 1394 node unique identifier.
1934For example:
1935.Pp
1936.Dl sbp,0x1234567812345678
1937.It RDMA
1938A SCSI over RDMA Transport ID consists of
1939.Dq srp,
1940followed by a 128-bit RDMA initiator port identifier.
1941The port identifier must be exactly 32 or 34 (if the leading 0x is
1942included) hexadecimal digits.
1943Only hexadecimal (base 16) numbers are supported.
1944For example:
1945.Pp
1946.Dl srp,0x12345678123456781234567812345678
1947.It iSCSI
1948An iSCSI Transport ID consists an iSCSI name and optionally a separator and
1949iSCSI session ID.
1950For example, if only the iSCSI name is specified:
1951.Pp
1952.Dl iqn.2012-06.com.example:target0
1953.Pp
1954If the iSCSI separator and initiator session ID are specified:
1955.Pp
1956.Dl iqn.2012-06.com.example:target0,i,0x123
1957.It PCIe
1958A SCSI over PCIe Transport ID consists of
1959.Dq sop,
1960followed by a PCIe Routing ID.
1961The Routing ID consists of a bus, device and function or in the alternate
1962form, a bus and function.
1963The bus must be in the range of 0 to 255 inclusive and the device must be
1964in the range of 0 to 31 inclusive.
1965The function must be in the range of 0 to 7 inclusive if the standard form
1966is used, and in the range of 0 to 255 inclusive if the alternate form is
1967used.
1968For example, if a bus, device and function are specified for the standard
1969Routing ID form:
1970.Pp
1971.Dl sop,4,5,1
1972.Pp
1973If the alternate Routing ID form is used:
1974.Pp
1975.Dl sop,4,1
1976.El
1977.It Fl k Ar key
1978Specify the Reservation Key.
1979This may be in decimal, octal or hexadecimal format.
1980The value is zero by default if not otherwise specified.
1981The value must be between 0 and 2^64 - 1, inclusive.
1982.It Fl K Ar key
1983Specify the Service Action Reservation Key.
1984This may be in decimal, octal or hexadecimal format.
1985The value is zero by default if not otherwise specified.
1986The value must be between 0 and 2^64 - 1, inclusive.
1987.It Fl p
1988Enable the Activate Persist Through Power Loss bit.
1989This is only used for the register and register_ignore actions.
1990This requests that the reservation persist across power loss events.
1991.It Fl s Ar scope
1992Specify the scope of the reservation.
1993The scope may be specified by name or by number.
1994The scope is ignored for register, register_ignore and clear.
1995If the desired scope isn't available by name, you may specify the number.
1996.Bl -tag -width 7n
1997.It lun
1998LUN scope (0x00).
1999This encompasses the entire LUN.
2000.It extent
2001Extent scope (0x01).
2002.It element
2003Element scope (0x02).
2004.El
2005.It Fl R Ar rtp
2006Specify the Relative Target Port.
2007This only applies to the Register and Move service action of the Persistent
2008Reserve Out command.
2009.It Fl S
2010Enable the SPEC_I_PT bit.
2011This only applies to the Register service action of Persistent Reserve Out.
2012You must also specify at least one Transport ID with
2013.Fl I
2014if this option is set.
2015If you specify a Transport ID, this option is automatically set.
2016It is an error to specify this option for any service action other than
2017Register.
2018.It Fl T Ar type
2019Specify the reservation type.
2020The reservation type may be specified by name or by number.
2021If the desired reservation type isn't available by name, you may specify
2022the number.
2023Supported reservation type names:
2024.Bl -tag -width 11n
2025.It read_shared
2026Read Shared mode.
2027.It wr_ex
2028Write Exclusive mode.
2029May also be specified as
2030.Dq write_exclusive .
2031.It rd_ex
2032Read Exclusive mode.
2033May also be specified as
2034.Dq read_exclusive .
2035.It ex_ac
2036Exclusive access mode.
2037May also be specified as
2038.Dq exclusive_access .
2039.It wr_ex_ro
2040Write Exclusive Registrants Only mode.
2041May also be specified as
2042.Dq write_exclusive_reg_only .
2043.It ex_ac_ro
2044Exclusive Access Registrants Only mode.
2045May also be specified as
2046.Dq exclusive_access_reg_only .
2047.It wr_ex_ar
2048Write Exclusive All Registrants mode.
2049May also be specified as
2050.Dq write_exclusive_all_regs .
2051.It ex_ac_ar
2052Exclusive Access All Registrants mode.
2053May also be specified as
2054.Dq exclusive_access_all_regs .
2055.El
2056.It Fl U
2057Specify that the target should unregister the initiator that sent
2058the Register and Move request.
2059By default, the target will not unregister the initiator that sends the
2060Register and Move request.
2061This option only applies to the Register and Move service action of the
2062Persistent Reserve Out command.
2063.El
2064.It Ic attrib
2065Issue the
2066.Tn SCSI
2067READ or WRITE ATTRIBUTE commands.
2068These commands are used to read and write attributes in Medium Auxiliary
2069Memory (MAM).
2070The most common place Medium Auxiliary Memory is found is small flash chips
2071included tape cartriges.
2072For instance,
2073.Tn LTO
2074tapes have MAM.
2075Either the
2076.Fl r
2077option or the
2078.Fl w
2079option must be specified.
2080.Bl -tag -width 14n
2081.It Fl r Ar action
2082Specify the READ ATTRIBUTE service action.
2083.Bl -tag -width 11n
2084.It attr_values
2085Issue the ATTRIBUTE VALUES service action.
2086Read and decode the available attributes and their values.
2087.It attr_list
2088Issue the ATTRIBUTE LIST service action.
2089List the attributes that are available to read and write.
2090.It lv_list
2091Issue the LOGICAL VOLUME LIST service action.
2092List the available logical volumes in the MAM.
2093.It part_list
2094Issue the PARTITION LIST service action.
2095List the available partitions in the MAM.
2096.It supp_attr
2097Issue the SUPPORTED ATTRIBUTES service action.
2098List attributes that are supported for reading or writing.
2099These attributes may or may not be currently present in the MAM.
2100.El
2101.It Fl w Ar attr
2102Specify an attribute to write to the MAM.
2103This option is not yet implemented.
2104.It Fl a Ar num
2105Specify the attribute number to display.
2106This option only works with the attr_values, attr_list and supp_attr
2107arguments to
2108.Fl r .
2109.It Fl c
2110Display cached attributes.
2111If the device supports this flag, it allows displaying attributes for the
2112last piece of media loaded in the drive.
2113.It Fl e Ar num
2114Specify the element address.
2115This is used for specifying which element number in a medium changer to
2116access when reading attributes.
2117The element number could be for a picker, portal, slot or drive.
2118.It Fl F Ar form1,form2
2119Specify the output format for the attribute values (attr_val) display as a
2120comma separated list of options.
2121The default output is currently set to field_all,nonascii_trim,text_raw.
2122Once this code is ported to FreeBSD 10, any text fields will be converted
2123from their codeset to the user's native codeset with
2124.Xr iconv 3 .
2125.Pp
2126The text options are mutually exclusive; if you specify more than one, you
2127will get unpredictable results.
2128The nonascii options are also mutually exclusive.
2129Most of the field options may be logically ORed together.
2130.Bl -tag -width 12n
2131.It text_esc
2132Print text fields with non-ASCII characters escaped.
2133.It text_raw
2134Print text fields natively, with no codeset conversion.
2135.It nonascii_esc
2136If any non-ASCII characters occur in fields that are supposed to be ASCII,
2137escape the non-ASCII characters.
2138.It nonascii_trim
2139If any non-ASCII characters occur in fields that are supposed to be ASCII,
2140omit the non-ASCII characters.
2141.It nonascii_raw
2142If any non-ASCII characters occur in fields that are supposed to be ASCII,
2143print them as they are.
2144.It field_all
2145Print all of the prefix fields: description, attribute number, attribute
2146size, and the attribute's readonly status.
2147If field_all is specified, specifying any other field options will not have
2148an effect.
2149.It field_none
2150Print none of the prefix fields, and only print out the attribute value.
2151If field_none is specified, specifying any other field options will result
2152in those fields being printed.
2153.It field_desc
2154Print out the attribute description.
2155.It field_num
2156Print out the attribute number.
2157.It field_size
2158Print out the attribute size.
2159.It field_rw
2160Print out the attribute's readonly status.
2161.El
2162.It Fl p Ar part
2163Specify the partition.
2164When the media has multiple partitions, specifying different partition
2165numbers allows seeing the values for each individual partition.
2166.It Fl s Ar start_num
2167Specify the starting attribute number.
2168This requests that the target device return attribute information starting
2169at the given number.
2170.It Fl T Ar elem_type
2171Specify the element type.
2172For medium changer devices, this allows specifying the type the element
2173referenced in the element address (
2174.Fl e ) .
2175Valid types are:
2176.Dq all ,
2177.Dq picker ,
2178.Dq slot ,
2179.Dq portal ,
2180and
2181.Dq drive .
2182.It Fl V Ar vol_num
2183Specify the number of the logical volume to operate on.
2184If the media has multiple logical volumes, this will allow displaying
2185or writing attributes on the given logical volume.
2186.El
2187.It Ic opcodes
2188Issue the REPORT SUPPORTED OPCODES service action of the
2189.Tn SCSI
2190MAINTENANCE IN
2191command.
2192Without arguments, this command will return a list of all
2193.Tn SCSI
2194commands supported by the device, including service actions of commands
2195that support service actions.
2196It will also include the
2197.Tn SCSI
2198CDB (Command Data Block) length for each command, and the description of
2199each command if it is known.
2200.Bl -tag -width 18n
2201.It Fl o Ar opcode
2202Request information on a specific opcode instead of the list of supported
2203commands.
2204If supported, the target will return a CDB-like structure that indicates
2205the opcode, service action (if any), and a mask of bits that are supported
2206in that CDB.
2207.It Fl s Ar service_action
2208For commands that support a service action, specify the service action to
2209query.
2210.It Fl N
2211If a service action is specified for a given opcode, and the device does
2212not support the given service action, the device should not return a
2213.Tn SCSI
2214error, but rather indicate in the returned parameter data that the command
2215is not supported.
2216By default, if a service action is specified for an opcode, and service
2217actions are not supported for the opcode in question, the device will
2218return an error.
2219.It Fl T
2220Include timeout values.
2221This option works with the default display, which includes all commands
2222supported by the device, and with the
2223.Fl o
2224and
2225.Fl s
2226options, which request information on a specific command and service
2227action.
2228This requests that the device report Nominal and Recommended timeout values
2229for the given command or commands.
2230The timeout values are in seconds.
2231The timeout descriptor also includes a command-specific
2232.El
2233.It Ic zone
2234Manage
2235.Tn SCSI
2236and
2237.Tn ATA
2238Zoned Block devices.
2239This allows managing devices that conform to the
2240.Tn SCSI
2241Zoned Block Commands (ZBC) and
2242.Tn ATA
2243Zoned ATA Command Set (ZAC)
2244specifications.
2245Devices using these command sets are usually hard drives using Shingled
2246Magnetic Recording (SMR).
2247There are three types of SMR drives:
2248.Bl -tag -width 13n
2249.It Drive Managed
2250Drive Managed drives look and act just like a standard random access block
2251device, but underneath, the drive reads and writes the bulk of its capacity
2252using SMR zones.
2253Sequential writes will yield better performance, but writing sequentially
2254is not required.
2255.It Host Aware
2256Host Aware drives expose the underlying zone layout via
2257.Tn SCSI
2258or
2259.Tn ATA
2260commands and allow the host to manage the zone conditions.
2261The host is not required to manage the zones on the drive, though.
2262Sequential writes will yield better performance in Sequential Write
2263Preferred zones, but the host can write randomly in those zones.
2264.It Host Managed
2265Host Managed drives expose the underlying zone layout via
2266.Tn SCSI
2267or
2268.Tn ATA
2269commands.
2270The host is required to access the zones according to the rules described
2271by the zone layout.
2272Any commands that violate the rules will be returned with an error.
2273.El
2274.Pp
2275SMR drives are divided into zones (typically in the range of 256MB each)
2276that fall into three general categories:
2277.Bl -tag -width 20n
2278.It Conventional
2279These are also known as Non Write Pointer zones.
2280These zones can be randomly written without an unexpected performance penalty.
2281.It Sequential Preferred
2282These zones should be written sequentially starting at the write pointer
2283for the zone.
2284They may be written randomly.
2285Writes that do not conform to the zone layout may be significantly slower
2286than expected.
2287.It Sequential Required
2288These zones must be written sequentially.
2289If they are not written sequentially, starting at the write pointer, the
2290command will fail.
2291.El
2292.Bl -tag -width 12n
2293.It Fl c Ar cmd
2294Specify the zone subcommand:
2295.Bl -tag -width 6n
2296.It rz
2297Issue the Report Zones command.
2298All zones are returned by default.
2299Specify report options with
2300.Fl o
2301and printing options with
2302.Fl P .
2303Specify the starting LBA with
2304.Fl l .
2305Note that
2306.Dq reportzones
2307is also accepted as a command argument.
2308.It open
2309Explicitly open the zone specified by the starting LBA.
2310.It close
2311Close the zone specified by starting LBA.
2312.It finish
2313Finish the zone specified by the starting LBA.
2314.It rwp
2315Reset the write pointer for the zone specified by the starting LBA.
2316.El
2317.It Fl a
2318For the Open, Close, Finish, and Reset Write Pointer operations, apply the
2319operation to all zones on the drive.
2320.It Fl l Ar lba
2321Specify the starting LBA.
2322For the Report Zones command, this tells the drive to report starting with
2323the zone that starts at the given LBA.
2324For the other commands, this allows the user to identify the zone requested
2325by its starting LBA.
2326The LBA may be specified in decimal, hexadecimal or octal notation.
2327.It Fl o Ar rep_opt
2328For the Report Zones command, specify a subset of zones to report.
2329.Bl -tag -width 8n
2330.It all
2331Report all zones.
2332This is the default.
2333.It emtpy
2334Report only empty zones.
2335.It imp_open
2336Report zones that are implicitly open.
2337This means that the host has sent a write to the zone without explicitly
2338opening the zone.
2339.It exp_open
2340Report zones that are explicitly open.
2341.It closed
2342Report zones that have been closed by the host.
2343.It full
2344Report zones that are full.
2345.It ro
2346Report zones that are in the read only state.
2347Note that
2348.Dq readonly
2349is also accepted as an argument.
2350.It offline
2351Report zones that are in the offline state.
2352.It reset
2353Report zones where the device recommends resetting write pointers.
2354.It nonseq
2355Report zones that have the Non Sequential Resources Active flag set.
2356These are zones that are Sequential Write Preferred, but have been written
2357non-sequentially.
2358.It nonwp
2359Report Non Write Pointer zones, also known as Conventional zones.
2360.El
2361.It Fl P Ar print_opt
2362Specify a printing option for Report Zones:
2363.Bl -tag -width 7n
2364.It normal
2365Normal Report Zones output.
2366This is the default.
2367The summary and column headings are printed, fields are separated by spaces
2368and the fields themselves may contain spaces.
2369.It summary
2370Just print the summary:  the number of zones, the maximum LBA (LBA of the
2371last logical block on the drive), and the value of the
2372.Dq same
2373field.
2374The
2375.Dq same
2376field describes whether the zones on the drive are all identical, all
2377different, or whether they are the same except for the last zone, etc.
2378.It script
2379Print the zones in a script friendly format.
2380The summary and column headings are omitted, the fields are separated by
2381commas, and the fields do not contain spaces.
2382The fields contain underscores where spaces would normally be used.
2383.El
2384.El
2385.It Ic epc
2386Issue
2387.Tn ATA
2388Extended Power Conditions (EPC) feature set commands.
2389This only works on
2390.Tn ATA
2391protocol drives, and will not work on
2392.Tn SCSI
2393protocol drives.
2394It will work on
2395.Tn SATA
2396drives behind a
2397.Tn SCSI
2398to
2399.Tn ATA
2400translation layer (SAT).
2401It may be helpful to read the ATA Command Set - 4 (ACS-4) description of
2402the Extended Power Conditions feature set, available at t13.org, to
2403understand the details of this particular
2404.Nm
2405subcommand.
2406.Bl -tag -width 6n
2407.It Fl c Ar cmd
2408Specify the epc subcommand
2409.Bl -tag -width 7n
2410.It restore
2411Restore drive power condition settings.
2412.Bl -tag -width 6n
2413.It Fl r Ar src
2414Specify the source for the restored power settings, either
2415.Dq default
2416or
2417.Dq saved .
2418This argument is required.
2419.It Fl s
2420Save the settings.
2421This only makes sense to specify when restoring from defaults.
2422.El
2423.It goto
2424Go to the specified power condition.
2425.Bl -tag -width 7n
2426.It Fl p Ar cond
2427Specify the power condition: Idle_a, Idle_b, Idle_c, Standby_y, Standby_z.
2428This argument is required.
2429.It Fl D
2430Specify delayed entry to the power condition.
2431The drive, if it supports this, can enter the power condition after the
2432command completes.
2433.It Fl H
2434Hold the power condition.
2435If the drive supports this option, it will hold the power condition and
2436reject all commands that would normally cause it to exit that power
2437condition.
2438.El
2439.It timer
2440Set the timer value for a power condition and enable or disable the
2441condition.
2442See the
2443.Dq list
2444display described below to see what the current timer settings are for each
2445Idle and Standby mode supported by the drive.
2446.Bl -tag -width 8n
2447.It Fl e
2448Enable the power condition.
2449One of
2450.Fl e
2451or
2452.Fl d
2453is required.
2454.It Fl d
2455Disable the power condition.
2456One of
2457.Fl d
2458or
2459.Fl e
2460is required.
2461.It Fl T Ar timer
2462Specify the timer in seconds.
2463The user may specify a timer as a floating point number with a maximum
2464supported resolution of tenths of a second.
2465Drives may or may not support sub-second timer values.
2466.It Fl p Ar cond
2467Specify the power condition: Idle_a, Idle_b, Idle_c, Standby_y, Standby_z.
2468This argument is required.
2469.It Fl s
2470Save the timer and power condition enable/disable state.
2471By default, if this option is not specified, only the current values for
2472this power condition will be affected.
2473.El
2474.It state
2475Enable or disable a particular power condition.
2476.Bl -tag -width 7n
2477.It Fl e
2478Enable the power condition.
2479One of
2480.Fl e
2481or
2482.Fl d
2483is required.
2484.It Fl d
2485Disable the power condition.
2486One of
2487.Fl d
2488or
2489.Fl e
2490is required.
2491.It Fl p Ar cond
2492Specify the power condition: Idle_a, Idle_b, Idle_c, Standby_y, Standby_z.
2493This argument is required.
2494.It Fl s
2495Save the power condition enable/disable state.
2496By default, if this option is not specified, only the current values for
2497this power condition will be affected.
2498.El
2499.It enable
2500Enable the Extended Power Condition (EPC) feature set.
2501.It disable
2502Disable the Extended Power Condition (EPC) feature set.
2503.It source
2504Specify the EPC power source.
2505.Bl -tag -width 6n
2506.It Fl S Ar src
2507Specify the power source, either
2508.Dq battery
2509or
2510.Dq nonbattery .
2511.El
2512.It status
2513Get the current status of several parameters related to the Extended Power
2514Condition (EPC) feature set, including whether APM and EPC are supported
2515and enabled, whether Low Power Standby is supported, whether setting the
2516EPC power source is supported, whether Low Power Standby is supported and
2517the current power condition.
2518.Bl -tag -width 3n
2519.It Fl P
2520Only report the current power condition.
2521Some drives will exit their current power condition if a command other than
2522the
2523.Tn ATA
2524CHECK POWER MODE command is received.
2525If this flag is specified,
2526.Nm
2527will only issue the
2528.Tn ATA
2529CHECK POWER MODE command to the drive.
2530.El
2531.It list
2532Display the
2533.Tn ATA
2534Power Conditions log (Log Address 0x08).
2535This shows the list of Idle and Standby power conditions the drive
2536supports, and a number of parameters about each condition, including
2537whether it is enabled and what the timer value is.
2538.El
2539.El
2540.It Ic timestamp
2541Issue REPORT TIMESTAMP or SET TIMESTAMP
2542.Tn SCSI
2543commands.
2544Either the
2545.Fl r
2546option or the
2547.Fl s
2548option must be specified.
2549.Bl -tag -width 6n
2550.It Fl r
2551Report the device's timestamp.
2552If no more arguments are specified, the timestamp will be reported using
2553the national representation of the date and time, followed by the time
2554zone.
2555.Bl -tag -width 9n
2556.It Fl f Ar format
2557Specify the strftime format string, as documented in strftime(3), to be used
2558to format the reported timestamp.
2559.It Fl m
2560Report the timestamp as milliseconds since the epoch.
2561.It Fl U
2562Report the timestamp using the national representation of the date and
2563time, but override the system time zone and use UTC instead.
2564.El
2565.El
2566.Bl -tag -width 6n
2567.It Fl s
2568Set the device's timestamp.
2569Either the
2570.Fl f
2571and
2572.Fl T
2573options or the
2574.Fl U
2575option must be specified.
2576.Bl -tag -width 9n
2577.It Fl f Ar format
2578Specify the strptime format string, as documented in strptime(3).
2579The time must also be specified with the
2580.Fl T
2581option.
2582.It Fl T Ar time
2583Provide the time in the format specified with the
2584.Fl f
2585option.
2586.It Fl U
2587Set the timestamp to the host system's time in UTC.
2588.El
2589.El
2590.It Ic devtype
2591Print out the device type for specified device.
2592.Bl -tag -width 10n
2593.It ata
2594An ATA device attached directly to an ATA controller
2595.It satl
2596An SATA device attached behind a SAS controller via SCSI-ATA Translation Layer (SATL)
2597.It scsi
2598A SCSI device
2599.It nvme
2600An directly attached NVMe device
2601.It mmcsd
2602An MMC or SD device attached via a mmcsd bus
2603.It none
2604No device type reported
2605.It unknown
2606Device type is unknown
2607.It illegal
2608A programming error occurred
2609.El
2610.It Ic depop
2611Commands necessary to support the depopulation (depop) of defective elements of a device
2612(typically heads for hard drives) or setting capacity point (typically used on
2613flash drives).
2614Issues either GET PHYSICAL ELEMENT STATUS, REMOVE ELEMENT AND TRUNCATE, or RESTORE
2615ELEMENT AND REBUILD command to manage storage elements of a drive.
2616Removal or restoration of elements may take up to a day to complete.
2617One of the
2618.Fl d ,
2619.Fl l ,
2620or
2621.Fl r
2622options must be specified.
2623These options are mutually exclusive.
2624Only SCSI drives are supported.
2625Changing the storage elements of a storage drive may result in the loss of all
2626data on that storage drive.
2627The drive may need to reinitialize after
2628.Fl d
2629or
2630.Fl r
2631commands.
2632The data on the drive is inaccessible until one of these commands complete.
2633Once one of these commands start, the drive is format corrupt until the
2634operation successfully completes.
2635While format corrupt, no read or write I/O is possible to the drive.
2636If the drive power cycles, it will remain format corrupt and the operation
2637must be restarted.
2638TEST UNIT READY or
2639.Dq camcontrol tur
2640can monitor an in-progress depop operation.
2641.Bl -tag -width 6n
2642.It Fl c Ar capacity
2643Specify the desired capacity point for the drive.
2644Valid only for the
2645.Fl d
2646flag.
2647.It Fl d
2648Remove the physical element from service or set the capacity point specified by the
2649.Fl e
2650or
2651.Fl c
2652flags.
2653The drive's capacity may be reduced by this operation.
2654.It Fl e Ar element
2655Specify the physical element to remove from service.
2656Valid only for the
2657.Fl d
2658flag.
2659.It Fl l
2660Report the current status of the physical elements of a drive.
2661.It Fl r
2662Restore all the eligible physical elements to service.
2663.El
2664.It Ic help
2665Print out verbose usage information.
2666.El
2667.Sh ENVIRONMENT
2668The
2669.Ev SCSI_MODES
2670variable allows the user to specify an alternate mode page format file.
2671.Pp
2672The
2673.Ev EDITOR
2674variable determines which text editor
2675.Nm
2676starts when editing mode pages.
2677.Sh FILES
2678.Bl -tag -width /usr/share/misc/scsi_modes -compact
2679.It Pa /usr/share/misc/scsi_modes
2680is the SCSI mode format database.
2681.It Pa /dev/xpt0
2682is the transport layer device.
2683.It Pa /dev/pass*
2684are the CAM application passthrough devices.
2685.El
2686.Sh EXAMPLES
2687.Dl camcontrol eject -n cd -u 1 -v
2688.Pp
2689Eject the CD from cd1, and print SCSI sense information if the command
2690fails.
2691.Pp
2692.Dl camcontrol tur da0
2693.Pp
2694Send the SCSI test unit ready command to da0.
2695The
2696.Nm
2697utility will report whether the disk is ready, but will not display sense
2698information if the command fails since the
2699.Fl v
2700switch was not specified.
2701.Bd -literal -offset indent
2702camcontrol tur da1 -E -C 4 -t 50 -Q head -v
2703.Ed
2704.Pp
2705Send a test unit ready command to da1.
2706Enable kernel error recovery.
2707Specify a retry count of 4, and a timeout of 50 seconds.
2708Enable sense
2709printing (with the
2710.Fl v
2711flag) if the command fails.
2712Since error recovery is turned on, the
2713disk will be spun up if it is not currently spinning.
2714The
2715.Tn SCSI
2716task attribute for the command will be set to Head of Queue.
2717The
2718.Nm
2719utility will report whether the disk is ready.
2720.Bd -literal -offset indent
2721camcontrol cmd -n cd -u 1 -v -c "3C 00 00 00 00 00 00 00 0e 00" \e
2722	-i 0xe "s1 i3 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1"
2723.Ed
2724.Pp
2725Issue a READ BUFFER command (0x3C) to cd1.
2726Display the buffer size of cd1,
2727and display the first 10 bytes from the cache on cd1.
2728Display SCSI sense
2729information if the command fails.
2730.Bd -literal -offset indent
2731camcontrol cmd -n cd -u 1 -v -c "3B 00 00 00 00 00 00 00 0e 00" \e
2732	-o 14 "00 00 00 00 1 2 3 4 5 6 v v v v" 7 8 9 8
2733.Ed
2734.Pp
2735Issue a WRITE BUFFER (0x3B) command to cd1.
2736Write out 10 bytes of data,
2737not including the (reserved) 4 byte header.
2738Print out sense information if
2739the command fails.
2740Be very careful with this command, improper use may
2741cause data corruption.
2742.Bd -literal -offset indent
2743camcontrol modepage da3 -m 1 -e -P 3
2744.Ed
2745.Pp
2746Edit mode page 1 (the Read-Write Error Recover page) for da3, and save the
2747settings on the drive.
2748Mode page 1 contains a disk drive's auto read and
2749write reallocation settings, among other things.
2750.Pp
2751.Dl camcontrol rescan all
2752.Pp
2753Rescan all SCSI buses in the system for devices that have been added,
2754removed or changed.
2755.Pp
2756.Dl camcontrol rescan 0
2757.Pp
2758Rescan SCSI bus 0 for devices that have been added, removed or changed.
2759.Pp
2760.Dl camcontrol rescan 0:1:0
2761.Pp
2762Rescan SCSI bus 0, target 1, lun 0 to see if it has been added, removed, or
2763changed.
2764.Pp
2765.Dl camcontrol tags da5 -N 24
2766.Pp
2767Set the number of concurrent transactions for da5 to 24.
2768.Bd -literal -offset indent
2769camcontrol negotiate -n da -u 4 -T disable
2770.Ed
2771.Pp
2772Disable tagged queueing for da4.
2773.Bd -literal -offset indent
2774camcontrol negotiate -n da -u 3 -R 20.000 -O 15 -a
2775.Ed
2776.Pp
2777Negotiate a sync rate of 20MHz and an offset of 15 with da3.
2778Then send a
2779Test Unit Ready command to make the settings take effect.
2780.Bd -literal -offset indent
2781camcontrol smpcmd ses0 -v -r 4 "40 0 00 0" -R 1020 "s9 i1"
2782.Ed
2783.Pp
2784Send the SMP REPORT GENERAL command to ses0, and display the number of PHYs
2785it contains.
2786Display SMP errors if the command fails.
2787.Bd -literal -offset indent
2788camcontrol security ada0
2789.Ed
2790.Pp
2791Report security support and settings for ada0
2792.Bd -literal -offset indent
2793camcontrol security ada0 -U user -s MyPass
2794.Ed
2795.Pp
2796Enable security on device ada0 with the password MyPass
2797.Bd -literal -offset indent
2798camcontrol security ada0 -U user -e MyPass
2799.Ed
2800.Pp
2801Secure erase ada0 which has had security enabled with user password MyPass
2802.Pp
2803.Em WARNING! WARNING! WARNING!
2804.Pp
2805This will
2806.Em ERASE ALL
2807data from the device, so backup your data before using!
2808.Pp
2809This command can be used against an SSD drive to restoring it to
2810factory default write performance.
2811.Bd -literal -offset indent
2812camcontrol hpa ada0
2813.Ed
2814.Pp
2815Report HPA support and settings for ada0 (also reported via
2816identify).
2817.Bd -literal -offset indent
2818camcontrol hpa ada0 -s 10240
2819.Ed
2820.Pp
2821Enables HPA on ada0 setting the maximum reported sectors to 10240.
2822.Pp
2823.Em WARNING! WARNING! WARNING!
2824.Pp
2825This will
2826.Em PREVENT ACCESS
2827to all data on the device beyond this limit until HPA is disabled by setting
2828HPA to native max sectors of the device, which can only be done after a
2829power-on or hardware reset!
2830.Pp
2831.Em DO NOT
2832use this on a device which has an active filesystem!
2833.Bd -literal -offset indent
2834camcontrol persist da0 -v -i read_keys
2835.Ed
2836.Pp
2837This will read any persistent reservation keys registered with da0, and
2838display any errors encountered when sending the PERSISTENT RESERVE IN
2839.Tn SCSI
2840command.
2841.Bd -literal -offset indent
2842camcontrol persist da0 -v -o register -a -K 0x12345678
2843.Ed
2844.Pp
2845This will register the persistent reservation key 0x12345678 with da0,
2846apply that registration to all ports on da0, and display any errors that
2847occur when sending the PERSISTENT RESERVE OUT command.
2848.Bd -literal -offset indent
2849camcontrol persist da0 -v -o reserve -s lun -k 0x12345678 -T ex_ac
2850.Ed
2851.Pp
2852This will reserve da0 for the exlusive use of the initiator issuing the
2853command.
2854The scope of the reservation is the entire LUN.
2855Any errors sending the PERSISTENT RESERVE OUT command will be displayed.
2856.Bd -literal -offset indent
2857camcontrol persist da0 -v -i read_full
2858.Ed
2859.Pp
2860This will display the full status of all reservations on da0 and print out
2861status if there are any errors.
2862.Bd -literal -offset indent
2863camcontrol persist da0 -v -o release -k 0x12345678 -T ex_ac
2864.Ed
2865.Pp
2866This will release a reservation on da0 of the type ex_ac
2867(Exclusive Access).
2868The Reservation Key for this registration is 0x12345678.
2869Any errors that occur will be displayed.
2870.Bd -literal -offset indent
2871camcontrol persist da0 -v -o register -K 0x12345678 -S \e
2872	-I sas,0x1234567812345678 -I sas,0x8765432187654321
2873.Ed
2874.Pp
2875This will register the key 0x12345678 with da0, specifying that it applies
2876to the SAS initiators with SAS addresses 0x1234567812345678 and
28770x8765432187654321.
2878.Bd -literal -offset indent
2879camcontrol persist da0 -v -o register_move -k 0x87654321 \e
2880	-K 0x12345678 -U -p -R 2 -I fcp,0x1234567812345678
2881.Ed
2882.Pp
2883This will move the registration from the current initiator, whose
2884Registration Key is 0x87654321, to the Fibre Channel initiator with the
2885Fiber Channel World Wide Node Name 0x1234567812345678.
2886A new registration key, 0x12345678, will be registered for the initiator
2887with the Fibre Channel World Wide Node Name 0x1234567812345678, and the
2888current initiator will be unregistered from the target.
2889The reservation will be moved to relative target port 2 on the target
2890device.
2891The registration will persist across power losses.
2892.Bd -literal -offset indent
2893camcontrol attrib sa0 -v -i attr_values -p 1
2894.Ed
2895.Pp
2896This will read and decode the attribute values from partition 1 on the tape
2897in tape drive sa0, and will display any
2898.Tn SCSI
2899errors that result.
2900.Bd -literal -offset indent
2901camcontrol zone da0 -v -c rz -P summary
2902.Ed
2903.Pp
2904This will request the SMR zone list from disk da0, and print out a
2905summary of the zone parameters, and display any
2906.Tn SCSI
2907or
2908.Tn ATA
2909errors that result.
2910.Bd -literal -offset indent
2911camcontrol zone da0 -v -c rz -o reset
2912.Ed
2913.Pp
2914This will request the list of SMR zones that should have their write
2915pointer reset from the disk da0, and display any
2916.Tn SCSI
2917or
2918.Tn ATA
2919errors that result.
2920.Bd -literal -offset indent
2921camcontrol zone da0 -v -c rwp -l 0x2c80000
2922.Ed
2923.Pp
2924This will issue the Reset Write Pointer command to disk da0 for the zone
2925that starts at LBA 0x2c80000 and display any
2926.Tn SCSI
2927or
2928.Tn ATA
2929errors that result.
2930.Bd -literal -offset indent
2931camcontrol epc ada0 -c timer -T 60.1 -p Idle_a -e -s
2932.Ed
2933.Pp
2934Set the timer for the Idle_a power condition on drive
2935.Pa ada0
2936to 60.1 seconds, enable that particular power condition, and save the timer
2937value and the enabled state of the power condition.
2938.Bd -literal -offset indent
2939camcontrol epc da4 -c goto -p Standby_z -H
2940.Ed
2941.Pp
2942Tell drive
2943.Pa da4
2944to go to the Standby_z power state (which is
2945the drive's lowest power state) and hold in that state until it is
2946explicitly released by another
2947.Cm goto
2948command.
2949.Bd -literal -offset indent
2950camcontrol epc da2 -c status -P
2951.Ed
2952.Pp
2953Report only the power state of
2954drive
2955.Pa da2 .
2956Some drives will power up in response to the commands sent by the
2957.Pa status
2958subcommand, and the
2959.Fl P
2960option causes
2961.Nm
2962to only send the
2963.Tn ATA
2964CHECK POWER MODE command, which should not trigger a change in the drive's
2965power state.
2966.Bd -literal -offset indent
2967camcontrol epc ada0 -c list
2968.Ed
2969.Pp
2970Display the ATA Power Conditions log (Log Address 0x08) for
2971drive
2972.Pa ada0 .
2973.Bd -literal -offset indent
2974camcontrol timestamp sa0 -s -f "%a, %d %b %Y %T %z" \e
2975	-T "Wed, 26 Oct 2016 21:43:57 -0600"
2976.Ed
2977.Pp
2978Set the timestamp of drive
2979.Pa sa0
2980using a
2981.Xr strptime 3
2982format string followed by a time string
2983that was created using this format string.
2984.Sh SEE ALSO
2985.Xr cam 3 ,
2986.Xr cam_cdbparse 3 ,
2987.Xr cam 4 ,
2988.Xr pass 4 ,
2989.Xr xpt 4 ,
2990.Xr diskinfo 8 ,
2991.Xr trim 8 ,
2992.Xr zonectl 8
2993.Sh HISTORY
2994The
2995.Nm
2996utility first appeared in
2997.Fx 3.0 .
2998.Pp
2999The mode page editing code and arbitrary SCSI command code are based upon
3000code in the old
3001.Xr scsi 8
3002utility and
3003.Xr scsi 3
3004library, written by Julian Elischer and Peter Dufault.
3005The
3006.Xr scsi 8
3007program first appeared in
3008.Bx 386 0.1.2.4 ,
3009and first appeared in
3010.Fx
3011in
3012.Fx 2.0.5 .
3013.Sh AUTHORS
3014.An Kenneth Merry Aq Mt ken@FreeBSD.org
3015.Sh BUGS
3016The code that parses the generic command line arguments does not know that
3017some of the subcommands take multiple arguments.
3018So if, for instance, you
3019tried something like this:
3020.Bd -literal -offset indent
3021camcontrol cmd -n da -u 1 -c "00 00 00 00 00 v" 0x00 -v
3022.Ed
3023.Pp
3024The sense information from the test unit ready command would not get
3025printed out, since the first
3026.Xr getopt 3
3027call in
3028.Nm
3029bails out when it sees the second argument to
3030.Fl c
3031(0x00),
3032above.
3033Fixing this behavior would take some gross code, or changes to the
3034.Xr getopt 3
3035interface.
3036The best way to circumvent this problem is to always make sure
3037to specify generic
3038.Nm
3039arguments before any command-specific arguments.
3040