PERFORCE change 174090 for review
Alexander Motin
mav at FreeBSD.org
Mon Feb 1 14:27:06 UTC 2010
http://p4web.freebsd.org/chv.cgi?CH=174090
Change 174090 by mav at mav_mavtest on 2010/02/01 14:26:24
Report ATAPI packet size to ATA/SATA SIMs.
Affected files ...
.. //depot/projects/scottl-camlock/src/sbin/camcontrol/camcontrol.c#36 edit
.. //depot/projects/scottl-camlock/src/sys/cam/ata/ata_xpt.c#75 edit
.. //depot/projects/scottl-camlock/src/sys/cam/cam_ccb.h#39 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.c#100 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.h#35 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ata/ata-all.c#50 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ata/ata-all.h#29 edit
.. //depot/projects/scottl-camlock/src/sys/dev/siis/siis.c#38 edit
.. //depot/projects/scottl-camlock/src/sys/dev/siis/siis.h#15 edit
Differences ...
==== //depot/projects/scottl-camlock/src/sbin/camcontrol/camcontrol.c#36 (text+ko) ====
@@ -1010,8 +1010,10 @@
printf(" (");
if (ata->valid & CTS_ATA_VALID_MODE)
printf("%s, ", ata_mode2string(ata->mode));
+ if ((ata->valid & CTS_ATA_VALID_ATAPI) && ata->atapi != 0)
+ printf("ATAPI %dbytes, ", ata->atapi);
if (ata->valid & CTS_ATA_VALID_BYTECOUNT)
- printf("PIO size %dbytes", ata->bytecount);
+ printf("PIO %dbytes", ata->bytecount);
printf(")");
} else if (ccb->cts.transport == XPORT_SATA) {
struct ccb_trans_settings_sata *sata =
@@ -1022,8 +1024,10 @@
printf("SATA %d.x, ", sata->revision);
if (sata->valid & CTS_SATA_VALID_MODE)
printf("%s, ", ata_mode2string(sata->mode));
+ if ((sata->valid & CTS_SATA_VALID_ATAPI) && sata->atapi != 0)
+ printf("ATAPI %dbytes, ", sata->atapi);
if (sata->valid & CTS_SATA_VALID_BYTECOUNT)
- printf("PIO size %dbytes", sata->bytecount);
+ printf("PIO %dbytes", sata->bytecount);
printf(")");
}
==== //depot/projects/scottl-camlock/src/sys/cam/ata/ata_xpt.c#75 (text+ko) ====
@@ -1334,7 +1334,20 @@
cts.protocol = path->device->protocol;
cts.protocol_version = path->device->protocol_version;
cts.proto_specific.valid = 0;
- cts.xport_specific.valid = 0;
+ if (ident_buf) {
+ if (path->device->transport == XPORT_ATA) {
+ cts.xport_specific.ata.atapi =
+ ((ident_buf->config & ATA_PROTO_MASK) == ATA_PROTO_ATAPI_16) ? 16 :
+ ((ident_buf->config & ATA_PROTO_MASK) == ATA_PROTO_ATAPI_12) ? 12 : 0;
+ cts.xport_specific.ata.valid = CTS_ATA_VALID_ATAPI;
+ } else {
+ cts.xport_specific.sata.atapi =
+ ((ident_buf->config & ATA_PROTO_MASK) == ATA_PROTO_ATAPI_16) ? 16 :
+ ((ident_buf->config & ATA_PROTO_MASK) == ATA_PROTO_ATAPI_12) ? 12 : 0;
+ cts.xport_specific.sata.valid = CTS_SATA_VALID_ATAPI;
+ }
+ } else
+ cts.xport_specific.valid = 0;
xpt_action((union ccb *)&cts);
}
==== //depot/projects/scottl-camlock/src/sys/cam/cam_ccb.h#39 (text+ko) ====
@@ -823,8 +823,10 @@
u_int valid; /* Which fields to honor */
#define CTS_ATA_VALID_MODE 0x01
#define CTS_ATA_VALID_BYTECOUNT 0x02
+#define CTS_ATA_VALID_ATAPI 0x20
int mode; /* Mode */
u_int bytecount; /* Length of PIO transaction */
+ u_int atapi; /* Length of ATAPI CDB */
};
struct ccb_trans_settings_sata {
@@ -834,11 +836,13 @@
#define CTS_SATA_VALID_REVISION 0x04
#define CTS_SATA_VALID_PM 0x08
#define CTS_SATA_VALID_TAGS 0x10
+#define CTS_SATA_VALID_ATAPI 0x20
int mode; /* Legacy PATA mode */
u_int bytecount; /* Length of PIO transaction */
int revision; /* SATA revision */
u_int pm_present; /* PM is present (XPT->SIM) */
u_int tags; /* Number of allowed tags */
+ u_int atapi; /* Length of ATAPI CDB */
};
/* Get/Set transfer rate/width/disconnection/tag queueing settings */
==== //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.c#100 (text+ko) ====
@@ -2360,6 +2360,8 @@
d->tags = min(ch->numslots, cts->xport_specific.sata.tags);
if (cts->xport_specific.sata.valid & CTS_SATA_VALID_PM)
ch->pm_present = cts->xport_specific.sata.pm_present;
+ if (cts->xport_specific.sata.valid & CTS_SATA_VALID_ATAPI)
+ d->atapi = cts->xport_specific.sata.atapi;
ccb->ccb_h.status = CAM_REQ_CMP;
xpt_done(ccb);
break;
@@ -2403,6 +2405,8 @@
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;
==== //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.h#35 (text+ko) ====
@@ -370,6 +370,7 @@
int revision;
int mode;
u_int bytecount;
+ u_int atapi;
u_int tags;
};
==== //depot/projects/scottl-camlock/src/sys/dev/ata/ata-all.c#50 (text+ko) ====
@@ -1348,6 +1348,8 @@
ccb->csio.cdb_io.cdb_ptr : ccb->csio.cdb_io.cdb_bytes,
request->u.atapi.ccb, ccb->csio.cdb_len);
request->flags |= ATA_R_ATAPI;
+ if (ch->curr[ccb->ccb_h.target_id].atapi == 16)
+ request->flags |= ATA_R_ATAPI16;
if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE &&
ch->curr[ccb->ccb_h.target_id].mode >= ATA_DMA)
request->flags |= ATA_R_DMA;
@@ -1358,7 +1360,6 @@
}
request->transfersize = min(request->bytecount,
ch->curr[ccb->ccb_h.target_id].bytecount);
-// request->callback = ad_done;
request->retries = 0;
request->timeout = (ccb->ccb_h.timeout + 999) / 1000;
callout_init_mtx(&request->callout, &ch->state_mtx, CALLOUT_RETURNUNLOCKED);
@@ -1491,7 +1492,7 @@
if (ch->flags & ATA_SATA) {
if (cts->xport_specific.sata.valid & CTS_SATA_VALID_REVISION)
d->revision = cts->xport_specific.sata.revision;
- if (cts->xport_specific.ata.valid & CTS_SATA_VALID_MODE) {
+ if (cts->xport_specific.sata.valid & CTS_SATA_VALID_MODE) {
if (cts->type == CTS_TYPE_CURRENT_SETTINGS) {
d->mode = ATA_SETMODE(ch->dev,
ccb->ccb_h.target_id,
@@ -1499,8 +1500,10 @@
} else
d->mode = cts->xport_specific.sata.mode;
}
- if (cts->xport_specific.ata.valid & CTS_SATA_VALID_BYTECOUNT)
+ if (cts->xport_specific.sata.valid & CTS_SATA_VALID_BYTECOUNT)
d->bytecount = min(8192, cts->xport_specific.sata.bytecount);
+ if (cts->xport_specific.sata.valid & CTS_SATA_VALID_ATAPI)
+ d->atapi = cts->xport_specific.sata.atapi;
} else {
if (cts->xport_specific.ata.valid & CTS_ATA_VALID_MODE) {
if (cts->type == CTS_TYPE_CURRENT_SETTINGS) {
@@ -1512,6 +1515,8 @@
}
if (cts->xport_specific.ata.valid & CTS_ATA_VALID_BYTECOUNT)
d->bytecount = cts->xport_specific.ata.bytecount;
+ if (cts->xport_specific.ata.valid & CTS_ATA_VALID_ATAPI)
+ d->atapi = cts->xport_specific.ata.atapi;
}
ccb->ccb_h.status = CAM_REQ_CMP;
xpt_done(ccb);
@@ -1541,6 +1546,8 @@
} else
cts->xport_specific.sata.revision = d->revision;
cts->xport_specific.sata.valid |= CTS_SATA_VALID_REVISION;
+ cts->xport_specific.sata.atapi = d->atapi;
+ cts->xport_specific.sata.valid |= CTS_SATA_VALID_ATAPI;
} else {
cts->transport = XPORT_ATA;
cts->transport_version = XPORT_VERSION_UNSPECIFIED;
@@ -1548,6 +1555,8 @@
cts->xport_specific.ata.valid |= CTS_ATA_VALID_MODE;
cts->xport_specific.ata.bytecount = d->bytecount;
cts->xport_specific.ata.valid |= CTS_ATA_VALID_BYTECOUNT;
+ cts->xport_specific.ata.atapi = d->atapi;
+ cts->xport_specific.ata.valid |= CTS_ATA_VALID_ATAPI;
}
ccb->ccb_h.status = CAM_REQ_CMP;
xpt_done(ccb);
==== //depot/projects/scottl-camlock/src/sys/dev/ata/ata-all.h#29 (text+ko) ====
@@ -539,6 +539,7 @@
u_int revision;
int mode;
u_int bytecount;
+ u_int atapi;
};
#endif
==== //depot/projects/scottl-camlock/src/sys/dev/siis/siis.c#38 (text+ko) ====
@@ -741,17 +741,15 @@
u_int32_t status = ATA_INL(ch->r_mem, SIIS_P_SSTS);
union ccb *ccb;
- if (((status & ATA_SS_DET_MASK) == ATA_SS_DET_PHY_ONLINE) &&
- ((status & ATA_SS_SPD_MASK) != ATA_SS_SPD_NO_SPEED) &&
- ((status & ATA_SS_IPM_MASK) == ATA_SS_IPM_ACTIVE)) {
- if (bootverbose)
+ if (bootverbose) {
+ if (((status & ATA_SS_DET_MASK) == ATA_SS_DET_PHY_ONLINE) &&
+ ((status & ATA_SS_SPD_MASK) != ATA_SS_SPD_NO_SPEED) &&
+ ((status & ATA_SS_IPM_MASK) == ATA_SS_IPM_ACTIVE)) {
device_printf(dev, "CONNECT requested\n");
- siis_reset(dev);
- } else {
- if (bootverbose)
+ } else
device_printf(dev, "DISCONNECT requested\n");
- ch->devices = 0;
}
+ siis_reset(dev);
if ((ccb = xpt_alloc_ccb_nowait()) == NULL)
return;
if (xpt_create_path(&ccb->ccb_h.path, NULL,
@@ -1661,6 +1659,8 @@
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;
@@ -1704,6 +1704,8 @@
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;
==== //depot/projects/scottl-camlock/src/sys/dev/siis/siis.h#15 (text+ko) ====
@@ -356,6 +356,7 @@
int revision;
int mode;
u_int bytecount;
+ u_int atapi;
u_int tags;
};
More information about the p4-projects
mailing list