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.\" $FreeBSD: src/sbin/camcontrol/camcontrol.8,v 1.19.2.12 2003/01/08 17:55:02 njl Exp $ 29.\" $DragonFly: src/sbin/camcontrol/camcontrol.8,v 1.10 2008/05/02 02:05:05 swildner Exp $ 30.\" 31.Dd September 14, 1998 32.Dt CAMCONTROL 8 33.Os 34.Sh NAME 35.Nm camcontrol 36.Nd CAM control program 37.Sh SYNOPSIS 38.Nm 39.Aq Ar command 40.Op device id 41.Op generic args 42.Op command args 43.Nm 44.Ic devlist 45.Op Fl v 46.Nm 47.Ic periphlist 48.Op device id 49.Op Fl n Ar dev_name 50.Op Fl u Ar unit_number 51.Nm 52.Ic tur 53.Op device id 54.Op generic args 55.Nm 56.Ic inquiry 57.Op device id 58.Op generic args 59.Op Fl D 60.Op Fl S 61.Op Fl R 62.Nm 63.Ic reportluns 64.Op device id 65.Op generic args 66.Op Fl c 67.Op Fl l 68.Op Fl r Ar reporttype 69.Nm 70.Ic readcap 71.Op device id 72.Op generic args 73.Op Fl b 74.Op Fl h 75.Op Fl H 76.Op Fl N 77.Op Fl q 78.Op Fl s 79.Nm 80.Ic start 81.Op device id 82.Op generic args 83.Nm 84.Ic stop 85.Op device id 86.Op generic args 87.Nm 88.Ic load 89.Op device id 90.Op generic args 91.Nm 92.Ic eject 93.Op device id 94.Op generic args 95.Nm 96.Ic rescan 97.Aq all | bus Ns Op :target:lun 98.Nm 99.Ic reset 100.Aq all | bus Ns Op :target:lun 101.Nm 102.Ic defects 103.Op device id 104.Op generic args 105.Aq Fl f Ar format 106.Op Fl P 107.Op Fl G 108.Nm 109.Ic modepage 110.Op device id 111.Op generic args 112.Aq Fl m Ar page 113.Op Fl P Ar pgctl 114.Op Fl e 115.Op Fl d 116.Nm 117.Ic cmd 118.Op device id 119.Op generic args 120.Aq Fl c Ar cmd Op args 121.Op Fl i Ar len Ar fmt 122.Bk -words 123.Op Fl o Ar len Ar fmt Op args 124.Ek 125.Nm 126.Ic debug 127.Op Fl I 128.Op Fl P 129.Op Fl T 130.Op Fl S 131.Op Fl X 132.Op Fl c 133.Aq all|off|bus Ns Op :target Ns Op :lun 134.Nm 135.Ic tags 136.Op device id 137.Op generic args 138.Op Fl N Ar tags 139.Op Fl q 140.Op Fl v 141.Nm 142.Ic negotiate 143.Op device id 144.Op generic args 145.Op Fl c 146.Op Fl D Ar enable|disable 147.Op Fl O Ar offset 148.Op Fl q 149.Op Fl R Ar syncrate 150.Op Fl T Ar enable|disable 151.Op Fl U 152.Op Fl W Ar bus_width 153.Op Fl v 154.Nm 155.Ic format 156.Op device id 157.Op generic args 158.Op Fl q 159.Op Fl r 160.Op Fl w 161.Op Fl y 162.Nm 163.Ic help 164.Sh DESCRIPTION 165The 166.Nm 167utility is designed to provide a way for users to access and control the 168.Dx 169CAM subsystem. 170.Pp 171The 172.Nm 173utility 174can cause a loss of data and/or system crashes if used improperly. Even 175expert users are encouraged to exercise caution when using this command. 176Novice users should stay away from this utility. 177.Pp 178The 179.Nm 180utility has a number of primary functions, many of which support an optional 181device identifier. A device identifier can take one of three forms: 182.Bl -tag -width 14n 183.It deviceUNIT 184Specify a device name and unit number combination, like "da5" or "cd3". 185Note that character device node names (e.g. /dev/da0) are 186.Em not 187allowed here. 188.It bus:target 189Specify a bus number and target id. The bus number can be determined from 190the output of 191.Dq camcontrol devlist . 192The lun defaults to 0. 193.It bus:target:lun 194Specify the bus, target and lun for a device. (e.g. 1:2:0) 195.El 196.Pp 197The device identifier, if it is specified, 198.Em must 199come immediately after the function name, and before any generic or 200function-specific arguments. Note that the 201.Fl n 202and 203.Fl u 204arguments described below will override any device name or unit number 205specified beforehand. The 206.Fl n 207and 208.Fl u 209arguments will 210.Em not 211override a specified bus:target or bus:target:lun, however. 212.Pp 213Most of the 214.Nm 215primary functions support these generic arguments: 216.Bl -tag -width 14n 217.It Fl C Ar count 218SCSI command retry count. In order for this to work, error recovery 219.Pq Fl E 220must be turned on. 221.It Fl E 222Instruct the kernel to perform generic SCSI error recovery for the given 223command. This is needed in order for the retry count 224.Pq Fl C 225to be honored. Other than retrying commands, the generic error recovery in 226the code will generally attempt to spin up drives that are not spinning. 227It may take some other actions, depending upon the sense code returned from 228the command. 229.It Fl n Ar dev_name 230Specify the device type to operate on, e.g. "da", "cd". 231.It Fl t Ar timeout 232SCSI command timeout in seconds. This overrides the default timeout for 233any given command. 234.It Fl u Ar unit_number 235Specify the device unit number, e.g. "1", "5". 236.It Fl v 237Be verbose, print out sense information for failed SCSI commands. 238.El 239.Pp 240Primary command functions: 241.Bl -tag -width periphlist 242.It Ic devlist 243List all physical devices (logical units) attached to the CAM subsystem. 244This also includes a list of peripheral drivers attached to each device. 245With the 246.Fl v 247argument, SCSI bus number, adapter name and unit numbers are printed as 248well. 249.It Ic periphlist 250List all peripheral drivers attached to a given physical device (logical 251unit). 252.It Ic tur 253Send the SCSI test unit ready (0x00) command to the given device. 254The 255.Nm 256utility will report whether the device is ready or not. 257.It Ic inquiry 258Send a SCSI inquiry command (0x12) to a device. By default, 259.Nm 260will print out the standard inquiry data, device serial number, and 261transfer rate information. The user can specify that only certain types of 262inquiry data be printed: 263.Bl -tag -width 4n 264.It Fl D 265Get the standard inquiry data. 266.It Fl S 267Print out the serial number. If this flag is the only one specified, 268.Nm 269will not print out "Serial Number" before the value returned by the drive. 270This is to aid in script writing. 271.It Fl R 272Print out transfer rate information. 273.El 274.It Ic reportluns 275Send the SCSI REPORT LUNS (0xA0) command to the given device. 276By default, 277.Nm 278will print out the list of logical units (LUNs) supported by the target device. 279There are a couple of options to modify the output: 280.Bl -tag -width 01234567890123 281.It Fl c 282Just print out a count of LUNs, not the actual LUN numbers. 283.It Fl l 284Just print out the LUNs, and don't print out the count. 285.It Fl r Ar reporttype 286Specify the type of report to request from the target: 287.Bl -tag -width 012345678 288.It default 289Return the default report. 290This is the 291.Nm 292default. 293Most targets will support this report if they support the REPORT LUNS 294command. 295.It wellknown 296Return only well known LUNs. 297.It all 298Return all available LUNs. 299.El 300.El 301.Pp 302.Nm 303will try to print out LUN numbers in a reasonable format. 304It can understand the peripheral, flat, LUN and extended LUN formats. 305.It Ic readcap 306Send the SCSI READ CAPACITY command to the given device and display 307the results. 308If the device is larger than 2TB, the SCSI READ CAPACITY (16) service 309action will be sent to obtain the full size of the device. 310By default, 311.Nm 312will print out the last logical block of the device, and the blocksize of 313the device in bytes. 314To modify the output format, use the following options: 315.Bl -tag -width 5n 316.It Fl b 317Just print out the blocksize, not the last block or device size. 318This cannot be used with 319.Fl N 320or 321.Fl s . 322.It Fl h 323Print out the device size in human readable (base 2, 1K == 1024) format. 324This implies 325.Fl N 326and cannot be used with 327.Fl q 328or 329.Fl b . 330.It Fl H 331Print out the device size in human readable (base 10, 1K == 1000) format. 332.It Fl N 333Print out the number of blocks in the device instead of the last logical 334block. 335.It Fl q 336Quiet, print out the numbers only (separated by a comma if 337.Fl b 338or 339.Fl s 340are not specified). 341.It Fl s 342Print out the last logical block or the size of the device only, and omit 343the blocksize. 344.El 345.It Ic start 346Send the SCSI Start/Stop Unit (0x1B) command to the given device with the 347start bit set. 348.It Ic stop 349Send the SCSI Start/Stop Unit (0x1B) command to the given device with the 350start bit cleared. 351.It Ic load 352Send the SCSI Start/Stop Unit (0x1B) command to the given device with the 353start bit set and the load/eject bit set. 354.It Ic eject 355Send the SCSI Start/Stop Unit (0x1B) command to the given device with the 356start bit cleared and the load/eject bit set. 357.It Ic rescan 358Tell the kernel to scan all busses in the system (with the 359.Ar all 360argument), the given bus (XPT_SCAN_BUS), or bus:target:lun 361(XPT_SCAN_LUN) for new devices or devices that have gone away. The user 362may specify a scan of all busses, a single bus, or a lun. Scanning all luns 363on a target isn't supported. 364.It Ic reset 365Tell the kernel to reset all busses in the system (with the 366.Ar all 367argument) or the given bus (XPT_RESET_BUS) by issuing a SCSI bus 368reset for that bus, or to reset the given bus:target:lun 369(XPT_RESET_DEV), typically by issuing a BUS DEVICE RESET message after 370connecting to that device. 371Note that this can have a destructive impact 372on the system. 373.It Ic defects 374Send the SCSI READ DEFECT DATA (10) command (0x37) to the given device, and 375print out any combination of: the total number of defects, the primary 376defect list (PLIST), and the grown defect list (GLIST). 377.Bl -tag -width 11n 378.It Fl f Ar format 379The three format options are: 380.Em block , 381to print out the list as logical blocks, 382.Em bfi , 383to print out the list in bytes from index format, and 384.Em phys , 385to print out the list in physical sector format. The format argument is 386required. Most drives support the physical sector format. Some drives 387support the logical block format. Many drives, if they don't support the 388requested format, return the data in an alternate format, along with sense 389information indicating that the requested data format isn't supported. 390The 391.Nm 392utility 393attempts to detect this, and print out whatever format the drive returns. 394If the drive uses a non-standard sense code to report that it doesn't 395support the requested format, 396.Nm 397will probably see the error as a failure to complete the request. 398.It Fl G 399Print out the grown defect list. This is a list of bad blocks that have 400been remapped since the disk left the factory. 401.It Fl P 402Print out the primary defect list. 403.El 404.Pp 405If neither 406.Fl P 407nor 408.Fl G 409is specified, 410.Nm 411will print out the number of defects given in the READ DEFECT DATA header 412returned from the drive. 413.It Ic modepage 414Allows the user to display and optionally edit a SCSI mode page. The mode 415page formats are located in 416.Pa /usr/share/misc/scsi_modes . 417This can be overridden by specifying a different file in the 418.Ev SCSI_MODES 419environment variable. 420The 421.Ic modepage 422command takes several arguments: 423.Bl -tag -width 12n 424.It Fl d 425Disable block descriptors for mode sense. 426.It Fl e 427This flag allows the user to edit values in the mode page. 428.It Fl m Ar mode_page 429This specifies the number of the mode page the user would like to view 430and/or edit. This argument is mandatory. 431.It Fl P Ar pgctl 432This allows the user to specify the page control field. Possible values are: 433.Bl -tag -width xxx -compact 434.It 0 435Current values 436.It 1 437Changeable values 438.It 2 439Default values 440.It 3 441Saved values 442.El 443.El 444.It Ic cmd 445Allows the user to send an arbitrary SCSI CDB to any device. 446The 447.Ic cmd 448function requires the 449.Fl c 450argument to specify the CDB. Other arguments are optional, depending on 451the command type. The command and data specification syntax is documented 452in 453.Xr cam_cdbparse 3 . 454NOTE: If the CDB specified causes data to be transferred to or from the 455SCSI device in question, you MUST specify either 456.Fl i 457or 458.Fl o . 459.Bl -tag -width 17n 460.It Fl c Ar cmd Op args 461This specifies the SCSI CDB. CDBs may be 6, 10, 12 or 16 bytes. 462.It Fl i Ar len Ar fmt 463This specifies the amount of data to read, and how it should be displayed. 464If the format is 465.Sq - , 466.Ar len 467bytes of data will be read from the device and written to standard output. 468.It Fl o Ar len Ar fmt Op args 469This specifies the amount of data to be written to a device, and the data 470that is to be written. If the format is 471.Sq - , 472.Ar len 473bytes of data will be read from standard input and written to the device. 474.El 475.It Ic debug 476Turn on CAM debugging printfs in the kernel. This requires 477.Cd options CAMDEBUG 478in your kernel config file. WARNING: enabling debugging printfs currently 479causes an EXTREME number of kernel printfs. You may have difficulty 480turning off the debugging printfs once they start, since the kernel will be 481busy printing messages and unable to service other requests quickly. 482The 483.Ic debug 484function takes a number of arguments: 485.Bl -tag -width 18n 486.It Fl I 487Enable CAM_DEBUG_INFO printfs. 488.It Fl P 489Enable CAM_DEBUG_PERIPH printfs. 490.It Fl T 491Enable CAM_DEBUG_TRACE printfs. 492.It Fl S 493Enable CAM_DEBUG_SUBTRACE printfs. 494.It Fl X 495Enable CAM_DEBUG_XPT printfs. 496.It Fl c 497Enable CAM_DEBUG_CDB printfs. This will cause the kernel to print out the 498SCSI CDBs sent to the specified device(s). 499.It all 500Enable debugging for all devices. 501.It off 502Turn off debugging for all devices 503.It bus Ns Op :target Ns Op :lun 504Turn on debugging for the given bus, target or lun. If the lun or target 505and lun are not specified, they are wildcarded. (i.e., just specifying a 506bus turns on debugging printfs for all devices on that bus.) 507.El 508.It Ic tags 509Show or set the number of "tagged openings" or simultaneous transactions 510we attempt to queue to a particular device. By default, the 511.Ic tags 512command, with no command-specific arguments (i.e. only generic arguments) 513prints out the "soft" maximum number of transactions that can be queued to 514the device in question. For more detailed information, use the 515.Fl v 516argument described below. 517.Bl -tag -width 7n 518.It Fl N Ar tags 519Set the number of tags for the given device. This must be between the 520minimum and maximum number set in the kernel quirk table. The default for 521most devices that support tagged queueing is a minimum of 2 and a maximum 522of 255. The minimum and maximum values for a given device may be 523determined by using the 524.Fl v 525switch. The meaning of the 526.Fl v 527switch for this 528.Nm 529subcommand is described below. 530.It Fl q 531Be quiet, and don't report the number of tags. This is generally used when 532setting the number of tags. 533.It Fl v 534The verbose flag has special functionality for the 535.Em tags 536argument. It causes 537.Nm 538to print out the tagged queueing related fields of the XPT_GDEV_TYPE CCB: 539.Bl -tag -width 13n 540.It dev_openings 541This is the amount of capacity for transactions queued to a given device. 542.It dev_active 543This is the number of transactions currently queued to a device. 544.It devq_openings 545This is the kernel queue space for transactions. This count usually mirrors 546dev_openings except during error recovery operations when 547the device queue is frozen (device is not allowed to receive 548commands), the number of dev_openings is reduced, or transaction 549replay is occurring. 550.It devq_queued 551This is the number of transactions waiting in the kernel queue for capacity 552on the device. This number is usually zero unless error recovery is in 553progress. 554.It held 555The held count is the number of CCBs held by peripheral drivers that have 556either just been completed or are about to be released to the transport 557layer for service by a device. Held CCBs reserve capacity on a given 558device. 559.It mintags 560This is the current "hard" minimum number of transactions that can be 561queued to a device at once. The 562.Ar dev_openings 563value above cannot go below this number. The default value for 564.Ar mintags 565is 2, although it may be set higher or lower for various devices. 566.It maxtags 567This is the "hard" maximum number of transactions that can be queued to a 568device at one time. The 569.Ar dev_openings 570value cannot go above this number. The default value for 571.Ar maxtags 572is 255, although it may be set higher or lower for various devices. 573.El 574.El 575.It Ic negotiate 576Show or negotiate various communication parameters. Some controllers may 577not support setting or changing some of these values. For instance, the 578Adaptec 174x controllers do not support changing a device's sync rate or 579offset. 580The 581.Nm 582utility 583will not attempt to set the parameter if the controller indicates that it 584does not support setting the parameter. To find out what the controller 585supports, use the 586.Fl v 587flag. The meaning of the 588.Fl v 589flag for the 590.Ic negotiate 591command is described below. Also, some controller drivers don't support 592setting negotiation parameters, even if the underlying controller supports 593negotiation changes. Some controllers, such as the Advansys wide 594controllers, support enabling and disabling synchronous negotiation for 595a device, but do not support setting the synchronous negotiation rate. 596.Bl -tag -width 17n 597.It Fl a 598Attempt to make the negotiation settings take effect immediately by sending 599a Test Unit Ready command to the device. 600.It Fl c 601Show or set current negotiation settings. This is the default. 602.It Fl D Ar enable|disable 603Enable or disable disconnection. 604.It Fl O Ar offset 605Set the command delay offset. 606.It Fl q 607Be quiet, don't print anything. This is generally useful when you want to 608set a parameter, but don't want any status information. 609.It Fl R Ar syncrate 610Change the synchronization rate for a device. The sync rate is a floating 611point value specified in MHz. So, for instance, 612.Sq 20.000 613is a legal value, as is 614.Sq 20 . 615.It Fl T Ar enable|disable 616Enable or disable tagged queueing for a device. 617.It Fl U 618Show or set user negotiation settings. The default is to show or set 619current negotiation settings. 620.It Fl v 621The verbose switch has special meaning for the 622.Ic negotiate 623subcommand. It causes 624.Nm 625to print out the contents of a Path Inquiry (XPT_PATH_INQ) CCB sent to the 626controller driver. 627.It Fl W Ar bus_width 628Specify the bus width to negotiate with a device. The bus width is 629specified in bits. The only useful values to specify are 8, 16, and 32 630bits. The controller must support the bus width in question in order for 631the setting to take effect. 632.El 633.Pp 634In general, sync rate and offset settings will not take effect for a 635device until a command has been sent to the device. The 636.Fl a 637switch above will automatically send a Test Unit Ready to the device so 638negotiation parameters will take effect. 639.It Ic format 640Issue the 641.Tn SCSI 642FORMAT UNIT command to the named device. 643.Pp 644.Em WARNING! WARNING! WARNING! 645.Pp 646Low level formatting a disk will destroy ALL data on the disk. Use 647extreme caution when issuing this command. Many users low-level format 648disks that do not really need to be low-level formatted. There are 649relatively few scenarios that call for low-level formatting a disk. 650One reason for 651low-level formatting a disk is to initialize the disk after changing 652its physical sector size. Another reason for low-level formatting a disk 653is to revive the disk if you are getting "medium format corrupted" errors 654from the disk in response to read and write requests. 655.Pp 656Some disks take longer than others to format. Users should specify a 657timeout long enough to allow the format to complete. The default format 658timeout is 3 hours, which should be long enough for most disks. Some hard 659disks will complete a format operation in a very short period of time 660(on the order of 5 minutes or less). This is often because the drive 661doesn't really support the FORMAT UNIT command -- it just accepts the 662command, waits a few minutes and then returns it. 663.Pp 664The 665.Sq format 666subcommand takes several arguments that modify its default behavior. The 667.Fl q 668and 669.Fl y 670arguments can be useful for scripts. 671.Bl -tag -width 6n 672.It Fl q 673Be quiet, don't print any status messages. This option will not disable 674the questions, however. To disable questions, use the 675.Fl y 676argument, below. 677.It Fl r 678Run in 679.Dq report only 680mode. 681This will report status on a format that is already running on the drive. 682.It Fl w 683Issue a non-immediate format command. By default, 684.Nm 685issues the FORMAT UNIT command with the immediate bit set. This tells the 686device to immediately return the format command, before the format has 687actually completed. Then, 688.Nm 689gathers 690.Tn SCSI 691sense information from the device every second to determine how far along 692in the format process it is. If the 693.Fl w 694argument is specified, 695.Nm 696will issue a non-immediate format command, and will be unable to print any 697information to let the user know what percentage of the disk has been 698formatted. 699.It Fl y 700Don't ask any questions. By default, 701.Nm 702will ask the user if he/she really wants to format the disk in question, 703and also if the default format command timeout is acceptable. The user 704will not be asked about the timeout if a timeout is specified on the 705command line. 706.El 707.It Ic help 708Print out verbose usage information. 709.El 710.Sh ENVIRONMENT 711The 712.Ev SCSI_MODES 713variable allows the user to specify an alternate mode page format file. 714.Pp 715The 716.Ev EDITOR 717variable determines which text editor 718.Nm 719starts when editing mode pages. 720.Sh FILES 721.Bl -tag -width /usr/share/misc/scsi_modes -compact 722.It Pa /usr/share/misc/scsi_modes 723is the SCSI mode format database. 724.It Pa /dev/xpt0 725is the transport layer device. 726.It Pa /dev/pass* 727are the CAM application passthrough devices. 728.El 729.Sh EXAMPLES 730.Dl camcontrol eject -n cd -u 1 -v 731.Pp 732Eject the CD from cd1, and print SCSI sense information if the command 733fails. 734.Pp 735.Dl camcontrol tur da0 736.Pp 737Send the SCSI test unit ready command to da0. 738The 739.Nm 740utility will report whether the disk is ready, but will not display sense 741information if the command fails since the 742.Fl v 743switch was not specified. 744.Bd -literal -offset indent 745camcontrol tur da1 -E -C 4 -t 50 -v 746.Ed 747.Pp 748Send a test unit ready command to da1. Enable kernel error recovery. 749Specify a retry count of 4, and a timeout of 50 seconds. Enable sense 750printing (with the 751.Fl v 752flag) if the command fails. Since error recovery is turned on, the 753disk will be spun up if it is not currently spinning. 754The 755.Nm 756utility will report whether the disk is ready. 757.Bd -literal -offset indent 758camcontrol cmd -n cd -u 1 -v -c "3C 00 00 00 00 00 00 00 0e 00" \e 759 -i 0xe "s1 i3 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1" 760.Ed 761.Pp 762Issue a READ BUFFER command (0x3C) to cd1. Display the buffer size of cd1, 763and display the first 10 bytes from the cache on cd1. Display SCSI sense 764information if the command fails. 765.Bd -literal -offset indent 766camcontrol cmd -n cd -u 1 -v -c "3B 00 00 00 00 00 00 00 0e 00" \e 767 -o 14 "00 00 00 00 1 2 3 4 5 6 v v v v" 7 8 9 8 768.Ed 769.Pp 770Issue a WRITE BUFFER (0x3B) command to cd1. Write out 10 bytes of data, 771not including the (reserved) 4 byte header. Print out sense information if 772the command fails. Be very careful with this command, improper use may 773cause data corruption. 774.Bd -literal -offset indent 775camcontrol modepage da3 -m 1 -e -P 3 776.Ed 777.Pp 778Edit mode page 1 (the Read-Write Error Recover page) for da3, and save the 779settings on the drive. Mode page 1 contains a disk drive's auto read and 780write reallocation settings, among other things. 781.Pp 782.Dl camcontrol rescan all 783.Pp 784Rescan all SCSI busses in the system for devices that have been added, 785removed or changed. 786.Pp 787.Dl camcontrol rescan 0 788.Pp 789Rescan SCSI bus 0 for devices that have been added, removed or changed. 790.Pp 791.Dl camcontrol rescan 0:1:0 792.Pp 793Rescan SCSI bus 0, target 1, lun 0 to see if it has been added, removed, or 794changed. 795.Pp 796.Dl camcontrol tags da5 -N 24 797.Pp 798Set the number of concurrent transactions for da5 to 24. 799.Bd -literal -offset indent 800camcontrol negotiate -n da -u 4 -T disable 801.Ed 802.Pp 803Disable tagged queueing for da4. 804.Bd -literal -offset indent 805camcontrol negotiate -n da -u 3 -R 20.000 -O 15 -a 806.Ed 807.Pp 808Negotiate a sync rate of 20MHz and an offset of 15 with da3. Then send a 809Test Unit Ready command to make the settings take effect. 810.Sh SEE ALSO 811.Xr cam 3 , 812.Xr cam_cdbparse 3 , 813.Xr cam 4 , 814.Xr pass 4 , 815.Xr xpt 4 816.Sh HISTORY 817The 818.Nm 819utility first appeared in 820.Fx 3.0 . 821.Pp 822The mode page editing code and arbitrary SCSI command code are based upon 823code in the old 824.Xr scsi 8 825utility and 826.Xr scsi 3 827library, written by Julian Elischer and Peter Dufault. The 828.Xr scsi 8 829program first appeared in 830.Bx 386 0.1.2.4 , 831and first appeared in 832.Fx 833in 834.Fx 2.0.5 . 835.Sh AUTHORS 836.An Kenneth Merry Aq ken@FreeBSD.org 837.Sh BUGS 838The code that parses the generic command line arguments doesn't know that 839some of the subcommands take multiple arguments. So if, for instance, you 840tried something like this: 841.Bd -literal -offset indent 842camcontrol cmd -n da -u 1 -c "00 00 00 00 00 v" 0x00 -v 843.Ed 844.Pp 845The sense information from the test unit ready command would not get 846printed out, since the first 847.Xr getopt 3 848call in 849.Nm 850bails out when it sees the second argument to 851.Fl c 852(0x00), 853above. Fixing this behavior would take some gross code, or changes to the 854.Xr getopt 3 855interface. The best way to circumvent this problem is to always make sure 856to specify generic 857.Nm 858arguments before any command-specific arguments. 859