aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/pata_cmd64x.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ata/pata_cmd64x.c')
-rw-r--r--drivers/ata/pata_cmd64x.c31
1 files changed, 15 insertions, 16 deletions
diff --git a/drivers/ata/pata_cmd64x.c b/drivers/ata/pata_cmd64x.c
index f0dcb7056b1..d4f26a515ef 100644
--- a/drivers/ata/pata_cmd64x.c
+++ b/drivers/ata/pata_cmd64x.c
@@ -33,7 +33,7 @@
33#include <linux/libata.h> 33#include <linux/libata.h>
34 34
35#define DRV_NAME "pata_cmd64x" 35#define DRV_NAME "pata_cmd64x"
36#define DRV_VERSION "0.2.16" 36#define DRV_VERSION "0.2.17"
37 37
38/* 38/*
39 * CMD64x specific registers definition. 39 * CMD64x specific registers definition.
@@ -230,41 +230,39 @@ static void cmd64x_set_dmamode(struct ata_port *ap, struct ata_device *adev)
230} 230}
231 231
232/** 232/**
233 * cmd64x_bmdma_stop - DMA stop callback 233 * cmd64x_sff_irq_clear - clear IDE interrupt
234 * @qc: Command in progress 234 * @ap: ATA interface
235 * 235 *
236 * DMA has completed. 236 * Clear IDE interrupt in CFR/ARTTIM23 and DMA status registers.
237 */ 237 */
238 238
239static void cmd64x_bmdma_stop(struct ata_queued_cmd *qc) 239static void cmd64x_sff_irq_clear(struct ata_port *ap)
240{ 240{
241 struct ata_port *ap = qc->ap;
242 struct pci_dev *pdev = to_pci_dev(ap->host->dev); 241 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
243 int irq_reg = ap->port_no ? ARTTIM23 : CFR; 242 int irq_reg = ap->port_no ? ARTTIM23 : CFR;
244 u8 irq_stat; 243 u8 irq_stat;
245 244
246 ata_bmdma_stop(qc); 245 ata_bmdma_irq_clear(ap);
247 246
248 /* Reading the register should be enough to clear the interrupt */ 247 /* Reading the register should be enough to clear the interrupt */
249 pci_read_config_byte(pdev, irq_reg, &irq_stat); 248 pci_read_config_byte(pdev, irq_reg, &irq_stat);
250} 249}
251 250
252/** 251/**
253 * cmd648_bmdma_stop - DMA stop callback 252 * cmd648_sff_irq_clear - clear IDE interrupt
254 * @qc: Command in progress 253 * @ap: ATA interface
255 * 254 *
256 * DMA has completed. 255 * Clear IDE interrupt in MRDMODE and DMA status registers.
257 */ 256 */
258 257
259static void cmd648_bmdma_stop(struct ata_queued_cmd *qc) 258static void cmd648_sff_irq_clear(struct ata_port *ap)
260{ 259{
261 struct ata_port *ap = qc->ap;
262 struct pci_dev *pdev = to_pci_dev(ap->host->dev); 260 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
263 unsigned long base = pci_resource_start(pdev, 4); 261 unsigned long base = pci_resource_start(pdev, 4);
264 int irq_mask = ap->port_no ? MRDMODE_INTR_CH1 : MRDMODE_INTR_CH0; 262 int irq_mask = ap->port_no ? MRDMODE_INTR_CH1 : MRDMODE_INTR_CH0;
265 u8 mrdmode; 263 u8 mrdmode;
266 264
267 ata_bmdma_stop(qc); 265 ata_bmdma_irq_clear(ap);
268 266
269 /* Clear this port's interrupt bit (leaving the other port alone) */ 267 /* Clear this port's interrupt bit (leaving the other port alone) */
270 mrdmode = inb(base + 1); 268 mrdmode = inb(base + 1);
@@ -296,25 +294,26 @@ static const struct ata_port_operations cmd64x_base_ops = {
296 294
297static struct ata_port_operations cmd64x_port_ops = { 295static struct ata_port_operations cmd64x_port_ops = {
298 .inherits = &cmd64x_base_ops, 296 .inherits = &cmd64x_base_ops,
299 .bmdma_stop = cmd64x_bmdma_stop, 297 .sff_irq_clear = cmd64x_sff_irq_clear,
300 .cable_detect = ata_cable_40wire, 298 .cable_detect = ata_cable_40wire,
301}; 299};
302 300
303static struct ata_port_operations cmd646r1_port_ops = { 301static struct ata_port_operations cmd646r1_port_ops = {
304 .inherits = &cmd64x_base_ops, 302 .inherits = &cmd64x_base_ops,
303 .sff_irq_clear = cmd64x_sff_irq_clear,
305 .bmdma_stop = cmd646r1_bmdma_stop, 304 .bmdma_stop = cmd646r1_bmdma_stop,
306 .cable_detect = ata_cable_40wire, 305 .cable_detect = ata_cable_40wire,
307}; 306};
308 307
309static struct ata_port_operations cmd646r3_port_ops = { 308static struct ata_port_operations cmd646r3_port_ops = {
310 .inherits = &cmd64x_base_ops, 309 .inherits = &cmd64x_base_ops,
311 .bmdma_stop = cmd648_bmdma_stop, 310 .sff_irq_clear = cmd648_sff_irq_clear,
312 .cable_detect = ata_cable_40wire, 311 .cable_detect = ata_cable_40wire,
313}; 312};
314 313
315static struct ata_port_operations cmd648_port_ops = { 314static struct ata_port_operations cmd648_port_ops = {
316 .inherits = &cmd64x_base_ops, 315 .inherits = &cmd64x_base_ops,
317 .bmdma_stop = cmd648_bmdma_stop, 316 .sff_irq_clear = cmd648_sff_irq_clear,
318 .cable_detect = cmd648_cable_detect, 317 .cable_detect = cmd648_cable_detect,
319}; 318};
320 319