summaryrefslogtreecommitdiffstats
path: root/sys/dev/siis
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2010-02-02 11:09:28 +0000
committermav <mav@FreeBSD.org>2010-02-02 11:09:28 +0000
commitb5b6d6b0e0e8523be005d532c4327061249c2a84 (patch)
tree37197ad5ae0872a11e1bc6a7828374ebc3770e16 /sys/dev/siis
parent2c76d0e26f4843ec857eaeade022a391227acb85 (diff)
downloadFreeBSD-src-b5b6d6b0e0e8523be005d532c4327061249c2a84.zip
FreeBSD-src-b5b6d6b0e0e8523be005d532c4327061249c2a84.tar.gz
- Give ATA/SATA SIMs info about ATAPI packet size, supported by device.
- Make ATA XPT to reject longer SCSI CDBs then supported by device, or any SCSI CDBs, if device doesn't support ATAPI.
Diffstat (limited to 'sys/dev/siis')
-rw-r--r--sys/dev/siis/siis.c4
-rw-r--r--sys/dev/siis/siis.h1
2 files changed, 5 insertions, 0 deletions
diff --git a/sys/dev/siis/siis.c b/sys/dev/siis/siis.c
index 5298c18..dc24c6c 100644
--- a/sys/dev/siis/siis.c
+++ b/sys/dev/siis/siis.c
@@ -1659,6 +1659,8 @@ siisaction(struct cam_sim *sim, union ccb *ccb)
else
ATA_OUTL(ch->r_mem, SIIS_P_CTLCLR, SIIS_P_CTL_PME);
}
+ if (cts->xport_specific.sata.valid & CTS_SATA_VALID_TAGS)
+ d->atapi = cts->xport_specific.sata.atapi;
ccb->ccb_h.status = CAM_REQ_CMP;
xpt_done(ccb);
break;
@@ -1702,6 +1704,8 @@ siisaction(struct cam_sim *sim, union ccb *ccb)
cts->xport_specific.sata.valid |= CTS_SATA_VALID_PM;
cts->xport_specific.sata.tags = d->tags;
cts->xport_specific.sata.valid |= CTS_SATA_VALID_TAGS;
+ cts->xport_specific.sata.atapi = d->atapi;
+ cts->xport_specific.sata.valid |= CTS_SATA_VALID_ATAPI;
ccb->ccb_h.status = CAM_REQ_CMP;
xpt_done(ccb);
break;
diff --git a/sys/dev/siis/siis.h b/sys/dev/siis/siis.h
index f98d204..92b4e26 100644
--- a/sys/dev/siis/siis.h
+++ b/sys/dev/siis/siis.h
@@ -356,6 +356,7 @@ struct siis_device {
int revision;
int mode;
u_int bytecount;
+ u_int atapi;
u_int tags;
};
OpenPOWER on IntegriCloud