diff options
author | Jeff Garzik <jgarzik@pobox.com> | 2005-12-13 02:29:45 -0500 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-12-13 02:29:45 -0500 |
commit | 50630195bbdfe1ca775d94cd68a5f18bc1b717e4 (patch) | |
tree | ad1e44e89d714b2785fc33a5800488571db7a7c5 | |
parent | be0d9b6c7aeaad1683059c00131cabd4c894c17c (diff) |
[libata] mark certain hardware (or drivers) with a no-atapi flag
Some hardware does not support the PACKET command at all.
Other hardware supports ATAPI, but the driver does something nasty such
as calling BUG() when an ATAPI command is issued.
For these such cases, we mark them with a new flag, ATA_FLAG_NO_ATAPI.
Initial version contributed by Ben Collins.
-rw-r--r-- | drivers/scsi/libata-scsi.c | 7 | ||||
-rw-r--r-- | drivers/scsi/sata_mv.c | 3 | ||||
-rw-r--r-- | drivers/scsi/sata_promise.c | 12 | ||||
-rw-r--r-- | drivers/scsi/sata_sx4.c | 3 | ||||
-rw-r--r-- | include/linux/libata.h | 1 |
5 files changed, 16 insertions, 10 deletions
diff --git a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c index 379e87089764..72ddba98f8fb 100644 --- a/drivers/scsi/libata-scsi.c +++ b/drivers/scsi/libata-scsi.c | |||
@@ -2173,9 +2173,12 @@ ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev) | |||
2173 | if (unlikely(!ata_dev_present(dev))) | 2173 | if (unlikely(!ata_dev_present(dev))) |
2174 | return NULL; | 2174 | return NULL; |
2175 | 2175 | ||
2176 | if (!atapi_enabled) { | 2176 | if (!atapi_enabled || (ap->flags & ATA_FLAG_NO_ATAPI)) { |
2177 | if (unlikely(dev->class == ATA_DEV_ATAPI)) | 2177 | if (unlikely(dev->class == ATA_DEV_ATAPI)) { |
2178 | printk(KERN_WARNING "ata%u(%u): WARNING: ATAPI is %s, device ignored.\n", | ||
2179 | ap->id, dev->devno, atapi_enabled ? "not supported with this driver" : "disabled"); | ||
2178 | return NULL; | 2180 | return NULL; |
2181 | } | ||
2179 | } | 2182 | } |
2180 | 2183 | ||
2181 | return dev; | 2184 | return dev; |
diff --git a/drivers/scsi/sata_mv.c b/drivers/scsi/sata_mv.c index ab7432a5778e..9321cdf45680 100644 --- a/drivers/scsi/sata_mv.c +++ b/drivers/scsi/sata_mv.c | |||
@@ -86,7 +86,8 @@ enum { | |||
86 | MV_FLAG_DUAL_HC = (1 << 30), /* two SATA Host Controllers */ | 86 | MV_FLAG_DUAL_HC = (1 << 30), /* two SATA Host Controllers */ |
87 | MV_FLAG_IRQ_COALESCE = (1 << 29), /* IRQ coalescing capability */ | 87 | MV_FLAG_IRQ_COALESCE = (1 << 29), /* IRQ coalescing capability */ |
88 | MV_COMMON_FLAGS = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | | 88 | MV_COMMON_FLAGS = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | |
89 | ATA_FLAG_SATA_RESET | ATA_FLAG_MMIO), | 89 | ATA_FLAG_SATA_RESET | ATA_FLAG_MMIO | |
90 | ATA_FLAG_NO_ATAPI), | ||
90 | MV_6XXX_FLAGS = MV_FLAG_IRQ_COALESCE, | 91 | MV_6XXX_FLAGS = MV_FLAG_IRQ_COALESCE, |
91 | 92 | ||
92 | CRQB_FLAG_READ = (1 << 0), | 93 | CRQB_FLAG_READ = (1 << 0), |
diff --git a/drivers/scsi/sata_promise.c b/drivers/scsi/sata_promise.c index 8a8e3e3ef0ed..2691625f9bce 100644 --- a/drivers/scsi/sata_promise.c +++ b/drivers/scsi/sata_promise.c | |||
@@ -70,6 +70,9 @@ enum { | |||
70 | PDC_HAS_PATA = (1 << 1), /* PDC20375 has PATA */ | 70 | PDC_HAS_PATA = (1 << 1), /* PDC20375 has PATA */ |
71 | 71 | ||
72 | PDC_RESET = (1 << 11), /* HDMA reset */ | 72 | PDC_RESET = (1 << 11), /* HDMA reset */ |
73 | |||
74 | PDC_COMMON_FLAGS = ATA_FLAG_NO_LEGACY | ATA_FLAG_SRST | | ||
75 | ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI, | ||
73 | }; | 76 | }; |
74 | 77 | ||
75 | 78 | ||
@@ -162,8 +165,7 @@ static struct ata_port_info pdc_port_info[] = { | |||
162 | /* board_2037x */ | 165 | /* board_2037x */ |
163 | { | 166 | { |
164 | .sht = &pdc_ata_sht, | 167 | .sht = &pdc_ata_sht, |
165 | .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | | 168 | .host_flags = PDC_COMMON_FLAGS | ATA_FLAG_SATA, |
166 | ATA_FLAG_SRST | ATA_FLAG_MMIO, | ||
167 | .pio_mask = 0x1f, /* pio0-4 */ | 169 | .pio_mask = 0x1f, /* pio0-4 */ |
168 | .mwdma_mask = 0x07, /* mwdma0-2 */ | 170 | .mwdma_mask = 0x07, /* mwdma0-2 */ |
169 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ | 171 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ |
@@ -173,8 +175,7 @@ static struct ata_port_info pdc_port_info[] = { | |||
173 | /* board_20319 */ | 175 | /* board_20319 */ |
174 | { | 176 | { |
175 | .sht = &pdc_ata_sht, | 177 | .sht = &pdc_ata_sht, |
176 | .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | | 178 | .host_flags = PDC_COMMON_FLAGS | ATA_FLAG_SATA, |
177 | ATA_FLAG_SRST | ATA_FLAG_MMIO, | ||
178 | .pio_mask = 0x1f, /* pio0-4 */ | 179 | .pio_mask = 0x1f, /* pio0-4 */ |
179 | .mwdma_mask = 0x07, /* mwdma0-2 */ | 180 | .mwdma_mask = 0x07, /* mwdma0-2 */ |
180 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ | 181 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ |
@@ -184,8 +185,7 @@ static struct ata_port_info pdc_port_info[] = { | |||
184 | /* board_20619 */ | 185 | /* board_20619 */ |
185 | { | 186 | { |
186 | .sht = &pdc_ata_sht, | 187 | .sht = &pdc_ata_sht, |
187 | .host_flags = ATA_FLAG_NO_LEGACY | ATA_FLAG_SRST | | 188 | .host_flags = PDC_COMMON_FLAGS | ATA_FLAG_SLAVE_POSS, |
188 | ATA_FLAG_MMIO | ATA_FLAG_SLAVE_POSS, | ||
189 | .pio_mask = 0x1f, /* pio0-4 */ | 189 | .pio_mask = 0x1f, /* pio0-4 */ |
190 | .mwdma_mask = 0x07, /* mwdma0-2 */ | 190 | .mwdma_mask = 0x07, /* mwdma0-2 */ |
191 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ | 191 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ |
diff --git a/drivers/scsi/sata_sx4.c b/drivers/scsi/sata_sx4.c index dcc3ad9a9d6e..ac7b0d819ebc 100644 --- a/drivers/scsi/sata_sx4.c +++ b/drivers/scsi/sata_sx4.c | |||
@@ -220,7 +220,8 @@ static struct ata_port_info pdc_port_info[] = { | |||
220 | { | 220 | { |
221 | .sht = &pdc_sata_sht, | 221 | .sht = &pdc_sata_sht, |
222 | .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | | 222 | .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | |
223 | ATA_FLAG_SRST | ATA_FLAG_MMIO, | 223 | ATA_FLAG_SRST | ATA_FLAG_MMIO | |
224 | ATA_FLAG_NO_ATAPI, | ||
224 | .pio_mask = 0x1f, /* pio0-4 */ | 225 | .pio_mask = 0x1f, /* pio0-4 */ |
225 | .mwdma_mask = 0x07, /* mwdma0-2 */ | 226 | .mwdma_mask = 0x07, /* mwdma0-2 */ |
226 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ | 227 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ |
diff --git a/include/linux/libata.h b/include/linux/libata.h index f2dbb684ce9e..41ea7dbc1755 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -122,6 +122,7 @@ enum { | |||
122 | ATA_FLAG_NOINTR = (1 << 9), /* FIXME: Remove this once | 122 | ATA_FLAG_NOINTR = (1 << 9), /* FIXME: Remove this once |
123 | * proper HSM is in place. */ | 123 | * proper HSM is in place. */ |
124 | ATA_FLAG_DEBUGMSG = (1 << 10), | 124 | ATA_FLAG_DEBUGMSG = (1 << 10), |
125 | ATA_FLAG_NO_ATAPI = (1 << 11), /* No ATAPI support */ | ||
125 | 126 | ||
126 | ATA_QCFLAG_ACTIVE = (1 << 1), /* cmd not yet ack'd to scsi lyer */ | 127 | ATA_QCFLAG_ACTIVE = (1 << 1), /* cmd not yet ack'd to scsi lyer */ |
127 | ATA_QCFLAG_SG = (1 << 3), /* have s/g table? */ | 128 | ATA_QCFLAG_SG = (1 << 3), /* have s/g table? */ |