Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 22377
b: refs/heads/master
c: a6cce2a
h: refs/heads/master
i:
  22375: 266ab63
v: v3
  • Loading branch information
Brian King authored and Jeff Garzik committed Mar 22, 2006
1 parent 9d0c6ca commit 078f47c
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 26 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e46834cd2ddb1e2941806cb8fec60fb6bdd2ec29
refs/heads/master: a6cce2a79deefb33354561a064f0609a3b342829
62 changes: 37 additions & 25 deletions trunk/drivers/scsi/libata-scsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 */
Expand Down

0 comments on commit 078f47c

Please sign in to comment.