Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 9922
b: refs/heads/master
c: 0750669
h: refs/heads/master
v: v3
  • Loading branch information
Albert Lee authored and Jeff Garzik committed Oct 18, 2005
1 parent 9114cd5 commit 4580678
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 25 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: 5a476deff3d17093da39c4eccb2692ba714dcb11
refs/heads/master: 07506697d1c615924298406f2357810709c09bcd
7 changes: 0 additions & 7 deletions trunk/drivers/scsi/libata-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -3195,13 +3195,6 @@ struct ata_queued_cmd *ata_qc_new_init(struct ata_port *ap,
qc->nbytes = qc->curbytes = 0;

ata_tf_init(ap, &qc->tf, dev->devno);

if (dev->flags & ATA_DFLAG_LBA) {
qc->tf.flags |= ATA_TFLAG_LBA;

if (dev->flags & ATA_DFLAG_LBA48)
qc->tf.flags |= ATA_TFLAG_LBA48;
}
}

return qc;
Expand Down
42 changes: 25 additions & 17 deletions trunk/drivers/scsi/libata-scsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,7 @@ static unsigned int ata_scsi_flush_xlat(struct ata_queued_cmd *qc, u8 *scsicmd)
tf->flags |= ATA_TFLAG_DEVICE;
tf->protocol = ATA_PROT_NODATA;

if ((tf->flags & ATA_TFLAG_LBA48) &&
if ((qc->dev->flags & ATA_DFLAG_LBA48) &&
(ata_id_has_flush_ext(qc->dev->id)))
tf->command = ATA_CMD_FLUSH_EXT;
else
Expand Down Expand Up @@ -612,8 +612,6 @@ static unsigned int ata_scsi_verify_xlat(struct ata_queued_cmd *qc, u8 *scsicmd)
{
struct ata_taskfile *tf = &qc->tf;
struct ata_device *dev = qc->dev;
unsigned int lba = tf->flags & ATA_TFLAG_LBA;
unsigned int lba48 = tf->flags & ATA_TFLAG_LBA48;
u64 dev_sectors = qc->dev->n_sectors;
u64 block;
u32 n_block;
Expand All @@ -634,16 +632,16 @@ static unsigned int ata_scsi_verify_xlat(struct ata_queued_cmd *qc, u8 *scsicmd)
goto out_of_range;
if ((block + n_block) > dev_sectors)
goto out_of_range;
if (lba48) {
if (n_block > (64 * 1024))
goto invalid_fld;
} else {
if (n_block > 256)
goto invalid_fld;
}

if (lba) {
if (lba48) {
if (dev->flags & ATA_DFLAG_LBA) {
tf->flags |= ATA_TFLAG_LBA;

if (dev->flags & ATA_DFLAG_LBA48) {
if (n_block > (64 * 1024))
goto invalid_fld;

/* use LBA48 */
tf->flags |= ATA_TFLAG_LBA48;
tf->command = ATA_CMD_VERIFY_EXT;

tf->hob_nsect = (n_block >> 8) & 0xff;
Expand All @@ -652,6 +650,10 @@ static unsigned int ata_scsi_verify_xlat(struct ata_queued_cmd *qc, u8 *scsicmd)
tf->hob_lbam = (block >> 32) & 0xff;
tf->hob_lbal = (block >> 24) & 0xff;
} else {
if (n_block > 256)
goto invalid_fld;

/* use LBA28 */
tf->command = ATA_CMD_VERIFY;

tf->device |= (block >> 24) & 0xf;
Expand All @@ -668,6 +670,9 @@ static unsigned int ata_scsi_verify_xlat(struct ata_queued_cmd *qc, u8 *scsicmd)
/* CHS */
u32 sect, head, cyl, track;

if (n_block > 256)
goto invalid_fld;

/* Convert LBA to CHS */
track = (u32)block / dev->sectors;
cyl = track / dev->heads;
Expand Down Expand Up @@ -733,8 +738,6 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc, u8 *scsicmd)
{
struct ata_taskfile *tf = &qc->tf;
struct ata_device *dev = qc->dev;
unsigned int lba = tf->flags & ATA_TFLAG_LBA;
unsigned int lba48 = tf->flags & ATA_TFLAG_LBA48;
u64 block;
u32 n_block;

Expand Down Expand Up @@ -783,19 +786,24 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc, u8 *scsicmd)
*/
goto nothing_to_do;

if (lba) {
if (lba48) {
if (dev->flags & ATA_DFLAG_LBA) {
tf->flags |= ATA_TFLAG_LBA;

if (dev->flags & ATA_DFLAG_LBA48) {
/* The request -may- be too large for LBA48. */
if ((block >> 48) || (n_block > 65536))
goto out_of_range;

/* use LBA48 */
tf->flags |= ATA_TFLAG_LBA48;

tf->hob_nsect = (n_block >> 8) & 0xff;

tf->hob_lbah = (block >> 40) & 0xff;
tf->hob_lbam = (block >> 32) & 0xff;
tf->hob_lbal = (block >> 24) & 0xff;
} else {
/* LBA28 */
/* use LBA28 */

/* The request -may- be too large for LBA28. */
if ((block >> 28) || (n_block > 256))
Expand Down

0 comments on commit 4580678

Please sign in to comment.