summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorken <ken@FreeBSD.org>2013-04-02 16:49:49 +0000
committerken <ken@FreeBSD.org>2013-04-02 16:49:49 +0000
commita19ebe4f909aa28b1f3cb081530d991ad44354e2 (patch)
treee20e52b936b61f467db361212fa3571a16c637b4
parentbe0059e75024c574527b6d04a618b62f3ebfe4b0 (diff)
downloadFreeBSD-src-a19ebe4f909aa28b1f3cb081530d991ad44354e2.zip
FreeBSD-src-a19ebe4f909aa28b1f3cb081530d991ad44354e2.tar.gz
Add support for XPT_CONT_TARGET_IO CCBs in _bus_dmamap_load_ccb().
Declare CCB types in their respective switch blocks. Sponsored by: Spectra Logic
-rw-r--r--sys/kern/subr_bus_dma.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/sys/kern/subr_bus_dma.c b/sys/kern/subr_bus_dma.c
index 0c4be9b..fc6e60b 100644
--- a/sys/kern/subr_bus_dma.c
+++ b/sys/kern/subr_bus_dma.c
@@ -158,8 +158,6 @@ static int
_bus_dmamap_load_ccb(bus_dma_tag_t dmat, bus_dmamap_t map, union ccb *ccb,
int *nsegs, int flags)
{
- struct ccb_ataio *ataio;
- struct ccb_scsiio *csio;
struct ccb_hdr *ccb_h;
void *data_ptr;
int error;
@@ -169,18 +167,33 @@ _bus_dmamap_load_ccb(bus_dma_tag_t dmat, bus_dmamap_t map, union ccb *ccb,
error = 0;
ccb_h = &ccb->ccb_h;
switch (ccb_h->func_code) {
- case XPT_SCSI_IO:
+ case XPT_SCSI_IO: {
+ struct ccb_scsiio *csio;
+
csio = &ccb->csio;
data_ptr = csio->data_ptr;
dxfer_len = csio->dxfer_len;
sglist_cnt = csio->sglist_cnt;
break;
- case XPT_ATA_IO:
+ }
+ case XPT_CONT_TARGET_IO: {
+ struct ccb_scsiio *ctio;
+
+ ctio = &ccb->ctio;
+ data_ptr = ctio->data_ptr;
+ dxfer_len = ctio->dxfer_len;
+ sglist_cnt = ctio->sglist_cnt;
+ break;
+ }
+ case XPT_ATA_IO: {
+ struct ccb_ataio *ataio;
+
ataio = &ccb->ataio;
data_ptr = ataio->data_ptr;
dxfer_len = ataio->dxfer_len;
sglist_cnt = 0;
break;
+ }
default:
panic("_bus_dmamap_load_ccb: Unsupported func code %d",
ccb_h->func_code);
OpenPOWER on IntegriCloud