PERFORCE change 163659 for review
Alexander Motin
mav at FreeBSD.org
Sat Jun 6 19:38:38 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=163659
Change 163659 by mav at mav_mavbook on 2009/06/06 19:38:30
Add new port typs SATA and teach AHCI controller report
it's real data rate, and XPT to print it.
Affected files ...
.. //depot/projects/scottl-camlock/src/sys/cam/cam_ccb.h#17 edit
.. //depot/projects/scottl-camlock/src/sys/cam/cam_xpt.c#89 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.c#12 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.h#5 edit
Differences ...
==== //depot/projects/scottl-camlock/src/sys/cam/cam_ccb.h#17 (text+ko) ====
@@ -228,6 +228,7 @@
XPORT_PPB, /* Parallel Port Bus */
XPORT_ATA, /* AT Attachment */
XPORT_SAS, /* Serial Attached SCSI */
+ XPORT_SATA, /* Serial AT Attachment */
} cam_xport;
#define PROTO_VERSION_UNKNOWN (UINT_MAX - 1)
@@ -778,6 +779,11 @@
u_int32_t bitrate; /* Mbps */
};
+struct ccb_trans_settings_sata {
+ u_int valid; /* Which fields to honor */
+#define CTS_SATA_VALID_SPEED 0x1000
+ u_int32_t bitrate; /* Mbps */
+};
/* Get/Set transfer rate/width/disconnection/tag queueing settings */
struct ccb_trans_settings {
@@ -796,6 +802,7 @@
struct ccb_trans_settings_spi spi;
struct ccb_trans_settings_fc fc;
struct ccb_trans_settings_sas sas;
+ struct ccb_trans_settings_sata sata;
} xport_specific;
};
==== //depot/projects/scottl-camlock/src/sys/cam/cam_xpt.c#89 (text+ko) ====
@@ -1080,19 +1080,20 @@
if ((spi->valid & CTS_SPI_VALID_BUS_WIDTH) != 0)
speed *= (0x01 << spi->bus_width);
}
-
if (cts.ccb_h.status == CAM_REQ_CMP && cts.transport == XPORT_FC) {
struct ccb_trans_settings_fc *fc = &cts.xport_specific.fc;
- if (fc->valid & CTS_FC_VALID_SPEED) {
+ if (fc->valid & CTS_FC_VALID_SPEED)
speed = fc->bitrate;
- }
}
-
if (cts.ccb_h.status == CAM_REQ_CMP && cts.transport == XPORT_SAS) {
struct ccb_trans_settings_sas *sas = &cts.xport_specific.sas;
- if (sas->valid & CTS_SAS_VALID_SPEED) {
+ if (sas->valid & CTS_SAS_VALID_SPEED)
speed = sas->bitrate;
- }
+ }
+ if (cts.ccb_h.status == CAM_REQ_CMP && cts.transport == XPORT_SATA) {
+ struct ccb_trans_settings_sata *sata = &cts.xport_specific.sata;
+ if (sata->valid & CTS_SATA_VALID_SPEED)
+ speed = sata->bitrate;
}
mb = speed / 1000;
@@ -3802,6 +3803,7 @@
new_bus->xport = scsi_get_xport();
break;
case XPORT_ATA:
+ case XPORT_SATA:
new_bus->xport = ata_get_xport();
break;
default:
==== //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.c#12 (text+ko) ====
@@ -109,9 +109,6 @@
if (pci_get_progif(dev) != PCIP_STORAGE_SATA_AHCI_1_0)
return (ENXIO);
- if (pci_get_devid(dev) != 0x2363197b)
- return (ENXIO);
-
device_set_desc_copy(dev, "AHCI controller");
return (BUS_PROBE_VENDOR);
}
@@ -1694,14 +1691,26 @@
/* Get default/user set transfer settings for the target */
{
struct ccb_trans_settings *cts = &ccb->cts;
+ uint32_t status;
cts->protocol = PROTO_ATA;
cts->protocol_version = SCSI_REV_2;
- cts->transport = XPORT_ATA;
+ cts->transport = XPORT_SATA;
cts->transport_version = 2;
cts->proto_specific.valid = 0;
- cts->xport_specific.valid = 0;
-
+ cts->xport_specific.sata.valid = CTS_SATA_VALID_SPEED;
+ if (cts->type == CTS_TYPE_CURRENT_SETTINGS)
+ status = ATA_IDX_INL(ch, ATA_SSTATUS) & ATA_SS_SPD_MASK;
+ else
+ status = ATA_IDX_INL(ch, ATA_SCONTROL) & ATA_SC_SPD_MASK;
+ if (status & ATA_SS_SPD_GEN3)
+ cts->xport_specific.sata.bitrate = 600000;
+ else if (status & ATA_SS_SPD_GEN2)
+ cts->xport_specific.sata.bitrate = 300000;
+ else if (status & ATA_SS_SPD_GEN1)
+ cts->xport_specific.sata.bitrate = 150000;
+ else
+ cts->xport_specific.sata.valid = 0;
ccb->ccb_h.status = CAM_REQ_CMP;
xpt_done(ccb);
break;
@@ -1764,7 +1773,7 @@
strncpy(cpi->hba_vid, "AHCI", HBA_IDLEN);
strncpy(cpi->dev_name, cam_sim_name(sim), DEV_IDLEN);
cpi->unit_number = cam_sim_unit(sim);
- cpi->transport = XPORT_ATA;
+ cpi->transport = XPORT_SATA;
cpi->transport_version = 2;
if ((ATA_ATAPI_MASTER << ccb->ccb_h.target_id) & ch->devices)
cpi->protocol = PROTO_SCSI;
==== //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.h#5 (text+ko) ====
@@ -97,6 +97,7 @@
#define ATA_SS_SPD_NO_SPEED 0x00000000
#define ATA_SS_SPD_GEN1 0x00000010
#define ATA_SS_SPD_GEN2 0x00000020
+#define ATA_SS_SPD_GEN3 0x00000040
#define ATA_SS_IPM_MASK 0x00000f00
#define ATA_SS_IPM_NO_DEVICE 0x00000000
@@ -139,6 +140,7 @@
#define ATA_SC_SPD_NO_SPEED 0x00000000
#define ATA_SC_SPD_SPEED_GEN1 0x00000010
#define ATA_SC_SPD_SPEED_GEN2 0x00000020
+#define ATA_SC_SPD_SPEED_GEN3 0x00000040
#define ATA_SC_IPM_MASK 0x00000f00
#define ATA_SC_IPM_NONE 0x00000000
More information about the p4-projects
mailing list