summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2015-03-31 07:21:53 +0000
committermav <mav@FreeBSD.org>2015-03-31 07:21:53 +0000
commit7e7a1cb5ec8594c38877a49aa83fa0ccf72cf4b0 (patch)
tree26be661d44e5d3c566230ddce8cbe405f43743b5 /sbin
parent4826fa033b3dcb079c20d90a7235b21457412daa (diff)
downloadFreeBSD-src-7e7a1cb5ec8594c38877a49aa83fa0ccf72cf4b0.zip
FreeBSD-src-7e7a1cb5ec8594c38877a49aa83fa0ccf72cf4b0.tar.gz
MFC r280166:
Make ATA power management commands to work on SCSI HBAs via PASS THROUGH.
Diffstat (limited to 'sbin')
-rw-r--r--sbin/camcontrol/camcontrol.c46
1 files changed, 14 insertions, 32 deletions
diff --git a/sbin/camcontrol/camcontrol.c b/sbin/camcontrol/camcontrol.c
index 3bcb9b0..c0a1344 100644
--- a/sbin/camcontrol/camcontrol.c
+++ b/sbin/camcontrol/camcontrol.c
@@ -7968,39 +7968,21 @@ atapm(struct cam_device *device, int argc, char **argv,
else
sc = 253;
- cam_fill_ataio(&ccb->ataio,
- retry_count,
- NULL,
- /*flags*/CAM_DIR_NONE,
- MSG_SIMPLE_Q_TAG,
- /*data_ptr*/NULL,
- /*dxfer_len*/0,
- timeout ? timeout : 30 * 1000);
- ata_28bit_cmd(&ccb->ataio, cmd, 0, 0, sc);
-
- /* Disable freezing the device queue */
- ccb->ccb_h.flags |= CAM_DEV_QFRZDIS;
-
- if (arglist & CAM_ARG_ERR_RECOVER)
- ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER;
-
- if (cam_send_ccb(device, ccb) < 0) {
- warn("error sending command");
-
- if (arglist & CAM_ARG_VERBOSE)
- cam_error_print(device, ccb, CAM_ESF_ALL,
- CAM_EPF_ALL, stderr);
-
- retval = 1;
- goto bailout;
- }
+ retval = ata_do_28bit_cmd(device,
+ ccb,
+ /*retries*/retry_count,
+ /*flags*/CAM_DIR_NONE,
+ /*protocol*/AP_PROTO_NON_DATA,
+ /*tag_action*/MSG_SIMPLE_Q_TAG,
+ /*command*/cmd,
+ /*features*/0,
+ /*lba*/0,
+ /*sector_count*/sc,
+ /*data_ptr*/NULL,
+ /*dxfer_len*/0,
+ /*timeout*/timeout ? timeout : 30 * 1000,
+ /*quiet*/1);
- if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) {
- cam_error_print(device, ccb, CAM_ESF_ALL, CAM_EPF_ALL, stderr);
- retval = 1;
- goto bailout;
- }
-bailout:
cam_freeccb(ccb);
return (retval);
}
OpenPOWER on IntegriCloud