|
@@ -662,6 +662,41 @@ void ata_gen_fixed_sense(struct ata_queued_cmd *qc)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void ata_scsi_sdev_config(struct scsi_device *sdev)
|
|
|
+{
|
|
|
+ sdev->use_10_for_rw = 1;
|
|
|
+ sdev->use_10_for_ms = 1;
|
|
|
+}
|
|
|
+
|
|
|
+static void ata_scsi_dev_config(struct scsi_device *sdev,
|
|
|
+ struct ata_device *dev)
|
|
|
+{
|
|
|
+ unsigned int max_sectors;
|
|
|
+
|
|
|
+ /* TODO: 2048 is an arbitrary number, not the
|
|
|
+ * hardware maximum. This should be increased to
|
|
|
+ * 65534 when Jens Axboe's patch for dynamically
|
|
|
+ * determining max_sectors is merged.
|
|
|
+ */
|
|
|
+ max_sectors = ATA_MAX_SECTORS;
|
|
|
+ if (dev->flags & ATA_DFLAG_LBA48)
|
|
|
+ max_sectors = 2048;
|
|
|
+ if (dev->max_sectors)
|
|
|
+ max_sectors = dev->max_sectors;
|
|
|
+
|
|
|
+ blk_queue_max_sectors(sdev->request_queue, max_sectors);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * SATA DMA transfers must be multiples of 4 byte, so
|
|
|
+ * we need to pad ATAPI transfers using an extra sg.
|
|
|
+ * Decrement max hw segments accordingly.
|
|
|
+ */
|
|
|
+ if (dev->class == ATA_DEV_ATAPI) {
|
|
|
+ request_queue_t *q = sdev->request_queue;
|
|
|
+ blk_queue_max_hw_segments(q, q->max_hw_segments - 1);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* ata_scsi_slave_config - Set SCSI device attributes
|
|
|
* @sdev: SCSI device to examine
|
|
@@ -676,41 +711,18 @@ void ata_gen_fixed_sense(struct ata_queued_cmd *qc)
|
|
|
|
|
|
int ata_scsi_slave_config(struct scsi_device *sdev)
|
|
|
{
|
|
|
- sdev->use_10_for_rw = 1;
|
|
|
- sdev->use_10_for_ms = 1;
|
|
|
+ ata_scsi_sdev_config(sdev);
|
|
|
|
|
|
blk_queue_max_phys_segments(sdev->request_queue, LIBATA_MAX_PRD);
|
|
|
|
|
|
if (sdev->id < ATA_MAX_DEVICES) {
|
|
|
struct ata_port *ap;
|
|
|
struct ata_device *dev;
|
|
|
- unsigned int max_sectors;
|
|
|
|
|
|
ap = (struct ata_port *) &sdev->host->hostdata[0];
|
|
|
dev = &ap->device[sdev->id];
|
|
|
|
|
|
- /* TODO: 2048 is an arbitrary number, not the
|
|
|
- * hardware maximum. This should be increased to
|
|
|
- * 65534 when Jens Axboe's patch for dynamically
|
|
|
- * determining max_sectors is merged.
|
|
|
- */
|
|
|
- max_sectors = ATA_MAX_SECTORS;
|
|
|
- if (dev->flags & ATA_DFLAG_LBA48)
|
|
|
- max_sectors = 2048;
|
|
|
- if (dev->max_sectors)
|
|
|
- max_sectors = dev->max_sectors;
|
|
|
-
|
|
|
- blk_queue_max_sectors(sdev->request_queue, max_sectors);
|
|
|
-
|
|
|
- /*
|
|
|
- * SATA DMA transfers must be multiples of 4 byte, so
|
|
|
- * we need to pad ATAPI transfers using an extra sg.
|
|
|
- * Decrement max hw segments accordingly.
|
|
|
- */
|
|
|
- if (dev->class == ATA_DEV_ATAPI) {
|
|
|
- request_queue_t *q = sdev->request_queue;
|
|
|
- blk_queue_max_hw_segments(q, q->max_hw_segments - 1);
|
|
|
- }
|
|
|
+ ata_scsi_dev_config(sdev, dev);
|
|
|
}
|
|
|
|
|
|
return 0; /* scsi layer doesn't check return value, sigh */
|