aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/scsi/libata-scsi.c62
1 files changed, 37 insertions, 25 deletions
diff --git a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c
index cebf9b31b516..fc547ca295fa 100644
--- a/drivers/scsi/libata-scsi.c
+++ b/drivers/scsi/libata-scsi.c
@@ -662,6 +662,41 @@ void ata_gen_fixed_sense(struct ata_queued_cmd *qc)
662 } 662 }
663} 663}
664 664
665static void ata_scsi_sdev_config(struct scsi_device *sdev)
666{
667 sdev->use_10_for_rw = 1;
668 sdev->use_10_for_ms = 1;
669}
670
671static void ata_scsi_dev_config(struct scsi_device *sdev,
672 struct ata_device *dev)
673{
674 unsigned int max_sectors;
675
676 /* TODO: 2048 is an arbitrary number, not the
677 * hardware maximum. This should be increased to
678 * 65534 when Jens Axboe's patch for dynamically
679 * determining max_sectors is merged.
680 */
681 max_sectors = ATA_MAX_SECTORS;
682 if (dev->flags & ATA_DFLAG_LBA48)
683 max_sectors = 2048;
684 if (dev->max_sectors)
685 max_sectors = dev->max_sectors;
686
687 blk_queue_max_sectors(sdev->request_queue, max_sectors);
688
689 /*
690 * SATA DMA transfers must be multiples of 4 byte, so
691 * we need to pad ATAPI transfers using an extra sg.
692 * Decrement max hw segments accordingly.
693 */
694 if (dev->class == ATA_DEV_ATAPI) {
695 request_queue_t *q = sdev->request_queue;
696 blk_queue_max_hw_segments(q, q->max_hw_segments - 1);
697 }
698}
699
665/** 700/**
666 * ata_scsi_slave_config - Set SCSI device attributes 701 * ata_scsi_slave_config - Set SCSI device attributes
667 * @sdev: SCSI device to examine 702 * @sdev: SCSI device to examine
@@ -676,41 +711,18 @@ void ata_gen_fixed_sense(struct ata_queued_cmd *qc)
676 711
677int ata_scsi_slave_config(struct scsi_device *sdev) 712int ata_scsi_slave_config(struct scsi_device *sdev)
678{ 713{
679 sdev->use_10_for_rw = 1; 714 ata_scsi_sdev_config(sdev);
680 sdev->use_10_for_ms = 1;
681 715
682 blk_queue_max_phys_segments(sdev->request_queue, LIBATA_MAX_PRD); 716 blk_queue_max_phys_segments(sdev->request_queue, LIBATA_MAX_PRD);
683 717
684 if (sdev->id < ATA_MAX_DEVICES) { 718 if (sdev->id < ATA_MAX_DEVICES) {
685 struct ata_port *ap; 719 struct ata_port *ap;
686 struct ata_device *dev; 720 struct ata_device *dev;
687 unsigned int max_sectors;
688 721
689 ap = (struct ata_port *) &sdev->host->hostdata[0]; 722 ap = (struct ata_port *) &sdev->host->hostdata[0];
690 dev = &ap->device[sdev->id]; 723 dev = &ap->device[sdev->id];
691 724
692 /* TODO: 2048 is an arbitrary number, not the 725 ata_scsi_dev_config(sdev, dev);
693 * hardware maximum. This should be increased to
694 * 65534 when Jens Axboe's patch for dynamically
695 * determining max_sectors is merged.
696 */
697 max_sectors = ATA_MAX_SECTORS;
698 if (dev->flags & ATA_DFLAG_LBA48)
699 max_sectors = 2048;
700 if (dev->max_sectors)
701 max_sectors = dev->max_sectors;
702
703 blk_queue_max_sectors(sdev->request_queue, max_sectors);
704
705 /*
706 * SATA DMA transfers must be multiples of 4 byte, so
707 * we need to pad ATAPI transfers using an extra sg.
708 * Decrement max hw segments accordingly.
709 */
710 if (dev->class == ATA_DEV_ATAPI) {
711 request_queue_t *q = sdev->request_queue;
712 blk_queue_max_hw_segments(q, q->max_hw_segments - 1);
713 }
714 } 726 }
715 727
716 return 0; /* scsi layer doesn't check return value, sigh */ 728 return 0; /* scsi layer doesn't check return value, sigh */