From: Jeff Garzik Date: Mon, 13 Feb 2006 05:13:48 +0000 (-0500) Subject: Merge branch 'upstream' X-Git-Tag: v2.6.18-rc1~1079^2~98^2~13^2~43 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=3875e1945b55f0eb83fe7359614a801eeb716761;p=linux-2.6-omap-h63xx.git Merge branch 'upstream' --- 3875e1945b55f0eb83fe7359614a801eeb716761 diff --cc drivers/scsi/libata-core.c index bfe0a00b113,61cba39a683..5ab220e9907 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c @@@ -1045,13 -1087,7 +1080,12 @@@ retry } - dev->cdb_len = 16; + if (dev->id[59] & 0x100) { + dev->multi_count = dev->id[59] & 0xff; + DPRINTK("ata%u: dev %u multi count %u\n", + ap->id, device, dev->multi_count); + } + - ap->host->max_cmd_len = 16; } /* ATAPI-specific feature tests */ @@@ -1064,12 -1100,8 +1098,11 @@@ printk(KERN_WARNING "ata%u: unsupported CDB len\n", ap->id); goto err_out_nosup; } - ap->cdb_len = (unsigned int) rc; - ap->host->max_cmd_len = (unsigned char) ap->cdb_len; + dev->cdb_len = (unsigned int) rc; + if (ata_id_cdb_intr(dev->id)) + dev->flags |= ATA_DFLAG_CDB_INTR; + /* print device info to dmesg */ printk(KERN_INFO "ata%u: dev %u ATAPI, max %s\n", ap->id, device, diff --cc include/linux/ata.h index 8e88efc565b,b02a16c435e..469952366ed --- a/include/linux/ata.h +++ b/include/linux/ata.h @@@ -268,8 -267,16 +268,18 @@@ struct ata_taskfile ((u64) (id)[(n) + 1] << 16) | \ ((u64) (id)[(n) + 0]) ) +#define ata_id_cdb_intr(id) (((id)[0] & 0x60) == 0x20) + + static inline unsigned int ata_id_major_version(const u16 *id) + { + unsigned int mver; + + for (mver = 14; mver >= 1; mver--) + if (id[ATA_ID_MAJOR_VER] & (1 << mver)) + break; + return mver; + } + static inline int ata_id_current_chs_valid(const u16 *id) { /* For ATA-1 devices, if the INITIALIZE DEVICE PARAMETERS command diff --cc include/linux/libata.h index 9873f4c54f1,afe46457124..67d07c44b2e --- a/include/linux/libata.h +++ b/include/linux/libata.h @@@ -122,9 -122,7 +122,8 @@@ enum /* struct ata_device stuff */ ATA_DFLAG_LBA48 = (1 << 0), /* device supports LBA48 */ ATA_DFLAG_PIO = (1 << 1), /* device currently in PIO mode */ - ATA_DFLAG_LOCK_SECTORS = (1 << 2), /* don't adjust max_sectors */ - ATA_DFLAG_LBA = (1 << 3), /* device supports LBA */ - ATA_DFLAG_CDB_INTR = (1 << 4), /* device asserts INTRQ when ready for CDB */ + ATA_DFLAG_LBA = (1 << 2), /* device supports LBA */ ++ ATA_DFLAG_CDB_INTR = (1 << 3), /* device asserts INTRQ when ready for CDB */ ATA_DEV_UNKNOWN = 0, /* unknown device */ ATA_DEV_ATA = 1, /* ATA device */