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